From: <Zapisane przez program Windows Internet Explorer 8>
Subject: Reynaers report
Date: Wed, 24 Mar 2010 09:40:53 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_0000_01CACB36.188D8200"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CACB36.188D8200
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif

R0lGODlhcAAhAOYAAFkBAebm5rW1tXNzc70ICDw8PJmZmTMzM8c2Nt7e3v1wcPf394oGBMkoKISE
hGNjY8zMzOWysv///+YLC6SkpKdERIojI3QDA7xzc/4+PrUICP+ZmWxsbO/v7729va0HB5SUlPrU
1N4LC1RUVP9mZpsHBswJCdGTk+WUlNbW1v8zM3kEA8XFxWsDAkpKSvrHx+Wjo61iYu8MDP5YWHp6
esVkZM0YGJ0WFoMEBGYAAP2jo/2KipQGBvcMDP29vaysrMYJCdSDg+/f35EzM9YKCtChoaUHB//M
zMlVVWIGA911dYqKimsGA7IXF5QVFbsXF3EGA0JCQvyvr4QFBfoNDfjv73sFA8VGRvyWllhYWPvh
4dJ0dOfBwbJERP5LS4QIAP19ff/FxZ8kJN6Tk6c1NP9ra4sHBezBwfzW1l4FAv4NDfTh4dWioq5E
RM8oKKIWFubCwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
BAAHAP8ALAAAAABwACEAAAf/gAsJg4SFhoeIiYqLjI2Oj4YLAQkLlR2XmJmam5iVnp+goaKjpKWm
p58JkwkSEgsdAbGys7S1AR2Vrbq7vL2+v8DBwsOtha4BExMyy8zJySJE0SYmBNUaGh8BC8Tc3d7f
u4WvCcw95ubLz9FE09QE1x8JuOD09cQO+A7hhJIQy+Zq1KCToU6au3cfPkDQZq+hw1359OkSF4DF
v3M90k0QAY3dNGvYPrBg+LBkvYj7BgmyyKzls44m3CiBgQDeByMsKJnc+Q3lRH4JWDgbypFjNBso
dF0JeTPntl0dfhigIAwNFi0StGDBogOrhCNYpLSSshXrViw+dIitJyAiPgHF/4CyKEq349EQu64k
vIlTp64ABQxAoLorRYFdO1Ts+KoCbGMpM3yQICGBBBgsXiSo0HFkMgkd9trmg/BzUIeg61J7nJa0
1RkkTRIaMVIiJy5PNGh8WpIlSwoaBx548gLGy4IXKirtUOBFygItKrRYBkNiweYXWGZkeIGKlGgI
qQidZpG6nfkGusbsnU27trxPD0AseHCAwoElDwawOOAphAofKoSAXCVYkKACd9a9MJkCJFShwmVa
hKBFd6X8AN4nKYiXgAfmAeHhhwTA4Np6JZRYAg8evOcJCC7gUt8BHrCQwn6e7DADZjsMWIUXOiiw
wwI+ZLAACVg4iByCFCZZSf+Gpm0IYjVQEvCELhEEUUN7J/KAooqW0ODCAy6ksMSXP3RQgHAL8LiA
DjMgR8IMP4bwphfckeCFFz+qMAMJzilJIZMpnOZBlO9cc80WvHBRopZampHibX5GKmmkgApqqE17
rcELHIxqyQADj04q6qinVLrhXrKxV0MrVXThKhk8mCHrrKGSauutSw4CgaDszWbiG5pKcEKnn05h
rLG1VsICCCD8kIB8nggAbQAUgADBs5WAMAgILFTybLMLsPDDJxSMC4F8zwbALLc/MHshhdcmsGsK
Hpho7w1ssOrErMcaa8W/HgT6CQgjsAABjZ6McIAAC9DAgQAH87fAASw8MML/CODtx8IIDoCApiQH
HKCNC+0Kd4ABOT1AgwEHUAKvrh3Q2ykPYrBRhS4YGIvDzjj867MVAUO6gMfKSizIAbk1PAIlGmtM
wwgFaEOjA/F9/AOY4/4ANSUnjxQfBC0nGe9I9Mr6KQMV7FLEzj/7fMHbFwSszYpnOoDwAgaMAEIB
kuz9w37MUhzu3PuBee7HHDjMQSUu6DYxDdqCWYADSuYUVAD09jtF2hIIEYMVK4S+AtxvQ2E6FHJn
4vEl+2EyAgcgLHyJx613QLEmtXewOiwHOADcLfFdcnsH8QlQACfIsz6IB5h70LYFMQxBeumnM2H9
9aljsrsHwT0gwAG7cuD7/wgueMC98B5ocv7sZz5AwfFmCkA8CMKP4H7wsie/SYobNj/9BadrgQAH
SMAWXI8J2dOfAhfIwAY6sAP8Yx69CkjAHFjwghZMggY3mIQEPvCDIAyh+gYhgOZh8IQ5SIMKV8hC
FnpQhDCMoQIFQMLmrRAAOMyhDneIwzRs8IUyDKIQO0DDBPxgEhAQAAUMsK4mOvGJU4GYKoZIRSE6
y4ixSAEEPCCALnrxi2AEowcgkCFbmPGMaEyjGtd4xita6GDmC6Mc5xgjg0HgjnjMox73yMc++vGP
gAzkFQdAyEIa8pCITKQiF8nIRjrykZA8pCqUSIFKWvKSmMykJjfJyU568hWToAxlJUsoCUiY8pSo
TKUqCaGNQAAAOw==

------=_NextPart_000_0000_01CACB36.188D8200
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reynaers.e-publications.eu/RR6/po/ibrochure/lightbox.css

#lightbox {
	Z-INDEX: 100; POSITION: absolute; TEXT-ALIGN: center; LINE-HEIGHT: 0; =
WIDTH: 100%; LEFT: 0px
}
#lightbox IMG {
	WIDTH: auto; HEIGHT: auto
}
#lightbox A IMG {
	BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: =
medium none; BORDER-RIGHT: medium none
}
#outerImageContainer {
	POSITION: relative; BACKGROUND-COLOR: #fff; MARGIN: 0px auto; WIDTH: =
250px; HEIGHT: 250px
}
#imageContainer {
	PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
PADDING-TOP: 10px
}
#loading {
	POSITION: absolute; TEXT-ALIGN: center; LINE-HEIGHT: 0; WIDTH: 100%; =
HEIGHT: 25%; TOP: 40%; LEFT: 0%
}
#hoverNav {
	Z-INDEX: 10; POSITION: absolute; WIDTH: 100%; HEIGHT: 100%; TOP: 0px; =
LEFT: 0px
}
#imageContainer > #hoverNav {
	LEFT: 0px
}
#hoverNav A {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: medium
}
#prevLink {
	BACKGROUND-IMAGE: url(data:image/gif;base64,AAAA); WIDTH: 49%; DISPLAY: =
block; HEIGHT: 100%
}
#nextLink {
	BACKGROUND-IMAGE: url(data:image/gif;base64,AAAA); WIDTH: 49%; DISPLAY: =
block; HEIGHT: 100%
}
#prevLink {
	FLOAT: left; LEFT: 0px
}
#nextLink {
	FLOAT: right; RIGHT: 0px
}
#prevLink:hover {
	BACKGROUND: url(../images/prevlabel.gif) no-repeat left 15%
}
#prevLink:hover:visited {
	BACKGROUND: url(../images/prevlabel.gif) no-repeat left 15%
}
#nextLink:hover {
	BACKGROUND: url(../images/nextlabel.gif) no-repeat right 15%
}
#nextLink:hover:visited {
	BACKGROUND: url(../images/nextlabel.gif) no-repeat right 15%
}
#imageDataContainer {
	BACKGROUND-COLOR: #fff; MARGIN: 0px auto; WIDTH: 100%; FONT: 10px/1.4em =
Verdana, Helvetica, sans-serif; OVERFLOW: auto
}
#imageData {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; COLOR: =
#666; PADDING-TOP: 0px
}
#imageData #imageDetails {
	TEXT-ALIGN: left; WIDTH: 70%; FLOAT: left
}
#imageData #caption {
	FONT-WEIGHT: bold
}
#imageData #numberDisplay {
	PADDING-BOTTOM: 1em; DISPLAY: block; CLEAR: left
}
#imageData #bottomNavClose {
	PADDING-BOTTOM: 0.7em; OUTLINE-STYLE: none; OUTLINE-COLOR: invert; =
OUTLINE-WIDTH: medium; WIDTH: 66px; FLOAT: right
}
#overlay {
	Z-INDEX: 90; POSITION: absolute; BACKGROUND-COLOR: #000; WIDTH: 100%; =
HEIGHT: 500px; TOP: 0px; LEFT: 0px
}

------=_NextPart_000_0000_01CACB36.188D8200
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reynaers.e-publications.eu/RR6/po/ibrochure/swfobject.js

/* SWFObject v2.1 <http://code.google.com/p/swfobject/>=0A=
	Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van =
der Sluis=0A=
	This software is released under the MIT License =
<http://www.opensource.org/licenses/mit-license.php>=0A=
*/=0A=
var swfobject=3Dfunction(){var =
b=3D"undefined",Q=3D"object",n=3D"Shockwave =
Flash",p=3D"ShockwaveFlash.ShockwaveFlash",P=3D"application/x-shockwave-f=
lash",m=3D"SWFObjectExprInst",j=3Dwindow,K=3Ddocument,T=3Dnavigator,o=3D[=
],N=3D[],i=3D[],d=3D[],J,Z=3Dnull,M=3Dnull,l=3Dnull,e=3Dfalse,A=3Dfalse;v=
ar h=3Dfunction(){var v=3Dtypeof K.getElementById!=3Db&&typeof =
K.getElementsByTagName!=3Db&&typeof =
K.createElement!=3Db,AC=3D[0,0,0],x=3Dnull;if(typeof =
T.plugins!=3Db&&typeof =
T.plugins[n]=3D=3DQ){x=3DT.plugins[n].description;if(x&&!(typeof =
T.mimeTypes!=3Db&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=3Dx.r=
eplace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=3DparseInt(x.replace(/^(.*)\..*$/=
,"$1"),10);AC[1]=3DparseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=3D=
/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof =
j.ActiveXObject!=3Db){var y=3Dnull,AB=3Dfalse;try{y=3Dnew =
ActiveXObject(p+".7")}catch(t){try{y=3Dnew =
ActiveXObject(p+".6");AC=3D[6,0,21];y.AllowScriptAccess=3D"always"}catch(=
t){if(AC[0]=3D=3D6){AB=3Dtrue}}if(!AB){try{y=3Dnew =
ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=3Dy.GetVariable("$version")=
;if(x){x=3Dx.split(" =
")[1].split(",");AC=3D[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],=
10)]}}catch(t){}}}}var =
AD=3DT.userAgent.toLowerCase(),r=3DT.platform.toLowerCase(),AA=3D/webkit/=
.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):fals=
e,q=3Dfalse,z=3Dr?/win/.test(r):/win/.test(AD),w=3Dr?/mac/.test(r):/mac/.=
test(AD);/*@cc_on =
q=3Dtrue;@if(@_win32)z=3Dtrue;@elif(@_mac)w=3Dtrue;@end@*/return{w3cdom:v=
,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var =
L=3Dfunction(){if(!h.w3cdom){return =
}f(H);if(h.ie&&h.win){try{K.write("<script id=3D__ie_ondomload =
defer=3Dtrue =
src=3D//:><\/script>");J=3DC("__ie_ondomload");if(J){I(J,"onreadystatecha=
nge",S)}}catch(q){}}if(h.webkit&&typeof =
K.readyState!=3Db){Z=3DsetInterval(function(){if(/loaded|complete/.test(K=
.readyState)){E()}},10)}if(typeof =
K.addEventListener!=3Db){K.addEventListener("DOMContentLoaded",E,null)}R(=
E)}();function =
S(){if(J.readyState=3D=3D"complete"){J.parentNode.removeChild(J);E()}}fun=
ction E(){if(e){return }if(h.ie&&h.win){var v=3Da("span");try{var =
u=3DK.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeC=
hild(u)}catch(w){return }}e=3Dtrue;if(Z){clearInterval(Z);Z=3Dnull}var =
q=3Do.length;for(var r=3D0;r<q;r++){o[r]()}}function =
f(q){if(e){q()}else{o[o.length]=3Dq}}function R(r){if(typeof =
j.addEventListener!=3Db){j.addEventListener("load",r,false)}else{if(typeo=
f =
K.addEventListener!=3Db){K.addEventListener("load",r,false)}else{if(typeo=
f j.attachEvent!=3Db){I(j,"onload",r)}else{if(typeof =
j.onload=3D=3D"function"){var =
q=3Dj.onload;j.onload=3Dfunction(){q();r()}}else{j.onload=3Dr}}}}}functio=
n H(){var t=3DN.length;for(var q=3D0;q<t;q++){var =
u=3DN[q].id;if(h.pv[0]>0){var =
r=3DC(u);if(r){N[q].width=3Dr.getAttribute("width")?r.getAttribute("width=
"):"0";N[q].height=3Dr.getAttribute("height")?r.getAttribute("height"):"0=
";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{i=
f(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)=
}}}}else{W(u,true)}}}function Y(t){var =
q=3Dt.getElementsByTagName(Q)[0];if(q){var =
w=3Da("embed"),y=3Dq.attributes;if(y){var v=3Dy.length;for(var =
u=3D0;u<v;u++){if(y[u].nodeName=3D=3D"DATA"){w.setAttribute("src",y[u].no=
deValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var =
x=3Dq.childNodes;if(x){var z=3Dx.length;for(var =
r=3D0;r<z;r++){if(x[r].nodeType=3D=3D1&&x[r].nodeName=3D=3D"PARAM"){w.set=
Attribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.paren=
tNode.replaceChild(w,t)}}function k(w){A=3Dtrue;var =
u=3DC(w.id);if(u){if(w.altContentId){var =
y=3DC(w.altContentId);if(y){M=3Dy;l=3Dw.altContentId}}else{M=3DG(u)}if(!(=
/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width=3D"310"}if(!(/%$/.=
test(w.height))&&parseInt(w.height,10)<137){w.height=3D"137"}K.title=3DK.=
title.slice(0,47)+" - Flash Player Installation";var =
z=3Dh.ie&&h.win?"ActiveX":"PlugIn",q=3DK.title,r=3D"MMredirectURL=3D"+j.l=
ocation+"&MMplayerType=3D"+z+"&MMdoctitle=3D"+q,x=3Dw.id;if(h.ie&&h.win&&=
u.readyState!=3D4){var =
t=3Da("div");x+=3D"SWFObjectNew";t.setAttribute("id",x);u.parentNode.inse=
rtBefore(t,u);u.style.display=3D"none";var =
v=3Dfunction(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.exp=
ressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}functio=
n O(t){if(h.ie&&h.win&&t.readyState!=3D4){var =
r=3Da("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t=
),r);t.style.display=3D"none";var =
q=3Dfunction(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parent=
Node.replaceChild(G(t),t)}}function G(v){var =
u=3Da("div");if(h.win&&h.ie){u.innerHTML=3Dv.innerHTML}else{var =
r=3Dv.getElementsByTagName(Q)[0];if(r){var w=3Dr.childNodes;if(w){var =
q=3Dw.length;for(var =
t=3D0;t<q;t++){if(!(w[t].nodeType=3D=3D1&&w[t].nodeName=3D=3D"PARAM")&&!(=
w[t].nodeType=3D=3D8)){u.appendChild(w[t].cloneNode(true))}}}}}return =
u}function U(AG,AE,t){var q,v=3DC(t);if(v){if(typeof =
AG.id=3D=3Db){AG.id=3Dt}if(h.ie&&h.win){var AF=3D"";for(var AB in =
AG){if(AG[AB]!=3DObject.prototype[AB]){if(AB.toLowerCase()=3D=3D"data"){A=
E.movie=3DAG[AB]}else{if(AB.toLowerCase()=3D=3D"styleclass"){AF+=3D' =
class=3D"'+AG[AB]+'"'}else{if(AB.toLowerCase()!=3D"classid"){AF+=3D" =
"+AB+'=3D"'+AG[AB]+'"'}}}}}var AD=3D"";for(var AA in =
AE){if(AE[AA]!=3DObject.prototype[AA]){AD+=3D'<param name=3D"'+AA+'" =
value=3D"'+AE[AA]+'" />'}}v.outerHTML=3D'<object =
classid=3D"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</obje=
ct>";i[i.length]=3DAG.id;q=3DC(AG.id)}else{if(h.webkit&&h.webkit<312){var=
 AC=3Da("embed");AC.setAttribute("type",P);for(var z in =
AG){if(AG[z]!=3DObject.prototype[z]){if(z.toLowerCase()=3D=3D"data"){AC.s=
etAttribute("src",AG[z])}else{if(z.toLowerCase()=3D=3D"styleclass"){AC.se=
tAttribute("class",AG[z])}else{if(z.toLowerCase()!=3D"classid"){AC.setAtt=
ribute(z,AG[z])}}}}}for(var y in =
AE){if(AE[y]!=3DObject.prototype[y]){if(y.toLowerCase()!=3D"movie"){AC.se=
tAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=3DAC}else{var =
u=3Da(Q);u.setAttribute("type",P);for(var x in =
AG){if(AG[x]!=3DObject.prototype[x]){if(x.toLowerCase()=3D=3D"styleclass"=
){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!=3D"classid"){u.s=
etAttribute(x,AG[x])}}}}for(var w in =
AE){if(AE[w]!=3DObject.prototype[w]&&w.toLowerCase()!=3D"movie"){F(u,w,AE=
[w])}}v.parentNode.replaceChild(u,v);q=3Du}}}return q}function =
F(t,q,r){var =
u=3Da("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appen=
dChild(u)}function X(r){var =
q=3DC(r);if(q&&(q.nodeName=3D=3D"OBJECT"||q.nodeName=3D=3D"EMBED")){if(h.=
ie&&h.win){if(q.readyState=3D=3D4){B(r)}else{j.attachEvent("onload",funct=
ion(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var =
r=3DC(t);if(r){for(var q in r){if(typeof =
r[q]=3D=3D"function"){r[q]=3Dnull}}r.parentNode.removeChild(r)}}function =
C(t){var q=3Dnull;try{q=3DK.getElementById(t)}catch(r){}return =
q}function a(q){return K.createElement(q)}function =
I(t,q,r){t.attachEvent(q,r);d[d.length]=3D[t,q,r]}function c(t){var =
r=3Dh.pv,q=3Dt.split(".");q[0]=3DparseInt(q[0],10);q[1]=3DparseInt(q[1],1=
0)||0;q[2]=3DparseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]=3D=3Dq[0]&&r[1]=
>q[1])||(r[0]=3D=3Dq[0]&&r[1]=3D=3Dq[1]&&r[2]>=3Dq[2]))?true:false}functi=
on V(v,r){if(h.ie&&h.mac){return }var =
u=3DK.getElementsByTagName("head")[0],t=3Da("style");t.setAttribute("type=
","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof =
K.createTextNode!=3Db){t.appendChild(K.createTextNode(v+" =
{"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof =
K.styleSheets!=3Db&&K.styleSheets.length>0){var =
q=3DK.styleSheets[K.styleSheets.length-1];if(typeof =
q.addRule=3D=3DQ){q.addRule(v,r)}}}function W(t,q){var =
r=3Dq?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=3Dr}else{V("#"=
+t,"visibility:"+r)}}function g(s){var r=3D/[\\\"<>\.;]/;var =
q=3Dr.exec(s)!=3Dnull;return q?encodeURIComponent(s):s}var =
D=3Dfunction(){if(h.ie&&h.win){window.attachEvent("onunload",function(){v=
ar w=3Dd.length;for(var =
v=3D0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var =
t=3Di.length;for(var u=3D0;u<t;u++){X(i[u])}for(var r in =
h){h[r]=3Dnull}h=3Dnull;for(var q in =
swfobject){swfobject[q]=3Dnull}swfobject=3Dnull})}}();return{registerObje=
ct:function(u,q,t){if(!h.w3cdom||!u||!q){return }var =
r=3D{};r.id=3Du;r.swfVersion=3Dq;r.expressInstall=3Dt?t:false;N[N.length]=
=3Dr;W(u,false)},getObjectById:function(v){var q=3Dnull;if(h.w3cdom){var =
t=3DC(v);if(t){var u=3Dt.getElementsByTagName(Q)[0];if(!u||(u&&typeof =
t.SetVariable!=3Db)){q=3Dt}else{if(typeof =
u.SetVariable!=3Db){q=3Du}}}}return =
q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!=
AD||!q){return }AB+=3D"";AD+=3D"";if(c(q)){W(AE,false);var =
AA=3D{};if(AC&&typeof AC=3D=3D=3DQ){for(var v in =
AC){if(AC[v]!=3DObject.prototype[v]){AA[v]=3DAC[v]}}}AA.data=3Dx;AA.width=
=3DAB;AA.height=3DAD;var y=3D{};if(z&&typeof z=3D=3D=3DQ){for(var u in =
z){if(z[u]!=3DObject.prototype[u]){y[u]=3Dz[u]}}}if(r&&typeof =
r=3D=3D=3DQ){for(var t in r){if(r[t]!=3DObject.prototype[t]){if(typeof =
y.flashvars!=3Db){y.flashvars+=3D"&"+t+"=3D"+r[t]}else{y.flashvars=3Dt+"=3D=
"+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id=3D=3DAE){W(AE,true)}})}else{if=
(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=3Dtrue;W(AE,false);f(function(){va=
r =
AF=3D{};AF.id=3DAF.altContentId=3DAE;AF.width=3DAB;AF.height=3DAD;AF.expr=
essInstall=3Dw;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h=
.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:=
function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return =
undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(=
r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParam=
Value:function(v){var =
u=3DK.location.search||K.location.hash;if(v=3D=3Dnull){return =
g(u)}if(u){var t=3Du.substring(1).split("&");for(var =
r=3D0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("=3D"))=3D=3Dv){re=
turn =
g(t[r].substring((t[r].indexOf("=3D")+1)))}}}return""},expressInstallCall=
back:function(){if(A&&M){var =
q=3DC(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.=
win){M.style.display=3D"block"}}M=3Dnull;l=3Dnull;A=3Dfalse}}}}}();
------=_NextPart_000_0000_01CACB36.188D8200
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reynaers.e-publications.eu/RR6/po/ibrochure/prototype.js

/*  Prototype JavaScript framework, version 1.5.1=0A=
 *  (c) 2005-2007 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://www.prototypejs.org/=0A=
 *=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.5.1',=0A=
=0A=
  Browser: {=0A=
    IE:     !!(window.attachEvent && !window.opera),=0A=
    Opera:  !!window.opera,=0A=
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,=0A=
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && =
navigator.userAgent.indexOf('KHTML') =3D=3D -1=0A=
  },=0A=
=0A=
  BrowserFeatures: {=0A=
    XPath: !!document.evaluate,=0A=
    ElementExtensions: !!window.HTMLElement,=0A=
    SpecificElementExtensions:=0A=
      (document.createElement('div').__proto__ !=3D=3D=0A=
       document.createElement('form').__proto__)=0A=
  },=0A=
=0A=
  ScriptFragment: '<script[^>]*>([\u0001-\uFFFF]*?)</script>',=0A=
  JSONFilter: /^\/\*-secure-\s*(.*)\s*\*\/\s*$/,=0A=
=0A=
  emptyFunction: function() { },=0A=
  K: function(x) { return x }=0A=
}=0A=
=0A=
var Class =3D {=0A=
  create: function() {=0A=
    return function() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
var Abstract =3D new Object();=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
  for (var property in source) {=0A=
    destination[property] =3D source[property];=0A=
  }=0A=
  return destination;=0A=
}=0A=
=0A=
Object.extend(Object, {=0A=
  inspect: function(object) {=0A=
    try {=0A=
      if (object =3D=3D=3D undefined) return 'undefined';=0A=
      if (object =3D=3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : object.toString();=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  },=0A=
=0A=
  toJSON: function(object) {=0A=
    var type =3D typeof object;=0A=
    switch(type) {=0A=
      case 'undefined':=0A=
      case 'function':=0A=
      case 'unknown': return;=0A=
      case 'boolean': return object.toString();=0A=
    }=0A=
    if (object =3D=3D=3D null) return 'null';=0A=
    if (object.toJSON) return object.toJSON();=0A=
    if (object.ownerDocument =3D=3D=3D document) return;=0A=
    var results =3D [];=0A=
    for (var property in object) {=0A=
      var value =3D Object.toJSON(object[property]);=0A=
      if (value !=3D=3D undefined)=0A=
        results.push(property.toJSON() + ': ' + value);=0A=
    }=0A=
    return '{' + results.join(', ') + '}';=0A=
  },=0A=
=0A=
  keys: function(object) {=0A=
    var keys =3D [];=0A=
    for (var property in object)=0A=
      keys.push(property);=0A=
    return keys;=0A=
  },=0A=
=0A=
  values: function(object) {=0A=
    var values =3D [];=0A=
    for (var property in object)=0A=
      values.push(object[property]);=0A=
    return values;=0A=
  },=0A=
=0A=
  clone: function(object) {=0A=
    return Object.extend({}, object);=0A=
  }=0A=
});=0A=
=0A=
Function.prototype.bind =3D function() {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function() {=0A=
    return __method.apply(object, args.concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Function.prototype.bindAsEventListener =3D function(object) {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function(event) {=0A=
    return __method.apply(object, [event || window.event].concat(args));=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Number.prototype, {=0A=
  toColorPart: function() {=0A=
    return this.toPaddedString(2, 16);=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this + 1;=0A=
  },=0A=
=0A=
  times: function(iterator) {=0A=
    $R(0, this, true).each(iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  toPaddedString: function(length, radix) {=0A=
    var string =3D this.toString(radix || 10);=0A=
    return '0'.times(length - string.length) + string;=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return isFinite(this) ? this.toString() : 'null';=0A=
  }=0A=
});=0A=
=0A=
Date.prototype.toJSON =3D function() {=0A=
  return '"' + this.getFullYear() + '-' +=0A=
    (this.getMonth() + 1).toPaddedString(2) + '-' +=0A=
    this.getDate().toPaddedString(2) + 'T' +=0A=
    this.getHours().toPaddedString(2) + ':' +=0A=
    this.getMinutes().toPaddedString(2) + ':' +=0A=
    this.getSeconds().toPaddedString(2) + '"';=0A=
};=0A=
=0A=
var Try =3D {=0A=
  these: function() {=0A=
    var returnValue;=0A=
=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var lambda =3D arguments[i];=0A=
      try {=0A=
        returnValue =3D lambda();=0A=
        break;=0A=
      } catch (e) {}=0A=
    }=0A=
=0A=
    return returnValue;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create();=0A=
PeriodicalExecuter.prototype =3D {=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    if (!this.timer) return;=0A=
    clearInterval(this.timer);=0A=
    this.timer =3D null;=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    if (!this.currentlyExecuting) {=0A=
      try {=0A=
        this.currentlyExecuting =3D true;=0A=
        this.callback(this);=0A=
      } finally {=0A=
        this.currentlyExecuting =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
Object.extend(String, {=0A=
  interpret: function(value) {=0A=
    return value =3D=3D null ? '' : String(value);=0A=
  },=0A=
  specialChar: {=0A=
    '\b': '\\b',=0A=
    '\t': '\\t',=0A=
    '\n': '\\n',=0A=
    '\f': '\\f',=0A=
    '\r': '\\r',=0A=
    '\\': '\\\\'=0A=
  }=0A=
});=0A=
=0A=
Object.extend(String.prototype, {=0A=
  gsub: function(pattern, replacement) {=0A=
    var result =3D '', source =3D this, match;=0A=
    replacement =3D arguments.callee.prepareReplacement(replacement);=0A=
=0A=
    while (source.length > 0) {=0A=
      if (match =3D source.match(pattern)) {=0A=
        result +=3D source.slice(0, match.index);=0A=
        result +=3D String.interpret(replacement(match));=0A=
        source  =3D source.slice(match.index + match[0].length);=0A=
      } else {=0A=
        result +=3D source, source =3D '';=0A=
      }=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  sub: function(pattern, replacement, count) {=0A=
    replacement =3D this.gsub.prepareReplacement(replacement);=0A=
    count =3D count =3D=3D=3D undefined ? 1 : count;=0A=
=0A=
    return this.gsub(pattern, function(match) {=0A=
      if (--count < 0) return match[0];=0A=
      return replacement(match);=0A=
    });=0A=
  },=0A=
=0A=
  scan: function(pattern, iterator) {=0A=
    this.gsub(pattern, iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  truncate: function(length, truncation) {=0A=
    length =3D length || 30;=0A=
    truncation =3D truncation =3D=3D=3D undefined ? '...' : truncation;=0A=
    return this.length > length ?=0A=
      this.slice(0, length - truncation.length) + truncation : this;=0A=
  },=0A=
=0A=
  strip: function() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  },=0A=
=0A=
  stripTags: function() {=0A=
    return this.replace(/<\/?[^>]+>/gi, '');=0A=
  },=0A=
=0A=
  stripScripts: function() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  },=0A=
=0A=
  extractScripts: function() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A=
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  },=0A=
=0A=
  evalScripts: function() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  },=0A=
=0A=
  escapeHTML: function() {=0A=
    var self =3D arguments.callee;=0A=
    self.text.data =3D this;=0A=
    return self.div.innerHTML;=0A=
  },=0A=
=0A=
  unescapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D this.stripTags();=0A=
    return div.childNodes[0] ? (div.childNodes.length > 1 ?=0A=
      $A(div.childNodes).inject('', function(memo, node) { return =
memo+node.nodeValue }) :=0A=
      div.childNodes[0].nodeValue) : '';=0A=
  },=0A=
=0A=
  toQueryParams: function(separator) {=0A=
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
    if (!match) return {};=0A=
=0A=
    return match[1].split(separator || '&').inject({}, function(hash, =
pair) {=0A=
      if ((pair =3D pair.split('=3D'))[0]) {=0A=
        var key =3D decodeURIComponent(pair.shift());=0A=
        var value =3D pair.length > 1 ? pair.join('=3D') : pair[0];=0A=
        if (value !=3D undefined) value =3D decodeURIComponent(value);=0A=
=0A=
        if (key in hash) {=0A=
          if (hash[key].constructor !=3D Array) hash[key] =3D =
[hash[key]];=0A=
          hash[key].push(value);=0A=
        }=0A=
        else hash[key] =3D value;=0A=
      }=0A=
      return hash;=0A=
    });=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.split('');=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this.slice(0, this.length - 1) +=0A=
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
  },=0A=
=0A=
  times: function(count) {=0A=
    var result =3D '';=0A=
    for (var i =3D 0; i < count; i++) result +=3D this;=0A=
    return result;=0A=
  },=0A=
=0A=
  camelize: function() {=0A=
    var parts =3D this.split('-'), len =3D parts.length;=0A=
    if (len =3D=3D 1) return parts[0];=0A=
=0A=
    var camelized =3D this.charAt(0) =3D=3D '-'=0A=
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A=
      : parts[0];=0A=
=0A=
    for (var i =3D 1; i < len; i++)=0A=
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);=0A=
=0A=
    return camelized;=0A=
  },=0A=
=0A=
  capitalize: function() {=0A=
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();=0A=
  },=0A=
=0A=
  underscore: function() {=0A=
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();=0A=
  },=0A=
=0A=
  dasherize: function() {=0A=
    return this.gsub(/_/,'-');=0A=
  },=0A=
=0A=
  inspect: function(useDoubleQuotes) {=0A=
    var escapedString =3D this.gsub(/[\x00-\x1f\\]/, function(match) {=0A=
      var character =3D String.specialChar[match[0]];=0A=
      return character ? character : '\\u00' + =
match[0].charCodeAt().toPaddedString(2, 16);=0A=
    });=0A=
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') =
+ '"';=0A=
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return this.inspect(true);=0A=
  },=0A=
=0A=
  unfilterJSON: function(filter) {=0A=
    return this.sub(filter || Prototype.JSONFilter, '#{1}');=0A=
  },=0A=
=0A=
  evalJSON: function(sanitize) {=0A=
    var json =3D this.unfilterJSON();=0A=
    try {=0A=
      if (!sanitize || =
(/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u =
\n\r\t])+?$/.test(json)))=0A=
        return eval('(' + json + ')');=0A=
    } catch (e) { }=0A=
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());=0A=
  },=0A=
=0A=
  include: function(pattern) {=0A=
    return this.indexOf(pattern) > -1;=0A=
  },=0A=
=0A=
  startsWith: function(pattern) {=0A=
    return this.indexOf(pattern) =3D=3D=3D 0;=0A=
  },=0A=
=0A=
  endsWith: function(pattern) {=0A=
    var d =3D this.length - pattern.length;=0A=
    return d >=3D 0 && this.lastIndexOf(pattern) =3D=3D=3D d;=0A=
  },=0A=
=0A=
  empty: function() {=0A=
    return this =3D=3D '';=0A=
  },=0A=
=0A=
  blank: function() {=0A=
    return /^\s*$/.test(this);=0A=
  }=0A=
});=0A=
=0A=
if (Prototype.Browser.WebKit || Prototype.Browser.IE) =
Object.extend(String.prototype, {=0A=
  escapeHTML: function() {=0A=
    return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');=0A=
  },=0A=
  unescapeHTML: function() {=0A=
    return =
this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');=0A=
  }=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
  if (typeof replacement =3D=3D 'function') return replacement;=0A=
  var template =3D new Template(replacement);=0A=
  return function(match) { return template.evaluate(match) };=0A=
}=0A=
=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
=0A=
Object.extend(String.prototype.escapeHTML, {=0A=
  div:  document.createElement('div'),=0A=
  text: document.createTextNode('')=0A=
});=0A=
=0A=
with (String.prototype.escapeHTML) div.appendChild(text);=0A=
=0A=
var Template =3D Class.create();=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
Template.prototype =3D {=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern  =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      var before =3D match[1];=0A=
      if (before =3D=3D '\\') return match[2];=0A=
      return before + String.interpret(object[match[3]]);=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
var $break =3D {}, $continue =3D new Error('"throw $continue" is =
deprecated, use "return" instead');=0A=
=0A=
var Enumerable =3D {=0A=
  each: function(iterator) {=0A=
    var index =3D 0;=0A=
    try {=0A=
      this._each(function(value) {=0A=
        iterator(value, index++);=0A=
      });=0A=
    } catch (e) {=0A=
      if (e !=3D $break) throw e;=0A=
    }=0A=
    return this;=0A=
  },=0A=
=0A=
  eachSlice: function(number, iterator) {=0A=
    var index =3D -number, slices =3D [], array =3D this.toArray();=0A=
    while ((index +=3D number) < array.length)=0A=
      slices.push(array.slice(index, index+number));=0A=
    return slices.map(iterator);=0A=
  },=0A=
=0A=
  all: function(iterator) {=0A=
    var result =3D true;=0A=
    this.each(function(value, index) {=0A=
      result =3D result && !!(iterator || Prototype.K)(value, index);=0A=
      if (!result) throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  any: function(iterator) {=0A=
    var result =3D false;=0A=
    this.each(function(value, index) {=0A=
      if (result =3D !!(iterator || Prototype.K)(value, index))=0A=
        throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  collect: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push((iterator || Prototype.K)(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  detect: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index)) {=0A=
        result =3D value;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  findAll: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  grep: function(pattern, iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      var stringValue =3D value.toString();=0A=
      if (stringValue.match(pattern))=0A=
        results.push((iterator || Prototype.K)(value, index));=0A=
    })=0A=
    return results;=0A=
  },=0A=
=0A=
  include: function(object) {=0A=
    var found =3D false;=0A=
    this.each(function(value) {=0A=
      if (value =3D=3D object) {=0A=
        found =3D true;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return found;=0A=
  },=0A=
=0A=
  inGroupsOf: function(number, fillWith) {=0A=
    fillWith =3D fillWith =3D=3D=3D undefined ? null : fillWith;=0A=
    return this.eachSlice(number, function(slice) {=0A=
      while(slice.length < number) slice.push(fillWith);=0A=
      return slice;=0A=
    });=0A=
  },=0A=
=0A=
  inject: function(memo, iterator) {=0A=
    this.each(function(value, index) {=0A=
      memo =3D iterator(memo, value, index);=0A=
    });=0A=
    return memo;=0A=
  },=0A=
=0A=
  invoke: function(method) {=0A=
    var args =3D $A(arguments).slice(1);=0A=
    return this.map(function(value) {=0A=
      return value[method].apply(value, args);=0A=
    });=0A=
  },=0A=
=0A=
  max: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D (iterator || Prototype.K)(value, index);=0A=
      if (result =3D=3D undefined || value >=3D result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  min: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D (iterator || Prototype.K)(value, index);=0A=
      if (result =3D=3D undefined || value < result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  partition: function(iterator) {=0A=
    var trues =3D [], falses =3D [];=0A=
    this.each(function(value, index) {=0A=
      ((iterator || Prototype.K)(value, index) ?=0A=
        trues : falses).push(value);=0A=
    });=0A=
    return [trues, falses];=0A=
  },=0A=
=0A=
  pluck: function(property) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push(value[property]);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  reject: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (!iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  sortBy: function(iterator) {=0A=
    return this.map(function(value, index) {=0A=
      return {value: value, criteria: iterator(value, index)};=0A=
    }).sort(function(left, right) {=0A=
      var a =3D left.criteria, b =3D right.criteria;=0A=
      return a < b ? -1 : a > b ? 1 : 0;=0A=
    }).pluck('value');=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.map();=0A=
  },=0A=
=0A=
  zip: function() {=0A=
    var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
    if (typeof args.last() =3D=3D 'function')=0A=
      iterator =3D args.pop();=0A=
=0A=
    var collections =3D [this].concat(args).map($A);=0A=
    return this.map(function(value, index) {=0A=
      return iterator(collections.pluck(index));=0A=
    });=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.toArray().length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Enumerable:' + this.toArray().inspect() + '>';=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Enumerable, {=0A=
  map:     Enumerable.collect,=0A=
  find:    Enumerable.detect,=0A=
  select:  Enumerable.findAll,=0A=
  member:  Enumerable.include,=0A=
  entries: Enumerable.toArray=0A=
});=0A=
var $A =3D Array.from =3D function(iterable) {=0A=
  if (!iterable) return [];=0A=
  if (iterable.toArray) {=0A=
    return iterable.toArray();=0A=
  } else {=0A=
    var results =3D [];=0A=
    for (var i =3D 0, length =3D iterable.length; i < length; i++)=0A=
      results.push(iterable[i]);=0A=
    return results;=0A=
  }=0A=
}=0A=
=0A=
if (Prototype.Browser.WebKit) {=0A=
  $A =3D Array.from =3D function(iterable) {=0A=
    if (!iterable) return [];=0A=
    if (!(typeof iterable =3D=3D 'function' && iterable =3D=3D '[object =
NodeList]') &&=0A=
      iterable.toArray) {=0A=
      return iterable.toArray();=0A=
    } else {=0A=
      var results =3D [];=0A=
      for (var i =3D 0, length =3D iterable.length; i < length; i++)=0A=
        results.push(iterable[i]);=0A=
      return results;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Array.prototype, Enumerable);=0A=
=0A=
if (!Array.prototype._reverse)=0A=
  Array.prototype._reverse =3D Array.prototype.reverse;=0A=
=0A=
Object.extend(Array.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      iterator(this[i]);=0A=
  },=0A=
=0A=
  clear: function() {=0A=
    this.length =3D 0;=0A=
    return this;=0A=
  },=0A=
=0A=
  first: function() {=0A=
    return this[0];=0A=
  },=0A=
=0A=
  last: function() {=0A=
    return this[this.length - 1];=0A=
  },=0A=
=0A=
  compact: function() {=0A=
    return this.select(function(value) {=0A=
      return value !=3D null;=0A=
    });=0A=
  },=0A=
=0A=
  flatten: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.concat(value && value.constructor =3D=3D Array ?=0A=
        value.flatten() : [value]);=0A=
    });=0A=
  },=0A=
=0A=
  without: function() {=0A=
    var values =3D $A(arguments);=0A=
    return this.select(function(value) {=0A=
      return !values.include(value);=0A=
    });=0A=
  },=0A=
=0A=
  indexOf: function(object) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      if (this[i] =3D=3D object) return i;=0A=
    return -1;=0A=
  },=0A=
=0A=
  reverse: function(inline) {=0A=
    return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
  },=0A=
=0A=
  reduce: function() {=0A=
    return this.length > 1 ? this : this[0];=0A=
  },=0A=
=0A=
  uniq: function(sorted) {=0A=
    return this.inject([], function(array, value, index) {=0A=
      if (0 =3D=3D index || (sorted ? array.last() !=3D value : =
!array.include(value)))=0A=
        array.push(value);=0A=
      return array;=0A=
    });=0A=
  },=0A=
=0A=
  clone: function() {=0A=
    return [].concat(this);=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    var results =3D [];=0A=
    this.each(function(object) {=0A=
      var value =3D Object.toJSON(object);=0A=
      if (value !=3D=3D undefined) results.push(value);=0A=
    });=0A=
    return '[' + results.join(', ') + ']';=0A=
  }=0A=
});=0A=
=0A=
Array.prototype.toArray =3D Array.prototype.clone;=0A=
=0A=
function $w(string) {=0A=
  string =3D string.strip();=0A=
  return string ? string.split(/\s+/) : [];=0A=
}=0A=
=0A=
if (Prototype.Browser.Opera){=0A=
  Array.prototype.concat =3D function() {=0A=
    var array =3D [];=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      if (arguments[i].constructor =3D=3D Array) {=0A=
        for (var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)=0A=
          array.push(arguments[i][j]);=0A=
      } else {=0A=
        array.push(arguments[i]);=0A=
      }=0A=
    }=0A=
    return array;=0A=
  }=0A=
}=0A=
var Hash =3D function(object) {=0A=
  if (object instanceof Hash) this.merge(object);=0A=
  else Object.extend(this, object || {});=0A=
};=0A=
=0A=
Object.extend(Hash, {=0A=
  toQueryString: function(obj) {=0A=
    var parts =3D [];=0A=
    parts.add =3D arguments.callee.addPair;=0A=
=0A=
    this.prototype._each.call(obj, function(pair) {=0A=
      if (!pair.key) return;=0A=
      var value =3D pair.value;=0A=
=0A=
      if (value && typeof value =3D=3D 'object') {=0A=
        if (value.constructor =3D=3D Array) value.each(function(value) {=0A=
          parts.add(pair.key, value);=0A=
        });=0A=
        return;=0A=
      }=0A=
      parts.add(pair.key, value);=0A=
    });=0A=
=0A=
    return parts.join('&');=0A=
  },=0A=
=0A=
  toJSON: function(object) {=0A=
    var results =3D [];=0A=
    this.prototype._each.call(object, function(pair) {=0A=
      var value =3D Object.toJSON(pair.value);=0A=
      if (value !=3D=3D undefined) results.push(pair.key.toJSON() + ': ' =
+ value);=0A=
    });=0A=
    return '{' + results.join(', ') + '}';=0A=
  }=0A=
});=0A=
=0A=
Hash.toQueryString.addPair =3D function(key, value, prefix) {=0A=
  key =3D encodeURIComponent(key);=0A=
  if (value =3D=3D=3D undefined) this.push(key);=0A=
  else this.push(key + '=3D' + (value =3D=3D null ? '' : =
encodeURIComponent(value)));=0A=
}=0A=
=0A=
Object.extend(Hash.prototype, Enumerable);=0A=
Object.extend(Hash.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var key in this) {=0A=
      var value =3D this[key];=0A=
      if (value && value =3D=3D Hash.prototype[key]) continue;=0A=
=0A=
      var pair =3D [key, value];=0A=
      pair.key =3D key;=0A=
      pair.value =3D value;=0A=
      iterator(pair);=0A=
    }=0A=
  },=0A=
=0A=
  keys: function() {=0A=
    return this.pluck('key');=0A=
  },=0A=
=0A=
  values: function() {=0A=
    return this.pluck('value');=0A=
  },=0A=
=0A=
  merge: function(hash) {=0A=
    return $H(hash).inject(this, function(mergedHash, pair) {=0A=
      mergedHash[pair.key] =3D pair.value;=0A=
      return mergedHash;=0A=
    });=0A=
  },=0A=
=0A=
  remove: function() {=0A=
    var result;=0A=
    for(var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var value =3D this[arguments[i]];=0A=
      if (value !=3D=3D undefined){=0A=
        if (result =3D=3D=3D undefined) result =3D value;=0A=
        else {=0A=
          if (result.constructor !=3D Array) result =3D [result];=0A=
          result.push(value)=0A=
        }=0A=
      }=0A=
      delete this[arguments[i]];=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  toQueryString: function() {=0A=
    return Hash.toQueryString(this);=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Hash:{' + this.map(function(pair) {=0A=
      return pair.map(Object.inspect).join(': ');=0A=
    }).join(', ') + '}>';=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return Hash.toJSON(this);=0A=
  }=0A=
});=0A=
=0A=
function $H(object) {=0A=
  if (object instanceof Hash) return object;=0A=
  return new Hash(object);=0A=
};=0A=
=0A=
// Safari iterates over shadowed properties=0A=
if (function() {=0A=
  var i =3D 0, Test =3D function(value) { this.key =3D value };=0A=
  Test.prototype.key =3D 'foo';=0A=
  for (var property in new Test('bar')) i++;=0A=
  return i > 1;=0A=
}()) Hash.prototype._each =3D function(iterator) {=0A=
  var cache =3D [];=0A=
  for (var key in this) {=0A=
    var value =3D this[key];=0A=
    if ((value && value =3D=3D Hash.prototype[key]) || =
cache.include(key)) continue;=0A=
    cache.push(key);=0A=
    var pair =3D [key, value];=0A=
    pair.key =3D key;=0A=
    pair.value =3D value;=0A=
    iterator(pair);=0A=
  }=0A=
};=0A=
ObjectRange =3D Class.create();=0A=
Object.extend(ObjectRange.prototype, Enumerable);=0A=
Object.extend(ObjectRange.prototype, {=0A=
  initialize: function(start, end, exclusive) {=0A=
    this.start =3D start;=0A=
    this.end =3D end;=0A=
    this.exclusive =3D exclusive;=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    var value =3D this.start;=0A=
    while (this.include(value)) {=0A=
      iterator(value);=0A=
      value =3D value.succ();=0A=
    }=0A=
  },=0A=
=0A=
  include: function(value) {=0A=
    if (value < this.start)=0A=
      return false;=0A=
    if (this.exclusive)=0A=
      return value < this.end;=0A=
    return value <=3D this.end;=0A=
  }=0A=
});=0A=
=0A=
var $R =3D function(start, end, exclusive) {=0A=
  return new ObjectRange(start, end, exclusive);=0A=
}=0A=
=0A=
var Ajax =3D {=0A=
  getTransport: function() {=0A=
    return Try.these(=0A=
      function() {return new XMLHttpRequest()},=0A=
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A=
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}=0A=
    ) || false;=0A=
  },=0A=
=0A=
  activeRequestCount: 0=0A=
}=0A=
=0A=
Ajax.Responders =3D {=0A=
  responders: [],=0A=
=0A=
  _each: function(iterator) {=0A=
    this.responders._each(iterator);=0A=
  },=0A=
=0A=
  register: function(responder) {=0A=
    if (!this.include(responder))=0A=
      this.responders.push(responder);=0A=
  },=0A=
=0A=
  unregister: function(responder) {=0A=
    this.responders =3D this.responders.without(responder);=0A=
  },=0A=
=0A=
  dispatch: function(callback, request, transport, json) {=0A=
    this.each(function(responder) {=0A=
      if (typeof responder[callback] =3D=3D 'function') {=0A=
        try {=0A=
          responder[callback].apply(responder, [request, transport, =
json]);=0A=
        } catch (e) {}=0A=
      }=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
=0A=
Ajax.Responders.register({=0A=
  onCreate: function() {=0A=
    Ajax.activeRequestCount++;=0A=
  },=0A=
  onComplete: function() {=0A=
    Ajax.activeRequestCount--;=0A=
  }=0A=
});=0A=
=0A=
Ajax.Base =3D function() {};=0A=
Ajax.Base.prototype =3D {=0A=
  setOptions: function(options) {=0A=
    this.options =3D {=0A=
      method:       'post',=0A=
      asynchronous: true,=0A=
      contentType:  'application/x-www-form-urlencoded',=0A=
      encoding:     'UTF-8',=0A=
      parameters:   ''=0A=
    }=0A=
    Object.extend(this.options, options || {});=0A=
=0A=
    this.options.method =3D this.options.method.toLowerCase();=0A=
    if (typeof this.options.parameters =3D=3D 'string')=0A=
      this.options.parameters =3D =
this.options.parameters.toQueryParams();=0A=
  }=0A=
}=0A=
=0A=
Ajax.Request =3D Class.create();=0A=
Ajax.Request.Events =3D=0A=
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Request.prototype =3D Object.extend(new Ajax.Base(), {=0A=
  _complete: false,=0A=
=0A=
  initialize: function(url, options) {=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.setOptions(options);=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  request: function(url) {=0A=
    this.url =3D url;=0A=
    this.method =3D this.options.method;=0A=
    var params =3D Object.clone(this.options.parameters);=0A=
=0A=
    if (!['get', 'post'].include(this.method)) {=0A=
      // simulate other verbs over post=0A=
      params['_method'] =3D this.method;=0A=
      this.method =3D 'post';=0A=
    }=0A=
=0A=
    this.parameters =3D params;=0A=
=0A=
    if (params =3D Hash.toQueryString(params)) {=0A=
      // when GET, append parameters to URL=0A=
      if (this.method =3D=3D 'get')=0A=
        this.url +=3D (this.url.include('?') ? '&' : '?') + params;=0A=
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
        params +=3D '&_=3D';=0A=
    }=0A=
=0A=
    try {=0A=
      if (this.options.onCreate) this.options.onCreate(this.transport);=0A=
      Ajax.Responders.dispatch('onCreate', this, this.transport);=0A=
=0A=
      this.transport.open(this.method.toUpperCase(), this.url,=0A=
        this.options.asynchronous);=0A=
=0A=
      if (this.options.asynchronous)=0A=
        setTimeout(function() { this.respondToReadyState(1) =
}.bind(this), 10);=0A=
=0A=
      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
      this.setRequestHeaders();=0A=
=0A=
      this.body =3D this.method =3D=3D 'post' ? (this.options.postBody =
|| params) : null;=0A=
      this.transport.send(this.body);=0A=
=0A=
      /* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
      if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
        this.onStateChange();=0A=
=0A=
    }=0A=
    catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  onStateChange: function() {=0A=
    var readyState =3D this.transport.readyState;=0A=
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A=
      this.respondToReadyState(this.transport.readyState);=0A=
  },=0A=
=0A=
  setRequestHeaders: function() {=0A=
    var headers =3D {=0A=
      'X-Requested-With': 'XMLHttpRequest',=0A=
      'X-Prototype-Version': Prototype.Version,=0A=
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'=0A=
    };=0A=
=0A=
    if (this.method =3D=3D 'post') {=0A=
      headers['Content-type'] =3D this.options.contentType +=0A=
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');=0A=
=0A=
      /* Force "Connection: close" for older Mozilla browsers to work=0A=
       * around a bug where XMLHttpRequest sends an incorrect=0A=
       * Content-length header. See Mozilla Bugzilla #246651.=0A=
       */=0A=
      if (this.transport.overrideMimeType &&=0A=
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)=0A=
            headers['Connection'] =3D 'close';=0A=
    }=0A=
=0A=
    // user-defined headers=0A=
    if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
      var extras =3D this.options.requestHeaders;=0A=
=0A=
      if (typeof extras.push =3D=3D 'function')=0A=
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A=
          headers[extras[i]] =3D extras[i+1];=0A=
      else=0A=
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });=0A=
    }=0A=
=0A=
    for (var name in headers)=0A=
      this.transport.setRequestHeader(name, headers[name]);=0A=
  },=0A=
=0A=
  success: function() {=0A=
    return !this.transport.status=0A=
        || (this.transport.status >=3D 200 && this.transport.status < =
300);=0A=
  },=0A=
=0A=
  respondToReadyState: function(readyState) {=0A=
    var state =3D Ajax.Request.Events[readyState];=0A=
    var transport =3D this.transport, json =3D this.evalJSON();=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      try {=0A=
        this._complete =3D true;=0A=
        (this.options['on' + this.transport.status]=0A=
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
         || Prototype.emptyFunction)(transport, json);=0A=
      } catch (e) {=0A=
        this.dispatchException(e);=0A=
      }=0A=
=0A=
      var contentType =3D this.getHeader('Content-type');=0A=
      if (contentType && contentType.strip().=0A=
        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))=0A=
          this.evalResponse();=0A=
    }=0A=
=0A=
    try {=0A=
      (this.options['on' + state] || Prototype.emptyFunction)(transport, =
json);=0A=
      Ajax.Responders.dispatch('on' + state, this, transport, json);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      // avoid memory leak in MSIE: clean up=0A=
      this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
    }=0A=
  },=0A=
=0A=
  getHeader: function(name) {=0A=
    try {=0A=
      return this.transport.getResponseHeader(name);=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalJSON: function() {=0A=
    try {=0A=
      var json =3D this.getHeader('X-JSON');=0A=
      return json ? json.evalJSON() : null;=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalResponse: function() {=0A=
    try {=0A=
      return eval((this.transport.responseText || '').unfilterJSON());=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  dispatchException: function(exception) {=0A=
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
    Ajax.Responders.dispatch('onException', this, exception);=0A=
  }=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create();=0A=
=0A=
Object.extend(Object.extend(Ajax.Updater.prototype, =
Ajax.Request.prototype), {=0A=
  initialize: function(container, url, options) {=0A=
    this.container =3D {=0A=
      success: (container.success || container),=0A=
      failure: (container.failure || (container.success ? null : =
container))=0A=
    }=0A=
=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.setOptions(options);=0A=
=0A=
    var onComplete =3D this.options.onComplete || =
Prototype.emptyFunction;=0A=
    this.options.onComplete =3D (function(transport, param) {=0A=
      this.updateContent();=0A=
      onComplete(transport, param);=0A=
    }).bind(this);=0A=
=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  updateContent: function() {=0A=
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'];=0A=
    var response =3D this.transport.responseText;=0A=
=0A=
    if (!this.options.evalScripts) response =3D response.stripScripts();=0A=
=0A=
    if (receiver =3D $(receiver)) {=0A=
      if (this.options.insertion)=0A=
        new this.options.insertion(receiver, response);=0A=
      else=0A=
        receiver.update(response);=0A=
    }=0A=
=0A=
    if (this.success()) {=0A=
      if (this.onComplete)=0A=
        setTimeout(this.onComplete.bind(this), 10);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create();=0A=
Ajax.PeriodicalUpdater.prototype =3D Object.extend(new Ajax.Base(), {=0A=
  initialize: function(container, url, options) {=0A=
    this.setOptions(options);=0A=
    this.onComplete =3D this.options.onComplete;=0A=
=0A=
    this.frequency =3D (this.options.frequency || 2);=0A=
    this.decay =3D (this.options.decay || 1);=0A=
=0A=
    this.updater =3D {};=0A=
    this.container =3D container;=0A=
    this.url =3D url;=0A=
=0A=
    this.start();=0A=
  },=0A=
=0A=
  start: function() {=0A=
    this.options.onComplete =3D this.updateComplete.bind(this);=0A=
    this.onTimerEvent();=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    this.updater.options.onComplete =3D undefined;=0A=
    clearTimeout(this.timer);=0A=
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A=
  },=0A=
=0A=
  updateComplete: function(request) {=0A=
    if (this.options.decay) {=0A=
      this.decay =3D (request.responseText =3D=3D this.lastText ?=0A=
        this.decay * this.options.decay : 1);=0A=
=0A=
      this.lastText =3D request.responseText;=0A=
    }=0A=
    this.timer =3D setTimeout(this.onTimerEvent.bind(this),=0A=
      this.decay * this.frequency * 1000);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
  }=0A=
});=0A=
function $(element) {=0A=
  if (arguments.length > 1) {=0A=
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)=0A=
      elements.push($(arguments[i]));=0A=
    return elements;=0A=
  }=0A=
  if (typeof element =3D=3D 'string')=0A=
    element =3D document.getElementById(element);=0A=
  return Element.extend(element);=0A=
}=0A=
=0A=
if (Prototype.BrowserFeatures.XPath) {=0A=
  document._getElementsByXPath =3D function(expression, parentElement) {=0A=
    var results =3D [];=0A=
    var query =3D document.evaluate(expression, $(parentElement) || =
document,=0A=
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);=0A=
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)=0A=
      results.push(query.snapshotItem(i));=0A=
    return results;=0A=
  };=0A=
=0A=
  document.getElementsByClassName =3D function(className, parentElement) =
{=0A=
    var q =3D ".//*[contains(concat(' ', @class, ' '), ' " + className + =
" ')]";=0A=
    return document._getElementsByXPath(q, parentElement);=0A=
  }=0A=
=0A=
} else document.getElementsByClassName =3D function(className, =
parentElement) {=0A=
  var children =3D ($(parentElement) || =
document.body).getElementsByTagName('*');=0A=
  var elements =3D [], child;=0A=
  for (var i =3D 0, length =3D children.length; i < length; i++) {=0A=
    child =3D children[i];=0A=
    if (Element.hasClassName(child, className))=0A=
      elements.push(Element.extend(child));=0A=
  }=0A=
  return elements;=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Element) var Element =3D {};=0A=
=0A=
Element.extend =3D function(element) {=0A=
  var F =3D Prototype.BrowserFeatures;=0A=
  if (!element || !element.tagName || element.nodeType =3D=3D 3 ||=0A=
   element._extended || F.SpecificElementExtensions || element =3D=3D =
window)=0A=
    return element;=0A=
=0A=
  var methods =3D {}, tagName =3D element.tagName, cache =3D =
Element.extend.cache,=0A=
   T =3D Element.Methods.ByTag;=0A=
=0A=
  // extend methods for all tags (Safari doesn't need this)=0A=
  if (!F.ElementExtensions) {=0A=
    Object.extend(methods, Element.Methods),=0A=
    Object.extend(methods, Element.Methods.Simulated);=0A=
  }=0A=
=0A=
  // extend methods for specific tags=0A=
  if (T[tagName]) Object.extend(methods, T[tagName]);=0A=
=0A=
  for (var property in methods) {=0A=
    var value =3D methods[property];=0A=
    if (typeof value =3D=3D 'function' && !(property in element))=0A=
      element[property] =3D cache.findOrStore(value);=0A=
  }=0A=
=0A=
  element._extended =3D Prototype.emptyFunction;=0A=
  return element;=0A=
};=0A=
=0A=
Element.extend.cache =3D {=0A=
  findOrStore: function(value) {=0A=
    return this[value] =3D this[value] || function() {=0A=
      return value.apply(null, [this].concat($A(arguments)));=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
Element.Methods =3D {=0A=
  visible: function(element) {=0A=
    return $(element).style.display !=3D 'none';=0A=
  },=0A=
=0A=
  toggle: function(element) {=0A=
    element =3D $(element);=0A=
    Element[Element.visible(element) ? 'hide' : 'show'](element);=0A=
    return element;=0A=
  },=0A=
=0A=
  hide: function(element) {=0A=
    $(element).style.display =3D 'none';=0A=
    return element;=0A=
  },=0A=
=0A=
  show: function(element) {=0A=
    $(element).style.display =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  remove: function(element) {=0A=
    element =3D $(element);=0A=
    element.parentNode.removeChild(element);=0A=
    return element;=0A=
  },=0A=
=0A=
  update: function(element, html) {=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    $(element).innerHTML =3D html.stripScripts();=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  },=0A=
=0A=
  replace: function(element, html) {=0A=
    element =3D $(element);=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    if (element.outerHTML) {=0A=
      element.outerHTML =3D html.stripScripts();=0A=
    } else {=0A=
      var range =3D element.ownerDocument.createRange();=0A=
      range.selectNodeContents(element);=0A=
      element.parentNode.replaceChild(=0A=
        range.createContextualFragment(html.stripScripts()), element);=0A=
    }=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  },=0A=
=0A=
  inspect: function(element) {=0A=
    element =3D $(element);=0A=
    var result =3D '<' + element.tagName.toLowerCase();=0A=
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A=
      var property =3D pair.first(), attribute =3D pair.last();=0A=
      var value =3D (element[property] || '').toString();=0A=
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);=0A=
    });=0A=
    return result + '>';=0A=
  },=0A=
=0A=
  recursivelyCollect: function(element, property) {=0A=
    element =3D $(element);=0A=
    var elements =3D [];=0A=
    while (element =3D element[property])=0A=
      if (element.nodeType =3D=3D 1)=0A=
        elements.push(Element.extend(element));=0A=
    return elements;=0A=
  },=0A=
=0A=
  ancestors: function(element) {=0A=
    return $(element).recursivelyCollect('parentNode');=0A=
  },=0A=
=0A=
  descendants: function(element) {=0A=
    return $A($(element).getElementsByTagName('*')).each(Element.extend);=0A=
  },=0A=
=0A=
  firstDescendant: function(element) {=0A=
    element =3D $(element).firstChild;=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    return $(element);=0A=
  },=0A=
=0A=
  immediateDescendants: function(element) {=0A=
    if (!(element =3D $(element).firstChild)) return [];=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    if (element) return [element].concat($(element).nextSiblings());=0A=
    return [];=0A=
  },=0A=
=0A=
  previousSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('previousSibling');=0A=
  },=0A=
=0A=
  nextSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('nextSibling');=0A=
  },=0A=
=0A=
  siblings: function(element) {=0A=
    element =3D $(element);=0A=
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());=0A=
  },=0A=
=0A=
  match: function(element, selector) {=0A=
    if (typeof selector =3D=3D 'string')=0A=
      selector =3D new Selector(selector);=0A=
    return selector.match($(element));=0A=
  },=0A=
=0A=
  up: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return $(element.parentNode);=0A=
    var ancestors =3D element.ancestors();=0A=
    return expression ? Selector.findElement(ancestors, expression, =
index) :=0A=
      ancestors[index || 0];=0A=
  },=0A=
=0A=
  down: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return element.firstDescendant();=0A=
    var descendants =3D element.descendants();=0A=
    return expression ? Selector.findElement(descendants, expression, =
index) :=0A=
      descendants[index || 0];=0A=
  },=0A=
=0A=
  previous: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.previousElementSibling(element));=0A=
    var previousSiblings =3D element.previousSiblings();=0A=
    return expression ? Selector.findElement(previousSiblings, =
expression, index) :=0A=
      previousSiblings[index || 0];=0A=
  },=0A=
=0A=
  next: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.nextElementSibling(element));=0A=
    var nextSiblings =3D element.nextSiblings();=0A=
    return expression ? Selector.findElement(nextSiblings, expression, =
index) :=0A=
      nextSiblings[index || 0];=0A=
  },=0A=
=0A=
  getElementsBySelector: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element, args);=0A=
  },=0A=
=0A=
  getElementsByClassName: function(element, className) {=0A=
    return document.getElementsByClassName(className, element);=0A=
  },=0A=
=0A=
  readAttribute: function(element, name) {=0A=
    element =3D $(element);=0A=
    if (Prototype.Browser.IE) {=0A=
      if (!element.attributes) return null;=0A=
      var t =3D Element._attributeTranslations;=0A=
      if (t.values[name]) return t.values[name](element, name);=0A=
      if (t.names[name])  name =3D t.names[name];=0A=
      var attribute =3D element.attributes[name];=0A=
      return attribute ? attribute.nodeValue : null;=0A=
    }=0A=
    return element.getAttribute(name);=0A=
  },=0A=
=0A=
  getHeight: function(element) {=0A=
    return $(element).getDimensions().height;=0A=
  },=0A=
=0A=
  getWidth: function(element) {=0A=
    return $(element).getDimensions().width;=0A=
  },=0A=
=0A=
  classNames: function(element) {=0A=
    return new Element.ClassNames(element);=0A=
  },=0A=
=0A=
  hasClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var elementClassName =3D element.className;=0A=
    if (elementClassName.length =3D=3D 0) return false;=0A=
    if (elementClassName =3D=3D className ||=0A=
        elementClassName.match(new RegExp("(^|\\s)" + className + =
"(\\s|$)")))=0A=
      return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  addClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element).add(className);=0A=
    return element;=0A=
  },=0A=
=0A=
  removeClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element).remove(className);=0A=
    return element;=0A=
  },=0A=
=0A=
  toggleClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element)[element.hasClassName(className) ? =
'remove' : 'add'](className);=0A=
    return element;=0A=
  },=0A=
=0A=
  observe: function() {=0A=
    Event.observe.apply(Event, arguments);=0A=
    return $A(arguments).first();=0A=
  },=0A=
=0A=
  stopObserving: function() {=0A=
    Event.stopObserving.apply(Event, arguments);=0A=
    return $A(arguments).first();=0A=
  },=0A=
=0A=
  // removes whitespace-only text node children=0A=
  cleanWhitespace: function(element) {=0A=
    element =3D $(element);=0A=
    var node =3D element.firstChild;=0A=
    while (node) {=0A=
      var nextNode =3D node.nextSibling;=0A=
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A=
        element.removeChild(node);=0A=
      node =3D nextNode;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  empty: function(element) {=0A=
    return $(element).innerHTML.blank();=0A=
  },=0A=
=0A=
  descendantOf: function(element, ancestor) {=0A=
    element =3D $(element), ancestor =3D $(ancestor);=0A=
    while (element =3D element.parentNode)=0A=
      if (element =3D=3D ancestor) return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  scrollTo: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Position.cumulativeOffset(element);=0A=
    window.scrollTo(pos[0], pos[1]);=0A=
    return element;=0A=
  },=0A=
=0A=
  getStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D style =3D=3D 'float' ? 'cssFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value) {=0A=
      var css =3D document.defaultView.getComputedStyle(element, null);=0A=
      value =3D css ? css[style] : null;=0A=
    }=0A=
    if (style =3D=3D 'opacity') return value ? parseFloat(value) : 1.0;=0A=
    return value =3D=3D 'auto' ? null : value;=0A=
  },=0A=
=0A=
  getOpacity: function(element) {=0A=
    return $(element).getStyle('opacity');=0A=
  },=0A=
=0A=
  setStyle: function(element, styles, camelized) {=0A=
    element =3D $(element);=0A=
    var elementStyle =3D element.style;=0A=
=0A=
    for (var property in styles)=0A=
      if (property =3D=3D 'opacity') element.setOpacity(styles[property])=0A=
      else=0A=
        elementStyle[(property =3D=3D 'float' || property =3D=3D =
'cssFloat') ?=0A=
          (elementStyle.styleFloat =3D=3D=3D undefined ? 'cssFloat' : =
'styleFloat') :=0A=
          (camelized ? property : property.camelize())] =3D =
styles[property];=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  setOpacity: function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  },=0A=
=0A=
  getDimensions: function(element) {=0A=
    element =3D $(element);=0A=
    var display =3D $(element).getStyle('display');=0A=
    if (display !=3D 'none' && display !=3D null) // Safari bug=0A=
      return {width: element.offsetWidth, height: element.offsetHeight};=0A=
=0A=
    // All *Width and *Height properties give 0 on elements with display =
none,=0A=
    // so enable the element temporarily=0A=
    var els =3D element.style;=0A=
    var originalVisibility =3D els.visibility;=0A=
    var originalPosition =3D els.position;=0A=
    var originalDisplay =3D els.display;=0A=
    els.visibility =3D 'hidden';=0A=
    els.position =3D 'absolute';=0A=
    els.display =3D 'block';=0A=
    var originalWidth =3D element.clientWidth;=0A=
    var originalHeight =3D element.clientHeight;=0A=
    els.display =3D originalDisplay;=0A=
    els.position =3D originalPosition;=0A=
    els.visibility =3D originalVisibility;=0A=
    return {width: originalWidth, height: originalHeight};=0A=
  },=0A=
=0A=
  makePositioned: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Element.getStyle(element, 'position');=0A=
    if (pos =3D=3D 'static' || !pos) {=0A=
      element._madePositioned =3D true;=0A=
      element.style.position =3D 'relative';=0A=
      // Opera returns the offset relative to the positioning context, =
when an=0A=
      // element is position relative but top and left have not been =
defined=0A=
      if (window.opera) {=0A=
        element.style.top =3D 0;=0A=
        element.style.left =3D 0;=0A=
      }=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  undoPositioned: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._madePositioned) {=0A=
      element._madePositioned =3D undefined;=0A=
      element.style.position =3D=0A=
        element.style.top =3D=0A=
        element.style.left =3D=0A=
        element.style.bottom =3D=0A=
        element.style.right =3D '';=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  makeClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._overflow) return element;=0A=
    element._overflow =3D element.style.overflow || 'auto';=0A=
    if ((Element.getStyle(element, 'overflow') || 'visible') !=3D =
'hidden')=0A=
      element.style.overflow =3D 'hidden';=0A=
    return element;=0A=
  },=0A=
=0A=
  undoClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element._overflow) return element;=0A=
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;=0A=
    element._overflow =3D null;=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.Methods, {=0A=
  childOf: Element.Methods.descendantOf,=0A=
  childElements: Element.Methods.immediateDescendants=0A=
});=0A=
=0A=
if (Prototype.Browser.Opera) {=0A=
  Element.Methods._getStyle =3D Element.Methods.getStyle;=0A=
  Element.Methods.getStyle =3D function(element, style) {=0A=
    switch(style) {=0A=
      case 'left':=0A=
      case 'top':=0A=
      case 'right':=0A=
      case 'bottom':=0A=
        if (Element._getStyle(element, 'position') =3D=3D 'static') =
return null;=0A=
      default: return Element._getStyle(element, style);=0A=
    }=0A=
  };=0A=
}=0A=
else if (Prototype.Browser.IE) {=0A=
  Element.Methods.getStyle =3D function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D (style =3D=3D 'float' || style =3D=3D 'cssFloat') ? =
'styleFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value && element.currentStyle) value =3D =
element.currentStyle[style];=0A=
=0A=
    if (style =3D=3D 'opacity') {=0A=
      if (value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))=0A=
        if (value[1]) return parseFloat(value[1]) / 100;=0A=
      return 1.0;=0A=
    }=0A=
=0A=
    if (value =3D=3D 'auto') {=0A=
      if ((style =3D=3D 'width' || style =3D=3D 'height') && =
(element.getStyle('display') !=3D 'none'))=0A=
        return element['offset'+style.capitalize()] + 'px';=0A=
      return null;=0A=
    }=0A=
    return value;=0A=
  };=0A=
=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    var filter =3D element.getStyle('filter'), style =3D element.style;=0A=
    if (value =3D=3D 1 || value =3D=3D=3D '') {=0A=
      style.filter =3D filter.replace(/alpha\([^\)]*\)/gi,'');=0A=
      return element;=0A=
    } else if (value < 0.00001) value =3D 0;=0A=
    style.filter =3D filter.replace(/alpha\([^\)]*\)/gi, '') +=0A=
      'alpha(opacity=3D' + (value * 100) + ')';=0A=
    return element;=0A=
  };=0A=
=0A=
  // IE is missing .innerHTML support for TABLE-related elements=0A=
  Element.Methods.update =3D function(element, html) {=0A=
    element =3D $(element);=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    var tagName =3D element.tagName.toUpperCase();=0A=
    if (['THEAD','TBODY','TR','TD'].include(tagName)) {=0A=
      var div =3D document.createElement('div');=0A=
      switch (tagName) {=0A=
        case 'THEAD':=0A=
        case 'TBODY':=0A=
          div.innerHTML =3D '<table><tbody>' +  html.stripScripts() + =
'</tbody></table>';=0A=
          depth =3D 2;=0A=
          break;=0A=
        case 'TR':=0A=
          div.innerHTML =3D '<table><tbody><tr>' +  html.stripScripts() =
+ '</tr></tbody></table>';=0A=
          depth =3D 3;=0A=
          break;=0A=
        case 'TD':=0A=
          div.innerHTML =3D '<table><tbody><tr><td>' +  =
html.stripScripts() + '</td></tr></tbody></table>';=0A=
          depth =3D 4;=0A=
      }=0A=
      $A(element.childNodes).each(function(node) { =
element.removeChild(node) });=0A=
      depth.times(function() { div =3D div.firstChild });=0A=
      $A(div.childNodes).each(function(node) { element.appendChild(node) =
});=0A=
    } else {=0A=
      element.innerHTML =3D html.stripScripts();=0A=
    }=0A=
    setTimeout(function() { html.evalScripts() }, 10);=0A=
    return element;=0A=
  }=0A=
}=0A=
else if (Prototype.Browser.Gecko) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1) ? 0.999999 :=0A=
      (value =3D=3D=3D '') ? '' : (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
Element._attributeTranslations =3D {=0A=
  names: {=0A=
    colspan:   "colSpan",=0A=
    rowspan:   "rowSpan",=0A=
    valign:    "vAlign",=0A=
    datetime:  "dateTime",=0A=
    accesskey: "accessKey",=0A=
    tabindex:  "tabIndex",=0A=
    enctype:   "encType",=0A=
    maxlength: "maxLength",=0A=
    readonly:  "readOnly",=0A=
    longdesc:  "longDesc"=0A=
  },=0A=
  values: {=0A=
    _getAttr: function(element, attribute) {=0A=
      return element.getAttribute(attribute, 2);=0A=
    },=0A=
    _flag: function(element, attribute) {=0A=
      return $(element).hasAttribute(attribute) ? attribute : null;=0A=
    },=0A=
    style: function(element) {=0A=
      return element.style.cssText.toLowerCase();=0A=
    },=0A=
    title: function(element) {=0A=
      var node =3D element.getAttributeNode('title');=0A=
      return node.specified ? node.nodeValue : null;=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
(function() {=0A=
  Object.extend(this, {=0A=
    href: this._getAttr,=0A=
    src:  this._getAttr,=0A=
    type: this._getAttr,=0A=
    disabled: this._flag,=0A=
    checked:  this._flag,=0A=
    readonly: this._flag,=0A=
    multiple: this._flag=0A=
  });=0A=
}).call(Element._attributeTranslations.values);=0A=
=0A=
Element.Methods.Simulated =3D {=0A=
  hasAttribute: function(element, attribute) {=0A=
    var t =3D Element._attributeTranslations, node;=0A=
    attribute =3D t.names[attribute] || attribute;=0A=
    node =3D $(element).getAttributeNode(attribute);=0A=
    return node && node.specified;=0A=
  }=0A=
};=0A=
=0A=
Element.Methods.ByTag =3D {};=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
if (!Prototype.BrowserFeatures.ElementExtensions &&=0A=
 document.createElement('div').__proto__) {=0A=
  window.HTMLElement =3D {};=0A=
  window.HTMLElement.prototype =3D =
document.createElement('div').__proto__;=0A=
  Prototype.BrowserFeatures.ElementExtensions =3D true;=0A=
}=0A=
=0A=
Element.hasAttribute =3D function(element, attribute) {=0A=
  if (element.hasAttribute) return element.hasAttribute(attribute);=0A=
  return Element.Methods.Simulated.hasAttribute(element, attribute);=0A=
};=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
  var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;=0A=
=0A=
  if (!methods) {=0A=
    Object.extend(Form, Form.Methods);=0A=
    Object.extend(Form.Element, Form.Element.Methods);=0A=
    Object.extend(Element.Methods.ByTag, {=0A=
      "FORM":     Object.clone(Form.Methods),=0A=
      "INPUT":    Object.clone(Form.Element.Methods),=0A=
      "SELECT":   Object.clone(Form.Element.Methods),=0A=
      "TEXTAREA": Object.clone(Form.Element.Methods)=0A=
    });=0A=
  }=0A=
=0A=
  if (arguments.length =3D=3D 2) {=0A=
    var tagName =3D methods;=0A=
    methods =3D arguments[1];=0A=
  }=0A=
=0A=
  if (!tagName) Object.extend(Element.Methods, methods || {});=0A=
  else {=0A=
    if (tagName.constructor =3D=3D Array) tagName.each(extend);=0A=
    else extend(tagName);=0A=
  }=0A=
=0A=
  function extend(tagName) {=0A=
    tagName =3D tagName.toUpperCase();=0A=
    if (!Element.Methods.ByTag[tagName])=0A=
      Element.Methods.ByTag[tagName] =3D {};=0A=
    Object.extend(Element.Methods.ByTag[tagName], methods);=0A=
  }=0A=
=0A=
  function copy(methods, destination, onlyIfAbsent) {=0A=
    onlyIfAbsent =3D onlyIfAbsent || false;=0A=
    var cache =3D Element.extend.cache;=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (!onlyIfAbsent || !(property in destination))=0A=
        destination[property] =3D cache.findOrStore(value);=0A=
    }=0A=
  }=0A=
=0A=
  function findDOMClass(tagName) {=0A=
    var klass;=0A=
    var trans =3D {=0A=
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",=0A=
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": =
"DList",=0A=
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": =
"Heading",=0A=
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",=0A=
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", =
"CAPTION":=0A=
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":=0A=
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", =
"TR":=0A=
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":=0A=
      "FrameSet", "IFRAME": "IFrame"=0A=
    };=0A=
    if (trans[tagName]) klass =3D 'HTML' + trans[tagName] + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName.capitalize() + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
=0A=
    window[klass] =3D {};=0A=
    window[klass].prototype =3D =
document.createElement(tagName).__proto__;=0A=
    return window[klass];=0A=
  }=0A=
=0A=
  if (F.ElementExtensions) {=0A=
    copy(Element.Methods, HTMLElement.prototype);=0A=
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A=
  }=0A=
=0A=
  if (F.SpecificElementExtensions) {=0A=
    for (var tag in Element.Methods.ByTag) {=0A=
      var klass =3D findDOMClass(tag);=0A=
      if (typeof klass =3D=3D "undefined") continue;=0A=
      copy(T[tag], klass.prototype);=0A=
    }=0A=
  }=0A=
=0A=
  Object.extend(Element, Element.Methods);=0A=
  delete Element.ByTag;=0A=
};=0A=
=0A=
var Toggle =3D { display: Element.toggle };=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.Insertion =3D function(adjacency) {=0A=
  this.adjacency =3D adjacency;=0A=
}=0A=
=0A=
Abstract.Insertion.prototype =3D {=0A=
  initialize: function(element, content) {=0A=
    this.element =3D $(element);=0A=
    this.content =3D content.stripScripts();=0A=
=0A=
    if (this.adjacency && this.element.insertAdjacentHTML) {=0A=
      try {=0A=
        this.element.insertAdjacentHTML(this.adjacency, this.content);=0A=
      } catch (e) {=0A=
        var tagName =3D this.element.tagName.toUpperCase();=0A=
        if (['TBODY', 'TR'].include(tagName)) {=0A=
          this.insertContent(this.contentFromAnonymousTable());=0A=
        } else {=0A=
          throw e;=0A=
        }=0A=
      }=0A=
    } else {=0A=
      this.range =3D this.element.ownerDocument.createRange();=0A=
      if (this.initializeRange) this.initializeRange();=0A=
      =
this.insertContent([this.range.createContextualFragment(this.content)]);=0A=
    }=0A=
=0A=
    setTimeout(function() {content.evalScripts()}, 10);=0A=
  },=0A=
=0A=
  contentFromAnonymousTable: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D '<table><tbody>' + this.content + =
'</tbody></table>';=0A=
    return $A(div.childNodes[0].childNodes[0].childNodes);=0A=
  }=0A=
}=0A=
=0A=
var Insertion =3D new Object();=0A=
=0A=
Insertion.Before =3D Class.create();=0A=
Insertion.Before.prototype =3D Object.extend(new =
Abstract.Insertion('beforeBegin'), {=0A=
  initializeRange: function() {=0A=
    this.range.setStartBefore(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.parentNode.insertBefore(fragment, this.element);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.Top =3D Class.create();=0A=
Insertion.Top.prototype =3D Object.extend(new =
Abstract.Insertion('afterBegin'), {=0A=
  initializeRange: function() {=0A=
    this.range.selectNodeContents(this.element);=0A=
    this.range.collapse(true);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.reverse(false).each((function(fragment) {=0A=
      this.element.insertBefore(fragment, this.element.firstChild);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.Bottom =3D Class.create();=0A=
Insertion.Bottom.prototype =3D Object.extend(new =
Abstract.Insertion('beforeEnd'), {=0A=
  initializeRange: function() {=0A=
    this.range.selectNodeContents(this.element);=0A=
    this.range.collapse(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.appendChild(fragment);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.After =3D Class.create();=0A=
Insertion.After.prototype =3D Object.extend(new =
Abstract.Insertion('afterEnd'), {=0A=
  initializeRange: function() {=0A=
    this.range.setStartAfter(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.parentNode.insertBefore(fragment,=0A=
        this.element.nextSibling);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    this.element.className.split(/\s+/).select(function(name) {=0A=
      return name.length > 0;=0A=
    })._each(iterator);=0A=
  },=0A=
=0A=
  set: function(className) {=0A=
    this.element.className =3D className;=0A=
  },=0A=
=0A=
  add: function(classNameToAdd) {=0A=
    if (this.include(classNameToAdd)) return;=0A=
    this.set($A(this).concat(classNameToAdd).join(' '));=0A=
  },=0A=
=0A=
  remove: function(classNameToRemove) {=0A=
    if (!this.include(classNameToRemove)) return;=0A=
    this.set($A(this).without(classNameToRemove).join(' '));=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return $A(this).join(' ');=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
/* Portions of the Selector class are derived from Jack Slocum=E2=80=99s =
DomQuery,=0A=
 * part of YUI-Ext version 0.40, distributed under the terms of an =
MIT-style=0A=
 * license.  Please see http://www.yui-ext.com/ for more information. */=0A=
=0A=
var Selector =3D Class.create();=0A=
=0A=
Selector.prototype =3D {=0A=
  initialize: function(expression) {=0A=
    this.expression =3D expression.strip();=0A=
    this.compileMatcher();=0A=
  },=0A=
=0A=
  compileMatcher: function() {=0A=
    // Selectors with namespaced attributes can't use the XPath version=0A=
    if (Prototype.BrowserFeatures.XPath && =
!(/\[[\w-]*?:/).test(this.expression))=0A=
      return this.compileXPathMatcher();=0A=
=0A=
    var e =3D this.expression, ps =3D Selector.patterns, h =3D =
Selector.handlers,=0A=
        c =3D Selector.criteria, le, p, m;=0A=
=0A=
    if (Selector._cache[e]) {=0A=
      this.matcher =3D Selector._cache[e]; return;=0A=
    }=0A=
    this.matcher =3D ["this.matcher =3D function(root) {",=0A=
                    "var r =3D root, h =3D Selector.handlers, c =3D =
false, n;"];=0A=
=0A=
    while (e && le !=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        p =3D ps[i];=0A=
        if (m =3D e.match(p)) {=0A=
          this.matcher.push(typeof c[i] =3D=3D 'function' ? c[i](m) :=0A=
    	      new Template(c[i]).evaluate(m));=0A=
          e =3D e.replace(m[0], '');=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    this.matcher.push("return h.unique(n);\n}");=0A=
    eval(this.matcher.join('\n'));=0A=
    Selector._cache[this.expression] =3D this.matcher;=0A=
  },=0A=
=0A=
  compileXPathMatcher: function() {=0A=
    var e =3D this.expression, ps =3D Selector.patterns,=0A=
        x =3D Selector.xpath, le,  m;=0A=
=0A=
    if (Selector._cache[e]) {=0A=
      this.xpath =3D Selector._cache[e]; return;=0A=
    }=0A=
=0A=
    this.matcher =3D ['.//*'];=0A=
    while (e && le !=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        if (m =3D e.match(ps[i])) {=0A=
          this.matcher.push(typeof x[i] =3D=3D 'function' ? x[i](m) :=0A=
            new Template(x[i]).evaluate(m));=0A=
          e =3D e.replace(m[0], '');=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    this.xpath =3D this.matcher.join('');=0A=
    Selector._cache[this.expression] =3D this.xpath;=0A=
  },=0A=
=0A=
  findElements: function(root) {=0A=
    root =3D root || document;=0A=
    if (this.xpath) return document._getElementsByXPath(this.xpath, =
root);=0A=
    return this.matcher(root);=0A=
  },=0A=
=0A=
  match: function(element) {=0A=
    return this.findElements(document).include(element);=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return this.expression;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return "#<Selector:" + this.expression.inspect() + ">";=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Selector, {=0A=
  _cache: {},=0A=
=0A=
  xpath: {=0A=
    descendant:   "//*",=0A=
    child:        "/*",=0A=
    adjacent:     "/following-sibling::*[1]",=0A=
    laterSibling: '/following-sibling::*',=0A=
    tagName:      function(m) {=0A=
      if (m[1] =3D=3D '*') return '';=0A=
      return "[local-name()=3D'" + m[1].toLowerCase() +=0A=
             "' or local-name()=3D'" + m[1].toUpperCase() + "']";=0A=
    },=0A=
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",=0A=
    id:           "[@id=3D'#{1}']",=0A=
    attrPresence: "[@#{1}]",=0A=
    attr: function(m) {=0A=
      m[3] =3D m[5] || m[6];=0A=
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);=0A=
    },=0A=
    pseudo: function(m) {=0A=
      var h =3D Selector.xpath.pseudos[m[1]];=0A=
      if (!h) return '';=0A=
      if (typeof h =3D=3D=3D 'function') return h(m);=0A=
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);=0A=
    },=0A=
    operators: {=0A=
      '=3D':  "[@#{1}=3D'#{3}']",=0A=
      '!=3D': "[@#{1}!=3D'#{3}']",=0A=
      '^=3D': "[starts-with(@#{1}, '#{3}')]",=0A=
      '$=3D': "[substring(@#{1}, (string-length(@#{1}) - =
string-length('#{3}') + 1))=3D'#{3}']",=0A=
      '*=3D': "[contains(@#{1}, '#{3}')]",=0A=
      '~=3D': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",=0A=
      '|=3D': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"=0A=
    },=0A=
    pseudos: {=0A=
      'first-child': '[not(preceding-sibling::*)]',=0A=
      'last-child':  '[not(following-sibling::*)]',=0A=
      'only-child':  '[not(preceding-sibling::* or =
following-sibling::*)]',=0A=
      'empty':       "[count(*) =3D 0 and (count(text()) =3D 0 or =
translate(text(), ' \t\r\n', '') =3D '')]",=0A=
      'checked':     "[@checked]",=0A=
      'disabled':    "[@disabled]",=0A=
      'enabled':     "[not(@disabled)]",=0A=
      'not': function(m) {=0A=
        var e =3D m[6], p =3D Selector.patterns,=0A=
            x =3D Selector.xpath, le, m, v;=0A=
=0A=
        var exclusion =3D [];=0A=
        while (e && le !=3D e && (/\S/).test(e)) {=0A=
          le =3D e;=0A=
          for (var i in p) {=0A=
            if (m =3D e.match(p[i])) {=0A=
              v =3D typeof x[i] =3D=3D 'function' ? x[i](m) : new =
Template(x[i]).evaluate(m);=0A=
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");=0A=
              e =3D e.replace(m[0], '');=0A=
              break;=0A=
            }=0A=
          }=0A=
        }=0A=
        return "[not(" + exclusion.join(" and ") + ")]";=0A=
      },=0A=
      'nth-child':      function(m) {=0A=
        return =
Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);=0A=
      },=0A=
      'nth-last-child': function(m) {=0A=
        return =
Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);=0A=
      },=0A=
      'nth-of-type':    function(m) {=0A=
        return Selector.xpath.pseudos.nth("position() ", m);=0A=
      },=0A=
      'nth-last-of-type': function(m) {=0A=
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", =
m);=0A=
      },=0A=
      'first-of-type':  function(m) {=0A=
        m[6] =3D "1"; return Selector.xpath.pseudos['nth-of-type'](m);=0A=
      },=0A=
      'last-of-type':   function(m) {=0A=
        m[6] =3D "1"; return =
Selector.xpath.pseudos['nth-last-of-type'](m);=0A=
      },=0A=
      'only-of-type':   function(m) {=0A=
        var p =3D Selector.xpath.pseudos; return p['first-of-type'](m) + =
p['last-of-type'](m);=0A=
      },=0A=
      nth: function(fragment, m) {=0A=
        var mm, formula =3D m[6], predicate;=0A=
        if (formula =3D=3D 'even') formula =3D '2n+0';=0A=
        if (formula =3D=3D 'odd')  formula =3D '2n+1';=0A=
        if (mm =3D formula.match(/^(\d+)$/)) // digit only=0A=
          return '[' + fragment + "=3D " + mm[1] + ']';=0A=
        if (mm =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b=0A=
          if (mm[1] =3D=3D "-") mm[1] =3D -1;=0A=
          var a =3D mm[1] ? Number(mm[1]) : 1;=0A=
          var b =3D mm[2] ? Number(mm[2]) : 0;=0A=
          predicate =3D "[((#{fragment} - #{b}) mod #{a} =3D 0) and " +=0A=
          "((#{fragment} - #{b}) div #{a} >=3D 0)]";=0A=
          return new Template(predicate).evaluate({=0A=
            fragment: fragment, a: a, b: b });=0A=
        }=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  criteria: {=0A=
    tagName:      'n =3D h.tagName(n, r, "#{1}", c);   c =3D false;',=0A=
    className:    'n =3D h.className(n, r, "#{1}", c); c =3D false;',=0A=
    id:           'n =3D h.id(n, r, "#{1}", c);        c =3D false;',=0A=
    attrPresence: 'n =3D h.attrPresence(n, r, "#{1}"); c =3D false;',=0A=
    attr: function(m) {=0A=
      m[3] =3D (m[5] || m[6]);=0A=
      return new Template('n =3D h.attr(n, r, "#{1}", "#{3}", "#{2}"); c =
=3D false;').evaluate(m);=0A=
    },=0A=
    pseudo:       function(m) {=0A=
      if (m[6]) m[6] =3D m[6].replace(/"/g, '\\"');=0A=
      return new Template('n =3D h.pseudo(n, "#{1}", "#{6}", r, c); c =
=3D false;').evaluate(m);=0A=
    },=0A=
    descendant:   'c =3D "descendant";',=0A=
    child:        'c =3D "child";',=0A=
    adjacent:     'c =3D "adjacent";',=0A=
    laterSibling: 'c =3D "laterSibling";'=0A=
  },=0A=
=0A=
  patterns: {=0A=
    // combinators must be listed first=0A=
    // (and descendant needs to be last combinator)=0A=
    laterSibling: /^\s*~\s*/,=0A=
    child:        /^\s*>\s*/,=0A=
    adjacent:     /^\s*\+\s*/,=0A=
    descendant:   /^\s/,=0A=
=0A=
    // selectors follow=0A=
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,=0A=
    id:           /^#([\w\-\*]+)(\b|$)/,=0A=
    className:    /^\.([\w\-\*]+)(\b|$)/,=0A=
    pseudo:       =
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis=
)abled|not)(\((.*?)\))?(\b|$|\s|(?=3D:))/,=0A=
    attrPresence: /^\[([\w]+)\]/,=0A=
    attr:         =
/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\]]*?)\4|([^'"][^=
\]]*?)))?\]/=0A=
  },=0A=
=0A=
  handlers: {=0A=
    // UTILITY FUNCTIONS=0A=
    // joins two collections=0A=
    concat: function(a, b) {=0A=
      for (var i =3D 0, node; node =3D b[i]; i++)=0A=
        a.push(node);=0A=
      return a;=0A=
    },=0A=
=0A=
    // marks an array of nodes for counting=0A=
    mark: function(nodes) {=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node._counted =3D true;=0A=
      return nodes;=0A=
    },=0A=
=0A=
    unmark: function(nodes) {=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node._counted =3D undefined;=0A=
      return nodes;=0A=
    },=0A=
=0A=
    // mark each child node with its position (for nth calls)=0A=
    // "ofType" flag indicates whether we're indexing for nth-of-type=0A=
    // rather than nth-child=0A=
    index: function(parentNode, reverse, ofType) {=0A=
      parentNode._counted =3D true;=0A=
      if (reverse) {=0A=
        for (var nodes =3D parentNode.childNodes, i =3D nodes.length - =
1, j =3D 1; i >=3D 0; i--) {=0A=
          node =3D nodes[i];=0A=
          if (node.nodeType =3D=3D 1 && (!ofType || node._counted)) =
node.nodeIndex =3D j++;=0A=
        }=0A=
      } else {=0A=
        for (var i =3D 0, j =3D 1, nodes =3D parentNode.childNodes; node =
=3D nodes[i]; i++)=0A=
          if (node.nodeType =3D=3D 1 && (!ofType || node._counted)) =
node.nodeIndex =3D j++;=0A=
      }=0A=
    },=0A=
=0A=
    // filters out duplicates and extends all nodes=0A=
    unique: function(nodes) {=0A=
      if (nodes.length =3D=3D 0) return nodes;=0A=
      var results =3D [], n;=0A=
      for (var i =3D 0, l =3D nodes.length; i < l; i++)=0A=
        if (!(n =3D nodes[i])._counted) {=0A=
          n._counted =3D true;=0A=
          results.push(Element.extend(n));=0A=
        }=0A=
      return Selector.handlers.unmark(results);=0A=
    },=0A=
=0A=
    // COMBINATOR FUNCTIONS=0A=
    descendant: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        h.concat(results, node.getElementsByTagName('*'));=0A=
      return results;=0A=
    },=0A=
=0A=
    child: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        for (var j =3D 0, children =3D [], child; child =3D =
node.childNodes[j]; j++)=0A=
          if (child.nodeType =3D=3D 1 && child.tagName !=3D '!') =
results.push(child);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    adjacent: function(nodes) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        var next =3D this.nextElementSibling(node);=0A=
        if (next) results.push(next);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    laterSibling: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        h.concat(results, Element.nextSiblings(node));=0A=
      return results;=0A=
    },=0A=
=0A=
    nextElementSibling: function(node) {=0A=
      while (node =3D node.nextSibling)=0A=
	      if (node.nodeType =3D=3D 1) return node;=0A=
      return null;=0A=
    },=0A=
=0A=
    previousElementSibling: function(node) {=0A=
      while (node =3D node.previousSibling)=0A=
        if (node.nodeType =3D=3D 1) return node;=0A=
      return null;=0A=
    },=0A=
=0A=
    // TOKEN FUNCTIONS=0A=
    tagName: function(nodes, root, tagName, combinator) {=0A=
      tagName =3D tagName.toUpperCase();=0A=
      var results =3D [], h =3D Selector.handlers;=0A=
      if (nodes) {=0A=
        if (combinator) {=0A=
          // fastlane for ordinary descendant combinators=0A=
          if (combinator =3D=3D "descendant") {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              h.concat(results, node.getElementsByTagName(tagName));=0A=
            return results;=0A=
          } else nodes =3D this[combinator](nodes);=0A=
          if (tagName =3D=3D "*") return nodes;=0A=
        }=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.tagName.toUpperCase() =3D=3D tagName) =
results.push(node);=0A=
        return results;=0A=
      } else return root.getElementsByTagName(tagName);=0A=
    },=0A=
=0A=
    id: function(nodes, root, id, combinator) {=0A=
      var targetNode =3D $(id), h =3D Selector.handlers;=0A=
      if (!nodes && root =3D=3D document) return targetNode ? =
[targetNode] : [];=0A=
      if (nodes) {=0A=
        if (combinator) {=0A=
          if (combinator =3D=3D 'child') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (targetNode.parentNode =3D=3D node) return [targetNode];=0A=
          } else if (combinator =3D=3D 'descendant') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (Element.descendantOf(targetNode, node)) return =
[targetNode];=0A=
          } else if (combinator =3D=3D 'adjacent') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (Selector.handlers.previousElementSibling(targetNode) =
=3D=3D node)=0A=
                return [targetNode];=0A=
          } else nodes =3D h[combinator](nodes);=0A=
        }=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node =3D=3D targetNode) return [targetNode];=0A=
        return [];=0A=
      }=0A=
      return (targetNode && Element.descendantOf(targetNode, root)) ? =
[targetNode] : [];=0A=
    },=0A=
=0A=
    className: function(nodes, root, className, combinator) {=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      return Selector.handlers.byClassName(nodes, root, className);=0A=
    },=0A=
=0A=
    byClassName: function(nodes, root, className) {=0A=
      if (!nodes) nodes =3D Selector.handlers.descendant([root]);=0A=
      var needle =3D ' ' + className + ' ';=0A=
      for (var i =3D 0, results =3D [], node, nodeClassName; node =3D =
nodes[i]; i++) {=0A=
        nodeClassName =3D node.className;=0A=
        if (nodeClassName.length =3D=3D 0) continue;=0A=
        if (nodeClassName =3D=3D className || (' ' + nodeClassName + ' =
').include(needle))=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    attrPresence: function(nodes, root, attr) {=0A=
      var results =3D [];=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        if (Element.hasAttribute(node, attr)) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    attr: function(nodes, root, attr, value, operator) {=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      var handler =3D Selector.operators[operator], results =3D [];=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A=
        var nodeValue =3D Element.readAttribute(node, attr);=0A=
        if (nodeValue =3D=3D=3D null) continue;=0A=
        if (handler(nodeValue, value)) results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    pseudo: function(nodes, name, value, root, combinator) {=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      return Selector.pseudos[name](nodes, value, root);=0A=
    }=0A=
  },=0A=
=0A=
  pseudos: {=0A=
    'first-child': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        if (Selector.handlers.previousElementSibling(node)) continue;=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
    'last-child': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        if (Selector.handlers.nextElementSibling(node)) continue;=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
    'only-child': function(nodes, value, root) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!h.previousElementSibling(node) && =
!h.nextElementSibling(node))=0A=
          results.push(node);=0A=
      return results;=0A=
    },=0A=
    'nth-child':        function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root);=0A=
    },=0A=
    'nth-last-child':   function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, true);=0A=
    },=0A=
    'nth-of-type':      function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, false, true);=0A=
    },=0A=
    'nth-last-of-type': function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, true, true);=0A=
    },=0A=
    'first-of-type':    function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, "1", root, false, true);=0A=
    },=0A=
    'last-of-type':     function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, "1", root, true, true);=0A=
    },=0A=
    'only-of-type':     function(nodes, formula, root) {=0A=
      var p =3D Selector.pseudos;=0A=
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), =
formula, root);=0A=
    },=0A=
=0A=
    // handles the an+b logic=0A=
    getIndices: function(a, b, total) {=0A=
      if (a =3D=3D 0) return b > 0 ? [b] : [];=0A=
      return $R(1, total).inject([], function(memo, i) {=0A=
        if (0 =3D=3D (i - b) % a && (i - b) / a >=3D 0) memo.push(i);=0A=
        return memo;=0A=
      });=0A=
    },=0A=
=0A=
    // handles nth(-last)-child, nth(-last)-of-type, and =
(first|last)-of-type=0A=
    nth: function(nodes, formula, root, reverse, ofType) {=0A=
      if (nodes.length =3D=3D 0) return [];=0A=
      if (formula =3D=3D 'even') formula =3D '2n+0';=0A=
      if (formula =3D=3D 'odd')  formula =3D '2n+1';=0A=
      var h =3D Selector.handlers, results =3D [], indexed =3D [], m;=0A=
      h.mark(nodes);=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A=
        if (!node.parentNode._counted) {=0A=
          h.index(node.parentNode, reverse, ofType);=0A=
          indexed.push(node.parentNode);=0A=
        }=0A=
      }=0A=
      if (formula.match(/^\d+$/)) { // just a number=0A=
        formula =3D Number(formula);=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.nodeIndex =3D=3D formula) results.push(node);=0A=
      } else if (m =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // =
an+b=0A=
        if (m[1] =3D=3D "-") m[1] =3D -1;=0A=
        var a =3D m[1] ? Number(m[1]) : 1;=0A=
        var b =3D m[2] ? Number(m[2]) : 0;=0A=
        var indices =3D Selector.pseudos.getIndices(a, b, nodes.length);=0A=
        for (var i =3D 0, node, l =3D indices.length; node =3D nodes[i]; =
i++) {=0A=
          for (var j =3D 0; j < l; j++)=0A=
            if (node.nodeIndex =3D=3D indices[j]) results.push(node);=0A=
        }=0A=
      }=0A=
      h.unmark(nodes);=0A=
      h.unmark(indexed);=0A=
      return results;=0A=
    },=0A=
=0A=
    'empty': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        // IE treats comments as element nodes=0A=
        if (node.tagName =3D=3D '!' || (node.firstChild && =
!node.innerHTML.match(/^\s*$/))) continue;=0A=
        results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    'not': function(nodes, selector, root) {=0A=
      var h =3D Selector.handlers, selectorType, m;=0A=
      var exclusions =3D new Selector(selector).findElements(root);=0A=
      h.mark(exclusions);=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!node._counted) results.push(node);=0A=
      h.unmark(exclusions);=0A=
      return results;=0A=
    },=0A=
=0A=
    'enabled': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!node.disabled) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    'disabled': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (node.disabled) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    'checked': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (node.checked) results.push(node);=0A=
      return results;=0A=
    }=0A=
  },=0A=
=0A=
  operators: {=0A=
    '=3D':  function(nv, v) { return nv =3D=3D v; },=0A=
    '!=3D': function(nv, v) { return nv !=3D v; },=0A=
    '^=3D': function(nv, v) { return nv.startsWith(v); },=0A=
    '$=3D': function(nv, v) { return nv.endsWith(v); },=0A=
    '*=3D': function(nv, v) { return nv.include(v); },=0A=
    '~=3D': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + =
' '); },=0A=
    '|=3D': function(nv, v) { return ('-' + nv.toUpperCase() + =
'-').include('-' + v.toUpperCase() + '-'); }=0A=
  },=0A=
=0A=
  matchElements: function(elements, expression) {=0A=
    var matches =3D new Selector(expression).findElements(), h =3D =
Selector.handlers;=0A=
    h.mark(matches);=0A=
    for (var i =3D 0, results =3D [], element; element =3D elements[i]; =
i++)=0A=
      if (element._counted) results.push(element);=0A=
    h.unmark(matches);=0A=
    return results;=0A=
  },=0A=
=0A=
  findElement: function(elements, expression, index) {=0A=
    if (typeof expression =3D=3D 'number') {=0A=
      index =3D expression; expression =3D false;=0A=
    }=0A=
    return Selector.matchElements(elements, expression || '*')[index || =
0];=0A=
  },=0A=
=0A=
  findChildElements: function(element, expressions) {=0A=
    var exprs =3D expressions.join(','), expressions =3D [];=0A=
    exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {=0A=
      expressions.push(m[1].strip());=0A=
    });=0A=
    var results =3D [], h =3D Selector.handlers;=0A=
    for (var i =3D 0, l =3D expressions.length, selector; i < l; i++) {=0A=
      selector =3D new Selector(expressions[i].strip());=0A=
      h.concat(results, selector.findElements(element));=0A=
    }=0A=
    return (l > 1) ? h.unique(results) : results;=0A=
  }=0A=
});=0A=
=0A=
function $$() {=0A=
  return Selector.findChildElements(document, $A(arguments));=0A=
}=0A=
var Form =3D {=0A=
  reset: function(form) {=0A=
    $(form).reset();=0A=
    return form;=0A=
  },=0A=
=0A=
  serializeElements: function(elements, getHash) {=0A=
    var data =3D elements.inject({}, function(result, element) {=0A=
      if (!element.disabled && element.name) {=0A=
        var key =3D element.name, value =3D $(element).getValue();=0A=
        if (value !=3D null) {=0A=
         	if (key in result) {=0A=
            if (result[key].constructor !=3D Array) result[key] =3D =
[result[key]];=0A=
            result[key].push(value);=0A=
          }=0A=
          else result[key] =3D value;=0A=
        }=0A=
      }=0A=
      return result;=0A=
    });=0A=
=0A=
    return getHash ? data : Hash.toQueryString(data);=0A=
  }=0A=
};=0A=
=0A=
Form.Methods =3D {=0A=
  serialize: function(form, getHash) {=0A=
    return Form.serializeElements(Form.getElements(form), getHash);=0A=
  },=0A=
=0A=
  getElements: function(form) {=0A=
    return $A($(form).getElementsByTagName('*')).inject([],=0A=
      function(elements, child) {=0A=
        if (Form.Element.Serializers[child.tagName.toLowerCase()])=0A=
          elements.push(Element.extend(child));=0A=
        return elements;=0A=
      }=0A=
    );=0A=
  },=0A=
=0A=
  getInputs: function(form, typeName, name) {=0A=
    form =3D $(form);=0A=
    var inputs =3D form.getElementsByTagName('input');=0A=
=0A=
    if (!typeName && !name) return $A(inputs).map(Element.extend);=0A=
=0A=
    for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i =
< length; i++) {=0A=
      var input =3D inputs[i];=0A=
      if ((typeName && input.type !=3D typeName) || (name && input.name =
!=3D name))=0A=
        continue;=0A=
      matchingInputs.push(Element.extend(input));=0A=
    }=0A=
=0A=
    return matchingInputs;=0A=
  },=0A=
=0A=
  disable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('disable');=0A=
    return form;=0A=
  },=0A=
=0A=
  enable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('enable');=0A=
    return form;=0A=
  },=0A=
=0A=
  findFirstElement: function(form) {=0A=
    return $(form).getElements().find(function(element) {=0A=
      return element.type !=3D 'hidden' && !element.disabled &&=0A=
        ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
    });=0A=
  },=0A=
=0A=
  focusFirstElement: function(form) {=0A=
    form =3D $(form);=0A=
    form.findFirstElement().activate();=0A=
    return form;=0A=
  },=0A=
=0A=
  request: function(form, options) {=0A=
    form =3D $(form), options =3D Object.clone(options || {});=0A=
=0A=
    var params =3D options.parameters;=0A=
    options.parameters =3D form.serialize(true);=0A=
=0A=
    if (params) {=0A=
      if (typeof params =3D=3D 'string') params =3D =
params.toQueryParams();=0A=
      Object.extend(options.parameters, params);=0A=
    }=0A=
=0A=
    if (form.hasAttribute('method') && !options.method)=0A=
      options.method =3D form.method;=0A=
=0A=
    return new Ajax.Request(form.readAttribute('action'), options);=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element =3D {=0A=
  focus: function(element) {=0A=
    $(element).focus();=0A=
    return element;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    $(element).select();=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Form.Element.Methods =3D {=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element.disabled && element.name) {=0A=
      var value =3D element.getValue();=0A=
      if (value !=3D undefined) {=0A=
        var pair =3D {};=0A=
        pair[element.name] =3D value;=0A=
        return Hash.toQueryString(pair);=0A=
      }=0A=
    }=0A=
    return '';=0A=
  },=0A=
=0A=
  getValue: function(element) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    return Form.Element.Serializers[method](element);=0A=
  },=0A=
=0A=
  clear: function(element) {=0A=
    $(element).value =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  present: function(element) {=0A=
    return $(element).value !=3D '';=0A=
  },=0A=
=0A=
  activate: function(element) {=0A=
    element =3D $(element);=0A=
    try {=0A=
      element.focus();=0A=
      if (element.select && (element.tagName.toLowerCase() !=3D 'input' =
||=0A=
        !['button', 'reset', 'submit'].include(element.type)))=0A=
        element.select();=0A=
    } catch (e) {}=0A=
    return element;=0A=
  },=0A=
=0A=
  disable: function(element) {=0A=
    element =3D $(element);=0A=
    element.blur();=0A=
    element.disabled =3D true;=0A=
    return element;=0A=
  },=0A=
=0A=
  enable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D false;=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Field =3D Form.Element;=0A=
var $F =3D Form.Element.Methods.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D {=0A=
  input: function(element) {=0A=
    switch (element.type.toLowerCase()) {=0A=
      case 'checkbox':=0A=
      case 'radio':=0A=
        return Form.Element.Serializers.inputSelector(element);=0A=
      default:=0A=
        return Form.Element.Serializers.textarea(element);=0A=
    }=0A=
  },=0A=
=0A=
  inputSelector: function(element) {=0A=
    return element.checked ? element.value : null;=0A=
  },=0A=
=0A=
  textarea: function(element) {=0A=
    return element.value;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    return this[element.type =3D=3D 'select-one' ?=0A=
      'selectOne' : 'selectMany'](element);=0A=
  },=0A=
=0A=
  selectOne: function(element) {=0A=
    var index =3D element.selectedIndex;=0A=
    return index >=3D 0 ? this.optionValue(element.options[index]) : =
null;=0A=
  },=0A=
=0A=
  selectMany: function(element) {=0A=
    var values, length =3D element.length;=0A=
    if (!length) return null;=0A=
=0A=
    for (var i =3D 0, values =3D []; i < length; i++) {=0A=
      var opt =3D element.options[i];=0A=
      if (opt.selected) values.push(this.optionValue(opt));=0A=
    }=0A=
    return values;=0A=
  },=0A=
=0A=
  optionValue: function(opt) {=0A=
    // extend element because hasAttribute may not be native=0A=
    return Element.extend(opt).hasAttribute('value') ? opt.value : =
opt.text;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.TimedObserver =3D function() {}=0A=
Abstract.TimedObserver.prototype =3D {=0A=
  initialize: function(element, frequency, callback) {=0A=
    this.frequency =3D frequency;=0A=
    this.element   =3D $(element);=0A=
    this.callback  =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    var changed =3D ('string' =3D=3D typeof this.lastValue && 'string' =
=3D=3D typeof value=0A=
      ? this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value));=0A=
    if (changed) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Form.Element.Observer =3D Class.create();=0A=
Form.Element.Observer.prototype =3D Object.extend(new =
Abstract.TimedObserver(), {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.Observer =3D Class.create();=0A=
Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D function() {}=0A=
Abstract.EventObserver.prototype =3D {=0A=
  initialize: function(element, callback) {=0A=
    this.element  =3D $(element);=0A=
    this.callback =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
      this.registerFormCallbacks();=0A=
    else=0A=
      this.registerCallback(this.element);=0A=
  },=0A=
=0A=
  onElementEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    if (this.lastValue !=3D value) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  },=0A=
=0A=
  registerFormCallbacks: function() {=0A=
    =
Form.getElements(this.element).each(this.registerCallback.bind(this));=0A=
  },=0A=
=0A=
  registerCallback: function(element) {=0A=
    if (element.type) {=0A=
      switch (element.type.toLowerCase()) {=0A=
        case 'checkbox':=0A=
        case 'radio':=0A=
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
        default:=0A=
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Form.Element.EventObserver =3D Class.create();=0A=
Form.Element.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create();=0A=
Form.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
if (!window.Event) {=0A=
  var Event =3D new Object();=0A=
}=0A=
=0A=
Object.extend(Event, {=0A=
  KEY_BACKSPACE: 8,=0A=
  KEY_TAB:       9,=0A=
  KEY_RETURN:   13,=0A=
  KEY_ESC:      27,=0A=
  KEY_LEFT:     37,=0A=
  KEY_UP:       38,=0A=
  KEY_RIGHT:    39,=0A=
  KEY_DOWN:     40,=0A=
  KEY_DELETE:   46,=0A=
  KEY_HOME:     36,=0A=
  KEY_END:      35,=0A=
  KEY_PAGEUP:   33,=0A=
  KEY_PAGEDOWN: 34,=0A=
=0A=
  element: function(event) {=0A=
    return $(event.target || event.srcElement);=0A=
  },=0A=
=0A=
  isLeftClick: function(event) {=0A=
    return (((event.which) && (event.which =3D=3D 1)) ||=0A=
            ((event.button) && (event.button =3D=3D 1)));=0A=
  },=0A=
=0A=
  pointerX: function(event) {=0A=
    return event.pageX || (event.clientX +=0A=
      (document.documentElement.scrollLeft || document.body.scrollLeft));=0A=
  },=0A=
=0A=
  pointerY: function(event) {=0A=
    return event.pageY || (event.clientY +=0A=
      (document.documentElement.scrollTop || document.body.scrollTop));=0A=
  },=0A=
=0A=
  stop: function(event) {=0A=
    if (event.preventDefault) {=0A=
      event.preventDefault();=0A=
      event.stopPropagation();=0A=
    } else {=0A=
      event.returnValue =3D false;=0A=
      event.cancelBubble =3D true;=0A=
    }=0A=
  },=0A=
=0A=
  // find the first node with the given tagName, starting from the=0A=
  // node the event was triggered on; traverses the DOM upwards=0A=
  findElement: function(event, tagName) {=0A=
    var element =3D Event.element(event);=0A=
    while (element.parentNode && (!element.tagName ||=0A=
        (element.tagName.toUpperCase() !=3D tagName.toUpperCase())))=0A=
      element =3D element.parentNode;=0A=
    return element;=0A=
  },=0A=
=0A=
  observers: false,=0A=
=0A=
  _observeAndCache: function(element, name, observer, useCapture) {=0A=
    if (!this.observers) this.observers =3D [];=0A=
    if (element.addEventListener) {=0A=
      this.observers.push([element, name, observer, useCapture]);=0A=
      element.addEventListener(name, observer, useCapture);=0A=
    } else if (element.attachEvent) {=0A=
      this.observers.push([element, name, observer, useCapture]);=0A=
      element.attachEvent('on' + name, observer);=0A=
    }=0A=
  },=0A=
=0A=
  unloadCache: function() {=0A=
    if (!Event.observers) return;=0A=
    for (var i =3D 0, length =3D Event.observers.length; i < length; =
i++) {=0A=
      Event.stopObserving.apply(this, Event.observers[i]);=0A=
      Event.observers[i][0] =3D null;=0A=
    }=0A=
    Event.observers =3D false;=0A=
  },=0A=
=0A=
  observe: function(element, name, observer, useCapture) {=0A=
    element =3D $(element);=0A=
    useCapture =3D useCapture || false;=0A=
=0A=
    if (name =3D=3D 'keypress' &&=0A=
      (Prototype.Browser.WebKit || element.attachEvent))=0A=
      name =3D 'keydown';=0A=
=0A=
    Event._observeAndCache(element, name, observer, useCapture);=0A=
  },=0A=
=0A=
  stopObserving: function(element, name, observer, useCapture) {=0A=
    element =3D $(element);=0A=
    useCapture =3D useCapture || false;=0A=
=0A=
    if (name =3D=3D 'keypress' &&=0A=
        (Prototype.Browser.WebKit || element.attachEvent))=0A=
      name =3D 'keydown';=0A=
=0A=
    if (element.removeEventListener) {=0A=
      element.removeEventListener(name, observer, useCapture);=0A=
    } else if (element.detachEvent) {=0A=
      try {=0A=
        element.detachEvent('on' + name, observer);=0A=
      } catch (e) {}=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
/* prevent memory leaks in IE */=0A=
if (Prototype.Browser.IE)=0A=
  Event.observe(window, 'unload', Event.unloadCache, false);=0A=
var Position =3D {=0A=
  // set to true if needed, warning: firefox performance problems=0A=
  // NOT neeeded for page scrolling, only if draggable contained in=0A=
  // scrollable elements=0A=
  includeScrollOffsets: false,=0A=
=0A=
  // must be called before calling withinIncludingScrolloffset, every =
time the=0A=
  // page is scrolled=0A=
  prepare: function() {=0A=
    this.deltaX =3D  window.pageXOffset=0A=
                || document.documentElement.scrollLeft=0A=
                || document.body.scrollLeft=0A=
                || 0;=0A=
    this.deltaY =3D  window.pageYOffset=0A=
                || document.documentElement.scrollTop=0A=
                || document.body.scrollTop=0A=
                || 0;=0A=
  },=0A=
=0A=
  realOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.scrollTop  || 0;=0A=
      valueL +=3D element.scrollLeft || 0;=0A=
      element =3D element.parentNode;=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  cumulativeOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  positionedOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
      if (element) {=0A=
        if(element.tagName=3D=3D'BODY') break;=0A=
        var p =3D Element.getStyle(element, 'position');=0A=
        if (p =3D=3D 'relative' || p =3D=3D 'absolute') break;=0A=
      }=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  offsetParent: function(element) {=0A=
    if (element.offsetParent) return element.offsetParent;=0A=
    if (element =3D=3D document.body) return element;=0A=
=0A=
    while ((element =3D element.parentNode) && element !=3D =
document.body)=0A=
      if (Element.getStyle(element, 'position') !=3D 'static')=0A=
        return element;=0A=
=0A=
    return document.body;=0A=
  },=0A=
=0A=
  // caches x/y coordinate pair to use with overlap=0A=
  within: function(element, x, y) {=0A=
    if (this.includeScrollOffsets)=0A=
      return this.withinIncludingScrolloffsets(element, x, y);=0A=
    this.xcomp =3D x;=0A=
    this.ycomp =3D y;=0A=
    this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
    return (y >=3D this.offset[1] &&=0A=
            y <  this.offset[1] + element.offsetHeight &&=0A=
            x >=3D this.offset[0] &&=0A=
            x <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  withinIncludingScrolloffsets: function(element, x, y) {=0A=
    var offsetcache =3D this.realOffset(element);=0A=
=0A=
    this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
    this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
    this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
    return (this.ycomp >=3D this.offset[1] &&=0A=
            this.ycomp <  this.offset[1] + element.offsetHeight &&=0A=
            this.xcomp >=3D this.offset[0] &&=0A=
            this.xcomp <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  // within must be called directly before=0A=
  overlap: function(mode, element) {=0A=
    if (!mode) return 0;=0A=
    if (mode =3D=3D 'vertical')=0A=
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A=
        element.offsetHeight;=0A=
    if (mode =3D=3D 'horizontal')=0A=
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A=
        element.offsetWidth;=0A=
  },=0A=
=0A=
  page: function(forElement) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
=0A=
    var element =3D forElement;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
=0A=
      // Safari fix=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A=
=0A=
    } while (element =3D element.offsetParent);=0A=
=0A=
    element =3D forElement;=0A=
    do {=0A=
      if (!window.opera || element.tagName=3D=3D'BODY') {=0A=
        valueT -=3D element.scrollTop  || 0;=0A=
        valueL -=3D element.scrollLeft || 0;=0A=
      }=0A=
    } while (element =3D element.parentNode);=0A=
=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  clone: function(source, target) {=0A=
    var options =3D Object.extend({=0A=
      setLeft:    true,=0A=
      setTop:     true,=0A=
      setWidth:   true,=0A=
      setHeight:  true,=0A=
      offsetTop:  0,=0A=
      offsetLeft: 0=0A=
    }, arguments[2] || {})=0A=
=0A=
    // find page position of source=0A=
    source =3D $(source);=0A=
    var p =3D Position.page(source);=0A=
=0A=
    // find coordinate system to use=0A=
    target =3D $(target);=0A=
    var delta =3D [0, 0];=0A=
    var parent =3D null;=0A=
    // delta [0,0] will do fine with position: fixed elements,=0A=
    // position:absolute needs offsetParent deltas=0A=
    if (Element.getStyle(target,'position') =3D=3D 'absolute') {=0A=
      parent =3D Position.offsetParent(target);=0A=
      delta =3D Position.page(parent);=0A=
    }=0A=
=0A=
    // correct by body offsets (fixes Safari)=0A=
    if (parent =3D=3D document.body) {=0A=
      delta[0] -=3D document.body.offsetLeft;=0A=
      delta[1] -=3D document.body.offsetTop;=0A=
    }=0A=
=0A=
    // set position=0A=
    if(options.setLeft)   target.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
    if(options.setTop)    target.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
    if(options.setWidth)  target.style.width =3D source.offsetWidth + =
'px';=0A=
    if(options.setHeight) target.style.height =3D source.offsetHeight + =
'px';=0A=
  },=0A=
=0A=
  absolutize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.style.position =3D=3D 'absolute') return;=0A=
    Position.prepare();=0A=
=0A=
    var offsets =3D Position.positionedOffset(element);=0A=
    var top     =3D offsets[1];=0A=
    var left    =3D offsets[0];=0A=
    var width   =3D element.clientWidth;=0A=
    var height  =3D element.clientHeight;=0A=
=0A=
    element._originalLeft   =3D left - parseFloat(element.style.left  || =
0);=0A=
    element._originalTop    =3D top  - parseFloat(element.style.top || =
0);=0A=
    element._originalWidth  =3D element.style.width;=0A=
    element._originalHeight =3D element.style.height;=0A=
=0A=
    element.style.position =3D 'absolute';=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.width  =3D width + 'px';=0A=
    element.style.height =3D height + 'px';=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.style.position =3D=3D 'relative') return;=0A=
    Position.prepare();=0A=
=0A=
    element.style.position =3D 'relative';=0A=
    var top  =3D parseFloat(element.style.top  || 0) - =
(element._originalTop || 0);=0A=
    var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);=0A=
=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.height =3D element._originalHeight;=0A=
    element.style.width  =3D element._originalWidth;=0A=
  }=0A=
}=0A=
=0A=
// Safari returns margins on body which is incorrect if the child is =
absolutely=0A=
// positioned.  For performance reasons, redefine =
Position.cumulativeOffset for=0A=
// KHTML/WebKit only.=0A=
if (Prototype.Browser.WebKit) {=0A=
  Position.cumulativeOffset =3D function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
=0A=
    return [valueL, valueT];=0A=
  }=0A=
}=0A=
=0A=
Element.addMethods();
------=_NextPart_000_0000_01CACB36.188D8200
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reynaers.e-publications.eu/RR6/po/ibrochure/scriptaculous.js?load=effects

// script.aculo.us scriptaculous.js v1.7.1_beta3, Fri May 25 17:19:41 =
+0200 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// =0A=
// Permission is hereby granted, free of charge, to any person obtaining=0A=
// a copy of this software and associated documentation files (the=0A=
// "Software"), to deal in the Software without restriction, including=0A=
// without limitation the rights to use, copy, modify, merge, publish,=0A=
// distribute, sublicense, and/or sell copies of the Software, and to=0A=
// permit persons to whom the Software is furnished to do so, subject to=0A=
// the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be=0A=
// included in all copies or substantial portions of the Software.=0A=
//=0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A=
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A=
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A=
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A=
//=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
var Scriptaculous =3D {=0A=
  Version: '1.7.1_beta3',=0A=
  require: function(libraryName) {=0A=
    // inserting via DOM fails in Safari 2.0, so brute force approach=0A=
    document.write('<script type=3D"text/javascript" =
src=3D"'+libraryName+'"></script>');=0A=
  },=0A=
  REQUIRED_PROTOTYPE: '1.5.1',=0A=
  load: function() {=0A=
    function convertVersionString(versionString){=0A=
      var r =3D versionString.split('.');=0A=
      return parseInt(r[0])*100000 + parseInt(r[1])*1000 + =
parseInt(r[2]);=0A=
    }=0A=
 =0A=
    if((typeof Prototype=3D=3D'undefined') || =0A=
       (typeof Element =3D=3D 'undefined') || =0A=
       (typeof Element.Methods=3D=3D'undefined') ||=0A=
       (convertVersionString(Prototype.Version) < =0A=
        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))=0A=
       throw("script.aculo.us requires the Prototype JavaScript =
framework >=3D " +=0A=
        Scriptaculous.REQUIRED_PROTOTYPE);=0A=
    =0A=
    $A(document.getElementsByTagName("script")).findAll( function(s) {=0A=
      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))=0A=
    }).each( function(s) {=0A=
      var path =3D s.src.replace(/scriptaculous\.js(\?.*)?$/,'');=0A=
      var includes =3D s.src.match(/\?.*load=3D([a-z,]*)/);=0A=
      (includes ? includes[1] : =
'builder,effects,dragdrop,controls,slider,sound').split(',').each(=0A=
       function(include) { Scriptaculous.require(path+include+'.js') });=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
Scriptaculous.load();
------=_NextPart_000_0000_01CACB36.188D8200
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reynaers.e-publications.eu/RR6/po/ibrochure/lightbox++.js

/*=0A=
	Lightbox++ v1.0.1 (Initial Release)=0A=
	Modification by Justin Lyric - http://www.codefidelity.com=0A=
	Wednesday, July 4th, 2007 (Happy 4th!)=0A=
	=0A=
	For installation instructions and script updates, please visit:=0A=
	http://www.codefidelity.com/blog/?page_id=3D7=0A=
	=0A=
	Original Lightbox Script by Lokesh Dhakar=0A=
	http://www.huddletogether.com/projects/lightbox2/=0A=
	=0A=
	Still licensed under the Creative Commons Attribution 2.5 License - =
http://creativecommons.org/licenses/by/2.5/=0A=
	=0A=
	This script allows you to use the same Lightbox functionality that =
you're used to as well as =0A=
	embed Flash movies.  =0A=
=0A=
*/=0A=
=0A=
/*=0A=
=0A=
	Table of Contents=0A=
	-----------------=0A=
	Configuration=0A=
	Global Variables=0A=
=0A=
	Extending Built-in Objects	=0A=
	- Object.extend(Element)=0A=
	- Array.prototype.removeDuplicates()=0A=
	- Array.prototype.empty()=0A=
=0A=
	Lightbox Class Declaration=0A=
	- initialize()=0A=
	- updateElementList()=0A=
	- start()=0A=
	- changeElement()=0A=
	- resizeElementContainer()=0A=
	- showElement()=0A=
	- updateDetails()=0A=
	- updateNav()=0A=
	- enableKeyboardNav()=0A=
	- disableKeyboardNav()=0A=
	- keyboardAction()=0A=
	- preloadNeighborImages()=0A=
	- end()=0A=
	=0A=
	Miscellaneous Functions=0A=
	- getPageScroll()=0A=
	- getPageSize()=0A=
	- getKey()=0A=
	- listenKey()=0A=
	- showSelectBoxes()=0A=
	- hideSelectBoxes()=0A=
	- pause()=0A=
	- initLightbox()=0A=
	=0A=
	Function Calls=0A=
	- addLoadEvent(initLightbox)=0A=
	=0A=
*/=0A=
=0A=
=0A=
//=0A=
//	Configuration=0A=
//=0A=
var fileLoadingImage =3D "images/loading.gif";				// Loading image		=0A=
var fileBottomNavCloseImage =3D "images/closelabel.gif";		// Close image=0A=
var fallbackOverlayImage =3D "images/overlay.png";			// Fallback overlay =
used with browsers that have opacity problems=0A=
var overlayOpacity =3D 0.8;									// Controls transparency of shadow =
overlay=0A=
var animate =3D true;											// Toggles resizing animations=0A=
var resizeSpeed =3D 7;										// Controls the speed of the image =
resizing animations (1=3Dslowest and 10=3Dfastest)=0A=
var borderSize =3D 10;										// If you adjust the padding in the CSS, =
you will need to update this variable=0A=
=0A=
//=0A=
//	Global Variables=0A=
//=0A=
var elementArray =3D new Array;=0A=
var activeElement;=0A=
var userAgent =3D navigator.userAgent.toLowerCase();=0A=
=0A=
if(animate =3D=3D true){=0A=
	overlayDuration =3D 0.2;	=0A=
	if(resizeSpeed > 10){ resizeSpeed =3D 10;}=0A=
	if(resizeSpeed < 1){ resizeSpeed =3D 1;}=0A=
	resizeDuration =3D (11 - resizeSpeed) * 0.15;=0A=
} else { =0A=
	overlayDuration =3D 0;=0A=
	resizeDuration =3D 0;=0A=
}=0A=
=0A=
//=0A=
//	Additional methods for Element added by SU, Couloir=0A=
//	- Further additions by Lokesh Dhakar (huddletogether.com)=0A=
//=0A=
Object.extend(Element, {=0A=
	getWidth: function(element) {=0A=
	   	element =3D $(element);=0A=
	   	return element.offsetWidth; =0A=
	},=0A=
	setWidth: function(element,w) {=0A=
	   	element =3D $(element);=0A=
    	element.style.width =3D w +"px";=0A=
	},=0A=
	setHeight: function(element,h) {=0A=
   		element =3D $(element);=0A=
    	element.style.height =3D h +"px";=0A=
	},=0A=
	setTop: function(element,t) {=0A=
	   	element =3D $(element);=0A=
    	element.style.top =3D t +"px";=0A=
	},=0A=
	setLeft: function(element,l) {=0A=
	   	element =3D $(element);=0A=
    	element.style.left =3D l +"px";=0A=
	},=0A=
	setSrc: function(element,src) {=0A=
    	element =3D $(element);=0A=
    	element.src =3D src; =0A=
	},=0A=
	setHref: function(element,href) {=0A=
    	element =3D $(element);=0A=
    	element.href =3D href; =0A=
	},=0A=
	setInnerHTML: function(element,content) {=0A=
		element =3D $(element);=0A=
		element.innerHTML =3D content;=0A=
	}=0A=
});=0A=
=0A=
//=0A=
//	Extending built-in Array object=0A=
//	- array.removeDuplicates()=0A=
//	- array.empty()=0A=
//=0A=
Array.prototype.removeDuplicates =3D function () {=0A=
    for(i =3D 0; i < this.length; i++){=0A=
        for(j =3D this.length-1; j>i; j--){        =0A=
            if(this[i][0] =3D=3D this[j][0]){=0A=
                this.splice(j,1);=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
Array.prototype.empty =3D function () {=0A=
	for(i =3D 0; i <=3D this.length; i++){=0A=
		this.shift();=0A=
	}=0A=
}=0A=
=0A=
//=0A=
//	Lightbox Class Declaration=0A=
//	- initialize()=0A=
//	- start()=0A=
//	- changeElement()=0A=
//	- resizeElementContainer()=0A=
//	- showElement()=0A=
//	- updateDetails()=0A=
//	- updateNav()=0A=
//	- enableKeyboardNav()=0A=
//	- disableKeyboardNav()=0A=
//	- keyboardNavAction()=0A=
//	- preloadNeighborImages()=0A=
//	- end()=0A=
//=0A=
//	Structuring of code inspired by Scott Upton (http://www.uptonic.com/)=0A=
//=0A=
var Lightbox =3D Class.create();=0A=
=0A=
Lightbox.prototype =3D {=0A=
	=0A=
	// initialize()=0A=
	// Constructor runs on completion of the DOM loading. Calls =
updateElementList and then=0A=
	// the function inserts html at the bottom of the page which is used to =
display the shadow =0A=
	// overlay and the image container.=0A=
	//=0A=
	initialize: function() {	=0A=
		=0A=
		this.updateElementList();=0A=
=0A=
		// Code inserts html at the bottom of the page that looks similar to =
this:=0A=
		//=0A=
		//	<div id=3D"overlay"></div>=0A=
		//	<div id=3D"lightbox">=0A=
		//		<div id=3D"outerImageContainer">=0A=
		//			<div id=3D"imageContainer">=0A=
		//				<div id=3D"lightboxcontent">=0A=
		//					<img id=3D"lightboxmage">=0A=
		//					<div id=3D"lightboxswf">=0A=
		//					</div>=0A=
		//				</div>=0A=
		//				<div style=3D"" id=3D"hoverNav">=0A=
		//					<a href=3D"#" id=3D"prevLink"></a>=0A=
		//					<a href=3D"#" id=3D"nextLink"></a>=0A=
		//				</div>=0A=
		//				<div id=3D"loading">=0A=
		//					<a href=3D"#" id=3D"loadingLink">=0A=
		//						<img src=3D"images/loading.gif">=0A=
		//					</a>=0A=
		//				</div>=0A=
		//			</div>=0A=
		//		</div>=0A=
		//		<div id=3D"imageDataContainer">=0A=
		//			<div id=3D"imageData">=0A=
		//				<div id=3D"imageDetails">=0A=
		//					<span id=3D"caption"></span>=0A=
		//					<span id=3D"numberDisplay"></span>=0A=
		//				</div>=0A=
		//				<div id=3D"bottomNav">=0A=
		//					<a href=3D"#" id=3D"bottomNavClose">=0A=
		//						<img src=3D"images/close.gif">=0A=
		//					</a>=0A=
		//				</div>=0A=
		//			</div>=0A=
		//		</div>=0A=
		//	</div>=0A=
=0A=
=0A=
		var objBody =3D document.getElementsByTagName("body").item(0);=0A=
		=0A=
		var objOverlay =3D document.createElement("div");=0A=
		objOverlay.setAttribute('id','overlay');=0A=
		=0A=
		// The mozilla flavors on the mac, specifically Firefox and Camino =
have difficulties displaying flash over anything with dynamically =
generated opacity.=0A=
		// Here we're using the fallBackOverlayImage to alleviate this =
problem.    This is a semi-transparent png which is included with the =
script.=0A=
		if (userAgent.indexOf('mac') !=3D -1 && =
userAgent.indexOf('firefox')!=3D-1 || userAgent.indexOf('camino')!=3D-1) =
{=0A=
			objOverlay.style.backgroundImage =3D 'url('+fallbackOverlayImage+')';=0A=
			objOverlay.style.backgroundRepeat =3D 'repeat';=0A=
		}else{=0A=
			objOverlay.style.backgroundColor =3D '#000000';=0A=
		}=0A=
		objOverlay.style.display =3D 'none';=0A=
		objOverlay.onclick =3D function() { myLightbox.end(); }=0A=
		objBody.appendChild(objOverlay);=0A=
		=0A=
		var objLightbox =3D document.createElement("div");=0A=
		objLightbox.setAttribute('id','lightbox');=0A=
		objLightbox.style.display =3D 'none';=0A=
		objLightbox.onclick =3D function(e) {=0A=
			if (!e) var e =3D window.event;=0A=
			var clickObj =3D Event.element(e).id;=0A=
			if ( clickObj =3D=3D 'lightbox') {=0A=
				myLightbox.end();=0A=
			}=0A=
		};=0A=
		objBody.appendChild(objLightbox);=0A=
			=0A=
		var objOuterImageContainer =3D document.createElement("div");=0A=
		objOuterImageContainer.setAttribute('id','outerImageContainer');=0A=
		objLightbox.appendChild(objOuterImageContainer);=0A=
=0A=
		// When Lightbox starts it will resize itself from 250 by 250 to the =
current image dimension.=0A=
		// If animations are turned off, it will be hidden as to prevent a =
flicker of a=0A=
		// white 250 by 250 box.=0A=
		if(animate){=0A=
			Element.setWidth('outerImageContainer', 250);=0A=
			Element.setHeight('outerImageContainer', 250);			=0A=
		} else {=0A=
			Element.setWidth('outerImageContainer', 1);=0A=
			Element.setHeight('outerImageContainer', 1);			=0A=
		}=0A=
=0A=
		var objImageContainer =3D document.createElement("div");=0A=
		objImageContainer.setAttribute('id','imageContainer');=0A=
		objOuterImageContainer.appendChild(objImageContainer);=0A=
		=0A=
		var objContent =3D document.createElement("div");=0A=
		objContent.setAttribute('id','lightboxcontent');=0A=
		objImageContainer.appendChild(objContent);=0A=
	=0A=
		var objLightboxImage =3D document.createElement("img");=0A=
		objLightboxImage.setAttribute('id','lightboximage');=0A=
		objLightboxImage.style.display =3D 'none';=0A=
		objContent.appendChild(objLightboxImage);=0A=
		=0A=
		objLightboxSwf =3D document.createElement("div");=0A=
		objLightboxSwf.setAttribute('id','lightboxswf');=0A=
		objLightboxSwf.style.position =3D 'relative';=0A=
		objLightboxSwf.style.zIndex =3D 101; // Safari=0A=
		objLightboxSwf.style.display =3D 'none';=0A=
		objContent.appendChild(objLightboxSwf);=0A=
		=0A=
		var objHoverNav =3D document.createElement("div");=0A=
		objHoverNav.setAttribute('id','hoverNav');=0A=
		objImageContainer.appendChild(objHoverNav);=0A=
	=0A=
		var objPrevLink =3D document.createElement("a");=0A=
		objPrevLink.setAttribute('id','prevLink');=0A=
		objPrevLink.setAttribute('href','#');=0A=
		objHoverNav.appendChild(objPrevLink);=0A=
		=0A=
		var objNextLink =3D document.createElement("a");=0A=
		objNextLink.setAttribute('id','nextLink');=0A=
		objNextLink.setAttribute('href','#');=0A=
		objHoverNav.appendChild(objNextLink);=0A=
	=0A=
		var objLoading =3D document.createElement("div");=0A=
		objLoading.setAttribute('id','loading');=0A=
		objImageContainer.appendChild(objLoading);=0A=
	=0A=
		var objLoadingLink =3D document.createElement("a");=0A=
		objLoadingLink.setAttribute('id','loadingLink');=0A=
		objLoadingLink.setAttribute('href','#');=0A=
		objLoadingLink.onclick =3D function() { myLightbox.end(); return =
false; }=0A=
		objLoading.appendChild(objLoadingLink);=0A=
	=0A=
		var objLoadingImage =3D document.createElement("img");=0A=
		objLoadingImage.setAttribute('src', fileLoadingImage);=0A=
		objLoadingLink.appendChild(objLoadingImage);=0A=
=0A=
		var objImageDataContainer =3D document.createElement("div");=0A=
		objImageDataContainer.setAttribute('id','imageDataContainer');=0A=
		objLightbox.appendChild(objImageDataContainer);=0A=
=0A=
		var objImageData =3D document.createElement("div");=0A=
		objImageData.setAttribute('id','imageData');=0A=
		objImageDataContainer.appendChild(objImageData);=0A=
	=0A=
		var objImageDetails =3D document.createElement("div");=0A=
		objImageDetails.setAttribute('id','imageDetails');=0A=
		objImageData.appendChild(objImageDetails);=0A=
	=0A=
		var objCaption =3D document.createElement("span");=0A=
		objCaption.setAttribute('id','caption');=0A=
		objImageDetails.appendChild(objCaption);=0A=
	=0A=
		var objNumberDisplay =3D document.createElement("span");=0A=
		objNumberDisplay.setAttribute('id','numberDisplay');=0A=
		objImageDetails.appendChild(objNumberDisplay);=0A=
		=0A=
		var objBottomNav =3D document.createElement("div");=0A=
		objBottomNav.setAttribute('id','bottomNav');=0A=
		objImageData.appendChild(objBottomNav);=0A=
	=0A=
		var objBottomNavCloseLink =3D document.createElement("a");=0A=
		objBottomNavCloseLink.setAttribute('id','bottomNavClose');=0A=
		objBottomNavCloseLink.setAttribute('href','#');=0A=
		objBottomNavCloseLink.onclick =3D function() { myLightbox.end(); =
return false; }=0A=
		objBottomNav.appendChild(objBottomNavCloseLink);=0A=
	=0A=
		var objBottomNavCloseImage =3D document.createElement("img");=0A=
		objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);=0A=
		objBottomNavCloseLink.appendChild(objBottomNavCloseImage);=0A=
	},=0A=
=0A=
=0A=
	//=0A=
	// updateElementList()=0A=
	// Loops through anchor tags looking for 'lightbox' references and =
applies onclick=0A=
	// events to appropriate links. You can rerun after dynamically adding =
images w/ajax.=0A=
	//=0A=
	updateElementList: function() {	=0A=
		if (!document.getElementsByTagName){ return; }=0A=
		var anchors =3D document.getElementsByTagName('a');=0A=
		var areas =3D document.getElementsByTagName('area');=0A=
=0A=
		// Loop through all anchor tags...=0A=
		for (var i=3D0; i<anchors.length; i++){=0A=
			var anchor =3D anchors[i];=0A=
			=0A=
			var relAttribute =3D String(anchor.getAttribute('rel'));=0A=
			=0A=
			// Use the string.match() method to catch 'lightbox' references in =
the rel attribute=0A=
			if (anchor.getAttribute('href') && =
(relAttribute.toLowerCase().match('lightbox'))){=0A=
				anchor.onclick =3D function () {myLightbox.start(this); return =
false;}=0A=
			}=0A=
		}=0A=
=0A=
		// Loop through all area tags...=0A=
		// ToDo: Combine anchor & area tag loops=0A=
		for (var i=3D0; i< areas.length; i++){=0A=
			var area =3D areas[i];=0A=
			=0A=
			var relAttribute =3D String(area.getAttribute('rel'));=0A=
			=0A=
			// Use the string.match() method to catch 'lightbox' references in =
the rel attribute...=0A=
			if (area.getAttribute('href') && =
(relAttribute.toLowerCase().match('lightbox'))){=0A=
				area.onclick =3D function () {myLightbox.start(this); return false;}=0A=
			}=0A=
		}=0A=
	},=0A=
	=0A=
	=0A=
	//=0A=
	//	start()=0A=
	//	Display overlay and lightbox. If element is part of a set, add =
siblings to elementArray.=0A=
	//=0A=
	start: function(elementLink) {	=0A=
=0A=
		hideSelectBoxes();		=0A=
		hideFlash();=0A=
		=0A=
		// stretch overlay to fill page and fade in=0A=
		var arrayPageSize =3D getPageSize();=0A=
		Element.setWidth('overlay', arrayPageSize[0]);=0A=
		Element.setHeight('overlay', arrayPageSize[1]);=0A=
		=0A=
		// Again, if the user is on a Mac and has a Mozilla flavor browser, we =
can't use dynamically generated opacity or you will experience problems =
with the Flash movies.=0A=
		if (userAgent.indexOf('mac') !=3D -1 && =
userAgent.indexOf('firefox')!=3D-1 || userAgent.indexOf('camino')!=3D-1) =
{=0A=
			Element.show('overlay');=0A=
		}else{ // Non-Mac, carry on as usual.=0A=
			new Effect.Appear('overlay', { duration: overlayDuration, from: 0.0, =
to: overlayOpacity });=0A=
		}=0A=
=0A=
		elementArray =3D [];=0A=
		elementNum =3D 0;		=0A=
=0A=
		if (!document.getElementsByTagName){ return; }=0A=
		var anchors =3D document.getElementsByTagName(elementLink.tagName);=0A=
		=0A=
				=0A=
		// If the image or SWF is not a part of the set...=0A=
		if((elementLink.getAttribute('rel') =3D=3D 'lightbox')){=0A=
			// Add single image or SWF to elementArray=0A=
			if(elementLink.getAttribute('href').endsWith('swf')) { // SWF=0A=
				elementArray.push(new Array(elementLink.getAttribute('href'), =
elementLink.getAttribute('title'), elementLink.getAttribute('width'), =
elementLink.getAttribute('height')));=0A=
			} else { // Image=0A=
				elementArray.push(new Array(elementLink.getAttribute('href'), =
elementLink.getAttribute('title')));=0A=
			}				=0A=
		} else {=0A=
		// Image or SWF is not part of a set...=0A=
				=0A=
			// Loop through anchors, find other images/SWF's in the set, and add =
them to elementArray=0A=
			for (var i=3D0; i<anchors.length; i++){=0A=
				var anchor =3D anchors[i];=0A=
				if (anchor.getAttribute('href') && (anchor.getAttribute('rel') =
=3D=3D elementLink.getAttribute('rel'))){=0A=
					if(anchor.getAttribute('href').endsWith('swf')) { // SWF=0A=
						elementArray.push(new Array(anchor.getAttribute('href'), =
anchor.getAttribute('title'), anchor.getAttribute('width'), =
anchor.getAttribute('height')));=0A=
					} else {=0A=
						elementArray.push(new Array(anchor.getAttribute('href'), =
anchor.getAttribute('title')));=0A=
					}=0A=
				}=0A=
			}=0A=
			elementArray.removeDuplicates();=0A=
			while(elementArray[elementNum][0] !=3D =
elementLink.getAttribute('href')) { elementNum++;}=0A=
		}=0A=
=0A=
		// Calculate top and left offset for the lightbox =0A=
		var arrayPageScroll =3D getPageScroll();=0A=
		var lightboxTop =3D arrayPageScroll[1] + (arrayPageSize[3] / 10);=0A=
		var lightboxLeft =3D arrayPageScroll[0];=0A=
		Element.setTop('lightbox', lightboxTop);=0A=
		Element.setLeft('lightbox', lightboxLeft);=0A=
		=0A=
		Element.show('lightbox');=0A=
		=0A=
		this.changeElement(elementNum);=0A=
	},=0A=
=0A=
	//=0A=
	//	changeElement()=0A=
	//	Hide most elements and preload image in preparation for resizing the =
element container.=0A=
	//=0A=
	changeElement: function(elementNum) {	=0A=
		=0A=
		activeElement =3D elementNum;	// Update global var=0A=
=0A=
		// Hide elements during transition=0A=
		if(animate){ Element.show('loading');}=0A=
		Element.hide('lightboximage');=0A=
		Element.hide('lightboxswf');=0A=
		Element.hide('hoverNav');=0A=
		Element.hide('prevLink');=0A=
		Element.hide('nextLink');=0A=
		Element.hide('imageDataContainer');=0A=
		Element.hide('numberDisplay');		=0A=
		=0A=
		if (elementArray[activeElement][0].endsWith('swf')){ // SWF=0A=
			// No preloading needed here, if a preloader is needed for the Flash =
movie, it should be built into said Flash movie.=0A=
			=
myLightbox.resizeElementContainer(parseInt(elementArray[activeElement][2]=
), parseInt(elementArray[activeElement][3]))=0A=
		}else{=0A=
		=0A=
			imgPreloader =3D new Image();=0A=
		=0A=
			// Once image is preloaded, resize image container=0A=
			imgPreloader.onload=3Dfunction(){=0A=
				Element.setSrc('lightboximage', elementArray[activeElement][0]);=0A=
				myLightbox.resizeElementContainer(imgPreloader.width, =
imgPreloader.height);=0A=
			=0A=
				imgPreloader.onload=3Dfunction(){};	//	Clear onLoad, IE behaves =
irratically with animated gifs otherwise =0A=
			}=0A=
			imgPreloader.src =3D elementArray[activeElement][0];=0A=
		}=0A=
	},=0A=
=0A=
	//=0A=
	//	resizeElementContainer()=0A=
	//=0A=
	resizeElementContainer: function(elementWidth, elementHeight) {=0A=
=0A=
		// Get current width and height=0A=
		this.widthCurrent =3D Element.getWidth('outerImageContainer');=0A=
		this.heightCurrent =3D Element.getHeight('outerImageContainer');=0A=
=0A=
		// Get new width and height=0A=
		var widthNew =3D (elementWidth  + (borderSize * 2));=0A=
		var heightNew =3D (elementHeight  + (borderSize * 2));=0A=
=0A=
		// Scalars based on change from old to new=0A=
		this.xScale =3D ( widthNew / this.widthCurrent) * 100;=0A=
		this.yScale =3D ( heightNew / this.heightCurrent) * 100;=0A=
=0A=
		// Calculate size difference between new and old image, and resize if =
necessary=0A=
		wDiff =3D this.widthCurrent - widthNew;=0A=
		hDiff =3D this.heightCurrent - heightNew;=0A=
=0A=
		if(!( hDiff =3D=3D 0)){ new Effect.Scale('outerImageContainer', =
this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); =
}=0A=
		if(!( wDiff =3D=3D 0)){ new Effect.Scale('outerImageContainer', =
this.xScale, {scaleY: false, delay: resizeDuration, duration: =
resizeDuration}); }=0A=
=0A=
		// If new and old image/SWF are same size and no scaling transition is =
necessary, =0A=
		// Do a quick pause to prevent image flicker.=0A=
		if((hDiff =3D=3D 0) && (wDiff =3D=3D 0)){=0A=
			if (navigator.appVersion.indexOf("MSIE")!=3D-1){ pause(250); } else { =
pause(100);} =0A=
		}=0A=
=0A=
		Element.setHeight('prevLink', elementHeight);=0A=
		Element.setHeight('nextLink', elementHeight);=0A=
		Element.setWidth('imageDataContainer', widthNew);=0A=
		=0A=
		this.showElement();=0A=
	},=0A=
	=0A=
	//=0A=
	//	showElement()=0A=
	//	Display image or SWF and begin preloading neighbors (if image).=0A=
	//=0A=
	showElement: function(){=0A=
		Element.hide('loading');=0A=
		=0A=
		if(elementArray[activeElement][0].endsWith('swf')) { // SWF=0A=
			// Since the activeElement is a SWF, hide the image element.=0A=
			$('lightboximage').style.display =3D 'none';=0A=
			// Setup the proper object and embed tags in the SWF div.  The =
following is a basic set of object and embed tags, edit as you see fit.=0A=
			var obj =3D $('lightboxswf');=0A=
			obj.innerHTML =3D "<object =
classid=3D\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" =
codebase=3D\"http://download.macromedia.com/pub/shockwave/cabs/flash/swfl=
ash.cab#version=3D7,0,19,0\" =
width=3D\""+elementArray[activeElement][2]+"\" =
height=3D\""+elementArray[activeElement][3]+"\">" +=0A=
				"<param name=3D\"movie\" =
value=3D\""+elementArray[activeElement][0]+"\"/>" +=0A=
				"<param name=3D\"quality\" value=3D\"high\" />" +=0A=
				"<param name=3D\"allowscriptaccess\" value=3D\"always\" />" +=0A=
				"<param name=3D\"wmode\" value=3D\"transparent\" />" +=0A=
				"<embed wmode=3D\"transparent\" allowscriptaccess=3D\"always\" =
src=3D\""+elementArray[activeElement][0]+"\" quality=3D\"high\" =
pluginspage=3D\"http://www.macromedia.com/go/getflashplayer\" =
type=3D\"application/x-shockwave-flash\" =
width=3D\""+elementArray[activeElement][2]+"\" =
height=3D\""+elementArray[activeElement][3]+"\">" +=0A=
				"</embed>" +=0A=
				"</object>";=0A=
			new Effect.Appear('lightboxswf', {  duration: resizeDuration, queue: =
'end', from: 0.0, to: 100, afterFinish: function(){ =
myLightbox.updateDetails(); } });=0A=
		} else { // Image=0A=
			// Since the activeElement is an image, hide the SWF element.=0A=
			$('lightboxswf').style.display =3D 'none';=0A=
			new Effect.Appear('lightboximage', { duration: resizeDuration, queue: =
'end', afterFinish: function(){ myLightbox.updateDetails(); } });=0A=
			this.preloadNeighborImages();=0A=
		}=0A=
	},=0A=
=0A=
	//=0A=
	//	updateDetails()=0A=
	//	Display caption, image/SWF number, and bottom nav.=0A=
	//=0A=
	updateDetails: function() {=0A=
		// if caption is not null=0A=
		if(elementArray[activeElement][1]){=0A=
			Element.show('caption');=0A=
			Element.setInnerHTML( 'caption', elementArray[activeElement][1]);=0A=
		}=0A=
		=0A=
		// if image/SWF is part of set display 'Image/Movie x of x' =0A=
		if(elementArray.length > 1){=0A=
			Element.show('numberDisplay');=0A=
			if(elementArray[activeElement][0].endsWith('swf')) { // SWF=0A=
				Element.setInnerHTML( 'numberDisplay', "Movie " + eval(activeElement =
+ 1) + " of " + elementArray.length);=0A=
			}else{ // Image=0A=
				Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeElement =
+ 1) + " of " + elementArray.length);			=0A=
			}=0A=
		}=0A=
=0A=
		new Effect.Parallel(=0A=
			[ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: =
resizeDuration, from: 0.0, to: 1.0 }), =0A=
			  new Effect.Appear('imageDataContainer', { sync: true, duration: =
resizeDuration }) ], =0A=
			{ duration: resizeDuration, afterFinish: function() {=0A=
				// Update overlay size and update nav=0A=
				var arrayPageSize =3D getPageSize();=0A=
				Element.setHeight('overlay', arrayPageSize[1]);=0A=
				myLightbox.updateNav();=0A=
				}=0A=
			} =0A=
		);=0A=
	},=0A=
=0A=
	//=0A=
	//	updateNav()=0A=
	//	Display appropriate previous and next hover navigation.=0A=
	//=0A=
	updateNav: function() {=0A=
=0A=
		Element.show('hoverNav');				=0A=
=0A=
		// If not first image in set, display prev image button=0A=
		if(activeElement !=3D 0){=0A=
			Element.show('prevLink');=0A=
			document.getElementById('prevLink').onclick =3D function() {=0A=
				myLightbox.changeElement(activeElement - 1); return false;=0A=
			}=0A=
		}=0A=
=0A=
		// If not last image in set, display next image button=0A=
		if(activeElement !=3D (elementArray.length - 1)){=0A=
			Element.show('nextLink');=0A=
			document.getElementById('nextLink').onclick =3D function() {=0A=
				myLightbox.changeElement(activeElement + 1); return false;=0A=
			}=0A=
		}=0A=
		=0A=
		this.enableKeyboardNav();=0A=
	},=0A=
=0A=
	//=0A=
	//	enableKeyboardNav()=0A=
	//=0A=
	enableKeyboardNav: function() {=0A=
		document.onkeydown =3D this.keyboardAction; =0A=
	},=0A=
=0A=
	//=0A=
	//	disableKeyboardNav()=0A=
	//=0A=
	disableKeyboardNav: function() {=0A=
		document.onkeydown =3D '';=0A=
	},=0A=
=0A=
	//=0A=
	//	keyboardAction()=0A=
	//=0A=
	keyboardAction: function(e) {=0A=
		if (e =3D=3D null) { // ie=0A=
			keycode =3D event.keyCode;=0A=
			escapeKey =3D 27;=0A=
		} else { // Mozilla=0A=
			keycode =3D e.keyCode;=0A=
			escapeKey =3D e.DOM_VK_ESCAPE;=0A=
		}=0A=
=0A=
		key =3D String.fromCharCode(keycode).toLowerCase();=0A=
		=0A=
		if((key =3D=3D 'x') || (key =3D=3D 'o') || (key =3D=3D 'c') || =
(keycode =3D=3D escapeKey)){	// Close lightbox=0A=
			myLightbox.end();=0A=
		} else if((key =3D=3D 'p') || (keycode =3D=3D 37)){	// Display =
previous image/SWF=0A=
			if(activeElement !=3D 0){=0A=
				myLightbox.disableKeyboardNav();=0A=
				myLightbox.changeElement(activeElement - 1);=0A=
			}=0A=
		} else if((key =3D=3D 'n') || (keycode =3D=3D 39)){	// Display next =
image/SWF=0A=
			if(activeElement !=3D (elementArray.length - 1)){=0A=
				myLightbox.disableKeyboardNav();=0A=
				myLightbox.changeElement(activeElement + 1);=0A=
			}=0A=
		}=0A=
=0A=
	},=0A=
=0A=
	//=0A=
	//	preloadNeighborImages()=0A=
	//	Preload previous and next images.=0A=
	//=0A=
	preloadNeighborImages: function(){=0A=
=0A=
		if((elementArray.length - 1) > activeElement){=0A=
			preloadNextImage =3D new Image();=0A=
			preloadNextImage.src =3D elementArray[activeElement + 1][0];=0A=
		}=0A=
		if(activeElement > 0){=0A=
			preloadPrevImage =3D new Image();=0A=
			preloadPrevImage.src =3D elementArray[activeElement - 1][0];=0A=
		}=0A=
	=0A=
	},=0A=
=0A=
	//=0A=
	//	end()=0A=
	//=0A=
	end: function() {=0A=
		this.disableKeyboardNav();=0A=
		var obj =3D $('lightboxswf');=0A=
		obj.innerHTML =3D "";=0A=
		Element.hide('lightbox');=0A=
		new Effect.Fade('overlay', { duration: overlayDuration});=0A=
		showSelectBoxes();=0A=
		showFlash();=0A=
	}=0A=
}=0A=
=0A=
//=0A=
// getPageScroll()=0A=
// Returns array with x,y page scroll values.=0A=
// Core code from - quirksmode.com=0A=
//=0A=
function getPageScroll(){=0A=
=0A=
	var xScroll, yScroll;=0A=
=0A=
	if (self.pageYOffset) {=0A=
		yScroll =3D self.pageYOffset;=0A=
		xScroll =3D self.pageXOffset;=0A=
	} else if (document.documentElement && =
document.documentElement.scrollTop){	 // Explorer 6 Strict=0A=
		yScroll =3D document.documentElement.scrollTop;=0A=
		xScroll =3D document.documentElement.scrollLeft;=0A=
	} else if (document.body) {// all other Explorers=0A=
		yScroll =3D document.body.scrollTop;=0A=
		xScroll =3D document.body.scrollLeft;	=0A=
	}=0A=
=0A=
	arrayPageScroll =3D new Array(xScroll,yScroll) =0A=
	return arrayPageScroll;=0A=
}=0A=
=0A=
//=0A=
// getPageSize()=0A=
// Returns array with page width, height and window width, height=0A=
// Core code from - quirksmode.com=0A=
// Edit for Firefox by pHaez=0A=
//=0A=
function getPageSize(){=0A=
	=0A=
	var xScroll, yScroll;=0A=
	=0A=
	if (window.innerHeight && window.scrollMaxY) {	=0A=
		xScroll =3D window.innerWidth + window.scrollMaxX;=0A=
		yScroll =3D window.innerHeight + window.scrollMaxY;=0A=
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // =
all but Explorer Mac=0A=
		xScroll =3D document.body.scrollWidth;=0A=
		yScroll =3D document.body.scrollHeight;=0A=
	} else { // Explorer Mac...would also work in Explorer 6 Strict, =
Mozilla and Safari=0A=
		xScroll =3D document.body.offsetWidth;=0A=
		yScroll =3D document.body.offsetHeight;=0A=
	}=0A=
	=0A=
	var windowWidth, windowHeight;=0A=
	=0A=
//	console.log(self.innerWidth);=0A=
//	console.log(document.documentElement.clientWidth);=0A=
=0A=
	if (self.innerHeight) {	// all except Explorer=0A=
		if(document.documentElement.clientWidth){=0A=
			windowWidth =3D document.documentElement.clientWidth; =0A=
		} else {=0A=
			windowWidth =3D self.innerWidth;=0A=
		}=0A=
		windowHeight =3D self.innerHeight;=0A=
	} else if (document.documentElement && =
document.documentElement.clientHeight) { // Explorer 6 Strict Mode=0A=
		windowWidth =3D document.documentElement.clientWidth;=0A=
		windowHeight =3D document.documentElement.clientHeight;=0A=
	} else if (document.body) { // other Explorers=0A=
		windowWidth =3D document.body.clientWidth;=0A=
		windowHeight =3D document.body.clientHeight;=0A=
	}	=0A=
	=0A=
	// For small pages with total height less then height of the viewport=0A=
	if(yScroll < windowHeight){=0A=
		pageHeight =3D windowHeight;=0A=
	} else { =0A=
		pageHeight =3D yScroll;=0A=
	}=0A=
=0A=
//	console.log("xScroll " + xScroll)=0A=
//	console.log("windowWidth " + windowWidth)=0A=
=0A=
	// For small pages with total width less then width of the viewport=0A=
	if(xScroll < windowWidth){	=0A=
		pageWidth =3D xScroll;		=0A=
	} else {=0A=
		pageWidth =3D windowWidth;=0A=
	}=0A=
//	console.log("pageWidth " + pageWidth)=0A=
=0A=
	arrayPageSize =3D new =
Array(pageWidth,pageHeight,windowWidth,windowHeight) =0A=
	return arrayPageSize;=0A=
}=0A=
=0A=
//=0A=
// getKey(key)=0A=
// Gets keycode. If 'x' is pressed then it hides the lightbox.=0A=
//=0A=
function getKey(e){=0A=
	if (e =3D=3D null) { // ie=0A=
		keycode =3D event.keyCode;=0A=
	} else { // mozilla=0A=
		keycode =3D e.which;=0A=
	}=0A=
	key =3D String.fromCharCode(keycode).toLowerCase();=0A=
	=0A=
	if(key =3D=3D 'x'){=0A=
	}=0A=
}=0A=
=0A=
// =
-------------------------------------------------------------------------=
----------=0A=
=0A=
//=0A=
// listenKey()=0A=
//=0A=
function listenKey () {	document.onkeypress =3D getKey; }=0A=
	=0A=
// ---------------------------------------------------=0A=
=0A=
function showSelectBoxes(){=0A=
	var selects =3D document.getElementsByTagName("select");=0A=
	for (i =3D 0; i !=3D selects.length; i++) {=0A=
		selects[i].style.visibility =3D "visible";=0A=
	}=0A=
}=0A=
=0A=
// ---------------------------------------------------=0A=
=0A=
function hideSelectBoxes(){=0A=
	var selects =3D document.getElementsByTagName("select");=0A=
	for (i =3D 0; i !=3D selects.length; i++) {=0A=
		selects[i].style.visibility =3D "hidden";=0A=
	}=0A=
}=0A=
=0A=
// ---------------------------------------------------=0A=
=0A=
function showFlash(){=0A=
	var flashObjects =3D document.getElementsByTagName("object");=0A=
	for (i =3D 0; i < flashObjects.length; i++) {=0A=
		flashObjects[i].style.visibility =3D "visible";=0A=
	}=0A=
=0A=
	var flashEmbeds =3D document.getElementsByTagName("embed");=0A=
	for (i =3D 0; i < flashEmbeds.length; i++) {=0A=
		flashEmbeds[i].style.visibility =3D "visible";=0A=
	}=0A=
}=0A=
=0A=
// ---------------------------------------------------=0A=
=0A=
function hideFlash(){=0A=
	var flashObjects =3D document.getElementsByTagName("object");=0A=
	for (i =3D 0; i < flashObjects.length; i++) {=0A=
		flashObjects[i].style.visibility =3D "visible";=0A=
	}=0A=
=0A=
	var flashEmbeds =3D document.getElementsByTagName("embed");=0A=
	for (i =3D 0; i < flashEmbeds.length; i++) {=0A=
		flashEmbeds[i].style.visibility =3D "visible";=0A=
	}=0A=
=0A=
}=0A=
=0A=
//=0A=
// pause(numberMillis)=0A=
// Pauses code execution for specified time. Uses busy code, not good.=0A=
// Help from Ran Bar-On [ran2103@gmail.com]=0A=
//=0A=
=0A=
function pause(ms){=0A=
	var date =3D new Date();=0A=
	curDate =3D null;=0A=
	do{var curDate =3D new Date();}=0A=
	while( curDate - date < ms);=0A=
}=0A=
/*=0A=
function pause(numberMillis) {=0A=
	var curently =3D new Date().getTime() + sender;=0A=
	while (new Date().getTime();	=0A=
}=0A=
*/=0A=
// ---------------------------------------------------=0A=
=0A=
=0A=
=0A=
function initLightbox() { myLightbox =3D new Lightbox(); }=0A=
Event.observe(window, 'load', initLightbox, false);
------=_NextPart_000_0000_01CACB36.188D8200
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_000D_01CACB36.188D8200"


------=_NextPart_001_000D_01CACB36.188D8200
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.reynaers.com/RR6/po.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML><HEAD><TITLE>Reynaers report</TITLE>
<META content=3D"text/html; charset=3DISO-8859-1" =
http-equiv=3DContent-Type>
<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18876"></HEAD>
<BODY=20
style=3D"PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #d3d3d3; MARGIN: 0px 5px =
0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: =
0px"><IFRAME=20
style=3D"WIDTH: 100%; HEIGHT: 800px; OVERFLOW: hidden" id=3Diframe=20
src=3D"http://reynaers.e-publications.eu/RR6/po/"=20
name=3Diframe></IFRAME></BODY></HTML>

------=_NextPart_001_000D_01CACB36.188D8200
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reynaers.e-publications.eu/RR6/po/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang=3Den xml:lang=3D"en" =
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>iBrochure - Your =
online Flippingbook</TITLE>
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META name=3Dkeywords=20
content=3D"virtual, paper, multimedia, interactive, flashbrochure, =
ibrochure, ebrochure, i-brochure, digital publication, e-catalogue, =
online magazine, e-publication, webmagazine, webpublication, flipbook, =
flippingbook">
<META name=3Ddescription=20
content=3D"iBrochure - Your interactive flippingbook - Pageflip =
solution">
<STYLE type=3Dtext/css>BODY {
	MARGIN: 0px
}
</STYLE>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://reynaers.e-publications.eu/RR6/po/ibrochure/swfobject.js"><=
/SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
			var flashvars =3D {};=0A=
			var params =3D {};=0A=
			=0A=
			params.scale =3D "noscale";=0A=
			params.salign =3D "";=0A=
			params.wmode =3D "transparent";=0A=
			params.allowscriptaccess =3D "samedomain";=0A=
			params.allowfullscreen =3D "true";=0A=
			params.menu =3D "true";=0A=
			params.bgcolor =3D "#000000";=0A=
=0A=
			var attributes =3D {};=0A=
			=
swfobject.embedSWF("ibrochure/medium.swf?"+Math.round(Math.random()*10000=
), "PageFlipDiv", "100%", "100%", "9.0.0", false, flashvars, params, =
attributes);=0A=
		</SCRIPT>
<LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://reynaers.e-publications.eu/RR6/po/ibrochure/lightbox.css" =

media=3Dscreen>
<SCRIPT type=3Dtext/javascript=20
src=3D"http://reynaers.e-publications.eu/RR6/po/ibrochure/prototype.js"><=
/SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://reynaers.e-publications.eu/RR6/po/ibrochure/scriptaculous.j=
s?load=3Deffects"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://reynaers.e-publications.eu/RR6/po/ibrochure/lightbox++.js">=
</SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
      function GroupDelegate(id) {=0A=
         var objLink =3D document.getElementById(id);=0A=
         Lightbox.prototype.start(objLink);=0A=
      }=0A=
      function LightboxDelegate(url,caption) {=0A=
      	 var objLink =3D document.createElement('a');=0A=
		 objLink.setAttribute('href',url);=0A=
		 objLink.setAttribute('rel','lightbox');=0A=
		 objLink.setAttribute('title',caption);=0A=
		 Lightbox.prototype.start(objLink);=0A=
	  }=0A=
      </SCRIPT>

<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18876"></HEAD>
<BODY style=3D"TEXT-ALIGN: center" bgColor=3D#f0f0f0>
<DIV id=3DPageFlipDiv><A =
href=3D"http://www.adobe.com/go/getflashplayer"><IMG=20
alt=3D"Get Adobe Flash player"=20
src=3D"http://www.adobe.com/images/shared/download_buttons/get_flash_play=
er.gif">=20
</A></DIV>
<SCRIPT language=3DJavaScript>=0A=
cnsd=3Ddocument;cnsd.cookie=3D'b=3Db';cnsc=3Dcnsd.cookie?1:0;=0A=
cnst=3Descape(cnsd.title);cnst=3Dcnst.replace(/\+/g,'%2B');=0A=
cnsa=3Dnavigator.appName;=0A=
cnsn=3D(cnsa.substring(0,2)=3D=3D'Mi')?0:1;cnss=3Dscreen;cnspx=3D(cnsn=3D=
=3D0)?cnss.colorDepth:cnss.pixelDepth;=0A=
document.write('<img =
src=3D"http://www.vandebroeck.be/cnstats/cntg.php?c=3D'+cnsc+'&e=3D'+cnss=
.width+'.'+cnss.height+'&d=3D'+cnspx+'&r=3D'+escape(cnsd.referrer)+'&p=3D=
'+escape(cnsd.location)+'&t=3D'+cnst+'" width=3D"1" height=3D"1" =
border=3D"0">');=0A=
</SCRIPT>
</BODY></HTML>

------=_NextPart_001_000D_01CACB36.188D8200--

------=_NextPart_000_0000_01CACB36.188D8200--

