﻿(function(){var aa="_gat",ba="_gaq",r=true,v=false,w=undefined,ca="4.6.5",x="length",y="cookie",A="location",B="&",C="=",D="__utma=",E="__utmb=",G="__utmc=",da="__utmk=",H="__utmv=",J="__utmz=",K="__utmx=",L="GASO=";var N=function(i){return w==i||"-"==i||""==i},ea=function(i){return i[x]>0&&" \n\r\t".indexOf(i)>-1},P=function(i,l,g){var t="-",k;if(!N(i)&&!N(l)&&!N(g)){k=i.indexOf(l);if(k>-1){g=i.indexOf(g,k);if(g<0)g=i[x];t=O(i,k+l.indexOf(C)+1,g)}}return t},Q=function(i){var l=v,g=0,t,k;if(!N(i)){l=r;for(t=0;t<i[x];t++){k=i.charAt(t);g+="."==k?1:0;l=l&&g<=1&&(0==t&&"-"==k||".0123456789".indexOf(k)>-1)}}return l},S=function(i,l){var g=encodeURIComponent;return g instanceof Function?l?encodeURI(i):g(i):escape(i)},
T=function(i,l){var g=decodeURIComponent,t;i=i.split("+").join(" ");if(g instanceof Function)try{t=l?decodeURI(i):g(i)}catch(k){t=unescape(i)}else t=unescape(i);return t},U=function(i,l){return i.indexOf(l)>-1},V=function(i,l){i[i[x]]=l},W=function(i){return i.toLowerCase()},X=function(i,l){return i.split(l)},fa=function(i,l){return i.indexOf(l)},O=function(i,l,g){g=w==g?i[x]:g;return i.substring(l,g)},ga=function(i,l){return i.join(l)},ia=function(i){var l=1,g=0,t;if(!N(i)){l=0;for(t=i[x]-1;t>=0;t--){g=
i.charCodeAt(t);l=(l<<6&268435455)+g+(g<<14);g=l&266338304;l=g!=0?l^g>>21:l}}return l},ja=function(){var i=window,l=w;if(i&&i.gaGlobal&&i.gaGlobal.hid)l=i.gaGlobal.hid;else{l=Y();i.gaGlobal=i.gaGlobal?i.gaGlobal:{};i.gaGlobal.hid=l}return l},Y=function(){return Math.round(Math.random()*2147483647)},Z={Ha:function(i,l){this.bb=i;this.nb=l},ib:v,_gasoDomain:w,_gasoCPath:w};Z.Gb=function(){function i(k){return new t(k[0],k[1])}function l(k){var p=[];k=k.split(",");var f;for(f=0;f<k.length;++f)p.push(i(k[f].split(":")));return p}var g=this,t=Z.Ha;g.Ia="utm_campaign";g.Ja="utm_content";g.Ka="utm_id";g.La="utm_medium";g.Ma="utm_nooverride";g.Na="utm_source";g.Oa="utm_term";g.Pa="gclid";g.ba=0;g.z=0;g.Ta=15768E6;g.sb=18E5;g.v=63072E6;g.ta=[];g.va=[];g.nc="cse";g.oc="q";g.ob=5;g.T=l("daum:q,eniro:search_word,naver:query,images.google:q,google:q,yahoo:p,msn:q,bing:q,aol:query,aol:encquery,lycos:query,ask:q,altavista:q,netscape:query,cnn:query,about:terms,mamma:query,alltheweb:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,aol:q,mama:query,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,pchome:q,kvasir:q,sesam:q,ozu:q,terra:query,mynet:q,ekolay:q,rambler:words");
g.t=w;g.lb=v;g.h="/";g.U=100;g.oa="/__utm.gif";g.ga=1;g.ha=1;g.u="|";g.fa=1;g.da=1;g.Ra=1;g.b="auto";g.I=1;g.ra=1E3;g.Jc=10;g.Pb=10;g.Kc=0.2;g.o=w;g.a=document;g.e=window};Z.Hb=function(i){function l(d,a,j,c){var n="",s=0;n=P(d,"2"+a,";");if(!N(n)){d=n.indexOf("^"+j+".");if(d<0)return["",0];n=O(n,d+j[x]+2);if(n.indexOf("^")>0)n=n.split("^")[0];j=n.split(":");n=j[1];s=parseInt(j[0],10);if(!c&&s<p.r)n=""}if(N(n))n="";return[n,s]}function g(d,a){return"^"+ga([[a,d[1]].join("."),d[0]],":")}function t(d,a){f.a[y]=d+"; path="+f.h+"; "+a+p.fb()}function k(d){var a=new Date;d=new Date(a.getTime()+d);return"expires="+d.toGMTString()+"; "}var p=this,f=i;p.r=(new Date).getTime();
var h=[D,E,G,J,H,K,L];p.k=function(){var d=f.a[y];return f.o?p.Wb(d,f.o):d};p.Wb=function(d,a){var j=[],c,n;for(c=0;c<h[x];c++){n=l(d,h[c],a)[0];N(n)||(j[j[x]]=h[c]+n+";")}return j.join("")};p.l=function(d,a,j){var c=j>0?k(j):"";if(f.o){a=p.kc(f.a[y],d,f.o,a,j);d="2"+d;c=j>0?k(f.v):""}t(d+a,c)};p.kc=function(d,a,j,c,n){var s="";n=n||f.v;c=g([c,p.r+n*1],j);s=P(d,"2"+a,";");if(!N(s)){d=g(l(d,a,j,r),j);s=ga(s.split(d),"");return s=c+s}return c};p.fb=function(){return N(f.b)?"":"domain="+f.b+";"}};Z.$=function(i){function l(b){b=b instanceof Array?b.join("."):"";return N(b)?"-":b}function g(b,e){var o=[];if(!N(b)){o=b.split(".");if(e)for(b=0;b<o[x];b++)Q(o[b])||(o[b]="-")}return o}function t(b,e,o){var m=c.M,q,u;for(q=0;q<m[x];q++){u=m[q][0];u+=N(e)?e:e+m[q][4];m[q][2](P(b,u,o))}}var k,p,f,h,d,a,j,c=this,n,s=i;c.j=new Z.Hb(i);c.kb=function(){return w==n||n==c.P()};c.k=function(){return c.j.k()};c.ma=function(){return d?d:"-"};c.vb=function(b){d=b};c.za=function(b){n=Q(b)?b*1:"-"};c.la=function(){return l(a)};
c.Aa=function(b){a=g(b)};c.Vb=function(){c.j.l(H,"",-1)};c.lc=function(){return n?n:"-"};c.fb=function(){return N(s.b)?"":"domain="+s.b+";"};c.ja=function(){return l(k)};c.tb=function(b){k=g(b,1)};c.C=function(){return l(p)};c.ya=function(b){p=g(b,1)};c.ka=function(){return l(f)};c.ub=function(b){f=g(b,1)};c.na=function(){return l(h)};c.wb=function(b){h=g(b);for(b=0;b<h[x];b++)if(b<4&&!Q(h[b]))h[b]="-"};c.fc=function(){return j};c.Dc=function(b){j=b};c.Sb=function(){k=[];p=[];f=[];h=[];d=w;a=[];n=
w};c.P=function(){var b="",e;for(e=0;e<c.M[x];e++)b+=c.M[e][1]();return ia(b)};c.ua=function(b){var e=c.k(),o=v;if(e){t(e,b,";");c.za(c.P());o=r}return o};c.zc=function(b){t(b,"",B);c.za(P(b,da,B))};c.Hc=function(){var b=c.M,e=[],o;for(o=0;o<b[x];o++)V(e,b[o][0]+b[o][1]());V(e,da+c.P());return e.join(B)};c.Nc=function(b,e){var o=c.M,m=s.h;c.ua(b);s.h=e;for(b=0;b<o[x];b++)N(o[b][1]())||o[b][3]();s.h=m};c.Cb=function(){c.j.l(D,c.ja(),s.v)};c.Ea=function(){c.j.l(E,c.C(),s.sb)};c.Db=function(){c.j.l(G,
c.ka(),0)};c.Ga=function(){c.j.l(J,c.na(),s.Ta)};c.Eb=function(){c.j.l(K,c.ma(),s.v)};c.Fa=function(){c.j.l(H,c.la(),s.v)};c.Oc=function(){c.j.l(L,c.fc(),0)};c.M=[[D,c.ja,c.tb,c.Cb,"."],[E,c.C,c.ya,c.Ea,""],[G,c.ka,c.ub,c.Db,""],[K,c.ma,c.vb,c.Eb,""],[J,c.na,c.wb,c.Ga,"."],[H,c.la,c.Aa,c.Fa,"."]]};Z.Kb=function(i){var l=this,g=i,t=new Z.$(g),k=function(){},p=function(f){var h=(new Date).getTime(),d;d=(h-f[3])*(g.Kc/1E3);if(d>=1){f[2]=Math.min(Math.floor(f[2]*1+d),g.Pb);f[3]=h}return f};l.H=function(f,h,d,a,j,c){var n,s=g.I,b=g.a[A];t.ua(d);n=X(t.C(),".");if(n[1]<500||a){if(j)n=p(n);if(a||!j||n[2]>=1){if(!a&&j)n[2]=n[2]*1-1;n[1]=n[1]*1+1;f="?utmwv="+ca+"&utmn="+Y()+(N(b.hostname)?"":"&utmhn="+S(b.hostname))+(g.U==100?"":"&utmsp="+S(g.U))+f;if(0==s||2==s){a=2==s?k:c||k;l.$a(g.oa+f,a)}if(1==s||
2==s){f=("https:"==b.protocol?"https://ssl.google-analytics.com/__utm.gif":"http://www.google-analytics.com/__utm.gif")+f+"&utmac="+h+"&utmcc="+l.ac(d);if(ka)f+="&gaq=1";l.$a(f,c)}}}t.ya(n.join("."));t.Ea()};l.$a=function(f,h){var d=new Image(1,1);d.src=f;d.onload=function(){d.onload=null;(h||k)()}};l.ac=function(f){var h=[],d=[D,J,H,K],a,j=t.k(),c;for(a=0;a<d[x];a++){c=P(j,d[a]+f,";");if(!N(c)){if(d[a]==H){c=X(c.split(f+".")[1],"|")[0];if(N(c))continue;c=f+"."+c}V(h,d[a]+c+";")}}return S(h.join("+"))}};Z.n=function(){var i=this;i.Y=[];i.hb=function(l){var g,t=i.Y,k;for(k=0;k<t.length;k++)g=l==t[k].q?t[k]:g;return g};i.Ob=function(l,g,t,k,p,f,h,d){var a=i.hb(l);if(w==a){a=new Z.n.Mb(l,g,t,k,p,f,h,d);V(i.Y,a)}else{a.Qa=g;a.Ab=t;a.zb=k;a.xb=p;a.Xa=f;a.yb=h;a.Za=d}return a}};Z.n.Lb=function(i,l,g,t,k,p){var f=this;f.Bb=i;f.Ba=l;f.D=g;f.Va=t;f.pb=k;f.qb=p;f.Ca=function(){return"&"+["utmt=item","tid="+S(f.Bb),"ipc="+S(f.Ba),"ipn="+S(f.D),"iva="+S(f.Va),"ipr="+S(f.pb),"iqt="+S(f.qb)].join("&utm")}};
Z.n.Mb=function(i,l,g,t,k,p,f,h){var d=this;d.q=i;d.Qa=l;d.Ab=g;d.zb=t;d.xb=k;d.Xa=p;d.yb=f;d.Za=h;d.R=[];d.Nb=function(a,j,c,n,s){var b=d.gc(a),e=d.q;if(w==b)V(d.R,new Z.n.Lb(e,a,j,c,n,s));else{b.Bb=e;b.Ba=a;b.D=j;b.Va=c;b.pb=n;b.qb=s}};d.gc=function(a){var j,c=d.R,n;for(n=0;n<c.length;n++)j=a==c[n].Ba?c[n]:j;return j};d.Ca=function(){return"&"+["utmt=tran","id="+S(d.q),"st="+S(d.Qa),"to="+S(d.Ab),"tx="+S(d.zb),"sp="+S(d.xb),"ci="+S(d.Xa),"rg="+S(d.yb),"co="+S(d.Za)].join("&utmt")}};Z.Fb=function(i){function l(){var f,h,d;h="ShockwaveFlash";var a="$version",j=k.d?k.d.plugins:w;if(j&&j[x]>0)for(f=0;f<j[x]&&!d;f++){h=j[f];if(U(h.name,"Shockwave Flash"))d=h.description.split("Shockwave Flash ")[1]}else{h=h+"."+h;try{f=new ActiveXObject(h+".7");d=f.GetVariable(a)}catch(c){}if(!d)try{f=new ActiveXObject(h+".6");d="WIN 6,0,21,0";f.AllowScriptAccess="always";d=f.GetVariable(a)}catch(n){}if(!d)try{f=new ActiveXObject(h);d=f.GetVariable(a)}catch(s){}if(d){d=X(d.split(" ")[1],",");d=d[0]+
"."+d[1]+" r"+d[2]}}return d?d:p}var g=i,t=g.e,k=this,p="-";k.V=t.screen;k.Sa=!k.V&&t.java?java.awt.Toolkit.getDefaultToolkit():w;k.d=t.navigator;k.W=p;k.xa=p;k.Wa=p;k.qa=p;k.pa=1;k.eb=p;k.bc=function(){var f;if(t.screen){k.W=k.V.width+"x"+k.V.height;k.xa=k.V.colorDepth+"-bit"}else if(k.Sa)try{f=k.Sa.getScreenSize();k.W=f.width+"x"+f.height}catch(h){}k.qa=W(k.d&&k.d.language?k.d.language:k.d&&k.d.browserLanguage?k.d.browserLanguage:p);k.pa=k.d&&k.d.javaEnabled()?1:0;k.eb=g.ha?l():p;k.Wa=S(g.a.characterSet?
g.a.characterSet:g.a.charset?g.a.charset:p)};k.Ic=function(){return B+"utm"+["cs="+S(k.Wa),"sr="+k.W,"sc="+k.xa,"ul="+k.qa,"je="+k.pa,"fl="+S(k.eb)].join("&utm")};k.$b=function(){var f=g.a,h=t.history[x];f=k.d.appName+k.d.version+k.qa+k.d.platform+k.d.userAgent+k.pa+k.W+k.xa+(f[y]?f[y]:"")+(f.referrer?f.referrer:"");for(var d=f[x];h>0;)f+=h--^d++;return ia(f)}};Z.m=function(i,l,g,t){function k(d){var a="";d=W(d.split("://")[1]);if(U(d,"/")){d=d.split("/")[1];if(U(d,"?"))a=d.split("?")[0]}return a}function p(d){var a="";a=W(d.split("://")[1]);if(U(a,"/"))a=a.split("/")[0];return a}var f=t,h=this;h.c=i;h.rb=l;h.r=g;h.ic=function(d){var a=h.gb();return new Z.m.w(P(d,f.Ka+C,B),P(d,f.Na+C,B),P(d,f.Pa+C,B),h.Q(d,f.Ia,"(not set)"),h.Q(d,f.La,"(not set)"),h.Q(d,f.Oa,a&&!N(a.K)?T(a.K):w),h.Q(d,f.Ja,w))};h.jb=function(d){var a=p(d),j=k(d);if(U(a,"google")){d=d.split("?").join(B);
if(U(d,B+f.oc+C))if(j==f.nc)return r}return v};h.gb=function(){var d,a=h.rb,j,c,n=f.T;if(!(N(a)||"0"==a||!U(a,"://")||h.jb(a))){d=p(a);for(j=0;j<n[x];j++){c=n[j];if(U(d,W(c.bb))){a=a.split("?").join(B);if(U(a,B+c.nb+C)){d=a.split(B+c.nb+C)[1];if(U(d,B))d=d.split(B)[0];return new Z.m.w(w,c.bb,w,"(organic)","organic",d,w)}}}}};h.Q=function(d,a,j){d=P(d,a+C,B);return j=!N(d)?T(d):!N(j)?j:"-"};h.uc=function(d){var a=f.ta,j=v,c;if(d&&"organic"==d.S){d=W(T(d.K));for(c=0;c<a[x];c++)j=j||W(a[c])==d}return j};
h.hc=function(){var d="",a="";d=h.rb;if(!(N(d)||"0"==d||!U(d,"://")||h.jb(d))){d=d.split("://")[1];if(U(d,"/")){a=O(d,d.indexOf("/"));a=a.split("?")[0];d=W(d.split("/")[0])}if(0==d.indexOf("www."))d=O(d,4);return new Z.m.w(w,d,w,"(referral)","referral",w,a)}};h.Xb=function(d){var a="";if(f.ba){a=d&&d.hash?d.href.substring(d.href.indexOf("#")):"";a=""!=a?a+B:a}a+=d.search;return a};h.dc=function(){return new Z.m.w(w,"(direct)",w,"(direct)","(none)",w,w)};h.vc=function(d){var a=v,j,c=f.va;if(d&&"referral"==
d.S){d=W(S(d.X));for(j=0;j<c[x];j++)a=a||U(d,W(c[j]))}return a};h.L=function(d){return w!=d&&d.mb()};h.cc=function(d,a){var j="",c="-",n,s=0,b,e,o=h.c;if(!d)return"";e=d.k();j=h.Xb(f.a[A]);if(f.z&&d.kb()){c=d.na();if(!N(c)&&!U(c,";")){d.Ga();return""}}c=P(e,J+o+".",";");n=h.ic(j);if(h.L(n)){j=P(j,f.Ma+C,B);if("1"==j&&!N(c))return""}if(!h.L(n)){n=h.gb();if(!N(c)&&h.uc(n))return""}if(!h.L(n)&&a){n=h.hc();if(!N(c)&&h.vc(n))return""}if(!h.L(n))if(N(c)&&a)n=h.dc();if(!h.L(n))return"";if(!N(c)){s=c.split(".");
b=new Z.m.w;b.Zb(s.slice(4).join("."));b=W(b.Da())==W(n.Da());s=s[3]*1}if(!b||a){a=P(e,D+o+".",";");e=a.lastIndexOf(".");a=e>9?O(a,e+1)*1:0;s++;a=0==a?1:a;d.wb([o,h.r,a,s,n.Da()].join("."));d.Ga();return B+"utmcn=1"}else return B+"utmcr=1"}};
Z.m.w=function(i,l,g,t,k,p,f){var h=this;h.q=i;h.X=l;h.ea=g;h.D=t;h.S=k;h.K=p;h.Ya=f;h.Da=function(){var d=[],a=[["cid",h.q],["csr",h.X],["gclid",h.ea],["ccn",h.D],["cmd",h.S],["ctr",h.K],["cct",h.Ya]],j,c;if(h.mb())for(j=0;j<a[x];j++)if(!N(a[j][1])){c=a[j][1].split("+").join("%20");c=c.split(" ").join("%20");V(d,"utm"+a[j][0]+C+c)}return d.join("|")};h.mb=function(){return!(N(h.q)&&N(h.X)&&N(h.ea))};h.Zb=function(d){var a=function(j){return T(P(d,"utm"+j+C,"|"))};h.q=a("cid");h.X=a("csr");h.ea=a("gclid");
h.D=a("ccn");h.S=a("cmd");h.K=a("ctr");h.Ya=a("cct")}};Z.Ib=function(i,l,g,t){function k(j,c,n){var s;if(!N(n)){n=n.split(",");for(var b=0;b<n[x];b++){s=n[b];if(!N(s)){s=s.split(h);if(s[x]==4)c[s[0]]=[s[1],s[2],j]}}}}var p=this,f=l,h=C,d=i,a=t;p.O=g;p.sa="";p.p={};p.tc=function(){var j;j=X(P(p.O.k(),H+f+".",";"),f+".")[1];if(!N(j)){j=j.split("|");k(1,p.p,j[1]);p.sa=j[0];p.Z()}};p.Z=function(){p.Qb();var j=p.sa,c,n,s="";for(c in p.p)if((n=p.p[c])&&1===n[2])s+=c+h+n[0]+h+n[1]+h+1+",";N(s)||(j+="|"+s);if(N(j))p.O.Vb();else{p.O.Aa(f+"."+j);p.O.Fa()}};p.Ec=
function(j){p.sa=j;p.Z()};p.Cc=function(j,c,n,s){if(1!=s&&2!=s&&3!=s)s=3;var b=v;if(c&&n&&j>0&&j<=d.ob){c=S(c);n=S(n);if(c[x]+n[x]<=64){p.p[j]=[c,n,s];p.Z();b=r}}return b};p.mc=function(j){if((j=p.p[j])&&1===j[2])return j[1]};p.Ub=function(j){var c=p.p;if(c[j]){delete c[j];p.Z()}};p.Qb=function(){a._clearKey(8);a._clearKey(9);a._clearKey(11);var j=p.p,c,n;for(n in j)if(c=j[n]){a._setKey(8,n,c[0]);a._setKey(9,n,c[1]);(c=c[2])&&3!=c&&a._setKey(11,n,""+c)}}};Z.N=function(){function i(m,q,u,z){if(w==f[m])f[m]={};if(w==f[m][q])f[m][q]=[];f[m][q][u]=z}function l(m,q){if(w!=f[m]&&w!=f[m][q]){f[m][q]=w;q=r;var u;for(u=0;u<a[x];u++)if(w!=f[m][a[u]]){q=v;break}if(q)f[m]=w}}function g(m){var q="",u=v,z,M;for(z=0;z<a[x];z++){M=m[a[z]];if(w!=M){if(u)q+=a[z];q+=t(M);u=v}else u=r}return q}function t(m){var q=[],u,z;for(z=0;z<m[x];z++)if(w!=m[z]){u="";if(z!=o&&w==m[z-1])u+=z.toString()+s;u+=k(m[z]);V(q,u)}return j+q.join(n)+c}function k(m){var q="",u,z,M;for(u=0;u<
m[x];u++){z=m.charAt(u);M=e[z];q+=w!=M?M:z}return q}var p=this,f={},h="k",d="v",a=[h,d],j="(",c=")",n="*",s="!",b="'",e={};e[b]="'0";e[c]="'1";e[n]="'2";e[s]="'3";var o=1;p.qc=function(m){return w!=f[m]};p.G=function(){var m="",q;for(q in f)if(w!=f[q])m+=q.toString()+g(f[q]);return m};p.Ac=function(m){if(m==w)return p.G();var q=m.G(),u;for(u in f)if(w!=f[u]&&!m.qc(u))q+=u.toString()+g(f[u]);return q};p._setKey=function(m,q,u){if(typeof u!="string")return v;i(m,h,q,u);return r};p._setValue=function(m,
q,u){if(typeof u!="number"&&(w==Number||!(u instanceof Number))||Math.round(u)!=u||u==NaN||u==Infinity)return v;i(m,d,q,u.toString());return r};p._getKey=function(m,q){return w!=f[m]&&w!=f[m][h]?f[m][h][q]:w};p._getValue=function(m,q){return w!=f[m]&&w!=f[m][d]?f[m][d][q]:w};p._clearKey=function(m){l(m,h)};p._clearValue=function(m){l(m,d)}};Z.Jb=function(i,l){var g=this;g.Qc=l;g.xc=i;g._trackEvent=function(t,k,p){return l._trackEvent(g.xc,t,k,p)}};Z.aa=function(i,l){function g(){if("auto"==c.b){var b=c.a.domain;if("www."==O(b,0,4))b=O(b,4);c.b=b}c.b=W(c.b)}function t(){var b=c.b,e=b.indexOf("www.google.")*b.indexOf(".google.")*b.indexOf("google.");return e||"/"!=c.h||b.indexOf("google.org")>-1}function k(b,e,o){if(N(b)||N(e)||N(o))return"-";b=P(b,D+a.c+".",e);if(!N(b)){b=b.split(".");b[5]=b[5]?b[5]*1+1:1;b[3]=b[4];b[4]=o;b=b.join(".")}return b}function p(){return"file:"!=c.a[A].protocol&&t()}function f(b){if(!b||""==b)return"";for(;ea(b.charAt(0));)b=
O(b,1);for(;ea(b.charAt(b[x]-1));)b=O(b,0,b[x]-1);return b}function h(b,e,o,m){if(!N(b())){e(m?T(b()):b());U(b(),";")||o()}}function d(b){var e,o=""!=b&&c.a[A].host!=b;if(o)for(e=0;e<c.t[x];e++)o=o&&fa(W(b),W(c.t[e]))==-1;return o}var a=this,j=w,c=new Z.Gb,n=v,s=w;a.e=window;a.r=Math.round((new Date).getTime()/1E3);a.s=i||"UA-XXXXX-X";a.ab=c.a.referrer;a.ia=w;a.f=w;a.B=w;a.F=v;a.A=w;a.Ua="";a.g=w;a.cb=w;a.c=w;a.i=w;c.o=l?S(l):w;a.wc=function(){var b=v;if(a.B)b=a.B.match(/^[0-9a-z-_.]{10,1200}$/i);
return b};a.jc=function(){return Y()^a.A.$b()&2147483647};a.ec=function(){if(!c.b||""==c.b||"none"==c.b){c.b="";return 1}g();return c.Ra?ia(c.b):1};a.Yb=function(b,e){if(N(b))b="-";else{e+=c.h&&"/"!=c.h?c.h:"";e=b.indexOf(e);b=e>=0&&e<=8?"0":"["==b.charAt(0)&&"]"==b.charAt(b[x]-1)?"-":b}return b};a.wa=function(b){var e="",o=c.a;e+=c.fa?a.A.Ic():"";e+=c.da?a.Ua:"";e+=c.ga&&!N(o.title)?"&utmdt="+S(o.title):"";e+="&utmhid="+ja()+"&utmr="+S(a.ia)+"&utmp="+S(a.Bc(b));return e};a.Bc=function(b){var e=c.a[A];
return b=w!=b&&""!=b?S(b,r):S(e.pathname+e.search,r)};a.Lc=function(b){if(a.J()){var e="";if(a.g!=w&&a.g.G()[x]>0)e+="&utme="+S(a.g.G());e+=a.wa(b);j.H(e,a.s,a.c)}};a.Tb=function(){var b=new Z.$(c);return b.ua(a.c)?b.Hc():w};a._getLinkerUrl=function(b,e){var o=b.split("#"),m=b,q=a.Tb();if(q)if(e&&1>=o[x])m+="#"+q;else if(!e||1>=o[x])if(1>=o[x])m+=(U(b,"?")?B:"?")+q;else m=o[0]+(U(b,"?")?B:"?")+q+"#"+o[1];return m};a.Fc=function(){var b;if(a.wc()){a.i.Dc(a.B);a.i.Oc();Z._gasoDomain=c.b;Z._gasoCPath=
c.h;b=c.a.createElement("script");b.type="text/javascript";b.id="_gasojs";b.src="https://www.google.com/analytics/reporting/overlay_js?gaso="+a.B+B+Y();c.a.getElementsByTagName("head")[0].appendChild(b)}};a.pc=function(){var b=a.r,e=a.i,o=e.k(),m=a.c+"",q=c.e,u=q?q.gaGlobal:w,z,M=U(o,D+m+"."),la=U(o,E+m),ma=U(o,G+m),F,I=[],R="",ha=v;o=N(o)?"":o;if(c.z){z=c.a[A]&&c.a[A].hash?c.a[A].href.substring(c.a[A].href.indexOf("#")):"";if(c.ba&&!N(z))R=z+B;R+=c.a[A].search;if(!N(R)&&U(R,D)){e.zc(R);e.kb()||e.Sb();
F=e.ja()}h(e.ma,e.vb,e.Eb,true);h(e.la,e.Aa,e.Fa)}if(N(F))if(M)if(!la||!ma){F=k(o,";",b);a.F=r}else{F=P(o,D+m+".",";");I=X(P(o,E+m,";"),".")}else{F=ga([m,a.jc(),b,b,b,1],".");ha=a.F=r}else if(N(e.C())||N(e.ka())){F=k(R,B,b);a.F=r}else{I=X(e.C(),".");m=I[0]}F=F.split(".");if(q&&u&&u.dh==m&&!c.o){F[4]=u.sid?u.sid:F[4];if(ha){F[3]=u.sid?u.sid:F[4];if(u.vid){b=u.vid.split(".");F[1]=b[0];F[2]=b[1]}}}e.tb(F.join("."));I[0]=m;I[1]=I[1]?I[1]:0;I[2]=w!=I[2]?I[2]:c.Jc;I[3]=I[3]?I[3]:F[4];e.ya(I.join("."));
e.ub(m);N(e.lc())||e.za(e.P());e.Cb();e.Ea();e.Db()};a.rc=function(){j=new Z.Kb(c)};a._initData=function(){var b;if(!n){if(!a.A){a.A=new Z.Fb(c);a.A.bc()}a.c=a.ec();a.i=new Z.$(c);a.g=new Z.N;s=new Z.Ib(c,a.c,a.i,a.g);a.rc()}if(p()){a.pc();s.tc()}if(!n){if(p()){a.ia=a.Yb(a.ab,c.a.domain);if(c.da){b=new Z.m(a.c,a.ia,a.r,c);a.Ua=b.cc(a.i,a.F)}}a.cb=new Z.N;n=r}Z.ib||a.sc()};a._visitCode=function(){a._initData();var b=P(a.i.k(),D+a.c+".",";");b=b.split(".");return b[x]<4?"":b[1]};a._cookiePathCopy=function(b){a._initData();
a.i&&a.i.Nc(a.c,b)};a.sc=function(){var b=c.a[A].hash;if(b&&1==b.indexOf("gaso="))b=P(b,"gaso=",B);else b=(b=c.e.name)&&0<=b.indexOf("gaso=")?P(b,"gaso=",B):P(a.i.k(),L,";");if(b[x]>=10){a.B=b;a.Fc()}Z.ib=r};a.J=function(){return a._visitCode()%1E4<c.U*100};a.Gc=function(){var b,e,o=c.a.links;if(!c.lb){b=c.a.domain;if("www."==O(b,0,4))b=O(b,4);c.t.push("."+b)}for(b=0;b<o[x]&&(c.ra==-1||b<c.ra);b++){e=o[b];if(d(e.host))if(!e.gatcOnclick){e.gatcOnclick=e.onclick?e.onclick:a.yc;e.onclick=function(m){var q=
!this.target||this.target=="_self"||this.target=="_top"||this.target=="_parent";q=q&&!a.Rb(m);a.Mc(m,this,q);return q?v:this.gatcOnclick?this.gatcOnclick(m):r}}}};a.yc=function(){};a._trackPageview=function(b){if(p()){a._initData();c.t&&a.Gc();a.Lc(b);a.F=v}};a._trackTrans=function(){var b=a.c,e=[],o,m,q;a._initData();if(a.f&&a.J()){for(o=0;o<a.f.Y[x];o++){m=a.f.Y[o];V(e,m.Ca());for(q=0;q<m.R[x];q++)V(e,m.R[q].Ca())}for(o=0;o<e[x];o++)j.H(e[o],a.s,b,r)}};a._setTrans=function(){var b=c.a,e,o,m;b=b.getElementById?
b.getElementById("utmtrans"):b.utmform&&b.utmform.utmtrans?b.utmform.utmtrans:w;a._initData();if(b&&b.value){a.f=new Z.n;m=b.value.split("UTM:");c.u=!c.u||""==c.u?"|":c.u;for(b=0;b<m[x];b++){m[b]=f(m[b]);e=m[b].split(c.u);for(o=0;o<e[x];o++)e[o]=f(e[o]);if("T"==e[0])a._addTrans(e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8]);else"I"==e[0]&&a._addItem(e[1],e[2],e[3],e[4],e[5],e[6])}}};a._addTrans=function(b,e,o,m,q,u,z,M){a.f=a.f?a.f:new Z.n;return a.f.Ob(b,e,o,m,q,u,z,M)};a._addItem=function(b,e,o,m,q,u){var z;
a.f=a.f?a.f:new Z.n;(z=a.f.hb(b))||(z=a._addTrans(b,"","","","","","",""));z.Nb(e,o,m,q,u)};a._setVar=function(b){if(b&&""!=b&&t()){a._initData();s.Ec(S(b));a.J()&&j.H("&utmt=var",a.s,a.c)}};a._setCustomVar=function(b,e,o,m){a._initData();return s.Cc(b,e,o,m)};a._deleteCustomVar=function(b){a._initData();s.Ub(b)};a._getVisitorCustomVar=function(b){a._initData();return s.mc(b)};a._setMaxCustomVariables=function(b){c.ob=b};a._link=function(b,e){if(c.z&&b){a._initData();c.a[A].href=a._getLinkerUrl(b,
e)}};a._linkByPost=function(b,e){if(c.z&&b&&b.action){a._initData();b.action=a._getLinkerUrl(b.action,e)}};a._setXKey=function(b,e,o){a.g._setKey(b,e,o)};a._setXValue=function(b,e,o){a.g._setValue(b,e,o)};a._getXKey=function(b,e){return a.g._getKey(b,e)};a._getXValue=function(b,e){return a.g.getValue(b,e)};a._clearXKey=function(b){a.g._clearKey(b)};a._clearXValue=function(b){a.g._clearValue(b)};a._createXObj=function(){a._initData();return new Z.N};a._sendXEvent=function(b){var e="";a._initData();
if(a.J()){e+="&utmt=event&utme="+S(a.g.Ac(b))+a.wa();j.H(e,a.s,a.c,v,r)}};a._createEventTracker=function(b){a._initData();return new Z.Jb(b,a)};a._trackEvent=function(b,e,o,m){var q=a.cb;if(w!=b&&w!=e&&""!=b&&""!=e){q._clearKey(5);q._clearValue(5);(b=q._setKey(5,1,b)&&q._setKey(5,2,e)&&(w==o||q._setKey(5,3,o))&&(w==m||q._setValue(5,1,m)))&&a._sendXEvent(q)}else b=v;return b};a.Mc=function(b,e,o){a._initData();if(a.J()){var m=new Z.N;m._setKey(6,1,e.href);var q=o?function(){a.db(b,e)}:w;j.H("&utmt=event&utme="+
S(m.G())+a.wa(),a.s,a.c,v,r,q);if(o){var u=this;c.e.setTimeout(function(){u.db(b,e)},500)}}};a.db=function(b,e){if(!b)b=c.e.event;var o=r;if(e.gatcOnclick)o=e.gatcOnclick(b);if(o||typeof o=="undefined")if(!e.target||e.target=="_self")c.e[A]=e.href;else if(e.target=="_top")c.e.top.document[A]=e.href;else if(e.target=="_parent")c.e.parent.document[A]=e.href};a.Rb=function(b){if(!b)b=c.e.event;var e=b.shiftKey||b.ctrlKey||b.altKey;if(!e)if(b.modifiers&&c.e.Event)e=b.modifiers&c.e.Event.CONTROL_MASK||
b.modifiers&c.e.Event.SHIFT_MASK||b.modifiers&c.e.Event.ALT_MASK;return e};a.Pc=function(){return c};a._setDomainName=function(b){c.b=b};a._addOrganic=function(b,e,o){c.T.splice(o?0:c.T.length,0,new Z.Ha(b,e))};a._clearOrganic=function(){c.T=[]};a._addIgnoredOrganic=function(b){V(c.ta,b)};a._clearIgnoredOrganic=function(){c.ta=[]};a._addIgnoredRef=function(b){V(c.va,b)};a._clearIgnoredRef=function(){c.va=[]};a._setAllowHash=function(b){c.Ra=b?1:0};a._setCampaignTrack=function(b){c.da=b?1:0};a._setClientInfo=
function(b){c.fa=b?1:0};a._getClientInfo=function(){return c.fa};a._setCookiePath=function(b){c.h=b};a._setTransactionDelim=function(b){c.u=b};a._setCookieTimeout=function(b){a._setCampaignCookieTimeout(b*1E3)};a._setCampaignCookieTimeout=function(b){c.Ta=b};a._setDetectFlash=function(b){c.ha=b?1:0};a._getDetectFlash=function(){return c.ha};a._setDetectTitle=function(b){c.ga=b?1:0};a._getDetectTitle=function(){return c.ga};a._setLocalGifPath=function(b){c.oa=b};a._getLocalGifPath=function(){return c.oa};
a._setLocalServerMode=function(){c.I=0};a._setRemoteServerMode=function(){c.I=1};a._setLocalRemoteServerMode=function(){c.I=2};a._getServiceMode=function(){return c.I};a._setSampleRate=function(b){c.U=b};a._setSessionTimeout=function(b){a._setSessionCookieTimeout(b*1E3)};a._setSessionCookieTimeout=function(b){c.sb=b};a._setAllowLinker=function(b){c.z=b?1:0};a._setAllowAnchor=function(b){c.ba=b?1:0};a._setCampNameKey=function(b){c.Ia=b};a._setCampContentKey=function(b){c.Ja=b};a._setCampIdKey=function(b){c.Ka=
b};a._setCampMediumKey=function(b){c.La=b};a._setCampNOKey=function(b){c.Ma=b};a._setCampSourceKey=function(b){c.Na=b};a._setCampTermKey=function(b){c.Oa=b};a._setCampCIdKey=function(b){c.Pa=b};a._getAccount=function(){return a.s};a._setAccount=function(b){a.s=b};a._setNamespace=function(b){c.o=b?S(b):w};a._getVersion=function(){return ca};a._setAutoTrackOutbound=function(b){c.t=[];if(b)c.t=b};a._setTrackOutboundSubdomains=function(b){c.lb=b};a._setHrefExamineLimit=function(b){c.ra=b};a._setReferrerOverride=
function(b){a.ab=b};a._setCookiePersistence=function(b){a._setVisitorCookieTimeout(b)};a._setVisitorCookieTimeout=function(b){c.v=b}};Z._getTracker=function(i,l){return new Z.aa(i,l)};var ka=v,$={ca:{},_createAsyncTracker:function(i,l){l=l||"";i=new Z.aa(i);$.ca[l]=i;ka=r;return i},_getAsyncTracker:function(i){i=i||"";var l=$.ca[i];if(!l){l=new Z.aa;$.ca[i]=l;ka=r}return l},push:function(){for(var i=arguments,l=0,g=0;g<i[x];g++)try{if(typeof i[g]==="function")i[g]();else{var t="",k=i[g][0],p=k.lastIndexOf(".");if(p>0){t=O(k,0,p);k=O(k,p+1)}var f=$._getAsyncTracker(t);f[k].apply(f,i[g].slice(1))}}catch(h){l++}return l}};window[aa]=Z;function na(){var i=window[ba],l=v;if(i&&typeof i.push=="function"){l=i.constructor==Array;if(!l)return}window[ba]=$;l&&$.push.apply($,i)}na();})()

//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2009 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

var MooTools={version:"1.2.4",build:"0d9113241a90b9cd5643b926795852a2026710d4"};var Native=function(k){k=k||{};var a=k.name;var i=k.legacy;var b=k.protect;
var c=k.implement;var h=k.generics;var f=k.initialize;var g=k.afterImplement||function(){};var d=f||i;h=h!==false;d.constructor=Native;d.$family={name:"native"};
if(i&&f){d.prototype=i.prototype;}d.prototype.constructor=d;if(a){var e=a.toLowerCase();d.prototype.$family={name:e};Native.typize(d,e);}var j=function(n,l,o,m){if(!b||m||!n.prototype[l]){n.prototype[l]=o;
}if(h){Native.genericize(n,l,b);}g.call(n,l,o);return n;};d.alias=function(n,l,p){if(typeof n=="string"){var o=this.prototype[n];if((n=o)){return j(this,l,n,p);
}}for(var m in n){this.alias(m,n[m],l);}return this;};d.implement=function(m,l,o){if(typeof m=="string"){return j(this,m,l,o);}for(var n in m){j(this,n,m[n],l);
}return this;};if(c){d.implement(c);}return d;};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments);
return b.prototype[c].apply(d.shift(),d);};}};Native.implement=function(d,c){for(var b=0,a=d.length;b<a;b++){d[b].implement(c);}};Native.typize=function(a,b){if(!a.type){a.type=function(c){return($type(c)===b);
};}};(function(){var a={Array:Array,Date:Date,Function:Function,Number:Number,RegExp:RegExp,String:String};for(var h in a){new Native({name:h,initialize:a[h],protect:true});
}var d={"boolean":Boolean,"native":Native,object:Object};for(var c in d){Native.typize(d[c],c);}var f={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 e in f){for(var b=f[e].length;b--;){Native.genericize(a[e],f[e][b],true);}}})();var Hash=new Native({name:"Hash",initialize:function(a){if($type(a)=="hash"){a=$unlink(a.getClean());
}for(var b in a){this[b]=a[b];}return this;}});Hash.implement({forEach:function(b,c){for(var a in this){if(this.hasOwnProperty(a)){b.call(c,this[a],a,this);
}}},getClean:function(){var b={};for(var a in this){if(this.hasOwnProperty(a)){b[a]=this[a];}}return b;},getLength:function(){var b=0;for(var a in this){if(this.hasOwnProperty(a)){b++;
}}return b;}});Hash.alias("forEach","each");Array.implement({forEach:function(c,d){for(var b=0,a=this.length;b<a;b++){c.call(d,this[b],b,this);}}});Array.alias("forEach","each");
function $A(b){if(b.item){var a=b.length,c=new Array(a);while(a--){c[a]=b[a];}return c;}return Array.prototype.slice.call(b);}function $arguments(a){return function(){return arguments[a];
};}function $chk(a){return !!(a||a===0);}function $clear(a){clearTimeout(a);clearInterval(a);return null;}function $defined(a){return(a!=undefined);}function $each(c,b,d){var a=$type(c);
((a=="arguments"||a=="collection"||a=="array")?Array:Hash).each(c,b,d);}function $empty(){}function $extend(c,a){for(var b in (a||{})){c[b]=a[b];}return c;
}function $H(a){return new Hash(a);}function $lambda(a){return($type(a)=="function")?a:function(){return a;};}function $merge(){var a=Array.slice(arguments);
a.unshift({});return $mixin.apply(null,a);}function $mixin(e){for(var d=1,a=arguments.length;d<a;d++){var b=arguments[d];if($type(b)!="object"){continue;
}for(var c in b){var g=b[c],f=e[c];e[c]=(f&&$type(g)=="object"&&$type(f)=="object")?$mixin(f,g):$unlink(g);}}return e;}function $pick(){for(var b=0,a=arguments.length;
b<a;b++){if(arguments[b]!=undefined){return arguments[b];}}return null;}function $random(b,a){return Math.floor(Math.random()*(a-b+1)+b);}function $splat(b){var a=$type(b);
return(a)?((a!="array"&&a!="arguments")?[b]:b):[];}var $time=Date.now||function(){return +new Date;};function $try(){for(var b=0,a=arguments.length;b<a;
b++){try{return arguments[b]();}catch(c){}}return null;}function $type(a){if(a==undefined){return false;}if(a.$family){return(a.$family.name=="number"&&!isFinite(a))?false:a.$family.name;
}if(a.nodeName){switch(a.nodeType){case 1:return"element";case 3:return(/\S/).test(a.nodeValue)?"textnode":"whitespace";}}else{if(typeof a.length=="number"){if(a.callee){return"arguments";
}else{if(a.item){return"collection";}}}}return typeof a;}function $unlink(c){var b;switch($type(c)){case"object":b={};for(var e in c){b[e]=$unlink(c[e]);
}break;case"hash":b=new Hash(c);break;case"array":b=[];for(var d=0,a=c.length;d<a;d++){b[d]=$unlink(c[d]);}break;default:return c;}return b;}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)?((document.querySelectorAll)?6:5):4);},webkit:function(){return(navigator.taintEnabled)?false:((Browser.Features.xpath)?((Browser.Features.query)?525:420):419);
},gecko:function(){return(!document.getBoxObjectFor&&window.mozInnerScreenX==null)?false:((document.getElementsByClassName)?19:18);}}},Browser||{});Browser.Platform[Browser.Platform.name]=true;
Browser.detect=function(){for(var b in this.Engines){var a=this.Engines[b]();if(a){this.Engine={name:b,version:a};this.Engine[b]=this.Engine[b+a]=true;
break;}}return{name:b,version:a};};Browser.detect();Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject("MSXML2.XMLHTTP");
},function(){return new ActiveXObject("Microsoft.XMLHTTP");});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var a=($try(function(){return navigator.plugins["Shockwave Flash"].description;
},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");})||"0 r0").match(/\d+/g);return{version:parseInt(a[0]||0+"."+a[1],10)||0,build:parseInt(a[2],10)||0};
})();function $exec(b){if(!b){return b;}if(window.execScript){window.execScript(b);}else{var a=document.createElement("script");a.setAttribute("type","text/javascript");
a[(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerText":"text"]=b;document.head.appendChild(a);document.head.removeChild(a);}return b;}Native.UID=1;
var $uid=(Browser.Engine.trident)?function(a){return(a.uid||(a.uid=[Native.UID++]))[0];}:function(a){return a.uid||(a.uid=Native.UID++);};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(a){$uid(a);
if(!a.Element){a.Element=$empty;if(Browser.Engine.webkit){a.document.createElement("iframe");}a.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};
}a.document.window=a;return $extend(a,Window.Prototype);},afterImplement:function(b,a){window[b]=Window.Prototype[b]=a;}});Window.Prototype={$family:{name:"window"}};
new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(a){$uid(a);a.head=a.getElementsByTagName("head")[0];
a.html=a.getElementsByTagName("html")[0];if(Browser.Engine.trident&&Browser.Engine.version<=4){$try(function(){a.execCommand("BackgroundImageCache",false,true);
});}if(Browser.Engine.trident){a.window.attachEvent("onunload",function(){a.window.detachEvent("onunload",arguments.callee);a.head=a.html=a.window=null;
});}return $extend(a,Document.Prototype);},afterImplement:function(b,a){document[b]=Document.Prototype[b]=a;}});Document.Prototype={$family:{name:"document"}};
new Document(document);Array.implement({every:function(c,d){for(var b=0,a=this.length;b<a;b++){if(!c.call(d,this[b],b,this)){return false;}}return true;
},filter:function(d,e){var c=[];for(var b=0,a=this.length;b<a;b++){if(d.call(e,this[b],b,this)){c.push(this[b]);}}return c;},clean:function(){return this.filter($defined);
},indexOf:function(c,d){var a=this.length;for(var b=(d<0)?Math.max(0,a+d):d||0;b<a;b++){if(this[b]===c){return b;}}return -1;},map:function(d,e){var c=[];
for(var b=0,a=this.length;b<a;b++){c[b]=d.call(e,this[b],b,this);}return c;},some:function(c,d){for(var b=0,a=this.length;b<a;b++){if(c.call(d,this[b],b,this)){return true;
}}return false;},associate:function(c){var d={},b=Math.min(this.length,c.length);for(var a=0;a<b;a++){d[c[a]]=this[a];}return d;},link:function(c){var a={};
for(var e=0,b=this.length;e<b;e++){for(var d in c){if(c[d](this[e])){a[d]=this[e];delete c[d];break;}}}return a;},contains:function(a,b){return this.indexOf(a,b)!=-1;
},extend:function(c){for(var b=0,a=c.length;b<a;b++){this.push(c[b]);}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(a){if(!this.contains(a)){this.push(a);}return this;},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b]);}return this;
},erase:function(b){for(var a=this.length;a--;a){if(this[a]===b){this.splice(a,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var d=[];
for(var b=0,a=this.length;b<a;b++){var c=$type(this[b]);if(!c){continue;}d=d.concat((c=="array"||c=="collection"||c=="arguments")?Array.flatten(this[b]):this[b]);
}return d;},hexToRgb:function(b){if(this.length!=3){return null;}var a=this.map(function(c){if(c.length==1){c+=c;}return c.toInt(16);});return(b)?a:"rgb("+a+")";
},rgbToHex:function(d){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!d){return"transparent";}var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);
b.push((c.length==1)?"0"+c:c);}return(d)?b:"#"+b.join("");}});Function.implement({extend:function(a){for(var b in a){this[b]=a[b];}return this;},create:function(b){var a=this;
b=b||{};return function(d){var c=b.arguments;c=(c!=undefined)?$splat(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c);
}var e=function(){return a.apply(b.bind||null,c);};if(b.delay){return setTimeout(e,b.delay);}if(b.periodical){return setInterval(e,b.periodical);}if(b.attempt){return $try(e);
}return e();};},run:function(a,b){return this.apply(b,$splat(a));},pass:function(a,b){return this.create({bind:b,arguments:a});},bind:function(b,a){return this.create({bind:b,arguments:a});
},bindWithEvent:function(b,a){return this.create({bind:b,arguments:a,event:true});},attempt:function(a,b){return this.create({bind:b,arguments:a,attempt:true})();
},delay:function(b,c,a){return this.create({bind:c,arguments:a,delay:b})();},periodical:function(c,b,a){return this.create({bind:b,arguments:a,periodical:c})();
}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this));},round:function(a){a=Math.pow(10,a||0);return Math.round(this*a)/a;},times:function(b,c){for(var a=0;
a<this;a++){b.call(c,a,this);}},toFloat:function(){return parseFloat(this);},toInt:function(a){return parseInt(this,a||10);}});Number.alias("times","each");
(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat($A(arguments)));};}});Number.implement(a);
})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(a,b){return((typeof a=="string")?new RegExp(a,b):a).test(this);
},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:this.indexOf(a)>-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(a){return a.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase());
});},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");
},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null;},stripScripts:function(b){var a="";
var c=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return"";});if(b===true){$exec(a);}else{if($type(b)=="function"){b(a,c);
}}return c;},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1);}return(a[c]!=undefined)?a[c]:"";
});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a;}}return null;
},hasValue:function(a){return(Hash.keyOf(this,a)!==null);},extend:function(a){Hash.each(a||{},function(c,b){Hash.set(this,b,c);},this);return this;},combine:function(a){Hash.each(a||{},function(c,b){Hash.include(this,b,c);
},this);return this;},erase:function(a){if(this.hasOwnProperty(a)){delete this[a];}return this;},get:function(a){return(this.hasOwnProperty(a))?this[a]:null;
},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b;}return this;},empty:function(){Hash.each(this,function(b,a){delete this[a];},this);
return this;},include:function(a,b){if(this[a]==undefined){this[a]=b;}return this;},map:function(b,c){var a=new Hash;Hash.each(this,function(e,d){a.set(d,b.call(c,e,d,this));
},this);return a;},filter:function(b,c){var a=new Hash;Hash.each(this,function(e,d){if(b.call(c,e,d,this)){a.set(d,e);}},this);return a;},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false;
}}return true;},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true;}}return false;},getKeys:function(){var a=[];
Hash.each(this,function(c,b){a.push(b);});return a;},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b);});return a;},toQueryString:function(a){var b=[];
Hash.each(this,function(f,e){if(a){e=a+"["+e+"]";}var d;switch($type(f)){case"object":d=Hash.toQueryString(f,e);break;case"array":var c={};f.each(function(h,g){c[g]=h;
});d=Hash.toQueryString(c,e);break;default:d=e+"="+encodeURIComponent(f);}if(f!=undefined){b.push(d);}});return b.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});
var Event=new Native({name:"Event",initialize:function(a,f){f=f||window;var k=f.document;a=a||f.event;if(a.$extended){return a;}this.$extended=true;var j=a.type;
var g=a.target||a.srcElement;while(g&&g.nodeType==3){g=g.parentNode;}if(j.test(/key/)){var b=a.which||a.keyCode;var m=Event.Keys.keyOf(b);if(j=="keydown"){var d=b-111;
if(d>0&&d<13){m="f"+d;}}m=m||String.fromCharCode(b).toLowerCase();}else{if(j.match(/(click|mouse|menu)/i)){k=(!k.compatMode||k.compatMode=="CSS1Compat")?k.html:k.body;
var i={x:a.pageX||a.clientX+k.scrollLeft,y:a.pageY||a.clientY+k.scrollTop};var c={x:(a.pageX)?a.pageX-f.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-f.pageYOffset:a.clientY};
if(j.match(/DOMMouseScroll|mousewheel/)){var h=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3;}var e=(a.which==3)||(a.button==2);var l=null;if(j.match(/over|out/)){switch(j){case"mouseover":l=a.relatedTarget||a.fromElement;
break;case"mouseout":l=a.relatedTarget||a.toElement;}if(!(function(){while(l&&l.nodeType==3){l=l.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){l=false;
}}}}return $extend(this,{event:a,type:j,page:i,client:c,rightClick:e,wheel:h,relatedTarget:l,target:g,code:b,key:m,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.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;}});function Class(b){if(b instanceof Function){b={initialize:b};}var a=function(){Object.reset(this);if(a._prototyping){return this;
}this._current=$empty;var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c;}.extend(this);
a.implement(b);a.constructor=Class;a.prototype.constructor=a;return a;}Function.prototype.protect=function(){this._protected=true;return this;};Object.reset=function(a,c){if(c==null){for(var e in a){Object.reset(a,e);
}return a;}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]);
break;}return a;};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a;
},wrap:function(a,b,c){if(c._origin){c=c._origin;}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.');
}var e=this.caller,f=this._current;this.caller=f;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=f;this.caller=e;return d;}.extend({_owner:a,_origin:c,_name:b});
}});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var e in a){this.implement(e,a[e]);}return this;}var f=Class.Mutators[a];if(f){d=f.call(this,d);
if(d==null){return this;}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this;}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a];
if($type(b)=="object"){$mixin(b,d);}else{c[a]=$unlink(d);}break;case"array":c[a]=$unlink(d);break;default:c[a]=d;}return this;}});Class.Mutators={Extends:function(a){this.parent=a;
this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.');
}return c.apply(this,arguments);}.protect());},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b);}this.implement(b);
},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(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events[c]=this.$events[c]||[];
this.$events[c].include(b);if(a){b.internal=true;}}return this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this;},fireEvent:function(c,b,a){c=Events.removeOn(c);
if(!this.$events||!this.$events[c]){return this;}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})();},this);return this;},removeEvent:function(b,a){b=Events.removeOn(b);
if(!this.$events[b]){return this;}if(!a.internal){this.$events[b].erase(a);}return this;},removeEvents:function(c){var d;if($type(c)=="object"){for(d in c){this.removeEvent(d,c[d]);
}return this;}if(c){c=Events.removeOn(c);}for(d in this.$events){if(c&&c!=d){continue;}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a]);
}}return this;}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase();});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));
if(!this.addEvent){return this;}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue;}this.addEvent(a,this.options[a]);
delete this.options[a];}return this;}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a);
if(c){return c(b);}if(typeof a=="string"){return document.newElement(a,b);}return document.id(a).set(b);},afterImplement:function(a,b){Element.Prototype[a]=b;
if(Array[a]){return;}Elements.implement(a,function(){var c=[],g=true;for(var e=0,d=this.length;e<d;e++){var f=this[e][a].apply(this[e],arguments);c.push(f);
if(g){g=($type(f)=="element");}}return(g)?new Elements(c):c;});}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var f=Array.link(arguments,{properties:Object.type,iframe:$defined});
var d=f.properties||{};var c=document.id(f.iframe);var e=d.onload||$empty;delete d.onload;d.id=d.name=$pick(d.id,d.name,c?(c.id||c.name):"IFrame_"+$time());
c=new Element(c||"iframe",d);var b=function(){var g=$try(function(){return c.contentWindow.location.host;});if(!g||g==window.location.host){var h=new Window(c.contentWindow);
new Document(c.contentWindow.document);$extend(h.Element.prototype,Element.Prototype);}e.call(c.contentWindow,c.contentWindow.document);};var a=$try(function(){return c.contentWindow;
});((a&&a.document.body)||window.frames[d.id])?b():c.addListener("load",b);return c;}});var Elements=new Native({initialize:function(f,b){b=$extend({ddup:true,cash:true},b);
f=f||[];if(b.ddup||b.cash){var g={},e=[];for(var c=0,a=f.length;c<a;c++){var d=document.id(f[c],!b.cash);if(b.ddup){if(g[d.uid]){continue;}g[d.uid]=true;
}if(d){e.push(d);}}f=e;}return(b.cash)?$extend(f,this):f;}});Elements.implement({filter:function(a,b){if(!a){return this;}return new Elements(Array.filter(this,(typeof a=="string")?function(c){return c.match(a);
}:a,b));}});Document.implement({newElement:function(a,b){if(Browser.Engine.trident&&b){["name","type","checked"].each(function(c){if(!b[c]){return;}a+=" "+c+'="'+b[c]+'"';
if(c!="checked"){delete b[c];}});a="<"+a+">";}return document.id(this.createElement(a)).set(b);},newTextNode:function(a){return this.createTextNode(a);
},getDocument:function(){return this;},getWindow:function(){return this.window;},id:(function(){var a={string:function(d,c,b){d=b.getElementById(d);return(d)?a.element(d,c):null;
},element:function(b,e){$uid(b);if(!e&&!b.$family&&!(/^object|embed$/i).test(b.tagName)){var c=Element.Prototype;for(var d in c){b[d]=c[d];}}return b;},object:function(c,d,b){if(c.toElement){return a.element(c.toElement(b),d);
}return null;}};a.textnode=a.whitespace=a.window=a.document=$arguments(0);return function(c,e,d){if(c&&c.$family&&c.uid){return c;}var b=$type(c);return(a[b])?a[b](c,e,d||document):null;
};})()});if(window.$==null){Window.implement({$:function(a,b){return document.id(a,b,this.document);}});}Window.implement({$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a);
}var f=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d<b;d++){var e=c[d];switch($type(e)){case"element":f.push(e);break;case"string":f.extend(this.document.getElements(e,true));
}}return new Elements(f);},getDocument:function(){return this.document;},getWindow:function(){return this;}});Native.implement([Element,Document],{getElement:function(a,b){return document.id(this.getElements(a,true)[0]||null,b);
},getElements:function(a,d){a=a.split(",");var c=[];var b=(a.length>1);a.each(function(e){var f=this.getElementsByTagName(e.trim());(b)?c.extend(f):c=f;
},this);return new Elements(c,{ddup:b,cash:!d});}});(function(){var h={},f={};var i={input:"checked",option:"selected",textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerHTML":"value"};
var c=function(l){return(f[l]||(f[l]={}));};var g=function(n,l){if(!n){return;}var m=n.uid;if(Browser.Engine.trident){if(n.clearAttributes){var q=l&&n.cloneNode(false);
n.clearAttributes();if(q){n.mergeAttributes(q);}}else{if(n.removeEvents){n.removeEvents();}}if((/object/i).test(n.tagName)){for(var o in n){if(typeof n[o]=="function"){n[o]=$empty;
}}Element.dispose(n);}}if(!m){return;}h[m]=f[m]=null;};var d=function(){Hash.each(h,g);if(Browser.Engine.trident){$A(document.getElementsByTagName("object")).each(g);
}if(window.CollectGarbage){CollectGarbage();}h=f=null;};var j=function(n,l,s,m,p,r){var o=n[s||l];var q=[];while(o){if(o.nodeType==1&&(!m||Element.match(o,m))){if(!p){return document.id(o,r);
}q.push(o);}o=o[l];}return(p)?new Elements(q,{ddup:false,cash:!r}):null;};var e={html:"innerHTML","class":"className","for":"htmlFor",defaultValue:"defaultValue",text:(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?"innerText":"textContent"};
var b=["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"];var k=["value","type","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"];
b=b.associate(b);Hash.extend(e,b);Hash.extend(e,k.associate(k.map(String.toLowerCase)));var a={before:function(m,l){if(l.parentNode){l.parentNode.insertBefore(m,l);
}},after:function(m,l){if(!l.parentNode){return;}var n=l.nextSibling;(n)?l.parentNode.insertBefore(m,n):l.parentNode.appendChild(m);},bottom:function(m,l){l.appendChild(m);
},top:function(m,l){var n=l.firstChild;(n)?l.insertBefore(m,n):l.appendChild(m);}};a.inside=a.bottom;Hash.each(a,function(l,m){m=m.capitalize();Element.implement("inject"+m,function(n){l(this,document.id(n,true));
return this;});Element.implement("grab"+m,function(n){l(document.id(n,true),this);return this;});});Element.implement({set:function(o,m){switch($type(o)){case"object":for(var n in o){this.set(n,o[n]);
}break;case"string":var l=Element.Properties.get(o);(l&&l.set)?l.set.apply(this,Array.slice(arguments,1)):this.setProperty(o,m);}return this;},get:function(m){var l=Element.Properties.get(m);
return(l&&l.get)?l.get.apply(this,Array.slice(arguments,1)):this.getProperty(m);},erase:function(m){var l=Element.Properties.get(m);(l&&l.erase)?l.erase.apply(this):this.removeProperty(m);
return this;},setProperty:function(m,n){var l=e[m];if(n==undefined){return this.removeProperty(m);}if(l&&b[m]){n=!!n;}(l)?this[l]=n:this.setAttribute(m,""+n);
return this;},setProperties:function(l){for(var m in l){this.setProperty(m,l[m]);}return this;},getProperty:function(m){var l=e[m];var n=(l)?this[l]:this.getAttribute(m,2);
return(b[m])?!!n:(l)?n:n||null;},getProperties:function(){var l=$A(arguments);return l.map(this.getProperty,this).associate(l);},removeProperty:function(m){var l=e[m];
(l)?this[l]=(l&&b[m])?false:"":this.removeAttribute(m);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;
},hasClass:function(l){return this.className.contains(l," ");},addClass:function(l){if(!this.hasClass(l)){this.className=(this.className+" "+l).clean();
}return this;},removeClass:function(l){this.className=this.className.replace(new RegExp("(^|\\s)"+l+"(?:\\s|$)"),"$1");return this;},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l);
},adopt:function(){Array.flatten(arguments).each(function(l){l=document.id(l,true);if(l){this.appendChild(l);}},this);return this;},appendText:function(m,l){return this.grab(this.getDocument().newTextNode(m),l);
},grab:function(m,l){a[l||"bottom"](document.id(m,true),this);return this;},inject:function(m,l){a[l||"bottom"](this,document.id(m,true));return this;},replaces:function(l){l=document.id(l,true);
l.parentNode.replaceChild(this,l);return this;},wraps:function(m,l){m=document.id(m,true);return this.replaces(m).grab(m,l);},getPrevious:function(l,m){return j(this,"previousSibling",null,l,false,m);
},getAllPrevious:function(l,m){return j(this,"previousSibling",null,l,true,m);},getNext:function(l,m){return j(this,"nextSibling",null,l,false,m);},getAllNext:function(l,m){return j(this,"nextSibling",null,l,true,m);
},getFirst:function(l,m){return j(this,"nextSibling","firstChild",l,false,m);},getLast:function(l,m){return j(this,"previousSibling","lastChild",l,false,m);
},getParent:function(l,m){return j(this,"parentNode",null,l,false,m);},getParents:function(l,m){return j(this,"parentNode",null,l,true,m);},getSiblings:function(l,m){return this.getParent().getChildren(l,m).erase(this);
},getChildren:function(l,m){return j(this,"nextSibling","firstChild",l,true,m);},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument;
},getElementById:function(o,n){var m=this.ownerDocument.getElementById(o);if(!m){return null;}for(var l=m.parentNode;l!=this;l=l.parentNode){if(!l){return null;
}}return document.id(m,n);},getSelected:function(){return new Elements($A(this.options).filter(function(l){return l.selected;}));},getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()];
}var l=this.getDocument().defaultView.getComputedStyle(this,null);return(l)?l.getPropertyValue([m.hyphenate()]):null;},toQueryString:function(){var l=[];
this.getElements("input, select, textarea",true).each(function(m){if(!m.name||m.disabled||m.type=="submit"||m.type=="reset"||m.type=="file"){return;}var n=(m.tagName.toLowerCase()=="select")?Element.getSelected(m).map(function(o){return o.value;
}):((m.type=="radio"||m.type=="checkbox")&&!m.checked)?null:m.value;$splat(n).each(function(o){if(typeof o!="undefined"){l.push(m.name+"="+encodeURIComponent(o));
}});});return l.join("&");},clone:function(o,l){o=o!==false;var r=this.cloneNode(o);var n=function(v,u){if(!l){v.removeAttribute("id");}if(Browser.Engine.trident){v.clearAttributes();
v.mergeAttributes(u);v.removeAttribute("uid");if(v.options){var w=v.options,s=u.options;for(var t=w.length;t--;){w[t].selected=s[t].selected;}}}var x=i[u.tagName.toLowerCase()];
if(x&&u[x]){v[x]=u[x];}};if(o){var p=r.getElementsByTagName("*"),q=this.getElementsByTagName("*");for(var m=p.length;m--;){n(p[m],q[m]);}}n(r,this);return document.id(r);
},destroy:function(){Element.empty(this);Element.dispose(this);g(this,true);return null;},empty:function(){$A(this.childNodes).each(function(l){Element.destroy(l);
});return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},hasChild:function(l){l=document.id(l,true);if(!l){return false;
}if(Browser.Engine.webkit&&Browser.Engine.version<420){return $A(this.getElementsByTagName(l.tagName)).contains(l);}return(this.contains)?(this!=l&&this.contains(l)):!!(this.compareDocumentPosition(l)&16);
},match:function(l){return(!l||(l==this)||(Element.get(this,"tag")==l));}});Native.implement([Element,Window,Document],{addListener:function(o,n){if(o=="unload"){var l=n,m=this;
n=function(){m.removeListener("unload",n);l();};}else{h[this.uid]=this;}if(this.addEventListener){this.addEventListener(o,n,false);}else{this.attachEvent("on"+o,n);
}return this;},removeListener:function(m,l){if(this.removeEventListener){this.removeEventListener(m,l,false);}else{this.detachEvent("on"+m,l);}return this;
},retrieve:function(m,l){var o=c(this.uid),n=o[m];if(l!=undefined&&n==undefined){n=o[m]=l;}return $pick(n);},store:function(m,l){var n=c(this.uid);n[m]=l;
return this;},eliminate:function(l){var m=c(this.uid);delete m[l];return this;}});window.addListener("unload",d);})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a;
},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 c=document.createElement("div");var a={table:[1,"<table>","</table>"],select:[1,"<select>","</select>"],tbody:[2,"<table><tbody>","</tbody></table>"],tr:[3,"<table><tbody><tr>","</tr></tbody></table>"]};
a.thead=a.tfoot=a.tbody;var b={set:function(){var e=Array.flatten(arguments).join("");var f=Browser.Engine.trident&&a[this.get("tag")];if(f){var g=c;g.innerHTML=f[1]+e+f[2];
for(var d=f[0];d--;){g=g.firstChild;}this.empty().adopt(g.childNodes);}else{this.innerHTML=e;}}};b.erase=b.set;return b;})();if(Browser.Engine.webkit&&Browser.Engine.version<420){Element.Properties.text={get:function(){if(this.innerText){return this.innerText;
}var a=this.ownerDocument.newElement("div",{html:this.innerHTML}).inject(this.ownerDocument.body);var b=a.innerText;a.destroy();return b;}};}Element.Properties.events={set:function(a){this.addEvents(a);
}};Native.implement([Element,Window,Document],{addEvent:function(e,g){var h=this.retrieve("events",{});h[e]=h[e]||{keys:[],values:[]};if(h[e].keys.contains(g)){return this;
}h[e].keys.push(g);var f=e,a=Element.Events.get(e),c=g,i=this;if(a){if(a.onAdd){a.onAdd.call(this,g);}if(a.condition){c=function(j){if(a.condition.call(this,j)){return g.call(this,j);
}return true;};}f=a.base||f;}var d=function(){return g.call(i);};var b=Element.NativeEvents[f];if(b){if(b==2){d=function(j){j=new Event(j,i.getWindow());
if(c.call(i,j)===false){j.stop();}};}this.addListener(f,d);}h[e].values.push(d);return this;},removeEvent:function(c,b){var a=this.retrieve("events");if(!a||!a[c]){return this;
}var f=a[c].keys.indexOf(b);if(f==-1){return this;}a[c].keys.splice(f,1);var e=a[c].values.splice(f,1)[0];var d=Element.Events.get(c);if(d){if(d.onRemove){d.onRemove.call(this,b);
}c=d.base||c;}return(Element.NativeEvents[c])?this.removeListener(c,e):this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this;
},removeEvents:function(a){var c;if($type(a)=="object"){for(c in a){this.removeEvent(c,a[c]);}return this;}var b=this.retrieve("events");if(!b){return this;
}if(!a){for(c in b){this.removeEvents(c);}this.eliminate("events");}else{if(b[a]){while(b[a].keys[0]){this.removeEvent(a,b[a].keys[0]);}b[a]=null;}}return this;
},fireEvent:function(d,b,a){var c=this.retrieve("events");if(!c||!c[d]){return this;}c[d].keys.each(function(e){e.create({bind:this,delay:a,"arguments":b})();
},this);return this;},cloneEvents:function(d,a){d=document.id(d);var c=d.retrieve("events");if(!c){return this;}if(!a){for(var b in c){this.cloneEvents(d,b);
}}else{if(c[a]){c[a].keys.each(function(e){this.addEvent(a,e);},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};
(function(){var a=function(b){var c=b.relatedTarget;if(c==undefined){return true;}if(c===false){return false;}return($type(this)!="document"&&c!=this&&c.prefix!="xul"&&!this.hasChild(c));
};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:a},mouseleave:{base:"mouseout",condition:a},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}});
})();Element.Properties.styles={set:function(a){this.setStyles(a);}};Element.Properties.opacity={set:function(a,b){if(!b){if(a==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=(a==1)?"":"alpha(opacity="+a*100+")";
}this.style.opacity=a;this.store("opacity",a);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(a){return this.set("opacity",a,true);
},getOpacity:function(){return this.get("opacity");},setStyle:function(b,a){switch(b){case"opacity":return this.set("opacity",parseFloat(a));case"float":b=(Browser.Engine.trident)?"styleFloat":"cssFloat";
}b=b.camelCase();if($type(a)!="string"){var c=(Element.Styles.get(b)||"@").split(" ");a=$splat(a).map(function(e,d){if(!c[d]){return"";}return($type(e)=="number")?c[d].replace("@",Math.round(e)):e;
}).join(" ");}else{if(a==String(Number(a))){a=Math.round(a);}}this.style[b]=a;return this;},getStyle:function(g){switch(g){case"opacity":return this.get("opacity");
case"float":g=(Browser.Engine.trident)?"styleFloat":"cssFloat";}g=g.camelCase();var a=this.style[g];if(!$chk(a)){a=[];for(var f in Element.ShortStyles){if(g!=f){continue;
}for(var e in Element.ShortStyles[f]){a.push(this.getStyle(e));}return a.join(" ");}a=this.getComputedStyle(g);}if(a){a=String(a);var c=a.match(/rgba?\([\d\s,]+\)/);
if(c){a=a.replace(c[0],c[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(a,10)))){if(g.test(/^(height|width)$/)){var b=(g=="width")?["left","right"]:["top","bottom"],d=0;
b.each(function(h){d+=this.getStyle("border-"+h+"-width").toInt()+this.getStyle("padding-"+h).toInt();},this);return this["offset"+g.capitalize()]-d+"px";
}if((Browser.Engine.presto)&&String(a).test("px")){return a;}if(g.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return a;},setStyles:function(b){for(var a in b){this.setStyle(a,b[a]);
}return this;},getStyles:function(){var a={};Array.flatten(arguments).each(function(b){a[b]=this.getStyle(b);},this);return a;}});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(g){var f=Element.ShortStyles;
var b=Element.Styles;["margin","padding"].each(function(h){var i=h+g;f[h][i]=b[i]="@px";});var e="border"+g;f.border[e]=b[e]="@px @ rgb(@, @, @)";var d=e+"Width",a=e+"Style",c=e+"Color";
f[e]={};f.borderWidth[d]=f[e][d]=b[d]="@px";f.borderStyle[a]=f[e][a]=b[a]="@";f.borderColor[c]=f[e][c]=b[c]="rgb(@, @, @)";});(function(){Element.implement({scrollTo:function(h,i){if(b(this)){this.getWindow().scrollTo(h,i);
}else{this.scrollLeft=h;this.scrollTop=i;}return this;},getSize:function(){if(b(this)){return this.getWindow().getSize();}return{x:this.offsetWidth,y:this.offsetHeight};
},getScrollSize:function(){if(b(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(b(this)){return this.getWindow().getScroll();
}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var i=this,h={x:0,y:0};while(i&&!b(i)){h.x+=i.scrollLeft;h.y+=i.scrollTop;i=i.parentNode;
}return h;},getOffsetParent:function(){var h=this;if(b(h)){return null;}if(!Browser.Engine.trident){return h.offsetParent;}while((h=h.parentNode)&&!b(h)){if(d(h,"position")!="static"){return h;
}}return null;},getOffsets:function(){if(this.getBoundingClientRect){var j=this.getBoundingClientRect(),m=document.id(this.getDocument().documentElement),p=m.getScroll(),k=this.getScrolls(),i=this.getScroll(),h=(d(this,"position")=="fixed");
return{x:j.left.toInt()+k.x-i.x+((h)?0:p.x)-m.clientLeft,y:j.top.toInt()+k.y-i.y+((h)?0:p.y)-m.clientTop};}var l=this,n={x:0,y:0};if(b(this)){return n;
}while(l&&!b(l)){n.x+=l.offsetLeft;n.y+=l.offsetTop;if(Browser.Engine.gecko){if(!f(l)){n.x+=c(l);n.y+=g(l);}var o=l.parentNode;if(o&&d(o,"overflow")!="visible"){n.x+=c(o);
n.y+=g(o);}}else{if(l!=this&&Browser.Engine.webkit){n.x+=c(l);n.y+=g(l);}}l=l.offsetParent;}if(Browser.Engine.gecko&&!f(this)){n.x-=c(this);n.y-=g(this);
}return n;},getPosition:function(k){if(b(this)){return{x:0,y:0};}var l=this.getOffsets(),i=this.getScrolls();var h={x:l.x-i.x,y:l.y-i.y};var j=(k&&(k=document.id(k)))?k.getPosition():{x:0,y:0};
return{x:h.x-j.x,y:h.y-j.y};},getCoordinates:function(j){if(b(this)){return this.getWindow().getCoordinates();}var h=this.getPosition(j),i=this.getSize();
var k={left:h.x,top:h.y,width:i.x,height:i.y};k.right=k.left+k.width;k.bottom=k.top+k.height;return k;},computePosition:function(h){return{left:h.x-e(this,"margin-left"),top:h.y-e(this,"margin-top")};
},setPosition:function(h){return this.setStyles(this.computePosition(h));}});Native.implement([Document,Window],{getSize:function(){if(Browser.Engine.presto||Browser.Engine.webkit){var i=this.getWindow();
return{x:i.innerWidth,y:i.innerHeight};}var h=a(this);return{x:h.clientWidth,y:h.clientHeight};},getScroll:function(){var i=this.getWindow(),h=a(this);
return{x:i.pageXOffset||h.scrollLeft,y:i.pageYOffset||h.scrollTop};},getScrollSize:function(){var i=a(this),h=this.getSize();return{x:Math.max(i.scrollWidth,h.x),y:Math.max(i.scrollHeight,h.y)};
},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var h=this.getSize();return{top:0,left:0,bottom:h.y,right:h.x,height:h.y,width:h.x};
}});var d=Element.getComputedStyle;function e(h,i){return d(h,i).toInt()||0;}function f(h){return d(h,"-moz-box-sizing")=="border-box";}function g(h){return e(h,"border-top-width");
}function c(h){return e(h,"border-left-width");}function b(h){return(/^(?:body|html)$/i).test(h.tagName);}function a(h){var i=h.getDocument();return(!i.compatMode||i.compatMode=="CSS1Compat")?i.html:i.body;
}})();Element.alias("setPosition","position");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(h,g){h=h.split(",");var c,e={};for(var d=0,b=h.length;d<b;d++){var a=h[d],f=Selectors.Utils.search(this,a,e);
if(d!=0&&f.item){f=$A(f);}c=(d==0)?f:(c.item)?$A(c).concat(f):c.concat(f);}return new Elements(c,{ddup:(h.length>1),cash:!g});}});Element.implement({match:function(b){if(!b||(b==this)){return true;
}var d=Selectors.Utils.parseTagAndID(b);var a=d[0],e=d[1];if(!Selectors.Filters.byID(this,e)||!Selectors.Filters.byTag(this,a)){return false;}var c=Selectors.Utils.parseSelector(b);
return(c)?Selectors.Utils.filter(this,c,{}):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(b,c){if(!c){return true;}var a=$uid(b);if(!c[a]){return c[a]=true;}return false;},parseNthArgument:function(h){if(Selectors.Cache.nth[h]){return Selectors.Cache.nth[h];
}var e=h.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!e){return false;}var g=parseInt(e[1],10);var d=(g||g===0)?g:1;var f=e[2]||false;var c=parseInt(e[3],10)||0;
if(d!=0){c--;while(c<1){c+=d;}while(c>=d){c-=d;}}else{d=c;f="index";}switch(f){case"n":e={a:d,b:c,special:"n"};break;case"odd":e={a:2,b:0,special:"n"};
break;case"even":e={a:2,b:1,special:"n"};break;case"first":e={a:0,special:"index"};break;case"last":e={special:"last-child"};break;case"only":e={special:"only-child"};
break;default:e={a:(d-1),special:"index"};}return Selectors.Cache.nth[h]=e;},parseSelector:function(e){if(Selectors.Cache.parsed[e]){return Selectors.Cache.parsed[e];
}var d,h={classes:[],pseudos:[],attributes:[]};while((d=Selectors.RegExps.combined.exec(e))){var i=d[1],g=d[2],f=d[3],b=d[5],c=d[6],j=d[7];if(i){h.classes.push(i);
}else{if(c){var a=Selectors.Pseudo.get(c);if(a){h.pseudos.push({parser:a,argument:j});}else{h.attributes.push({name:c,operator:"=",value:j});}}else{if(g){h.attributes.push({name:g,operator:f,value:b});
}}}}if(!h.classes.length){delete h.classes;}if(!h.attributes.length){delete h.attributes;}if(!h.pseudos.length){delete h.pseudos;}if(!h.classes&&!h.attributes&&!h.pseudos){h=null;
}return Selectors.Cache.parsed[e]=h;},parseTagAndID:function(b){var a=b.match(Selectors.RegExps.tag);var c=b.match(Selectors.RegExps.id);return[(a)?a[1]:"*",(c)?c[1]:false];
},filter:function(f,c,e){var d;if(c.classes){for(d=c.classes.length;d--;d){var g=c.classes[d];if(!Selectors.Filters.byClass(f,g)){return false;}}}if(c.attributes){for(d=c.attributes.length;
d--;d){var b=c.attributes[d];if(!Selectors.Filters.byAttribute(f,b.name,b.operator,b.value)){return false;}}}if(c.pseudos){for(d=c.pseudos.length;d--;d){var a=c.pseudos[d];
if(!Selectors.Filters.byPseudo(f,a.parser,a.argument,e)){return false;}}}return true;},getByTagAndID:function(b,a,d){if(d){var c=(b.getElementById)?b.getElementById(d,true):Element.getElementById(b,d,true);
return(c&&Selectors.Filters.byTag(c,a))?[c]:[];}else{return b.getElementsByTagName(a);}},search:function(o,h,t){var b=[];var c=h.trim().replace(Selectors.RegExps.splitter,function(k,j,i){b.push(j);
return":)"+i;}).split(":)");var p,e,A;for(var z=0,v=c.length;z<v;z++){var y=c[z];if(z==0&&Selectors.RegExps.quick.test(y)){p=o.getElementsByTagName(y);
continue;}var a=b[z-1];var q=Selectors.Utils.parseTagAndID(y);var B=q[0],r=q[1];if(z==0){p=Selectors.Utils.getByTagAndID(o,B,r);}else{var d={},g=[];for(var x=0,w=p.length;
x<w;x++){g=Selectors.Getters[a](g,p[x],B,r,d);}p=g;}var f=Selectors.Utils.parseSelector(y);if(f){e=[];for(var u=0,s=p.length;u<s;u++){A=p[u];if(Selectors.Utils.filter(A,f,t)){e.push(A);
}}p=e;}}return p;}};Selectors.Getters={" ":function(h,g,j,a,e){var d=Selectors.Utils.getByTagAndID(g,j,a);for(var c=0,b=d.length;c<b;c++){var f=d[c];if(Selectors.Utils.chk(f,e)){h.push(f);
}}return h;},">":function(h,g,j,a,f){var c=Selectors.Utils.getByTagAndID(g,j,a);for(var e=0,d=c.length;e<d;e++){var b=c[e];if(b.parentNode==g&&Selectors.Utils.chk(b,f)){h.push(b);
}}return h;},"+":function(c,b,a,e,d){while((b=b.nextSibling)){if(b.nodeType==1){if(Selectors.Utils.chk(b,d)&&Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,e)){c.push(b);
}break;}}return c;},"~":function(c,b,a,e,d){while((b=b.nextSibling)){if(b.nodeType==1){if(!Selectors.Utils.chk(b,d)){break;}if(Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,e)){c.push(b);
}}}return c;}};Selectors.Filters={byTag:function(b,a){return(a=="*"||(b.tagName&&b.tagName.toLowerCase()==a));},byID:function(a,b){return(!b||(a.id&&a.id==b));
},byClass:function(b,a){return(b.className&&b.className.contains&&b.className.contains(a," "));},byPseudo:function(a,d,c,b){return d.call(a,c,b);},byAttribute:function(c,d,b,e){var a=Element.prototype.getProperty.call(c,d);
if(!a){return(b=="!=");}if(!b||e==undefined){return true;}switch(b){case"=":return(a==e);case"*=":return(a.contains(e));case"^=":return(a.substr(0,e.length)==e);
case"$=":return(a.substr(a.length-e.length)==e);case"!=":return(a!=e);case"~=":return a.contains(e," ");case"|=":return a.contains(e,"-");}return false;
}};Selectors.Pseudo=new Hash({checked:function(){return this.checked;},empty:function(){return !(this.innerText||this.textContent||"").length;},not:function(a){return !Element.match(this,a);
},contains:function(a){return(this.innerText||this.textContent||"").contains(a);},"first-child":function(){return Selectors.Pseudo.index.call(this,0);},"last-child":function(){var a=this;
while((a=a.nextSibling)){if(a.nodeType==1){return false;}}return true;},"only-child":function(){var b=this;while((b=b.previousSibling)){if(b.nodeType==1){return false;
}}var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false;}}return true;},"nth-child":function(g,e){g=(g==undefined)?"n":g;var c=Selectors.Utils.parseNthArgument(g);
if(c.special!="n"){return Selectors.Pseudo[c.special].call(this,c.a,e);}var f=0;e.positions=e.positions||{};var d=$uid(this);if(!e.positions[d]){var b=this;
while((b=b.previousSibling)){if(b.nodeType!=1){continue;}f++;var a=e.positions[$uid(b)];if(a!=undefined){f=a+f;break;}}e.positions[d]=f;}return(e.positions[d]%c.a==c.b);
},index:function(a){var b=this,c=0;while((b=b.previousSibling)){if(b.nodeType==1&&++c>a){return false;}}return(c==a);},even:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n+1",a);
},odd:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n",a);},selected:function(){return this.selected;},enabled:function(){return(this.disabled===false);
}});Element.Events.domready={onAdd:function(a){if(Browser.loaded){a.call(this);}}};(function(){var b=function(){if(Browser.loaded){return;}Browser.loaded=true;
window.fireEvent("domready");document.fireEvent("domready");};window.addEvent("load",b);if(Browser.Engine.trident){var a=document.createElement("div");
(function(){($try(function(){a.doScroll();return document.id(a).inject(document.body).set("html","temp").dispose();}))?b():arguments.callee.delay(50);})();
}else{if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(["loaded","complete"].contains(document.readyState))?b():arguments.callee.delay(50);
})();}else{document.addEvent("DOMContentLoaded",b);}}})();var JSON=new Hash(this.JSON&&{stringify:JSON.stringify,parse:JSON.parse}).extend({$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(a){return JSON.$specialChars[a]||"\\u00"+Math.floor(a.charCodeAt()/16).toString(16)+(a.charCodeAt()%16).toString(16);
},encode:function(b){switch($type(b)){case"string":return'"'+b.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(b.map(JSON.encode).clean())+"]";
case"object":case"hash":var a=[];Hash.each(b,function(e,d){var c=JSON.encode(e);if(c){a.push(JSON.encode(d)+":"+c);}});return"{"+a+"}";case"number":case"boolean":return String(b);
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(b,a){this.key=b;
this.setOptions(a);},write:function(b){b=encodeURIComponent(b);if(this.options.domain){b+="; domain="+this.options.domain;}if(this.options.path){b+="; path="+this.options.path;
}if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+="; expires="+a.toGMTString();}if(this.options.secure){b+="; secure";
}this.options.document.cookie=this.key+"="+b;return this;},read:function(){var a=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");
return(a)?decodeURIComponent(a[1]):null;},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this;}});Cookie.write=function(b,c,a){return new Cookie(b,a).write(c);
};Cookie.read=function(a){return new Cookie(a).read();};Cookie.dispose=function(b,a){return new Cookie(b,a).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(l,m){this.instance="Swiff_"+$time();this.setOptions(m);m=this.options;var b=this.id=m.id||this.instance;var a=document.id(m.container);
Swiff.CallBacks[this.instance]={};var e=m.params,g=m.vars,f=m.callBacks;var h=$extend({height:m.height,width:m.width},m.properties);var k=this;for(var d in f){Swiff.CallBacks[this.instance][d]=(function(n){return function(){return n.apply(k.object,arguments);
};})(f[d]);g[d]="Swiff.CallBacks."+this.instance+"."+d;}e.flashVars=Hash.toQueryString(g);if(Browser.Engine.trident){h.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
e.movie=l;}else{h.type="application/x-shockwave-flash";h.data=l;}var j='<object id="'+b+'"';for(var i in h){j+=" "+i+'="'+h[i]+'"';}j+=">";for(var c in e){if(e[c]){j+='<param name="'+c+'" value="'+e[c]+'" />';
}}j+="</object>";this.object=((a)?a.empty():new Element("div")).set("html",j).firstChild;},replaces:function(a){a=document.id(a,true);a.parentNode.replaceChild(this.toElement(),a);
return this;},inject:function(a){document.id(a,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(a){this.subject=this.subject||this;
this.setOptions(a);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var b=this.options.wait;if(b===false){this.options.link="cancel";
}},getTransition:function(){return function(a){return -(Math.cos(Math.PI*a)-1)/2;};},step:function(){var a=$time();if(a<this.time+this.options.duration){var b=this.transition((a-this.time)/this.options.duration);
this.set(this.compute(this.from,this.to,b));}else{this.set(this.compute(this.from,this.to,1));this.complete();}},set:function(a){return a;},compute:function(c,b,a){return Fx.compute(c,b,a);
},check:function(){if(!this.timer){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));
return false;}return false;},start:function(b,a){if(!this.check(b,a)){return this;}this.from=b;this.to=a;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(c,b,a){return(b-c)*a+c;
};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(d,e,b){b=$splat(b);var c=b[1];if(!$chk(c)){b[1]=b[0];
b[0]=d.getStyle(e);}var a=b.map(this.parse);return{from:a[0],to:a[1]};},parse:function(a){a=$lambda(a)();a=(typeof a=="string")?a.split(" "):$splat(a);
return a.map(function(c){c=String(c);var b=false;Fx.CSS.Parsers.each(function(f,e){if(b){return;}var d=f.parse(c);if($chk(d)){b={value:d,parser:f};}});
b=b||{value:c,parser:Fx.CSS.Parsers.String};return b;});},compute:function(d,c,b){var a=[];(Math.min(d.length,c.length)).times(function(e){a.push({value:d[e].parser.compute(d[e].value,c[e].value,b),parser:d[e].parser});
});a.$family={name:"fx:css:value"};return a;},serve:function(c,b){if($type(c)!="fx:css:value"){c=this.parse(c);}var a=[];c.each(function(d){a=a.concat(d.parser.serve(d.value,b));
});return a;},render:function(a,d,c,b){a.setStyle(d,this.serve(c,b));},search:function(a){if(Fx.CSS.Cache[a]){return Fx.CSS.Cache[a];}var b={};Array.each(document.styleSheets,function(e,d){var c=e.href;
if(c&&c.contains("://")&&!c.contains(document.domain)){return;}var f=e.rules||e.cssRules;Array.each(f,function(j,g){if(!j.style){return;}var h=(j.selectorText)?j.selectorText.replace(/^\w+/,function(i){return i.toLowerCase();
}):null;if(!h||!h.test("^"+a+"$")){return;}Element.Styles.each(function(k,i){if(!j.style[i]||Element.ShortStyles[i]){return;}k=String(j.style[i]);b[i]=(k.test(/^rgb/))?k.rgbToHex():k;
});});});return Fx.CSS.Cache[a]=b;}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(a){if(a.match(/^#[0-9a-f]{3,6}$/i)){return a.hexToRgb(true);
}return((a=a.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[a[1],a[2],a[3]]:false;},compute:function(c,b,a){return c.map(function(e,d){return Math.round(Fx.compute(c[d],b[d],a));
});},serve:function(a){return a.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(b,a){return(a)?b+a:b;}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});
Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a);},set:function(b,a){if(arguments.length==1){a=b;
b=this.property||this.options.property;}this.render(this.element,b,a,this.options.unit);return this;},start:function(c,e,d){if(!this.check(c,e,d)){return this;
}var b=Array.flatten(arguments);this.property=this.options.property||b.shift();var a=this.prepare(this.element,this.property,b);return this.parent(a.from,a.to);
}});Element.Properties.tween={set:function(a){var b=this.retrieve("tween");if(b){b.cancel();}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},a));
},get:function(a){if(a||!this.retrieve("tween")){if(a||!this.retrieve("tween:options")){this.set("tween",a);}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")));
}return this.retrieve("tween");}};Element.implement({tween:function(a,c,b){this.get("tween").start(arguments);return this;},fade:function(c){var e=this.get("tween"),d="opacity",a;
c=$pick(c,"toggle");switch(c){case"in":e.start(d,1);break;case"out":e.start(d,0);break;case"show":e.set(d,1);break;case"hide":e.set(d,0);break;case"toggle":var b=this.retrieve("fade:flag",this.get("opacity")==1);
e.start(d,(b)?0:1);this.store("fade:flag",!b);a=true;break;default:e.start(d,arguments);}if(!a){this.eliminate("fade:flag");}return this;},highlight:function(c,a){if(!a){a=this.retrieve("highlight:original",this.getStyle("background-color"));
a=(a=="transparent")?"#fff":a;}var b=this.get("tween");b.start("background-color",c||"#ffff88",a).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));
b.callChain();}.bind(this));return this;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a);
},set:function(a){if(typeof a=="string"){a=this.search(a);}for(var b in a){this.render(this.element,b,a[b],this.options.unit);}return this;},compute:function(e,d,c){var a={};
for(var b in e){a[b]=this.parent(e[b],d[b],c);}return a;},start:function(b){if(!this.check(b)){return this;}if(typeof b=="string"){b=this.search(b);}var e={},d={};
for(var c in b){var a=this.prepare(this.element,c,b[c]);e[c]=a.from;d[c]=a.to;}return this.parent(e,d);}});Element.Properties.morph={set:function(a){var b=this.retrieve("morph");
if(b){b.cancel();}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},a));},get:function(a){if(a||!this.retrieve("morph")){if(a||!this.retrieve("morph:options")){this.set("morph",a);
}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")));}return this.retrieve("morph");}};Element.implement({morph:function(a){this.get("morph").start(a);
return this;}});Fx.implement({getTransition:function(){var a=this.options.transition||Fx.Transitions.Sine.easeInOut;if(typeof a=="string"){var b=a.split(":");
a=Fx.Transitions;a=a[b[0]]||a[b[0].capitalize()];if(b[1]){a=a["ease"+b[1].capitalize()+(b[2]?b[2].capitalize():"")];}}return a;}});Fx.Transition=function(b,a){a=$splat(a);
return $extend(b,{easeIn:function(c){return b(c,a);},easeOut:function(c){return 1-b(1-c,a);},easeInOut:function(c){return(c<=0.5)?b(2*c,a)/2:(2-b(2*(1-c),a))/2;
}});};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(a){for(var b in a){Fx.Transitions[b]=new Fx.Transition(a[b]);}};Fx.Transitions.extend({Pow:function(b,a){return Math.pow(b,a[0]||6);
},Expo:function(a){return Math.pow(2,8*(a-1));},Circ:function(a){return 1-Math.sin(Math.acos(a));},Sine:function(a){return 1-Math.sin((1-a)*Math.PI/2);
},Back:function(b,a){a=a[0]||1.618;return Math.pow(b,2)*((a+1)*b-a);},Bounce:function(f){var e;for(var d=0,c=1;1;d+=c,c/=2){if(f>=(7-4*d)/11){e=c*c-Math.pow((11-6*d-11*f)/4,2);
break;}}return e;},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,[a+2]);
});});var Request=new Class({Implements:[Chain,Events,Options],options:{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,noCache:false},initialize:function(a){this.xhr=new Browser.Request();
this.setOptions(a);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));this.xhr.onreadystatechange=$empty;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();}},isSuccess:function(){return((this.status>=200)&&(this.status<300));
},processScripts:function(a){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(a);}return a.stripScripts(this.options.evalScripts);
},success:function(b,a){this.onSuccess(this.processScripts(b),a);},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(a,b){this.headers.set(a,b);
return this;},getHeader:function(a){return $try(function(){return this.xhr.getResponseHeader(a);}.bind(this));},check:function(){if(!this.running){return true;
}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false;}return false;},send:function(k){if(!this.check(k)){return this;
}this.running=true;var i=$type(k);if(i=="string"||i=="element"){k={data:k};}var d=this.options;k=$extend({data:d.data,url:d.url,method:d.method},k);var g=k.data,b=String(k.url),a=k.method.toLowerCase();
switch($type(g)){case"element":g=document.id(g).toQueryString();break;case"object":case"hash":g=Hash.toQueryString(g);}if(this.options.format){var j="format="+this.options.format;
g=(g)?j+"&"+g:j;}if(this.options.emulation&&!["get","post"].contains(a)){var h="_method="+a;g=(g)?h+"&"+g:h;a="post";}if(this.options.urlEncoded&&a=="post"){var c=(this.options.encoding)?"; charset="+this.options.encoding:"";
this.headers.set("Content-type","application/x-www-form-urlencoded"+c);}if(this.options.noCache){var f="noCache="+new Date().getTime();g=(g)?f+"&"+g:f;
}var e=b.lastIndexOf("/");if(e>-1&&(e=b.indexOf("#"))>-1){b=b.substr(0,e);}if(g&&a=="get"){b=b+(b.contains("?")?"&":"?")+g;g=null;}this.xhr.open(a.toUpperCase(),b,this.options.async);
this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(m,l){try{this.xhr.setRequestHeader(l,m);}catch(n){this.fireEvent("exception",[l,m]);
}},this);this.fireEvent("request");this.xhr.send(g);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 a={};
["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(b){a[b]=function(){var c=Array.link(arguments,{url:String.type,data:$defined});
return this.send($extend(c,{method:b}));};});Request.implement(a);})();Element.Properties.send={set:function(a){var b=this.retrieve("send");if(b){b.cancel();
}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},a));},get:function(a){if(a||!this.retrieve("send")){if(a||!this.retrieve("send:options")){this.set("send",a);
}this.store("send",new Request(this.retrieve("send:options")));}return this.retrieve("send");}};Element.implement({send:function(a){var b=this.get("send");
b.send({data:this,url:a||b.options.url});return this;}});Request.HTML=new Class({Extends:Request,options:{update:false,append:false,evalScripts:true,filter:false},processHTML:function(c){var b=c.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
c=(b)?b[1]:c;var a=new Element("div");return $try(function(){var d="<root>"+c+"</root>",g;if(Browser.Engine.trident){g=new ActiveXObject("Microsoft.XMLDOM");
g.async=false;g.loadXML(d);}else{g=new DOMParser().parseFromString(d,"text/xml");}d=g.getElementsByTagName("root")[0];if(!d){return null;}for(var f=0,e=d.childNodes.length;
f<e;f++){var h=Element.clone(d.childNodes[f],true,true);if(h){a.grab(h);}}return a;})||a.set("html",c);},success:function(d){var c=this.options,b=this.response;
b.html=d.stripScripts(function(e){b.javascript=e;});var a=this.processHTML(b.html);b.tree=a.childNodes;b.elements=a.getElements("*");if(c.filter){b.tree=b.elements.filter(c.filter);
}if(c.update){document.id(c.update).empty().set("html",b.html);}else{if(c.append){document.id(c.append).adopt(a.getChildren());}}if(c.evalScripts){$exec(b.javascript);
}this.onSuccess(b.tree,b.elements,b.html,b.javascript);}});Element.Properties.load={set:function(a){var b=this.retrieve("load");if(b){b.cancel();}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},a));
},get:function(a){if(a||!this.retrieve("load")){if(a||!this.retrieve("load:options")){this.set("load",a);}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(a){this.parent(a);this.headers.extend({Accept:"application/json","X-Request":"JSON"});
},success:function(a){this.response.json=JSON.decode(a,this.options.secure);this.onSuccess(this.response.json,a);}});
var StringBuilder = new Class(
{
	initialize: function()
	{
		this.buffer = [];
	},

	append: function(string)
	{
		this.buffer.push(string);
	},

	flush: function()
	{
		return this.buffer.join('');
	},

	clear: function()
	{
		this.buffer = [];
	}
});
//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.

MooTools.More={version:"1.2.4.2",build:"bd5a93c0913cce25917c48cbdacde568e15e02ef"};(function(){var a={language:"en-US",languages:{"en-US":{}},cascades:["en-US"]};
var b;MooTools.lang=new Events();$extend(MooTools.lang,{setLanguage:function(c){if(!a.languages[c]){return this;}a.language=c;this.load();this.fireEvent("langChange",c);
return this;},load:function(){var c=this.cascade(this.getCurrentLanguage());b={};$each(c,function(e,d){b[d]=this.lambda(e);},this);},getCurrentLanguage:function(){return a.language;
},addLanguage:function(c){a.languages[c]=a.languages[c]||{};return this;},cascade:function(e){var c=(a.languages[e]||{}).cascades||[];c.combine(a.cascades);
c.erase(e).push(e);var d=c.map(function(f){return a.languages[f];},this);return $merge.apply(this,d);},lambda:function(c){(c||{}).get=function(e,d){return $lambda(c[e]).apply(this,$splat(d));
};return c;},get:function(e,d,c){if(b&&b[e]){return(d?b[e].get(d,c):b[e]);}},set:function(d,e,c){this.addLanguage(d);langData=a.languages[d];if(!langData[e]){langData[e]={};
}$extend(langData[e],c);if(d==this.getCurrentLanguage()){this.load();this.fireEvent("langChange",d);}return this;},list:function(){return Hash.getKeys(a.languages);
}});})();Class.Mutators.Binds=function(a){return a;};Class.Mutators.initialize=function(a){return function(){$splat(this.Binds).each(function(b){var c=this[b];
if(c){this[b]=c.bind(this);}},this);return a.apply(this,arguments);};};(function(){var a={wait:function(b){return this.chain(function(){this.callChain.delay($pick(b,500),this);
}.bind(this));}};Chain.implement(a);if(window.Fx){Fx.implement(a);["Css","Tween","Elements"].each(function(b){if(Fx[b]){Fx[b].implement(a);}});}Element.implement({chains:function(b){$splat($pick(b,["tween","morph","reveal"])).each(function(c){c=this.get(c);
if(!c){return;}c.setOptions({link:"chain"});},this);return this;},pauseFx:function(c,b){this.chains(b).get($pick(b,"tween")).wait(c);return this;}});})();
(function(){var i=this.Date;if(!i.now){i.now=$time;}i.Methods={ms:"Milliseconds",year:"FullYear",min:"Minutes",mo:"Month",sec:"Seconds",hr:"Hours"};["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds","Time","TimezoneOffset","Week","Timezone","GMTOffset","DayOfYear","LastMonth","LastDayOfMonth","UTCDate","UTCDay","UTCFullYear","AMPM","Ordinal","UTCHours","UTCMilliseconds","UTCMinutes","UTCMonth","UTCSeconds"].each(function(p){i.Methods[p.toLowerCase()]=p;
});var d=function(q,p){return new Array(p-String(q).length+1).join("0")+q;};i.implement({set:function(t,r){switch($type(t)){case"object":for(var s in t){this.set(s,t[s]);
}break;case"string":t=t.toLowerCase();var q=i.Methods;if(q[t]){this["set"+q[t]](r);}}return this;},get:function(q){q=q.toLowerCase();var p=i.Methods;if(p[q]){return this["get"+p[q]]();
}return null;},clone:function(){return new i(this.get("time"));},increment:function(p,r){p=p||"day";r=$pick(r,1);switch(p){case"year":return this.increment("month",r*12);
case"month":var q=this.get("date");this.set("date",1).set("mo",this.get("mo")+r);return this.set("date",q.min(this.get("lastdayofmonth")));case"week":return this.increment("day",r*7);
case"day":return this.set("date",this.get("date")+r);}if(!i.units[p]){throw new Error(p+" is not a supported interval");}return this.set("time",this.get("time")+r*i.units[p]());
},decrement:function(p,q){return this.increment(p,-1*$pick(q,1));},isLeapYear:function(){return i.isLeapYear(this.get("year"));},clearTime:function(){return this.set({hr:0,min:0,sec:0,ms:0});
},diff:function(q,p){if($type(q)=="string"){q=i.parse(q);}return((q-this)/i.units[p||"day"](3,3)).toInt();},getLastDayOfMonth:function(){return i.daysInMonth(this.get("mo"),this.get("year"));
},getDayOfYear:function(){return(i.UTC(this.get("year"),this.get("mo"),this.get("date")+1)-i.UTC(this.get("year"),0,1))/i.units.day();},getWeek:function(){return(this.get("dayofyear")/7).ceil();
},getOrdinal:function(p){return i.getMsg("ordinal",p||this.get("date"));},getTimezone:function(){return this.toString().replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");
},getGMTOffset:function(){var p=this.get("timezoneOffset");return((p>0)?"-":"+")+d((p.abs()/60).floor(),2)+d(p%60,2);},setAMPM:function(p){p=p.toUpperCase();
var q=this.get("hr");if(q>11&&p=="AM"){return this.decrement("hour",12);}else{if(q<12&&p=="PM"){return this.increment("hour",12);}}return this;},getAMPM:function(){return(this.get("hr")<12)?"AM":"PM";
},parse:function(p){this.set("time",i.parse(p));return this;},isValid:function(p){return !!(p||this).valueOf();},format:function(p){if(!this.isValid()){return"invalid date";
}p=p||"%x %X";p=k[p.toLowerCase()]||p;var q=this;return p.replace(/%([a-z%])/gi,function(s,r){switch(r){case"a":return i.getMsg("days")[q.get("day")].substr(0,3);
case"A":return i.getMsg("days")[q.get("day")];case"b":return i.getMsg("months")[q.get("month")].substr(0,3);case"B":return i.getMsg("months")[q.get("month")];
case"c":return q.toString();case"d":return d(q.get("date"),2);case"H":return d(q.get("hr"),2);case"I":return((q.get("hr")%12)||12);case"j":return d(q.get("dayofyear"),3);
case"m":return d((q.get("mo")+1),2);case"M":return d(q.get("min"),2);case"o":return q.get("ordinal");case"p":return i.getMsg(q.get("ampm"));case"S":return d(q.get("seconds"),2);
case"U":return d(q.get("week"),2);case"w":return q.get("day");case"x":return q.format(i.getMsg("shortDate"));case"X":return q.format(i.getMsg("shortTime"));
case"y":return q.get("year").toString().substr(2);case"Y":return q.get("year");case"T":return q.get("GMTOffset");case"Z":return q.get("Timezone");}return r;
});},toISOString:function(){return this.format("iso8601");}});i.alias("toISOString","toJSON");i.alias("diff","compare");i.alias("format","strftime");var k={db:"%Y-%m-%d %H:%M:%S",compact:"%Y%m%dT%H%M%S",iso8601:"%Y-%m-%dT%H:%M:%S%T",rfc822:"%a, %d %b %Y %H:%M:%S %Z","short":"%d %b %H:%M","long":"%B %d, %Y %H:%M"};
var g=[];var e=i.parse;var n=function(s,u,r){var q=-1;var t=i.getMsg(s+"s");switch($type(u)){case"object":q=t[u.get(s)];break;case"number":q=t[month-1];
if(!q){throw new Error("Invalid "+s+" index: "+index);}break;case"string":var p=t.filter(function(v){return this.test(v);},new RegExp("^"+u,"i"));if(!p.length){throw new Error("Invalid "+s+" string");
}if(p.length>1){throw new Error("Ambiguous "+s);}q=p[0];}return(r)?t.indexOf(q):q;};i.extend({getMsg:function(q,p){return MooTools.lang.get("Date",q,p);
},units:{ms:$lambda(1),second:$lambda(1000),minute:$lambda(60000),hour:$lambda(3600000),day:$lambda(86400000),week:$lambda(608400000),month:function(q,p){var r=new i;
return i.daysInMonth($pick(q,r.get("mo")),$pick(p,r.get("year")))*86400000;},year:function(p){p=p||new i().get("year");return i.isLeapYear(p)?31622400000:31536000000;
}},daysInMonth:function(q,p){return[31,i.isLeapYear(p)?29:28,31,30,31,30,31,31,30,31,30,31][q];},isLeapYear:function(p){return((p%4===0)&&(p%100!==0))||(p%400===0);
},parse:function(r){var q=$type(r);if(q=="number"){return new i(r);}if(q!="string"){return r;}r=r.clean();if(!r.length){return null;}var p;g.some(function(t){var s=t.re.exec(r);
return(s)?(p=t.handler(s)):false;});return p||new i(e(r));},parseDay:function(p,q){return n("day",p,q);},parseMonth:function(q,p){return n("month",q,p);
},parseUTC:function(q){var p=new i(q);var r=i.UTC(p.get("year"),p.get("mo"),p.get("date"),p.get("hr"),p.get("min"),p.get("sec"));return new i(r);},orderIndex:function(p){return i.getMsg("dateOrder").indexOf(p)+1;
},defineFormat:function(p,q){k[p]=q;},defineFormats:function(p){for(var q in p){i.defineFormat(q,p[q]);}},parsePatterns:g,defineParser:function(p){g.push((p.re&&p.handler)?p:l(p));
},defineParsers:function(){Array.flatten(arguments).each(i.defineParser);},define2DigitYearStart:function(p){h=p%100;m=p-h;}});var m=1900;var h=70;var j=function(p){return new RegExp("(?:"+i.getMsg(p).map(function(q){return q.substr(0,3);
}).join("|")+")[a-z]*");};var a=function(p){switch(p){case"x":return((i.orderIndex("month")==1)?"%m[.-/]%d":"%d[.-/]%m")+"([.-/]%y)?";case"X":return"%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%T?";
}return null;};var o={d:/[0-2]?[0-9]|3[01]/,H:/[01]?[0-9]|2[0-3]/,I:/0?[1-9]|1[0-2]/,M:/[0-5]?\d/,s:/\d+/,o:/[a-z]*/,p:/[ap]\.?m\.?/,y:/\d{2}|\d{4}/,Y:/\d{4}/,T:/Z|[+-]\d{2}(?::?\d{2})?/};
o.m=o.I;o.S=o.M;var c;var b=function(p){c=p;o.a=o.A=j("days");o.b=o.B=j("months");g.each(function(r,q){if(r.format){g[q]=l(r.format);}});};var l=function(r){if(!c){return{format:r};
}var p=[];var q=(r.source||r).replace(/%([a-z])/gi,function(t,s){return a(s)||t;}).replace(/\((?!\?)/g,"(?:").replace(/ (?!\?|\*)/g,",? ").replace(/%([a-z%])/gi,function(t,s){var u=o[s];
if(!u){return s;}p.push(s);return"("+u.source+")";}).replace(/\[a-z\]/gi,"[a-z\\u00c0-\\uffff]");return{format:r,re:new RegExp("^"+q+"$","i"),handler:function(u){u=u.slice(1).associate(p);
var s=new i().clearTime();if("d" in u){f.call(s,"d",1);}if("m" in u){f.call(s,"m",1);}for(var t in u){f.call(s,t,u[t]);}return s;}};};var f=function(p,q){if(!q){return this;
}switch(p){case"a":case"A":return this.set("day",i.parseDay(q,true));case"b":case"B":return this.set("mo",i.parseMonth(q,true));case"d":return this.set("date",q);
case"H":case"I":return this.set("hr",q);case"m":return this.set("mo",q-1);case"M":return this.set("min",q);case"p":return this.set("ampm",q.replace(/\./g,""));
case"S":return this.set("sec",q);case"s":return this.set("ms",("0."+q)*1000);case"w":return this.set("day",q);case"Y":return this.set("year",q);case"y":q=+q;
if(q<100){q+=m+(q<h?100:0);}return this.set("year",q);case"T":if(q=="Z"){q="+00";}var r=q.match(/([+-])(\d{2}):?(\d{2})?/);r=(r[1]+"1")*(r[2]*60+(+r[3]||0))+this.getTimezoneOffset();
return this.set("time",this-r*60000);}return this;};i.defineParsers("%Y([-./]%m([-./]%d((T| )%X)?)?)?","%Y%m%d(T%H(%M%S?)?)?","%x( %X)?","%d%o( %b( %Y)?)?( %X)?","%b( %d%o)?( %Y)?( %X)?","%Y %b( %d%o( %X)?)?","%o %b %d %X %T %Y");
MooTools.lang.addEvent("langChange",function(p){if(MooTools.lang.get("Date")){b(p);}}).fireEvent("langChange",MooTools.lang.getCurrentLanguage());})();
Element.implement({tidy:function(){this.set("value",this.get("value").tidy());},getTextInRange:function(b,a){return this.get("value").substring(b,a);},getSelectedText:function(){if(this.setSelectionRange){return this.getTextInRange(this.getSelectionStart(),this.getSelectionEnd());
}return document.selection.createRange().text;},getSelectedRange:function(){if($defined(this.selectionStart)){return{start:this.selectionStart,end:this.selectionEnd};
}var e={start:0,end:0};var a=this.getDocument().selection.createRange();if(!a||a.parentElement()!=this){return e;}var c=a.duplicate();if(this.type=="text"){e.start=0-c.moveStart("character",-100000);
e.end=e.start+a.text.length;}else{var b=this.get("value");var d=b.length;c.moveToElementText(this);c.setEndPoint("StartToEnd",a);if(c.text.length){d-=b.match(/[\n\r]*$/)[0].length;
}e.end=d-c.text.length;c.setEndPoint("StartToStart",a);e.start=d-c.text.length;}return e;},getSelectionStart:function(){return this.getSelectedRange().start;
},getSelectionEnd:function(){return this.getSelectedRange().end;},setCaretPosition:function(a){if(a=="end"){a=this.get("value").length;}this.selectRange(a,a);
return this;},getCaretPosition:function(){return this.getSelectedRange().start;},selectRange:function(e,a){if(this.setSelectionRange){this.focus();this.setSelectionRange(e,a);
}else{var c=this.get("value");var d=c.substr(e,a-e).replace(/\r/g,"").length;e=c.substr(0,e).replace(/\r/g,"").length;var b=this.createTextRange();b.collapse(true);
b.moveEnd("character",e+d);b.moveStart("character",e);b.select();}return this;},insertAtCursor:function(b,a){var d=this.getSelectedRange();var c=this.get("value");
this.set("value",c.substring(0,d.start)+b+c.substring(d.end,c.length));if($pick(a,true)){this.selectRange(d.start,d.start+b.length);}else{this.setCaretPosition(d.start+b.length);
}return this;},insertAroundCursor:function(b,a){b=$extend({before:"",defaultMiddle:"",after:""},b);var c=this.getSelectedText()||b.defaultMiddle;var g=this.getSelectedRange();
var f=this.get("value");if(g.start==g.end){this.set("value",f.substring(0,g.start)+b.before+c+b.after+f.substring(g.end,f.length));this.selectRange(g.start+b.before.length,g.end+b.before.length+c.length);
}else{var d=f.substring(g.start,g.end);this.set("value",f.substring(0,g.start)+b.before+d+b.after+f.substring(g.end,f.length));var e=g.start+b.before.length;
if($pick(a,true)){this.selectRange(e,e+d.length);}else{this.setCaretPosition(e+f.length);}}return this;}});Elements.from=function(e,d){if($pick(d,true)){e=e.stripScripts();
}var b,c=e.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i);if(c){b=new Element("table");var a=c[1].toLowerCase();if(["td","th","tr"].contains(a)){b=new Element("tbody").inject(b);
if(a!="tr"){b=new Element("tr").inject(b);}}}return(b||new Element("div")).set("html",e).getChildren();};Element.implement({isDisplayed:function(){return this.getStyle("display")!="none";
},isVisible:function(){var a=this.offsetWidth,b=this.offsetHeight;return(a==0&&b==0)?false:(a>0&&b>0)?true:this.isDisplayed();},toggle:function(){return this[this.isDisplayed()?"hide":"show"]();
},hide:function(){var b;try{if((b=this.getStyle("display"))=="none"){b=null;}}catch(a){}return this.store("originalDisplay",b||"block").setStyle("display","none");
},show:function(a){return this.setStyle("display",a||this.retrieve("originalDisplay")||"block");},swapClass:function(a,b){return this.removeClass(a).addClass(b);
}});if(!window.Form){window.Form={};}var InputValidator=new Class({Implements:[Options],options:{errorMsg:"Validation failed.",test:function(a){return true;
}},initialize:function(b,a){this.setOptions(a);this.className=b;},test:function(b,a){if(document.id(b)){return this.options.test(document.id(b),a||this.getProps(b));
}else{return false;}},getError:function(c,a){var b=this.options.errorMsg;if($type(b)=="function"){b=b(document.id(c),a||this.getProps(c));}return b;},getProps:function(a){if(!document.id(a)){return{};
}return a.get("validatorProps");}});Element.Properties.validatorProps={set:function(a){return this.eliminate("validatorProps").store("validatorProps",a);
},get:function(a){if(a){this.set(a);}if(this.retrieve("validatorProps")){return this.retrieve("validatorProps");}if(this.getProperty("validatorProps")){try{this.store("validatorProps",JSON.decode(this.getProperty("validatorProps")));
}catch(c){return{};}}else{var b=this.get("class").split(" ").filter(function(d){return d.test(":");});if(!b.length){this.store("validatorProps",{});}else{a={};
b.each(function(d){var f=d.split(":");if(f[1]){try{a[f[0]]=JSON.decode(f[1]);}catch(g){}}});this.store("validatorProps",a);}}return this.retrieve("validatorProps");
}};Form.Validator=new Class({Implements:[Options,Events],Binds:["onSubmit"],options:{fieldSelectors:"input, select, textarea",ignoreHidden:true,ignoreDisabled:true,useTitles:false,evaluateOnSubmit:true,evaluateFieldsOnBlur:true,evaluateFieldsOnChange:true,serial:true,stopOnFailure:true,warningPrefix:function(){return Form.Validator.getMsg("warningPrefix")||"Warning: ";
},errorPrefix:function(){return Form.Validator.getMsg("errorPrefix")||"Error: ";}},initialize:function(b,a){this.setOptions(a);this.element=document.id(b);
this.element.store("validator",this);this.warningPrefix=$lambda(this.options.warningPrefix)();this.errorPrefix=$lambda(this.options.errorPrefix)();if(this.options.evaluateOnSubmit){this.element.addEvent("submit",this.onSubmit);
}if(this.options.evaluateFieldsOnBlur||this.options.evaluateFieldsOnChange){this.watchFields(this.getFields());}},toElement:function(){return this.element;
},getFields:function(){return(this.fields=this.element.getElements(this.options.fieldSelectors));},watchFields:function(a){a.each(function(b){if(this.options.evaluateFieldsOnBlur){b.addEvent("blur",this.validationMonitor.pass([b,false],this));
}if(this.options.evaluateFieldsOnChange){b.addEvent("change",this.validationMonitor.pass([b,true],this));}},this);},validationMonitor:function(){$clear(this.timer);
this.timer=this.validateField.delay(50,this,arguments);},onSubmit:function(a){if(!this.validate(a)&&a){a.preventDefault();}else{this.reset();}},reset:function(){this.getFields().each(this.resetField,this);
return this;},validate:function(b){var a=this.getFields().map(function(c){return this.validateField(c,true);},this).every(function(c){return c;});this.fireEvent("formValidate",[a,this.element,b]);
if(this.options.stopOnFailure&&!a&&b){b.preventDefault();}return a;},validateField:function(i,a){if(this.paused){return true;}i=document.id(i);var d=!i.hasClass("validation-failed");
var f,h;if(this.options.serial&&!a){f=this.element.getElement(".validation-failed");h=this.element.getElement(".warning");}if(i&&(!f||a||i.hasClass("validation-failed")||(f&&!this.options.serial))){var c=i.className.split(" ").some(function(j){return this.getValidator(j);
},this);var g=[];i.className.split(" ").each(function(j){if(j&&!this.test(j,i)){g.include(j);}},this);d=g.length===0;if(c&&!i.hasClass("warnOnly")){if(d){i.addClass("validation-passed").removeClass("validation-failed");
this.fireEvent("elementPass",i);}else{i.addClass("validation-failed").removeClass("validation-passed");this.fireEvent("elementFail",[i,g]);}}if(!h){var e=i.className.split(" ").some(function(j){if(j.test("^warn-")||i.hasClass("warnOnly")){return this.getValidator(j.replace(/^warn-/,""));
}else{return null;}},this);i.removeClass("warning");var b=i.className.split(" ").map(function(j){if(j.test("^warn-")||i.hasClass("warnOnly")){return this.test(j.replace(/^warn-/,""),i,true);
}else{return null;}},this);}}return d;},test:function(b,d,e){d=document.id(d);if((this.options.ignoreHidden&&!d.isVisible())||(this.options.ignoreDisabled&&d.get("disabled"))){return true;
}var a=this.getValidator(b);if(d.hasClass("ignoreValidation")){return true;}e=$pick(e,false);if(d.hasClass("warnOnly")){e=true;}var c=a?a.test(d):true;
if(a&&d.isVisible()){this.fireEvent("elementValidate",[c,d,b,e]);}if(e){return true;}return c;},resetField:function(a){a=document.id(a);if(a){a.className.split(" ").each(function(b){if(b.test("^warn-")){b=b.replace(/^warn-/,"");
}a.removeClass("validation-failed");a.removeClass("warning");a.removeClass("validation-passed");},this);}return this;},stop:function(){this.paused=true;
return this;},start:function(){this.paused=false;return this;},ignoreField:function(a,b){a=document.id(a);if(a){this.enforceField(a);if(b){a.addClass("warnOnly");
}else{a.addClass("ignoreValidation");}}return this;},enforceField:function(a){a=document.id(a);if(a){a.removeClass("warnOnly").removeClass("ignoreValidation");
}return this;}});Form.Validator.getMsg=function(a){return MooTools.lang.get("Form.Validator",a);};Form.Validator.adders={validators:{},add:function(b,a){this.validators[b]=new InputValidator(b,a);
if(!this.initialize){this.implement({validators:this.validators});}},addAllThese:function(a){$A(a).each(function(b){this.add(b[0],b[1]);},this);},getValidator:function(a){return this.validators[a.split(":")[0]];
}};$extend(Form.Validator,Form.Validator.adders);Form.Validator.implement(Form.Validator.adders);Form.Validator.add("IsEmpty",{errorMsg:false,test:function(a){if(a.type=="select-one"||a.type=="select"){return !(a.selectedIndex>=0&&a.options[a.selectedIndex].value!="");
}else{return((a.get("value")==null)||(a.get("value").length==0));}}});Form.Validator.addAllThese([["required",{errorMsg:function(){return Form.Validator.getMsg("required");
},test:function(a){return !Form.Validator.getValidator("IsEmpty").test(a);}}],["minLength",{errorMsg:function(a,b){if($type(b.minLength)){return Form.Validator.getMsg("minLength").substitute({minLength:b.minLength,length:a.get("value").length});
}else{return"";}},test:function(a,b){if($type(b.minLength)){return(a.get("value").length>=$pick(b.minLength,0));}else{return true;}}}],["maxLength",{errorMsg:function(a,b){if($type(b.maxLength)){return Form.Validator.getMsg("maxLength").substitute({maxLength:b.maxLength,length:a.get("value").length});
}else{return"";}},test:function(a,b){return(a.get("value").length<=$pick(b.maxLength,10000));}}],["validate-integer",{errorMsg:Form.Validator.getMsg.pass("integer"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^(-?[1-9]\d*|0)$/).test(a.get("value"));
}}],["validate-numeric",{errorMsg:Form.Validator.getMsg.pass("numeric"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(a.get("value"));
}}],["validate-digits",{errorMsg:Form.Validator.getMsg.pass("digits"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^[\d() .:\-\+#]+$/.test(a.get("value")));
}}],["validate-alpha",{errorMsg:Form.Validator.getMsg.pass("alpha"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^[a-zA-Z]+$/).test(a.get("value"));
}}],["validate-alphanum",{errorMsg:Form.Validator.getMsg.pass("alphanum"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||!(/\W/).test(a.get("value"));
}}],["validate-date",{errorMsg:function(a,b){if(Date.parse){var c=b.dateFormat||"%x";return Form.Validator.getMsg("dateSuchAs").substitute({date:new Date().format(c)});
}else{return Form.Validator.getMsg("dateInFormatMDY");}},test:function(a,b){if(Form.Validator.getValidator("IsEmpty").test(a)){return true;}var g;if(Date.parse){var f=b.dateFormat||"%x";
g=Date.parse(a.get("value"));var e=g.format(f);if(e!="invalid date"){a.set("value",e);}return !isNaN(g);}else{var c=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!c.test(a.get("value"))){return false;
}g=new Date(a.get("value").replace(c,"$1/$2/$3"));return(parseInt(RegExp.$1,10)==(1+g.getMonth()))&&(parseInt(RegExp.$2,10)==g.getDate())&&(parseInt(RegExp.$3,10)==g.getFullYear());
}}}],["validate-email",{errorMsg:Form.Validator.getMsg.pass("email"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(a.get("value"));
}}],["validate-url",{errorMsg:Form.Validator.getMsg.pass("url"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(a.get("value"));
}}],["validate-currency-dollar",{errorMsg:Form.Validator.getMsg.pass("currencyDollar"),test:function(a){return Form.Validator.getValidator("IsEmpty").test(a)||(/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(a.get("value"));
}}],["validate-one-required",{errorMsg:Form.Validator.getMsg.pass("oneRequired"),test:function(a,b){var c=document.id(b["validate-one-required"])||a.getParent();
return c.getElements("input").some(function(d){if(["checkbox","radio"].contains(d.get("type"))){return d.get("checked");}return d.get("value");});}}]]);
Element.Properties.validator={set:function(a){var b=this.retrieve("validator");if(b){b.setOptions(a);}return this.store("validator:options");},get:function(a){if(a||!this.retrieve("validator")){if(a||!this.retrieve("validator:options")){this.set("validator",a);
}this.store("validator",new Form.Validator(this,this.retrieve("validator:options")));}return this.retrieve("validator");}};Element.implement({validate:function(a){this.set("validator",a);
return this.get("validator",a).validate();}});var FormValidator=Form.Validator;MooTools.lang.set("en-US","Date",{months:["January","February","March","April","May","June","July","August","September","October","November","December"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dateOrder:["month","date","year"],shortDate:"%m/%d/%Y",shortTime:"%I:%M%p",AM:"AM",PM:"PM",ordinal:function(a){return(a>3&&a<21)?"th":["th","st","nd","rd","th"][Math.min(a%10,4)];
},lessThanMinuteAgo:"less than a minute ago",minuteAgo:"about a minute ago",minutesAgo:"{delta} minutes ago",hourAgo:"about an hour ago",hoursAgo:"about {delta} hours ago",dayAgo:"1 day ago",daysAgo:"{delta} days ago",weekAgo:"1 week ago",weeksAgo:"{delta} weeks ago",monthAgo:"1 month ago",monthsAgo:"{delta} months ago",yearAgo:"1 year ago",yearsAgo:"{delta} years ago",lessThanMinuteUntil:"less than a minute from now",minuteUntil:"about a minute from now",minutesUntil:"{delta} minutes from now",hourUntil:"about an hour from now",hoursUntil:"about {delta} hours from now",dayUntil:"1 day from now",daysUntil:"{delta} days from now",weekUntil:"1 week from now",weeksUntil:"{delta} weeks from now",monthUntil:"1 month from now",monthsUntil:"{delta} months from now",yearUntil:"1 year from now",yearsUntil:"{delta} years from now"});
MooTools.lang.set("en-US","Form.Validator",{required:"This field is required.",minLength:"Please enter at least {minLength} characters (you entered {length} characters).",maxLength:"Please enter no more than {maxLength} characters (you entered {length} characters).",integer:"Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.",numeric:'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").',digits:"Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).",alpha:"Please use letters only (a-z) with in this field. No spaces or other characters are allowed.",alphanum:"Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.",dateSuchAs:"Please enter a valid date such as {date}",dateInFormatMDY:'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")',email:'Please enter a valid email address. For example "fred@domain.com".',url:"Please enter a valid URL such as http://www.google.com.",currencyDollar:"Please enter a valid $ amount. For example $100.00 .",oneRequired:"Please enter something for at least one of these inputs.",errorPrefix:"Error: ",warningPrefix:"Warning: ",noSpace:"There can be no spaces in this input.",reqChkByNode:"No items are selected.",requiredChk:"This field is required.",reqChkByName:"Please select a {label}.",match:"This field needs to match the {matchName} field",startDate:"the start date",endDate:"the end date",currendDate:"the current date",afterDate:"The date should be the same or after {label}.",beforeDate:"The date should be the same or before {label}.",startMonth:"Please select a start month",sameMonth:"These two dates must be in the same month - you must change one or the other.",creditcard:"The credit card number entered is invalid. Please check the number and try again. {length} digits entered."});

//> require <mootools 1.2.4>

var HistoryManager = (function()
{
	var HistoryManagerSingleton = new Class({

		Implements: Events,

		initialize: function()
		{
			// Store initial location
			this._currentLocation = this._getHash();

			// Internet Explorer 6 & 7
			if (Browser.Engine.trident && Browser.Engine.version <= 5)
			{
				this._iframe = new IFrame({
					src: "javascript:'<html><body>" + this._currentLocation.replace(/(['"])/g, '\\$1') + "</body></html>'",
					styles: { display: 'none' }
				}).inject(document.body).contentWindow;

				this.addState = this._addStateIE;
				this._monitorIE.periodical(200, this);
			}
			// Safari 2
			else if (Browser.Engine.webkit419)
			{
				this._form = new Element("form", { method: 'get' }).inject(document.body);
				this._historyCounter = history.length;
				this._stateHistory = [];
				this._stateHistory[history.length] = this._getHash();

				this.addState = this._addStateSafari;
				this._monitorSafari.periodical(200, this);
			}
			// Opera 9.25
			else if (Browser.Engine.presto925)
			{
				this.addState = this._addStateDefault;

				window.$justForOpera = this._monitorDefault.bind(this);
				new Element('img', {
					src: "javascript:location.href='javascript:$justForOpera();';",
					style: "position: absolute; top: -1000px;"
				}).inject(document.body);
			}
			// Everything else
			else
			{
				this.addState = this._addStateDefault;
				this._monitorDefault.periodical(200, this);
			}
		},

		getCurrentHash: function()
		{
			return this._currentLocation;
		},

		// All history manager hashes will have a / as the first char to work around
		// an IE bug whereby it will add changes to location.hash to the history
		// stack if there is an element of that id in the page. ID's cannot contain
		// the forward slash character therefore if we start every hash with that
		// there will never be a collisiton. Hence slice off the first char.

		// Use location.href because location.hash is already URI decoded, which may cause
		// problems with encoding/decoding functions.

		_getHash: function()
		{
			var hash = top.location.href.indexOf("#") > -1 ? top.location.href.split('#')[1] : '';

			if (Browser.Engine.webkit)
			{
				hash = unescape(hash);
			}

			//return unescape(hash);
			return hash;
		},

		_addStateIE: function(hash)
		{
			if (this._currentLocation != hash)
			{
				top.location.hash = "#" + hash;
				this._currentLocation = hash;

				this._iframe.document.open('text/html');
				this._iframe.document.write('<html><body>', hash, '</body></html>');
				this._iframe.document.close();
			}
			return this;
		},

		_monitorIE: function()
		{
			var hash = this._iframe.document.body.innerText;

			if (hash != this._currentLocation)
			{
				top.location.hash = "#" + hash;
				this._currentLocation = hash;
				this.fireEvent('onHistoryChange', [hash]);
			}
		},

		_addStateSafari: function(hash)
		{
			if (this._currentLocation != hash)
			{
				this._form.set('action', '#' + hash).submit()
				this._currentLocation = hash;
				this._stateHistory[history.length] = unescape(this._getHash());
				this._historyCounter = history.length;
			}
			return this;
		},

		_monitorSafari: function()
		{
			if (history.length != this._historyCounter)
			{
				this._historyCounter = history.length;
				this._currentLocation = this._stateHistory[history.length];
				this.fireEvent('onHistoryChange', [this._currentLocation]);
			}
		},

		_addStateDefault: function(hash)
		{
			//alert(hash + " | " + unescape(hash));
			if (this._currentLocation != hash)
			{
				top.location.hash = '#' + hash;
				this._currentLocation = hash;
			}
			return this;
		},

		_monitorDefault: function()
		{
			var hash = this._getHash();

			if (hash != this._currentLocation)
			{
				this._currentLocation = hash;
				this.fireEvent('onHistoryChange', [hash]);
			}
		}
	});

	var singleton;

	return function()
	{
		return singleton || (singleton = new HistoryManagerSingleton());
	}

})();
//> require <mootools 1.2.4>

var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/100}return{"ultra-condensed":0.5,"extra-condensed":0.625,condensed:0.75,"semi-condensed":0.875,"semi-expanded":1.125,expanded:1.25,"extra-expanded":1.5,"ultra-expanded":2}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E<B;++E){D=C[E].split("=",2).reverse();G.stops.push([D[1]||E/(B-1),D[0]])}return G}),quotedList:j(function(E){var D=[],C=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,B;while(B=C.exec(E)){D.push(B[3]||B[1])}return D}),recognizesMedia:j(function(G){var E=document.createElement("style"),D,C,B;E.type="text/css";E.media=G;try{E.appendChild(document.createTextNode("/**/"))}catch(F){}C=g("head")[0];C.insertBefore(E,C.firstChild);D=(E.sheet||E.styleSheet);B=D&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var B=RegExp("(?:^|\\s+)"+C+"(?=\\s|$)","g");D.className=D.className.replace(B,"");return D},supports:function(D,C){var B=document.createElement("span").style;if(B[D]===undefined){return false}B[D]=C;return B[D]===C},textAlign:function(E,D,B,C){if(D.get("textAlign")=="right"){if(B>0){E=" "+E}}else{if(B<C-1){E+=" "}}return E},textShadow:j(function(F){if(F=="none"){return null}var E=[],G={},B,C=0;var D=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(B=D.exec(F)){if(B[0]==","){E.push(G);G={};C=0}else{if(B[1]){G.color=B[1]}else{G[["offX","offY","blur"][C++]]=B[2]}}}E.push(G);return E}),textTransform:(function(){var B={uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var C=B[D.get("textTransform")];return C?C(E):E}})(),whiteSpace:(function(){var D={inline:1,"inline-block":1,"run-in":1};var C=/^\s+/,B=/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()=="br"){H=H.replace(C,"")}}if(D[F.get("display")]){return H}if(!G.previousSibling){H=H.replace(C,"")}if(!G.nextSibling){H=H.replace(B,"")}return H}})()};n.ready=(function(){var B=!n.recognizesMedia("all"),E=false;var D=[],H=function(){B=true;for(var K;K=D.shift();K()){}};var I=g("link"),J=g("style");function C(K){return K.disabled||G(K.sheet,K.media||"screen")}function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.disabled){return false}try{var Q=M.cssRules,O;if(Q){search:for(var L=0,K=Q.length;O=Q[L],L<K;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L=I[K];++K){if(L.rel.toLowerCase()=="stylesheet"&&!C(L)){return false}}for(K=0;L=J[K];++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){E=n.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1};this.glyphs=D.glyphs;this.w=D.w;this.baseSize=parseInt(C["units-per-em"],10);this.family=C["font-family"].toLowerCase();this.weight=C["font-weight"];this.style=C["font-style"]||"normal";this.viewBox=(function(){var F=C.bbox.split(/\s+/);var E={minX:parseInt(F[0],10),minY:parseInt(F[1],10),maxX:parseInt(F[2],10),maxY:parseInt(F[3],10)};E.width=E.maxX-E.minX;E.height=E.maxY-E.minY;E.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return E})();this.ascent=-parseInt(C.ascent,10);this.descent=-parseInt(C.descent,10);this.height=-this.ascent+this.descent;this.spacing=function(L,N,E){var O=this.glyphs,M,K,G,P=[],F=0,J=-1,I=-1,H;while(H=L[++J]){M=O[H]||this.missingGlyph;if(!M){continue}if(K){F-=G=K[H]||0;P[I]-=G}F+=P[++I]=~~(M.w||this.w)+N+(B[H]?E:0);K=M.k}P.total=F;return P}}function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=function(D){(C[D.style]||(C[D.style]={}))[D.weight]=D};this.get=function(H,I){var G=C[H]||C[B[H]]||C.normal||C.italic||C.oblique;if(!G){return null}I={normal:400,bold:700}[I]||parseInt(I,10);if(G[I]){return G[I]}var E={1:1,99:0}[I%100],K=[],F,D;if(E===undefined){E=I>400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||J<F){F=J}if(!D||J>D){D=J}K.push(J)}if(I<F){I=F}if(I>D){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?M<L:M>L:(M<=I&&L<=I)?M>L:M<L)?-1:1});return G[K[0]]}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var F=G.relatedTarget;if(!F||D(this,F)){return}C(this,G.type=="mouseover")}function E(F){C(this,F.type=="mouseenter")}function C(F,G){setTimeout(function(){var H=d.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attach=function(F){if(F.onmouseenter===undefined){q(F,"mouseover",B);q(F,"mouseout",B)}else{q(F,"mouseenter",E);q(F,"mouseleave",E)}}}function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];++F){E[F]=C[D[G]]}return E}this.add=function(F,E){D[F]=C.push(E)-1};this.repeat=function(){var E=arguments.length?B(arguments):C,F;for(var G=0;F=E[G++];){m.replace(F[0],F[1],true)}}}function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}this.get=function(E){var F=C(E);return D[F]||(D[F]={})}}function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k(E,F)){D[F]=E[F]}}return this};this.get=function(E){return D[E]!=undefined?D[E]:B[E]};this.getSize=function(F,E){return C[F]||(C[F]=new n.Size(this.get(F),E))};this.isUsable=function(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent("on"+B,function(){return D.call(C,window.event)})}}}function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hoverables[C.nodeName.toLowerCase()]){b.attach(C)}D.options=B;return C}function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,arguments)}return C[D]}}function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;for(var C=0;D=B[C];++C){if(i[D]){return i[D].get(E.get("fontStyle"),E.get("fontWeight"))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],E<D;++E){for(F in B){if(k(B,F)){C[F]=B[F]}}}return C}function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M===""){return K}var L=N.separate;var I=M.split(p[L]),B=(L=="words");if(B&&t){if(/^\s/.test(M)){I.unshift("")}if(/\s$/.test(M)){I.push("")}}for(var J=0,G=I.length;J<G;++J){H=z[N.engine](E,B?n.textAlign(I[J],C,J,G):I[J],C,N,F,D,J<G-1);if(H){K.appendChild(H)}}return K}function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}var E=!M.textless[C];var B=n.getStyle(v(D,M)).extend(M);var F=c(D,B),G,K,I,H,L,J;if(!F){return}for(G=D.firstChild;G;G=I){K=G.nodeType;I=G.nextSibling;if(E&&K==3){if(H){H.appendData(G.data);D.removeChild(G)}else{H=G}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);H=null}if(K==1){if(G.firstChild){if(G.nodeName.toLowerCase()=="cufon"){z[M.engine](F,null,B,M,G,D)}else{arguments.callee(G,M)}}J=G}}}var t=" ".split(/\s+/).length==0;var d=new A();var b=new r();var y=new u();var e=false;var z={},i={},w={autoDetect:false,engine:null,forceHitArea:false,hover:false,hoverables:{a:true},ignore:{applet:1,canvas:1,col:1,colgroup:1,head:1,iframe:1,map:1,optgroup:1,option:1,script:1,select:1,style:1,textarea:1,title:1,pre:1},printable:true,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:"words",textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:"none"};var p={words:/\s/.test("\u00a0")?/[^\S\u00a0]+/:/\s+/,characters:"",none:/^/};m.now=function(){x.ready();return m};m.refresh=function(){y.repeat.apply(y,arguments);return m};m.registerEngine=function(C,B){if(!B){return m}z[C]=B;return m.set("engine",C)};m.registerFont=function(D){if(!D){return m}var B=new s(D),C=B.family;if(!i[C]){i[C]=new f()}i[C].add(B);return m.set("fontFamily",'"'+C+'"')};m.replace=function(D,C,B){C=h(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),"cufon-active cufon-loading");n.ready(function(){n.addClass(n.removeClass(x.root(),"cufon-loading"),"cufon-ready")});e=true}if(C.hover){C.forceHitArea=true}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadow=="string"){C.textShadow=n.textShadow(C.textShadow)}if(typeof C.color=="string"&&/^-/.test(C.color)){C.textGradient=n.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof D=="string"){D=[D]}n.ready(function(){for(var F=0,E=D.length;F<E;++F){var G=D[F];if(typeof G=="string"){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.set=function(B,C){w[B]=C;return m};return m})();Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(("cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;"+(e?"":"font-size:1px;line-height:1px;")+"}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}"+(a?"cufon canvas{position:relative;}":"cufon canvas{position:absolute;}")+"}@media print{cufon{padding:0;}cufon canvas{display:none;}}").replace(/;/g,"!important;")));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(V,w,P,t,C,W){var k=(w===null);if(k){w=C.getAttribute("alt")}var A=V.viewBox;var m=P.getSize("fontSize",V.baseSize);var B=0,O=0,N=0,u=0;var z=t.textShadow,L=[];if(z){for(var U=z.length;U--;){var F=z[U];var K=m.convertFrom(parseFloat(F.offX));var I=m.convertFrom(parseFloat(F.offY));L[U]=[K,I];if(I<B){B=I}if(K>O){O=K}if(I>N){N=I}if(K<u){u=K}}}var Z=Cufon.CSS.textTransform(w,P).split("");var E=V.spacing(Z,~~m.convertFrom(parseFloat(P.get("letterSpacing"))||0),~~m.convertFrom(parseFloat(P.get("wordSpacing"))||0));if(!E.length){return null}var h=E.total;O+=A.width-E[E.length-1];u+=A.minX;var s,n;if(k){s=C;n=C.firstChild}else{s=document.createElement("cufon");s.className="cufon cufon-canvas";s.setAttribute("alt",w);n=document.createElement("canvas");s.appendChild(n);if(t.printable){var S=document.createElement("cufontext");S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aa=s.style;var H=n.style;var j=m.convert(A.height);var Y=Math.ceil(j);var M=Y/j;var G=M*Cufon.CSS.fontStretch(P.get("fontStretch"));var J=h*G;var Q=Math.ceil(m.convert(J+O-u));var o=Math.ceil(m.convert(A.height-B+N));n.width=Q;n.height=o;H.width=Q+"px";H.height=o+"px";B+=A.minY;H.top=Math.round(m.convert(B-V.ascent))+"px";H.left=Math.round(m.convert(u))+"px";var r=Math.max(Math.ceil(m.convert(J)),0)+"px";if(a){aa.width=r;aa.height=m.convert(V.height)+"px"}else{aa.paddingLeft=r;aa.paddingBottom=(m.convert(V.height)-1)+"px"}var X=n.getContext("2d"),D=j/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){var ab=x[Z[l]]||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.code=d("m"+ab.d,X)}X.fill()}X.translate(E[++g],0)}X.restore()}if(z){for(var U=z.length;U--;){var F=z[U];X.save();X.fillStyle=F.color;X.translate.apply(X,L[U]);T()}}var q=t.textGradient;if(q){var v=q.stops,p=X.createLinearGradient(0,A.minY,0,A.maxY);for(var U=0,R=v.length;U<R;++U){p.addColorStop.apply(p,v[U])}X.fillStyle=p}else{X.fillStyle=P.get("color")}T();return s}})());Cufon.registerEngine("vml",(function(){var e=document.namespaces;if(!e){return}e.add("cvml","urn:schemas-microsoft-com:vml");e=null;var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;var h=(document.documentMode||0)<8;document.write(('<style type="text/css">cufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;m<l;++m){i.push(n[m][0]*100+"% "+n[m][1])}o.colors=i.join(",");o.color2=n[l][1];g[q]=o}return g[q]}return function(ac,G,Y,C,K,ad,W){var n=(G===null);if(n){G=K.alt}var I=ac.viewBox;var p=Y.computedFontSize||(Y.computedFontSize=new Cufon.CSS.Size(c(ad,Y.get("fontSize"))+"px",ac.baseSize));var y,q;if(n){y=K;q=K.firstChild}else{y=document.createElement("cufon");y.className="cufon cufon-vml";y.alt=G;q=document.createElement("cufoncanvas");y.appendChild(q);if(C.printable){var Z=document.createElement("cufontext");Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement("cvml:shape"))}}var ai=y.style;var R=q.style;var l=p.convert(I.height),af=Math.ceil(l);var V=af/l;var P=V*Cufon.CSS.fontStretch(Y.get("fontStretch"));var U=I.minX,T=I.minY;R.height=af;R.top=Math.round(p.convert(T-ac.ascent));R.left=Math.round(p.convert(U));ai.height=p.convert(ac.height)+"px";var F=Y.get("color");var ag=Cufon.CSS.textTransform(G,Y).split("");var L=ac.spacing(ag,f(ad,Y,p,"letterSpacing"),f(ad,Y,p,"wordSpacing"));if(!L.length){return null}var k=L.total;var x=-U+k+(I.width-L[L.length-1]);var ah=p.convert(x*P),X=Math.round(ah);var O=x+","+I.height,m;var J="r"+O+"ns";var u=C.textGradient&&d(C.textGradient);var o=ac.glyphs,S=0;var H=C.textShadow;var ab=-1,aa=0,w;while(w=ag[++ab]){var D=o[ag[ab]]||ac.missingGlyph,v;if(!D){continue}if(n){v=q.childNodes[aa];while(v.firstChild){v.removeChild(v.firstChild)}}else{v=document.createElement("cvml:shape");q.appendChild(v)}v.stroked="f";v.coordsize=O;v.coordorigin=m=(U-S)+","+T;v.path=(D.d?"m"+D.d+"xe":"")+"m"+m+J;v.fillcolor=F;if(u){v.appendChild(u.cloneNode(false))}var ae=v.style;ae.width=X;ae.height=af;if(H){var s=H[0],r=H[1];var B=Cufon.CSS.color(s.color),z;var N=document.createElement("cvml:shadow");N.on="t";N.color=B.color;N.offset=s.offX+","+s.offY;if(r){z=Cufon.CSS.color(r.color);N.type="double";N.color2=z.color;N.offset2=r.offX+","+r.offY}N.opacity=B.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+=L[aa++]}var M=v.nextSibling,t,A;if(C.forceHitArea){if(!M){M=document.createElement("cvml:rect");M.stroked="f";M.className="cufon-vml-cover";t=document.createElement("cvml:fill");t.opacity=0;M.appendChild(t);q.appendChild(M)}A=M.style;A.width=X;A.height=af}else{if(M){q.removeChild(M)}}ai.width=Math.max(Math.ceil(p.convert(k*P)),0);if(h){var Q=Y.computedYAdjust;if(Q===undefined){var E=Y.get("lineHeight");if(E=="normal"){E="1em"}else{if(!isNaN(E)){E+="em"}}Y.computedYAdjust=Q=0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTop=Math.ceil(Q)+"px";ai.marginBottom=Q+"px"}}return y}})());
//> require <mootools 1.2.4>

/**
 * Swiff.Uploader - Flash FileReference Control
 *
 * @version		3.0
 *
 * @license		MIT License
 *
 * @author		Harald Kirschner <http://digitarald.de>
 * @author		Valerio Proietti, <http://mad4milk.net>
 * @copyright	Authors
 */

Swiff.Uploader = new Class({

	Extends: Swiff,

	Implements: Events,

	options: {
		path: '/Swiff.Uploader.swf',
		
		target: null,
		zIndex: 9999,
		
		height: 30,
		width: 100,
		callBacks: null,
		params: {
			wMode: 'opaque',
			menu: 'false',
			allowScriptAccess: 'always'
		},

		typeFilter: null,
		multiple: true,
		queued: true,
		verbose: false,

		url: null,
		method: null,
		data: null,
		mergeData: true,
		fieldName: null,

		fileSizeMin: 1,
		fileSizeMax: null, // Official limit is 100 MB for FileReference, but I tested up to 2Gb!
		allowDuplicates: false,
		timeLimit: (Browser.Platform.linux) ? 0 : 30,

		buttonImage: null,
		policyFile: null,
		
		fileListMax: 0,
		fileListSizeMax: 0,

		instantStart: false,
		appendCookieData: false,
		
		fileClass: null
		/*
		onLoad: $empty,
		onFail: $empty,
		onStart: $empty,
		onQueue: $empty,
		onComplete: $empty,
		onBrowse: $empty,
		onDisabledBrowse: $empty,
		onCancel: $empty,
		onSelect: $empty,
		onSelectSuccess: $empty,
		onSelectFail: $empty,
		
		onButtonEnter: $empty,
		onButtonLeave: $empty,
		onButtonDown: $empty,
		onButtonDisable: $empty,
		
		onFileStart: $empty,
		onFileStop: $empty,
		onFileRequeue: $empty,
		onFileOpen: $empty,
		onFileProgress: $empty,
		onFileComplete: $empty,
		onFileRemove: $empty,
		
		onBeforeStart: $empty,
		onBeforeStop: $empty,
		onBeforeRemove: $empty
		*/
	},

	initialize: function(options) {
		// protected events to control the class, added
		// before setting options (which adds own events)
		this.addEvent('load', this.initializeSwiff, true)
			.addEvent('select', this.processFiles, true)
			.addEvent('complete', this.update, true)
			.addEvent('fileRemove', function(file) {
				this.fileList.erase(file);
			}.bind(this), true);

		this.setOptions(options);

		// callbacks are no longer in the options, every callback
		// is fired as event, this is just compat
		if (this.options.callBacks) {
			Hash.each(this.options.callBacks, function(fn, name) {
				this.addEvent(name, fn);
			}, this);
		}

		this.options.callBacks = {
			fireCallback: this.fireCallback.bind(this)
		};

		var path = this.options.path;
		if (!path.contains('?')) path += '?noCache=' + $time(); // cache in IE

		// container options for Swiff class
		this.options.container = this.box = new Element('span', {'class': 'swiff-uploader-box'}).inject($(this.options.container) || document.body);

		// target 
		this.target = $(this.options.target);
		if (this.target) {
			var scroll = window.getScroll();
			this.box.setStyles({
				position: 'absolute',
				visibility: 'visible',
				zIndex: this.options.zIndex,
				overflow: 'hidden',
				height: 1, width: 1,
				top: scroll.y, left: scroll.x
			});
			
			// we force wMode to transparent for the overlay effect
			this.parent(path, {
				params: {
					wMode: 'transparent'
				},
				height: '100%',
				width: '100%'
			});
			
			this.target.addEvent('mouseenter', this.reposition.bind(this, []));
			
			// button interactions, relayed to to the target
			this.addEvents({
				buttonEnter: this.targetRelay.bind(this, ['mouseenter']),
				buttonLeave: this.targetRelay.bind(this, ['mouseleave']),
				buttonDown: this.targetRelay.bind(this, ['mousedown']),
				buttonDisable: this.targetRelay.bind(this, ['disable'])
			});
			
			this.reposition();
			window.addEvent('resize', this.reposition.bind(this, []));
		} else {
			this.parent(path);
		}

		this.inject(this.box);

		this.fileList = [];
		
		this.size = this.uploading = this.bytesLoaded = this.percentLoaded = 0;
		
		if (Browser.Plugins.Flash.version < 9) {
			this.fireEvent('fail', ['flash']);
		} else {
			this.verifyLoad.delay(1000, this);
		}
	},
	
	verifyLoad: function() {
		if (this.loaded) return;
		if (!this.object.parentNode) {
			this.fireEvent('fail', ['disabled']);
		} else if (this.object.style.display == 'none') {
			this.fireEvent('fail', ['hidden']);
		} else if (!this.object.offsetWidth) {
			this.fireEvent('fail', ['empty']);
		}
	},

	fireCallback: function(name, args) {
		// file* callbacks are relayed to the specific file
		if (name.substr(0, 4) == 'file') {
			// updated queue data is the second argument
			if (args.length > 1) this.update(args[1]);
			var data = args[0];
			
			var file = this.findFile(data.id);
			this.fireEvent(name, file || data, 5);
			if (file) {
				var fire = name.replace(/^file([A-Z])/, function($0, $1) {
					return $1.toLowerCase();
				});
				file.update(data).fireEvent(fire, [data], 10);
			}
		} else {
			this.fireEvent(name, args, 5);
		}
	},

	update: function(data) {
		// the data is saved right to the instance 
		$extend(this, data);
		this.fireEvent('queue', [this], 10);
		return this;
	},

	findFile: function(id) {
		for (var i = 0; i < this.fileList.length; i++) {
			if (this.fileList[i].id == id) return this.fileList[i];
		}
		return null;
	},

	initializeSwiff: function() {
		// extracted options for the swf 
		this.remote('initialize', {
			width: this.options.width,
			height: this.options.height,
			typeFilter: this.options.typeFilter,
			multiple: this.options.multiple,
			queued: this.options.queued,
			url: this.options.url,
			method: this.options.method,
			data: this.options.data,
			mergeData: this.options.mergeData,
			fieldName: this.options.fieldName,
			verbose: this.options.verbose,
			fileSizeMin: this.options.fileSizeMin,
			fileSizeMax: this.options.fileSizeMax,
			allowDuplicates: this.options.allowDuplicates,
			timeLimit: this.options.timeLimit,
			buttonImage: this.options.buttonImage,
			policyFile: this.options.policyFile
		});

		this.loaded = true;

		this.appendCookieData();
	},
	
	targetRelay: function(name) {
		if (this.target) this.target.fireEvent(name);
	},

	reposition: function(coords) {
		// update coordinates, manual or automatically
		coords = coords || (this.target && this.target.offsetHeight)
			? this.target.getCoordinates(this.box.getOffsetParent())
			: {top: window.getScrollTop(), left: 0, width: 40, height: 40}
		this.box.setStyles(coords);
		this.fireEvent('reposition', [coords, this.box, this.target]);
	},

	setOptions: function(options) {
		if (options) {
			if (options.url) options.url = Swiff.Uploader.qualifyPath(options.url);
			if (options.buttonImage) options.buttonImage = Swiff.Uploader.qualifyPath(options.buttonImage);
			this.parent(options);
			if (this.loaded) this.remote('setOptions', options);
		}
		return this;
	},

	setEnabled: function(status) {
		this.remote('setEnabled', status);
	},

	start: function() {
		this.fireEvent('beforeStart');
		this.remote('start');
	},

	stop: function() {
		this.fireEvent('beforeStop');
		this.remote('stop');
	},

	remove: function() {
		this.fireEvent('beforeRemove');
		this.remote('remove');
	},

	fileStart: function(file) {
		this.remote('fileStart', file.id);
	},

	fileStop: function(file) {
		this.remote('fileStop', file.id);
	},

	fileRemove: function(file) {
		this.remote('fileRemove', file.id);
	},

	fileRequeue: function(file) {
		this.remote('fileRequeue', file.id);
	},

	appendCookieData: function() {
		var append = this.options.appendCookieData;
		if (!append) return;
		
		var hash = {};
		document.cookie.split(/;\s*/).each(function(cookie) {
			cookie = cookie.split('=');
			if (cookie.length == 2) {
				hash[decodeURIComponent(cookie[0])] = decodeURIComponent(cookie[1]);
			}
		});

		var data = this.options.data || {};
		if ($type(append) == 'string') data[append] = hash;
		else $extend(data, hash);

		this.setOptions({data: data});
	},

	processFiles: function(successraw, failraw, queue) {
		var cls = this.options.fileClass || Swiff.Uploader.File;

		var fail = [], success = [];

		if (successraw) {
			successraw.each(function(data) {
				var ret = new cls(this, data);
				if (!ret.validate()) {
					ret.remove.delay(10, ret);
					fail.push(ret);
				} else {
					this.size += data.size;
					this.fileList.push(ret);
					success.push(ret);
					ret.render();
				}
			}, this);

			this.fireEvent('selectSuccess', [success], 10);
		}

		if (failraw || fail.length) {
			fail.extend((failraw) ? failraw.map(function(data) {
				return new cls(this, data);
			}, this) : []).each(function(file) {
				file.invalidate().render();
			});

			this.fireEvent('selectFail', [fail], 10);
		}

		this.update(queue);

		if (this.options.instantStart && success.length) this.start();
	}

});

$extend(Swiff.Uploader, {

	STATUS_QUEUED: 0,
	STATUS_RUNNING: 1,
	STATUS_ERROR: 2,
	STATUS_COMPLETE: 3,
	STATUS_STOPPED: 4,

	log: function() {
		if (window.console && console.info) console.info.apply(console, arguments);
	},

	unitLabels: {
		b: [{min: 1, unit: 'B'}, {min: 1024, unit: 'kB'}, {min: 1048576, unit: 'MB'}, {min: 1073741824, unit: 'GB'}],
		s: [{min: 1, unit: 's'}, {min: 60, unit: 'm'}, {min: 3600, unit: 'h'}, {min: 86400, unit: 'd'}]
	},

	formatUnit: function(base, type, join) {
		var labels = Swiff.Uploader.unitLabels[(type == 'bps') ? 'b' : type];
		var append = (type == 'bps') ? '/s' : '';
		var i, l = labels.length, value;

		if (base < 1) return '0 ' + labels[0].unit + append;

		if (type == 's') {
			var units = [];

			for (i = l - 1; i >= 0; i--) {
				value = Math.floor(base / labels[i].min);
				if (value) {
					units.push(value + ' ' + labels[i].unit);
					base -= value * labels[i].min;
					if (!base) break;
				}
			}

			return (join === false) ? units : units.join(join || ', ');
		}

		for (i = l - 1; i >= 0; i--) {
			value = labels[i].min;
			if (base >= value) break;
		}

		return (base / value).toFixed(1) + ' ' + labels[i].unit + append;
	}

});

Swiff.Uploader.qualifyPath = (function() {
	
	var anchor;
	
	return function(path) {
		(anchor || (anchor = new Element('a'))).href = path;
		return anchor.href;
	};

})();

Swiff.Uploader.File = new Class({

	Implements: Events,

	initialize: function(base, data) {
		this.base = base;
		this.update(data);
	},

	update: function(data) {
		return $extend(this, data);
	},

	validate: function() {
		var options = this.base.options;
		
		if (options.fileListMax && this.base.fileList.length >= options.fileListMax) {
			this.validationError = 'fileListMax';
			return false;
		}
		
		if (options.fileListSizeMax && (this.base.size + this.size) > options.fileListSizeMax) {
			this.validationError = 'fileListSizeMax';
			return false;
		}
		
		return true;
	},

	invalidate: function() {
		this.invalid = true;
		this.base.fireEvent('fileInvalid', this, 10);
		return this.fireEvent('invalid', this, 10);
	},

	render: function() {
		return this;
	},

	setOptions: function(options) {
		if (options) {
			if (options.url) options.url = Swiff.Uploader.qualifyPath(options.url);
			this.base.remote('fileSetOptions', this.id, options);
			this.options = $merge(this.options, options);
		}
		return this;
	},

	start: function() {
		this.base.fileStart(this);
		return this;
	},

	stop: function() {
		this.base.fileStop(this);
		return this;
	},

	remove: function() {
		this.base.fileRemove(this);
		return this;
	},

	requeue: function() {
		this.base.fileRequeue(this);
	} 

});

//> require <mootools 1.2.4>
//> require <stringBuilder 1.0.0>

var Base64 = new Class(
{
	initialize: function ()
	{
		this.keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
		//		this.indices = [];
		//		this.map = [];

		//		for (var i = 0; i < this.keyStr.length; i++)
		//		{
		//			this.indices[i] = this.keyStr.charAt(i);
		//			f64[b64s.charAt(i)] = i;
		//		}

	},

	encode: function (input)
	{
		var sb = new StringBuilder();
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;

		input = base64._utf8_encode(input);

		while (i < input.length)
		{
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);

			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;

			if (isNaN(chr2))
			{
				enc3 = enc4 = 64;
			}
			else if (isNaN(chr3))
			{
				enc4 = 64;
			}

			sb.append(this.keyStr.charAt(enc1));
			sb.append(this.keyStr.charAt(enc2));
			sb.append(this.keyStr.charAt(enc3));
			sb.append(this.keyStr.charAt(enc4));
		}

		return sb.flush();
	},

	decode: function (input)
	{
		var sb = new StringBuilder();
		var output = '';
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;

		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');

		while (i < input.length)
		{
			enc1 = this.keyStr.indexOf(input.charAt(i++));
			enc2 = this.keyStr.indexOf(input.charAt(i++));
			enc3 = this.keyStr.indexOf(input.charAt(i++));
			enc4 = this.keyStr.indexOf(input.charAt(i++));

			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;

			//output = output + String.fromCharCode(chr1);
			sb.append(String.fromCharCode(chr1));

			if (enc3 != 64)
			{
				//output = output + String.fromCharCode(chr2);
				sb.append(String.fromCharCode(chr2));
			}
			if (enc4 != 64)
			{
				//output = output + String.fromCharCode(chr3);
				sb.append(String.fromCharCode(chr3));
			}
		}

		return base64._utf8_decode(sb.flush());
	},

	_utf8_encode: function (string)
	{
		string = string.replace(/\r\n/g, '\n');
		var sb = new StringBuilder();
		//var utftext = '';

		for (var n = 0; n < string.length; n++)
		{
			var c = string.charCodeAt(n);

			if (c < 128)
			{
				//				utftext += String.fromCharCode(c);
				sb.append(String.fromCharCode(c));
			}
			else if ((c > 127) && (c < 2048))
			{
				//				utftext += String.fromCharCode((c >> 6) | 192);
				//				utftext += String.fromCharCode((c & 63) | 128);
				sb.append(String.fromCharCode((c >> 6) | 192));
				sb.append(String.fromCharCode((c & 63) | 128));
			}
			else
			{
				//				utftext += String.fromCharCode((c >> 12) | 224);
				//				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				//				utftext += String.fromCharCode((c & 63) | 128);
				sb.append(String.fromCharCode((c >> 12) | 224));
				sb.append(String.fromCharCode(((c >> 6) & 63) | 128));
				sb.append(String.fromCharCode((c & 63) | 128));
			}
		}

		return sb.flush();
	},

	_utf8_decode: function (utftext)
	{
		var sb = new StringBuilder();
		var string = '';
		var i = 0;
		var c = 0;
		var c1 = 0;
		var c2 = 0;

		while (i < utftext.length)
		{
			c = utftext.charCodeAt(i);

			if (c < 128)
			{
				//string += String.fromCharCode(c);
				sb.append(String.fromCharCode(c));
				i++;
			}
			else if ((c > 191) && (c < 224))
			{
				c2 = utftext.charCodeAt(i + 1);
				//string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				sb.append(String.fromCharCode(((c & 31) << 6) | (c2 & 63)));
				i += 2;
			}
			else
			{
				c2 = utftext.charCodeAt(i + 1);
				c3 = utftext.charCodeAt(i + 2);
				//string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				sb.append(String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)));
				i += 3;
			}
		}

		//return string;
		return sb.flush();
	}
});

var Base64Json = new Class(
{
	initialize: function ()
	{

	},

	encode: function (obj)
	{
		return base64.encode(JSON.encode(obj));
	},

	decode: function (base64String)
	{
		return JSON.decode(base64.decode(base64String));
	}
});

var base64 = new Base64();
var base64Json = new Base64Json();
//> require <mootools 1.2.4>
//> require <base64Json 1.0.0>

var UI = new Class(
{
	Implements: Events,
	initialize: function()
	{
		this.resizeHandlers = [];
		this.cleanupHandlers = [];
		this.controlRemovalHandlerList = [];
		this.controlRemovalHandlers = {};
		this.elementRemovalHandlers = {};

		this.viewStateHandlerList = [];
		this.viewStateHandlers = {};

		this.commandHandlerList = [];
		this.commandHandlers = {};

		this.initCommands = [];

		this.onSetDialog = function() { };
		this.onReceiveModalPopup = function() { };

		this.onBeforeRequest = function() { };
		this.onAfterRequest = function() { };
	},

	registerResizeHandler: function(handler)
	{
		this.resizeHandlers.push(handler);
	},

	registerCleanupHandler: function(handler)
	{
		this.cleanupHandlers.push(handler);
	},

	registerControlRemovalHandler: function(typeID, handler)
	{
		this.controlRemovalHandlerList.push(typeID);
		this.controlRemovalHandlers[typeID] = handler;

		ui.elementRemovalHandlers[typeID] = handler;
	},

	registerViewStateHandler: function(typeID, handler)
	{
		this.viewStateHandlerList.push(typeID);
		this.viewStateHandlers[typeID] = handler;
	},

	registerCommandHandler: function(action, handler)
	{
		this.commandHandlerList.push(action);
		this.commandHandlers[action] = handler;
	},

	getNestedControl: function(el, id)
	{
		return $(el).getElement('[id=' + id + ']');
	},

	getSubElement: function(el, id)
	{
		return $(el).getElement('[id=' + id + ']');
		//return $(el).getElement('#' + id);
	},

	getDialogParameters: function(dialog)
	{
		var dlgParameters = $(dialog.id + '_parameters');

		if (dlgParameters != null)
		{
			return dlgParameters.value;
		}

		return '{}';
	},

	collectDialogState: function(dialog)
	{
		if (dialog == null)
		{
			return {};
		}

		return {
			'DialogID': dialog.id,
			'DialogState': ui.collectViewState(dialog, true),
			'DialogParameters': base64Json.decode(ui.getDialogParameters(dialog))
		}
	},

	getMetaElements: function(dialog)
	{
		var dialogElements = $(dialog.id + '_elements');
		var metaElements = [];

		if (dialogElements != null && dialogElements.value != '')
		{
			var elements = dialogElements.value.split(',');

			for (var i = 0; i < elements.length; i++)
			{
				var dialogElement = elements[i].split(':');

				var metaElement =
				{
					ID: dialogElement[0],
					TypeID: dialogElement[1],
					Control: null
				};

				metaElement.Control = ui.getSubElement(dialog, metaElement.ID);

				metaElements.push(metaElement);
			}
		}

		return metaElements;
	},

	collectViewState: function(dialog, collectSubStates)
	{
		var controlStates = {};

		controlStates['__type'] = 'cs';

		if (dialog == null)
		{
			return controlStates;
		}

		var metaElements = ui.getMetaElements(dialog);

		for (var i = 0; i < metaElements.length; i++)
		{
			var metaElement = metaElements[i];

			if (ui.viewStateHandlerList.contains(metaElement.TypeID))
			{
				if (metaElement.Control != null)
				{
					controlStates[metaElement.ID] = ui.viewStateHandlers[metaElement.TypeID](metaElement.Control);
				}
			}
		}

		return controlStates;
	},

	attachDialogState: function(dialogID)
	{
		this.attachedDialogState = base64Json.encode(this.collectDialogState($(dialogID)));
	},

	overwriteDialogTarget: function(dialogID)
	{
		this.targetDialog = dialogID;
	},

	executeAction: function(dialogID, actionID, actionParams, onFinish)
	{
		if (this.onBeforeRequest != null)
		{
			this.onBeforeRequest();
		}

		var actionParams = { 'dialogID': dialogID, 'actionID': actionID, 'actionParams': actionParams };
		var actionParamsJSON = JSON.encode(actionParams);

		var reqAction = new Request(
		{
			url: '/UIService.asmx/ExecuteAction',
			urlEncoded: false,
			method: 'post',
			data: actionParamsJSON,
			headers: { 'Content-Type': 'application/json; charset=utf-8', 'Accept': 'application/json' },
			onSuccess: function(retVal)
			{
				var commands = JSON.decode(retVal)['d'];
				ui.processCommands(commands, onFinish);
			}
		});

		reqAction.send();
	},

	handleEvent: function(dialogID, sender, eventName)
	{
		if (this.targetDialog != '')
		{
			dialogID = this.targetDialog;
			this.targetDialog = '';
		}

		var dialog = $(dialogID);

		if (dialog == null)
		{
			//alert('Could not find dialog ' + dialogID + '');
			return;
		}

		var viewState = base64Json.encode(this.collectViewState(dialog, false));
		var parameters = $(dialogID + '_parameters').value;

		if (this.onBeforeRequest != null)
		{
			this.onBeforeRequest();
		}

		var eventParams = { 'dialogID': dialogID, 'dialogParams': parameters, 'dialogState': viewState, 'controlID': sender.id, 'eventName': eventName, 'siteState': this.attachedDialogState };
		var eventParamsJSON = JSON.encode(eventParams);

		// NOTE: Create reqEvents earlier and just change the data - reduce overhead
		var reqEvent = new Request(
		{
			url: '/UIService.asmx/HandleEvent',
			urlEncoded: false,
			method: 'post',
			data: eventParamsJSON,
			headers: { 'Content-Type': 'application/json; charset=utf-8', 'Accept': 'application/json' },
			onSuccess: function(retVal)
			{
				var commands = JSON.decode(retVal)['d'];
				ui.processCommands(commands);
			}
		});

		reqEvent.send();

		//UIService.HandleEvent(dialogID, parameters, viewState, sender.id, eventName, this.attachedDialogState, this.processCommands);
		this.attachedDialogState = '';
	},

	load: function()
	{
//		try
//		{
			this.processSubCommands(this.initCommands);
//		}
//		catch (e)
//		{
//			console.warn(e);
//		}

		window.onresize = function()
		{
			ui.onResize();
		}

		ui.onResize();
	},

	executeHandlers: function(handlers, args)
	{
		for (var i = 0; i < handlers.length; i++)
		{
			var handler = handlers[i];

			if (handler != null)
			{
				try
				{
					handler(args);
				}
				catch (e)
				{
					console.warn(e);
				}
			}
		}
	},

	onResize: function()
	{
		ui.executeHandlers(ui.resizeHandlers);
	},

	cleanupElement: function(rootElement)
	{
		ui.executeHandlers(ui.cleanupHandlers, rootElement);

		rootElement.empty();
	},

	invokeClientMethod: function(data)
	{
		var obj = window[data['o']];

		if ($defined(obj))
		{
			var method = obj[data['m']];

			if ($defined(method)) // && $type(method) == 'function'
			{
				method.run(data['p']);
			}
		}
	},

	processCommand: function(command)
	{
		var data = command.Data;

		if (ui.commandHandlerList.contains(command.Action))
		{
			ui.commandHandlers[command.Action](command);
		}
		else
		{
			switch (command.Action)
			{
				case 'updateParameters':
					var dialogParams = $(data.DialogID + '_parameters');

					if (dialogParams != null)
					{
						$(data.DialogID + '_parameters').value = data.Parameters;
					}

					break;
				case 'addClientStyle':
					if (Browser.Engine.trident)
					{
						var styleSheet = document.styleSheets[document.styleSheets.length - 1];
						styleSheet.addRule(data.Selector, data.Style, -1)
					}
					else
					{
						var styleSheet = document.styleSheets[document.styleSheets.length - 1];
						var cssRule = data.Selector + ' {' + data.Style + '}';
						styleSheet.insertRule(cssRule, styleSheet.cssRules.length - 1)
					}

					break;
				case 'redirect':
					document.location.href = data.Url;
					break;
				case 'eval':
					eval(data.Script);
					break;
				case 'update':
					var dlg = $(data.dlg);

					if (dlg != null)
					{
						var pnl = ui.getSubElement(dlg, data.pnl);

						if (pnl != null)
						{
							ui.cleanupElement(pnl);

							pnl.set('html', data.html);

							uiDialog.update(dlg, pnl, data.clientData);
						}
					}

					break;
				case 'setView':
					var elTarget = null;

					if (data.pnl === 'body')
					{
						elTarget = $(document.body);
						elTarget.erase('class');
					}
					else
					{
						elTarget = $(data.pnl);
					}

					if (elTarget != null)
					{
						if ($defined(data.title) && data.title != '')
						{
							document.title = data.title;
						}

						ui.cleanupElement(elTarget);

						elTarget.set('html', data.dlg);

						var elDialog = elTarget.getFirst();

						if (elDialog != null)
						{
							uiDialog.init(elDialog, data.clientData);
						}

						site.view = data.view;

						if (ui.onSetDialog != null)
						{
							ui.onSetDialog(elTarget);
						}
					}

					break;
				case 'setDialog':
					var pnlContainer = null;

					if (data.showAsMP == true)
					{
						pnlContainer = $('mpDialogInner');
					}
					else
					{
						pnlContainer = $(data.pnl);
					}

					if (pnlContainer == null)
					{
						break;
					}

					if ($defined(data.title) && data.title != '')
					{
						document.title = data.title;
					}

					ui.cleanupElement(pnlContainer);

					//					var mp = $('mp');
					//					var mpDialog = $('mpDialog');

					//					mp.setOpacity(0.0);
					//					mp.setStyles({ display: 'block' });

					//					mpDialog.setOpacity(0.0);
					//					mpDialog.setStyles({ display: 'block' });

					pnlContainer.set('html', data.dlg);

					var elDialog = pnlContainer.getFirst();

					if (elDialog != null)
					{
						uiDialog.init(elDialog, data.clientData);
					}

					//alert(JSON.encode(data.InitCommands));

					//					if (data.cmdsInit && data.cmdsInit.length > 0)
					//					{
					//						ui.processSubCommands(data.cmdsInit);
					//					}

					if (data.showAsMP == true)
					{
						//						if (data.MPWidth != -1)
						//						{
						//							pnlContainer.set('width', data.MPWidth);
						//						}

						if (ui.onReceiveModalPopup != null)
						{
							ui.onReceiveModalPopup();
						}
					}

					if (ui.onSetDialog != null)
					{
						ui.onSetDialog(pnlContainer);
					}

					break;
				case 'initDialog':
					var elDialog = $(data['_d']);

					if (elDialog != null)
					{
						var cData = data['_c'];
						uiDialog.init(elDialog, cData);
					}

					break;
				case 'deleteDialog':
					var container = $(data.Container);

					if (container == null)
					{
						break;
					}

					ui.cleanupElement(container);

					break;
				case 'setUIProp':
					var el = ui.getSubElement(data.dialogID, data.controlID);

					if (el == null)
					{
						break;
					}

					el.set(data.key, data.value);

					break;
				case 'invoke':
					ui.invokeClientMethod(data);
					break;
			}
		}
	},

	processSubCommands: function(subCommands, onFinish)
	{
		if (!subCommands)
		{
			return;
		}

		for (var i = 0; i < subCommands.length; i++)
		{
//			try
//			{
				ui.processCommand(subCommands[i]);
//			}
//			catch (e)
//			{
//				console.warn(e);
//			}
		}

		return true;
	},

	processCommands: function(commands, onFinish)
	{
		eventCommands = commands;

		if (!commands)
		{
			return;
		}

		for (var i = 0; i < commands.length; i++)
		{
			try
			{
				ui.processCommand(commands[i]);
			}
			catch (e)
			{
				console.warn(e);
			}
		}

		if (onFinish != null)
		{
			onFinish();
		}

		ui.fireEvent('afterRequest');

		if (ui.onAfterRequest != null)
		{
			ui.onAfterRequest();
		}

		ui.onResize();

		return true;
	}
});

var ui = new UI();
//> require <mootools 1.2.4>
//> require <ui 1.0.0>

var UIDialog = new Class(
{
	initialize: function()
	{
		this.typeID = 'dlg';
		this.elType = 'object';
		this.dialogs = [];

		this.preInitHandlers = { 'dlg': this.init };
		this.initHandlers = {};
		this.onEvent = null;

		this.reqEvent = new Request(
		{
			url: '/',
			urlEncoded: false,
			method: 'post',
			data: null,
			link: 'cancel',
			headers: { 'Content-Type': 'application/json; charset=utf-8', 'Accept': 'application/json', 'Kind': 'event' },
			onSuccess: function(retVal)
			{
				var commands = JSON.decode(retVal);
				ui.processCommands(commands);
			},
			onFailure: function(instance)
			{
				//alert(JSON.encode(instance));
			}
		});

		ui.registerViewStateHandler(this.typeID, this.collectViewState);
		ui.registerCleanupHandler(this.cleanupDialogs);
		ui.registerControlRemovalHandler(this.typeID, this.cleanupDialog);

		this.deIgnore = '__type';
	},

	registerPreInitHandler: function(typeID, handler)
	{
		uiDialog.preInitHandlers[typeID] = handler;
	},

	registerInitHandler: function(typeID, handler)
	{
		uiDialog.initHandlers[typeID] = handler;
	},

	onHandleEvent: function(eventParams)
	{
		if (uiDialog.onEvent != null)
		{
			uiDialog.onEvent(eventParams);
		}
	},

	collectViewState: function(dialog)
	{
		if (dialog == null)
		{
			return null;
		}

		var dialogData = dialog.retrieve('clientData');
		var dialogElements = dialog.retrieve('elements');

		if (dialogData == null || dialogElements == null)
		{
			return { '__type': 'vs' };
		}

		var dialogParams = dialogData['_p'];

		var dialogState = uiDialog.collectDialogState(dialog, dialogElements);

		var viewState = {
			'state': dialogState,
			'params': dialogParams
		};

		return viewState;
	},

	executeAction: function(dialog, dialogID, params, action, actionParams)
	{
		var actionParams = { 'dialog': dialog, 'id': dialogID, 'params': base64Json.encode(params), 'action': action, 'actionParams': base64Json.encode(actionParams) };
		var actionParamsJSON = JSON.encode(actionParams);

		var reqAction = new Request(
		{
			url: '/',
			urlEncoded: false,
			method: 'post',
			data: null,
			link: 'cancel',
			headers: { 'Content-Type': 'application/json; charset=utf-8', 'Accept': 'application/json', 'Kind': 'action' },
			onSuccess: function(retVal)
			{
				var commands = JSON.decode(retVal);
				ui.processCommands(commands);
			},
			onFailure: function(instance)
			{
				//alert(JSON.encode(instance));
			}
		});

		reqAction.options.data = actionParamsJSON;
		reqAction.send();
	},

	unlock: function(p)
	{
		var control = ui.getSubElement(p.dlg, p.id);

		if ($defined(control))
		{
			control.store('lock', false);
			control.fireEvent('unlock');
		}
	},

	handleEvent: function()
	{
		var clientData = this.clientData;
		var control = this.elControl;
		var eventName = this.eventName;
		var lock = this.lock;

		var lockData = control.retrieve('lock');

		if ($defined(lockData) && lockData === true)
		{
			return;
		}

		var dialog = control.retrieve('dialog');
		var dialogData = dialog.retrieve('clientData');
		var dialogElements = dialog.retrieve('elements');

		var dialogParams = dialogData['_p'];
		var dialogTypeID = dialogData['_dt'];
		var elementPath = clientData['path'];

		var dialogState = base64Json.encode(uiDialog.collectDialogState(dialog, dialogElements));
		//var dialogState = uiDialog.collectDialogState(dialog, dialogElements);

		if (ui.onBeforeRequest != null)
		{
			ui.onBeforeRequest();
		}

		var eventParams = { 'dlg': dialogTypeID, 'id': dialog.id, 'params': dialogParams, 'state': dialogState, 'elementPath': elementPath, 'event': eventName };

		uiDialog.onHandleEvent(eventParams);

		var eventParamsJSON = JSON.encode(eventParams);

		if (lock)
		{
			control.store('lock', true);
			control.fireEvent('lock');
		}

		uiDialog.reqEvent.options.data = eventParamsJSON;
		uiDialog.reqEvent.send();
	},

	collectDialogState: function(dialog, elements)
	{
		var dialogState = {};

		for (var element in elements)
		{
			var el = elements[element];

			var typeID = el['_t'];
			var elControl = el.instance;

			//			if (elControl.nodeValue == null)
			//			{
			//				elControl = ui.getSubElement(dialog, elControl.id);
			//			}

			var viewStateHandler = ui.viewStateHandlers[typeID];

			if ($defined(viewStateHandler))
			{
				var viewState = viewStateHandler(elControl);
				if (viewState != null)
				{
					dialogState[element] = viewState;
				}
			}
		}

		return dialogState;
	},

	preInitElements: function(dialog, elements)
	{
		for (var element in elements)
		{
			var el = elements[element];

			var typeID = el['_t'];
			var elControl = el.instance;
			var controlEvents = el['events'];

			if ($defined(typeID))
			{
				var preInitHandler = uiDialog.preInitHandlers[typeID];

				if (preInitHandler != null)
				{
					preInitHandler(elControl, el);
				}
			}

			if (controlEvents != null)
			{
				for (var controlEvent in controlEvents)
				{
					if (controlEvent == uiDialog.deIgnore)
					{
						continue;
					}

					var eventData = controlEvents[controlEvent];
					var actions = eventData['a'];

					if ($defined(actions))
					{
						for (var i = 0; i < actions.length; i++)
						{
							// NOTE: Currently only one type of action is supported => InvokeMethod
							//       For more actions we need an action type which links to a custom handler

							var action = actions[i];

							//alert(action['m']);

							var obj = window[action['o']];

							if ($defined(obj))
							{
								var method = obj[action['m']];

								if ($defined(method)) // && $type(method) == 'function'
								{
									elControl.addEvent(controlEvent, method.bindWithEvent(elControl, action['p']));
								}
							}
						}
					}

					if (eventData['s'])
					{
						var lock = false;

						if ($defined(eventData.l))
						{
							lock = eventData.l;
						}

						var handleEventContext = { 'clientData': el, 'eventName': controlEvent, 'elControl': elControl, 'lock': lock };

						elControl.addEvent(controlEvent, uiDialog.handleEvent.bind(handleEventContext));
					}
				}
			}
		}
	},

	initElements: function(dialog, elements)
	{
		for (var element in elements)
		{
			var el = elements[element];

			var typeID = el['_t'];
			var elControl = el.instance;

			var initHandler = uiDialog.initHandlers[typeID];

			if (initHandler != null)
			{
				initHandler(elControl, el);
			}

			elControl.fireEvent('__init');
		}

		for (var element in elements)
		{
			var el = elements[element];
			var elControl = el.instance;

			elControl.fireEvent('__postInit');
		}
	},

	scanElements: function(elements, dialog, parentElement, parentToken, clientData)
	{
		if (dialog != parentElement && clientData['_t'] === 'dlg')
		{
			return;
		}

		for (var control in clientData)
		{
			var controlClientData = clientData[control];

			if ($type(controlClientData) != uiDialog.elType)
			{
				continue;
			}

			var elControl = ui.getSubElement(parentElement, control);

			if (elControl == null)
			{
				continue;
			}

			//			if (elControl.retrieve('clientData') != null)
			//			{
			//				continue;
			//			}

			controlClientData['instance'] = elControl;

			var elToken = control;

			if (dialog != parentElement && parentToken != '')
			{
				elToken = parentToken + '.' + elToken;
			}

			controlClientData['path'] = elToken;
			elements[elToken] = controlClientData;

			elControl.store('dialog', dialog);
			elControl.store('clientData', controlClientData);

			uiDialog.scanElements(elements, dialog, elControl, elToken, elements[elToken]);
		}
	},

	init: function(dialog, clientData)
	{
		uiDialog.dialogs.push(dialog);

		var elements = {};
		uiDialog.scanElements(elements, dialog, dialog, '', clientData);

		dialog.store('clientData', clientData);
		dialog.store('elements', elements);

		try
		{
			uiDialog.preInitElements(dialog, elements);
			uiDialog.initElements(dialog, elements);
		}
		catch (e)
		{
			alert(JSON.encode(e));
		}
	},

	setParam: function(dialog, key, value)
	{
		var dlgParams = uiDialog.getParams(dialog);

		dlgParams[key] = value;

		uiDialog.setParams(dialog, dlgParams);
	},

	getParams: function(dialog)
	{
		var dlgIndex = uiDialog.dialogs.indexOf(dialog);

		if (dlgIndex != -1)
		{
			var dlg = uiDialog.dialogs[dlgIndex];
			var clientData = dlg.retrieve('clientData');
			var dlgParams = base64Json.decode(clientData['_p']);

			if ($type(dlgParams) != uiDialog.elType)
			{
				dlgParams = {};
			}

			return dlgParams;
		}
	},

	setParams: function(dialog, dlgParams)
	{
		var dlgIndex = uiDialog.dialogs.indexOf(dialog);

		if (dlgIndex != -1)
		{
			var dlg = uiDialog.dialogs[dlgIndex];
			var clientData = dlg.retrieve('clientData');
			clientData['_p'] = base64Json.encode(dlgParams);
		}
	},

	update: function(dialog, parentEl, clientData)
	{
		var dlgIndex = uiDialog.dialogs.indexOf(dialog);

		if (dlgIndex != -1)
		{
			var dlg = uiDialog.dialogs[dlgIndex];

			var dlgElements = dlg.retrieve('elements');
			var elements = {};
			var parentToken = parentEl.retrieve('clientData').path;
			uiDialog.scanElements(elements, dlg, parentEl, parentToken, clientData);

			uiDialog.preInitElements(dlg, elements);
			uiDialog.initElements(dlg, elements);

			for (var element in elements)
			{
//				if ($defined(dlgElements[element]))
//				{
					dlgElements[element] = elements[element];
				//}
			}
		}
	},

	cleanupDialog: function(dialog)
	{
		var elements = dialog.retrieve('elements');

		for (var element in elements)
		{
			var el = elements[element];

			var typeID = el['_t'];
			var elControl = el.instance;

			var removalHandler = ui.elementRemovalHandlers[typeID];

			if (removalHandler != null)
			{
				removalHandler(elControl);
			}
		}
	},

	cleanupDialogs: function(rootElement)
	{
		var filteredDialogs = [];

		for (var i = 0; i < uiDialog.dialogs.length; i++)
		{
			var dialog = uiDialog.dialogs[i];

			if (dialog == null)
			{
				continue;
			}

			if (!rootElement.hasChild(dialog))
			{
				filteredDialogs.push(dialog);
			}
			else
			{
				uiDialog.cleanupDialog(dialog);
			}
		}

		uiDialog.dialogs = filteredDialogs;
	}
});

var uiDialog = new UIDialog();
//> require <mootools 1.2.4>
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>

var CssBtn = new Class(
{
	initialize: function()
	{
		this.typeID = 'cssBtn';
		this.dataToken = 'cssBtn_data';
		this.activeItems = {};
		this.groups = {};
		this.groupNames = [];
		this.events = {
			mouseEnter: 'mouseenter',
			mouseLeave: 'mouseleave',
			activate: 'activate',
			deactivate: 'deactivate',
			click: 'click'
		};

		ui.registerCleanupHandler(this.filterGroups);
		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
		uiDialog.registerInitHandler(this.typeID, this.init);
	},

	preInit: function(control, clientData)
	{
		var data =
		{
			mouseOver: false,
			activated: false,
			useFx: false,
			fx: null,
			mode: 0
		};

		$extend(data, clientData[cssBtn.typeID]);

		if (data.useFx)
		{
			data.fx = new Fx.Morph(control, { duration: 200, transition: Fx.Transitions.Quad.easeInOut, link: 'cancel' });
		}

		control.store(cssBtn.dataToken, data);

		if (data.group != '')
		{
			if (cssBtn.groups[data.group] == null)
			{
				cssBtn.groups[data.group] = [];
				cssBtn.groupNames.push(data.group);
			}

			cssBtn.groups[data.group].push(control);
		}

		if (data.mode === 0)
		{
			control.addEvent(cssBtn.events.mouseEnter, cssBtn.onMouseEnter);
			control.addEvent(cssBtn.events.mouseLeave, cssBtn.onMouseLeave);
		}

		control.addEvent(cssBtn.events.activate, cssBtn.activate);
		control.addEvent(cssBtn.events.deactivate, cssBtn.deactivate);
		control.addEvent(cssBtn.events.click, cssBtn.onClick);
	},

	init: function(control, clientData)
	{
		var data = control.retrieve(cssBtn.dataToken);

		if (data == null)
		{
			return;
		}

		if (data.selected)
		{
			control.fireEvent(cssBtn.events.activate, [control, true]);
		}
	},

	filterGroups: function(rootElement)
	{
		var filteredGroups = {};
		var filteredGroupNames = [];

		for (var i = 0; i < cssBtn.groupNames.length; i++)
		{
			var groupName = cssBtn.groupNames[i];
			var group = cssBtn.groups[groupName];
			var filteredGroup = [];

			for (var c = 0; c < group.length; c++)
			{
				var groupEl = group[c];
				if (!rootElement.hasChild(groupEl))
				{
					filteredGroup.push(groupEl);
				}
			}

			if (filteredGroup.length > 0)
			{
				filteredGroups[groupName] = filteredGroup;
				filteredGroupNames.push(groupName);
			}
		}

		cssBtn.groups = filteredGroups;
		cssBtn.groupNames = filteredGroupNames;
	},

	onMouseEnter: function(isFollowUp)
	{
		var data = this.retrieve(cssBtn.dataToken);

		if (data == null || data.mouseOver || data.activated)
		{
			return;
		}

		data.mouseOver = true;

		if (data.useFx)
		{
			data.fx.start(data.cssH);
		}
		else
		{
			this.set('class', data.cssH);
		}

		this.fireEvent('cssBtnHover');

		var group = cssBtn.groups[data.group];

		if (group != null && data.triggerEnter)
		{
			for (var i = 0; i < group.length; i++)
			{
				group[i].fireEvent(cssBtn.events.mouseEnter);
			}
		}
	},

	onMouseLeave: function()
	{
		var data = this.retrieve(cssBtn.dataToken);

		if (data == null || !data.mouseOver || data.activated)
		{
			return;
		}

		data.mouseOver = false;

		if (data.useFx)
		{
			data.fx.start(data.css);
		}
		else
		{
			this.set('class', data.css);
		}

		this.fireEvent('cssBtnNormal');

		var group = cssBtn.groups[data.group];

		if (group != null && data.triggerLeave)
		{
			for (var i = 0; i < group.length; i++)
			{
				group[i].fireEvent(cssBtn.events.mouseLeave);
			}
		}
	},

	deactivate: function(cssButton, updateGroup)
	{
		var data = cssButton.retrieve(cssBtn.dataToken);

		if (data == null || !data.activated)
		{
			return;
		}

		data.activated = false;
		data.mouseOver = false;

		if (data.mode === 0)
		{
			cssButton.set('class', data.css);
		}
		else if (data.mode === 1)
		{
			cssButton.removeClass('selected');
		}

		cssButton.fireEvent('cssBtnDeactivate');

		if (updateGroup && data.group != '')
		{
			var group = cssBtn.groups[data.group];

			for (var i = 0; i < group.length; i++)
			{
				group[i].fireEvent(cssBtn.events.deactivate, [group[i], false]);
			}
		}
	},

	activate: function(cssButton, updateGroup)
	{
		var data = cssButton.retrieve(cssBtn.dataToken);

		if (data == null || data.activated)
		{
			return;
		}

		if (updateGroup)
		{
			var lastActiveItem = cssBtn.activeItems[data.section];

			if (lastActiveItem != null)
			{
				lastActiveItem.fireEvent(cssBtn.events.deactivate, [lastActiveItem, true]);
			}
		}

		data.activated = true;

		if (data.mode === 0)
		{
			cssButton.set('class', data.cssA);
		}
		else if (data.mode === 1)
		{
			cssButton.addClass('selected');
		}

		cssButton.fireEvent('cssBtnActivate');

		if (updateGroup)
		{
			cssBtn.activeItems[data.section] = cssButton;

			if (data.group)
			{
				var group = cssBtn.groups[data.group];

				for (var i = 0; i < group.length; i++)
				{
					group[i].fireEvent(cssBtn.events.activate, [group[i], false]);
				}
			}
		}
	},

	onClick: function()
	{
		var data = this.retrieve(cssBtn.dataToken);

		if (data == null || data.section == '')
		{
			return;
		}

		cssBtn.activate(this, true);
	}
});

var cssBtn = new CssBtn();
//> require <mootools 1.2.4>
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>

var ImgBtn = new Class(
{
	initialize: function()
	{
		this.typeID = 'imgBtn';
		this.dataToken = 'imgBtn_data';
		this.defaultData = { css: '', imgUrl: '', imgCss: '', width: 0, height: 0, imgHeight: 0, hasHover: true, hasActive: true, section: '', mode: 0, allowUncheck: false, locked: false, allowLock: false };
		this.events = {
			mouseEnter: 'mouseenter',
			mouseLeave: 'mouseleave',
			mouseDown: 'mousedown',
			mouseUp: 'mouseup',
			click: 'click'
		};
		this.states = ['n', 'h', 'a', 'i'];
		this.activeItems = {};

		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
		uiDialog.registerInitHandler(this.typeID, this.init);
	},

	createNew: function(data)
	{
		data = $merge(imgBtn.defaultData, data);

		var pnl = new Element('div', { 'class': data.css });
		var img = new Element('img', { 'src': data.imgUrl, 'class': data.imgCss, 'width': data.width, 'height': data.height });

		pnl.adopt(img);
		imgBtn.preInit(pnl, { imgBtn: { imageUrl: data.imgUrl, hasHover: data.hasHover, hasActive: data.hasActive, section: data.section, mode: data.mode, imgHeight: data.imgHeight, width: data.width, height: data.height} });
		//imgBtn.preInit(pnl, { imgBtn: data });

		return pnl;
	},

	preInit: function(control, clientData)
	{
		var data = $merge(imgBtn.defaultData, clientData[imgBtn.typeID]);

		data.mouseOver = false;
		data.pnl = control;
		data.img = control.getFirst();

		control.store(imgBtn.dataToken, data);

		if (data.mode == 1)
		{
			data.pnl.setStyles({
				'overflow': 'hidden',
				'height': data.imgHeight
			});

			data.img.setStyles({
				'position': 'relative',
				'left': 0,
				'top': 0
			});
		}

		if (data.locked)
		{
			imgBtn.lock(data);
		}

		if (data.allowLock)
		{
			data.pnl.addEvent('lock', imgBtn.onLock);
			data.pnl.addEvent('unlock', imgBtn.onUnlock);
		}

		if (data.hasHover)
		{
			control.addEvent(imgBtn.events.mouseEnter, imgBtn.onMouseEnter);
			control.addEvent(imgBtn.events.mouseLeave, imgBtn.onMouseLeave);
		}

		if (data.hasActive)
		{
			if (data.section != '')
			{
				control.addEvent(imgBtn.events.click, imgBtn.onClick);
			}
			else
			{
				control.addEvent(imgBtn.events.mouseDown, imgBtn.onMouseDown);
				control.addEvent(imgBtn.events.mouseUp, imgBtn.onMouseUp);
			}
		}

		control.addEvent(cssBtn.events.activate, imgBtn.activate);
	},

	init: function(control, clientData)
	{
		var data = control.retrieve(imgBtn.dataToken);

		if (data.selected)
		{
			imgBtn.activate(data);
		}
	},

	onLock: function()
	{
		var data = this.retrieve(imgBtn.dataToken);

		if ($defined(data))
		{
			imgBtn.lock(data);
		}
	},

	onUnlock: function()
	{
		var data = this.retrieve(imgBtn.dataToken);

		if ($defined(data))
		{
			imgBtn.unlock(data);
		}
	},

	lock: function(data)
	{
		if ($defined(data))
		{
			imgBtn.setStatus(data, 0);

			data.pnl.addClass('locked');
			data.locked = true;
		}
	},

	unlock: function(data)
	{
		if ($defined(data))
		{
			data.pnl.removeClass('locked');
			data.locked = false;
		}
	},

	deactivate: function(data)
	{
		if ($defined(data))
		{
			imgBtn.activeItems[data.section] = null;
			imgBtn.setStatus(data, 0);
		}
	},

	activate: function(data)
	{
		var currentControl = imgBtn.activeItems[data.section];

		if (currentControl == data.img)
		{
			return;
		}

		if (currentControl != null)
		{
			imgBtn.activeItems[data.section] = null;

			var parent = currentControl.getParent();

			if (parent != null)
			{
				imgBtn.setStatus(parent.retrieve(imgBtn.dataToken), 0);
			}
		}

		imgBtn.setStatus(data, 2);
		imgBtn.activeItems[data.section] = data.img;
	},

	isActivated: function(data)
	{
		if (data.section === '')
		{
			return false;
		}

		return imgBtn.activeItems[data.section] == data.img;
	},

	getImageUrl: function(data, status)
	{
		var extension = data.imageUrl.substr(data.imageUrl.length - 4, 4);
		var currentStatus = imgBtn.states.indexOf(data.imageUrl.substr(data.imageUrl.length - 5, 1));

		return data.imageUrl.substr(0, data.imageUrl.length - 5) + imgBtn.states[status] + extension;
	},

	enable: function(data)
	{
		if (data.status == 3)
		{
			data.status = 0;
			imgBtn.setStatus(data, 0);
		}
	},

	getData: function(element)
	{
		return element.retrieve(imgBtn.dataToken);
	},

	disable: function(data)
	{
		if (data.status != 3)
		{
			imgBtn.setStatus(data, 3);
		}
	},

	setStatus: function(data, status)
	{
		if (data.status == 3)
		{
			return;
		}

		data.status = status;

		if (data.mode == 0)
		{
			var newImageUrl = null;

			if (status == 0)
			{
				newImageUrl = data.imageUrl;
			}
			else
			{
				newImageUrl = imgBtn.getImageUrl(data, status);
			}

			if (data.img.get('src') != newImageUrl)
			{
				data.img.set('src', newImageUrl);
			}
		}
		else if (data.mode == 1)
		{
			var imgTop = data.status * data.imgHeight * -1;
			data.img.setStyle('top', imgTop);
		}
	},

	onMouseEnter: function()
	{
		var data = this.retrieve(imgBtn.dataToken);

		if (data == null || imgBtn.isActivated(data) || !data.hasHover || data.locked)
		{
			return;
		}

		data.mouseOver = true;

		imgBtn.setStatus(data, 1);
	},

	onMouseLeave: function()
	{
		var data = this.retrieve(imgBtn.dataToken);

		if (data == null || imgBtn.isActivated(data) || !data.hasHover || data.locked)
		{
			return;
		}

		data.mouseOver = false;

		imgBtn.setStatus(data, 0);
	},

	onMouseDown: function()
	{
		var data = this.retrieve(imgBtn.dataToken);

		if (data == null || imgBtn.isActivated(data) || !data.hasActive || data.locked)
		{
			return;
		}

		if (data.section != '')
		{
			imgBtn.activate(data);
		}
		else
		{
			imgBtn.setStatus(data, 2);
		}
	},

	onClick: function()
	{
		var data = this.retrieve(imgBtn.dataToken);

		if (!$defined(data) || !data.hasActive)
		{
			return;
		}

		if (imgBtn.isActivated(data) && data.allowUncheck)
		{
			imgBtn.deactivate(data);
		}
		else
		{
			imgBtn.activate(data);
		}
	},

	onMouseUp: function()
	{
		var data = this.retrieve(imgBtn.dataToken);

		if (data == null || imgBtn.isActivated(data) || !data.hasActive || data.locked)
		{
			return;
		}

		if (data.mouseOver)
		{
			imgBtn.setStatus(data, 1);
		}
		else
		{
			imgBtn.setStatus(data, 0);
		}
	},

	setImageUrl: function(control, imageUrl)
	{
		var data = control.retrieve(imgBtn.dataToken);

		if (data == null)
		{
			return;
		}

		data.imageUrl = imageUrl;
		data.img.set('src', imageUrl);

		if (data.mouseOver)
		{
			imgBtn.setStatus(data, 1);
		}
	}
});

var imgBtn = new ImgBtn();
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>

var TextBox = new Class(
{
    initialize: function()
    {
        this.typeID = 'tb';
        this.dataToken = this.typeID + '_data';

        ui.registerViewStateHandler(this.typeID, this.collectViewState);
        uiDialog.registerPreInitHandler(this.typeID, this.preInit);
    },

    preInit: function(control, clientData)
    {
        var data =
        {
            instance: control,
            editor: control.getElement('input'),
            type: control.get('type'),
            mask: ''
        };

        $extend(data, clientData[textBox.typeID]);

        control.store(textBox.dataToken, data);

        if ($defined(data.defaultText))
        {
            data.lbl = new Element('div');
            data.lbl.set('html', data.defaultText);
            data.lbl.set('class', data.defaultCss);
            data.lbl.setStyle('display', 'none');

            data.lbl.inject(control, 'after');

            data.lbl.addEvent('click', function()
            {
                control.focus();
            });

            if (control.value == '')
            {
                data.lbl.setStyle('display', 'block');
            }

            control.addEvent('blur', textBox.onBlur);
            control.addEvent('focus', textBox.onFocus);
        }

        if ($defined(data.instance) && data.mask !== '')
        {
            data.ctrlKeys = ['enter', 'up', 'down', 'left', 'right', 'backspace', 'delete', 'esc', 'tab', 'space'];
            data.instance.addEvent('keypress', textBox.onKeyPress.bindWithEvent(data));
        }
    },

    onKeyPress: function(e)
    {
        var data = this;

        if (data.ctrlKeys.indexOf(e.key) === -1)
        {
            console.log('testing ' + e.key + ' @' + data.instance.id + ' with ' + data.mask);
            return e.key.test(data.mask);
        }

        return true;
    },

    onBlur: function()
    {
        var data = this.retrieve(textBox.dataToken);

        if (data != null)
        {
            if (this.value == '')
            {
                data.lbl.setStyle('display', 'block');
            }
            else
            {
                data.lbl.setStyle('display', 'none');
            }
        }
    },

    onFocus: function()
    {
        var data = this.retrieve(textBox.dataToken);

        if (data != null)
        {
            data.lbl.setStyle('display', 'none');
        }
    },

    collectViewState: function(control)
    {
        return { 'Text': control.value };
    }
});

var textBox = new TextBox();
//> require <mootools 1.2.4>
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>

var HtmlEditor = new Class(
{
	initialize: function()
	{
		this.typeID = 'he';
		this.dataToken = this.typeID + '_data';

		ui.registerViewStateHandler(this.typeID, this.collectViewState);
		ui.registerControlRemovalHandler(this.typeID, this.cleanUp);

		uiDialog.registerInitHandler(this.typeID, this.init);

		tinyMCE.init(
		{
			mode: 'none',

			theme: 'advanced',

			width: '100%',
			height: '100px',

			plugins: 'table,paste,style,noneditable,advlink',
			fullscreen_new_window: true,
			noneditable_leave_contenteditable: true,

			//valid_elements : 'span,div,br',
			forced_root_block: '',
			force_p_newlines: true,
			force_br_newlines: false,
			paste_create_paragraphs: true,
			paste_create_linebreaks: false,
			paste_convert_headers_to_strong: true,
			init_instance_callback: this.initEditor,

			//theme_advanced_buttons1: 'bold,italic,underline,|,numlist,bullist,|,pasteword,image,code,|,undo,redo,|,link',
			theme_advanced_buttons1: 'pasteword,|,bold,italic,underline,|,numlist,bullist,link,|,undo,redo,code',
			theme_advanced_buttons2: '',
			theme_advanced_toolbar_location: 'top',
			theme_advanced_toolbar_align: 'left',
			theme_advanced_resizing: false
		});
	},

	init: function(control, clientData)
	{
		var data = {};
		$extend(data, clientData[htmlEditor.typeID]);

		control.store(htmlEditor.dataToken, data);

		var width = control.getStyle('width').toInt();

		//tinyMCE.settings.width = width;
		tinyMCE.settings.height = data.height;

		if (data.contentCss != '')
		{
			tinyMCE.settings.content_css = data.contentCss;
		}

		if (data.commands != '')
		{
			tinyMCE.settings.theme_advanced_buttons1 = data.commands;
		}

		var result = tinyMCE.execCommand('mceAddControl', false, control.id);
	},

	collectViewState: function(control)
	{
		return { 'Content': tinyMCE.get(control.id).getContent() };
	},

	cleanUp: function(control)
	{
		var data = control.retrieve(htmlEditor.dataToken);

		data.editor.inlineUI.close();

		try
		{
			tinyMCE.execCommand('mceFocus', false, control.id);
			tinyMCE.execCommand('mceRemoveControl', false, control.id);
		}
		catch (e)
		{

		}
	},

	initEditor: function(editor)
	{
		var control = $(editor.id);
		var ifr = $(editor.id + '_ifr');
		var tbl = $(editor.id + '_tbl');

		var data = control.retrieve(htmlEditor.dataToken);
		data.editor = editor;

		editor.inlineUI = { 'tbl': tbl };

		editor.inlineUI.open = function(el)
		{
			if ($defined(this.el))
			{
				this.el.destroy();
			}

			var elBody = $(document.body);
			this.el = el;

			this.mp = new Element('div', { 'class': 'mp' });
			this.mpBG = new Element('div', { 'class': 'mpBG' });
			this.mpBox = this.el; //new Element('div', { 'class': 'mpBox' });

			this.fxMP = new Fx.Morph(this.mpBox, { duration: 400, transition: Fx.Transitions.Quad.easeInOut, link: 'cancel' });

			this.mpBG.setStyle('opacity', 0.7);

			//this.mpBox.adopt(this.el);

			this.mp.adopt(
				this.mpBG,
				this.mpBox
			);

			this.mpBG.addEvent('click', this.close);

			//			var coords = this.tbl.getCoordinates(dlgMain);

			//			this.el.setStyles({
			//				'left': coords.left - 10,
			//				'width': coords.width + 20,
			//				'top': coords.top + 54
			//			});

			//this.tbl.set('opacity', 0.3);
			elBody.adopt(this.mp);

			this.onResize();
			window.addEvent('resize', this.onResize);
		} .bind(editor.inlineUI);

		editor.inlineUI.close = function()
		{
			if ($defined(this.mp))
			{
				this.mp.destroy();
				//this.tbl.set('opacity', 1.0);
			}

			window.removeEvent('resize', this.onResize);
		} .bind(editor.inlineUI);

		editor.inlineUI.onResize = function()
		{
			if (this.mp === null)
			{
				return;
			}

			var wndScrollSize = window.getScrollSize();
			var wndSize = window.getSize();
			var wndScroll = window.getScroll();

			this.mp.setStyles({
				'top': 0,
				'left': wndScroll.x,
				'width': wndSize.x,
				'height': wndScrollSize.y
			});

			var boxSize = this.mpBox.getSize();
			var boxLeft = wndScroll.x + (wndSize.x - boxSize.x) / 2;
			var boxTop = wndScroll.y + 120;

			this.mpBox.setStyles({
				'left': boxLeft,
				'top': boxTop
			});
		} .bind(editor.inlineUI);

		//		ifr.setStyle('height', (data.height - 51) + 'px');
		//		tbl.setStyle('height', data.height + 'px');

		//ui.unregisterAsyncCommandHandler(control.asyncCommandID);
		//ui.onResize();
	}
});

var htmlEditor = new HtmlEditor();
//> require <mootools 1.2.4>
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>

var GoogleMaps = new Class(
{
	initialize: function()
	{
		this.typeID = "gm";
		this.dataToken = this.typeID + "_data";
		this.gmLoaded = false;
		this.sgIcon = null;

		ui.registerCleanupHandler(this.filterMaps);
		ui.registerViewStateHandler(this.typeID, this.collectViewState);
		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
		uiDialog.registerInitHandler(this.typeID, this.init);
	},

	collectViewState: function(control)
	{
		var data = control.retrieve(googleMaps.dataToken);
		var state = { selectedLocation: "" };

		if (data != null)
		{
			state.selectedLocation = data.selectedLocation;
		}

		return state;
	},

	loadGM: function(onLoaded)
	{
		google.load("maps", "2", { "callback": googleMaps.onAPILoaded.bind(googleMaps, onLoaded) });
	},

	onAPILoaded: function(onLoaded)
	{
		googleMaps.gmLoaded = true;

		if ($defined(onLoaded))
		{
			onLoaded();
		}
	},

	getLocation: function(marker)
	{
		return marker.getLatLng().toUrlValue().replace(",", "|");
	},

	setCenter: function(data, lat, lng, zoom)
	{
		if (!$defined(data.markerMain))
		{
			var centerOptions = { draggable: data.allowDragging };

			data.map.setCenter(new google.maps.LatLng(lat, lng), zoom, G_NORMAL_MAP);

			var markerMain = new GMarker(new GLatLng(lat, lng), centerOptions);
			data.markerMain = markerMain;
			data.selectedLocation = googleMaps.getLocation(markerMain);
			GEvent.addListener(markerMain, "dragend", function()
			{
				data.selectedLocation = googleMaps.getLocation(markerMain);
				//console.warn(data.selectedLocation);
			});

			data.map.addOverlay(markerMain);
		}
		else
		{
			var pos = new google.maps.LatLng(lat, lng);

			data.markerMain.setLatLng(pos);
			data.selectedLocation = googleMaps.getLocation(data.markerMain);
			data.map.panTo(pos);
		}
	},

	createMap: function(data)
	{
		var map = new google.maps.Map2(data.instance);

		data.map = map;

		var markerOptions = {};

		if ($defined(data.center))
		{
			googleMaps.setCenter(data, data.center.Latitude, data.center.Longitude, data.center.Zoom);
		}

		if ($defined(data.markers) && data.markers.length > 0)
		{
			for (var i = 0; i < data.markers.length; i++)
			{
				var marker = data.markers[i];
				var elMarker = new GMarker(new GLatLng(marker.Latitude, marker.Longitude));
				elMarker.data = marker;

				map.addOverlay(elMarker);
			}
		}

		map.addControl(new GMapTypeControl());
		map.addControl(new GLargeMapControl());
	},

	preInit: function(control, clientData)
	{
		var data = { instance: control };
		$extend(data, clientData[googleMaps.typeID]);

		control.store(googleMaps.dataToken, data);

		if (googleMaps.gmLoaded)
		{
			googleMaps.createMap(data);
		}
		else
		{
			googleMaps.loadGM(
				function() { googleMaps.createMap(data); }
			);
		}
	},

	init: function(control, clientData)
	{
		var data = control.retrieve(googleMaps.dataToken);

		if (data != null)
		{

		}
	}
});

var googleMaps = new GoogleMaps();
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>

var RepPages = new Class(
{
	initialize: function()
	{
		this.typeID = "rp";
		this.numPages = 0;
		this.currentPage = 0;

		ui.registerCommandHandler("append", this.append);
		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
	},

	createElement: function(html)
	{
		var pnl = new Element("div", { "html": html });
		return pnl.getFirst();
	},

	preInit: function(control, clientData)
	{
		var data = { instance: control };
		$extend(data, clientData[repPages.typeID]);

		repPages.numPages = data.numPages;
	},

	append: function(command)
	{
		var data = command.Data;

		var dlg = $(data.dlg);

		if (dlg !== null)
		{
			var pnl = ui.getSubElement(dlg, data.pnl);

			if (pnl !== null)
			{
				var rep = repPages.createElement(data.html);

				if (rep !== null)
				{
					var dlgParams = uiDialog.getParams(dlg);
					repPages.currentPage = dlgParams.page + 1;
					dlgParams.page = repPages.currentPage;
					uiDialog.setParams(dlg, dlgParams);

					if (repPages.currentPage >= repPages.numPages)
					{
						var btnMore = ui.getSubElement(dlg, "btnMore");

						if (btnMore !== null)
						{
							btnMore.destroy();
						}
					}

					var items = rep.getChildren();
					pnl.adopt(items);

					var elements = {};
					uiDialog.scanElements(elements, dlg, pnl, pnl.id, data.clientData);
					uiDialog.preInitElements(dlg, elements);
					uiDialog.initElements(dlg, elements);
				}
			}
		}
	}
});

var repPages = new RepPages();
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>

var Slideshow = new Class(
{
	initialize: function(container, options)
	{
		this.typeID = "ss";

		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
	},

	preInit: function(control, clientData)
	{
		var data = {
			instance: control,
			path: '',
			slides: [],
			imgSlides: [],
			slideCss: '',
			duration: 3000,
			delay: 1000,
			currentSlide: -1
		};

		$extend(data, clientData[slideshow.typeID]);
		
		for (var i = 0; i < data.slides.length; i++)
		{
			var slide = new Element('img');
			slide.src = data.path + data.slides[i];
			slide.addClass(data.slideCss);
			slide.setStyle('opacity', 0.0);

			data.imgSlides.push(slide);
		}

		slideshow.start(data);
	},

	getNextSlide: function(data)
	{
		data.currentSlide++;

		if (data.currentSlide >= data.slides.length)
		{
			data.currentSlide = 0;
		}

		return data.imgSlides[data.currentSlide];
	},

	start: function(data)
	{
		if (data.instance.length < 2)
		{
			return;
		}

		var firstSlide = slideshow.getNextSlide(data);
		firstSlide.setStyle('opacity', 1.0);

		data.instance.adopt(firstSlide);

		slideshow.fadeSlide.delay(data.delay, data, null);
	},

	fadeSlide: function(lastSlide)
	{
		if (lastSlide != null)
		{
			lastSlide.destroy();
		}

		var slideA = this.imgSlides[this.currentSlide];
		var slideB = slideshow.getNextSlide(this);

		this.instance.adopt(slideB);

		var fadeOut = new Fx.Morph(slideA, { duration: this.duration, transition: Fx.Transitions.Cubic.easeInOut });
		var fadeIn = new Fx.Morph(slideB, { duration: this.duration, transition: Fx.Transitions.Cubic.easeInOut });
		fadeIn.__slideshow = this;

		fadeOut.start({ 'opacity': [1.0, 0.0] });
		fadeIn.start({ 'opacity': [0.0, 1.0] }).chain(
			function()
			{
				slideshow.fadeSlide.delay(this.__slideshow.delay, this.__slideshow, slideA);
			}
		);
	}
});

var slideshow = new Slideshow();
//> require <mootools 1.2.4>
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>
//> require <historyManager 2.0.0>

Element.Events.keyenter = {
	base: 'keyup',
	condition: function(e)
	{
		return e.key == 'enter';
	}
};

var Site = new Class(
{
	Implements: Events,

	initialize: function()
	{
		this.domain = '';

		this.config = {};
		this.initCommands = [];

		this.history = null;
		this.initStage = true;
		this.pageTracker = null;
		this.contextChanged = null;
		this.needsLoading = false;
		this.isPartial = false;
		this.baseView = null;
		this.currentPage = null;
		this.currentHash = null;
		this.hardLink = '';
	},

	callAnalytics: function(pageTitle)
	{
		if (!$defined(_gat) || !site.config.AllowTracking)
		{
			return;
		}

		if (site.pageTracker == null)
		{
			site.pageTracker = _gat._getTracker(site.config.AnalyticsAccount);
			site.pageTracker._initData();
		}

		if (site.pageTracker != null)
		{
			site.pageTracker._trackPageview(pageTitle);
		}
	},

	scrollToTop: function()
	{
		window.scrollTo(0, 0);
	},

	seoDeath: function(e)
	{
		if ($defined(e))
		{
			e.preventDefault();
		}
		else
		{
			return false;
		}
	},

	disableSeo: function()
	{
		$$('a.seo').addEvent('click', site.seoDeath);
	},

	load: function()
	{
		//		if (site.needsLoading)
		//		{
		//			var m = site.initCommands[0].Data._c.main;

		//			if ($defined(m))
		//			{
		//				site.initCommands[0].Data._c.main = { instance: m.instance, path: m.path };
		//			}

		//			site.needsLoading = false;
		//		}

		ui.initCommands = site.initCommands;
		ui.addEvent('afterRequest', site.disableSeo);
		ui.load();

		site.disableSeo();
	},

	getMainDialog: function()
	{
		return $('dlgMain');
	},

	init: function(e, params)
	{
		site.domain = params.domain;
	},

	onContextChanged: function(context, initStage)
	{
		if (site.contextChanged != null)
		{
			site.contextChanged(context, initStage);
		}
	},

	onStateChanged: function(state)
	{
		if (decodeURI(state) === decodeURI(site.currentHash))
		{
			return;
		}

		//console.log(term + '\n' + site.currentHash);

		site.loadPage(state);
	},

	loadPage: function(pageLink)
	{
		if (pageLink === '')
		{
			pageLink = site.history.getCurrentHash();
		}

		//		if (pageLink == '')
		//		{
		//			pageLink = 'startseite';
		//		}

		site.initStage = true;

		site.fireEvent('loadPage', { 'link': pageLink });

		site.onContextChanged(pageLink, false);
	},

	execAction: function(e, params)
	{
		var dlg = $(params.dlgID);

		if ($defined(dlg))
		{
			params.dlgParams = uiDialog.getParams(dlg);
		}

		uiDialog.executeAction(params.dlg, params.dlgID, params.dlgParams, params.action, params.actionParams);
	},

	getHardLink: function()
	{
		//var url = decodeURI(document.location);
		var url = document.location.href;
		url = url.split('#')[0].substr(window.domain.length);

		if (url !== '')
		{
			if (url[0] === '/')
			{
				url = url.substr(1);
			}
		}

		return url;
	},

	setPage: function(e, params)
	{
		site._setPage(e, base64Json.decode(params));
	},

	_setPage: function(e, params)
	{
		site.currentPage = params;

		var link = site.currentPage.Link;

		if (!$defined(link))
		{
			link = '';
		}

		if (site.needsLoading)
		{
			site.load();
		}

		site.fireEvent('setPage', site.currentPage);

		site.isPartial = false;

		site.callAnalytics(link);
		site.onContextChanged(link, site.initStage);

		site.currentHash = link;

		if (site.initStage)
		{
			site.initStage = false;
			return;
		}

		if (site.history != null)
		{
			site.history.addState(link);
		}
	}
});

var site = new Site();

window.addEvent('domready', function()
{
	site.fireEvent('init');
	//window.alert = function(msg) { console.log(msg); };

	site.config = $extend({ AllowTracking: false, AnalyticsAccount: '', Domain: '', DataDomain: '' }, site.config);

	site.history = new HistoryManager();
	site.history.addEvent('onHistoryChange', site.onStateChanged);

	var hash = site.history.getCurrentHash();

	site.hardLink = site.getHardLink();

	site.load();

	if (hash !== '')
	{
		//$('main').empty();

		//site.needsLoading = true;
		site.isPartial = true;
		site.loadPage(hash);
	}
});
//> require <cufon 1.0.9>
//> require <uiDialog 1.0.0>

var CufonLbl = new Class(
{
	initialize: function()
	{
		this.typeID = 'cufonLbl';
		this.dataToken = this.typeID + '_data';
		this.separateTokens = ['words', 'none', 'character'];

		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
	},

	preInit: function(control, clientData)
	{
		if (Browser.Engine.trident && Browser.Engine.version <= 4)
		{
			return;
		}

		var data = { separate: 0 };
		$extend(data, clientData[cufonLbl.typeID]);
		data.separate = cufonLbl.separateTokens[data.separate];

		control.store(cufonLbl.dataToken, data);

		Cufon.replace(control, { fontFamily: data.font, separate: data.separate });
	},

	refresh: function(control)
	{
		var data = control.retrieve(cufonLbl.dataToken);

		if (data != null)
		{
			Cufon.replace(control, { fontFamily: data.font, separate: data.separate });
		}
	}
});

var cufonLbl = new CufonLbl();
//> require <ui 1.0.0>
//> require <uiDialog 1.0.0>
//> require <Swiff.Uploader 1.0.0>

var Upload = new Class(
{
	initialize: function()
	{
		this.typeID = 'up';
		this.dataToken = this.typeID + '_data';

		ui.registerViewStateHandler(this.typeID, this.collectViewState);
		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
		uiDialog.registerInitHandler(this.typeID, this.init);
	},

	preInit: function(control, clientData)
	{
		var data = { instance: control, attachments: [], trashWidth: 32, trashHeight: 96 };
		$extend(data, clientData[upload.typeID]);

		control.store(upload.dataToken, data);
	},

	init: function(control, clientData)
	{
		var data = control.retrieve(upload.dataToken);
		var btnUpload = ui.getSubElement(data.instance, 'btnUpload');
		var pnlAttachments = ui.getSubElement(data.instance, 'attachments');

		var uploader = new BDNUpload(pnlAttachments, btnUpload, data, {
			container: data.instance,
			url: '/upload',
			fileSizeMax: 1073741824,
			timeLimit: 1800
		});

		data.uploader = uploader;
	},

	collectViewState: function(control)
	{
		var data = control.retrieve(upload.dataToken);
		var files = [];

		for (var i = 0; i < data.attachments.length; i++)
		{
			files.push(data.attachments[i].File);
		}

		var sFiles = files.join('|');

		return { 'Files': sFiles };
	}
});

var upload = new Upload();

BDNUpload = new Class(
{
	Extends: Swiff.Uploader,

	options:
	{
		queued: false,
		instantStart: true,
		allowDuplicates: true,
		timeLimit: 300
	},

	initialize: function(list, btnUpload, data, options)
	{
		this.list = $(list);
		this.data = data;
		this.btnUpload = $(btnUpload);

		options.target = this.btnUpload;
		options.fileClass = options.fileClass || BDNUpload.File;

		this.parent(options);

		for (var i = 0; i < this.data.attachments.length; i++)
		{
			var fileUI = this.createFileUI(this.data, this.data.attachments[i], i);
			fileUI.element.addEvent('upRemove', function()
			{
				this.uploader.data.attachments.erase(this.attachment);
				this.element.destroy();
			} .bind(fileUI));
			this.list.adopt(fileUI.element);
			fileUI.init();
		}
	},

	createFileUI: function(d, data, id)
	{
		var fileUI = {};

		fileUI.data = d;
		fileUI.uploader = this;
		fileUI.attachment = data;
		fileUI.element = new Element('div', { 'class': 'attachment', id: 'at-' + id });
		fileUI.icon = new Element('img', { 'class': 'atIcon', 'src': data.Icon, 'width': 64, 'height': 64, id: 'icon' });
		fileUI.overlay = new Element('div', { 'class': 'atOverlay', id: 'overlay' });
		fileUI.main = new Element('div', { 'class': 'atMain', id: 'pnl' });
		var linkUrl = data.Link; if (linkUrl == null) { linkUrl = 'about:blank'; }
		fileUI.link = new Element('a', { target: '_blank', href: linkUrl });
		fileUI.title = new Element('div', { 'class': 'atUrl', id: 'url', text: data.Url });
		fileUI.status = new Element('div', { 'class': 'atInfo', text: data.Info });
		fileUI.cancel = new Element('div', { 'class': 'atRemove' });
		fileUI.cancel.imgUrl = '/footage/upload/btnTrash.jpg';
		fileUI.cancel.img = new Element('img', { 'src': fileUI.cancel.imgUrl, 'width': d.trashWidth, 'height': d.trashHeight });
		fileUI.removeFx = new Fx.Morph(fileUI.element, { duration: 300, transition: Fx.Transitions.Quad.easeInOut });

		fileUI.cancel.addEvent('click', function()
		{
			this.removeFx.start({
				'opacity': 0,
				'padding-top': 0,
				'padding-bottom': 0,
				'height': 0
			}).chain(function()
			{
				this.element.fireEvent('upRemove');
			} .bind(fileUI));
		} .bind(fileUI));

		fileUI.setTitle = function(title)
		{
			this.title.empty();
			this.title.set('html', title);
		} .bind(fileUI);

		fileUI.setBG = function(color)
		{
			this.element.setStyle('background-color', color);
		} .bind(fileUI);

		fileUI.resetBG = function()
		{
			this.setBG(this.baseBG);
		} .bind(fileUI);

		fileUI.adaptData = function(data)
		{
			this.attachment = data;
			this.icon.set('src', data.Icon);
			this.link.set('href', data.Link);
			this.setTitle(data.Url);
			this.status.set('html', data.Info);
		} .bind(fileUI);

		fileUI.init = function(data)
		{
			cssBtn.preInit(this.element, { cssBtn: { mode: 1, css: 'attachment', group: '', section: ''} });
			imgBtn.preInit(this.cancel, { imgBtn: { imageUrl: this.cancel.imgUrl, hasHover: true, hasActive: true, section: '', height: this.data.trashHeight, imgHeight: this.data.trashHeight / 3, mode: 1} });
			this.baseBG = this.element.getStyle('background-color');
		} .bind(fileUI);

		fileUI.link.adopt(fileUI.title);

		fileUI.cancel.adopt(
			fileUI.cancel.img
		);

		fileUI.main.adopt(
			fileUI.link,
			fileUI.status
		);

		fileUI.element.adopt(
			fileUI.icon,
			fileUI.overlay,
			fileUI.main,
			fileUI.cancel
		);

		return fileUI;
	}
});

BDNUpload.File = new Class(
{
	Extends: Swiff.Uploader.File,

	render: function()
	{
		if (this.invalid)
		{
			if (this.validationError)
			{
				alert(this.validationError);
				//				var msg = MooTools.lang.get('FancyUpload', 'validationErrors')[this.validationError] || this.validationError;
				//				this.validationErrorMessage = msg.substitute({
				//					name: this.name,
				//					size: Swiff.Uploader.formatUnit(this.size, 'b'),
				//					fileSizeMin: Swiff.Uploader.formatUnit(this.base.options.fileSizeMin || 0, 'b'),
				//					fileSizeMax: Swiff.Uploader.formatUnit(this.base.options.fileSizeMax || 0, 'b'),
				//					fileListMax: this.base.options.fileListMax || 0,
				//					fileListSizeMax: Swiff.Uploader.formatUnit(this.base.options.fileListSizeMax || 0, 'b')
				//				});
			}

			this.remove();
			return;
		}

		this.addEvents({
			'open': this.onOpen,
			'remove': this.onRemove,
			'requeue': this.onRequeue,
			'progress': this.onProgress,
			'stop': this.onStop,
			'complete': this.onComplete,
			'error': this.onError
		});

		this.ui = this.base.createFileUI(this.base.data, { Icon: '/footage/upload/uploading.jpg', Url: this.name, Info: '' }, this.id);
		this.ui.overlay.setStyle('display', 'block');
		this.base.list.adopt(this.ui.element);
		this.ui.init();

		this.base.reposition();

		return this.parent();
	},

	setStatus: function(msg, params)
	{
		if ($defined(params))
		{
			msg = msg.substitute(params);
		}

		this.ui.status.set('html', msg);
	},

	onOpen: function()
	{
		this.setStatus('{name} is preparing for upload...', { name: this.name });
		//this.ui.overlay.setStyle('display', 'block');
	},

	onRemove: function()
	{
		this.ui = this.ui.element.destroy();
	},

	onProgress: function()
	{
		var overlayHeight = -0.64 * this.progress.percentLoaded + 64;
		this.ui.overlay.setStyle('height', overlayHeight);

		//this.setStatus('{name} ({percent}%, {rate}, {timeLeft})', {
		this.setStatus('{bytesLoaded} von {size} hochgeladen ({rate}) - {timeLeft} verbleibend ({percent}%)', {
			name: this.name,
			percent: this.progress.percentLoaded,
			rate: Swiff.Uploader.formatUnit(this.progress.rate, 'bps'),
			timeLeft: Swiff.Uploader.formatUnit(this.progress.timeRemaining, 's'),
			bytesLoaded: Swiff.Uploader.formatUnit(this.progress.bytesLoaded, 'b'),
			size: Swiff.Uploader.formatUnit(this.size, 'b')
		});
	},

	onStop: function()
	{
		this.remove();
	},

	onComplete: function()
	{
		if (this.response.error)
		{
			this.setStatus('{name} (ERROR: {err})', { name: this.name, err: this.response.text });
			//			var msg = MooTools.lang.get('FancyUpload', 'errors')[this.response.error] || '{error} #{code}';
			//			this.errorMessage = msg.substitute($extend({ name: this.name }, this.response));

			//			this.base.fireEvent('fileError', [this, this.response, this.errorMessage]);
			//			this.fireEvent('error', [this, this.response, this.errorMessage]);
			return;
		}

		var resp = JSON.decode(this.response.text);

		if (resp.status == 1)
		{
			this.ui.adaptData(resp.attachment);

			this.ui.overlay.setStyle('display', 'none');

			this.base.data.attachments.push(resp.attachment);

			this.ui.element.addEvent('upRemove', function(f)
			{
				this.uploader.data.attachments.erase(this.attachment);
				f.remove();
			} .bind(this.ui, this));
		}
		else if (resp.status == 2)
		{
			this.setStatus('Fehler: {reason}', {
				reason: resp.reason
			});
		}

		var response = this.response.text || '';
		this.base.fireEvent('fileSuccess', [this, response]);
	},

	onError: function()
	{
		//this.ui.element.addClass('file-failed');
	}
});
//> require <site 1.0.0>

var CtxView = new Class(
{
	Implements: Events,

	initialize: function()
	{
		this.current = null;
		this.last = null;
		this.optimizeLinks = true;

		site.addEvent('loadPage', this._setView);
	},

	update: function(data)
	{
		ctxView.last = ctxView.current;
		ctxView.current = data;

		if ($defined(ctxView.current))
		{
			if ($defined(ctxView.last) && ctxView.last.ViewID !== ctxView.current.ViewID)
			{
				window.scrollTo(0, 0);
			}

			if ($defined(ctxView.current.Link) && ctxView.current.Link === '/')
			{
				ctxView.current.Link = '';
			}

			site._setPage(null, ctxView.current);

			if ($defined(ctxView.current.Chain))
			{
				var chain = ctxView.current.Chain;

				for (var i = 0; i < chain.length; i++)
				{
					var el = $(chain[i]);

					if ($defined(el))
					{
						var imgData = el.retrieve('imgBtn_data');

						if ($defined(imgData))
						{
							imgBtn.activate(imgData)
						}
						else
						{
							cssBtn.activate(el, true)
						}
					}
				}
			}
		}
	},

	setView: function(e, ctx)
	{
		ctxView._setView(ctx);
	},

	_setView: function(ctx)
	{
		if (site.hardLink !== '')
		{
			var form = new Element('form', { method: 'post', action: site.config.Domain });
			var elView = new Element('input', { id: 'viewID', name: 'viewID', type: 'hidden', value: ctx.viewID });
			var elViewParams = new Element('input', { id: 'viewParams', name: 'viewParams', type: 'hidden', value: base64Json.encode(ctx.viewParams) });
			var elLink = new Element('input', { id: 'link', name: 'link', type: 'hidden', value: ctx.link });

			form.adopt(
				elView,
				elViewParams,
				elLink
			);

			$(document.body).adopt(form);

			form.submit();
		}
		else
		{
			if (!$defined(ctxView.current))
			{
				ctxView.current = { ViewID: site.view, ViewParams: {} };
			}

			var lastViewID = ctxView.current.ViewID;

			if ($defined(ctx.lastViewID))
			{
				lastViewID = ctx.lastViewID;
			}

			ctxView.fireEvent('viewChange');

			var data = { 'lastViewID': lastViewID };

			if (!$defined(ctx.link))
			{
				$extend(data,
				{
					'viewID': ctx.viewID,
					'viewParams': ctx.viewParams
				});
			}
			else
			{
				if (!ctxView.optimizeLinks)
				{
					data = {};
				}

				$extend(data,
				{
					'link': ctx.link
				});
			}

			var jsonData = JSON.encode(data);

			var req = new Request(
			{
				url: '/',
				urlEncoded: false,
				method: 'post',
				data: jsonData,
				link: 'cancel',
				headers: { 'Content-Type': 'application/json; charset=utf-8', 'Accept': 'application/json', 'Kind': 'view' },
				onSuccess: function(retVal)
				{
					var commands = JSON.decode(retVal);
					ui.processCommands(commands);
					ctxView.fireEvent('viewChanged');
				},
				onFailure: function(instance)
				{
					//alert(JSON.encode(instance));
				}
			});

			req.send();
		}
	}
});

var ctxView = new CtxView();
//> require <site 1.0.0>

var Dock = new Class(
{
	Implements: Events,

	initialize: function()
	{
		this.typeID = 'dock';
		this.data = null;
		this.smiley = null;
		this.btnLogout = null;
		this.emptyID = '00000000-0000-0000-0000-000000000000';

		//window.addEvent('setPage', this.onSetPage);
		site.contextChanged = this.contextChanged;
		ctxView.addEvent('viewChange', this.beforeUpdate);
		window.addEvent('keyup', this.onKeyUp.bindWithEvent(this));

		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
	},

	preInit: function(control, clientData)
	{
		var elActions = new Element('div', { 'class': 'actions' });

		control.adopt(elActions);

		dock.data = {
			control: control,
			instance: elActions,
			allowed: false,
			isOpen: false,
			contextSensitive: false,
			needsUpdate: true,
			isHiding: false,
			isReopening: false
		};

		control.setStyles({
			'height': 0,
			'opacity': 0
		});

		$extend(dock.data, clientData[dock.typeID]);

		dock.data.fx = new Fx.Morph(control, { duration: 200, transition: Fx.Transitions.Sine.easeInOut, link: 'cancel' });
		dock.data.fxActions = new Fx.Morph(elActions, { duration: 230, transition: Fx.Transitions.Sine.easeInOut, link: 'cancel' });

		dock.data.isOpen = false;
	},

	createSmiley: function()
	{
		var smiley = {};

		smiley.element = new Element('div', { 'class': 'dockSmiley action' });
		smiley.icon = imgBtn.createNew({
			imgUrl: '/footage/dock/smiley_n.png',
			css: 'icon',
			imgCss: 'png',
			width: 69,
			height: 70
		});

		smiley.desc = new Element('div', { 'class': 'desc' });
		smiley.desc.set('html', 'Verstecken');

		if (!dock.data.isOpen)
		{
			smiley.desc.setStyle('opacity', 0.0);
		}

		smiley.fx = new Fx.Morph(smiley.desc, { duration: 100, transition: Fx.Transitions.Sine.easeInOut, link: 'cancel' });

		smiley.element.adopt(
			smiley.icon,
			smiley.desc
		);

		smiley.element.addEvent('click', dock.toggle);

		return smiley;
	},

	createLogout: function()
	{
		var btnLogout = {};

		btnLogout.element = new Element('div', { 'class': 'dockLogout action' });
		btnLogout.icon = imgBtn.createNew({
			imgUrl: '/footage/dock/logout_n.png',
			css: 'icon',
			imgCss: 'png',
			width: 69,
			height: 70
		});

		btnLogout.desc = new Element('div', { 'class': 'desc' });
		btnLogout.desc.set('html', 'Abmelden');

		if (!dock.data.isOpen)
		{
			btnLogout.element.setStyle('opacity', 0.0);
		}

		btnLogout.fx = new Fx.Morph(btnLogout.element, { duration: 100, transition: Fx.Transitions.Sine.easeInOut, link: 'cancel' });

		btnLogout.element.adopt(
			btnLogout.icon,
			btnLogout.desc
		);

		btnLogout.element.addEvent('click', dock.logout);

		return btnLogout;
	},

	logout: function()
	{
		uiDialog.executeAction('dlgLogin', 'dlgLogin', { 'viewID': ctxView.current.ViewID, 'viewParams': ctxView.current.ViewParams }, 'logout', {});
	},

	createActions: function(params)
	{
		if (!$defined(dock.data))
		{
			return;
		}

		var actions = params.actions;

		dock.data.instance.setStyles(
		{
			'left': 30,
			'opacity': 0.0
		});

		dock.data.instance.empty();

		if (!$defined(actions))
		{
			return;
		}

		for (var i = 0; i < actions.length; i++)
		{
			var action = actions[i];
			var iconUrl = '/footage/dock/{icon}_n.png';
			iconUrl = iconUrl.substitute(action);

			action.ui = new Element('div', { 'class': 'action' });
			action.ui.icon = imgBtn.createNew({
				imgUrl: iconUrl,
				css: 'icon',
				imgCss: 'png',
				width: 69,
				height: 70
				//				height: 210,
				//				imgHeight: 70,
				//				mode: 1
			});

			action.ui.desc = new Element('div', { 'class': 'desc' });
			action.ui.desc.set('html', action.title);

			action.ui.adopt(
				action.ui.icon,
				action.ui.desc
			);

			action.ui.addEvent('click', dock.executeAction.bind(action));

			dock.data.instance.adopt(action.ui);
		}

		dock.data.actions = actions;
		dock.data.needsUpdate = false;

		dock.data.fxActions.start(
		{
			'left': 0,
			'opacity': 1.0
		});
	},

	executeAction: function()
	{
		var p =
		{
			actionID: this.id,
			viewID: ctxView.current.ViewID,
			viewParams: ctxView.current.ViewParams
		};

		if ($defined(ctxView.last))
		{
			p.lastViewID = ctxView.last.ViewID;
			p.lastViewParams = ctxView.last.ViewParams;
		}

		p.viewParams.d = 0;

		uiDialog.executeAction('dlgDelegate', 'dlgDelegate', p, 'executeDock', {});
	},

	onKeyUp: function(e)
	{
		if (e.control && e.key == 'space')
		{
			dock.toggle();
			e.stopPropagation();
		}

		return true;
	},

	//	doUpdate: function()
	//	{
	//		var viewID = site.view;

	//		if ($defined(ctxView.current))
	//		{
	//			viewID = ctxView.current.ViewID;
	//		}

	//		uiDialog.executeAction('dlgDelegate', 'dlgDelegate', { 'viewID': viewID }, 'updateDock', {});
	//	},

	contextChanged: function(link, initStage)
	{
		if (!$defined(dock.data) || !dock.data.contextSensitive || !dock.data.allowed)
		{
			return;
		}

		if (initStage)
		{
			if (dock.data.isReopening)
			{
				dock.data.isReopening = false;
				//dock.doUpdate();
				//console.warn('reopening dock');
				//uiDialog.executeAction('dlgDelegate', {}, 'updateDock', { 'link': link });
			}
		}
		else
		{
			if (dock.data.isOpen)
			{
				//dock.doUpdate();
				//console.warn('updating dock @' + link);
				//uiDialog.executeAction('dlgDelegate', {}, 'updateDock', { 'viewID': site.node.viewID });
			}
			else
			{
				dock.data.instance.empty();
				dock.data.needsUpdate = true;
			}
		}
	},

	beforeUpdate: function(eventParams)
	{
		if (!$defined(dock.data) || !dock.data.contextSensitive || !dock.data.allowed)
		{
			return;
		}

		if (dock.data.isOpen)
		{
			dock.data.isHiding = true;
			dock.data.fxActions.start(
			{
				'left': -30,
				'opacity': 0.0
			}).chain(function()
			{
				if (dock.data.afterUpdate != null)
				{
					dock.data.afterUpdate();
				}

				dock.data.isHiding = false;
			});
		}
	},

	update: function(params)
	{
		if (dock.data === null || !$defined(params))
		{
			return;
		}

		if (dock.data.isHiding)
		{
			dock.data.afterUpdate = function()
			{
				dock.afterUpdate(params);
				dock.data.afterUpdate = null;
			};
		}
		else
		{
			dock.afterUpdate(params);
		}
	},

	afterUpdate: function(params)
	{
		dock.createActions(params);
	},

	allow: function(contextSensitive)
	{
		if (dock.data == null)
		{
			return;
		}

		if (!$defined(contextSensitive))
		{
			contextSensitive = false;
		}

		dock.data.allowed = true;
		dock.data.contextSensitive = contextSensitive;

		if (dock.smiley != null)
		{
			dock.smiley.element.destroy();
		}

		if (dock.btnLogout != null)
		{
			dock.btnLogout.element.destroy();
		}

		dock.smiley = dock.createSmiley();
		dock.btnLogout = dock.createLogout();

		var pnl = dock.data.control.getParent();

		pnl.adopt(dock.smiley.element, dock.btnLogout.element);
	},

	deny: function()
	{
		if (dock.data == null)
		{
			return;
		}

		dock.data.allowed = false;

		if (dock.smiley != null)
		{
			dock.smiley.element.destroy();
			dock.smiley = null;
		}

		if (dock.btnLogout != null)
		{
			dock.btnLogout.element.destroy();
			dock.btnLogout = null;
		}

		if (dock.data.isOpen)
		{
			dock.close();
		}
	},

	open: function()
	{
		if (dock.data == null || !dock.data.allowed)
		{
			return;
		}

		dock.data.isOpen = true;

		if (dock.data.needsUpdate)
		{
			//dock.doUpdate();
		}

		var sy = window.getScroll().y;

		dock.data.fx.start({
			'height': 100,
			'opacity': 1.0
		}).chain(function()
		{
			dock.fireEvent('open');

			$('dlgMain').setStyles({
				'margin-top': 100
			});

			var wndScroll = window.getScroll();
			window.scrollTo(wndScroll.x, sy + 100);

			if (dock.smiley != null)
			{
				dock.smiley.fx.start({
					'opacity': 1.0
				});
			}

			if (dock.btnLogout != null)
			{
				dock.btnLogout.fx.start({
					'opacity': 1.0
				});
			}
		});
	},

	close: function()
	{
		if (dock.data == null)
		{
			return;
		}

		dock.data.isOpen = false;

		if (dock.smiley != null)
		{
			dock.smiley.fx.start({
				'opacity': 0.0
			});
		}

		if (dock.btnLogout != null)
		{
			dock.btnLogout.fx.start({
				'opacity': 0.0
			});
		}

		var sy = window.getScroll().y;

		dock.data.fx.start({
			'height': 0,
			'opacity': 0
		}).chain(function()
		{
			dock.fireEvent('close');

			$('dlgMain').setStyles({
				'margin-top': 0
			});

			var wndScroll = window.getScroll();
			window.scrollTo(wndScroll.x, sy - 100);

			uiDialog.executeAction('dlgDelegate', {}, 'closeDock', {});
		});
	},

	toggle: function()
	{
		if (dock.data == null)
		{
			return;
		}

		if (!dock.data.isOpen)
		{
			dock.open();
		}
		else
		{
			dock.close();
		}
	},

	getDialogParams: function(dialogs)
	{
		for (var i = 0; i < dialogs.length; i++)
		{
			var dialog = $(dialogs[i]);

			if ($defined(dialog))
			{
				return base64Json.decode($(dialogs[i]).retrieve('clientData')._p);
			}
		}

		return null;
	},

	back: function()
	{
		window.history.back();
	}
});

var dock = new Dock();
//> require <cufonLbl 1.0.9>

/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * � 2008 The Monotype Corporation. All Rights Reserved.
 * 
 * Trademark:
 * Arial is a trademark of The Monotype Corporation in the United States and/or
 * other countries.
 * 
 * Manufacturer:
 * The Monotype Corporation
 * 
 * Designer:
 * Monotype Type Drawing Office - Robin Nicholas, Patricia Saunders 1982
 */
Cufon.registerFont({"w":200,"face":{"font-family":"Arial","font-weight":700,"font-stretch":"normal","units-per-em":"360","panose-1":"2 11 7 4 2 2 2 2 2 4","ascent":"288","descent":"-72","x-height":"4","bbox":"-17 -315 350 76.147","underline-thickness":"37.793","underline-position":"-19.3359","unicode-range":"U+0020-U+20AC"},"glyphs":{" ":{"w":100,"k":{"Y":7,"A":13}},"\u00a0":{"w":100},"!":{"d":"45,-66v-5,-63,-15,-121,-13,-192r54,0v2,71,-7,129,-13,192r-28,0xm34,0r0,-49r50,0r0,49r-50,0","w":119},"\"":{"d":"29,-166v-6,-28,-11,-56,-9,-92r53,0v2,35,-2,64,-8,92r-36,0xm108,-166v-6,-28,-11,-56,-9,-92r54,0v2,35,-2,64,-8,92r-37,0","w":170},"#":{"d":"27,-64r-24,0r0,-39r32,0r10,-52r-42,0r0,-39r50,0r14,-68r40,0r-14,68r38,0r14,-68r41,0r-14,68r24,0r0,39r-32,0r-11,52r43,0r0,39r-51,0r-14,68r-39,0r14,-68r-39,0r-14,68r-40,0xm85,-155r-10,52r39,0r10,-52r-39,0"},"$":{"d":"184,-77v1,44,-31,76,-73,80r0,33r-25,0r0,-32v-42,-5,-67,-34,-74,-76r46,-5v4,17,15,33,28,39r0,-74v-40,-12,-67,-33,-67,-78v0,-39,30,-68,67,-71r0,-17r25,0r0,17v38,5,60,25,66,61r-44,6v-3,-14,-11,-23,-22,-28r0,69v48,14,72,26,73,76xm86,-223v-29,6,-30,54,0,61r0,-61xm111,-36v24,-2,40,-34,23,-55v-5,-6,-12,-10,-23,-13r0,68"},"%":{"d":"73,-126v-39,0,-57,-25,-57,-68v0,-42,18,-68,56,-68v39,0,57,25,57,68v0,42,-18,68,-56,68xm72,-234v-17,1,-18,16,-18,40v0,24,2,36,18,40v26,0,26,-82,0,-80xm110,10r-37,0r137,-272r36,0xm247,10v-40,0,-58,-26,-58,-68v0,-42,18,-68,57,-68v39,0,57,25,57,68v0,42,-17,68,-56,68xm246,-98v-17,2,-18,16,-18,40v0,24,1,37,18,40v17,-2,18,-16,18,-40v0,-24,-1,-37,-18,-40","w":320},"&":{"d":"214,-61v8,8,31,25,40,30r-30,38v-15,-7,-29,-17,-42,-30v-44,49,-172,32,-166,-48v2,-41,27,-62,59,-79v-15,-16,-27,-32,-27,-56v0,-35,31,-56,72,-56v40,0,71,23,71,59v0,33,-18,41,-47,61r36,47v4,-8,8,-17,11,-29r45,10v-7,26,-11,37,-22,53xm121,-227v-41,2,-19,42,-1,55v10,-8,28,-20,28,-32v0,-14,-12,-24,-27,-23xm100,-118v-39,12,-49,83,5,82v21,-1,32,-9,46,-20","w":259},"'":{"d":"25,-166v-6,-28,-11,-56,-9,-92r54,0v2,35,-2,64,-8,92r-37,0","w":85},"(":{"d":"108,-262v-55,100,-54,241,0,338r-34,0v-31,-46,-53,-103,-55,-169v-1,-69,26,-126,56,-169r33,0","w":119},")":{"d":"101,-96v-1,69,-23,124,-55,172r-34,0v54,-95,55,-240,0,-338r33,0v31,44,56,98,56,166","w":119},"*":{"d":"43,-139r-26,-21r33,-34r-45,-11r10,-31v15,6,29,13,41,21v-3,-19,-4,-35,-4,-47r31,0v0,9,-1,24,-4,47r44,-19r9,32v-13,3,-28,5,-45,8r31,36r-27,18r-23,-40v-7,13,-16,27,-25,41","w":140},"+":{"d":"82,-37r0,-67r-67,0r0,-46r67,0r0,-67r45,0r0,67r68,0r0,46r-68,0r0,67r-45,0","w":210},",":{"d":"25,-49r49,0v2,53,-1,95,-44,106r-9,-20v19,-5,27,-15,28,-37r-24,0r0,-49","w":100},"-":{"d":"20,-69r0,-49r97,0r0,49r-97,0","w":119},"\u00ad":{"d":"20,-69r0,-49r97,0r0,49r-97,0","w":119},".":{"d":"26,0r0,-49r49,0r0,49r-49,0","w":100},"\/":{"d":"-1,4r64,-266r37,0r-64,266r-37,0","w":100},"0":{"d":"15,-128v0,-79,18,-131,84,-131v66,0,83,54,83,132v0,78,-17,131,-83,131v-65,0,-84,-50,-84,-132xm99,-37v48,0,32,-111,27,-152v-2,-18,-10,-28,-27,-29v-35,7,-32,41,-32,91v0,52,-4,83,32,90"},"1":{"d":"28,-194v27,-9,65,-37,74,-65r40,0r0,259r-50,0r0,-186v-18,17,-40,29,-64,37r0,-45","k":{"1":20}},"2":{"d":"182,-187v1,71,-71,97,-98,141r98,0r0,46r-173,0v3,-65,81,-112,113,-153v20,-24,12,-67,-23,-65v-23,2,-33,15,-35,40r-49,-4v5,-51,34,-76,85,-77v46,-1,82,29,82,72"},"3":{"d":"136,-139v91,25,42,143,-38,143v-46,0,-81,-29,-84,-72r47,-6v3,21,16,37,37,37v22,1,36,-18,36,-42v0,-32,-25,-50,-57,-37r5,-40v45,8,58,-61,13,-62v-18,1,-31,15,-32,34r-46,-7v8,-43,32,-65,80,-68v69,-4,108,91,39,120"},"4":{"d":"112,0r0,-52r-105,0r0,-43r111,-164r42,0r0,164r32,0r0,43r-32,0r0,52r-48,0xm112,-95r0,-88r-59,88r59,0"},"5":{"d":"189,-86v0,103,-162,125,-173,20r49,-5v2,19,18,36,37,36v24,0,37,-22,37,-51v0,-49,-52,-62,-77,-28r-40,-6r25,-134r131,0r0,46r-93,0r-8,44v58,-28,112,19,112,78"},"6":{"d":"15,-125v0,-82,27,-134,95,-134v42,0,66,26,73,64r-48,6v0,-32,-39,-38,-55,-15v-7,9,-12,28,-14,58v44,-51,121,-3,121,63v0,50,-33,89,-82,87v-63,-2,-90,-51,-90,-129xm105,-131v-21,0,-34,18,-34,44v0,27,14,50,36,50v23,0,32,-18,32,-45v0,-29,-11,-49,-34,-49"},"7":{"d":"50,0v2,-81,37,-158,78,-208r-113,0r0,-46r169,0r0,36v-43,45,-85,132,-86,218r-48,0"},"8":{"d":"15,-74v0,-32,17,-55,43,-65v-22,-9,-37,-26,-37,-53v0,-41,31,-67,77,-67v76,0,106,96,42,120v26,10,43,31,44,63v0,48,-35,81,-83,81v-48,0,-87,-32,-86,-79xm99,-220v-17,0,-31,13,-31,31v0,19,12,31,30,31v18,0,31,-12,31,-31v0,-18,-13,-31,-30,-31xm99,-118v-22,0,-36,19,-36,40v-1,24,16,43,37,43v22,0,35,-18,35,-43v0,-23,-15,-40,-36,-40"},"9":{"d":"184,-129v0,81,-28,134,-95,134v-43,0,-66,-26,-73,-65r48,-5v0,31,40,38,55,15v7,-9,12,-29,14,-59v-44,51,-122,5,-122,-63v0,-49,35,-89,83,-87v63,3,90,52,90,130xm94,-123v21,0,34,-20,34,-45v0,-27,-13,-50,-36,-50v-22,0,-32,18,-32,46v0,29,11,49,34,49"},":":{"d":"35,-137r0,-50r50,0r0,50r-50,0xm35,0r0,-49r50,0r0,49r-50,0","w":119},";":{"d":"34,-137r0,-50r49,0r0,50r-49,0xm34,-49r49,0v2,52,1,96,-43,106r-10,-20v18,-6,27,-16,28,-37r-24,0r0,-49","w":119},"\u037e":{"d":"34,-137r0,-50r49,0r0,50r-49,0xm34,-49r49,0v2,52,1,96,-43,106r-10,-20v18,-6,27,-16,28,-37r-24,0r0,-49","w":119},"<":{"d":"193,-29r-176,-77r0,-43r176,-76r0,50r-123,47r123,49r0,50","w":210},"=":{"d":"15,-143r0,-46r180,0r0,46r-180,0xm15,-65r0,-46r180,0r0,46r-180,0","w":210},">":{"d":"17,-29r0,-50r123,-48r-123,-48r0,-50r177,77r0,42","w":210},"?":{"d":"111,-260v61,0,113,51,83,105v-6,11,-48,44,-59,60v-3,5,-3,15,-3,29r-45,0v-12,-71,62,-74,68,-122v3,-21,-20,-35,-42,-35v-29,1,-43,17,-49,44r-45,-6v1,-44,43,-75,92,-75xm87,0r0,-49r50,0r0,49r-50,0","w":219},"@":{"d":"191,43v56,1,97,-14,121,-46r38,0v-25,51,-81,79,-156,79v-110,0,-183,-55,-183,-161v0,-107,70,-177,180,-177v89,0,146,50,149,135v1,66,-53,129,-116,127v-19,0,-28,-5,-32,-20v-43,44,-115,10,-115,-54v0,-76,86,-160,141,-93r5,-19r46,0r-29,141v0,6,2,9,7,9v36,-8,61,-49,62,-92v0,-63,-51,-102,-119,-102v-93,0,-147,60,-147,148v0,84,62,125,148,125xm176,-159v-37,0,-52,47,-54,83v-1,26,11,44,32,44v40,0,53,-47,55,-86v1,-23,-13,-41,-33,-41","w":351},"A":{"d":"259,0r-57,0r-23,-59r-103,0r-21,59r-55,0r100,-258r55,0xm163,-102r-36,-96r-35,96r71,0","w":259,"k":{"y":13,"w":7,"v":13,"Y":33,"W":20,"V":27,"T":27," ":13}},"B":{"d":"242,-75v0,66,-41,75,-128,75r-88,0r0,-258v88,3,202,-21,204,65v0,27,-18,47,-37,56v29,8,49,28,49,62xm179,-185v0,-43,-52,-27,-101,-30r0,60v45,-2,101,11,101,-30xm188,-77v0,-49,-61,-32,-110,-35r0,69v47,-3,110,14,110,-34","w":259},"C":{"d":"134,-40v34,0,51,-23,57,-55r51,16v-15,51,-46,83,-108,83v-71,0,-117,-54,-117,-131v0,-139,187,-188,224,-60r-52,13v-5,-24,-25,-45,-54,-44v-44,1,-64,35,-64,88v0,56,18,90,63,90","w":259},"D":{"d":"242,-126v0,80,-32,126,-118,126r-98,0r0,-258r95,0v89,-2,121,47,121,132xm188,-129v2,-75,-30,-91,-110,-85r0,171r39,0v59,2,70,-28,71,-86","w":259},"E":{"d":"26,0r0,-258r191,0r0,44r-139,0r0,57r130,0r0,43r-130,0r0,71r144,0r0,43r-196,0","w":240},"F":{"d":"27,0r0,-258r176,0r0,44r-124,0r0,61r107,0r0,43r-107,0r0,110r-52,0","w":219,"k":{"A":20,".":40,",":40}},"G":{"d":"71,-132v0,87,83,114,135,70r0,-33r-60,0r0,-43r112,0r0,102v-20,21,-69,41,-110,40v-82,-1,-131,-52,-131,-134v0,-80,44,-131,128,-132v62,0,99,26,110,76r-52,9v-7,-25,-27,-41,-58,-41v-49,1,-74,33,-74,86","w":280},"H":{"d":"26,0r0,-258r52,0r0,102r102,0r0,-102r52,0r0,258r-52,0r0,-113r-102,0r0,113r-52,0","w":259},"I":{"d":"25,0r0,-258r52,0r0,258r-52,0","w":100},"J":{"d":"87,-40v29,0,31,-16,32,-51r0,-167r52,0v-8,109,36,267,-85,262v-52,-2,-81,-30,-80,-84r49,-5v1,29,9,45,32,45"},"K":{"d":"27,0r0,-258r52,0r0,115r105,-115r70,0r-97,101r102,157r-67,0r-71,-121r-42,43r0,78r-52,0","w":259},"L":{"d":"28,0r0,-256r52,0r0,213r129,0r0,43r-181,0","w":219,"k":{"y":13,"Y":33,"W":20,"V":27,"T":27," ":7}},"M":{"d":"25,0r0,-258r78,0r47,176r46,-176r78,0r0,258r-48,0r0,-203r-51,203r-50,0r-51,-203r0,203r-49,0","w":299},"N":{"d":"27,0r0,-258r50,0r106,172r0,-172r48,0r0,258r-52,0r-104,-168r0,168r-48,0","w":259},"O":{"d":"141,4v-76,0,-126,-52,-125,-131v1,-85,41,-133,124,-135v78,-1,126,54,126,134v0,81,-48,132,-125,132xm141,-218v-48,0,-72,36,-72,89v0,53,25,89,72,89v48,0,71,-37,71,-90v0,-53,-24,-88,-71,-88","w":280},"P":{"d":"224,-178v0,76,-62,85,-146,81r0,97r-52,0r0,-258r84,0v81,-4,114,15,114,80xm170,-178v-1,-42,-45,-36,-92,-36r0,73v47,0,92,5,92,-37","w":240,"k":{"A":27,".":46,",":46," ":7}},"Q":{"d":"265,-129v0,43,-10,72,-31,96v13,9,26,17,41,22r-19,37v-27,-10,-23,-10,-58,-33v-94,36,-182,-18,-182,-122v0,-82,45,-133,125,-133v78,0,125,52,124,133xm69,-129v0,60,35,102,91,86v-11,-7,-21,-12,-32,-16r15,-29v17,6,33,14,49,26v38,-46,23,-162,-51,-156v-47,4,-72,36,-72,89","w":280},"R":{"d":"237,-185v0,42,-27,66,-68,71v42,23,61,73,89,114r-62,0r-65,-94v-11,-13,-27,-14,-53,-14r0,108r-52,0r0,-258r110,0v68,-3,101,17,101,73xm184,-182v0,-46,-59,-29,-106,-32r0,65v47,-3,106,12,106,-33","w":259,"k":{"Y":13,"W":7,"V":7}},"S":{"d":"184,-142v73,44,30,156,-65,147v-65,-6,-99,-31,-106,-89r51,-5v6,32,21,47,56,50v46,4,72,-50,26,-63v-47,-14,-124,-26,-124,-88v0,-77,119,-89,167,-51v16,14,25,33,26,57r-52,2v-5,-26,-17,-35,-47,-37v-29,-2,-59,20,-36,41v14,13,87,26,104,36","w":240},"T":{"d":"84,0r0,-214r-76,0r0,-44r205,0r0,44r-77,0r0,214r-52,0","w":219,"k":{"y":27,"w":27,"u":27,"s":27,"r":20,"o":27,"i":7,"e":27,"c":27,"a":27,"O":7,"A":27,";":40,":":40,".":40,"-":20,",":40}},"U":{"d":"132,4v-85,0,-106,-36,-106,-124r0,-138r52,0r0,140v-2,56,7,78,52,78v44,0,49,-24,49,-75r0,-143r52,0r0,136v4,90,-19,126,-99,126","w":259},"V":{"d":"92,0r-92,-258r56,0r65,191r64,-191r55,0r-93,258r-55,0","w":240,"k":{"y":13,"u":13,"r":20,"o":27,"i":7,"e":20,"a":20,"A":27,";":20,":":20,".":33,"-":20,",":33}},"W":{"d":"63,0r-62,-258r53,0r39,177r47,-177r62,0r46,180r39,-180r52,0r-62,258r-55,0r-52,-193r-51,193r-56,0","w":339,"k":{"y":7,"u":7,"r":7,"o":7,"i":3,"e":7,"a":13,"A":20,";":7,":":7,".":20,"-":7,",":20}},"X":{"d":"0,0r88,-134r-80,-124r61,0r52,83r50,-83r61,0r-80,125r88,133r-63,0r-57,-89r-58,89r-62,0","w":240},"Y":{"d":"94,0r0,-108r-95,-150r61,0r61,102r60,-102r59,0r-94,150r0,108r-52,0","w":240,"k":{"v":20,"u":20,"q":27,"p":20,"o":27,"i":13,"e":20,"a":20,"A":33,";":27,":":27,".":40,"-":20,",":40," ":7}},"Z":{"d":"4,0r0,-47r135,-167r-120,0r0,-44r189,0r0,41r-141,174r146,0r0,43r-209,0","w":219},"[":{"d":"26,73r0,-331r87,0r0,39r-40,0r0,253r40,0r0,39r-87,0","w":119},"\\":{"d":"-1,-262r37,0r64,266r-37,0","w":100},"]":{"d":"94,-258r0,331r-87,0r0,-39r40,0r0,-253r-40,0r0,-39r87,0","w":119},"^":{"d":"20,-122r66,-140r40,0r64,140r-50,0r-35,-86r-35,86r-50,0","w":210},"_":{"d":"-3,71r0,-32r205,0r0,32r-205,0"},"`":{"d":"87,-210r-31,0r-49,-52r56,0","w":119},"a":{"d":"95,-153v-20,1,-26,7,-32,23r-45,-8v11,-36,33,-54,81,-53v56,2,78,12,78,72v0,43,-5,93,11,119r-49,0r-6,-20v-30,38,-120,31,-120,-31v0,-60,78,-55,116,-71v1,-24,-8,-31,-34,-31xm90,-31v30,-1,43,-21,39,-59v-18,8,-68,8,-67,34v0,14,12,26,28,25"},"b":{"d":"206,-95v11,86,-93,131,-136,68r0,27r-46,0r0,-258r49,0r0,93v49,-57,143,-12,133,70xm114,-153v-27,0,-41,23,-41,56v0,37,14,62,43,62v27,0,39,-24,39,-58v0,-37,-12,-60,-41,-60","w":219},"c":{"d":"15,-93v0,-107,150,-136,174,-38r-49,8v-3,-19,-14,-30,-34,-29v-29,1,-40,20,-40,55v0,66,70,83,77,25r48,9v-10,42,-36,66,-86,67v-56,0,-90,-39,-90,-97"},"d":{"d":"15,-94v-9,-83,83,-128,133,-71r0,-93r49,0r0,258r-46,0r0,-27v-43,63,-147,18,-136,-67xm107,-153v-28,0,-42,23,-42,56v0,39,13,62,42,62v27,0,41,-26,41,-58v0,-36,-12,-60,-41,-60","w":219},"e":{"d":"62,-79v-6,46,63,64,72,20r49,8v-11,34,-38,54,-81,55v-57,1,-91,-38,-91,-96v-1,-56,33,-100,86,-99v61,1,92,43,89,112r-124,0xm137,-109v4,-38,-41,-58,-64,-32v-7,8,-10,19,-10,32r74,0"},"f":{"d":"124,-221v-27,-8,-49,-1,-43,34r37,0r0,39r-37,0r0,148r-49,0r0,-148r-28,0r0,-39r28,0v-11,-69,41,-86,98,-69","w":119},"g":{"d":"108,76v-56,1,-87,-16,-87,-64r57,7v2,17,10,18,28,19v42,3,43,-26,41,-68v-45,64,-140,15,-132,-64v-10,-85,90,-131,136,-66r0,-27r46,0r0,168v2,69,-24,94,-89,95xm106,-153v-27,0,-41,23,-41,56v0,34,14,57,40,57v28,0,43,-22,43,-56v0,-34,-14,-57,-42,-57","w":219},"h":{"d":"116,-153v-61,0,-36,94,-41,153r-49,0r0,-258r49,0r0,95v41,-52,121,-31,121,53r0,110r-50,0r0,-99v0,-39,-1,-54,-30,-54","w":219},"i":{"d":"26,-212r0,-46r49,0r0,46r-49,0xm26,0r0,-187r49,0r0,187r-49,0","w":100},"j":{"d":"25,-212r0,-46r49,0r0,46r-49,0xm-8,28v26,5,33,-2,33,-37r0,-178r49,0r0,181v9,72,-31,92,-91,76","w":100},"k":{"d":"24,0r0,-258r49,0r0,137r58,-66r61,0r-64,69r69,118r-54,0r-46,-84r-24,24r0,60r-49,0"},"l":{"d":"26,0r0,-258r49,0r0,258r-49,0","w":100},"m":{"d":"109,-153v-59,0,-31,95,-37,153r-50,0r0,-187r46,0r0,26v26,-39,92,-40,111,0v30,-48,118,-40,118,42r0,119r-50,0r0,-107v0,-33,-3,-46,-26,-46v-57,0,-32,95,-37,153r-49,0r0,-102v-1,-35,0,-51,-26,-51","w":320},"n":{"d":"71,-159v36,-53,125,-40,125,43r0,116r-50,0v-7,-52,23,-153,-30,-153v-61,0,-36,93,-41,153r-50,0r0,-187r46,0r0,28","w":219},"o":{"d":"111,4v-60,-1,-98,-38,-97,-100v1,-55,39,-95,97,-95v55,0,96,42,96,97v0,54,-41,100,-96,98xm111,-151v-29,0,-46,24,-46,58v0,34,17,57,46,57v28,0,45,-25,45,-58v0,-32,-17,-57,-45,-57","w":219},"p":{"d":"207,-94v0,82,-86,130,-133,71r0,94r-50,0r0,-258r46,0r0,28v11,-17,32,-32,59,-32v48,1,78,43,78,97xm115,-152v-27,0,-42,23,-42,55v0,35,14,62,43,62v27,0,40,-23,40,-59v0,-34,-13,-58,-41,-58","w":219},"q":{"d":"16,-95v0,-84,97,-130,136,-64r0,-28r45,0r0,258r-49,0r0,-94v-10,15,-31,27,-55,27v-49,-1,-77,-45,-77,-99xm107,-35v27,0,42,-27,42,-61v0,-34,-13,-56,-41,-56v-29,0,-42,23,-42,59v0,35,13,58,41,58","w":219},"r":{"d":"129,-139v-48,-23,-60,18,-56,81r0,58r-49,0r0,-187r46,0r0,27v14,-31,43,-39,75,-22","w":140,"k":{".":20,",":20}},"s":{"d":"167,-95v38,45,-4,99,-69,99v-49,0,-80,-20,-90,-57r50,-8v5,20,16,27,40,30v32,4,51,-29,15,-37v-64,-14,-92,-14,-98,-66v-7,-59,95,-69,136,-44v12,8,20,20,25,36r-46,9v0,-27,-63,-31,-69,-7v2,24,89,25,106,45"},"t":{"d":"115,-3v-47,18,-87,4,-87,-63r0,-81r-23,0r0,-40r23,0r0,-37r50,-29r0,66r33,0r0,40r-33,0r0,75v-3,35,5,40,33,31","w":119},"u":{"d":"105,-33v61,2,34,-93,40,-154r50,0r0,187r-46,0r0,-28v-29,50,-124,44,-124,-41r0,-118r49,0v7,55,-22,152,31,154","w":219},"v":{"d":"77,0r-75,-187r52,0r45,127r46,-127r51,0r-74,187r-45,0","k":{".":27,",":27}},"w":{"d":"61,0r-59,-187r48,0r35,123r32,-123r47,0r31,123r36,-123r49,0r-60,187r-48,0r-32,-120r-31,120r-48,0","w":280,"k":{".":13,",":13}},"x":{"d":"2,0r67,-96r-64,-91r60,0r33,52r35,-52r58,0r-63,89r69,98r-61,0r-38,-58r-38,58r-58,0"},"y":{"d":"2,-187r53,0r45,133r43,-133r51,0r-77,212v-11,40,-47,59,-98,48r-5,-39v33,9,54,-7,59,-33","k":{".":27,",":27}},"z":{"d":"6,0r0,-38r95,-109v-26,2,-60,1,-88,1r0,-41r154,0r0,35r-96,110r102,-1r0,43r-167,0","w":180},"{":{"d":"49,-3v0,-48,0,-64,-38,-69r0,-42v35,-2,40,-23,38,-63v-3,-69,17,-86,82,-85r0,42v-74,-12,-5,97,-69,127v31,9,33,64,33,101v0,24,9,25,36,26r0,42v-61,2,-82,-16,-82,-79","w":140},"|":{"d":"31,76r0,-338r39,0r0,338r-39,0","w":100},"}":{"d":"90,-183v-2,47,1,65,38,69r0,42v-35,2,-40,22,-38,62v3,70,-16,87,-82,86r0,-42v27,0,36,-2,36,-25v0,-37,1,-94,33,-102v-32,-24,-31,-39,-33,-100v-1,-26,-7,-27,-36,-27r0,-42v61,-2,84,15,82,79","w":140},"~":{"d":"146,-92v-27,0,-63,-25,-86,-24v-16,0,-32,9,-48,25r0,-46v35,-46,97,-12,138,0v19,-1,36,-11,48,-25r0,47v-9,11,-32,23,-52,23","w":210},"\u00c4":{"d":"67,-272r0,-43r43,0r0,43r-43,0xm143,-272r0,-43r42,0r0,43r-42,0xm259,0r-57,0r-23,-59r-103,0r-21,59r-55,0r100,-258r55,0xm163,-102r-36,-96r-35,96r71,0","w":259},"\u00d6":{"d":"79,-272r0,-43r42,0r0,43r-42,0xm154,-272r0,-43r43,0r0,43r-43,0xm141,4v-76,0,-126,-52,-125,-131v1,-85,41,-133,124,-135v78,-1,126,54,126,134v0,81,-48,132,-125,132xm141,-218v-48,0,-72,36,-72,89v0,53,25,89,72,89v48,0,71,-37,71,-90v0,-53,-24,-88,-71,-88","w":280},"\u00dc":{"d":"70,-272r0,-43r42,0r0,43r-42,0xm146,-272r0,-43r42,0r0,43r-42,0xm132,4v-85,0,-106,-36,-106,-124r0,-138r52,0r0,140v-2,56,7,78,52,78v44,0,49,-24,49,-75r0,-143r52,0r0,136v4,90,-19,126,-99,126","w":259},"\u00e4":{"d":"41,-220r0,-42r43,0r0,42r-43,0xm117,-220r0,-42r43,0r0,42r-43,0xm95,-153v-20,1,-26,7,-32,23r-45,-8v11,-36,33,-54,81,-53v56,2,78,12,78,72v0,43,-5,93,11,119r-49,0r-6,-20v-30,38,-120,31,-120,-31v0,-60,78,-55,116,-71v1,-24,-8,-31,-34,-31xm90,-31v30,-1,43,-21,39,-59v-18,8,-68,8,-67,34v0,14,12,26,28,25"},"\u00f6":{"d":"50,-220r0,-42r42,0r0,42r-42,0xm125,-220r0,-42r43,0r0,42r-43,0xm111,4v-60,-1,-98,-38,-97,-100v1,-55,39,-95,97,-95v55,0,96,42,96,97v0,54,-41,100,-96,98xm111,-151v-29,0,-46,24,-46,58v0,34,17,57,46,57v28,0,45,-25,45,-58v0,-32,-17,-57,-45,-57","w":219},"\u00fc":{"d":"51,-220r0,-42r42,0r0,42r-42,0xm126,-220r0,-42r43,0r0,42r-43,0xm105,-33v61,2,34,-93,40,-154r50,0r0,187r-46,0r0,-28v-29,50,-124,44,-124,-41r0,-118r49,0v7,55,-22,152,31,154","w":219},"\u00df":{"d":"101,-223v-28,3,-26,19,-27,56r0,167r-50,0r0,-167v-1,-63,18,-94,77,-95v42,-1,70,18,72,53v1,19,-21,46,-22,61v6,32,56,50,56,92v0,64,-95,80,-119,27r34,-20v6,18,36,18,36,-4v0,-21,-10,-19,-30,-39v-20,-19,-29,-34,-29,-45v0,-16,23,-50,23,-68v0,-10,-10,-19,-21,-18","w":219},"\u20ac":{"d":"21,-168v9,-72,94,-116,168,-83r-10,48v-34,-32,-102,-7,-105,35r97,0r-6,27r-94,0r0,23r89,0r-5,28r-80,0v6,54,80,65,113,29r0,54v-74,33,-158,-12,-168,-83r-26,0r6,-28r17,0r0,-23r-23,0r6,-27r21,0"}}});

//> require <site 1.0.0>
//> require <cufonLbl 1.0.9>

var Growl = new Class(
{
	Implements: [Options, Events],

	options:
	{
		instance: null
	},

	initialize: function(options)
	{
		this.offset = 0;
		this.items = [];
		this.delayID = null;
		this.setOptions(options);

		ui.registerCleanupHandler(this.cleanup);
		site.addEvent('init', this.init);
	},

	init: function()
	{
		var op = growl.options;

		if (!$defined(op.instance))
		{
			op.instance = new Element('div', { 'id': 'growl', 'class': 'growl' });
			$(document.body).adopt(op.instance);
		}
	},

	cleanup: function(rootElement)
	{
		var op = growl.options;

		if ($defined(op.instance) && rootElement.hasChild(op.instance))
		{
			op.instance.destroy();
			op.instance = null;
		}
	},

	show: function(options)
	{
		growl.init();

		var op = growl.options;

		if ($defined(op.instance))
		{
			options.sticky = true;
			options.global = true;

			var item = new Growly(options);

			item.ui.instance.addEvents({
				'mouseenter': growl.onMouseEnter.bindWithEvent(this),
				'mouseleave': growl.onMouseLeave.bindWithEvent(this)
			});

			growl.items.push(item);

			item.open();

			if (growl.items.length === 1)
			{
				growl.processGrowlies();
			}

			op.instance.grab(item.ui.instance, 'top');
		}
	},

	onMouseEnter: function(e)
	{
		$clear(growl.delayID);
	},

	onMouseLeave: function(e)
	{
		$clear(growl.delayID);
		growl.processGrowlies();
	},

	processGrowlies: function()
	{
		if (growl.items.length >= 1)
		{
			var growly = growl.items[0];
			growl.delayID = growly.close.bind(growly).delay(growly.options.duration);
		}
	},

	onClosed: function(e)
	{
		growl.items.shift();

		growl.processGrowlies();
	},

	create: function(options)
	{
		return new Growly(options);
	}
});

var Growly = new Class(
{
	Implements: [Options, Events],

	options:
	{
		icon: '',
		title: '',
		message: '',
		box: null,

		sticky: false,
		duration: 6000,
		fxDuration: 400,
		titleFont: 'Calibri',
		global: false
	},

	initialize: function(options)
	{
		this.setOptions(options);
		var op = this.options;

		var ui =
		{
			instance: new Element('div', { 'class': 'growly' }),
			top: new Element('div', { 'id': 'top' }),
			topL: new Element('div', { 'id': 'l' }),
			topM: new Element('div', { 'id': 'm' }),
			topR: new Element('div', { 'id': 'r' }),
			middle: new Element('div', { 'id': 'middle' }),
			middleL: new Element('div', { 'id': 'l' }),
			imgL: new Element('img', { 'id': 'imgL', 'src': '/footage/growly/l.png', 'class': 'png' }),
			middleM: new Element('div', { 'id': 'm' }),
			middleR: new Element('div', { 'id': 'r' }),
			imgR: new Element('img', { 'id': 'imgR', 'src': '/footage/growly/r.png', 'class': 'png' }),
			body: new Element('div', { 'id': 'body' }),
			bottom: new Element('div', { 'id': 'bottom' }),
			bottomL: new Element('div', { 'id': 'l' }),
			bottomM: new Element('div', { 'id': 'm' }),
			bottomR: new Element('div', { 'id': 'r' }),
			header: new Element('div', { 'id': 'head' }),
			icon: new Element('div', { 'id': 'icon' }),
			title: new Element('div', { 'id': 'title' }),
			main: new Element('div', { 'id': 'gMain' }),

			init: function()
			{
				//cufonLbl.preInit(this.title, { 'cufonLbl': { font: op.titleFont} });
			}
		};

		ui.setWidth = (function(width)
		{
			this.instance.setStyle('width', width);

			var innerWidth = width - 16;

			this.topM.setStyle('width', innerWidth);
			this.middleM.setStyle('width', innerWidth);
			this.bottomM.setStyle('width', innerWidth);

			var left = width - 8;

			this.middleR.setStyle('left', left);
		}).bind(ui);

		ui.instance.setStyle('opacity', 0);

		ui.top.adopt(
			ui.topL,
			ui.topM,
			ui.topR
		);

		ui.middle.adopt(
			ui.middleL,
			ui.body,
			ui.middleR
		);

		ui.bottom.adopt(
			ui.bottomL,
			ui.bottomM,
			ui.bottomR
		);

		ui.middleL.adopt(ui.imgL);
		ui.middleR.adopt(ui.imgR);

		ui.instance.adopt(
			ui.top,
			ui.middle,
			ui.bottom
		);

		if (op.title !== '')
		{
			ui.title.set('html', op.title);

			if (op.icon !== '')
			{
				ui.iconImg = new Element('img', { 'src': '/footage/growly/' + op.icon + '.jpg' });

				ui.icon.adopt(
					ui.iconImg
				);

				ui.header.adopt(
					ui.icon
				);
			}

			ui.header.adopt(
				ui.title
			);

			ui.body.adopt(
				ui.header
			);
		}

		if (op.message !== '')
		{
			ui.main.set('html', op.message);
			ui.main.addClass('message');
		}

		ui.body.adopt(
			ui.main
		);

		this.ui = ui;
		this.fx = new Fx.Morph(ui.instance, { duration: op.fxDuration, transition: Fx.Transitions.Sine.easeIn, chain: 'cancel' });
	},

	open: function()
	{
		var op = this.options;

		this.ui.init();

		var p = { 'opacity': 1.0 };

		if (op.global)
		{
			p['padding-top'] = [40, 0];
		}

		if ($defined(op.box))
		{
			this.ui.main.adopt(
				op.box.getChildren()
			);
		}

		this.fx.start(p);

		if (!op.sticky)
		{
			this.close.bind(this).delay(op.duration);
		}
	},

	close: function(onClosed)
	{
		this.fx.start({
			'opacity': 0.0
		}).chain((function()
		{
			this.fx.start({
				'height': 0
			}).chain((function()
			{
				//this.fireEvent('closed');

				if ($defined(this.options.box))
				{
					this.options.box.adopt(
						this.ui.main.getChildren()
					);
				}

				if (this.options.global)
				{
					growl.onClosed.bind(this)();
				}

				if ($defined(onClosed))
				{
					onClosed();
				}

				this.destroy.bind(this)();
			}).bind(this));
		}).bind(this));
	},

	destroy: function()
	{
		if ($defined(this.ui.instance))
		{
			this.ui.instance.destroy();
		}
	},

	positionWith: function(element, pos, offsets)
	{
		this.ui.instance.setStyles({
			'position': 'absolute',
			'z-index': 30000,
			'opacity': 0.0
		});

		var elBody = $(document.body);

		if (!elBody.hasChild(this.ui.instance))
		{
			elBody.adopt(this.ui.instance);
		}

		var elCoords = element.getCoordinates(elBody);

		var grSize = this.ui.instance.getSize();

		if (!$defined(pos) || pos === '')
		{
			pos = 'right';
		}

		var top = 0;
		var left = 0;

		if (pos === 'top')
		{
			top = elCoords.top - grSize.y - 3;
			left = elCoords.left;
		}
		else if (pos === 'left')
		{
			top = elCoords.top;
			left = elCoords.left - grSize.x - 3;
		}
		else if (pos === 'right')
		{
			top = elCoords.top;
			left = elCoords.right + 3;
		}
		else if (pos === 'bottom')
		{
			top = elCoords.bottom + 3;
			left = elCoords.left;
		}
		else if (pos === 'bottomRight')
		{
			top = elCoords.bottom + 3;
			left = elCoords.left - (grSize.x - elCoords.width);
		}

		this.positionAt({ x: left, y: top }, offsets);
	},

	positionAt: function(pos, offsets)
	{
		var top = pos.y;
		var left = pos.x;

		top -= 14;

		if ($defined(offsets))
		{
			top += offsets.top;
			left += offsets.left;
		}

		this.ui.instance.setStyles({
			'top': top,
			'left': left
		});
	}
});

var growl = new Growl();
//> require <site 1.0.0>
//> require <growl 1.0.0>

var FormField = new Class(
{
	Implements: [Options, Events],

	options:
	{
		dummy: true
	},

	initialize: function(options)
	{
		this.typeID = 'ff';
		this.dataToken = this.typeID + '_data';
		this.setOptions(options);

		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
	},

	preInit: function(control, clientData)
	{
		var data =
		{
			instance: control,
			name: ui.getSubElement(control, 'name'),
			editor: null,
			editorID: null,
			growly: null,
			activeGrowly: null,
			status: 0,
			focused: false,
			validate: false,
			validateRealtime: false,
			clearRealtimeValidation: function()
			{
				if ($defined(this.validateTimeout))
				{
					$clear(this.validateTimeout);
					this.validateTimeout = null;
				}
			}
		};

		$extend(data, clientData[formField.typeID]);
		control.store(formField.dataToken, data);

		if ($defined(data.editorID))
		{
			data.editor = ui.getSubElement(control, data.editorID);

			if ($defined(data.editor))
			{
				var tag = data.editor.get('tag');

				if (tag === 'input')
				{
					if (data.validate)
					{
						data.validateRealtime = true;
						data.editor.addEvents({
							'focus': formField.onFocus.bindWithEvent(data),
							'blur': formField.onBlur.bindWithEvent(data),
							'keydown': formField.validateRealtime.bindWithEvent(data)
						});
					}
				}
				else if (tag === 'div')
				{
					if (data.editor.hasClass('dropdown'))
					{
						if (data.validate)
						{
							data.editor.addEvent('selectionChange', formField.validate.bindWithEvent(data));

							var tb = ui.getSubElement(data.editor, 'tb');

							if ($defined(tb))
							{
								tb.addEvents({
									'focus': formField.onFocus.bindWithEvent(data),
									'blur': formField.onBlur.bindWithEvent(data)
								});
							}
						}
					}
				}
			}
		}
	},

	update: function(p)
	{
		var form = ui.getSubElement(p.dlg, p.id);

		if ($defined(form))
		{
			var field = ui.getSubElement(form, p.field);

			if ($defined(field))
			{
				var data = field.retrieve(formField.dataToken);

				if ($defined(data))
				{
					data.status = p.status;
					data.growly = p.growly;

					formField._update.bind(data)();
				}
			}
		}
	},

	processClass: function(data, status, css)
	{
		if (data.status === status)
		{
			data.instance.addClass(css);
		}
		else
		{
			data.instance.removeClass(css);
		}
	},

	repositionGrowly: function()
	{
		var data = this;

		if ($defined(data.activeGrowly))
		{
			var elBody = $(document.body);
			var wndSize = window.getSize();

			var elCoords = data.instance.getCoordinates(elBody);
			var size = data.activeGrowly.ui.instance.getSize();

			var offsets = null;

			if (elCoords.left + elCoords.width + size.x + 14 > wndSize.x)
			{
				data.activeGrowly.positionWith(data.instance, 'bottomRight', offsets);
				data.activeGrowly.ui.instance.setStyle('opacity', 1.0);
			}
			else
			{
				if ($defined(data.name))
				{
					offsets = { top: data.name.getSize().y, left: 0 };
				}

				data.activeGrowly.positionWith(data.instance, 'right', offsets);
				data.activeGrowly.ui.instance.setStyle('opacity', 1.0);
			}
		}
	},

	_update: function()
	{
		var data = this;

		formField.processClass(data, 1, 'warning');
		formField.processClass(data, 2, 'error');

		if ($defined(data.activeGrowly))
		{
			window.removeEvent('resize', formField.repositionGrowly.bindWithEvent(data));

			data.activeGrowly.close();
			data.activeGrowly = null;
		}

		if (data.status !== 0 && data.focused)
		{
			if ($defined(data.growly))
			{
				var growly = data.growly;

				$extend(growly,
                {
                	sticky: true,
                	fxDuration: 140
                });

				if (data.status === 1)
				{
					growly.icon = 'warning';
				}
				else if (data.status === 2)
				{
					growly.icon = 'error';
				}

				data.activeGrowly = growl.create(growly);

				var offsets = null;

				if ($defined(data.name))
				{
					offsets = { top: data.name.getSize().y, left: 0 };
				}

				data.activeGrowly.positionWith(data.instance, 'right', offsets);
				formField.repositionGrowly.bind(data)();

				window.addEvent('resize', formField.repositionGrowly.bind(data));

				data.activeGrowly.open();
			}
		}
	},

	onFocus: function(e)
	{
		var data = this;

		data.focused = true;
		formField._update.bind(data)();
	},

	validateRealtime: function(e)
	{
		var data = this;

		data.clearRealtimeValidation.bind(data)();
		data.validateTimeout = formField.validate.delay(1000, data);
	},

	validate: function()
	{
		var data = this;
		data.instance.fireEvent('validate');
	},

	onBlur: function(e)
	{
		var data = this;

		data.focused = false;
		formField._update.bind(data)();

		if (data.validateRealtime)
		{
			data.clearRealtimeValidation.bind(data)();
			formField.validate.bind(data)();
		}
	}
});

var formField = new FormField();
//> require <stringBuilder 1.0.0>
//> require <site 1.0.0>
//> require <growl 1.0.0>

var DropDownBox = new Class(
{
	Implements: [Options, Events],

	options:
	{
		dummy: true
	},

	initialize: function(options)
	{
		this.typeID = 'db';
		this.dataToken = this.typeID + '_data';
		this.setOptions(options);

		uiDialog.registerPreInitHandler(this.typeID, this.preInit);
		ui.registerViewStateHandler(this.typeID, this.collectViewState);
	},

	preInit: function(control, clientData)
	{
		var data =
		{
			instance: control,
			activeGrowly: null,
			multi: false,
			tb: ui.getSubElement(control, 'tb'),
			btn: ui.getSubElement(control, 'btn'),
			box: ui.getSubElement(control, 'box'),
			items: ui.getSubElement(control, 'items'),
			keys: [],
			values: [],
			isInline: false,
			isOpen: false,
			isActive: false,
			width: 200,
			selectedKeys: [],

			hide: function()
			{
				this.isOpen = false;

				if ($defined(this.activeGrowly))
				{
					this.activeGrowly.close();
					this.activeGrowly = null;
				}

				this.instance.removeEvent('click', this.focus.bindWithEvent(this));
			},

			activate: function(e)
			{
				this.isActive = true;
			},

			deactivate: function(e)
			{
				this.isActive = false;
			},

			focus: function(e)
			{
				if ($defined(this.tb))
				{
					this.tb.focus();
				}
			},

			show: function()
			{
				this.isOpen = true;

				this.focus();

				var growly =
				{
					'sticky': true,
					'box': this.box,
					'fxDuration': 160
				};

				if (this.keys.length === 0)
				{
					growly.title = 'Keine Einträge vorhanden';
					growly.box = null;
				}

				this.activeGrowly = growl.create(growly);

				this.activeGrowly.ui.instance.addEvents({
					'mouseenter': this.activate.bindWithEvent(this),
					'mouseleave': this.deactivate.bindWithEvent(this),
					'click': this.focus.bindWithEvent(this)
				});

				this.instance.addEvent('click', this.focus.bindWithEvent(this));

				this.activeGrowly.ui.setWidth(
					this.width
				);

				this.activeGrowly.positionWith(this.instance, 'bottom');
				this.activeGrowly.open();
			},

			toggle: function()
			{
				if (this.isOpen)
				{
					this.hide();
				}
				else
				{
					this.show();
				}
			},

			blur: function(e)
			{
				if (!this.isActive)
				{
					this.hide();
					imgBtn.deactivate(this.btn.retrieve(imgBtn.dataToken));
				}
			},

			onClick: function(e)
			{
				if (this.data.multi)
				{
					this.item.toggleClass('selected');

					var sb = new StringBuilder();

					var c = 0;

					this.data.selectedKeys = [];

					for (var i = 0; i < this.items.length; i++)
					{
						var item = this.items[i];

						if (item.hasClass('selected'))
						{
							if (c > 0)
							{
								sb.append(', ');
							}

							this.data.selectedKeys.push(this.data.keys[i]);
							sb.append(this.data.values[i]);

							c++;
						}
					}

					if (!this.data.isInline)
					{
						if ($defined(this.data.tb))
						{
							this.data.tb.value = sb.flush();
						}
					}
				}
				else
				{
					this.data.selectedKeys = [this.key];

					this.items.removeClass("selected");
					this.item.addClass("selected");

					if (!this.data.isInline)
					{
						if ($defined(this.data.tb))
						{
							this.data.tb.value = this.value;
						}

						this.data.hide.delay(40, this.data);
						imgBtn.deactivate(this.data.btn.retrieve(imgBtn.dataToken));
					}
					//this.data.hide();
				}

				this.data.instance.fireEvent('selectionChange');
			}
		};

		$extend(data, clientData[dropDownBox.typeID]);
		control.store(dropDownBox.dataToken, data);

		if (!data.isInline)
		{
			data.instance.addEvents({
				'mouseenter': data.activate.bindWithEvent(data),
				'mouseleave': data.deactivate.bindWithEvent(data)
			});

			if ($defined(data.tb))
			{
				if (data.selectedKeys.length === 0)
				{
					data.tb.set('value', '');
				}

				data.tb.addEvents({
					'blur': data.blur.bindWithEvent(data)
				});
			}

			if ($defined(data.btn))
			{
				data.btn.addEvent('click', data.toggle.bindWithEvent(data));
			}

			if ($defined(data.box))
			{
				data.box.setStyles({
					opacity: 0.0,
					display: 'block'
				});
			}
		}

		if ($defined(data.items))
		{
			var items = data.items.getChildren();

			if (items.length == data.keys.length && items.length == data.values.length)
			{
				for (var i = 0; i < items.length; i++)
				{
					var item = items[i];
					var eventData = { 'data': data, key: data.keys[i], value: data.values[i], 'item': item, 'items': items };

					item.addEvent('click', data.onClick.bindWithEvent(eventData));
				}
			}
		}
	},

	toggle: function(e, p)
	{
		var control = ui.getSubElement(p.dlg, p.id);

		if ($defined(control))
		{
			var data = control.retrieve(dropDownBox.dataToken);

			if ($defined(data))
			{
				var i = data.keys.indexOf(p.key);

				if (i !== -1)
				{
					data.items.getChildren()[i].fireEvent('click');
				}
			}
		}
	},

	collectViewState: function(control)
	{
		var data = control.retrieve(dropDownBox.dataToken);

		if ($defined(data))
		{
			return { 'selectedKeys': data.selectedKeys };
		}

		return {};
	}
});

var dropDownBox = new DropDownBox();
//> require <stringBuilder 1.0.0>
//> require <site 1.0.0>
//> require <growl 1.0.0>

var ModalPopup = new Class(
{
	Implements: [Options, Events],

	initialize: function(options)
	{
		this.setOptions(options);
		this.mp = null;
		this.mpBG = null;
		this.growly = null;
	},

	onResize: function()
	{
		if (!$defined(modalPopup.mp))
		{
			return;
		}

		var wndScrollSize = window.getScrollSize();
		var wndSize = window.getSize();
		var wndScroll = window.getScroll();

		modalPopup.mp.setStyles({
			"top": 0,
			"left": wndScroll.x,
			"width": wndSize.x,
			"height": wndScrollSize.y
		});

		var top = (wndSize.y - modalPopup.growly.ui.middle.getSize().y) / 2 - 30;

		if (top < 16)
		{
			top = 16;
		}

		modalPopup.growly.ui.instance.setStyle("top", top);
	},

	open: function(data)
	{
		modalPopup.close();

		var dlg = Elements.from(data.html);

		if ($defined(dlg) && dlg.length > 0)
		{
			dlg = dlg[0];

			modalPopup.mp = new Element('div', { 'class': 'mp' });
			modalPopup.mpBG = new Element('div', { 'class': 'mpBG' });
			modalPopup.mpBG.setStyle("opacity", 0.9);
			modalPopup.mpBG.addEvent("click", modalPopup.close);

			var growly =
			{
				'sticky': true,
				'fxDuration': 200,
				'title': data.title,
				'icon': data.icon
			};

			modalPopup.growly = growl.create(growly);

			modalPopup.growly.ui.setWidth(
				data.width
			);

			var marginLeft = (data.width / 2) * -1;

			modalPopup.growly.ui.instance.setStyle('margin-left', marginLeft);

			var btnClose = new Element('div', { 'id': 'btnCloseMP' });
			btnClose.addEvent('click', modalPopup.close);

			modalPopup.growly.ui.header.adopt(btnClose);

			modalPopup.growly.ui.main.adopt(dlg);

			modalPopup.mp.adopt(
				modalPopup.mpBG,
				modalPopup.growly.ui.instance
			);

			window.addEvent("resize", modalPopup.onResize);

			var elBody = $(document.body);
			elBody.adopt(modalPopup.mp);

			uiDialog.init(dlg, data.clientData);

			modalPopup.growly.open();

			modalPopup.onResize();
		}
	},

	close: function()
	{
		if ($defined(modalPopup.mp))
		{
			modalPopup.mp.destroy();
			modalPopup.mp = null;
		}

		window.removeEvent("resize", modalPopup.onResize);
	}
});

var modalPopup = new ModalPopup();
//> require <site 1.0.0>
//> require <ctxView 1.0.0>
//> require <growl 1.0.0>

//> require mootools-1.2.4.2-more.js
//> require formField.js
//> require dropDownBox.js
//> require modalPopup.js
//> require <googleAnalytics 1.0.0>
//> require <cobra 1.0.0>
//> require <cssBtn 1.0.0>
//> require <imgBtn 1.0.0>
//> require <textBox 1.0.0>
//> require <htmlEditor 1.0.0>
//> require <upload 1.0.0>
//> require <dock 1.1.0>
//> require <googleMaps 1.1.0>
//> require arial.font.js
//> require repPages.js
//> require slideshow.js

ctxView.optimizeLinks = false;

var Joppich = new Class(
{
	initialize: function()
	{

	},

	scrollToTop: function()
	{
		window.scrollTo(0, 0);
	}
});

var joppich = new Joppich();

ctxView.addEvent('viewChange', joppich.scrollToTop);

