From: <Enregistré par Windows Internet Explorer 7>
Subject: =?Windows-1252?Q?reflexions_-_Tumeurs_de_l=92hypophyse:_la_chasse_aux_g?=
	=?Windows-1252?Q?=E8nes_est_ouverte=A0!?=
Date: Wed, 16 Mar 2011 11:17:59 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CBE3CB.CEA46E60"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3664

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-chasse-aux-genes-est-ouverte?part=1

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML lang=3Dfr dir=3Dltr xmlns=3D"http://www.w3.org/1999/xhtml"=20
xml:lang=3D"fr"><HEAD><TITLE>reflexions - Tumeurs de =
l=E2=80=99hypophyse: la chasse aux g=C3=A8nes est ouverte=C2=A0!</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3DUTF-8">
<META http-equiv=3DCache-Control content=3Dno-cache>
<META http-equiv=3DPragma content=3Dno-cache>
<META http-equiv=3DExpires content=3D-1>
<META http-equiv=3DX-UA-Compatible content=3DIE=3D7>
<META content=3D"MSHTML 6.00.6000.17063" name=3DGENERATOR>
<META=20
content=3D"vulgarisation scientifique reflexions article =
universit=EF=BF=BD li=EF=BF=BDge belgique source savoir segi =
connaissance, Vivant,Biologie,M=C3=A9decine"=20
name=3Dkeywords>
<META=20
content=3D"Source de Savoirs Des chercheurs li=C3=A9geois traquent les =
g=C3=A8nes qui pr=C3=A9disposent aux tumeurs de l&amp;apos;hypophyse. =
Une t=C3=A2che importante puisque les hormones hypophysaires =
r=C3=A9gulent une grande partie des fonctions du syst=C3=A8me =
endocrinien."=20
name=3Ddescription><LINK media=3Dall=20
href=3D"http://reflexions.ulg.ac.be/css/csspacker.jsp?css=3Dcss/jalios/ch=
annel.css&amp;css=3Dcss/custom.css&amp;css=3Dcss/custom_fo.css"=20
type=3Dtext/css rel=3Dstylesheet><LINK media=3Dall=20
href=3D"http://reflexions.ulg.ac.be/css/portal/reflexions.css" =
type=3Dtext/css=20
rel=3Dstylesheet>
<SCRIPT language=3DJavaScript=20
src=3D"http://reflexions.ulg.ac.be/js/jalios/languages/fr.js"=20
type=3Dtext/JavaScript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://reflexions.ulg.ac.be/js/jspacker.jsp?js=3Djs/lib/jsonrpc.js=
&amp;js=3Djs/lib/prototype.js&amp;js=3Djs/lib/cookies.js&amp;js=3Djs/lib/=
swfobject.js&amp;js=3Djs/lib/builder.js&amp;js=3Djs/lib/effects.js&amp;js=
=3Djs/lib/dragdrop.js&amp;js=3Djs/lib/controls.js&amp;js=3Djs/lib/slider.=
js&amp;js=3Djs/calendar/calendar.js&amp;js=3Djs/calendar/lang/calendar-fr=
.js&amp;js=3Djs/calendar/calendar-setup.js&amp;js=3Djs/jalios/util.js"=20
type=3Dtext/JavaScript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://reflexions.ulg.ac.be/js/channel.js?contextPath=3D"=20
type=3Dtext/JavaScript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://reflexions.ulg.ac.be/js/jspacker.jsp?js=3Djs/tabpane.js&amp=
;js=3Djs/tree.js&amp;js=3Djs/treegroup.js&amp;js=3Djs/widget.js&amp;js=3D=
js/treecat.js&amp;js=3Djs/jalios/widget/autocomplete.js&amp;js=3Djs/jalio=
s/textarea-resizer.js&amp;js=3Djs/custom.js"=20
type=3Dtext/JavaScript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://reflexions.ulg.ac.be/js/jspacker.jsp?js=3Djs/custom.js&amp;=
js=3Djs/custom_fo.js"=20
type=3Dtext/JavaScript></SCRIPT>

<SCRIPT language=3DJavaScript src=3D"" type=3Dtext/JavaScript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://reflexions.ulg.ac.be/types/PortletNavigate/portletNavigateV=
ertical.js"=20
type=3Dtext/JavaScript></SCRIPT>
<LINK href=3D"custom/ulg/logo2.ico" rel=3D"shortcut icon"><LINK=20
href=3D"http://reflexions.ulg.ac.be/images/custom/logoFB.jpg" =
rel=3Dimage_src>
<META content=3D"Tumeurs de l=E2=80=99hypophyse: la chasse aux =
g=C3=A8nes est ouverte&nbsp;!"=20
name=3Dtitle><LINK title=3D"reflexions - Accueil RSS (Rss1)"=20
href=3D"feed/Rss1.jsp?id=3Dj_8429" type=3Dapplication/rss+xml =
rel=3Dalternate><LINK=20
title=3D"reflexions - Accueil RSS (Rss2)" =
href=3D"feed/Rss2.jsp?id=3Dj_8429"=20
type=3Dapplication/rss+xml rel=3Dalternate><LINK=20
href=3D"http://reflexions.ulg.ac.be/plugins/PluginVideoQuickTime/highslid=
e/highslide.css"=20
type=3Dtext/css rel=3Dstylesheet>
<STYLE type=3Dtext/css>IMG {
	BEHAVIOR: url(plugins/PluginVideoQuickTime/js/iepngfix/iepngfix.htc)
}
</STYLE>

<SCRIPT language=3DJavaScript=20
src=3D"http://reflexions.ulg.ac.be/plugins/PluginVideoQuickTime/js/plugin=
Videos.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://reflexions.ulg.ac.be/plugins/PluginVideoQuickTime/highslide=
/highslide-with-html.packed.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
	// override Highslide settings here instead of editing the highslide.js =
file=0A=
	hs.graphicsDir =3D 'plugins/PluginVideoQuickTime/highslide/graphics/';=0A=
	hs.objectLoadTime =3D 'after';=0A=
	hs.showCredits =3D false;=0A=
</SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
var gaJsHost =3D (("https:" =3D=3D document.location.protocol) ? =
"https://ssl." : "http://www.");=0A=
document.write(unescape("%3Cscript src=3D'" + gaJsHost + =
"google-analytics.com/ga.js' type=3D'text/javascript'%3E%3C/script%3E"));=0A=
</SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
var pageTracker =3D _gat._getTracker("UA-6594747-2");=0A=
pageTracker._initData();=0A=
pageTracker._trackPageview();=0A=
</SCRIPT>
</HEAD>
<BODY><A name=3Dtop></A>
<DIV class=3D"Outter PortletPortal ID_j_5425 Inner">
<DIV=20
class=3D"Outter PortletJspCollection ID_j_5424 Portlet PortletCollection =
Inner"=20
style=3D"VERTICAL-ALIGN: middle; TEXT-ALIGN: left">
<DIV=20
class=3D"Outter PortletJspCollection ID_c_5245 Portlet PortletCollection =
Inner"=20
style=3D"VERTICAL-ALIGN: middle; TEXT-ALIGN: left">
<DIV style=3D"Z-INDEX: 23; POSITION: relative" align=3Dcenter =
valign=3D"top">
<TABLE height=3D"100%" cellSpacing=3D0 cellPadding=3D0 width=3D990 =
border=3D0>
  <TBODY>
  <TR>
    <TD vAlign=3Dcenter align=3Dmiddle height=3D100>
      <TABLE height=3D100 cellSpacing=3D0 cellPadding=3D0 width=3D970 =
border=3D0>
        <TBODY>
        <TR>
          <TD width=3D280><A =
href=3D"http://reflexions.ulg.ac.be/index.jsp"=20
            target=3D_parent><IMG class=3Dalt=20
            alt=3D"Reflexions | ULg, source de savoirs"=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/logo.gif"=20
            border=3D0></A></TD>
          <TD vAlign=3Dbottom align=3Dleft width=3D516><IMG class=3Dalt=20
            alt=3D"Reflexions | ULg, source de savoirs"=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/slogan.gif"=20
            border=3D0>
            <DIV=20
            class=3D"Outter PortletNavigate ID_c_5258 Portlet =
PortletSkinable Inner"=20
            style=3D"MARGIN: 10px 0px; VERTICAL-ALIGN: middle; =
TEXT-ALIGN: left"><A=20
            class=3Dheader =
href=3D"http://reflexions.ulg.ac.be/cms/c_5059/agenda"=20
            target=3D_parent>Agenda</A> <A class=3Dheader=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_5061/repertoire-des-chercheurs"=
=20
            target=3D_parent>R=C3=A9pertoire des chercheurs</A> <A =
class=3Dheader=20
            href=3D"http://reflexions.ulg.ac.be/cms/c_5060/glossaire"=20
            target=3D_parent>Glossaire</A> </DIV></TD>
          <TD vAlign=3Dbottom align=3Dright width=3D174><A=20
            href=3D"http://www.ulg.ac.be/" target=3D_blank><IMG=20
            alt=3D"ULg, Universit=C3=A9 de Li=C3=A8ge"=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/ulg.gif"=20
            border=3D0></A></TD></TR></TBODY></TABLE></TD></TR>
  <TR>
    <TD vAlign=3Dtop align=3Dmiddle height=3D50>
      <TABLE height=3D50 cellSpacing=3D0 cellPadding=3D0 width=3D970 =
border=3D0>
        <TBODY>
        <TR vAlign=3Dtop>
          <TD align=3Dleft width=3D140 height=3D40><A=20
            =
onmouseover=3D"MM_swapImage('terre','','images/custom/menu/bt_terre_on.gi=
f',1)"=20
            onmouseout=3DMM_swapImgRestore()=20
            href=3D"http://reflexions.ulg.ac.be/display.jsp?id=3Dc_5001" =

            target=3D_parent><IMG class=3Dalt title=3DTerre height=3D50 =
alt=3DTerre=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/bt_terre_off.gif"=20
            width=3D130 border=3D0 name=3Dterre></A></TD>
          <TD align=3Dleft width=3D140 height=3D40><A=20
            =
onmouseover=3D"MM_swapImage('espace','','images/custom/menu/bt_espace_on.=
gif',1)"=20
            onmouseout=3DMM_swapImgRestore()=20
            href=3D"http://reflexions.ulg.ac.be/display.jsp?id=3Dc_5002" =

            target=3D_parent><IMG class=3Dalt title=3DEspace height=3D50 =
alt=3DEspace=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/bt_espace_off.gif" =

            width=3D130 border=3D0 name=3Despace></A></TD>
          <TD align=3Dleft width=3D140 height=3D40><A=20
            =
onmouseover=3D"MM_swapImage('vivant','','images/custom/menu/bt_vivant_on.=
gif',1)"=20
            onmouseout=3DMM_swapImgRestore()=20
            href=3D"http://reflexions.ulg.ac.be/display.jsp?id=3Dc_5003" =

            target=3D_parent><IMG class=3Dalt title=3DVivant height=3D50 =
alt=3DVivant=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/bt_vivant_on.gif"=20
            width=3D130 border=3D0 name=3Dvivant></A></TD>
          <TD align=3Dleft width=3D140 height=3D40><A=20
            =
onmouseover=3D"MM_swapImage('pensee','','images/custom/menu/bt_pensee_on.=
gif',1)"=20
            onmouseout=3DMM_swapImgRestore()=20
            href=3D"http://reflexions.ulg.ac.be/display.jsp?id=3Dc_5004" =

            target=3D_parent><IMG class=3Dalt title=3DPens=C3=A9e =
height=3D50 alt=3DPens=C3=A9e=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/bt_pensee_off.gif" =

            width=3D130 border=3D0 name=3Dpensee></A></TD>
          <TD align=3Dleft width=3D140 height=3D40><A=20
            =
onmouseover=3D"MM_swapImage('societe','','images/custom/menu/bt_societe_o=
n.gif',1)"=20
            onmouseout=3DMM_swapImgRestore()=20
            href=3D"http://reflexions.ulg.ac.be/display.jsp?id=3Dc_5005" =

            target=3D_parent><IMG class=3Dalt title=3DSoci=C3=A9t=C3=A9 =
height=3D50 alt=3DSoci=C3=A9t=C3=A9=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/bt_societe_off.gif"=
=20
            width=3D130 border=3D0 name=3Dsociete></A></TD></A></TD>
          <TD align=3Dleft width=3D140 height=3D40><A=20
            =
onmouseover=3D"MM_swapImage('sciences','','images/custom/menu/bt_sciences=
_on.gif',1)"=20
            onmouseout=3DMM_swapImgRestore()=20
            href=3D"http://reflexions.ulg.ac.be/display.jsp?id=3Dc_5006" =

            target=3D_parent><IMG class=3Dalt title=3DSciences =
height=3D50 alt=3DSciences=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/bt_sciences_off.gif=
"=20
            width=3D130 border=3D0 name=3Dsciences></A></TD>
          <TD align=3Dleft width=3D130 height=3D40><A=20
            =
onmouseover=3D"MM_swapImage('technologie','','images/custom/menu/bt_techn=
ologie_on.gif',1)"=20
            onmouseout=3DMM_swapImgRestore()=20
            href=3D"http://reflexions.ulg.ac.be/display.jsp?id=3Dc_5007" =

            target=3D_parent><IMG class=3Dalt title=3DSoci=C3=A9t=C3=A9 =
height=3D50=20
            alt=3DTechnologie=20
            =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/bt_technologie_off.=
gif"=20
            width=3D130 border=3D0 =
name=3Dtechnologie></A></TD></TR></TBODY></TABLE></TD></TR>
  <TR>
    <TD vAlign=3Dtop align=3Dmiddle height=3D50>
      <TABLE height=3D30 cellSpacing=3D0 cellPadding=3D0 width=3D970 =
border=3D0>
        <TBODY>
        <TR vAlign=3Dtop>
          <TD class=3Dlanguage width=3D485>
            <DIV style=3D"FLOAT: right"></DIV><A class=3Dlanguage=20
            href=3D"http://reflexions.ulg.ac.be/index.jsp" =
target=3D_parent>ACCUEIL=20
            </A>| <A class=3Dlanguage=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D1&amp;PortalAction_x_000_userLang=3De=
n"=20
            target=3D_parent>ENGLISH</A> </TD>
          <TD class=3Dsearch width=3D485>
            <DIV=20
            class=3D"Outter PortletSearch ID_j_5638 Portlet =
PortletSkinable Inner"=20
            style=3D"VERTICAL-ALIGN: middle; TEXT-ALIGN: left">
            <FORM class=3DnoSingleSubmitButton name=3Dsearch =
action=3Dfront/query.jsp=20
            method=3Dget>
            <TABLE cellSpacing=3D0 cellPadding=3D2 align=3Dright =
border=3D0>
              <TBODY>
              <TR>
                <TD vAlign=3Dcenter><A class=3Dlanguage=20
                  =
href=3D"http://reflexions.ulg.ac.be/front/search.jsp?id=3Dj_5722"><SPAN=20
                  class=3DTitle>RECHERCHE</SPAN></A> <INPUT class=3Dform =

                  alt=3DRECHERCHE name=3Dtext> <INPUT type=3Dhidden=20
                  value=3Dgenerated.Agenda name=3Dtypes> <INPUT =
type=3Dhidden=20
                  value=3Dgenerated.Article name=3Dtypes> <INPUT =
type=3Dhidden=20
                  value=3Dgenerated.FicheChercheur name=3Dtypes> <INPUT =
type=3Dhidden=20
                  value=3Dgenerated.PageFixe name=3Dtypes> <INPUT =
type=3Dhidden=20
                  value=3Dcom.jalios.jcms.Review name=3DtypesOff> <INPUT =
type=3Dhidden=20
                  value=3Dgenerated.SmallNews name=3DtypesOff> <INPUT =
type=3Dhidden=20
                  value=3Dcom.jalios.jcms.FileDocument name=3DtypesOff> =
<INPUT=20
                  type=3Dhidden value=3Dgenerated.CalendarEvent =
name=3DtypesOff>=20
                  <INPUT type=3Dhidden value=3Dgenerated.Faq =
name=3DtypesOff> <INPUT=20
                  type=3Dhidden value=3Dgenerated.FaqEntry =
name=3DtypesOff> <INPUT=20
                  type=3Dhidden value=3Dgenerated.Forum name=3DtypesOff> =
<INPUT=20
                  type=3Dhidden value=3Dgenerated.ForumDiscussion =
name=3DtypesOff>=20
                  <INPUT type=3Dhidden value=3Dgenerated.ForumMessage =
name=3DtypesOff>=20
                  <INPUT type=3Dhidden value=3Dgenerated.ImageReflexion=20
                  name=3DtypesOff> <INPUT type=3Dhidden =
value=3Dgenerated.Interview=20
                  name=3DtypesOff> <INPUT type=3Dhidden=20
                  value=3Dgenerated.PhotoDeGroupe name=3DtypesOff> =
<INPUT=20
                  type=3Dhidden value=3Dgenerated.Poll name=3DtypesOff> =
<INPUT=20
                  type=3Dhidden value=3Dgenerated.Streaming =
name=3DtypesOff> <INPUT=20
                  type=3Dhidden value=3Dgenerated.VideoQuickTime =
name=3DtypesOff>=20
                  <INPUT type=3Dhidden value=3Dgenerated.WebPage =
name=3DtypesOff>=20
                  <INPUT type=3Dhidden value=3Dtrue name=3DtextSearch> =
<INPUT=20
                  type=3Dhidden value=3D0 name=3Dpstatus> <INPUT =
type=3Dhidden=20
                  value=3Dj_5722 name=3Did> </TD>
                <TD vAlign=3Dcenter>&nbsp;<INPUT id=3DopSearch =
type=3Dimage alt=3DOk=20
                  =
src=3D"http://reflexions.ulg.ac.be/images/jalios/icons/ok.gif"=20
                  align=3Dmiddle=20
        =
name=3DopSearch></TD></TR></TBODY></TABLE></FORM></DIV></TD></TR></TBODY>=
</TABLE></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV align=3Dcenter valign=3D"top">
<TABLE height=3D"100%" cellSpacing=3D0 cellPadding=3D0 width=3D970 =
border=3D0=20
valign=3D"top">
  <TBODY>
  <TR vAlign=3Dtop>
    <TD class=3Dmenu width=3D130 rowSpan=3D2>
      <DIV=20
      class=3D"Outter PortletNavigate ID_j_5441 Portlet PortletSkinable =
Inner"=20
      style=3D"VERTICAL-ALIGN: middle; TEXT-ALIGN: left">
      <DIV class=3DverticalMenu>
      <UL class=3DmenuUl>
        <LI class=3DmenuLi><A class=3Dmenu=20
        href=3D"http://reflexions.ulg.ac.be/cms/c_22759/agronomie"><SPAN =

        class=3D"">Agronomie</SPAN></A>
        <LI class=3DmenuLi><A class=3Dmenu=20
        href=3D"http://reflexions.ulg.ac.be/cms/c_5014/biologie"><SPAN=20
        class=3DcurrentCat>Biologie</SPAN></A>
        <LI class=3DmenuLi><A class=3Dmenu=20
        href=3D"http://reflexions.ulg.ac.be/cms/c_7410/botanique"><SPAN=20
        class=3D"">Botanique</SPAN></A>
        <LI class=3DmenuLi><A class=3Dmenu=20
        =
href=3D"http://reflexions.ulg.ac.be/cms/c_8810/dentisterie"><SPAN=20
        class=3D"">Dentisterie</SPAN></A>
        <LI class=3DmenuLi><A class=3Dmenu=20
        href=3D"http://reflexions.ulg.ac.be/cms/c_5015/medecine"><SPAN=20
        class=3DcurrentCat>M=C3=A9decine</SPAN></A>
        <LI class=3DmenuLi><A class=3Dmenu=20
        =
href=3D"http://reflexions.ulg.ac.be/cms/c_5016/medecine-veterinaire"><SPA=
N=20
        class=3D"">M=C3=A9decine v=C3=A9t=C3=A9rinaire</SPAN></A>
        <LI class=3DmenuLi><A class=3Dmenu=20
        =
href=3D"http://reflexions.ulg.ac.be/cms/c_7415/paleontologie"><SPAN=20
        class=3D"">Pal=C3=A9ontologie</SPAN></A>
        <LI class=3DmenuLi><A class=3Dmenu=20
        href=3D"http://reflexions.ulg.ac.be/cms/c_8811/pharmacie"><SPAN=20
        class=3D"">Pharmacie</SPAN></A>
        <LI class=3DmenuLi><A class=3Dmenu=20
        href=3D"http://reflexions.ulg.ac.be/cms/c_7414/zoologie"><SPAN=20
        class=3D"">Zoologie</SPAN></A></LI></UL></DIV></DIV>
      <DIV=20
      class=3D"Outter PortletJspCollection ID_j_5499 Portlet =
PortletCollection Inner"=20
      style=3D"VERTICAL-ALIGN: middle; TEXT-ALIGN: left">
      <DIV align=3Dcenter valign=3D"top"><IMG height=3D197=20
      =
src=3D"http://reflexions.ulg.ac.be/upload/docs/image/jpeg/i_vivant.jpg"=20
      width=3D130> </DIV></DIV></TD>
    <TD width=3D10>&nbsp;</TD>
    <TD class=3Dcontentarticle>
      <DIV=20
      class=3D"Outter PortletNavigate ID_j_5542 Portlet PortletSkinable =
Inner"=20
      style=3D"VERTICAL-ALIGN: middle; TEXT-ALIGN: left"><A =
class=3DtrailerC2=20
      href=3D"http://reflexions.ulg.ac.be/cms/c_5003/vivant">Vivant</A> =
</DIV>
      <DIV=20
      class=3D"Outter PortletSelection ID_j_5513 Portlet =
PortletCollection Inner"=20
      style=3D"VERTICAL-ALIGN: top; TEXT-ALIGN: left">
      <DIV>
      <DIV class=3DdisplayHeaderToolbar style=3D"FLOAT: left"></DIV>
      <DIV style=3D"CLEAR: both"></DIV></DIV>
      <TABLE height=3D"100%" cellSpacing=3D0 cellPadding=3D0 width=3D810 =
border=3D0>
        <TBODY>
        <TR vAlign=3Dtop>
          <TD class=3Darticle width=3D670>
            <DIV class=3Dtest2>
            <P><SPAN class=3DtitArticle>Tumeurs de l=E2=80=99hypophyse: =
la chasse aux=20
            g=C3=A8nes est ouverte&nbsp;!<BR></SPAN><SPAN=20
            class=3DdateArticle>01/03/11</SPAN> </P>
            <P class=3Darticle></P>
            <DIV class=3D"wysiwyg classic">
            <P align=3Djustify><STRONG>Les hormones hypophysaires =
r=C3=A9gulent une=20
            grande partie des fonctions du syst=C3=A8me endocrinien. =
Lorsqu=E2=80=99une=20
            tumeur se d=C3=A9clare au niveau de l=E2=80=99hypophyse, les =
cons=C3=A9quences sur=20
            l=E2=80=99organisme peuvent donc =C3=AAtre multiples. Albert =
Beckers =C3=A9tudie les=20
            ad=C3=A9nomes hypophysaires et a d=C3=A9crit une nouvelle =
forme h=C3=A9r=C3=A9ditaire de=20
            ces affections, le FIPA. Il est aujourd=E2=80=99hui sur la =
piste de g=C3=A8nes de=20
            pr=C3=A9disposition =C3=A0 ces =
tumeurs.</STRONG><BR><BR>=C3=80<IMG height=3D628=20
            alt=3DG=C3=A9ants hspace=3D15=20
            =
src=3D"http://reflexions.ulg.ac.be/upload/docs/image/jpeg/2011-02/geants.=
jpg"=20
            width=3D400 align=3Dright vspace=3D10> l=E2=80=99image du =
sympathique Hagrid dans=20
            la saga =C2=AB&nbsp;Harry Potter&nbsp;=C2=BB, les =
g=C3=A9ants prennent le plus=20
            souvent vie lorsqu=E2=80=99on se plonge dans un film =
fantastique ou lors de=20
            la lecture d=E2=80=99un conte pour enfants. Mais pas =
seulement&nbsp;! En=20
            effet, le gigantisme est un syndrome rare survenant chez =
l=E2=80=99enfant ou=20
            l'adolescent et qui se caract=C3=A9rise par une taille =
largement=20
            sup=C3=A9rieure =C3=A0 la normale. Ce syndrome est d=C3=BB =
=C3=A0 un ad=C3=A9nome, une tumeur=20
            b=C3=A9nigne, apparaissant au niveau de l=E2=80=99<A=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31270/hypophyse">hypophyse</A> =

            chez l=E2=80=99enfant ou l'adolescent. Plus =
pr=C3=A9cis=C3=A9ment, il s=E2=80=99agit d=E2=80=99un=20
            ad=C3=A9nome somatotrope, c=E2=80=99est-=C3=A0-dire qui =
touche un certain type de=20
            cellules hypophysaires appel=C3=A9es somatotropes et qui =
engendre une=20
            hypers=C3=A9cr=C3=A9tion d=E2=80=99<A=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_11473/hormone">hormones</A>=20
            de croissance. Lorsque cette maladie se d=C3=A9clare chez =
l=E2=80=99adulte, elle=20
            provoque alors une acrom=C3=A9galie, soit une augmentation =
anormale de la=20
            taille des tissus mous, des pieds, des mains et une =
d=C3=A9formation du=20
            visage...</P>
            <P align=3Djustify>B=C3=A9nins dans la majorit=C3=A9 des =
cas, les ad=C3=A9nomes=20
            hypophysaires sont des tumeurs qui se d=C3=A9veloppent au =
niveau de=20
            l=E2=80=99hypophyse. Egalement appel=C3=A9e =
=C2=AB&nbsp;glande pituitaire&nbsp;=C2=BB,=20
            cette derni=C3=A8re est une glande <A=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_27245/endocrine">endocrine</A> =

            situ=C3=A9e =C3=A0 la base du cerveau et est responsable de =
la s=C3=A9cr=C3=A9tion de=20
            nombreuses hormones indispensables au bon d=C3=A9veloppement =
et=20
            fonctionnement de l=E2=80=99organisme. Elle a longtemps =
=C3=A9t=C3=A9 consid=C3=A9r=C3=A9e comme=20
            le chef d=E2=80=99orchestre du syst=C3=A8me endocrinien en =
raison de son activit=C3=A9=20
            de r=C3=A9gulation de fonctions telles que la croissance, la =
lactation,=20
            la reproduction, l=E2=80=99activit=C3=A9 des <A=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31267/glandes-surrenales">gland=
es=20
            surr=C3=A9nales </A>et de la <A=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31265/glande-thyroide">glande=20
            thyro=C3=AFde</A> etc. Si les scientifiques ont depuis =
longtemps=20
            d=C3=A9couvert que l=E2=80=99hypophyse est elle-m=C3=AAme =
r=C3=A9gul=C3=A9e par les hormones=20
            provenant de l=E2=80=99<A=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_27402/hypothalamus">hypothalamu=
s</A>,=20
            son r=C3=B4le n=E2=80=99en est pas moins crucial. Elle est =
compos=C3=A9e de nombreux=20
            types cellulaires qui s=C3=A9cr=C3=A8tent chacun une ou =
plusieurs hormones.=20
            Parmi celles-ci on compte notamment l=E2=80=99hormone de =
croissance (GH), la=20
            prolactine (PRL), l=E2=80=99hormone follico-stimulante =
(FSH), l=E2=80=99hormone=20
            lut=C3=A9inisante (LH), la thyr=C3=A9ostimuline (TSH) et =
l=E2=80=99hormone=20
            adr=C3=A9nocorticotrope (ACTH).&nbsp; </P></DIV>
            <P></P></DIV></TD>
          <TD class=3Dauteur width=3D140>
            <TABLE cellSpacing=3D0 cellPadding=3D0 width=3D140 =
border=3D0>
              <TBODY>
              <TR vAlign=3Dtop>
                <TD colSpan=3D3>
                  <P class=3Dauteur>Article r=C3=A9dig=C3=A9 par =
:<BR><SPAN=20
                  style=3D"FONT-WEIGHT: bold; COLOR: #0084bd">Audrey =
Binet</SPAN>=20
                  <BR></A></P>
                  <P class=3Dauteur>D'apr=C3=A8s les recherches de =
:<BR><A class=3Dauteur=20
                  =
href=3D"http://reflexions.ulg.ac.be/cms/c_31264/beckers-albert">Albert=20
                  Beckers</A><BR></P></TD></TR>
              <TR>
                <TD colSpan=3D3><IMG class=3Dauteur alt=3D""=20
                  =
src=3D"http://reflexions.ulg.ac.be/upload/docs/image/jpeg/2011-02/th-120x=
100-abeckers_groupe.jpg.jpg">=20
                </TD></TR>
              <TR>
                <TD class=3DtxtLegende colSpan=3D3></TD></TR>
              <TR>
                <TD colSpan=3D3>
                  <P class=3Dauteur><IMG class=3Dfilet=20
                  =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/filet_auteur.gif"> =

                  <A class=3Dinfo=20
                  =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D1&amp;fct=3Dlink">Lectures=20
                  utiles</A><BR><A class=3Dinfo=20
                  =
href=3D"http://reflexions.ulg.ac.be/display.jsp?id=3Dj_5571&amp;jsp=3Dtyp=
es/Avis/editFormAvis.jsp&amp;langue=3Dfr&amp;article=3Dc_31271">Votre=20
                  avis</A><BR><A class=3Dinfo=20
                  =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D1&amp;fct=3Davis">Tous=20
                  les avis</A> </P></TD></TR>
              <TR>
                <TD vAlign=3Dbottom align=3Dmiddle colSpan=3D3 =
height=3D16><IMG=20
                  =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/filet_auteur.gif"><=
/TD></TR>
              <TR>
                <TD width=3D10>&nbsp;</TD>
                <TD class=3Ddocument width=3D120><A class=3Dprint=20
                  =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D1&amp;portal=3Dj_55&amp;printView=3Dt=
rue"=20
                  target=3D_BLANK>Impression</A><BR><A class=3Dpdf=20
                  =
href=3D"http://reflexions.ulg.ac.be/PDFServlet?id=3Dc_31271&amp;lang=3Dfr=
&amp;html=3Dtrue">Article=20
                  en pdf</A><BR><A class=3Dmail=20
                  =
href=3D"http://reflexions.ulg.ac.be/admin/mail/mailPublication.jsp?id=3Dc=
_31271&amp;fct=3Dmail&amp;redirect=3Dcms%2Fc_31271%2Ftumeurs-de-lhypophys=
e-la-chasse-aux-genes-est-ouverte">Envoi=20
                  par mail</A> <BR>
                  <TABLE>
                    <TBODY>
                    <TR>
                      <TD><A class=3Dfbtwitter=20
                        href=3D"http://www.facebook.com/sharer.php" =
type=3Dicon_link=20
                        name=3Dfb_share=20
                        =
share_url=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophys=
e-la-chasse-aux-genes-est-ouverte"><IMG=20
                        alt=3Dfb=20
                        =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/puce_fb.png"></A></=
TD>
                      <TD style=3D"VERTICAL-ALIGN: top"><A =
class=3Dfbtwitter=20
                        =
onclick=3D"javascript:pageTracker._trackPageview('/outbound/twitter.com')=
;"=20
                        =
href=3D"http://twitter.com/home?status=3Dhttp://reflexions.ulg.ac.be/cms/=
c_31271/tumeurs-de-lhypophyse-la-chasse-aux-genes-est-ouverte"=20
                        target=3D_blank><IMG alt=3Dtw=20
                        =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/puce_tw.png"></A></=
TD>
                      <TD=20
                    style=3D"VERTICAL-ALIGN: =
top"><SPAN>Partager</SPAN></TD></TR></TBODY></TABLE>
                  <SCRIPT=20
                  =
src=3D"http://static.ak.fbcdn.net/connect.php/js/FB.Share"=20
                  type=3Dtext/javascript></SCRIPT>
                </TD>
                <TD width=3D10>&nbsp;</TD></TR>
              <TR>
                <TD vAlign=3Dtop align=3Dmiddle colSpan=3D3 =
height=3D10><IMG=20
                  =
src=3D"http://reflexions.ulg.ac.be/images/custom/menu/filet_auteur.gif"><=
/TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD class=3Dpage align=3Dright width=3D670>
            <P class=3Dpage>Page : <A class=3Dpageactive=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D1">1</A>=20
            <A class=3Dpage=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D2">2</A>=20
            <A class=3Dpage=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D3">3</A>=20
            <A class=3Dpage=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D4">4</A>=20
            <A class=3Dpage=20
            =
href=3D"http://reflexions.ulg.ac.be/cms/c_31271/tumeurs-de-lhypophyse-la-=
chasse-aux-genes-est-ouverte?part=3D2">suivante=20
            </A></P></TD>
          <TD width=3D140 =
bgColor=3D#333333></TD></TR></TBODY></TABLE></DIV>
      <DIV></DIV></TD></TR></TBODY></TABLE><BR><BR>
<DIV=20
class=3D"Outter PortletJspCollection ID_c_5334 Portlet PortletCollection =
Inner"=20
style=3D"VERTICAL-ALIGN: middle; TEXT-ALIGN: left">
<DIV align=3Dcenter>
<TABLE height=3D42 cellSpacing=3D0 cellPadding=3D0 width=3D970 =
border=3D0>
  <TBODY>
  <TR>
    <TD class=3Dcontact width=3D75>=C2=A9 2007 ULg</TD>
    <TD class=3Dcontact width=3D461 height=3D20>
      <DIV class=3D"JSS Outter PortletNavigate ID_j_5870 Portlet =
PortletSkinable">
      <DIV class=3DInner=20
      style=3D"VERTICAL-ALIGN: middle; TEXT-ALIGN: left">|&nbsp;<A =
class=3Dcontact=20
      href=3D"http://reflexions.ulg.ac.be/cms/c_5223/liens-utiles" =
target=3D_parent>=20
      Liens utiles </A>|&nbsp;<A class=3Dcontact=20
      href=3D"http://reflexions.ulg.ac.be/cms/c_5062/a-propos-du-site"=20
      target=3D_parent> A propos du site </A>|&nbsp;<A class=3Dcontact=20
      href=3D"http://reflexions.ulg.ac.be/cms/c_5224/plan-du-site" =
target=3D_parent>=20
      Plan du site </A>|&nbsp;<A class=3Dcontact=20
      href=3D"http://reflexions.ulg.ac.be/cms/c_5226/nous-contacter"=20
      target=3D_parent> Nous contacter </A>|&nbsp;<A class=3Dcontact=20
      href=3D"http://reflexions.ulg.ac.be/cms/c_5225/mentions-legales"=20
      target=3D_parent> Mentions l=C3=A9gales </A></DIV></DIV>
      <DIV align=3Dleft></DIV></TD>
    <TD class=3Ddesign width=3D445 height=3D20>Powered by <A =
class=3Ddesign=20
      href=3D"http://www.ulg.ac.be/segi" =
target=3D_blank>SEGI</A></TD></TR>
  <TR>
    <TD class=3Dfooter colSpan=3D3 height=3D22>
      <DIV class=3D"Outter PortletFeed ID_j_8429 Portlet PortletSkinable =
Inner"=20
      style=3D"FLOAT: right; MARGIN: 4px 0px 0px; VERTICAL-ALIGN: =
bottom; TEXT-ALIGN: right">
      <DIV><A =
href=3D"http://reflexions.ulg.ac.be/feed/Rss1.jsp?id=3Dj_8429"><IMG=20
      class=3DrssIcon alt=3Drss=20
      =
src=3D"http://reflexions.ulg.ac.be/images/jalios/icons/feed/Rss1.gif"></A=
>=20
      <A =
href=3D"http://reflexions.ulg.ac.be/feed/Rss2.jsp?id=3Dj_8429"><IMG=20
      class=3DrssIcon alt=3Drss=20
      =
src=3D"http://reflexions.ulg.ac.be/images/jalios/icons/feed/Rss2.gif"></A=
>=20
      =
</DIV></DIV></TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV></DIV></BOD=
Y></HTML>

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/logo.gif

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

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/slogan.gif

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

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/ulg.gif

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
92/gwYUPJ17c+HHkyZUvZ97c+XOKAQEAOw==

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/bt_terre_off.gif

R0lGODlhggAyALMPAICAgFpaWklJSVFRUXx8fERERF5eXlVVVU1NTXd3d2ZmZm1tbXNzc2JiYkBA
QP///yH5BAEAAA8ALAAAAACCADIAAAT/0MlJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iugwPg
/z/FbggrDI69BlJAbMYAAaf0GZ1aWdBJQUEAMA6SQ6KwAPQGBoJwUCYsmFdn1lFILAaCdDRAYCwC
BQALCQYIBwAGAggLBAVxTXMNCRR8DgEADRMAYxIEBhQMQo9DcwkNAqiKZpeOEogSCAAIqXmToztz
QEAHlxRzl7o+t7hVhBUCBb2aVT2tE3DDOHMKDBQ9AsquVQUEVRIKC9E5cwJuswdqlgC+3nyJCA1m
4tJgEgKMXp8Oh771YQwAzM0bSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQUOKHEky
xYOTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWr
PiMAADs=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/bt_espace_off.gif

R0lGODlhggAyALMPAICAgFFRUUlJSVpaWnx8fHd3d0RERF5eXnNzc2NjY29vb01NTVVVVWtra0BA
QP///yH5BAEAAA8ALAAAAACCADIAAAT/0MlJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iuh0Dv
94mdUAZIBI5IwXDpAgyY0JgzSm1NLwsFgaBQOgCBRAGAYEwEDQJAsZgYEuryJKAAEBreaupaMRAS
AgsNBQZfBQ0LAgMETw6HiXCFBgUKAYqMDgwAB4FphXooPz8Cmm5gXwoUBwQOAQCfX2ZiFLMEBxQI
QaAnRUhIDgIADQkHARObFAanAgKWrk8FtxSBAInMAgcFu7yNFgEIPgVtfBJOAWOUCVPkEgOiPtsm
7BKkwEcKCF/SEsrfXcfQ9gEr9qpCnngi5jlYACCPuy/5Jqz60u2Zg1kTEiDw0+1iKoQjpnr5suQA
AQJLDAoEsdPA0qInCgq4RGDLwKRK2E4t4rRAnTGQCd8VcfAmjjQnYsiYIZpmTU4zRcn8zASOSxug
NBRi3ap1K1AAS72KHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r98ODwILHky4sOHDiBMr
Xsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGNjjgAAOw==

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/bt_vivant_on.gif

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

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/bt_pensee_off.gif

R0lGODlhggAyALMPAICAgElJSVpaWnx8fFFRUU1NTV5eXlVVVW9vb0RERGRkZGtra3Nzc3d3d0BA
QP///yH5BAEAAA8ALAAAAACCADIAAAT/0MlJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iuh0Dv
D4pXohHcGQEKgpJgGCxciKJxBxBUDoAAq2CYTqsWwMFLXoErYgcBAXBqHVXFAIAoSBKKBqDRlazb
C29qbG5lLmcTWAFYBgEFCwMJcEAFBQgDEgsMBItADoyOkJKgj5GGLEhLTE4OA30SDEEATxIBAARw
VhICmK4Usa2vDsCnKj4/QQUABQHNAQYNuRRgCEQGuA7KzM7Q2s7P0cUpiBQCx8fSE2AJCz4NBebn
PfHy4uO6FQQAkhRa5FWLJBRYs2lfhQD6+E0QZK8EuQkJBuBzoABBOglVlAkyF3FixY4Umio2PPFw
Aq9GBRTcuiiNwaZFRBycdKQS18yUK0c6HIPhAIM2dTDyFOoAzxwGr3wCtSNB6YCgOqNKnUq1qtWr
WLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnVvigd27ePPq3cu3r9+/gAMLHky4sOHDiBMr
Xsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnGEQAAOw==

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/bt_societe_off.gif

R0lGODlhggAyALMPAICAgFpaWklJSURERHd3d3x8fFFRUV5eXk1NTWJiYlVVVXNzc25ubmZmZkBA
QP///yH5BAEAAA8ALAAAAACCADIAAAT/0MlJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iuiwZT
AISGgKQAVAaEhAap3M0MAIbCEFgUhqJihdGUNBDbrjO2aFQWjBTiUAEEKOsxzV0JFGB0OQ6dGSQI
QAkDEz0FBQxDWhIKC0BvBwCRAEM9AIdYei0GBUkKgxNICwYCBgsEg1AJCAgNBQMBRg52AQKzAwIA
B4m5Agg+n5ksAwc+AAtvDn/ATA4FYgQHsBIFbBJ2EnnUFGXBMQYNUQ7QFQcECJMUA69G5wgC7+cG
DnTt7+/l3SpxFVDnyBOwpFmQBkuSJAXz3hQ0GClfiiLAJrgZR6HcOUwOpkiDElHAIDocwStgdEgC
l5iMk5SBStLsWTQjA/I4uJjQwYAC/xw0SEPyBCwpBr4BMBNqVKlTDqAcWMXglMADOEkFmZZgiB1d
CBIAkNfzRCFLx0D9CQSs0KFBimQ1ougAKjpGlhiA6Uq3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMr
Xsy4sePHkCNLnky5suW6DzJr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27
t+/fwIMLH068uPHjyJPDjgAAOw==

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/bt_sciences_off.gif

R0lGODlhggAyALMPAICAgFpaWklJSXx8fFFRUXd3d25ubl5eXnNzc1VVVWZmZkRERE1NTWJiYkBA
QP///yH5BAEAAA8ALAAAAACCADIAAAT/0MlJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iui4Qx
AAWFYJMA7I4mAsCQIAQQg2GmiKyKEIoKwmDtqgCBSmDgLZu2mYXih0hIqA6Bb2CQFhkGwECxkKjZ
bhI9enV+DQVAB2YfBAMFDQl9EwsFBgQCY2EBRgt0DAxrQ5sFAQKNWZSWmANhRQcCeAN9BgiXCQMN
ix4LBz4ACGEOhxTDmw4KCBQGWZuBDgdkwxPDA4oTWA5gE2O6IQQKSw4F1hOiRo8C6QIHBQ7G2+fk
ErAADOrr7QaPBwTdHAzyBNXTZsEYgIMID7ozAi9bMAqbEiJ0sCDPwQIM/E0BIIkCmHEU4tYtdMCq
gjmI8ULy42hSQCAGPZJpvCAAQC4KRQRIk9AgmTEDXCYo4PJOgrGdwhB0enjMAAMAUkbOvLCJCYFv
AFBVunQAQD9jAvZ86vqVoVFOW9d5dVcNVoO1CGq5DDIVQ48fA4BNWvOrnwM4cgbQ8QvnDcM/fSck
QEAoI0W+CALWnUy5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnr36ge3buHPr3s27
t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOLH0++vPnmEQAAOw==

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/bt_technologie_off.gif

R0lGODlhggAyALMPAFpaWklJSXd3d1FRUXx8fERERFVVVWJiYl5eXk1NTW5ubmZmZnNzc4CAgEBA
QP///yH5BAEAAA8ALAAAAACCADIAAAT/0MlJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iug0Pj
/78FyNBQNQyk4w5TGDh7h2cABCimGoAkcrnBkqrGLBfmHYGv4rGr7CgsCA3Gtv2Ob6sJRYOwKDiI
eXt9EgUHAg0CB34OZQMKBAQKAxNucAoJSkoOjnsKU2plBQKSAQgEWaKkAKcOVQIAAQN8rYiwskKi
DAOxDAJ+XlAJCQcNk6m7pl5eRAgBeQSLXGWGFKsO1BPUVXOmtNwE176UiYxZBAcUB+ALAhQIyuYI
FAxCY2WJAfnOxQLyFFNnJIAJSMtBvwoI2mHB9ElCgAYJDk54mGUhRH2l2tkTAwQIkTTV/6wILEIQ
DJuR5QhKwHKyXMqOP0CJkThRlD+H8kqSFFmQpoSE5Rj+g+izALwe0RzKlLCAAYUeAbBJOOBUZ8EJ
YAxFE4XOy7l065xOeFcRQAFWExYoWOogQKQEAQzMOlaq2FWUVnPtGtDrV5Zgw+y6vZQRXisCzQJP
sjcnwKM4NyvFWUyEQuXKEzAXOpRokSZHkCRNfOwp0xYDDDolUMP6w4A5DjCtbk27RA8EcA2Mqs2b
BGhEinoLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4Jk/GE++vPnz6NOrX8++vfv3
8OPLn0+/vv37+PPr38+/v///AAYo4BiABBZo4IEIJqjgggw26OCDEEYo4YT6RQAAOw==

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/upload/docs/image/jpeg/i_vivant.jpg

/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAUAAA/+4ADkFkb2JlAGTAAAAAAf/b
AIQAAgICAgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwM
DAwMDAwMDAwMDAEDAwMFBAUJBgYJDQsJCw0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAxQCCAwERAAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAA
AAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIG
AnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6Oz
NhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dn
d4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQID
BQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LC
B3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaW
prbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq
+v/aAAwDAQACEQMRAD8A5fceZNRNwJZAVNd1Od1wB5+5E3afW35i3lusaNESq9SMrOINoySepeXv
O0t5GriJt/2WGUTjTdCfEzVPNTbVhG3Q5XQZk2i081J0MIoPYZEhIKNi80wVH7kAd6gZEhQUcvmq
1CMvpirCn2cHAlgep69aT3SEoBxPTCi6TK31zT+IHEDp264CyTW31vTSN1Ufq3wUkK02sabQ7KDT
wHf9WDhW3m+va3aI8hWlP2fnv4ZKrUkAPOrDzEp1qBC1EY9/ntlvBQahP1PqbQ5IrvT4WAFeI3pl
R5t6YNbLWnEU+WC1Q0luu/wD7slaEF6Q/wB9j+8p0/HCrwXUvJ1o99wCUIYDiKZkDIacU4RbLLX8
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

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/upload/docs/image/jpeg/2011-02/geants.jpg

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
ACgAMgApAAAAOEJJTQQ7AAAAAAGyAAAAEAAAAAEAAAAAABJwcmludE91dHB1dE9wdGlvbnMAAAAS
AAAAAENwdG5ib29sAAAAAABDbGJyYm9vbAAAAAAAUmdzTWJvb2wAAAAAAENybkNib29sAAAAAABD
bnRDYm9vbAAAAAAATGJsc2Jvb2wAAAAAAE5ndHZib29sAAAAAABFbWxEYm9vbAAAAAAASW50cmJv
b2wAAAAAAEJja2dPYmpjAAAAAQAAAAAAAFJHQkMAAAADAAAAAFJkICBkb3ViQG/gAAAAAAAAAAAA
R3JuIGRvdWJAb+AAAAAAAAAAAABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAA
AAAAAAAAAEJsZCBVbnRGI1JsdAAAAAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBSAAAAAAAAAAAACnZl
Y3RvckRhdGFib29sAQAAAABQZ1BzZW51bQAAAABQZ1BzAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0
AAAAAAAAAAAAAAAAVG9wIFVudEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudEYjUHJjQFkAAAAAAAA4
QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklN
BA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAA
AAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAG
AAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/
////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP//
//////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0E
AAAAAAAAAgABOEJJTQQCAAAAAAAEAAAAADhCSU0EMAAAAAAAAgEBOEJJTQQtAAAAAAAGAAEAAAAO
OEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0EA
AAAGAAAAAAAAAAAAAAJ0AAABkAAAAAYARwDpAGEAbgB0AHMAAAABAAAAAAAAAAAAAAAAAAAAAAAA
AAEAAAAAAAAAAAAAAZAAAAJ0AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAA
AAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBs
b25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAJ0AAAAAFJnaHRsb25nAAABkAAA
AAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAA
AAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0
b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2Jq
YwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0
b21sb25nAAACdAAAAABSZ2h0bG9uZwAAAZAAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAA
AAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNI
VE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNl
SG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxpZ24A
AAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUAAAAATm9u
ZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90dG9tT3V0
c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBCgAAAAAAAwAAAACP/AAAAAA
AAA4QklNBBQAAAAAAAQAAAAOOEJJTQQMAAAAABcJAAAAAQAAAGYAAACgAAABNAAAwIAAABbtABgA
Af/Y/+0ADEFkb2JlX0NNAAH/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwM
DxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAU
Dg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAAR
CACgAGYDASIAAhEBAxEB/90ABAAH/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQAB
BQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWET
InGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N1
4/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcH
BgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJE
k1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH
/9oADAMBAAIRAxEAPwD0b+9OOYjjlJgn8YKTQQNdCeUkM4ThMFDItbRRZc4EsqY6xwaJcQ0F7tjf
zn7WpKamb1zo+Df9nystlVwAcazuJAPG/Y1+xWcbJxMyn1sS5l9ckb6iHDcPpMd+65ed9c6nR1Xq
rs3Ddvx31sazd7HSGN3tcx3u9rj/AOjGexdT9S7qB0huPIblNttdZUT74Ja5r9jvds9J1XvSS74+
PyVbqWfV07CszbmveystBbWBJLjsb9La1vu/PerJb3lc19aeuGu53Qq8OzIsyaqyHsOu57/YyurZ
+k/mvd+lrSQrG+uDbcurHfg2AXvaxrm2NeQXHa3czZV4/vroAS6R3HfxC8/xTdh9SruyMLJYzDe2
2yKnOcGsPqPeQzc32tXddOzas/CrzKq7KqbxuqFoAc5n5l21pftZb9Ov/g0lNloEaKSYc6fNJJSp
79kkoSSU/wD/0PSWHSB/epFQYNoEJ5PPZJC8jun0kFQLg0EkhoH0idAPm5Z/UPrD0rp9Rfde2x4B
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
VzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6
bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8w
Mi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJv
dXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0i
aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDov
L25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9i
ZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x
LjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29t
L3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rv
c2hvcCBDUzUgTWFjaW50b3NoIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxMC0xMi0wN1QwODo1MToxNSsw
MTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTEtMDItMDdUMTI6MDE6NDIrMDE6MDAiIHhtcDpNZXRh
ZGF0YURhdGU9IjIwMTEtMDItMDdUMTI6MDE6NDIrMDE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvanBl
ZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVD
NjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkJBQjI1MUIxMTUyMDY4MTE4QkYw
OEEwNzAzNEFFN0MxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkZFRTRBMjcyMDgyMDY4MTE4
QkYwOEEwNzAzNEFFN0MxIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6RkVFNEEy
NzIwODIwNjgxMThCRjA4QTA3MDM0QUU3QzEiPiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6
QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IkxlcyBnw6lhbnRzIGRlcyBBbHBlcyBl
dCBsZXVyIGZhbWlsbGUuIExlcyBwbHVzIGdyYW5kcyBnw6lhbnRzIGR1IiBwaG90b3Nob3A6TGF5
ZXJUZXh0PSJMZXMgZ8OpYW50cyBkZXMgQWxwZXMgZXQgbGV1ciBmYW1pbGxlLiBMZXMgcGx1cyBn
cmFuZHMgZ8OpYW50cyBkdSBtb25kZSBtZXN1cmFudCAybTMwIGV0IHBlc2FudCA0MDAgbGl2cmVz
LiIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDx4bXBNTTpIaXN0b3J5PiA8
cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9
InhtcC5paWQ6RkVFNEEyNzIwODIwNjgxMThCRjA4QTA3MDM0QUU3QzEiIHN0RXZ0OndoZW49IjIw
MTAtMTItMDdUMDg6NTE6MTUrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rv
c2hvcCBDUzUgTWFjaW50b3NoIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0
RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2UvYm1wIHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5w
aG90b3Nob3AiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlE
PSJ4bXAuaWlkOkZGRTRBMjcyMDgyMDY4MTE4QkYwOEEwNzAzNEFFN0MxIiBzdEV2dDp3aGVuPSIy
MDExLTAyLTA3VDEyOjAxOjMzKzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90
b3Nob3AgQ1M1IE1hY2ludG9zaCIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFj
dGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDBFNUEyNzIwODIwNjgxMThC
RjA4QTA3MDM0QUU3QzEiIHN0RXZ0OndoZW49IjIwMTEtMDItMDdUMTI6MDE6NDIrMDE6MDAiIHN0
RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoIiBzdEV2dDpj
aGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFt
ZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9qcGVn
Ii8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252
ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL2pwZWci
Lz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlk
OkJBQjI1MUIxMTUyMDY4MTE4QkYwOEEwNzAzNEFFN0MxIiBzdEV2dDp3aGVuPSIyMDExLTAyLTA3
VDEyOjAxOjQyKzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M1
IE1hY2ludG9zaCIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9y
eT4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDBFNUEyNzIw
ODIwNjgxMThCRjA4QTA3MDM0QUU3QzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RkVFNEEy
NzIwODIwNjgxMThCRjA4QTA3MDM0QUU3QzEiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1w
LmRpZDpGRUU0QTI3MjA4MjA2ODExOEJGMDhBMDcwMzRBRTdDMSIvPiA8L3JkZjpEZXNjcmlwdGlv
bj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+IMWElDQ19QUk9GSUxF
AAEBAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNS
R0IAAAAAAAAAAAAAAAEAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAU
YmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQA
AABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9QAAAAkbHVtaQAAA/gAAAAUbWVhcwAA
BAwAAAAkdGVjaAAABDAAAAAMclRSQwAABDwAAAgMZ1RSQwAABDwAAAgMYlRSQwAABDwAAAgMdGV4
dAAAAABDb3B5cmlnaHQgKGMpIDE5OTggSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkAAGRlc2MAAAAA
AAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUQAB
AAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABi
mQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9kZXNjAAAAAAAAABZJRUMgaHR0cDovL3d3dy5p
ZWMuY2gAAAAAAAAAAAAAABZJRUMgaHR0cDovL3d3dy5pZWMuY2gAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZh
dWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIuMSBEZWZh
dWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAA
AAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAA
ACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANcngAAAAFYWVogAAAA
AABMCVYAUAAAAFcf521lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAKPAAAAAnNpZyAAAAAA
Q1JUIGN1cnYAAAAAAAAEAAAAAAUACgAPABQAGQAeACMAKAAtADIANwA7AEAARQBKAE8AVABZAF4A
YwBoAG0AcgB3AHwAgQCGAIsAkACVAJoAnwCkAKkArgCyALcAvADBAMYAywDQANUA2wDgAOUA6wDw
APYA+wEBAQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGhAakB
sQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJxAnoChAKOApgCogKs
ArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNyA34DigOWA6IDrgO6A8cD0wPgA+wD
+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSoBLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWG
BZYFpgW1BcUF1QXlBfYGBgYWBicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EH
dAeGB5kHrAe/B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmk
CboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvIC+EL+QwSDCoM
QwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsOtg7SDu4PCQ8l
D0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQS
hBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYm
FkkWbBaPFrIW1hb6Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioa
URp3Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5AHmoelB6+
HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJVIoIiryLdIwojOCNmI5Qj
wiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkG
KTgpaymdKdAqAio1KmgqmyrPKwIrNitpK50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu
7i8kL1ovkS/HL/4wNTBsMKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUT
NU01hzXCNf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtrO6o7
6DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFqQaxB7kIwQnJCtUL3
QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fASAVIS0iRSNdJHUljSalJ8Eo3Sn1K
xEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLH
UxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0Vb
lVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSU
ZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yvbQhtYG25bhJu
a27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+dpt2+HdWd7N4EXhu
eMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4BfmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSD
V4O6hB2EgITjhUeFq4YOhnKG14c7h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45m
js6PNo+ekAaQbpDWkT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfya
aJrVm0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4pammGqaL
pv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AAsHWw6rFgsdayS7LCsziz
rrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsuu6e8IbybvRW9j74KvoS+/796v/XAcMDs
wWfB48JfwtvDWMPUxFHEzsVLxcjGRsbDx0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbP
N8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W
3hzeot8p36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv77Ibt
Ee2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4+cf6V/rn+3f8B/yY
/Sn9uv5L/tz/bf///+4ADkFkb2JlAGRAAAAAAf/bAIQAAgICAgICAgICAgMCAgIDBAMCAgMEBQQE
BAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwMDAwMDAwMDAwMDAEDAwMFBAUJBgYJDQoJCg0P
Dg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgCdAGQ
AwERAAIRAQMRAf/dAAQAMv/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEB
AQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEU
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
D+Pny2fqm/5eaf8An9Y+XvzC8oec4bG1ubMR3kt7BLfqR6H1RrdIlmiVCJJC5dF3pxSnxnCdi17j
b8d70ryn+SWieVmiOoalZ6pqQlF1cXFtpOn6asjclfmI7aLnyY9X5lv5W4lyRxWUPZFu4Ft2NHka
JWdo4zViEU7ABgDWlAK0PQfu98FDvTQ/H4/HveHf85GNaap+T/mWae1ina3W0MIva+kskl0iL6nw
vsRVCOIFPgYiP4sBqt1iD+Px+Pem/wDzjbLrV3+S3ka71/nLFW7/AEHJUOJdOLTpau4+EjlGvSgq
BQ0oKoumUgL2fRaKp9UtAGVyXVAKKWImod+tQO/XqaUoXdhR2RPMUbnUKpZnoASa+oaGoqf5txv9
r/Jx3QDsF0ikiYyDhVWcOo6irsdiO4PLf/W6fDhTZQjRsk0n+kPxovCE0oDXkWrTY/ESetOp2NMb
QCjLfgrU4qfTp6hI2oGSoO2xFf8AY/SKPVX/1fs60jL9YPIq/qTCOm3RpafZPTbt8x8VcRu1H8fN
WeQqzrGAgUshVR2Hqmqld+rb02Hau+NJA5KaK4kaRSVBLARg0FOTAVG4A3pt8h8O4I2CByQ6yxji
0iExlgORpyqxAoAeooeI9vh6fFibUMG1/wDMTyp5eire6rFLcARNHaWxWeZ2k9MRqFHZ+BG5FaEb
UrjdJieb4588/wDORnmHWtVis/KtxbaL5eikWBb9J43u765Cyh4lm+BUjBtSWIKFgrMGAQqzd8j+
Px80gdPx0/W+TfM2rIGmhhurhY7tLkyiJvUMxlLTylG48ndxKJarXmFDhRGjI8SBvv3/AKfx5/BQ
Lofjp932XXV+p35IedT50/LjQr15xJrWhQro2uu0iEm8tIVrKSrEVkjKSV6b8qcNsmZDn5oO3yST
8xvyU0fzs8t5pGrTeUdcCgPcRRRzWczLI0rNNaT1QMeAHMUpWrhgFoAgPif8p/yr/L/zN581nyv5
k84adfa35euLm2udB06QO9/JpK2oleGV4Y/3KsFdxV+XL94ahKRjY6/gfj7fc2SJNX+Lv9vy26vS
P+cgfOurflZ+b/5XXXk5YbWytvKGqWupeXqNHpj2EWoQBInjVgFdfU/dsacaNWshUE9a8v01+PtY
7mJrv/R+xkcX/OSXkX8xPIPm6yiv28reb5tLkgt/Lurt6LzXNwsnprbSDkJa0PbmDsAZdskQdvx+
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
0YSPggCgqXWgp9qI+HXbHdbKHlgiH1aAwOOfGjKAD8Ppt8VR3I8OvtiF4ku1HynourQiG+s47iM8
aKQf2eFKChB70HfpjaDLZ51J+TnkF53uJtAW7ktaq8ixLKDyNWVeW7Uqa+NSDyI2fekl6HpflfSN
EtotO0zTo7a2hjaUGJAIg24qxBqWPXvWlSagYKCQWSfV4442Ckjir7VJFKv7+O/4++IAQHMVaWSG
pDRoZQpB4jkZ6EGu24J8e4w0tP8A/9H7Q2IBrGGX0o16IvEqFag6k0py33NCe9cZH8fNrBTyGaMv
EpDNzNCKGijff28Pbp3rlZDMIqcyCVfTUBWYVU1H7QG23htT/Y9N8a5qbeO+SvzH1Xzh+bX5y+TE
tLBfKv5XN5f0221CLmbmbV9RsW1C/jlfn6ZWGCa0CqEDAs/In4QGqSwSD/nLn8ohqtpBd2/mDTvK
N/8ApQaJ+adxpw/w9qEmi2d1qF+LWdJGuGCW9lcSrIbdY5FjLRO4K8ndBelflh+bVl+Zr3P1P8vv
OXk2zitbbUNI1TzNpkdna6laXJVopbSaKe4G4PIxycJFBDMg5YN0vPfzA/5yc/L78vtX8x2M2h+a
/M1h5LurPT/O/mjy7p6XOl6PqF59XNvY3M8s0RadzPEDHCspT1E9TiSAJC0MQ89/n3olr+ZvlTy5
omq69p/lLRvNkXlnz/52sdGhvdKbW7mWCxstCmvrmQvGjXc8S3E0FvIUkCxmWN/U4NGl4Wcx/n/5
G0/80rf8qNY8vea/Luq3l3f2Gk+ZNSs7aLSr2bS7a5vp2jZLqS4VGhs3lSSSBUYLyViSMd6XhSDy
l/zlV+WXnGTSpLPyr540bSfNHljVPN/knXNW0j6ja65p+jRLLefUWebmWWOWORTIqRuGBR25Vw2Q
tMX8if8AOWn6e8gflvqnmr8pvOI8+/mVpk+teXPIugafFLPf6ZGscz3tmLm9irBDDeW/N5XQsz8Y
0Y1o2in0nqfn/wAtaD5Em/MnzK975T8t2ujQ61qcerWstve2kEiLKYp7OjTCdS3pmJQXL/AoL9Re
6XzOn/OVo/5WXf2fmHyVr35c+RfJ3ko+YfNA81aS8Wt3t5quq2mneXotMtrS5nY/W3W5RY3T1WkC
pwjINTa0GVW//OV35cCO8gvPKPnXTvO1pq+naLp/5ZT6dAdd1C61a2nvbH6mkN5Jask8Gn3DhmnQ
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

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/upload/docs/image/jpeg/2011-02/th-120x100-abeckers_groupe.jpg.jpg

/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABkAHgDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDgMUUt
FekcAUUtFMAxmrkNjuG+YlFPIwOTTrOFN3zLkgZbPb2q6ALks7EFR1yMgVx1sQ4u0Tqo0ObVlULY
BT5a7yDjJJ//AFUIkTyKBFtJPy8kA/zpfLhuHYK7EDps5J/HtUY09DcDynmMh65YtiuX20+51exj
2NqOG1twAyAv3CjOPx6UeVaXsEqnaHC5U45PtVZdAdUzLLKinoDyT68Vl/LZTP5M0jgHGHIyKPaS
ve4vZp6F7yjDbSgKHDAAt6YOayihfcxGOfyro7G1muYlJcY6kLyTUtzZJMNrRNheSoXBJ+veumGI
7nPOhbY5HFIRWpdae0eW8soB69qzSuCRXWmmcrTQyilI5opgPooopiFqSCIyyhRTreMStsIOPUdq
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
RRRXecZ//9k=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/filet_auteur.gif

R0lGODlheAABAIABAHFxcf///yH5BAEAAAEALAAAAAB4AAEAAAINRIynyesNn4x02optAQA7

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/puce_fb.png

iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAYAAACdKY9CAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA
IGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAGwSURBVHjaNJK7TlRh
FIW/vf/9n7kwMAJB0QQkJj6A4Q1MTCQ+gQ9AJLGxsTDQUBEbWx7AgsbC2sZ30IYES02ckIwZYA5z
zn+zmKFeWWtlXeTj5/P3syadIMUBQKEAMUPXFdaXDV9VZEqa1uGdja9nx02bHAh3hJATGyuO13tP
eXy/i1MDivt0dn5oOcVeCBEAEaEUIYTE3ostnmwuzwVSZnzdEGLoWU6BGBOgqAhtWyhqbD0cAIWY
E6dffvDzYsJwMMTqOhATqBYywuaGZ/2ep6oUEEKMWIGdR0N+X14hL/fPStOC9x1igsO3z3i+uwMl
zxNJQvBA4ODo28REHU2M3KZA00b+/K0ZjWtWB57KO3JURlf/iDOhBeTVwddydZtA562aU3rdLqdH
u2w/WGNaz9g//s7osmGpoxNDDFFFVAEISSFmJCtQyJq4jY7rWOj3HVZMQQVEEBFEDK9GFr+YxeNd
hXctOIcphgqoLFyK4tRxN6QAIobiERTLxd2gZZBV0QWA8yB5fhMpoAbOSFlubHWl88Y3nKC6Pa/P
6HnFxAEZLcKwXzFdjr/WluTD/wEAzUW0FQy2/o8AAAAASUVORK5CYII=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/custom/menu/puce_tw.png

iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAYAAACdKY9CAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA
IGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAGDSURBVHjaVI87bhRR
FERP3fd6Znpk8RFYwhJyQIyIWQXbICUh8Aq8FSIWAYl3wJ8ECcYWYDD2zHT3u/cS2MLixFWqOjo6
Hp7Xzg49KLIgwyjGP0wAAvBp9Gd69cPXqtbvzYK9Asct+dYMXYb+w1us6tnkfZW4W41lDXbNeL8F
V6IEI0EghE/R100Ti+qYFcDoDG6kM2YCQhmcpZiyEA3qxoEQcTU7Fzy+JVKQEqT41eD1abJuSd22
wKJAXn+V2bWBxO0KqWRIqKsx6RdiuioMAe8uGi0TJ8lIVmPh8yDWY1Cbi2EIPAsAfxxensBEQUCa
YylmwNRE7bukFGOIS8mdEjzqnU+elBSdi0ECM2YlqMtiIHGyaezPxcLgyd6M09HRpQJfB+fod7C2
pC4sKVW82cL9wbk3K1TB7rxeWSd3OvFhG7TJqV2n86jsfLfKi/XIwxY8qKK3QlHgIb405yeFrivn
dRja043p8ILYPzPj7QgouDk3ahHzgDyHJfGxH9vB3wEAtanBk1uH0s0AAAAASUVORK5CYII=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/jalios/icons/feed/Rss1.gif

R0lGODlhNQAPAJEAAImOef9mAP///2ZmZiwAAAAANQAPAAACdpyPqcvdAqOctNpLjQi8+w9yAkCW
5omagha27ZjG8jps7t3B8q6yIuSJ5IC5EiR13NFsAZvzwwyqUDAd0tck/oLR5vRUVWI33SZUaqSS
rNSx6McUogGRtZHdruH2eF5suYfT55dXFjhHOKOBwdjoKOEQKTnJUAAAOw==

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/jalios/icons/feed/Rss2.gif

R0lGODlhNQAPAJEAAImOef9mAP///2ZmZiwAAAAANQAPAAACdZyPqcvdAqOctNpLjQi8+w9yAkCW
5omagha27ZjG8jps7t3B8q6yIuSJ5IC5UiQF2dFsAZvzwwyidCQY9bQcRok/qOoKsM58zTL0XKzG
xGvys8kVSqvHsBHcq+H2eB6SvPfiN5gV6NI3mIexyNg44QAZKclQAAA7

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://reflexions.ulg.ac.be/images/jalios/icons/ok.gif

R0lGODlhIAAQAKIEAAQEBKmpqfz8/F5eXv///wAAAAAAAAAAACH5BAEAAAQALAAAAAAgABAAAANn
SBoD/jBKMIK6bepNb+DgZBHTIJyfE6TAqhHsEwjMnM6qkEmMRD+mBs622QF1kJ/tF4IEk5/ZSdB0
Ih9KminWZFKQuNa1xNOaqGIsWlIRTdfhL1dF0hirjgW+OSLc9xEDFwt/exUXCQA7

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/css/csspacker.jsp?css=css/jalios/channel.css&css=css/custom.css&css=css/custom_fo.css

.mbox {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/jalios/layout/bg/msgBoxBg.gif) #fafafa repeat-x 50% =
bottom; PADDING-BOTTOM: 10px; MARGIN: 30px auto; BORDER-LEFT: #999999 =
1px solid; WIDTH: 400px; PADDING-TOP: 10px; BORDER-BOTTOM: #999999 1px =
solid; FONT-FAMILY: Arial, Helvetica, sans-serif
}
.mbox .mboxTitle {
	FONT-SIZE: large; LINE-HEIGHT: 32px
}
.mbox .mboxMsg {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: small; =
PADDING-BOTTOM: 0px; MARGIN: 10px 0px 0px 37px; PADDING-TOP: 0px
}
.mbox .mboxMsg P {
	MARGIN-BOTTOM: 0px
}
.mbox .mboxIcon {
	FLOAT: left; MARGIN-RIGHT: 5px
}
.mboxError .mboxTitle {
	FONT-WEIGHT: bold; COLOR: #ff0000
}
.mboxError {
	BORDER-LEFT-COLOR: #cc3333; BORDER-BOTTOM-COLOR: #cc3333; =
BORDER-TOP-COLOR: #cc3333; BORDER-RIGHT-COLOR: #cc3333
}
.mboxWarning .mboxTitle {
	COLOR: #ff6633
}
.mboxInfo .mboxTitle {
	COLOR: #0000ff
}
TABLE.formBackground {
	BORDER-RIGHT: #999999 1px solid; BORDER-TOP: #999999 1px solid; =
BACKGROUND: url(../images/jalios/layout/bg/msgBoxBg.gif) #fafafa =
repeat-x 50% bottom; BORDER-LEFT: #999999 1px solid; BORDER-BOTTOM: =
#999999 1px solid
}
TABLE.formBackground TD {
	FONT-FAMILY: Arial, Helvetica, sans-serif
}
TABLE.formPanel {
	BACKGROUND-COLOR: transparent
}
TD.formTitle {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; FONT-WEIGHT: bold; FONT-SIZE: =
16px; PADDING-BOTTOM: 2px; COLOR: #fff; PADDING-TOP: 2px; FONT-FAMILY: =
Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #5882b5; TEXT-ALIGN: =
left
}
TD.formLabel {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; TEXT-ALIGN: right
}
TD.formInfo {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px; FONT-FAMILY: Arial, Helvetica, sans-serif
}
TD.formAdminTitle {
	FONT-WEIGHT: bold; BACKGROUND-IMAGE: =
url(../images/jalios/layout/bg/redtv.gif); COLOR: #ffffff; FONT-FAMILY: =
Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #cc0000; TEXT-ALIGN: =
left
}
SPAN.formButton {
=09
}
SPAN.formDeleteButton {
	COLOR: #ff0000
}
.formInfo {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif
}
.formInfo A {
	COLOR: #6633cc; TEXT-DECORATION: none
}
.formInfo A:hover {
	TEXT-DECORATION: underline
}
.formMandatory {
	FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Arial, =
Helvetica, sans-serif
}
.formLabel {
	FONT-FAMILY: Arial, Helvetica, sans-serif; WHITE-SPACE: nowrap; =
TEXT-ALIGN: left
}
.formTextfield {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: =
#666666 1px solid; PADDING-LEFT: 1px; FONT-SIZE: 10pt; PADDING-BOTTOM: =
1px; BORDER-LEFT: #666666 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#666666 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #ffffff
}
.formTextfieldRight {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: =
#666666 1px solid; PADDING-LEFT: 1px; FONT-SIZE: 10pt; PADDING-BOTTOM: =
1px; BORDER-LEFT: #666666 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#666666 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #ffffff; TEXT-ALIGN: right
}
.formSelect {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: =
#666666 1px solid; PADDING-LEFT: 1px; FONT-SIZE: 10pt; PADDING-BOTTOM: =
1px; BORDER-LEFT: #666666 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#666666 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #ffffff
}
.formDisabled {
	COLOR: gray; BACKGROUND-COLOR: #dcdcdc
}
TEXTAREA.resizable {
	DISPLAY: block
}
BODY.popupEdition {
	BACKGROUND-COLOR: #70a1df
}
#popupEdition {
	BORDER-RIGHT: #70a1df 14px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#70a1df 15px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; MARGIN: =
0px; BORDER-LEFT: #70a1df 14px solid; PADDING-TOP: 2px; BORDER-BOTTOM: =
#70a1df 15px solid; HEIGHT: 100%; BACKGROUND-COLOR: #f8fcfd
}
.warningArea {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 48px; FONT-SIZE: 11px; MIN-HEIGHT: =
42px; BACKGROUND: url(../images/jalios/icons/warning.gif) #ffffcc =
no-repeat 8px 14px; PADDING-BOTTOM: 10px; BORDER-LEFT: #999999 1px =
solid; PADDING-TOP: 10px; BORDER-BOTTOM: #999999 1px solid; FONT-FAMILY: =
Arial, Helvetica, sans-serif
}
.infoArea {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 48px; FONT-SIZE: 11px; BACKGROUND: =
url(../images/jalios/icons/information.gif) #ffffcc no-repeat 8px 14px; =
PADDING-BOTTOM: 10px; BORDER-LEFT: #999999 1px solid; PADDING-TOP: 10px; =
BORDER-BOTTOM: #999999 1px solid; FONT-FAMILY: Arial, Helvetica, =
sans-serif
}
.infoArea P {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 10px
}
.infoArea UL {
	MARGIN-TOP: 0.5em; MARGIN-BOTTOM: 5px; LINE-HEIGHT: 1.2em
}
.infoArea OL {
	MARGIN-TOP: 0.5em; MARGIN-BOTTOM: 5px; LINE-HEIGHT: 1.2em
}
.formBox {
	BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; =
BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid
}
.formBox .infoArea {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 10px; PADDING-LEFT: 48px; =
BORDER-LEFT-WIDTH: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 10px; =
BORDER-BOTTOM: #999999 1px solid; BORDER-RIGHT-WIDTH: 0px
}
.formBox .inputArea {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 12px; BACKGROUND: =
url(../images/jalios/layout/bg/formBg.gif) #fafafa repeat-x; =
PADDING-BOTTOM: 10px; PADDING-TOP: 5px; FONT-FAMILY: Arial, Helvetica, =
sans-serif
}
.formBox .inputArea .inputSet {
	MARGIN-TOP: 20px
}
.formBoxButtons {
	MARGIN: 10px 0px
}
TABLE.pubEditForm TD {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: =
3px; PADDING-TOP: 3px
}
P.t1 {
	FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: Arial, =
Helvetica, sans-serif; TEXT-ALIGN: left
}
P.t2 {
	FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Arial, =
Helvetica, sans-serif; TEXT-ALIGN: left
}
.pager {
	FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial, Helvetica, =
sans-serif; TEXT-ALIGN: center
}
.pager IMG {
	BORDER-RIGHT: transparent 0px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
transparent 0px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 0px; =
BORDER-LEFT: transparent 0px solid; PADDING-TOP: 0px; BORDER-BOTTOM: =
transparent 0px solid
}
.pager A {
	MARGIN: 0px; TEXT-DECORATION: none
}
.pager A:hover {
	COLOR: #2b4d86; TEXT-DECORATION: underline
}
.pager .currentPage {
=09
}
SPAN.highlight {
	BACKGROUND-COLOR: #ffff70
}
P.abstractDetail {
	FONT-SIZE: x-small; COLOR: #999999; FONT-FAMILY: Arial, Helvetica, =
sans-serif
}
A.abstractDetail {
	FONT-WEIGHT: bold; FONT-SIZE: x-small; COLOR: #666666; FONT-FAMILY: =
Arial, Helvetica, sans-serif
}
IMG.icon {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; VERTICAL-ALIGN: text-bottom; BORDER-RIGHT-WIDTH: 0px
}
DIV.ajaxwait {
	BORDER-RIGHT: #aa1111 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: =
#aa1111 1px solid; PADDING-LEFT: 6px; Z-INDEX: 100; RIGHT: 0px; =
PADDING-BOTTOM: 2px; FONT: bold 9pt Arial, Helvetica, sans-serif; =
BORDER-LEFT: #aa1111 1px solid; COLOR: #ffffff; PADDING-TOP: 2px; =
BORDER-BOTTOM: #aa1111 1px solid; POSITION: absolute; TOP: 0px; =
BACKGROUND-COLOR: #cc4444
}
HTML > BODY DIV.ajaxwait {
	POSITION: fixed
}
.inlineSearch {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.inlineSearch #text {
	FONT-SIZE: x-small; LINE-HEIGHT: 1em; HEIGHT: 1.1em
}
.inlineSearch #ok {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: x-small; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: =
transparent; BORDER-RIGHT-WIDTH: 0px
}
.didyoumean STRONG {
	FONT-WEIGHT: normal; COLOR: red
}
.didyoumean A {
	FONT-WEIGHT: bold
}
.didyoumean {
	FONT-FAMILY: Arial, Helvetica, sans-serif
}
.charter {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
FONT-SIZE: small; BORDER-LEFT: #666666 1px solid; BORDER-BOTTOM: #666666 =
1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: =
#eeeeee; TEXT-ALIGN: justify
}
.charter TD {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 1em; =
PADDING-TOP: 1em
}
.caddyPage {
	CLEAR: both! important; FLOAT: none! important; MARGIN-BOTTOM: 20px; =
POSITION: relative! important
}
.caddyCounter {
	MARGIN-TOP: 2px; FONT-SIZE: 14px; MARGIN-LEFT: -25px; WIDTH: 40px; =
POSITION: absolute
}
.caddyTitle {
	BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 40px; BORDER-TOP: black =
1px solid; PADDING-LEFT: 40px; FONT-WEIGHT: bold; FONT-SIZE: 18px; =
PADDING-BOTTOM: 7px; BORDER-LEFT: black 1px solid; PADDING-TOP: 7px; =
BORDER-BOTTOM: black 1px solid; FONT-FAMILY: arial, sans-serif; =
BACKGROUND-COLOR: #cccccc
}
.caddyContent {
	CLEAR: both; PADDING-RIGHT: 5px; PADDING-LEFT: 40px; PADDING-BOTTOM: =
5px; PADDING-TOP: 5px
}
.iso639flag {
	BORDER-TOP-WIDTH: 0px; BACKGROUND-POSITION: 0px 2px; BORDER-LEFT-WIDTH: =
0px; BACKGROUND-IMAGE: url(../images/jalios/icons/country/unknown.png); =
BORDER-BOTTOM-WIDTH: 0px; VERTICAL-ALIGN: middle; WIDTH: 16px; =
BACKGROUND-REPEAT: no-repeat; HEIGHT: 16px; BORDER-RIGHT-WIDTH: 0px
}
.iso639flagSelect {
	BORDER-TOP-WIDTH: 0px; BACKGROUND-POSITION: 2px 2px; PADDING-LEFT: =
21px; BORDER-LEFT-WIDTH: 0px; BACKGROUND-IMAGE: =
url(../images/jalios/icons/country/unknown.png); BORDER-BOTTOM-WIDTH: =
0px; VERTICAL-ALIGN: middle; BACKGROUND-REPEAT: no-repeat; =
BORDER-RIGHT-WIDTH: 0px
}
.ar-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/arab-league-flag.gif)
}
.bg-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/bg.png)
}
.cs-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/cz.png)
}
.da-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/dk.png)
}
.de-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/de.png)
}
.et-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/ee.png)
}
.el-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/gr.png)
}
.en-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/gb.png)
}
.es-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/es.png)
}
.fr-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/fr.png)
}
.ga-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/ie.png)
}
.he-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/il.png)
}
.it-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/it.png)
}
.ja-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/jp.png)
}
.lv-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/lv.png)
}
.lt-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/lt.png)
}
.hu-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/hu.png)
}
.mt-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/mt.png)
}
.nl-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/nl.png)
}
.pl-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/pl.png)
}
.pt-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/pt.png)
}
.ro-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/ro.png)
}
.ru-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/ru.png)
}
.sk-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/sk.png)
}
.sl-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/si.png)
}
.fi-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/fi.png)
}
.sv-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/se.png)
}
.tlh-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/klingon-flag.gif)
}
.zh-flag {
	BACKGROUND-IMAGE: url(../images/jalios/icons/country/cn.png)
}
IMG.rssIcon {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; WIDTH: 53px; HEIGHT: 15px; BORDER-RIGHT-WIDTH: 0px
}
TABLE.portletLightSearch {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; MARGIN-LEFT: auto; MARGIN-RIGHT: 0px; BORDER-RIGHT-WIDTH: 0px
}
TABLE.portletLightSearch TD {
	VERTICAL-ALIGN: middle; TEXT-ALIGN: center
}
TABLE.layout {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BORDER-COLLAPSE: collapse; BORDER-RIGHT-WIDTH: 0px; =
border-spacing: 0
}
TH.layout {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px
}
TD.layout {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px
}
TD.halignleft.layout {
	TEXT-ALIGN: left
}
TD.halignleft.layout > DIV {
	MARGIN-LEFT: 0px; MARGIN-RIGHT: auto
}
TD.haligncenter.layout {
	TEXT-ALIGN: center
}
TD.haligncenter.layout > DIV {
	MARGIN-LEFT: auto; MARGIN-RIGHT: auto
}
TD.halignright.layout {
	TEXT-ALIGN: right
}
TD.halignright.layout > DIV {
	MARGIN-LEFT: auto; MARGIN-RIGHT: 0px
}
.LDAPfield {
	COLOR: green
}
TABLE.listBorderBack {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #999999 1px solid; =
BORDER-LEFT: #999999 1px solid; BORDER-BOTTOM: #666666 1px solid; =
BACKGROUND-COLOR: #eeeeee
}
TABLE.listBorder {
	BACKGROUND-COLOR: #666660
}
TABLE.listBorder UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0px; MARGIN: =
0.1em 0em 0.1em 1.2em; PADDING-TOP: 0px
}
TABLE.listBorder OL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0px; MARGIN: =
0.1em 0em 0.1em 1.2em; PADDING-TOP: 0px
}
TABLE.listBackground {
	BACKGROUND-COLOR: #e0e0e0
}
TD.listHeader {
	FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #ffffff; FONT-FAMILY: arial, =
helvetica, sans-serif; WHITE-SPACE: nowrap; BACKGROUND-COLOR: #a3baff; =
TEXT-ALIGN: center
}
TH.listHeader {
	FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #ffffff; FONT-FAMILY: arial, =
helvetica, sans-serif; WHITE-SPACE: nowrap; BACKGROUND-COLOR: #a3baff; =
TEXT-ALIGN: center
}
A.listHeader {
	FONT-WEIGHT: bold; COLOR: #ffffff; FONT-FAMILY: arial, helvetica, =
sans-serif; TEXT-ALIGN: center
}
A.listHeaderSel {
	FONT-WEIGHT: bold; COLOR: #ffff00; FONT-FAMILY: arial, helvetica, =
sans-serif; TEXT-ALIGN: center
}
TD.listEmptyHeader {
	BACKGROUND-COLOR: #ffffff
}
.listEvenRow {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #fafafa
}
.listOddRow {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #f0f0f0
}
.listOverRow {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #ffffcc
}
.listDiff .listOverRow {
	BACKGROUND-COLOR: #ffffff
}
.listEvenRow A {
	COLOR: #000000; TEXT-DECORATION: none
}
.listOddRow A {
	COLOR: #000000; TEXT-DECORATION: none
}
.listOverRow A {
	COLOR: #000000; TEXT-DECORATION: none
}
.listEvenRow A:hover {
	COLOR: #000000; TEXT-DECORATION: underline
}
.listOddRow A:hover {
	COLOR: #000000; TEXT-DECORATION: underline
}
.listOverRow A:hover {
	COLOR: #000000; TEXT-DECORATION: underline
}
TD.listKey {
	FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: arial, helvetica, =
sans-serif; WHITE-SPACE: nowrap; BACKGROUND-COLOR: #f0f0f0; TEXT-ALIGN: =
right
}
TD.listValue {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #ffffff
}
TD.imported A {
	COLOR: #666666; FONT-STYLE: italic
}
.calendar {
	BORDER-RIGHT: #000 2px solid; BORDER-TOP: #fff 2px solid; DISPLAY: =
none; FONT-SIZE: 11px; BACKGROUND: #d4d0c8; BORDER-LEFT: #fff 2px solid; =
CURSOR: default; COLOR: #000; BORDER-BOTTOM: #000 2px solid; =
FONT-FAMILY: tahoma,verdana,sans-serif; POSITION: relative
}
.calendar TABLE {
	BORDER-RIGHT: #fff 1px solid; BORDER-TOP: #000 1px solid; FONT-SIZE: =
11px; BACKGROUND: #d4d0c8; BORDER-LEFT: #000 1px solid; CURSOR: default; =
COLOR: #000; BORDER-BOTTOM: #fff 1px solid; FONT-FAMILY: =
tahoma,verdana,sans-serif
}
.calendar .button {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #fff 1px =
solid; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #fff 1px =
solid; PADDING-TOP: 1px; BORDER-BOTTOM: #000 1px solid; TEXT-ALIGN: =
center
}
.calendar .nav {
	BACKGROUND: url(../js/calendar/menuarrow.gif) no-repeat 100% 100%
}
.calendar THEAD .title {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 1px; FONT-WEIGHT: bold; BACKGROUND: #848078; =
PADDING-BOTTOM: 1px; BORDER-LEFT: #000 1px solid; COLOR: #fff; =
PADDING-TOP: 1px; BORDER-BOTTOM: #000 1px solid; TEXT-ALIGN: center
}
.calendar THEAD .headrow {
=09
}
.calendar THEAD .daynames {
=09
}
.calendar THEAD .name {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; BACKGROUND: #f4f0e8; =
PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #000 1px solid; =
TEXT-ALIGN: center
}
.calendar THEAD .weekend {
	COLOR: #f00
}
.calendar THEAD .hilite {
	BORDER-RIGHT: #000 2px solid; PADDING-RIGHT: 0px; BORDER-TOP: #fff 2px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: #fff 2px =
solid; PADDING-TOP: 0px; BORDER-BOTTOM: #000 2px solid; =
BACKGROUND-COLOR: #e4e0d8
}
.calendar THEAD .active {
	BORDER-RIGHT: #fff 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; BORDER-LEFT: #000 1px =
solid; PADDING-TOP: 2px; BORDER-BOTTOM: #fff 1px solid; =
BACKGROUND-COLOR: #c4c0b8
}
.calendar TBODY .day {
	PADDING-RIGHT: 4px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; WIDTH: 2em; =
PADDING-TOP: 2px; TEXT-ALIGN: right
}
.calendar TBODY .othermonth.day {
	FONT-SIZE: 80%; COLOR: #aaa
}
.calendar TBODY .oweekend.othermonth.day {
	COLOR: #faa
}
.calendar TABLE .wn {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 3px; PADDING-LEFT: 2px; =
BACKGROUND: #f4f0e8; PADDING-BOTTOM: 2px; PADDING-TOP: 2px
}
.calendar TBODY .rowhilite TD {
	BACKGROUND: #e4e0d8
}
.calendar TBODY .rowhilite TD.wn {
	BACKGROUND: #d4d0c8
}
.calendar TBODY TD.hilite {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #fff 1px =
solid; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #fff 1px =
solid; PADDING-TOP: 1px; BORDER-BOTTOM: #000 1px solid
}
.calendar TBODY TD.active {
	BORDER-RIGHT: #fff 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; BORDER-LEFT: #000 1px =
solid; PADDING-TOP: 2px; BORDER-BOTTOM: #fff 1px solid
}
.calendar TBODY TD.selected {
	BORDER-RIGHT: #fff 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 2px; FONT-WEIGHT: bold; BACKGROUND: #e4e0d8; =
PADDING-BOTTOM: 0px; BORDER-LEFT: #000 1px solid; PADDING-TOP: 2px; =
BORDER-BOTTOM: #fff 1px solid
}
.calendar TBODY TD.weekend {
	COLOR: #f00
}
.calendar TBODY TD.today {
	FONT-WEIGHT: bold; COLOR: #00f
}
.calendar TBODY .disabled {
	COLOR: #999
}
.calendar TBODY .emptycell {
	VISIBILITY: hidden
}
.calendar TBODY .emptyrow {
	DISPLAY: none
}
.calendar TFOOT .footrow {
=09
}
.calendar TFOOT .ttip {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 1px; BACKGROUND: #848078; PADDING-BOTTOM: 1px; =
BORDER-LEFT: #000 1px solid; COLOR: #fff; PADDING-TOP: 1px; =
BORDER-BOTTOM: #000 1px solid; TEXT-ALIGN: center
}
.calendar TFOOT .hilite {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #fff 1px =
solid; PADDING-LEFT: 1px; BACKGROUND: #e4e0d8; PADDING-BOTTOM: 1px; =
BORDER-LEFT: #fff 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: #000 1px =
solid
}
.calendar TFOOT .active {
	BORDER-RIGHT: #fff 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; BORDER-LEFT: #000 1px =
solid; PADDING-TOP: 2px; BORDER-BOTTOM: #fff 1px solid
}
.calendar .combo {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #fff 1px =
solid; DISPLAY: none; PADDING-LEFT: 1px; FONT-SIZE: 90%; BACKGROUND: =
#e4e0d8; LEFT: 0px; PADDING-BOTTOM: 1px; BORDER-LEFT: #fff 1px solid; =
WIDTH: 4em; CURSOR: default; PADDING-TOP: 1px; BORDER-BOTTOM: #000 1px =
solid; POSITION: absolute; TOP: 0px
}
.calendar .combo .label {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px; TEXT-ALIGN: center
}
.calendar .combo .label-IEfix {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px; TEXT-ALIGN: center
}
.calendar .combo .label-IEfix {
	WIDTH: 4em
}
.calendar .combo .active {
	BORDER-RIGHT: #fff 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #000 1px =
solid; PADDING-LEFT: 0px; BACKGROUND: #c4c0b8; PADDING-BOTTOM: 0px; =
BORDER-LEFT: #000 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #fff 1px =
solid
}
.calendar .combo .hilite {
	BACKGROUND: #048; COLOR: #fea
}
.calendar TD.time {
	PADDING-RIGHT: 0px; BORDER-TOP: #000 1px solid; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 1px; PADDING-TOP: 1px; BACKGROUND-COLOR: #f4f0e8; =
TEXT-ALIGN: center
}
.calendar TD.time .hour {
	BORDER-RIGHT: #889 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #889 1px =
solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; =
BORDER-LEFT: #889 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #889 1px =
solid; BACKGROUND-COLOR: #fff
}
.calendar TD.time .minute {
	BORDER-RIGHT: #889 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #889 1px =
solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; =
BORDER-LEFT: #889 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #889 1px =
solid; BACKGROUND-COLOR: #fff
}
.calendar TD.time .ampm {
	BORDER-RIGHT: #889 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #889 1px =
solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; =
BORDER-LEFT: #889 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #889 1px =
solid; BACKGROUND-COLOR: #fff
}
.calendar TD.time .ampm {
	TEXT-ALIGN: center
}
.calendar TD.time .colon {
	PADDING-RIGHT: 2px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.calendar TD.time SPAN.hilite {
	BORDER-LEFT-COLOR: #000; BORDER-BOTTOM-COLOR: #000; COLOR: #fff; =
BORDER-TOP-COLOR: #000; BACKGROUND-COLOR: #766; BORDER-RIGHT-COLOR: #000
}
.calendar TD.time SPAN.active {
	BORDER-LEFT-COLOR: #f00; BORDER-BOTTOM-COLOR: #f00; COLOR: #0f0; =
BORDER-TOP-COLOR: #f00; BACKGROUND-COLOR: #000; BORDER-RIGHT-COLOR: #f00
}
UL.TreeCat SPAN.strong {
	FONT-WEIGHT: bold
}
UL.TreeCat {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 1px; PADDING-BOTTOM: =
0px; MARGIN: 0px; COLOR: #333333; LINE-HEIGHT: 1px; PADDING-TOP: 0px; =
WHITE-SPACE: normal; LIST-STYLE-TYPE: none
}
UL.TreeCat UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 1px; PADDING-BOTTOM: =
0px; MARGIN: 0px; COLOR: #333333; LINE-HEIGHT: 1px; PADDING-TOP: 0px; =
WHITE-SPACE: normal; LIST-STYLE-TYPE: none
}
UL.TreeCat {
	MARGIN-TOP: 0.5em; MARGIN-BOTTOM: 0.8em
}
UL.TreeCat LI {
	MARGIN: 0px 2px 0px 0px; FONT: 12px/12px Arial, Helvetica, Sans-Serif; =
VERTICAL-ALIGN: middle; WHITE-SPACE: nowrap
}
UL.TreeCat UL LI {
	MARGIN-LEFT: 17px
}
UL.TreeCat LI.close UL {
	DISPLAY: none
}
UL.TreeCat A {
	MARGIN: 1px; COLOR: #000000; TEXT-DECORATION: none
}
UL.TreeCat A:hover {
	TEXT-DECORATION: underline
}
UL.TreeCat INPUT {
	VERTICAL-ALIGN: middle
}
UL.TreeCat IMG {
	MARGIN: 0em 2px; VERTICAL-ALIGN: middle; WIDTH: 16px; =
BACKGROUND-REPEAT: no-repeat; HEIGHT: 16px
}
UL.TreeCat LI IMG.loading {
	WIDTH: 1px; HEIGHT: 1px
}
UL.TreeCat IMG.node {
	MARGIN: 1px 1px 5px 0px; WIDTH: 9px; CURSOR: pointer; HEIGHT: 9px
}
UL.TreeCat LI.open IMG.node {
	BACKGROUND-IMAGE: url(../images/jalios/icons/minus.gif)
}
UL.TreeCat LI.close IMG.node {
	BACKGROUND-IMAGE: url(../images/jalios/icons/plus.gif)
}
UL.TreeCat LI.leaf IMG.node {
	BACKGROUND-IMAGE: url(../s.gif); CURSOR: auto
}
UL.TreeCat LI IMG.visual {
	BACKGROUND-IMAGE: url(../images/jalios/tree/closed_folder.gif); MARGIN: =
0px 2px 4px 1px; WIDTH: 16px; HEIGHT: 13px
}
UL.dragdrop LI IMG.visual {
	CURSOR: move
}
UL.TreeCat LI IMG.highlight {
	BACKGROUND-IMAGE: url(../images/jalios/tree/opened_folder.gif)
}
UL.TreeCat IMG.portal {
	BACKGROUND-IMAGE: url(../images/jalios/icons/portal/portal.gif)
}
UL.TreeCat IMG.portalr {
	BACKGROUND-IMAGE: url(../images/jalios/icons/portal/portalRedirect.gif)
}
UL.TreeCat IMG.portals {
	BACKGROUND-IMAGE: url(../images/jalios/icons/portal/multiportal.gif)
}
UL.TreeCat IMG.workspace {
	BACKGROUND-IMAGE: url(../images/jalios/icons/work.gif)
}
UL.TreeCat IMG.workspaceM {
	BACKGROUND-IMAGE: url(../images/jalios/icons/workM.gif)
}
UL.TreeCat IMG.workspaces {
	BACKGROUND-IMAGE: url(../images/jalios/icons/workFilterOff.gif)
}
UL.TreeCat IMG.right {
	BACKGROUND-IMAGE: url(../images/jalios/icons/key.gif); WIDTH: 16px; =
HEIGHT: 16px
}
UL.TreeCat IMG.edit {
	BACKGROUND-IMAGE: url(../images/jalios/icons/edit.gif); WIDTH: 16px; =
HEIGHT: 16px
}
UL.TreeCat IMG.help {
	BACKGROUND-IMAGE: url(../images/jalios/icons/help.gif); WIDTH: 12px; =
HEIGHT: 12px
}
UL.TreeCat IMG.readable {
	BACKGROUND-IMAGE: url(../images/jalios/icons/tracked.gif); WIDTH: 15px; =
HEIGHT: 12px
}
DIV.treecat-msg {
	BORDER-RIGHT: #e8e803 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#e8e803 1px solid; PADDING-LEFT: 18px; BACKGROUND: =
url(../images/jalios/icons/tip.gif) #ffffcc no-repeat 2px 1px; =
PADDING-BOTTOM: 2px; MARGIN: 4px 0px; FONT: 10px/16px Arial, Helvetica, =
Sans-Serif; BORDER-LEFT: #e8e803 1px solid; WIDTH: 20em; CURSOR: =
default; COLOR: #888888; PADDING-TOP: 2px; BORDER-BOTTOM: #e8e803 1px =
solid
}
UL.TreeCat LI.droppable {
	BACKGROUND-COLOR: #ffffcc
}
UL.TreeCat SPAN.disabled {
	COLOR: #666666; FONT-STYLE: italic
}
.WSTreeGroup {
	MARGIN-TOP: 0px; FONT: 12px Arial, Helvetica, Sans-Serif; =
BORDER-BOTTOM: #999999 1px solid
}
.WSTreeGroup .title {
	PADDING-RIGHT: 5px; BACKGROUND-POSITION: 5px 7px; BORDER-TOP: #666666 =
1px solid; PADDING-LEFT: 24px; FONT-WEIGHT: bold; BACKGROUND-IMAGE: =
url(../images/jalios/icons/exp_plus.gif); PADDING-BOTTOM: 5px; CURSOR: =
pointer; PADDING-TOP: 5px; BACKGROUND-REPEAT: no-repeat; WHITE-SPACE: =
nowrap; BACKGROUND-COLOR: #ccccc0
}
.WSTreeGroup .open {
	BACKGROUND-IMAGE: url(../images/jalios/icons/exp_minus.gif); =
BACKGROUND-COLOR: #ddddd0
}
.WSTreeGroup .tree {
	PADDING-RIGHT: 0px; BORDER-TOP: #999999 1px solid; PADDING-LEFT: 8px; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
UL.TreeGroup .descendant {
	BACKGROUND-COLOR: #ffffcc
}
UL.TreeGroup .external {
	COLOR: #999999
}
UL.TreeGroup .transversal {
	FONT-STYLE: italic
}
UL.TreeGroup {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 1px; PADDING-BOTTOM: =
0px; MARGIN: 0px; COLOR: #333333; LINE-HEIGHT: 1px; PADDING-TOP: 0px; =
WHITE-SPACE: normal; LIST-STYLE-TYPE: none
}
UL.TreeGroup UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 1px; PADDING-BOTTOM: =
0px; MARGIN: 0px; COLOR: #333333; LINE-HEIGHT: 1px; PADDING-TOP: 0px; =
WHITE-SPACE: normal; LIST-STYLE-TYPE: none
}
UL.TreeGroup {
	MARGIN-TOP: 2.5em; MARGIN-BOTTOM: 12.8em
}
UL.TreeGroup LI {
	MARGIN: 3px 2px 0px 0px; FONT: 12px/12px Arial, Helvetica, Sans-Serif; =
VERTICAL-ALIGN: middle; WHITE-SPACE: nowrap
}
UL.TreeGroup UL LI {
	MARGIN-LEFT: 20px
}
UL.TreeGroup A {
	MARGIN: 1px; COLOR: #000000; TEXT-DECORATION: none
}
UL.TreeGroup A:hover {
	TEXT-DECORATION: underline
}
DIV.autocomplete UL {
	BORDER-RIGHT: #888888 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#888888 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 0px 1px; BORDER-LEFT: #888888 1px solid; COLOR: #000000; =
PADDING-TOP: 0px; BORDER-BOTTOM: #888888 1px solid; LIST-STYLE-TYPE: =
none; POSITION: absolute; BACKGROUND-COLOR: #fefefe
}
DIV.autocomplete LI {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 2px; MARGIN: =
0px; FONT: 8pt/130% Arial, Helvetica, sans-serif; CURSOR: pointer; =
PADDING-TOP: 2px; WHITE-SPACE: nowrap; LIST-STYLE-TYPE: none
}
DIV.autocomplete LI.selected {
	BACKGROUND-COLOR: #ffffbb
}
DIV.autocomplete SPAN.info {
	COLOR: #888888
}
INPUT.autocomplete {
	PADDING-LEFT: 20px; BACKGROUND: =
url(../images/jalios/icons/autocomplete.gif) #e9f8dd no-repeat 2px =
center; COLOR: #666666
}
INPUT.treecatcomplete {
	MARGIN-TOP: 4px; WIDTH: 14em; BACKGROUND-COLOR: #e9f8dd
}
INPUT.treecatrefresh {
	FONT-WEIGHT: bold; COLOR: #000000; BACKGROUND-COLOR: #ffff70
}
DIV.autocomplete LI SPAN.match {
	FONT-WEIGHT: bold
}
DIV.autocomplete LI.nomatch {
	FONT-WEIGHT: bold; CURSOR: default; COLOR: #ffffff; BACKGROUND-COLOR: =
#cc4444
}
DIV.autocomplete LI.info {
	CURSOR: default; COLOR: #ffffff; BACKGROUND-COLOR: #adbcc3
}
.formArea {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/jalios/layout/bg/formBg.gif) #fafafa repeat-x 0% 50%; =
PADDING-BOTTOM: 20px; BORDER-LEFT: #999999 1px solid; PADDING-TOP: 10px; =
BORDER-BOTTOM: #999999 1px solid
}
.formInfo {
	FONT-SIZE: small; FONT-FAMILY: Arial, Helvetica, sans-serif
}
.formInfoSmaller {
	FONT-SIZE: x-small; FONT-FAMILY: Arial, Helvetica, sans-serif
}
.formMandatory {
	FONT-SIZE: small; COLOR: #ff0000; FONT-FAMILY: Arial, Helvetica, =
sans-serif
}
.formLabel {
	FONT-WEIGHT: bold; FONT-SIZE: 11pt; FONT-FAMILY: Arial, Helvetica, =
sans-serif; WHITE-SPACE: nowrap; TEXT-ALIGN: left
}
.formLabelHeader {
	FONT-WEIGHT: bold; FONT-SIZE: 11pt; FONT-FAMILY: Arial, Helvetica, =
sans-serif; WHITE-SPACE: nowrap; TEXT-ALIGN: center
}
LEGEND.formLabel {
	FONT-SIZE: 11pt
}
.formDescription {
	FONT-SIZE: small; COLOR: #666666; FONT-FAMILY: Arial, Helvetica, =
sans-serif; TEXT-ALIGN: left
}
.formTextarea {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 1px; FONT-SIZE: small; PADDING-BOTTOM: =
1px; BORDER-LEFT: #999999 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#999999 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #ffffff
}
.formTextarea:focus {
	BACKGROUND-COLOR: #ffffed
}
.formTextfield {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 1px; FONT-SIZE: small; PADDING-BOTTOM: =
1px; BORDER-LEFT: #999999 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#999999 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #ffffff
}
.formTextfield:focus {
	BACKGROUND-COLOR: #ffffed
}
.formChooserfield {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 1px; FONT-SIZE: small; PADDING-BOTTOM: =
1px; BORDER-LEFT: #999999 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: =
#999999 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #dddddd
}
.formCheckbox {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
1px; VERTICAL-ALIGN: middle; PADDING-TOP: 0px
}
.formRadiobox {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
1px; VERTICAL-ALIGN: middle; PADDING-TOP: 0px
}
.formLabelbox {
	FONT-SIZE: small; FONT-FAMILY: Arial, Helvetica, sans-serif; =
TEXT-ALIGN: left
}
.formCombobox {
	FONT-SIZE: small; FONT-FAMILY: Arial, Helvetica, sans-serif
}
.formListbox {
	FONT-SIZE: small; FONT-FAMILY: Arial, Helvetica, sans-serif
}
.formUnits {
	FONT-SIZE: x-small; FONT-FAMILY: Arial, Helvetica, sans-serif
}
.formButton:hover {
	BORDER-RIGHT: #999999 1px solid; BORDER-TOP: #999999 1px solid; =
BORDER-LEFT: #999999 1px solid; BORDER-BOTTOM: #999999 1px solid
}
.formButton {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: =
#666666 1px solid; PADDING-LEFT: 6px; FONT-SIZE: small; =
BACKGROUND-IMAGE: url(../images/jalios/layout/bg/buttonBg.gif); =
PADDING-BOTTOM: 0px; MARGIN: 2px; OVERFLOW: visible; BORDER-LEFT: =
#666666 1px solid; WIDTH: auto; PADDING-TOP: 0px; BORDER-BOTTOM: #666666 =
1px solid; BACKGROUND-REPEAT: repeat-x; FONT-FAMILY: Arial, Helvetica, =
sans-serif; HEIGHT: 23px; BACKGROUND-COLOR: #dddddd
}
.seriousButton:hover {
	BORDER-RIGHT: #dd6666 1px solid; BORDER-TOP: #dd6666 1px solid; =
BORDER-LEFT: #dd6666 1px solid; BORDER-BOTTOM: #dd6666 1px solid
}
.seriousButton {
	BORDER-RIGHT: #990000 1px solid; BORDER-TOP: #990000 1px solid; =
FONT-WEIGHT: bold; BACKGROUND: =
url(../images/jalios/layout/bg/seriousButtonBg.gif) #cc9999; =
BORDER-LEFT: #990000 1px solid; COLOR: #ffffff; BORDER-BOTTOM: #990000 =
1px solid
}
.mainButton:hover {
	BORDER-RIGHT: #6666ff 1px solid; BORDER-TOP: #6666ff 1px solid; =
BORDER-LEFT: #6666ff 1px solid; BORDER-BOTTOM: #6666ff 1px solid
}
.mainButton {
	BORDER-RIGHT: #333388 1px solid; BORDER-TOP: #333388 1px solid; =
FONT-WEIGHT: bold; BACKGROUND: =
url(../images/jalios/layout/bg/mainButtonBg.gif) #99bbee; BORDER-LEFT: =
#333388 1px solid; COLOR: #ffffff; BORDER-BOTTOM: #333388 1px solid
}
.disabledButton:hover {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
BORDER-LEFT: #666666 1px solid; BORDER-BOTTOM: #666666 1px solid
}
[disabled].formButton {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
BORDER-LEFT: #666666 1px solid; BORDER-BOTTOM: #666666 1px solid
}
.disabledButton {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
BACKGROUND-IMAGE: url(../images/jalios/layout/bg/mainButtonDisbBg.gif); =
BORDER-LEFT: #666666 1px solid; COLOR: #666666; BORDER-BOTTOM: #666666 =
1px solid; BACKGROUND-COLOR: #bcbcbc
}
.formDisabled {
	COLOR: gray; BACKGROUND-COLOR: #dcdcdc
}
A.formButton {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#666666 1px solid; PADDING-LEFT: 3px; FONT-SIZE: x-small; =
PADDING-BOTTOM: 3px; BORDER-LEFT: #666666 1px solid; COLOR: #333333; =
PADDING-TOP: 3px; BORDER-BOTTOM: #666666 1px solid; FONT-FAMILY: Arial, =
Helvetica, sans-serif; TEXT-DECORATION: none
}
.UI_EDITOR_TEXTFIELD .tab-page {
	WHITE-SPACE: nowrap
}
.UI_EDITOR_TEXTAREA .tab-page {
	WHITE-SPACE: nowrap
}
.UI_EDITOR_WIKIAREA .tab-page {
	WHITE-SPACE: nowrap
}
.UI_EDITOR_TEXTFIELD_INTEGER .formTextfield {
	TEXT-ALIGN: right
}
.UI_EDITOR_TEXTFIELD_DOUBLE .formTextfield {
	TEXT-ALIGN: right
}
.UI_EDITOR_DURATIONCHOOSER .formTextfield {
	TEXT-ALIGN: right
}
.UI_EDITOR_WARNAREA .formTextarea {
	BACKGROUND-COLOR: #ffeecc
}
.UI_EDITOR_IMAGEMAPAREA .formTextarea {
	BACKGROUND-COLOR: #ffeecc
}
.UI_EDITOR_RICHTEXT .formRichText {
	BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#999999 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
BORDER-LEFT: #999999 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: =
#999999 1px solid; BACKGROUND-COLOR: #ffeecc
}
.UI_EDITOR_RICHTEXT .formRichTextLink {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 4px; WIDTH: =
640px; PADDING-TOP: 4px
}
.UI_EDITOR_RICHTEXT .editLinks {
=09
}
.UI_EDITOR_RICHTEXT .editLink {
	BORDER-RIGHT: #333388 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: =
#333388 1px solid; PADDING-LEFT: 6px; FONT-SIZE: 9px; BACKGROUND-IMAGE: =
url(../images/jalios/layout/bg/mainButtonBg.gif); PADDING-BOTTOM: 2px; =
BORDER-LEFT: #333388 1px solid; CURSOR: default; COLOR: white; =
PADDING-TOP: 2px; BORDER-BOTTOM: #333388 1px solid; BACKGROUND-REPEAT: =
repeat-x; BACKGROUND-COLOR: #dddddd; TEXT-DECORATION: none
}
.UI_EDITOR_RICHTEXT .editLink:hover {
	BORDER-RIGHT: #6666ff 1px solid; BORDER-TOP: #6666ff 1px solid; =
BORDER-LEFT: #6666ff 1px solid; BORDER-BOTTOM: #6666ff 1px solid
}
.UI_EDITOR_RICHTEXT .editInfo {
	PADDING-LEFT: 11px; BACKGROUND: =
url(../images/jalios/icons/arrowSmallLeft.gif) no-repeat left center; =
MARGIN-LEFT: 10px; COLOR: brown
}
.UI_EDITOR_RICHTEXT .viewsLinks {
	FLOAT: right
}
.UI_EDITOR_RICHTEXT .srcLink {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
.UI_EDITOR_RICHTEXT .prevLink {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
.UI_EDITOR_RICHTEXT .srcLinkDisabled {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
.UI_EDITOR_RICHTEXT .prevLinkDisabled {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
.UI_EDITOR_RICHTEXT .srcLink {
	COLOR: gray
}
.UI_EDITOR_RICHTEXT .prevLink {
	COLOR: gray
}
.UI_EDITOR_RICHTEXT .showSrc .prevLinkDisabled {
	DISPLAY: none
}
.UI_EDITOR_RICHTEXT .showSrc .srcLink {
	DISPLAY: none
}
.UI_EDITOR_RICHTEXT .showSrc .srcLinkDisabled {
	FONT-WEIGHT: bold; BACKGROUND-COLOR: #ffeecc
}
.showSrc TEXTAREA {
	DISPLAY: block
}
.showSrc IFRAME {
	DISPLAY: none
}
.UI_EDITOR_RICHTEXT .showPrev .srcLinkDisabled {
	DISPLAY: none
}
.UI_EDITOR_RICHTEXT .showPrev .prevLink {
	DISPLAY: none
}
.UI_EDITOR_RICHTEXT .showPrev .prevLinkDisabled {
	FONT-WEIGHT: bold; BACKGROUND-COLOR: #fcfcf0
}
.showPrev TEXTAREA {
	DISPLAY: none
}
.UI_EDITOR_RICHTEXT TEXTAREA {
	BORDER-RIGHT: #999999 1px solid; BORDER-TOP: #999999 1px solid; =
BORDER-LEFT: #999999 1px solid; WIDTH: 640px; BORDER-BOTTOM: #999999 1px =
solid; HEIGHT: 300px; BACKGROUND-COLOR: #ffeecc
}
.UI_EDITOR_RICHTEXT IFRAME.formRichTextPopup {
	BORDER-RIGHT: #999999 2px dotted; BORDER-TOP: #999999 2px dotted; =
BORDER-LEFT: #999999 2px dotted; WIDTH: 640px; BORDER-BOTTOM: #999999 =
2px dotted; HEIGHT: 300px
}
.textarea-resizer {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 0px solid; =
FONT-SIZE: 1px; BACKGROUND: =
url(../images/jalios/icons/resize-handle.gif) center top; BORDER-LEFT: =
#666666 1px solid; WIDTH: 500px; CURSOR: s-resize; LINE-HEIGHT: 1px; =
BORDER-BOTTOM: #666666 1px solid; HEIGHT: 6px
}
.textarea-resized {
	MARGIN-BOTTOM: 0px
}
.inline-widget {
	DISPLAY: inline
}
.float-widget {
	FLOAT: left
}
.nolist-widget LI {
	LIST-STYLE-TYPE: none
}
.nolist-widget OL {
	PADDING-LEFT: 4px; MARGIN-LEFT: 0px
}
.nolist-widget UL {
	PADDING-LEFT: 4px; MARGIN-LEFT: 0px
}
.tab-row {
	ZOOM: 1
}
.tab-row .tab {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#999999 1px solid; DISPLAY: inline; PADDING-LEFT: 5px; FONT-WEIGHT: =
normal; FONT-SIZE: small; BACKGROUND: #d0d0d0; FLOAT: left; =
PADDING-BOTTOM: 3px; MARGIN: 4px 0px 1px; BORDER-LEFT: #999999 1px =
solid; CURSOR: default; PADDING-TOP: 2px; BORDER-BOTTOM: #999999 1px; =
FONT-FAMILY: Arial, Helvetica, sans-serif; POSITION: relative; TOP: 1px
}
.tab-row .tab_selected {
	BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#999999 1px solid; DISPLAY: inline; PADDING-LEFT: 5px; FONT-WEIGHT: =
normal; FONT-SIZE: small; BACKGROUND: #d0d0d0; FLOAT: left; =
PADDING-BOTTOM: 3px; MARGIN: 4px 0px 1px; BORDER-LEFT: #999999 1px =
solid; CURSOR: default; PADDING-TOP: 2px; BORDER-BOTTOM: #999999 1px; =
FONT-FAMILY: Arial, Helvetica, sans-serif; POSITION: relative; TOP: 1px
}
.tab-row .tab A {
	CURSOR: default; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, =
sans-serif; TEXT-DECORATION: none
}
.tab-row .tab_selected A {
	CURSOR: default; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, =
sans-serif; TEXT-DECORATION: none
}
* HTML .tab-row .tab {
	TOP: auto
}
* HTML .tab-row .tab_selected {
	TOP: auto
}
*:first-child + HTML .tab-row .tab {
	TOP: auto
}
*:first-child + HTML .tab-row .tab_selected {
	TOP: auto
}
.tab-row .tab A:hover {
	COLOR: blue
}
.tab-row .tab_selected A:hover {
	COLOR: blue
}
.tab-row .tab_selected {
	BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 6px; PADDING-LEFT: 7px; =
FONT-WEIGHT: bold; BORDER-LEFT-WIDTH: 1px; BORDER-LEFT-COLOR: #999999; =
BACKGROUND: url(../images/jalios/layout/bg/tabBg.gif) #e4ecee repeat-x; =
BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: #666666; PADDING-BOTTOM: =
4px; MARGIN: 0px; BORDER-TOP-COLOR: #999999; PADDING-TOP: 5px; TOP: 2px; =
BORDER-RIGHT-WIDTH: 1px; BORDER-RIGHT-COLOR: #666666
}
* HTML .tab-row .tab_selected {
	TOP: 1px
}
*:first-child + HTML .tab-row .tab_selected {
	TOP: 1px
}
.tab-single-pane {
	CLEAR: both; BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 10px; =
BORDER-TOP: #999999 1px solid; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/jalios/layout/bg/formBg.gif) #fafafa repeat-x; =
PADDING-BOTTOM: 10px; FONT: Message-Box; BORDER-LEFT: #999999 1px solid; =
COLOR: windowtext; PADDING-TOP: 10px; BORDER-BOTTOM: #666666 1px solid
}
.tab-page {
	CLEAR: both; BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 10px; =
BORDER-TOP: #999999 1px solid; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/jalios/layout/bg/formBg.gif) #fafafa repeat-x; =
PADDING-BOTTOM: 10px; FONT: Message-Box; BORDER-LEFT: #999999 1px solid; =
COLOR: windowtext; PADDING-TOP: 10px; BORDER-BOTTOM: #666666 1px solid
}
.tab-page TEXTAREA {
	POSITION: relative
}
.tab-page PRE {
	FONT-SIZE: smaller
}
.tab-page HR {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; COLOR: #dddddd; HEIGHT: 1px; BACKGROUND-COLOR: #dddddd; =
BORDER-RIGHT-WIDTH: 0px
}
.tab-page .tab-row .tab {
	BORDER-LEFT-COLOR: #cccccc; BORDER-BOTTOM-COLOR: #aaaaaa; =
BORDER-TOP-COLOR: #cccccc; BORDER-RIGHT-COLOR: #aaaaaa
}
.tab-page .tab-row .tab_selected {
	BORDER-LEFT-COLOR: #cccccc; BORDER-BOTTOM-COLOR: #aaaaaa; =
BORDER-TOP-COLOR: #cccccc; BORDER-RIGHT-COLOR: #aaaaaa
}
.tab-page .tab-page {
	BORDER-LEFT-COLOR: #cccccc; BACKGROUND: =
url(../images/jalios/layout/bg/subFormBg.gif) #eceef0 repeat-x 50% =
bottom; BORDER-BOTTOM-COLOR: #aaaaaa; BORDER-TOP-COLOR: #cccccc; =
BORDER-RIGHT-COLOR: #aaaaaa
}
H2.tab {
	FONT-WEIGHT: bold; FONT-SIZE: small; FONT-FAMILY: Arial, Helvetica, =
sans-serif
}
BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #ffffff
}
DIV.exception BUTTON {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; MARGIN: =
1px; FONT: bold 8pt Arial, Helvetica, sans-serif; BORDER-LEFT: #666666 =
1px solid; COLOR: #ffffff; BORDER-BOTTOM: #666666 1px solid; =
BACKGROUND-COLOR: #cc0000
}
DIV.exception TEXTAREA {
	BORDER-RIGHT: #cc0000 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#cc0000 1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-SIZE: 8pt; =
PADDING-BOTTOM: 5px; MARGIN: 0px; OVERFLOW: scroll; BORDER-LEFT: #cc0000 =
1px solid; WIDTH: 400px; COLOR: #111111; PADDING-TOP: 5px; =
BORDER-BOTTOM: #cc0000 1px solid; WHITE-SPACE: pre; HEIGHT: 300px; =
BACKGROUND-COLOR: #dddddd; TEXT-ALIGN: left
}
HTML > BODY DIV.exception TEXTAREA {
	WIDTH: 90%
}
DIV.previewWFState {
	BORDER-RIGHT: #ffee88 1px solid; BORDER-TOP: #ffee88 1px solid; MARGIN: =
5px; VERTICAL-ALIGN: middle; BORDER-LEFT: #ffee88 1px solid; =
BORDER-BOTTOM: #ffee88 1px solid; BACKGROUND-COLOR: #ffffcc
}
DIV.previewWFStateTitle {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; FONT: bold =
12pt Arial, Helvetica, sans-serif; PADDING-TOP: 4px; WHITE-SPACE: =
nowrap; BACKGROUND-COLOR: #ffee88; TEXT-ALIGN: left
}
DIV.previewWFStateChooser {
	PADDING-RIGHT: 4px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; FONT: 10pt =
Arial, Helvetica, sans-serif; PADDING-TOP: 8px
}
.previewWFState FORM {
	DISPLAY: inline
}
.previewWFState SELECT {
=09
}
.previewWFState OPTION {
=09
}
.hidden {
	DISPLAY: none
}
.nowrap {
	WHITE-SPACE: nowrap
}
.tree {
	BORDER-RIGHT: red 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: red 0px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 12px =
Arial, Helvetica, sans-serif; BORDER-LEFT: red 0px solid; COLOR: black; =
PADDING-TOP: 0px; BORDER-BOTTOM: red 0px solid; WHITE-SPACE: nowrap; =
BORDER-COLLAPSE: collapse; TEXT-DECORATION: none
}
.tree SPAN {
	BORDER-RIGHT: red 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: red 0px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 12px =
Arial, Helvetica, sans-serif; BORDER-LEFT: red 0px solid; COLOR: black; =
PADDING-TOP: 0px; BORDER-BOTTOM: red 0px solid; WHITE-SPACE: nowrap; =
BORDER-COLLAPSE: collapse; TEXT-DECORATION: none
}
.tree A {
	BORDER-RIGHT: red 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: red 0px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 12px =
Arial, Helvetica, sans-serif; BORDER-LEFT: red 0px solid; COLOR: black; =
PADDING-TOP: 0px; BORDER-BOTTOM: red 0px solid; WHITE-SPACE: nowrap; =
BORDER-COLLAPSE: collapse; TEXT-DECORATION: none
}
.tree TD {
	BORDER-RIGHT: red 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: red 0px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 12px =
Arial, Helvetica, sans-serif; BORDER-LEFT: red 0px solid; COLOR: black; =
PADDING-TOP: 0px; BORDER-BOTTOM: red 0px solid; WHITE-SPACE: nowrap; =
BORDER-COLLAPSE: collapse; TEXT-DECORATION: none
}
.tree A:hover {
	TEXT-DECORATION: underline
}
.tree INPUT {
	WIDTH: 12px; HEIGHT: 12px
}
.tree A.node IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
.ULtree {
	FONT: 12px Arial, Helvetica, Sans-Serif; COLOR: #333333; =
LIST-STYLE-TYPE: none
}
.ULtree UL {
	FONT: 12px Arial, Helvetica, Sans-Serif; COLOR: #333333; =
LIST-STYLE-TYPE: none
}
.ULtree LI {
	MARGIN: 2px 2px 0px -25px; FONT: 12px Arial, Helvetica, Sans-Serif; =
COLOR: #333333; WHITE-SPACE: nowrap
}
.ULtree A {
	FONT: 12px Arial, Helvetica, Sans-Serif; COLOR: #333333; =
TEXT-DECORATION: none
}
.ULtree A:hover {
	TEXT-DECORATION: underline
}
.clickable {
	CURSOR: pointer
}
A.ctxPubMenu {
	MARGIN-LEFT: -5px
}
A.ctxMbrMenu {
	MARGIN-LEFT: -5px
}
A.ctxLoginSuMenu {
	MARGIN-LEFT: -2px
}
A.ctxLangMenu {
=09
}
A.ctxWsMenu {
=09
}
A.ctxEditAddMenu {
=09
}
TD.displayHeaderToolbar A.ctxPubMenu {
	LEFT: -13px; MARGIN-LEFT: 1px; POSITION: relative; TOP: -8px
}
IMG.thumbnail {
	BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#bbbbbb 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: 5px; =
BORDER-LEFT: #bbbbbb 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #bbbbbb =
1px solid; BACKGROUND-COLOR: #eeeeee
}
FIELDSET {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; =
PADDING-TOP: 3px
}
.classic {
	FONT-SIZE: 11px; MAX-WIDTH: 792px; FONT-FAMILY: Verdana, sans-serif; =
font-color: white
}
.classic P {
	MARGIN-TOP: 10px; FONT-SIZE: 11px; LINE-HEIGHT: 15px; FONT-FAMILY: =
Verdana, sans-serif; font-color: white
}
.classic TABLE {
	MAX-WIDTH: 792px; FONT: 16px/19px serif
}
.classic .normal {
	FONT: 16px/19px serif
}
.classic .normal TABLE {
	FONT: 16px/19px serif
}
.classic .special {
	FONT: 12px/19px sans-serif
}
.classic .special TABLE {
	FONT: 12px/19px sans-serif
}
.classic .legend {
	FONT: oblique 10px/13px serif
}
.classic CODE {
	FONT: 16px/19px monospace; WHITE-SPACE: nowrap
}
.classic PRE {
	FONT: 16px/19px monospace; WHITE-SPACE: nowrap
}
.classic CODE {
	BACKGROUND: #f7f7f7
}
.classic H1 {
	FONT-WEIGHT: normal; FONT-SIZE: 14px; COLOR: #0e86c7
}
.classic H2 {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #0e86c7
}
.classic OL LI {
	LIST-STYLE-POSITION: inside
}
.classic UL LI {
	LIST-STYLE-POSITION: inside; LIST-STYLE-TYPE: square
}
.classic TABLE {
	BORDER-COLLAPSE: collapse
}
.classic TD {
	BORDER-RIGHT: #000 0px solid; PADDING-RIGHT: 4px; BORDER-TOP: #000 0px =
solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 2px; BORDER-LEFT: #000 0px =
solid; PADDING-TOP: 2px; BORDER-BOTTOM: #000 0px solid
}
.classic TH {
	BORDER-RIGHT: #000 0px solid; PADDING-RIGHT: 4px; BORDER-TOP: #000 0px =
solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 2px; BORDER-LEFT: #000 0px =
solid; PADDING-TOP: 2px; BORDER-BOTTOM: #000 0px solid
}
.classic THEAD TD {
	BACKGROUND: #e0e0e0; FONT: bold 15px Verdana, sans-serif
}
.classic TFOOT TD {
	BACKGROUND: #f0f0f0
}
.classic .quotation {
	PADDING-RIGHT: 0.6em; PADDING-LEFT: 0.6em; BACKGROUND: =
url(../images/jalios/layout/bg_quote_right.gif) #efefef no-repeat right =
bottom; FLOAT: left; PADDING-BOTTOM: 1.5em; BORDER-LEFT: #d2d2d2 0.4em =
solid; PADDING-TOP: 0.4em; TEXT-ALIGN: justify
}
.classic .txtHome {
	FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #dbdbdb; LINE-HEIGHT: =
18px; TEXT-ALIGN: justify
}
.classic .titHome {
	FONT-WEIGHT: normal; FONT-SIZE: 16px; COLOR: #009ee0; PADDING-TOP: 5px; =
FONT-FAMILY: Verdana, sans-serif
}
.classic A:link {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
.classic A:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
.classic A:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #ffffff; TEXT-DECORATION: =
none
}
.classicPlanet .txtHome {
	FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #000000; LINE-HEIGHT: =
18px; TEXT-ALIGN: justify
}
.classicPlanet .titHome {
	FONT-WEIGHT: normal; FONT-SIZE: 16px; COLOR: #004551; PADDING-TOP: 5px; =
FONT-FAMILY: Verdana, sans-serif
}
.classicPlanet P {
	MARGIN-TOP: 10px; FONT-SIZE: 11px; COLOR: white; LINE-HEIGHT: 15px; =
FONT-FAMILY: Verdana, sans-serif
}
.classicPlanet H2 {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #004551
}
.classicPlanet A:link {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #005800; TEXT-DECORATION: =
none
}
.classicPlanet A:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #005800; TEXT-DECORATION: =
none
}
.classicPlanet A:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #ffffff; TEXT-DECORATION: =
none
}
.wiki P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; MARGIN: 5px =
0px; LINE-HEIGHT: 120%; PADDING-TOP: 5px
}
.wiki P.first {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; MARGIN: 0px =
0px 5px; PADDING-TOP: 0px
}
.wiki H1 {
	FONT-FAMILY: Arial, Helvetica, sans-serif
}
.wiki H2 {
	FONT-FAMILY: Arial, Helvetica, sans-serif
}
.wiki H3 {
	FONT-FAMILY: Arial, Helvetica, sans-serif
}
.wiki HR {
	BORDER-TOP: 1px solid; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: =
1px; BORDER-RIGHT-WIDTH: 1px
}
.wiki IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
.wiki TABLE {
	BACKGROUND-COLOR: #000000
}
.wiki TR {
	BACKGROUND-COLOR: #ffffff
}
.wiki TH {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 3px; COLOR: #000000; PADDING-TOP: 3px; FONT-FAMILY: =
Arial, Helvetica, sans-serif; BACKGROUND-COLOR: #eeeeee
}
.wiki TD {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; =
PADDING-TOP: 3px
}
.wiki CODE {
=09
}
.wiki A {
=09
}
.wiki OL {
=09
}
.wiki UL {
=09
}
.wiki LI {
=09
}
.wiki DL {
=09
}
.wiki DT {
=09
}
.wiki DD {
=09
}
.wiki PRE {
	CLEAR: both; BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; =
BORDER-TOP: #cccccc 1px solid; DISPLAY: block; PADDING-LEFT: 5px; =
PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #cccccc 1px solid; =
PADDING-TOP: 5px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: =
#f4f9ff
}
.wiki Q {
	PADDING-RIGHT: 0.8em; BORDER-TOP: #878787 1px dotted; PADDING-LEFT: =
3.6em; BORDER-LEFT-WIDTH: 0px; BACKGROUND: =
url(../images/jalios/layout/bg_quote_left02.gif) #f7f7d7 no-repeat left =
top; PADDING-BOTTOM: 1em; MARGIN: 0.1em 0.5em 0.8em 0.1em; PADDING-TOP: =
1em; BORDER-BOTTOM: #878787 1px dotted; TEXT-ALIGN: justify
}
.wiki BLOCKQUOTE {
	PADDING-RIGHT: 0.8em; BORDER-TOP: #878787 1px dotted; PADDING-LEFT: =
3.6em; BORDER-LEFT-WIDTH: 0px; BACKGROUND: =
url(../images/jalios/layout/bg_quote_left02.gif) #f7f7d7 no-repeat left =
top; PADDING-BOTTOM: 1em; MARGIN: 0.1em 0.5em 0.8em 0.1em; PADDING-TOP: =
1em; BORDER-BOTTOM: #878787 1px dotted; TEXT-ALIGN: justify
}
.txtActualite P.first {
	MARGIN-TOP: 10px; FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #dbdbdb; =
LINE-HEIGHT: 14px; TEXT-ALIGN: justify
}
.wiki A:link {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
.classic A:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
#ctxPlanetULg .wiki A:link {
	COLOR: #0084bd
}
#ctxPlanetULg .classic A:visited {
	COLOR: #0084bd
}
.wiki A:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #ffffff; TEXT-DECORATION: =
none
}
.classic A:active {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #ffffff; TEXT-DECORATION: =
none
}
TABLE.forumBorder {
	BACKGROUND-COLOR: #666660
}
TABLE.forumBackground {
	BACKGROUND-COLOR: #e0e0e0
}
TD.forumHeader {
	FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #ffffff; FONT-FAMILY: Arial, =
Helvetica, sans-serif; WHITE-SPACE: nowrap; BACKGROUND-COLOR: #ccccc0; =
TEXT-ALIGN: center
}
A.forumHeader {
	FONT-WEIGHT: bold; COLOR: #ffffff; FONT-FAMILY: Arial, Helvetica, =
sans-serif; TEXT-ALIGN: center
}
A.forumHeaderSel {
	FONT-WEIGHT: bold; COLOR: #ffff00; FONT-FAMILY: Arial, Helvetica, =
sans-serif; TEXT-ALIGN: center
}
TD.forumEmptyHeader {
	BACKGROUND-COLOR: #ffffff
}
TR.forumOddRow {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #e0e0e0
}
TR.forumEvenRow {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #f0f0f0
}
TD.forumEvenRow {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #f0f0f0
}
TD.forumOddRow {
	FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND-COLOR: #e0e0e0
}
.forumEvenRow A {
	FONT-WEIGHT: bold; COLOR: #000000; TEXT-DECORATION: none
}
.forumOddRow A {
	FONT-WEIGHT: bold; COLOR: #000000; TEXT-DECORATION: none
}
.forumEvenRow A:hover {
	FONT-WEIGHT: bold; COLOR: #000000; TEXT-DECORATION: underline
}
.forumOddRow A:hover {
	FONT-WEIGHT: bold; COLOR: #000000; TEXT-DECORATION: underline
}
DIV#threadView {
	MARGIN-BOTTOM: 20px; WIDTH: 98%
}
DIV#threadView .message {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: 10px 5px; PADDING-LEFT: 30px; =
FONT-SIZE: small; BACKGROUND-IMAGE: =
url(../images/jalios/icons/files/article.gif); PADDING-BOTTOM: 0px; =
MARGIN: 0px; PADDING-TOP: 5px; BACKGROUND-REPEAT: no-repeat; =
FONT-FAMILY: Arial, Helvetica, sans-serif
}
DIV#threadView .message .message {
	BORDER-LEFT: #cccccc 1px dashed
}
DIV#threadView .details {
	FONT-SIZE: x-small; COLOR: #666666; FONT-FAMILY: verdana, sans-serif
}
DIV#discussionTable {
	MARGIN: 20px 0px
}
DIV#discussionTable DIV.post {
	BORDER-RIGHT: #666660 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#666660 1px solid; PADDING-LEFT: 5px; MARGIN-BOTTOM: 5px; =
PADDING-BOTTOM: 5px; BORDER-LEFT: #666660 1px solid; PADDING-TOP: 5px; =
BORDER-BOTTOM: #666660 1px solid; FONT-FAMILY: Arial, Helvetica, =
sans-serif; BACKGROUND-COLOR: #e0e0e0
}
DIV#discussionTable DIV.oddRow {
	BACKGROUND-COLOR: #e0e0e0
}
DIV#discussionTable DIV.evenRow {
	BACKGROUND-COLOR: #f0f0f0
}
DIV#discussionTable DIV.post DIV.reply {
	FLOAT: right; MARGIN-RIGHT: 4px
}
DIV#discussionTable DIV.post .reply {
	FONT-SIZE: small
}
DIV#discussionTable DIV.post .writer {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: 0px 0px; PADDING-LEFT: 0px; =
FLOAT: left; PADDING-BOTTOM: 2px; PADDING-TOP: 0px; BACKGROUND-REPEAT: =
no-repeat
}
DIV#discussionTable DIV.post .writer P {
	FONT-SIZE: x-small; MARGIN: 0px 5px 0px 0px
}
DIV#discussionTable DIV.post .writer P.author {
	DISPLAY: block; FONT-WEIGHT: bold; FONT-SIZE: small; MARGIN-BOTTOM: 0px
}
DIV#discussionTable DIV.post .writer P.author A {
	COLOR: black
}
DIV#discussionTable DIV.post .title {
	FONT-WEIGHT: bold; FONT-SIZE: small; PADDING-BOTTOM: 10px; =
BORDER-BOTTOM: #cccccc 1px dashed
}
DIV#discussionTable DIV.post .message {
	CLEAR: both; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: small; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #ffffff
}
.Faq .entry {
	MARGIN-TOP: 10px; MARGIN-BOTTOM: 20px
}
.Faq .entry .question {
	FONT-WEIGHT: bold; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, =
sans-serif
}
.Glossary .index {
	FONT-SIZE: 14px; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-ALIGN: =
center
}
.Glossary .indexLetter {
	FONT-WEIGHT: bold; COLOR: #000000
}
.Glossary .emptyLetter {
	COLOR: #999999
}
.Glossary .letter {
	FONT-WEIGHT: bold; FONT-SIZE: 24px; COLOR: #000000; FONT-FAMILY: Arial, =
Helvetica, sans-serif
}
.Glossary .entry {
	MARGIN-TOP: 10px; MARGIN-BOTTOM: 20px
}
.Glossary .entry .term {
	FONT-WEIGHT: bold; COLOR: #000000; FONT-FAMILY: Arial, Helvetica, =
sans-serif
}
.Glossary .entry .seealso .label {
	FONT-WEIGHT: bold; BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px
}
.Glossary .entry .translation .label {
	FONT-WEIGHT: bold; BORDER-LEFT-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px
}

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/css/portal/reflexions.css

BODY {
	FONT-SIZE: 11px; MARGIN: 0px; FONT-FAMILY: Verdana, sans-serif; =
BACKGROUND-COLOR: #000000
}
P {
	MARGIN-TOP: 10px; FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; =
LINE-HEIGHT: 15px; TEXT-ALIGN: justify
}
A.header:link {
	PADDING-RIGHT: 16px; PADDING-LEFT: 9px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; BACKGROUND: url(../../images/custom/menu/puce_submenu_off.gif) =
no-repeat left center; PADDING-BOTTOM: 2px; COLOR: #00a2e5; =
TEXT-DECORATION: none
}
A.header:visited {
	PADDING-RIGHT: 16px; PADDING-LEFT: 9px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; BACKGROUND: url(../../images/custom/menu/puce_submenu_off.gif) =
no-repeat left center; PADDING-BOTTOM: 2px; COLOR: #00a2e5; =
TEXT-DECORATION: none
}
A.header:hover {
	PADDING-RIGHT: 16px; PADDING-LEFT: 9px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; BACKGROUND: url(../../images/custom/menu/puce_submenu_on.gif) =
no-repeat left center; PADDING-BOTTOM: 2px; COLOR: white; =
TEXT-DECORATION: none
}
A.header:active {
	PADDING-RIGHT: 16px; PADDING-LEFT: 9px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; BACKGROUND: url(../../images/custom/menu/puce_submenu_on.gif) =
no-repeat left center; PADDING-BOTTOM: 2px; COLOR: white; =
TEXT-DECORATION: none
}
A.headerActive {
	PADDING-RIGHT: 16px; PADDING-LEFT: 9px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; BACKGROUND: url(../../images/custom/menu/puce_submenu_on.gif) =
no-repeat left center; PADDING-BOTTOM: 2px; COLOR: white; =
TEXT-DECORATION: none
}
A.home:link {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_lire_off.gif) no-repeat left center; =
COLOR: #0084bd; TEXT-DECORATION: none
}
A.home:visited {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_lire_off.gif) no-repeat left center; =
COLOR: #0084bd; TEXT-DECORATION: none
}
A.home:hover {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_lire_on.gif) no-repeat left center; =
COLOR: white; TEXT-DECORATION: none
}
A.home:active {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_lire_on.gif) no-repeat left center; =
COLOR: white; TEXT-DECORATION: none
}
P.home {
	MARGIN-TOP: 3px; PADDING-BOTTOM: 20px
}
.txtHome {
	FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #dbdbdb; LINE-HEIGHT: =
18px; TEXT-ALIGN: justify
}
.txtActualite {
	MARGIN-TOP: 2px; FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #dbdbdb; =
LINE-HEIGHT: 14px
}
.titHome {
	FONT-WEIGHT: normal; FONT-SIZE: 16px; COLOR: #009ee0; PADDING-TOP: 5px
}
.titActualite {
	MARGIN-TOP: 2px; FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #009ee0
}
A.titlinkhome:link {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
A.titlinkhome:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
A.titlinkhome:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: white; TEXT-DECORATION: none
}
A.titlinkhome:active {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: white; TEXT-DECORATION: none
}
.signature1 {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #dbdbdb
}
.signature2 {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #dbdbdb
}
.txtTrailerC1 {
	MARGIN-TOP: 0px; FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #9f9f9f
}
TD.articleLocation {
	BORDER-RIGHT: black 2px solid; PADDING-RIGHT: 20px; PADDING-LEFT: 20px; =
PADDING-BOTTOM: 0px; VERTICAL-ALIGN: top; PADDING-TOP: 15px; =
BACKGROUND-COLOR: #cccccc
}
A.trailerC1:link {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #9f9f9f; TEXT-DECORATION: =
none
}
A.trailerC1:visited {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #9f9f9f; TEXT-DECORATION: =
none
}
A.trailerC1:hover {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: white; TEXT-DECORATION: =
none
}
A.trailerC1:active {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: white; TEXT-DECORATION: =
none
}
.txtTrailerC2 {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #555555
}
A.trailerC2:link {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #555555; TEXT-DECORATION: =
none
}
A.trailerC2:visited {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #555555; TEXT-DECORATION: =
none
}
A.trailerC2:hover {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #000000; TEXT-DECORATION: =
none
}
A.trailerC2:active {
	FONT-WEIGHT: normal; FONT-SIZE: 10px; COLOR: #000000; TEXT-DECORATION: =
none
}
A.language:link {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: white; TEXT-DECORATION: none
}
A.language:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: white; TEXT-DECORATION: none
}
A.language:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
A.language:active {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
TD.language {
	BACKGROUND-POSITION: right top; PADDING-LEFT: 10px; FONT-WEIGHT: bold; =
FONT-SIZE: 9px; BACKGROUND-IMAGE: =
url(../../images/custom/menu/fd_search.gif); VERTICAL-ALIGN: middle; =
COLOR: white; BACKGROUND-REPEAT: repeat; TEXT-ALIGN: left
}
TD.search {
	PADDING-RIGHT: 10px; BACKGROUND-POSITION: right top; FONT-WEIGHT: bold; =
FONT-SIZE: 9px; BACKGROUND-IMAGE: =
url(../../images/custom/menu/fd_search.gif); VERTICAL-ALIGN: middle; =
COLOR: white; BACKGROUND-REPEAT: repeat; TEXT-ALIGN: right
}
.txtSearch {
	FONT-WEIGHT: normal; FONT-SIZE: 9px; COLOR: black; FONT-FAMILY: =
Verdana, sans-serif; BACKGROUND-COLOR: #ffffff
}
IMG.search {
	PADDING-LEFT: 5px; VERTICAL-ALIGN: -30%
}
.menuUl {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 20px; =
LIST-STYLE-TYPE: none
}
.menuLi {
	PADDING-LEFT: 0px; PADDING-BOTTOM: 7px; PADDING-TOP: 7px; =
BORDER-BOTTOM: #686868 1px dotted
}
.menuLastLi {
	PADDING-LEFT: 0px; PADDING-TOP: 7px
}
A.menu:link {
	BACKGROUND-POSITION: 0px 5px; DISPLAY: block; PADDING-LEFT: 12px; =
FONT-SIZE: 11px; BACKGROUND-IMAGE: =
url(../../images/custom/menu/puce_submenu_off.gif); COLOR: #858585; =
BACKGROUND-REPEAT: no-repeat; TEXT-DECORATION: none
}
A.menu:visited {
	BACKGROUND-POSITION: 0px 5px; DISPLAY: block; PADDING-LEFT: 12px; =
FONT-SIZE: 11px; BACKGROUND-IMAGE: =
url(../../images/custom/menu/puce_submenu_off.gif); COLOR: #858585; =
BACKGROUND-REPEAT: no-repeat; TEXT-DECORATION: none
}
A.menu:hover {
	BACKGROUND-POSITION: 0px 5px; DISPLAY: block; PADDING-LEFT: 12px; =
FONT-SIZE: 11px; BACKGROUND-IMAGE: =
url(../../images/custom/menu/puce_submenu_on.gif); COLOR: white; =
BACKGROUND-REPEAT: no-repeat; TEXT-DECORATION: none
}
A.menu:active {
	BACKGROUND-POSITION: 0px 5px; DISPLAY: block; PADDING-LEFT: 12px; =
FONT-SIZE: 11px; BACKGROUND-IMAGE: =
url(../../images/custom/menu/puce_submenu_on.gif); COLOR: white; =
BACKGROUND-REPEAT: no-repeat; TEXT-DECORATION: none
}
.currentCat {
	FONT-WEIGHT: bold! important; COLOR: white
}
TD.menu {
	VERTICAL-ALIGN: top; PADDING-TOP: 20px; BACKGROUND-COLOR: #333333
}
TD.image {
	VERTICAL-ALIGN: top; BACKGROUND-COLOR: #333333
}
TD.article {
	BORDER-RIGHT: black 2px solid; PADDING-RIGHT: 20px; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 10px; VERTICAL-ALIGN: top; PADDING-TOP: 25px
}
TD.page {
	BORDER-RIGHT: black 2px solid; PADDING-RIGHT: 20px; PADDING-LEFT: 20px; =
PADDING-BOTTOM: 5px; VERTICAL-ALIGN: top; PADDING-TOP: 5px; =
BACKGROUND-COLOR: #cccccc
}
TD.content {
	PADDING-RIGHT: 20px; PADDING-LEFT: 20px; VERTICAL-ALIGN: top; =
PADDING-TOP: 5px; BACKGROUND-COLOR: #cccccc
}
TD.contentHeader {
	PADDING-RIGHT: 20px; PADDING-LEFT: 20px; VERTICAL-ALIGN: top; =
PADDING-TOP: 30px; BACKGROUND-COLOR: #cccccc
}
TD.contentarticle {
	PADDING-LEFT: 20px; BACKGROUND-IMAGE: =
url(../../images/custom/fondArticle.jpg); VERTICAL-ALIGN: top; =
PADDING-TOP: 30px
}
TD.pagination {
	VERTICAL-ALIGN: top; BACKGROUND-COLOR: #cccccc
}
TABLE.glossaire {
	MARGIN-BOTTOM: 20px; VERTICAL-ALIGN: top; BACKGROUND-COLOR: #404040
}
.zoneClicGlossaire {
	FONT-WEIGHT: 600; FONT-SIZE: 11px; FLOAT: left; VERTICAL-ALIGN: bottom; =
WIDTH: 30px; COLOR: #0084bd; POSITION: relative; TOP: 3px; HEIGHT: 20px; =
TEXT-DECORATION: none
}
.zoneClicGlossaire:hover {
	FONT-WEIGHT: 600; FONT-SIZE: 11px; FLOAT: left; WIDTH: 30px; COLOR: =
white; HEIGHT: 20px; TEXT-DECORATION: none
}
TD.glos {
	BORDER-RIGHT: #808080 1px dashed; FONT-SIZE: 11px; VERTICAL-ALIGN: =
middle; CURSOR: default; COLOR: #5f5f5f; TEXT-ALIGN: center
}
DIV#abstract {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; MIN-HEIGHT: 140px; =
MARGIN-BOTTOM: 10px; PADDING-BOTTOM: 12px; WIDTH: 770px; PADDING-TOP: =
10px; BACKGROUND-COLOR: #c2c2c2
}
DIV#abstractglossary {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; MIN-HEIGHT: 130px; =
MARGIN-BOTTOM: 10px; PADDING-BOTTOM: 10px; WIDTH: 770px; PADDING-TOP: =
10px; BACKGROUND-COLOR: #c2c2c2
}
P.article {
	MARGIN-TOP: 10px; FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; =
LINE-HEIGHT: 15px
}
P.page {
	MARGIN-TOP: 10px; FONT-WEIGHT: normal; FONT-SIZE: 10px; VERTICAL-ALIGN: =
bottom; COLOR: #333333; TEXT-ALIGN: right
}
A.page:link {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: normal; FONT-SIZE: =
10px; PADDING-BOTTOM: 2px; COLOR: #333333; PADDING-TOP: 2px; =
TEXT-DECORATION: none
}
A.page:visited {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: normal; FONT-SIZE: =
10px; PADDING-BOTTOM: 2px; COLOR: #333333; PADDING-TOP: 2px; =
TEXT-DECORATION: none
}
A.pageactive {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: normal; FONT-SIZE: =
10px; PADDING-BOTTOM: 2px; COLOR: white; PADDING-TOP: 2px; =
BACKGROUND-COLOR: #0084bd; TEXT-DECORATION: none
}
A.abstracttitarticle:link {
	MARGIN-TOP: 10px; FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #0e86c7; =
TEXT-DECORATION: none
}
A.abstracttitarticle:visited {
	MARGIN-TOP: 10px; FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #0e86c7; =
TEXT-DECORATION: none
}
A.abstracttitarticle:hover {
	MARGIN-TOP: 10px; FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: white; =
TEXT-DECORATION: none
}
A.abstracttitarticle:active {
	MARGIN-TOP: 10px; FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: white; =
TEXT-DECORATION: none
}
A.abstract:link {
	PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: =
10px; BACKGROUND: url(../../images/custom/menu/puce_abstract.gif) =
#0084bd no-repeat left center; PADDING-BOTTOM: 2px; COLOR: white; =
PADDING-TOP: 2px; POSITION: relative; TEXT-DECORATION: none
}
A.abstract:visited {
	PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: =
10px; BACKGROUND: url(../../images/custom/menu/puce_abstract.gif) =
#0084bd no-repeat left center; PADDING-BOTTOM: 2px; COLOR: white; =
PADDING-TOP: 2px; POSITION: relative; TEXT-DECORATION: none
}
A.abstract:hover {
	PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: =
10px; BACKGROUND: url(../../images/custom/menu/puce_abstract.gif) =
#404040 no-repeat left center; PADDING-BOTTOM: 2px; COLOR: white; =
PADDING-TOP: 2px; TEXT-DECORATION: none
}
A.abstract:active {
	PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: =
10px; BACKGROUND: url(../../images/custom/menu/puce_abstract.gif) =
#404040 no-repeat left center; PADDING-BOTTOM: 2px; COLOR: white; =
PADDING-TOP: 2px; TEXT-DECORATION: none
}
.titArticle {
	MARGIN-TOP: 10px; FONT-WEIGHT: bold; FONT-SIZE: 18px; COLOR: #004551; =
LINE-HEIGHT: 24px
}
.titArticleResult {
	MARGIN-TOP: 10px; FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #0e86c7
}
.soustitArticle {
	MARGIN-TOP: 10px; FONT-WEIGHT: normal; FONT-SIZE: 14px; MARGIN-BOTTOM: =
0px; COLOR: #0e86c7
}
.dateArticle {
	MARGIN-TOP: 10px; FONT-WEIGHT: normal; FONT-SIZE: 9px; COLOR: #000000
}
IMG.article {
	BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; FLOAT: =
right; MARGIN-BOTTOM: 10px; MARGIN-LEFT: 20px; BORDER-LEFT: black 1px =
solid; BORDER-BOTTOM: black 1px solid
}
H1 {
	FONT-WEIGHT: normal; FONT-SIZE: 14px; COLOR: #0e86c7
}
H2 {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #0e86c7
}
OL {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN: 0px; COLOR: #000000; =
LINE-HEIGHT: 15px; FONT-STYLE: normal; FONT-FAMILY: Verdana
}
UL {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN: 0px; COLOR: #000000; =
LINE-HEIGHT: 15px; FONT-STYLE: normal; FONT-FAMILY: Verdana
}
LI {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN: 0px; COLOR: #000000; =
LINE-HEIGHT: 15px; FONT-STYLE: normal; FONT-FAMILY: Verdana
}
.mapN1Ul {
	PADDING-LEFT: 100px; MARGIN: 0px; LIST-STYLE-TYPE: none
}
.mapN1Li {
	BACKGROUND-POSITION: 0px 0.4em; PADDING-LEFT: 17px; BACKGROUND-IMAGE: =
url(../../images/custom/plan/puce_mapN1.gif); BACKGROUND-REPEAT: =
no-repeat
}
.mapN2Ul {
	PADDING-LEFT: 140px; MARGIN: 0px; LIST-STYLE-TYPE: none
}
.mapN2Li {
	BACKGROUND-POSITION: 0px 0.4em; PADDING-LEFT: 17px; BACKGROUND-IMAGE: =
url(../../images/custom/plan/puce_mapN2.gif); BACKGROUND-REPEAT: =
no-repeat
}
A.map:link {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; TEXT-DECORATION: =
none
}
A.map:visited {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; TEXT-DECORATION: =
none
}
A.map:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #404040; TEXT-DECORATION: =
none
}
A.map:active {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #404040; TEXT-DECORATION: =
none
}
.alt {
	FONT-SIZE: 9px; COLOR: #ffffff; FONT-FAMILY: Verdana, sans-serif
}
A.auteur:link {
	FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
A.auteur:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
A.auteur:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: white; TEXT-DECORATION: none
}
A.auteur:active {
	FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: white; TEXT-DECORATION: none
}
A.info:link {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_lire_off.gif) no-repeat left center; =
COLOR: #0084bd; TEXT-DECORATION: none
}
A.info:visited {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_lire_off.gif) no-repeat left center; =
COLOR: #0084bd; TEXT-DECORATION: none
}
A.info:hover {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_lire_on.gif) no-repeat left center; =
COLOR: white; TEXT-DECORATION: none
}
A.info:active {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_lire_on.gif) no-repeat left center; =
COLOR: white; TEXT-DECORATION: none
}
A.print:link {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_print_off.gif) no-repeat left center; =
COLOR: #0084bd; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.print:visited {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_print_off.gif) no-repeat left center; =
COLOR: #0084bd; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.print:hover {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_print_on.gif) no-repeat left center; =
COLOR: white; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.print:active {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_print_on.gif) no-repeat left center; =
COLOR: white; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.pdf:link {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_pdf_off.gif) no-repeat left center; =
COLOR: #0084bd; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.pdf:visited {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_pdf_off.gif) no-repeat left center; =
COLOR: #0084bd; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.pdf:hover {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_pdf_on.gif) no-repeat left center; =
COLOR: white; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.pdf:active {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_pdf_on.gif) no-repeat left center; =
COLOR: white; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.mail:link {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_mail_off.gif) no-repeat left center; =
COLOR: #0084bd; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.mail:visited {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_mail_off.gif) no-repeat left center; =
COLOR: #0084bd; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.mail:hover {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_mail_on.gif) no-repeat left center; =
COLOR: white; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.mail:active {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND: =
url(../../images/custom/menu/puce_mail_on.gif) no-repeat left center; =
COLOR: white; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
A.fbtwitter IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
SPAN.FBConnectButton_Simple SPAN.FBConnectButton_Text_Simple {
	MARGIN: 0px
}
SPAN.FBConnectButton_Simple {
	BACKGROUND-IMAGE: none
}
A.lienFiche:link {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #779608; LINE-HEIGHT: 18px; =
TEXT-DECORATION: none
}
A.lienFiche:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #779608; LINE-HEIGHT: 18px; =
TEXT-DECORATION: none
}
A.lienFiche:active {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #779608; LINE-HEIGHT: 18px; =
TEXT-DECORATION: none
}
A.lienFiche:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: white; LINE-HEIGHT: 18px; =
TEXT-DECORATION: none
}
TD.auteur {
	PADDING-BOTTOM: 20px; VERTICAL-ALIGN: top
}
TD.document SPAN {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: #0084bd
}
TD.document {
	PADDING-RIGHT: 5px; PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; =
VERTICAL-ALIGN: top; PADDING-TOP: 5px; BACKGROUND-COLOR: #272727
}
P.auteur {
	PADDING-RIGHT: 10px; MARGIN-TOP: 0px; PADDING-LEFT: 10px; FONT-WEIGHT: =
normal; FONT-SIZE: 10px; COLOR: #dbdbdb; LINE-HEIGHT: 14px; TEXT-ALIGN: =
left
}
IMG.auteur {
	MARGIN-TOP: 20px; FLOAT: left; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 10px
}
IMG.filet {
	MARGIN-TOP: 10px; FLOAT: left; MARGIN-BOTTOM: 10px
}
.txtLegende {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-WEIGHT: normal; =
FONT-SIZE: 9px; PADDING-BOTTOM: 10px; COLOR: #dbdbdb; LINE-HEIGHT: 10px; =
PADDING-TOP: 5px
}
A.contact:link {
	FONT-WEIGHT: normal; FONT-SIZE: 9px; COLOR: #717171; TEXT-DECORATION: =
none
}
A.contact:visited {
	FONT-WEIGHT: normal; FONT-SIZE: 9px; COLOR: #717171; TEXT-DECORATION: =
none
}
A.contact:hover {
	FONT-WEIGHT: normal; FONT-SIZE: 9px; COLOR: white; TEXT-DECORATION: =
none
}
A.contact:active {
	FONT-WEIGHT: normal; FONT-SIZE: 9px; COLOR: white; TEXT-DECORATION: =
none
}
A.contactActive {
	FONT-WEIGHT: normal; FONT-SIZE: 9px; COLOR: white; TEXT-DECORATION: =
none
}
A.design:link {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
A.design:visited {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: #0084bd; TEXT-DECORATION: =
none
}
A.design:hover {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: white; TEXT-DECORATION: none
}
A.design:active {
	FONT-WEIGHT: bold; FONT-SIZE: 9px; COLOR: white; TEXT-DECORATION: none
}
TD.contact {
	PADDING-LEFT: 10px; FONT-WEIGHT: normal; FONT-SIZE: 9px; =
VERTICAL-ALIGN: middle; COLOR: #717171; BACKGROUND-COLOR: #262626; =
TEXT-ALIGN: left
}
TD.design {
	PADDING-RIGHT: 10px; FONT-WEIGHT: normal; FONT-SIZE: 9px; =
VERTICAL-ALIGN: middle; COLOR: #717171; BACKGROUND-COLOR: #262626; =
TEXT-ALIGN: right
}
TD.footer {
	BACKGROUND-POSITION: right top; BACKGROUND-IMAGE: =
url(../../images/custom/menu/fd_footer.gif); BACKGROUND-REPEAT: repeat
}
#LayerCadre {
	LEFT: 0px; WIDTH: 0px; POSITION: relative; TOP: -115px; HEIGHT: 0px
}
.dessus {
	POSITION: absolute
}
#LayerImageAccueil {
	POSITION: relative
}
.test {
	LEFT: 0px; MAX-WIDTH: 600px; POSITION: relative; TOP: 0px
}
.article {
	MAX-WIDTH: 600px
}
.test2 {
	RIGHT: 20px; LEFT: 25px; WIDTH: 600px; ZOOM: 1; POSITION: relative; =
TOP: 0px
}

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/plugins/PluginVideoQuickTime/highslide/highslide.css

.highslide-container DIV {
	FONT-SIZE: 10pt; FONT-FAMILY: Verdana, Helvetica
}
.highslide-container TABLE {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.highslide {
	TEXT-DECORATION: none; outline: none
}
.highslide IMG {
	BORDER-RIGHT: silver 2px solid; BORDER-TOP: silver 2px solid; =
BORDER-LEFT: silver 2px solid; BORDER-BOTTOM: silver 2px solid
}
.highslide:hover IMG {
	BORDER-LEFT-COLOR: gray; BORDER-BOTTOM-COLOR: gray; BORDER-TOP-COLOR: =
gray; BORDER-RIGHT-COLOR: gray
}
.highslide-active-anchor IMG {
	VISIBILITY: hidden
}
.highslide-gallery .highslide-active-anchor IMG {
	BORDER-LEFT-COLOR: black; VISIBILITY: visible; BORDER-BOTTOM-COLOR: =
black; CURSOR: default; BORDER-TOP-COLOR: black; BORDER-RIGHT-COLOR: =
black
}
.highslide-image {
	BORDER-RIGHT: white 2px solid; BORDER-TOP: white 2px solid; BACKGROUND: =
gray; BORDER-LEFT: white 2px solid; BORDER-BOTTOM: white 2px solid
}
.highslide-wrapper {
	BACKGROUND: white
}
.highslide-outline {
	BACKGROUND: white
}
.glossy-dark {
	BACKGROUND: #111
}
.highslide-image-blur {
=09
}
.highslide-number {
	FONT-WEIGHT: bold; FONT-SIZE: 0.9em; COLOR: gray
}
.highslide-caption {
	PADDING-RIGHT: 5px; DISPLAY: none; PADDING-LEFT: 5px; FONT-SIZE: 1em; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
.highslide-heading {
	DISPLAY: none; FONT-WEIGHT: bold; MARGIN: 0.4em
}
.highslide-dimming {
	BACKGROUND: black; POSITION: absolute
}
A.highslide-full-expand {
	DISPLAY: block; BACKGROUND: url(graphics/fullexpand.gif) no-repeat; =
MARGIN: 0px 10px 10px 0px; WIDTH: 34px; HEIGHT: 34px
}
.highslide-loading {
	BORDER-RIGHT: white 1px solid; PADDING-RIGHT: 3px; BACKGROUND-POSITION: =
3px 1px; BORDER-TOP: white 1px solid; DISPLAY: block; PADDING-LEFT: =
22px; FONT-WEIGHT: bold; FONT-SIZE: 9px; BACKGROUND-IMAGE: =
url(graphics/loader.white.gif); PADDING-BOTTOM: 3px; TEXT-TRANSFORM: =
uppercase; BORDER-LEFT: white 1px solid; COLOR: black; PADDING-TOP: 3px; =
BORDER-BOTTOM: white 1px solid; BACKGROUND-REPEAT: no-repeat; =
BACKGROUND-COLOR: white; TEXT-DECORATION: none
}
A.highslide-credits {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 10px; PADDING-BOTTOM: =
2px; COLOR: silver; PADDING-TOP: 2px; TEXT-DECORATION: none
}
A.highslide-credits I {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 10px; PADDING-BOTTOM: =
2px; COLOR: silver; PADDING-TOP: 2px; TEXT-DECORATION: none
}
A.highslide-credits:hover {
	COLOR: white; BACKGROUND-COLOR: gray
}
A.highslide-credits:hover I {
	COLOR: white; BACKGROUND-COLOR: gray
}
.highslide-move {
	CURSOR: move
}
.highslide-move * {
	CURSOR: move
}
.highslide-viewport {
	DISPLAY: none; Z-INDEX: 1; BACKGROUND: none transparent scroll repeat =
0% 0%; LEFT: 0px; WIDTH: 100%; POSITION: fixed; TOP: 0px; HEIGHT: 100%
}
.highslide-overlay {
	DISPLAY: none
}
.hidden-container {
	DISPLAY: none
}
.closebutton {
	BACKGROUND: url(graphics/close.png); LEFT: 15px; WIDTH: 30px; CURSOR: =
pointer; POSITION: relative; TOP: -15px; HEIGHT: 30px
}
.highslide-gallery UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.highslide-gallery UL LI {
	BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; DISPLAY: =
block; BACKGROUND: #ededed; FLOAT: left; MARGIN: 2px; OVERFLOW: hidden; =
BORDER-LEFT: silver 1px solid; WIDTH: 106px; LINE-HEIGHT: 0; =
BORDER-BOTTOM: silver 1px solid; POSITION: relative; HEIGHT: 106px
}
.highslide-gallery UL A {
	LEFT: 50%; POSITION: absolute; TOP: 50%
}
.highslide-gallery UL IMG {
	LEFT: -50%; POSITION: relative; TOP: -50%
}
HTML >  BODY .highslide-gallery UL LI {
	TEXT-ALIGN: center
}
HTML >  BODY .highslide-gallery UL LI {
	TEXT-ALIGN: center
}
HTML >  BODY .highslide-gallery UL A {
	VERTICAL-ALIGN: middle; POSITION: static
}
HTML >  BODY .highslide-gallery UL IMG {
	POSITION: static
}
.highslide-controls {
	BACKGROUND: url(graphics/controlbar-white.gif) no-repeat 0px -90px; =
MARGIN: 20px 15px 10px 0px; WIDTH: 195px; HEIGHT: 40px
}
.highslide-controls UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(graphics/controlbar-white.gif) no-repeat right -90px; LEFT: 15px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: =
none; POSITION: relative; HEIGHT: 40px
}
.highslide-controls LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
5px; MARGIN: 0px; PADDING-TOP: 5px; LIST-STYLE-TYPE: none
}
.highslide-controls A {
	DISPLAY: block; FLOAT: left; BACKGROUND-IMAGE: =
url(graphics/controlbar-white.gif); WIDTH: 30px; HEIGHT: 30px; outline: =
none
}
.highslide-controls A.disabled {
	CURSOR: default
}
.highslide-controls A.disabled SPAN {
	CURSOR: default
}
.highslide-controls A SPAN {
	DISPLAY: none; CURSOR: pointer
}
.highslide-controls .highslide-previous A {
	BACKGROUND-POSITION: 0px 0px
}
.highslide-controls .highslide-previous A:hover {
	BACKGROUND-POSITION: 0px -30px
}
.highslide-controls .highslide-previous A.disabled {
	BACKGROUND-POSITION: 0px -60px
}
.highslide-controls .highslide-play A {
	BACKGROUND-POSITION: -30px 0px
}
.highslide-controls .highslide-play A:hover {
	BACKGROUND-POSITION: -30px -30px
}
.highslide-controls .highslide-play A.disabled {
	BACKGROUND-POSITION: -30px -60px
}
.highslide-controls .highslide-pause A {
	BACKGROUND-POSITION: -60px 0px
}
.highslide-controls .highslide-pause A:hover {
	BACKGROUND-POSITION: -60px -30px
}
.highslide-controls .highslide-next A {
	BACKGROUND-POSITION: -90px 0px
}
.highslide-controls .highslide-next A:hover {
	BACKGROUND-POSITION: -90px -30px
}
.highslide-controls .highslide-next A.disabled {
	BACKGROUND-POSITION: -90px -60px
}
.highslide-controls .highslide-move A {
	BACKGROUND-POSITION: -120px 0px
}
.highslide-controls .highslide-move A:hover {
	BACKGROUND-POSITION: -120px -30px
}
.highslide-controls .highslide-full-expand A {
	BACKGROUND-POSITION: -150px 0px
}
.highslide-controls .highslide-full-expand A:hover {
	BACKGROUND-POSITION: -150px -30px
}
.highslide-controls .highslide-full-expand A.disabled {
	BACKGROUND-POSITION: -150px -60px
}
.highslide-controls .highslide-close A {
	BACKGROUND-POSITION: -180px 0px
}
.highslide-controls .highslide-close A:hover {
	BACKGROUND-POSITION: -180px -30px
}
.highslide-maincontent {
	DISPLAY: none
}
.highslide-html {
	BACKGROUND-COLOR: black
}
.highslide-html-content {
	PADDING-RIGHT: 5px; DISPLAY: none; PADDING-LEFT: 5px; PADDING-BOTTOM: =
5px; WIDTH: 400px; PADDING-TOP: 0px
}
.highslide-header {
	PADDING-BOTTOM: 5px
}
.highslide-header UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; TEXT-ALIGN: right
}
.highslide-header UL LI {
	DISPLAY: inline; PADDING-LEFT: 1em
}
.highslide-header UL LI.highslide-previous {
	DISPLAY: none
}
.highslide-header UL LI.highslide-next {
	DISPLAY: none
}
.highslide-header A {
	FONT-WEIGHT: bold; TEXT-TRANSFORM: uppercase; COLOR: gray; =
TEXT-DECORATION: none
}
.highslide-header A:hover {
	COLOR: white
}
.highslide-header .highslide-move A {
	CURSOR: move
}
.highslide-footer {
	HEIGHT: 16px
}
.highslide-footer .highslide-resize {
	MARGIN-TOP: 5px; DISPLAY: block; BACKGROUND: url(graphics/resize.gif) =
no-repeat; FLOAT: right; WIDTH: 11px; HEIGHT: 11px
}
.highslide-footer .highslide-resize SPAN {
	DISPLAY: none
}
.highslide-body {
	BACKGROUND-COLOR: black
}
.highslide-resize {
	CURSOR: nw-resize
}
.draggable-header .highslide-header {
	BORDER-BOTTOM: #dddddd 1px solid; HEIGHT: 18px
}
.draggable-header .highslide-heading {
	MARGIN: 2px 0.4em; POSITION: absolute
}
.draggable-header .highslide-header .highslide-move {
	DISPLAY: block; Z-INDEX: 1; RIGHT: 24px; WIDTH: 100%; CURSOR: move; =
POSITION: absolute; TOP: 0px; HEIGHT: 16px
}
.draggable-header .highslide-header .highslide-move * {
	DISPLAY: none
}
.draggable-header .highslide-header .highslide-close {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; Z-INDEX: 5; RIGHT: 2px; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; POSITION: absolute; TOP: 2px
}
.draggable-header .highslide-header .highslide-close A {
	DISPLAY: block; BACKGROUND-IMAGE: url(graphics/closeX.png); WIDTH: =
16px; HEIGHT: 16px
}
.draggable-header .highslide-header .highslide-close A:hover {
	BACKGROUND-POSITION: 0px 16px
}
.draggable-header .highslide-header .highslide-close SPAN {
	DISPLAY: none
}
.draggable-header .highslide-maincontent {
	PADDING-TOP: 1em
}
.titlebar .highslide-header {
	BORDER-BOTTOM: #dddddd 1px solid; HEIGHT: 18px
}
.titlebar .highslide-heading {
	MARGIN: 1px 0px 1px 5px; WIDTH: 90%; COLOR: #666666; POSITION: absolute
}
.titlebar .highslide-header .highslide-move {
	DISPLAY: block; Z-INDEX: 1; RIGHT: 24px; WIDTH: 100%; CURSOR: move; =
POSITION: absolute; TOP: 0px; HEIGHT: 16px
}
.titlebar .highslide-header .highslide-move * {
	DISPLAY: none
}
.titlebar .highslide-header LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 1em; Z-INDEX: 2; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; POSITION: relative; TOP: 3px
}
.titlebar .highslide-maincontent {
	PADDING-TOP: 1em
}
.no-footer .highslide-footer {
	DISPLAY: none
}
.wide-border {
	BACKGROUND: white
}
.wide-border .highslide-image {
	BORDER-TOP-WIDTH: 10px; BORDER-LEFT-WIDTH: 10px; BORDER-BOTTOM-WIDTH: =
10px; BORDER-RIGHT-WIDTH: 10px
}
.wide-border .highslide-caption {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 0px
}
.borderless .highslide-image {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
.borderless .highslide-caption {
	BORDER-TOP: white 1px solid; BACKGROUND: silver; BORDER-BOTTOM: white =
1px solid
}
.outer-glow {
	BACKGROUND: #444
}
.outer-glow .highslide-image {
	BORDER-RIGHT: #444444 5px solid; BORDER-TOP: #444444 5px solid; =
BORDER-LEFT: #444444 5px solid; BORDER-BOTTOM: #444444 5px solid
}
.outer-glow .highslide-caption {
	BORDER-RIGHT: #444444 5px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#444444 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: =
#444444 5px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #444444 5px solid; =
BACKGROUND-COLOR: gray
}
.colored-border {
	BACKGROUND: white
}
.colored-border .highslide-image {
	BORDER-RIGHT: green 2px solid; BORDER-TOP: green 2px solid; =
BORDER-LEFT: green 2px solid; BORDER-BOTTOM: green 2px solid
}
.colored-border .highslide-caption {
	BORDER-RIGHT: green 2px solid; BORDER-TOP: green 2px; BORDER-LEFT: =
green 2px solid; BORDER-BOTTOM: green 2px solid
}
.dark {
	BACKGROUND: #111
}
.dark .highslide-image {
	BORDER-LEFT-COLOR: black; BACKGROUND: gray; BORDER-BOTTOM-COLOR: =
#202020; BORDER-TOP-COLOR: black; BORDER-RIGHT-COLOR: black
}
.dark .highslide-caption {
	BACKGROUND: #111; COLOR: white
}
.dark .highslide-controls {
	BACKGROUND-IMAGE: url(graphics/controlbar-black-border.gif)
}
.dark .highslide-controls UL {
	BACKGROUND-IMAGE: url(graphics/controlbar-black-border.gif)
}
.dark .highslide-controls A {
	BACKGROUND-IMAGE: url(graphics/controlbar-black-border.gif)
}
.floating-caption .highslide-caption {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; BACKGROUND: =
none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; COLOR: white; =
BORDER-TOP-STYLE: none; PADDING-TOP: 1em; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; POSITION: absolute; BORDER-BOTTOM-STYLE: none
}
.controls-in-heading .highslide-heading {
	PADDING-RIGHT: 0px; PADDING-LEFT: 22px; FONT-WEIGHT: bold; BACKGROUND: =
url(graphics/icon.gif) no-repeat 0px 1px; PADDING-BOTTOM: 0px; MARGIN: =
0px; OVERFLOW: hidden; CURSOR: default; COLOR: gray; PADDING-TOP: 0px; =
HEIGHT: 20px
}
.controls-in-heading .highslide-controls {
	BACKGROUND: none transparent scroll repeat 0% 0%; LEFT: 7px; MARGIN: =
0px; WIDTH: 105px; POSITION: relative; TOP: -23px; HEIGHT: 20px
}
.controls-in-heading .highslide-controls UL {
	BACKGROUND: none transparent scroll repeat 0% 0%; POSITION: static; =
HEIGHT: 20px
}
.controls-in-heading .highslide-controls LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.controls-in-heading .highslide-controls A {
	BACKGROUND-IMAGE: url(graphics/controlbar-white-small.gif); WIDTH: =
20px; HEIGHT: 20px
}
.controls-in-heading .highslide-controls .highslide-move {
	DISPLAY: none
}
.controls-in-heading .highslide-controls .highslide-previous A {
	BACKGROUND-POSITION: 0px 0px
}
.controls-in-heading .highslide-controls .highslide-previous A:hover {
	BACKGROUND-POSITION: 0px -20px
}
.controls-in-heading .highslide-controls .highslide-previous A.disabled =
{
	BACKGROUND-POSITION: 0px -40px
}
.controls-in-heading .highslide-controls .highslide-play A {
	BACKGROUND-POSITION: -20px 0px
}
.controls-in-heading .highslide-controls .highslide-play A:hover {
	BACKGROUND-POSITION: -20px -20px
}
.controls-in-heading .highslide-controls .highslide-play A.disabled {
	BACKGROUND-POSITION: -20px -40px
}
.controls-in-heading .highslide-controls .highslide-pause A {
	BACKGROUND-POSITION: -40px 0px
}
.controls-in-heading .highslide-controls .highslide-pause A:hover {
	BACKGROUND-POSITION: -40px -20px
}
.controls-in-heading .highslide-controls .highslide-next A {
	BACKGROUND-POSITION: -60px 0px
}
.controls-in-heading .highslide-controls .highslide-next A:hover {
	BACKGROUND-POSITION: -60px -20px
}
.controls-in-heading .highslide-controls .highslide-next A.disabled {
	BACKGROUND-POSITION: -60px -40px
}
.controls-in-heading .highslide-controls .highslide-full-expand A {
	BACKGROUND-POSITION: -100px 0px
}
.controls-in-heading .highslide-controls .highslide-full-expand A:hover =
{
	BACKGROUND-POSITION: -100px -20px
}
.controls-in-heading .highslide-controls .highslide-full-expand =
A.disabled {
	BACKGROUND-POSITION: -100px -40px
}
.controls-in-heading .highslide-controls .highslide-close A {
	BACKGROUND-POSITION: -120px 0px
}
.controls-in-heading .highslide-controls .highslide-close A:hover {
	BACKGROUND-POSITION: -120px -20px
}
.text-controls .highslide-controls {
	BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN: 0px; WIDTH: =
auto; HEIGHT: auto; TEXT-ALIGN: center
}
.text-controls UL {
	BACKGROUND: none transparent scroll repeat 0% 0%; LEFT: 0px; POSITION: =
static; HEIGHT: auto
}
.text-controls .highslide-move {
	DISPLAY: none
}
.text-controls LI {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: right top; DISPLAY: block; =
PADDING-LEFT: 0px; BACKGROUND-IMAGE: =
url(graphics/controlbar-text-buttons.png); PADDING-BOTTOM: 0px; =
MARGIN-LEFT: 15px; WIDTH: auto; PADDING-TOP: 0px
}
.text-controls A {
	DISPLAY: block; BACKGROUND: url(graphics/controlbar-text-buttons.png) =
no-repeat left top; LEFT: -10px; WIDTH: auto; POSITION: relative; =
HEIGHT: auto; TEXT-DECORATION: none! important
}
.text-controls A SPAN {
	PADDING-RIGHT: 0px; MIN-WIDTH: 4em; DISPLAY: block; PADDING-LEFT: 18px; =
FONT-WEIGHT: bold; FONT-SIZE: 12px; BACKGROUND: =
url(graphics/controlbar-text-buttons.png) no-repeat; PADDING-BOTTOM: =
1px; MARGIN: 1px 2px 1px 10px; COLOR: #333; LINE-HEIGHT: 18px; =
PADDING-TOP: 1px; FONT-FAMILY: "Trebuchet MS", Arial, sans-serif; =
WHITE-SPACE: nowrap; HEIGHT: 18px
}
.text-controls .highslide-next {
	MARGIN-RIGHT: 1em
}
.text-controls .highslide-full-expand A SPAN {
	PADDING-RIGHT: 0px; MIN-WIDTH: 0px; PADDING-LEFT: 10px; PADDING-BOTTOM: =
1px; MARGIN: 1px 0px; PADDING-TOP: 1px
}
.text-controls .highslide-close A SPAN {
	MIN-WIDTH: 0px
}
.text-controls A:hover SPAN {
	COLOR: black
}
.text-controls A.disabled SPAN {
	COLOR: #999
}
.text-controls .highslide-previous SPAN {
	BACKGROUND-POSITION: 0px -40px
}
.text-controls .highslide-previous A.disabled {
	BACKGROUND-POSITION: left top
}
.text-controls .highslide-previous A.disabled SPAN {
	BACKGROUND-POSITION: 0px -140px
}
.text-controls .highslide-play SPAN {
	BACKGROUND-POSITION: 0px -60px
}
.text-controls .highslide-play A.disabled {
	BACKGROUND-POSITION: left top
}
.text-controls .highslide-play A.disabled SPAN {
	BACKGROUND-POSITION: 0px -160px
}
.text-controls .highslide-pause SPAN {
	BACKGROUND-POSITION: 0px -80px
}
.text-controls .highslide-next SPAN {
	BACKGROUND-POSITION: 0px -100px
}
.text-controls .highslide-next A.disabled {
	BACKGROUND-POSITION: left top
}
.text-controls .highslide-next A.disabled SPAN {
	BACKGROUND-POSITION: 0px -200px
}
.text-controls .highslide-full-expand SPAN {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.text-controls .highslide-full-expand A.disabled {
	BACKGROUND-POSITION: left top
}
.text-controls .highslide-close SPAN {
	BACKGROUND-POSITION: 0px -120px
}
.highslide-thumbstrip {
	HEIGHT: 100%
}
.highslide-thumbstrip DIV {
	OVERFLOW: hidden
}
.highslide-thumbstrip TABLE {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; POSITION: relative; BORDER-COLLAPSE: collapse
}
.highslide-thumbstrip TD {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
.highslide-thumbstrip A {
	outline: none
}
.highslide-thumbstrip IMG {
	BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; DISPLAY: =
block; MARGIN: 0px auto; BORDER-LEFT: gray 1px solid; BORDER-BOTTOM: =
gray 1px solid
}
.highslide-thumbstrip .highslide-active-anchor IMG {
	VISIBILITY: visible
}
.highslide-thumbstrip .highslide-marker {
	BORDER-RIGHT: transparent 0px solid; BORDER-TOP: transparent 0px solid; =
BORDER-LEFT: transparent 0px solid; WIDTH: 0px; BORDER-BOTTOM: =
transparent 0px solid; POSITION: absolute; HEIGHT: 0px
}
.highslide-thumbstrip-horizontal DIV {
	WIDTH: auto
}
.highslide-thumbstrip-horizontal .highslide-scroll-up {
	DISPLAY: none; LEFT: 3px; WIDTH: 25px; POSITION: absolute; TOP: 3px; =
HEIGHT: 42px
}
.highslide-thumbstrip-horizontal .highslide-scroll-up DIV {
	BACKGROUND: url(graphics/scrollarrows.png) no-repeat left center; =
MARGIN-BOTTOM: 10px; CURSOR: pointer; HEIGHT: 42px
}
.highslide-thumbstrip-horizontal .highslide-scroll-down {
	DISPLAY: none; RIGHT: 3px; WIDTH: 25px; POSITION: absolute; TOP: 3px; =
HEIGHT: 42px
}
.highslide-thumbstrip-horizontal .highslide-scroll-down DIV {
	BACKGROUND: url(graphics/scrollarrows.png) no-repeat right center; =
MARGIN-BOTTOM: 10px; CURSOR: pointer; HEIGHT: 42px
}
.highslide-thumbstrip-horizontal TABLE {
	MARGIN: 2px 0px 10px
}
.highslide-viewport .highslide-thumbstrip-horizontal TABLE {
	MARGIN-LEFT: 10px
}
.highslide-thumbstrip-horizontal IMG {
	WIDTH: auto; HEIGHT: 40px
}
.highslide-thumbstrip-horizontal .highslide-marker {
	BORDER-LEFT-WIDTH: 6px; BORDER-BOTTOM: gray 6px solid; TOP: 47px; =
BORDER-RIGHT-WIDTH: 6px
}
.highslide-viewport .highslide-thumbstrip-horizontal .highslide-marker {
	MARGIN-LEFT: 10px
}
.dark .highslide-thumbstrip-horizontal .highslide-marker {
	BORDER-BOTTOM-COLOR: white! important
}
.highslide-viewport .highslide-thumbstrip-horizontal .highslide-marker {
	BORDER-BOTTOM-COLOR: white! important
}
.highslide-thumbstrip-vertical-overlay {
	OVERFLOW: hidden! important
}
.highslide-thumbstrip-vertical DIV {
	HEIGHT: 100%
}
.highslide-thumbstrip-vertical A {
	DISPLAY: block
}
.highslide-thumbstrip-vertical .highslide-scroll-up {
	DISPLAY: none; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; =
HEIGHT: 25px
}
.highslide-thumbstrip-vertical .highslide-scroll-up DIV {
	BACKGROUND: url(graphics/scrollarrows.png) no-repeat center top; =
MARGIN-LEFT: 10px; CURSOR: pointer; HEIGHT: 25px
}
.highslide-thumbstrip-vertical .highslide-scroll-down {
	DISPLAY: none; LEFT: 0px; WIDTH: 100%; BOTTOM: 0px; POSITION: absolute; =
HEIGHT: 25px
}
.highslide-thumbstrip-vertical .highslide-scroll-down DIV {
	BACKGROUND: url(graphics/scrollarrows.png) no-repeat center bottom; =
MARGIN-LEFT: 10px; CURSOR: pointer; HEIGHT: 25px
}
.highslide-thumbstrip-vertical TABLE {
	MARGIN: 10px 0px 0px 10px
}
.highslide-thumbstrip-vertical IMG {
	MAX-WIDTH: 60px
}
.highslide-thumbstrip-vertical .highslide-marker {
	BORDER-TOP-WIDTH: 6px; MARGIN-TOP: 8px; LEFT: 0px; BORDER-BOTTOM-WIDTH: =
6px; BORDER-LEFT: gray 6px solid
}
.dark .highslide-thumbstrip-vertical .highslide-marker {
	BORDER-LEFT-COLOR: white
}
.highslide-viewport .highslide-thumbstrip-vertical .highslide-marker {
	BORDER-LEFT-COLOR: white
}
.highslide-viewport .highslide-thumbstrip-float {
	OVERFLOW: auto
}
.highslide-thumbstrip-float UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 2px =
0px; PADDING-TOP: 0px
}
.highslide-thumbstrip-float LI {
	DISPLAY: block; FLOAT: left; MARGIN: 0px 2px; LIST-STYLE-TYPE: none; =
HEIGHT: 60px
}
.highslide-thumbstrip-float IMG {
	DISPLAY: inline; BORDER-LEFT-COLOR: silver; BORDER-BOTTOM-COLOR: =
silver; BORDER-TOP-COLOR: silver; MAX-HEIGHT: 56px; BORDER-RIGHT-COLOR: =
silver
}
.highslide-thumbstrip-float .highslide-active-anchor IMG {
	BORDER-LEFT-COLOR: black; BORDER-BOTTOM-COLOR: black; BORDER-TOP-COLOR: =
black; BORDER-RIGHT-COLOR: black
}
.highslide-thumbstrip-float .highslide-scroll-up DIV {
	DISPLAY: none
}
.highslide-thumbstrip-float .highslide-scroll-down DIV {
	DISPLAY: none
}
.highslide-thumbstrip-float .highslide-marker {
	DISPLAY: none
}

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/js/jalios/languages/fr.js

var I18N =3D {=0A=
=0A=
  lang: "fr",=0A=
=0A=
  glp: function(msg){=0A=
    return I18N[msg];=0A=
  },=0A=
	=0A=
	'error.unknown': "Une erreur s'est produite, contactez un =
administrateur.",=0A=
	'warn.edit.contentlost'   : "Votre document n'a pas =C3=A9t=C3=A9 =
enregistr=C3=A9, toutes les modifications seront perdues.",=0A=
  'warn.popup.blocker':       "La fen=C3=AAtre a =C3=A9t=C3=A9 =
bloqu=C3=A9e par un bloqueur de fen=C3=AAtres intempestives.\nVeuillez =
le d=C3=A9sactiver et r=C3=A9essayer, ou contactez votre administrateur =
syst=C3=A8me.",=0A=
  'warn.json.sessiontimeout': "La connexion au serveur a =
=C3=A9chou=C3=A9 ou une erreur s'est produite, votre action n'a pu =
=C3=AAtre =C3=A9x=C3=A9cut=C3=A9e.\nVotre session a probablement =
expir=C3=A9 ou le serveur n'est plus joignable.",=0A=
  'ui.adm.admin-notes.error': "La connexion au serveur a =
=C3=A9chou=C3=A9 ou une erreur s'est produite lors " =0A=
                              + "de l'enregistrement, votre note n'a pu =
=C3=AAtre sauvegard=C3=A9e.\n" =0A=
                              + "Votre session a probablement =
expir=C3=A9 ou le serveur n'est plus joignable.",=0A=
  'ui.textarea-resizer.title': "Glissez pour agrandir la zone de texte",=0A=
  'info.msg.loading':         "Traitement en cours...",=0A=
  'msg.confirm.dragdrop': "Veuillez confirmer le d=C3=A9placement ?"=0A=
  =0A=
}
------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/js/jspacker.jsp?js=js/lib/jsonrpc.js&js=js/lib/prototype.js&js=js/lib/cookies.js&js=js/lib/swfobject.js&js=js/lib/builder.js&js=js/lib/effects.js&js=js/lib/dragdrop.js&js=js/lib/controls.js&js=js/lib/slider.js&js=js/calendar/calendar.js&js=js/calendar/lang/calendar-fr.js&js=js/calendar/calendar-setup.js&js=js/jalios/util.js

/* js/lib/jsonrpc.js */=0A=
/*=0A=
* jabsorb - a Java to JavaScript Advanced Object Request Broker=0A=
* http://www.jabsorb.org=0A=
*=0A=
* Copyright 2007 The jabsorb team=0A=
* Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd=0A=
* Copyright (c) 2003-2004 Jan-Klaas Kollhof=0A=
*=0A=
* This code is based on original code from the json-rpc-java library=0A=
* which was originally based on Jan-Klaas' JavaScript o lait library=0A=
* (jsolait).=0A=
*=0A=
* Licensed under the Apache License, Version 2.0 (the "License");=0A=
* you may not use this file except in compliance with the License.=0A=
* You may obtain a copy of the License at=0A=
*=0A=
*    http://www.apache.org/licenses/LICENSE-2.0=0A=
*=0A=
* Unless required by applicable law or agreed to in writing, software=0A=
* distributed under the License is distributed on an "AS IS" BASIS,=0A=
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or =
implied.=0A=
* See the License for the specific language governing permissions and=0A=
* limitations under the License.=0A=
*=0A=
*/=0A=
/* escape a character */=0A=
var escapeJSONChar=3Dfunction ()=0A=
{=0A=
var escapeChars =3D ["\b","\t","\n","\f","\r"];=0A=
return function(c){=0A=
// Need to do these first as their ascii values are > 32 (34 & 92)=0A=
if(c =3D=3D "\"" || c =3D=3D "\\")=0A=
{=0A=
return "\\"+c;=0A=
}=0A=
//Otherwise it doesn't need escaping=0A=
if(c.charCodeAt(0)>=3D32)=0A=
{=0A=
return c;=0A=
}=0A=
// Otherwise it is has a code < 32 and may need escaping.=0A=
for(var i=3D0;i<escapeChars.length;i++)=0A=
{=0A=
if(c=3D=3DescapeChars[i])=0A=
{=0A=
return "\\" + c;=0A=
}=0A=
}=0A=
// it was a character from 0-31 that wasn't one of the escape chars=0A=
return c;=0A=
};=0A=
}();=0A=
/* encode a string into JSON format */=0A=
function escapeJSONString(s)=0A=
{=0A=
/* The following should suffice but Safari's regex is b0rken=0A=
(doesn't support callback substitutions)=0A=
return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,=0A=
escapeJSONChar) + "\"";=0A=
*/=0A=
/* Rather inefficient way to do it */=0A=
var parts =3D s.split("");=0A=
for (var i =3D 0; i < parts.length; i++)=0A=
{=0A=
parts[i] =3D escapeJSONChar(parts[i]);=0A=
}=0A=
return "\"" + parts.join("") + "\"";=0A=
}=0A=
/**=0A=
* Marshall an object to JSON format.=0A=
* Circular references can be handled if the client parameter=0A=
* JSONRpcClient.fixupCircRefs is true.  If this parameter is false,=0A=
* an exception will be thrown if a circular reference is detected.=0A=
*=0A=
* if the client parameter, JSONRpcClient.fixupDuplicates is true then=0A=
* duplicate objects in the object graph are also combined except for =
Strings=0A=
*=0A=
* (todo: it wouldn't be too hard to optimize strings as well, but =
probably a threshold=0A=
*  should be provided, so that only strings over a certain length would =
be optimized)=0A=
* this would be worth doing on the upload (on the download it's not so =
important, because=0A=
* gzip handles this)=0A=
* if it's false, then duplicate objects are "re-serialized"=0A=
*=0A=
* @param o       the object being converted to json=0A=
*=0A=
* @return an object, { 'json': jsonString, 'fixups': fixupString } or=0A=
*            just { 'json' : jsonString }  if there were no fixups found.=0A=
*/=0A=
function toJSON(o)=0A=
{=0A=
// to detect circular references and duplicate objects, each object has =
a special marker=0A=
// added to it as we go along.=0A=
// therefore we know if the object is either a duplicate or circular ref =
if the object=0A=
// already has this marker in it before we process it.=0A=
// the marker object itself contains two pointers-- one to the last =
object processed=0A=
// and another to the parent object=0A=
// therefore we can rapidly detect if an object is a circular reference=0A=
// by following the chain of parent pointer objects to see if we find =
the same object again.=0A=
// if we don't find the same object again in the parent recursively, =
then we know that it's a=0A=
// duplicate instead of a circular reference=0A=
// the pointer to the last object processed is used to link all =
processed objects together=0A=
// so that the marker objects can be removed when the operation is =
complete=0A=
// once all objects are processed, we can traverse the linked list, =
removing all the markers=0A=
// the special name for the marker object=0A=
// try to pick a name that would never be used for any other purpose, so=0A=
// it won't conflict with anything else=0A=
var marker=3D"$_$jabsorbed$813492";=0A=
// the head of the marker object chain=0A=
var markerHead;=0A=
// fixups detected as we go along, both for circular references and =
duplicates=0A=
var fixups =3D [];=0A=
// unlink the whole chain of marker objects that were added to objects =
when processing=0A=
function removeMarkers()=0A=
{=0A=
var next;=0A=
while (markerHead)=0A=
{=0A=
next =3D markerHead[marker].prev;=0A=
delete markerHead[marker];=0A=
markerHead =3D next;=0A=
}=0A=
}=0A=
// special object used to indicate that an object should be omitted=0A=
// because it was found to be a circular reference or duplicate=0A=
var omitCircRefOrDuplicate =3D {};=0A=
// temp variable to hold json while processing=0A=
var json;=0A=
/**=0A=
* Do the work of converting an individual "sub" object to JSON.=0A=
* Each object that is processed has a special marker object attached to =
it, =0A=
* to quickly detect if it has already been processed and thus handle =0A=
* circular references and duplicates.=0A=
*=0A=
* @param o   object being converted into JSON.=0A=
* =0A=
* @param p   the parent of the object being processed, it should be null =
or=0A=
*            undefined if it's the root object.=0A=
* =0A=
* @param ref the "reference" of the object in the parent that is being =0A=
*            converted such that p[ref] =3D=3D=3D o.=0A=
* =0A=
* @return A string containing the JSON representation of the object o, =
but =0A=
*         with duplicates and circular references removed (according to =
the =0A=
*         option settings JSONRpcClient.fixupCircRefs and =0A=
*         JSONRpcClient.fixupDuplicates. =0A=
*/=0A=
function subObjToJSON(o,p,ref)=0A=
{=0A=
var v =3D [],=0A=
// list of references to get to the fixup entry=0A=
fixup,=0A=
// list of reference to get to the original location=0A=
original,=0A=
parent,=0A=
circRef,=0A=
i;=0A=
if (o =3D=3D=3D null || o =3D=3D=3D undefined)=0A=
{=0A=
return "null";  // it's null or undefined, so serialize it as null=0A=
}=0A=
else if (typeof o =3D=3D=3D 'string')=0A=
{=0A=
//todo: handle duplicate strings!  but only if they are over a certain =
threshold size...=0A=
return escapeJSONString(o);=0A=
}=0A=
else if (typeof o =3D=3D=3D 'number')=0A=
{=0A=
return o.toString();=0A=
}=0A=
else if (typeof o =3D=3D=3D 'boolean')=0A=
{=0A=
return o.toString();=0A=
}=0A=
else=0A=
{=0A=
// must be an object type=0A=
// look for an already existing marker which would mean this object has =
already been processed=0A=
// at least once and therefore either a circular ref or dup has been =
found!!=0A=
if (o[marker])=0A=
{=0A=
// determine if it's a circular reference=0A=
fixup =3D [ref];=0A=
parent =3D p;=0A=
// walk up the parent chain till we find null=0A=
while (parent)=0A=
{=0A=
// if a circular reference was found somewhere along the way,=0A=
// calculate the path to it as we are going=0A=
if (original)=0A=
{=0A=
original.unshift (parent[marker].ref);=0A=
}=0A=
// if we find ourself, then we found a circular reference!=0A=
if (parent=3D=3D=3Do)=0A=
{=0A=
circRef=3Dparent;=0A=
original =3D [circRef[marker].ref];=0A=
}=0A=
fixup.unshift(parent[marker].ref);=0A=
parent =3D parent[marker].parent;=0A=
}=0A=
// if we found ourselves in the parent chain then this is a circular =
reference=0A=
if (circRef)=0A=
{=0A=
//either save off the circular reference or throw an exception, =
depending on the client setting=0A=
if (JSONRpcClient.fixupCircRefs)=0A=
{=0A=
// remove last redundant unshifted reference=0A=
fixup.shift();=0A=
original.shift();=0A=
//todo: (LATER) if multiple fixups go to the same original, this could =
be optimized somewhat=0A=
fixups.push([fixup, original]);=0A=
return omitCircRefOrDuplicate;=0A=
}=0A=
else=0A=
{=0A=
removeMarkers();=0A=
throw new Error("circular reference detected!");=0A=
}=0A=
}=0A=
else=0A=
{=0A=
// otherwise it's a dup!=0A=
if (JSONRpcClient.fixupDuplicates)=0A=
{=0A=
// find the original path of the dup=0A=
original =3D [o[marker].ref];=0A=
parent =3D o[marker].parent;=0A=
while (parent)=0A=
{=0A=
original.unshift(parent[marker].ref);=0A=
parent =3D parent[marker].parent;=0A=
}=0A=
//todo: (LATER) if multiple fixups go to the same original, this could =
be optimized somewhat=0A=
// remove last redundant unshifted reference=0A=
fixup.shift();=0A=
original.shift();=0A=
fixups.push([fixup, original]);=0A=
return omitCircRefOrDuplicate;=0A=
}=0A=
}=0A=
}=0A=
else=0A=
{=0A=
// mark this object as visited/processed and set up the parent link and =
prev link=0A=
o[marker] =3D {parent:p, prev:markerHead, ref:ref};=0A=
// adjust the "marker" head pointer so the prev pointer on the next =
object processed can be set=0A=
markerHead =3D o;=0A=
}=0A=
if (o.constructor =3D=3D=3D Date)=0A=
{=0A=
return '{javaClass: "java.util.Date", time: ' + o.valueOf() + '}';=0A=
}=0A=
else if (o.constructor =3D=3D=3D Array)=0A=
{=0A=
for (i =3D 0; i < o.length; i++)=0A=
{=0A=
json =3D subObjToJSON(o[i], o, i);=0A=
// if it's a dup/circ ref, put a slot where the object would have been=0A=
// otherwise, put the json data here=0A=
v.push(json=3D=3D=3DomitCircRefOrDuplicate?null:json);=0A=
}=0A=
return "[" + v.join(", ") + "]";=0A=
}=0A=
else=0A=
{=0A=
for (var attr in o)=0A=
{=0A=
if (attr =3D=3D=3D marker)=0A=
{=0A=
/* skip */=0A=
}=0A=
else if (o[attr] =3D=3D=3D null || o[attr] =3D=3D=3D undefined)=0A=
{=0A=
v.push("\"" + attr + "\": null");=0A=
}=0A=
else if (typeof o[attr] =3D=3D "function")=0A=
{=0A=
/* skip */=0A=
}=0A=
else=0A=
{=0A=
json =3D subObjToJSON(o[attr], o, attr);=0A=
if (json !=3D=3D omitCircRefOrDuplicate)=0A=
{=0A=
v.push(escapeJSONString(attr) + ": " + json);=0A=
}=0A=
}=0A=
}=0A=
return "{" + v.join(", ") + "}";=0A=
}=0A=
}=0A=
}=0A=
json =3D subObjToJSON(o, null, "root");=0A=
removeMarkers();=0A=
// only return the fixups if one or more were found=0A=
if (fixups.length)=0A=
{=0A=
return {json: json, fixups: fixups};=0A=
}=0A=
else=0A=
{=0A=
return {json: json};=0A=
}=0A=
}=0A=
/* JSONRpcClient constructor */=0A=
function JSONRpcClient()=0A=
{=0A=
var arg_shift =3D 0,=0A=
req,=0A=
_function,=0A=
methods,=0A=
self;=0A=
//If a call back is being used grab it=0A=
if (typeof arguments[0] =3D=3D "function")=0A=
{=0A=
this.readyCB =3D arguments[0];=0A=
arg_shift++;=0A=
}=0A=
//The next 3 args are passed to the http request=0A=
this.serverURL =3D arguments[arg_shift];=0A=
this.user =3D arguments[arg_shift + 1];=0A=
this.pass =3D arguments[arg_shift + 2];=0A=
//A unique identifier which the identity hashcode of the object on the =
server, if this is a reference type=0A=
this.objectID =3D arguments[arg_shift + 3];=0A=
//The full package+classname of the object=0A=
this.javaClass =3D arguments[arg_shift + 4];=0A=
//The reference type this is: Reference or CallableReference=0A=
this.JSONRPCType =3D arguments[arg_shift + 5];=0A=
//if we have already made one of these classes before=0A=
if(JSONRpcClient.knownClasses[this.javaClass]&&(this.JSONRPCType=3D=3D"Ca=
llableReference"))=0A=
{=0A=
//Then add all the cached methods to it.=0A=
for (var name in JSONRpcClient.knownClasses[this.javaClass])=0A=
{=0A=
_function =3D JSONRpcClient.knownClasses[this.javaClass][name];=0A=
//Change the this to the object that will be calling it=0A=
//Note: bind is JSONRPC.bind=0A=
this[name]=3DJSONRpcClient.bind(_function,this);=0A=
}=0A=
}=0A=
else=0A=
{=0A=
//If we are here, it is either the first time an object of this type has=0A=
//been created or the bridge=0A=
// If it is an object list the methods for it=0A=
if(this.objectID)=0A=
{=0A=
this._addMethods(["listMethods"],this.javaClass);=0A=
req =3D this._makeRequest("listMethods", []);=0A=
}=0A=
//If it is the bridge get the bridge's methods=0A=
else=0A=
{=0A=
this._addMethods(["system.listMethods"],this.javaClass);=0A=
req =3D this._makeRequest("system.listMethods", []);=0A=
}=0A=
// If the constructor has an async callback we add a wrapper=0A=
// callback to the request which is called when system.listMethods=0A=
// completes which then adds the methods and calls the callback.=0A=
if (this.readyCB)=0A=
{=0A=
self =3D this;=0A=
req.cb =3D function (result, e)=0A=
{=0A=
if (!e)=0A=
{=0A=
self._addMethods(result);=0A=
}=0A=
self.readyCB(result, e);=0A=
};=0A=
}=0A=
// Send the request=0A=
methods =3D this._sendRequest(req);=0A=
//Now add the methods to the object=0A=
//Note: we don't do this if an async constructor callback has been used=0A=
//as this is done in the request's wrapper callback=0A=
if (!this.readyCB)=0A=
{=0A=
this._addMethods(methods,this.javaClass);=0A=
}=0A=
}=0A=
}=0A=
//This is a static variable that maps className to a map of functions =
names to=0A=
//calls, ie Map knownClasses<ClassName,Map<FunctionName,Function>>=0A=
JSONRpcClient.knownClasses =3D {};=0A=
/* JSONRpcCLient.Exception */=0A=
JSONRpcClient.Exception =3D function (code, message, javaStack)=0A=
{=0A=
this.code =3D code;=0A=
var name,m;=0A=
if (javaStack)=0A=
{=0A=
this.javaStack =3D javaStack;=0A=
m =3D javaStack.match(/^([^:]*)/);=0A=
if (m)=0A=
{=0A=
name =3D m[0];=0A=
}=0A=
}=0A=
if (name)=0A=
{=0A=
this.name =3D name;=0A=
}=0A=
else=0A=
{=0A=
this.name =3D "JSONRpcClientException";=0A=
}=0A=
this.message =3D message;=0A=
};=0A=
//Error codes that are the same as on the bridge=0A=
JSONRpcClient.Exception.CODE_REMOTE_EXCEPTION =3D 490;=0A=
JSONRpcClient.Exception.CODE_ERR_CLIENT =3D 550;=0A=
JSONRpcClient.Exception.CODE_ERR_PARSE =3D 590;=0A=
JSONRpcClient.Exception.CODE_ERR_NOMETHOD =3D 591;=0A=
JSONRpcClient.Exception.CODE_ERR_UNMARSHALL =3D 592;=0A=
JSONRpcClient.Exception.CODE_ERR_MARSHALL =3D 593;=0A=
JSONRpcClient.Exception.prototype =3D new Error();=0A=
JSONRpcClient.Exception.prototype.toString =3D function (code, msg)=0A=
{=0A=
return this.name + ": " + this.message;=0A=
};=0A=
/* Default top level exception handler */=0A=
JSONRpcClient.default_ex_handler =3D function (e)=0A=
{=0A=
alert(e);=0A=
};=0A=
/* Client settable variables */=0A=
JSONRpcClient.toplevel_ex_handler =3D JSONRpcClient.default_ex_handler;=0A=
JSONRpcClient.profile_async =3D false;=0A=
JSONRpcClient.max_req_active =3D 1;=0A=
JSONRpcClient.requestId =3D 1;=0A=
// if this is true, circular references in the object graph are fixed up=0A=
// if this is false, circular references cause an exception to be thrown=0A=
JSONRpcClient.fixupCircRefs =3D true;=0A=
// if this is true, duplicate objects in the object graph are optimized=0A=
// if it's false, then duplicate objects are "re-serialized"=0A=
JSONRpcClient.fixupDuplicates =3D true;=0A=
/**=0A=
* Used to bind the this of the serverMethodCaller() (see below) which is =
to be=0A=
* bound to the right object. This is needed as the serverMethodCaller is=0A=
* called only once in createMethod and is then assigned to multiple=0A=
* CallableReferences are created.=0A=
*/=0A=
JSONRpcClient.bind=3Dfunction(functionName,context)=0A=
{=0A=
return function() {=0A=
return functionName.apply(context, arguments);=0A=
};=0A=
};=0A=
/*=0A=
* This creates a method that points to the serverMethodCaller and binds =
it=0A=
* with the correct methodName.=0A=
*/=0A=
JSONRpcClient.prototype._createMethod =3D function (methodName)=0A=
{=0A=
//This function is what the user calls.=0A=
//This function uses a closure on methodName to ensure that the function=0A=
//always has the same name, but can take different arguments each call.=0A=
//Each time it is added to an object this should be set with bind()=0A=
var serverMethodCaller=3D function()=0A=
{=0A=
var args =3D [],=0A=
callback;=0A=
for (var i =3D 0; i < arguments.length; i++)=0A=
{=0A=
args.push(arguments[i]);=0A=
}=0A=
if (typeof args[0] =3D=3D "function")=0A=
{=0A=
callback =3D args.shift();=0A=
}=0A=
var req =3D this._makeRequest.call(this, methodName, args, callback);=0A=
if (!callback)=0A=
{=0A=
return this._sendRequest.call(this, req);=0A=
}=0A=
else=0A=
{=0A=
//when there is a callback, add the req to the list =0A=
JSONRpcClient.async_requests.push(req);=0A=
JSONRpcClient.kick_async();=0A=
return req.requestId;=0A=
}=0A=
};=0A=
return serverMethodCaller;=0A=
};=0A=
/**=0A=
* This is used to add a list of methods to this.=0A=
* @param methodNames a list containing the names of the methods to add=0A=
* @param javaClass If here it signifies that the function is part of the =
class=0A=
*   and should be cached.=0A=
*/=0A=
JSONRpcClient.prototype._addMethods =3D function (methodNames,javaClass)=0A=
{=0A=
var name,=0A=
obj,=0A=
names,=0A=
n,=0A=
method;=0A=
//Aha! It is a class, so create a entry for it.=0A=
//This shouldn't get called twice on the same class so we can happily=0A=
//overwrite it=0A=
if(javaClass){=0A=
JSONRpcClient.knownClasses[javaClass]=3D{};=0A=
}=0A=
for (var i =3D 0; i < methodNames.length; i++)=0A=
{=0A=
obj =3D this;=0A=
names =3D methodNames[i].split(".");=0A=
//In the case of system.listMethods create a new object in this called=0A=
//system and and the listMethod function to that object.=0A=
for (n =3D 0; n < names.length - 1; n++)=0A=
{=0A=
name =3D names[n];=0A=
if (obj[name])=0A=
{=0A=
obj =3D obj[name];=0A=
}=0A=
else=0A=
{=0A=
obj[name] =3D {};=0A=
obj =3D obj[name];=0A=
}=0A=
}=0A=
//The last part of the name is the actual functionName=0A=
name =3D names[names.length - 1];=0A=
//If it doesn't yet exist (why would it??)=0A=
if (!obj[name])=0A=
{=0A=
//Then create the method=0A=
method =3D this._createMethod(methodNames[i]);=0A=
//Bind it to the current this=0A=
obj[name]=3DJSONRpcClient.bind(method,this);=0A=
//And if this is adding it to an object, then=0A=
//add it to the cache=0A=
if(javaClass&&(name!=3D"listMethods"))=0A=
{=0A=
JSONRpcClient.knownClasses[javaClass][name]=3Dmethod;=0A=
}=0A=
}=0A=
}=0A=
};=0A=
JSONRpcClient._getCharsetFromHeaders =3D function (http)=0A=
{=0A=
var contentType,=0A=
parts,=0A=
i;=0A=
try=0A=
{=0A=
contentType =3D http.getResponseHeader("Content-type");=0A=
parts =3D contentType.split(/\s*;\s*/);=0A=
for (i =3D 0; i < parts.length; i++)=0A=
{=0A=
if (parts[i].substring(0, 8) =3D=3D "charset=3D")=0A=
{=0A=
return parts[i].substring(8, parts[i].length);=0A=
}=0A=
}=0A=
}=0A=
catch (e)=0A=
{=0A=
}=0A=
return "UTF-8"; // default=0A=
};=0A=
/* Async queue globals */=0A=
JSONRpcClient.async_requests =3D [];=0A=
JSONRpcClient.async_inflight =3D {};=0A=
JSONRpcClient.async_responses =3D [];=0A=
JSONRpcClient.async_timeout =3D null;=0A=
JSONRpcClient.num_req_active =3D 0;=0A=
JSONRpcClient._async_handler =3D function ()=0A=
{=0A=
var res,=0A=
req;=0A=
JSONRpcClient.async_timeout =3D null;=0A=
while (JSONRpcClient.async_responses.length > 0)=0A=
{=0A=
res =3D JSONRpcClient.async_responses.shift();=0A=
if (res.canceled)=0A=
{=0A=
continue;=0A=
}=0A=
if (res.profile)=0A=
{=0A=
res.profile.dispatch =3D new Date();=0A=
}=0A=
try=0A=
{=0A=
res.cb(res.result, res.ex, res.profile);=0A=
}=0A=
catch(e)=0A=
{=0A=
JSONRpcClient.toplevel_ex_handler(e);=0A=
}=0A=
}=0A=
while (JSONRpcClient.async_requests.length > 0 &&=0A=
JSONRpcClient.num_req_active < JSONRpcClient.max_req_active)=0A=
{=0A=
req =3D JSONRpcClient.async_requests.shift();=0A=
if (req.canceled)=0A=
{=0A=
continue;=0A=
}=0A=
req.client._sendRequest.call(req.client, req);=0A=
}=0A=
};=0A=
JSONRpcClient.kick_async =3D function ()=0A=
{=0A=
if (!JSONRpcClient.async_timeout)=0A=
{=0A=
JSONRpcClient.async_timeout =3D setTimeout(JSONRpcClient._async_handler, =
0);=0A=
}=0A=
};=0A=
JSONRpcClient.cancelRequest =3D function (requestId)=0A=
{=0A=
/* If it is in flight then mark it as canceled in the inflight map=0A=
and the XMLHttpRequest callback will discard the reply. */=0A=
if (JSONRpcClient.async_inflight[requestId])=0A=
{=0A=
JSONRpcClient.async_inflight[requestId].canceled =3D true;=0A=
return true;=0A=
}=0A=
var i;=0A=
/* If its not in flight yet then we can just mark it as canceled in=0A=
the the request queue and it will get discarded before being sent. */=0A=
for (i in JSONRpcClient.async_requests)=0A=
{=0A=
if (JSONRpcClient.async_requests[i].requestId =3D=3D requestId)=0A=
{=0A=
JSONRpcClient.async_requests[i].canceled =3D true;=0A=
return true;=0A=
}=0A=
}=0A=
/* It may have returned from the network and be waiting for its callback=0A=
to be dispatched, so mark it as canceled in the response queue=0A=
and the response will get discarded before calling the callback. */=0A=
for (i in JSONRpcClient.async_responses)=0A=
{=0A=
if (JSONRpcClient.async_responses[i].requestId =3D=3D requestId)=0A=
{=0A=
JSONRpcClient.async_responses[i].canceled =3D true;=0A=
return true;=0A=
}=0A=
}=0A=
return false;=0A=
};=0A=
JSONRpcClient.prototype._makeRequest =3D function (methodName, args, cb)=0A=
{=0A=
var req =3D {};=0A=
req.client =3D this;=0A=
req.requestId =3D JSONRpcClient.requestId++;=0A=
var obj =3D "{\"id\":"+req.requestId+",\"method\":";=0A=
if (this.objectID)=0A=
{=0A=
obj +=3D "\".obj#" + this.objectID + "." + methodName +"\"";=0A=
}=0A=
else=0A=
{=0A=
obj +=3D "\"" + methodName + "\"";=0A=
}=0A=
if (cb)=0A=
{=0A=
req.cb =3D cb;=0A=
}=0A=
if (JSONRpcClient.profile_async)=0A=
{=0A=
req.profile =3D {submit: new Date() };=0A=
}=0A=
// use p as an alias for params to save space in the fixups=0A=
var j=3D toJSON(args);=0A=
obj +=3D ",\"params\":" + j.json;=0A=
// only attach duplicates/fixups if they are found=0A=
// this is to provide graceful backwards compatibility to the json-rpc =
spec.=0A=
if (j.fixups)=0A=
{=0A=
// todo: the call to toJSON here to turn the fixups into json is a bit =0A=
// inefficient, since there will never be fixups in the fixups... but=0A=
// it saves us from writing some additional code at this point...=0A=
obj +=3D ",\"fixups\":" + toJSON(j.fixups).json;  =0A=
}=0A=
req.data =3D obj + "}";=0A=
return req;=0A=
};=0A=
JSONRpcClient.prototype._sendRequest =3D function (req)=0A=
{=0A=
var http,self;=0A=
if (req.profile)=0A=
{=0A=
req.profile.start =3D new Date();=0A=
}=0A=
/* Get free http object from the pool */=0A=
http =3D JSONRpcClient.poolGetHTTPRequest();=0A=
JSONRpcClient.num_req_active++;=0A=
/* Send the request */=0A=
http.open("POST", this.serverURL, !!req.cb, this.user, this.pass);=0A=
/* setRequestHeader is missing in Opera 8 Beta */=0A=
try=0A=
{=0A=
http.setRequestHeader("Content-type", "text/plain");=0A=
}=0A=
catch(e)=0A=
{=0A=
}=0A=
/* Construct call back if we have one */=0A=
if (req.cb)=0A=
{=0A=
self =3D this;=0A=
http.onreadystatechange =3D function()=0A=
{=0A=
var res;=0A=
if (http.readyState =3D=3D 4)=0A=
{=0A=
http.onreadystatechange =3D function ()=0A=
{=0A=
};=0A=
res =3D {cb: req.cb, result: null, ex: null};=0A=
if (req.profile)=0A=
{=0A=
res.profile =3D req.profile;=0A=
res.profile.end =3D new Date();=0A=
}=0A=
else=0A=
{=0A=
res.profile =3D false;=0A=
}=0A=
try=0A=
{=0A=
res.result =3D self._handleResponse(http);=0A=
}=0A=
catch(e)=0A=
{=0A=
res.ex =3D e;=0A=
}=0A=
if (!JSONRpcClient.async_inflight[req.requestId].canceled)=0A=
{=0A=
JSONRpcClient.async_responses.push(res);=0A=
}=0A=
delete JSONRpcClient.async_inflight[req.requestId];=0A=
JSONRpcClient.kick_async();=0A=
}=0A=
};=0A=
}=0A=
else=0A=
{=0A=
http.onreadystatechange =3D function()=0A=
{=0A=
};=0A=
}=0A=
JSONRpcClient.async_inflight[req.requestId] =3D req;=0A=
try=0A=
{=0A=
http.send(req.data);=0A=
}=0A=
catch(e)=0A=
{=0A=
JSONRpcClient.poolReturnHTTPRequest(http);=0A=
JSONRpcClient.num_req_active--;=0A=
throw new =
JSONRpcClient.Exception(JSONRpcClient.Exception.CODE_ERR_CLIENT, =
"Connection failed");=0A=
}=0A=
if (!req.cb)=0A=
{=0A=
delete JSONRpcClient.async_inflight[req.requestId];=0A=
return this._handleResponse(http);=0A=
}=0A=
return null;=0A=
};=0A=
JSONRpcClient.prototype._handleResponse =3D function (http)=0A=
{=0A=
/**=0A=
* Apply fixups.=0A=
* @param obj root object to apply fixups against.=0A=
* @param fixups array of fixups to apply.  each element of this array is =
a 2 element array, containing=0A=
*        the array with the fixup location followed by an array with the =
original location to fix up into the fixup=0A=
*        location.=0A=
*/=0A=
function applyFixups(obj, fixups)=0A=
{=0A=
function findOriginal(ob, original)=0A=
{=0A=
for (var i=3D0,j=3Doriginal.length;i<j;i++)=0A=
{=0A=
ob =3D ob[original[i]];=0A=
}=0A=
return ob;=0A=
}=0A=
function applyFixup(ob, fixups, value)=0A=
{=0A=
var j=3Dfixups.length-1;=0A=
for (var i=3D0;i<j;i++)=0A=
{=0A=
ob =3D ob[fixups[i]];=0A=
}=0A=
ob[fixups[j]] =3D value;=0A=
}=0A=
for (var i =3D 0,j =3D fixups.length; i < j; i++)=0A=
{=0A=
applyFixup(obj,fixups[i][0],findOriginal(obj,fixups[i][1]));=0A=
}=0A=
}=0A=
/* Get the charset */=0A=
if (!this.charset)=0A=
{=0A=
this.charset =3D JSONRpcClient._getCharsetFromHeaders(http);=0A=
}=0A=
/* Get request results */=0A=
var status, statusText, data;=0A=
try=0A=
{=0A=
status =3D http.status;=0A=
statusText =3D http.statusText;=0A=
data =3D http.responseText;=0A=
}=0A=
catch(e)=0A=
{=0A=
/*=0A=
todo:   don't throw away the original error information here!!=0A=
todo:   and everywhere else, as well!=0A=
if (e instanceof Error)=0A=
{=0A=
alert (e.name + ": " + e.message);=0A=
}=0A=
*/=0A=
JSONRpcClient.poolReturnHTTPRequest(http);=0A=
JSONRpcClient.num_req_active--;=0A=
JSONRpcClient.kick_async();=0A=
throw new =
JSONRpcClient.Exception(JSONRpcClient.Exception.CODE_ERR_CLIENT, =
"Connection failed");=0A=
}=0A=
/* Return http object to the pool; */=0A=
JSONRpcClient.poolReturnHTTPRequest(http);=0A=
JSONRpcClient.num_req_active--;=0A=
/* Unmarshall the response */=0A=
if (status !=3D 200)=0A=
{=0A=
throw new JSONRpcClient.Exception(status, statusText);=0A=
}=0A=
var obj;=0A=
try=0A=
{=0A=
eval("obj =3D " + data);=0A=
}=0A=
catch(e)=0A=
{=0A=
throw new JSONRpcClient.Exception(550, "error parsing result");=0A=
}=0A=
if (obj.error)=0A=
{=0A=
throw new JSONRpcClient.Exception (obj.error.code, obj.error.msg, =
obj.error.trace);=0A=
}=0A=
var r =3D obj.result;=0A=
// look for circular reference/duplicates fixups and execute them if =
they are there=0A=
var i,tmp;=0A=
/* Handle CallableProxy */=0A=
if (r) =0A=
{=0A=
if(r.objectID && r.JSONRPCType =3D=3D "CallableReference")=0A=
{  =0A=
return new JSONRpcClient(this.serverURL, this.user, this.pass, =
r.objectID, =0A=
r.javaClass, r.JSONRPCType);=0A=
}=0A=
r=3DJSONRpcClient.extractCallableReferences(this,r);=0A=
}=0A=
if (obj.fixups)=0A=
{=0A=
applyFixups(r,obj.fixups);=0A=
}=0A=
return r;=0A=
};=0A=
JSONRpcClient.extractCallableReferences =3D function(self,root)=0A=
{=0A=
var i,tmp,value;=0A=
for (i in root)=0A=
{=0A=
if(typeof(root[i])=3D=3D"object")=0A=
{=0A=
tmp=3DJSONRpcClient.makeCallableReference(self,root[i]);=0A=
if(tmp)=0A=
{=0A=
root[i]=3Dtmp;=0A=
}=0A=
else=0A=
{=0A=
tmp=3DJSONRpcClient.extractCallableReferences(self,root[i]);=0A=
root[i]=3Dtmp;=0A=
}=0A=
}=0A=
if(typeof(i)=3D=3D"object")=0A=
{=0A=
tmp=3DJSONRpcClient.makeCallableReference(self,i);=0A=
if(tmp)=0A=
{=0A=
value=3Droot[i];=0A=
delete root[i];=0A=
root[tmp]=3Dvalue;=0A=
}=0A=
else=0A=
{=0A=
tmp=3DJSONRpcClient.extractCallableReferences(self,i);=0A=
value=3Droot[i];=0A=
delete root[i];=0A=
root[tmp]=3Dvalue;=0A=
}=0A=
}=0A=
}=0A=
return root;=0A=
};=0A=
JSONRpcClient.makeCallableReference =3D function(self,value)=0A=
{=0A=
if(value && value.objectID && value.javaClass && value.JSONRPCType =
=3D=3D "CallableReference")=0A=
{=0A=
return new JSONRpcClient(self.serverURL, self.user, self.pass, =
value.objectID,value.javaClass,value.JSONRPCType);=0A=
}=0A=
return null;=0A=
};=0A=
/* XMLHttpRequest wrapper code */=0A=
/* XMLHttpRequest pool globals */=0A=
JSONRpcClient.http_spare =3D [];=0A=
JSONRpcClient.http_max_spare =3D 8;=0A=
JSONRpcClient.poolGetHTTPRequest =3D function ()=0A=
{=0A=
if (JSONRpcClient.http_spare.length > 0)=0A=
{=0A=
return JSONRpcClient.http_spare.pop();=0A=
}=0A=
return JSONRpcClient.getHTTPRequest();=0A=
};=0A=
JSONRpcClient.poolReturnHTTPRequest =3D function (http)=0A=
{=0A=
if (JSONRpcClient.http_spare.length >=3D JSONRpcClient.http_max_spare)=0A=
{=0A=
delete http;=0A=
}=0A=
else=0A=
{=0A=
JSONRpcClient.http_spare.push(http);=0A=
}=0A=
};=0A=
/* the search order here may seem strange, but it's=0A=
actually what Microsoft recommends */=0A=
JSONRpcClient.msxmlNames =3D [=0A=
"MSXML2.XMLHTTP.6.0",=0A=
"MSXML2.XMLHTTP.3.0",=0A=
"MSXML2.XMLHTTP",=0A=
"MSXML2.XMLHTTP.5.0",=0A=
"MSXML2.XMLHTTP.4.0",=0A=
"Microsoft.XMLHTTP" ];=0A=
JSONRpcClient.getHTTPRequest =3D function ()=0A=
{=0A=
/* Look for a browser native XMLHttpRequest implementation =
(Mozilla/IE7/Opera/Safari, etc.) */=0A=
try=0A=
{=0A=
JSONRpcClient.httpObjectName =3D "XMLHttpRequest";=0A=
return new XMLHttpRequest();=0A=
}=0A=
catch(e)=0A=
{=0A=
}=0A=
/* Microsoft MSXML ActiveX for IE versions < 7 */=0A=
for (var i =3D 0; i < JSONRpcClient.msxmlNames.length; i++)=0A=
{=0A=
try=0A=
{=0A=
JSONRpcClient.httpObjectName =3D JSONRpcClient.msxmlNames[i];=0A=
return new ActiveXObject(JSONRpcClient.msxmlNames[i]);=0A=
}=0A=
catch (e)=0A=
{=0A=
}=0A=
}=0A=
/* None found */=0A=
JSONRpcClient.httpObjectName =3D null;=0A=
throw new JSONRpcClient.Exception(0, "Can't create XMLHttpRequest =
object");=0A=
};=0A=
/* js/lib/prototype.js */=0A=
/*  Prototype JavaScript framework, version 1.6.0.2=0A=
*  (c) 2005-2008 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=
var Prototype =3D {=0A=
Version: '1.6.0.2',=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=
MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)=0A=
},=0A=
BrowserFeatures: {=0A=
XPath: !!document.evaluate,=0A=
ElementExtensions: !!window.HTMLElement,=0A=
SpecificElementExtensions:=0A=
document.createElement('div').__proto__ &&=0A=
document.createElement('div').__proto__ !=3D=3D=0A=
document.createElement('form').__proto__=0A=
},=0A=
ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',=0A=
JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,=0A=
emptyFunction: function() { },=0A=
K: function(x) { return x }=0A=
};=0A=
if (Prototype.Browser.MobileSafari)=0A=
Prototype.BrowserFeatures.SpecificElementExtensions =3D false;=0A=
/* Based on Alex Arnell's inheritance implementation. */=0A=
var Class =3D {=0A=
create: function() {=0A=
var parent =3D null, properties =3D $A(arguments);=0A=
if (Object.isFunction(properties[0]))=0A=
parent =3D properties.shift();=0A=
function klass() {=0A=
this.initialize.apply(this, arguments);=0A=
}=0A=
Object.extend(klass, Class.Methods);=0A=
klass.superclass =3D parent;=0A=
klass.subclasses =3D [];=0A=
if (parent) {=0A=
var subclass =3D function() { };=0A=
subclass.prototype =3D parent.prototype;=0A=
klass.prototype =3D new subclass;=0A=
parent.subclasses.push(klass);=0A=
}=0A=
for (var i =3D 0; i < properties.length; i++)=0A=
klass.addMethods(properties[i]);=0A=
if (!klass.prototype.initialize)=0A=
klass.prototype.initialize =3D Prototype.emptyFunction;=0A=
klass.prototype.constructor =3D klass;=0A=
return klass;=0A=
}=0A=
};=0A=
Class.Methods =3D {=0A=
addMethods: function(source) {=0A=
var ancestor   =3D this.superclass && this.superclass.prototype;=0A=
var properties =3D Object.keys(source);=0A=
if (!Object.keys({ toString: true }).length)=0A=
properties.push("toString", "valueOf");=0A=
for (var i =3D 0, length =3D properties.length; i < length; i++) {=0A=
var property =3D properties[i], value =3D source[property];=0A=
if (ancestor && Object.isFunction(value) &&=0A=
value.argumentNames().first() =3D=3D "$super") {=0A=
var method =3D value, value =3D Object.extend((function(m) {=0A=
return function() { return ancestor[m].apply(this, arguments) };=0A=
})(property).wrap(method), {=0A=
valueOf:  function() { return method },=0A=
toString: function() { return method.toString() }=0A=
});=0A=
}=0A=
this.prototype[property] =3D value;=0A=
}=0A=
return this;=0A=
}=0A=
};=0A=
var Abstract =3D { };=0A=
Object.extend =3D function(destination, source) {=0A=
for (var property in source)=0A=
destination[property] =3D source[property];=0A=
return destination;=0A=
};=0A=
Object.extend(Object, {=0A=
inspect: function(object) {=0A=
try {=0A=
if (Object.isUndefined(object)) return 'undefined';=0A=
if (object =3D=3D=3D null) return 'null';=0A=
return object.inspect ? object.inspect() : String(object);=0A=
} catch (e) {=0A=
if (e instanceof RangeError) return '...';=0A=
throw e;=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.isElement(object)) return;=0A=
var results =3D [];=0A=
for (var property in object) {=0A=
var value =3D Object.toJSON(object[property]);=0A=
if (!Object.isUndefined(value))=0A=
results.push(property.toJSON() + ': ' + value);=0A=
}=0A=
return '{' + results.join(', ') + '}';=0A=
},=0A=
toQueryString: function(object) {=0A=
return $H(object).toQueryString();=0A=
},=0A=
toHTML: function(object) {=0A=
return object && object.toHTML ? object.toHTML() : =
String.interpret(object);=0A=
},=0A=
keys: function(object) {=0A=
var keys =3D [];=0A=
for (var property in object)=0A=
keys.push(property);=0A=
return keys;=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=
clone: function(object) {=0A=
return Object.extend({ }, object);=0A=
},=0A=
isElement: function(object) {=0A=
return object && object.nodeType =3D=3D 1;=0A=
},=0A=
isArray: function(object) {=0A=
return object !=3D null && typeof object =3D=3D "object" &&=0A=
'splice' in object && 'join' in object;=0A=
},=0A=
isHash: function(object) {=0A=
return object instanceof Hash;=0A=
},=0A=
isFunction: function(object) {=0A=
return typeof object =3D=3D "function";=0A=
},=0A=
isString: function(object) {=0A=
return typeof object =3D=3D "string";=0A=
},=0A=
isNumber: function(object) {=0A=
return typeof object =3D=3D "number";=0A=
},=0A=
isUndefined: function(object) {=0A=
return typeof object =3D=3D "undefined";=0A=
}=0A=
});=0A=
Object.extend(Function.prototype, {=0A=
argumentNames: function() {=0A=
var names =3D =
this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").inv=
oke("strip");=0A=
return names.length =3D=3D 1 && !names[0] ? [] : names;=0A=
},=0A=
bind: function() {=0A=
if (arguments.length < 2 && Object.isUndefined(arguments[0])) return =
this;=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=
bindAsEventListener: function() {=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=
curry: function() {=0A=
if (!arguments.length) return this;=0A=
var __method =3D this, args =3D $A(arguments);=0A=
return function() {=0A=
return __method.apply(this, args.concat($A(arguments)));=0A=
}=0A=
},=0A=
delay: function() {=0A=
var __method =3D this, args =3D $A(arguments), timeout =3D args.shift() =
* 1000;=0A=
return window.setTimeout(function() {=0A=
return __method.apply(__method, args);=0A=
}, timeout);=0A=
},=0A=
wrap: function(wrapper) {=0A=
var __method =3D this;=0A=
return function() {=0A=
return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));=0A=
}=0A=
},=0A=
methodize: function() {=0A=
if (this._methodized) return this._methodized;=0A=
var __method =3D this;=0A=
return this._methodized =3D function() {=0A=
return __method.apply(null, [this].concat($A(arguments)));=0A=
};=0A=
}=0A=
});=0A=
Function.prototype.defer =3D Function.prototype.delay.curry(0.01);=0A=
Date.prototype.toJSON =3D function() {=0A=
return '"' + this.getUTCFullYear() + '-' +=0A=
(this.getUTCMonth() + 1).toPaddedString(2) + '-' +=0A=
this.getUTCDate().toPaddedString(2) + 'T' +=0A=
this.getUTCHours().toPaddedString(2) + ':' +=0A=
this.getUTCMinutes().toPaddedString(2) + ':' +=0A=
this.getUTCSeconds().toPaddedString(2) + 'Z"';=0A=
};=0A=
var Try =3D {=0A=
these: function() {=0A=
var returnValue;=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=
return returnValue;=0A=
}=0A=
};=0A=
RegExp.prototype.match =3D RegExp.prototype.test;=0A=
RegExp.escape =3D function(str) {=0A=
return String(str).replace(/([.*+?^=3D!:${}()|[\]\/\\])/g, '\\$1');=0A=
};=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
var PeriodicalExecuter =3D Class.create({=0A=
initialize: function(callback, frequency) {=0A=
this.callback =3D callback;=0A=
this.frequency =3D frequency;=0A=
this.currentlyExecuting =3D false;=0A=
this.registerCallback();=0A=
},=0A=
registerCallback: function() {=0A=
this.timer =3D setInterval(this.onTimerEvent.bind(this), this.frequency =
* 1000);=0A=
},=0A=
execute: function() {=0A=
this.callback(this);=0A=
},=0A=
stop: function() {=0A=
if (!this.timer) return;=0A=
clearInterval(this.timer);=0A=
this.timer =3D null;=0A=
},=0A=
onTimerEvent: function() {=0A=
if (!this.currentlyExecuting) {=0A=
try {=0A=
this.currentlyExecuting =3D true;=0A=
this.execute();=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=
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=
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=
sub: function(pattern, replacement, count) {=0A=
replacement =3D this.gsub.prepareReplacement(replacement);=0A=
count =3D Object.isUndefined(count) ? 1 : count;=0A=
return this.gsub(pattern, function(match) {=0A=
if (--count < 0) return match[0];=0A=
return replacement(match);=0A=
});=0A=
},=0A=
scan: function(pattern, iterator) {=0A=
this.gsub(pattern, iterator);=0A=
return String(this);=0A=
},=0A=
truncate: function(length, truncation) {=0A=
length =3D length || 30;=0A=
truncation =3D Object.isUndefined(truncation) ? '...' : truncation;=0A=
return this.length > length ?=0A=
this.slice(0, length - truncation.length) + truncation : String(this);=0A=
},=0A=
strip: function() {=0A=
return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
},=0A=
stripTags: function() {=0A=
return this.replace(/<\/?[^>]+>/gi, '');=0A=
},=0A=
stripScripts: function() {=0A=
return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=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=
evalScripts: function() {=0A=
return this.extractScripts().map(function(script) { return eval(script) =
});=0A=
},=0A=
escapeHTML: function() {=0A=
var self =3D arguments.callee;=0A=
self.text.data =3D this;=0A=
return self.div.innerHTML;=0A=
},=0A=
unescapeHTML: function() {=0A=
var div =3D new Element('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=
toQueryParams: function(separator) {=0A=
var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
if (!match) return { };=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=
if (key in hash) {=0A=
if (!Object.isArray(hash[key])) hash[key] =3D [hash[key]];=0A=
hash[key].push(value);=0A=
}=0A=
else hash[key] =3D value;=0A=
}=0A=
return hash;=0A=
});=0A=
},=0A=
toArray: function() {=0A=
return this.split('');=0A=
},=0A=
succ: function() {=0A=
return this.slice(0, this.length - 1) +=0A=
String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
},=0A=
times: function(count) {=0A=
return count < 1 ? '' : new Array(count + 1).join(this);=0A=
},=0A=
camelize: function() {=0A=
var parts =3D this.split('-'), len =3D parts.length;=0A=
if (len =3D=3D 1) return parts[0];=0A=
var camelized =3D this.charAt(0) =3D=3D '-'=0A=
? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A=
: parts[0];=0A=
for (var i =3D 1; i < len; i++)=0A=
camelized +=3D parts[i].charAt(0).toUpperCase() + parts[i].substring(1);=0A=
return camelized;=0A=
},=0A=
capitalize: function() {=0A=
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();=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=
dasherize: function() {=0A=
return this.gsub(/_/,'-');=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=
toJSON: function() {=0A=
return this.inspect(true);=0A=
},=0A=
unfilterJSON: function(filter) {=0A=
return this.sub(filter || Prototype.JSONFilter, '#{1}');=0A=
},=0A=
isJSON: function() {=0A=
var str =3D this;=0A=
if (str.blank()) return false;=0A=
str =3D this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');=0A=
return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);=0A=
},=0A=
evalJSON: function(sanitize) {=0A=
var json =3D this.unfilterJSON();=0A=
try {=0A=
if (!sanitize || json.isJSON()) return eval('(' + json + ')');=0A=
} catch (e) { }=0A=
throw new SyntaxError('Badly formed JSON string: ' + this.inspect());=0A=
},=0A=
include: function(pattern) {=0A=
return this.indexOf(pattern) > -1;=0A=
},=0A=
startsWith: function(pattern) {=0A=
return this.indexOf(pattern) =3D=3D=3D 0;=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=
empty: function() {=0A=
return this =3D=3D '';=0A=
},=0A=
blank: function() {=0A=
return /^\s*$/.test(this);=0A=
},=0A=
interpolate: function(object, pattern) {=0A=
return new Template(this, pattern).evaluate(object);=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=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
if (Object.isFunction(replacement)) return replacement;=0A=
var template =3D new Template(replacement);=0A=
return function(match) { return template.evaluate(match) };=0A=
};=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
Object.extend(String.prototype.escapeHTML, {=0A=
div:  document.createElement('div'),=0A=
text: document.createTextNode('')=0A=
});=0A=
with (String.prototype.escapeHTML) div.appendChild(text);=0A=
var Template =3D Class.create({=0A=
initialize: function(template, pattern) {=0A=
this.template =3D template.toString();=0A=
this.pattern =3D pattern || Template.Pattern;=0A=
},=0A=
evaluate: function(object) {=0A=
if (Object.isFunction(object.toTemplateReplacements))=0A=
object =3D object.toTemplateReplacements();=0A=
return this.template.gsub(this.pattern, function(match) {=0A=
if (object =3D=3D null) return '';=0A=
var before =3D match[1] || '';=0A=
if (before =3D=3D '\\') return match[2];=0A=
var ctx =3D object, expr =3D match[3];=0A=
var pattern =3D /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;=0A=
match =3D pattern.exec(expr);=0A=
if (match =3D=3D null) return before;=0A=
while (match !=3D null) {=0A=
var comp =3D match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : =
match[1];=0A=
ctx =3D ctx[comp];=0A=
if (null =3D=3D ctx || '' =3D=3D match[3]) break;=0A=
expr =3D expr.substring('[' =3D=3D match[3] ? match[1].length : =
match[0].length);=0A=
match =3D pattern.exec(expr);=0A=
}=0A=
return before + String.interpret(ctx);=0A=
});=0A=
}=0A=
});=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
var $break =3D { };=0A=
var Enumerable =3D {=0A=
each: function(iterator, context) {=0A=
var index =3D 0;=0A=
iterator =3D iterator.bind(context);=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=
eachSlice: function(number, iterator, context) {=0A=
iterator =3D iterator ? iterator.bind(context) : Prototype.K;=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.collect(iterator, context);=0A=
},=0A=
all: function(iterator, context) {=0A=
iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
var result =3D true;=0A=
this.each(function(value, index) {=0A=
result =3D result && !!iterator(value, index);=0A=
if (!result) throw $break;=0A=
});=0A=
return result;=0A=
},=0A=
any: function(iterator, context) {=0A=
iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
var result =3D false;=0A=
this.each(function(value, index) {=0A=
if (result =3D !!iterator(value, index))=0A=
throw $break;=0A=
});=0A=
return result;=0A=
},=0A=
collect: function(iterator, context) {=0A=
iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
var results =3D [];=0A=
this.each(function(value, index) {=0A=
results.push(iterator(value, index));=0A=
});=0A=
return results;=0A=
},=0A=
detect: function(iterator, context) {=0A=
iterator =3D iterator.bind(context);=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=
findAll: function(iterator, context) {=0A=
iterator =3D iterator.bind(context);=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=
grep: function(filter, iterator, context) {=0A=
iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
var results =3D [];=0A=
if (Object.isString(filter))=0A=
filter =3D new RegExp(filter);=0A=
this.each(function(value, index) {=0A=
if (filter.match(value))=0A=
results.push(iterator(value, index));=0A=
});=0A=
return results;=0A=
},=0A=
include: function(object) {=0A=
if (Object.isFunction(this.indexOf))=0A=
if (this.indexOf(object) !=3D -1) return true;=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=
inGroupsOf: function(number, fillWith) {=0A=
fillWith =3D Object.isUndefined(fillWith) ? null : fillWith;=0A=
return this.eachSlice(number, function(slice) {=0A=
while(slice.length < number) slice.push(fillWith);=0A=
return slice;=0A=
});=0A=
},=0A=
inject: function(memo, iterator, context) {=0A=
iterator =3D iterator.bind(context);=0A=
this.each(function(value, index) {=0A=
memo =3D iterator(memo, value, index);=0A=
});=0A=
return memo;=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=
max: function(iterator, context) {=0A=
iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
var result;=0A=
this.each(function(value, index) {=0A=
value =3D iterator(value, index);=0A=
if (result =3D=3D null || value >=3D result)=0A=
result =3D value;=0A=
});=0A=
return result;=0A=
},=0A=
min: function(iterator, context) {=0A=
iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
var result;=0A=
this.each(function(value, index) {=0A=
value =3D iterator(value, index);=0A=
if (result =3D=3D null || value < result)=0A=
result =3D value;=0A=
});=0A=
return result;=0A=
},=0A=
partition: function(iterator, context) {=0A=
iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
var trues =3D [], falses =3D [];=0A=
this.each(function(value, index) {=0A=
(iterator(value, index) ?=0A=
trues : falses).push(value);=0A=
});=0A=
return [trues, falses];=0A=
},=0A=
pluck: function(property) {=0A=
var results =3D [];=0A=
this.each(function(value) {=0A=
results.push(value[property]);=0A=
});=0A=
return results;=0A=
},=0A=
reject: function(iterator, context) {=0A=
iterator =3D iterator.bind(context);=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=
sortBy: function(iterator, context) {=0A=
iterator =3D iterator.bind(context);=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=
toArray: function() {=0A=
return this.map();=0A=
},=0A=
zip: function() {=0A=
var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
if (Object.isFunction(args.last()))=0A=
iterator =3D args.pop();=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=
size: function() {=0A=
return this.toArray().length;=0A=
},=0A=
inspect: function() {=0A=
return '#<Enumerable:' + this.toArray().inspect() + '>';=0A=
}=0A=
};=0A=
Object.extend(Enumerable, {=0A=
map:     Enumerable.collect,=0A=
find:    Enumerable.detect,=0A=
select:  Enumerable.findAll,=0A=
filter:  Enumerable.findAll,=0A=
member:  Enumerable.include,=0A=
entries: Enumerable.toArray,=0A=
every:   Enumerable.all,=0A=
some:    Enumerable.any=0A=
});=0A=
function $A(iterable) {=0A=
if (!iterable) return [];=0A=
if (iterable.toArray) return iterable.toArray();=0A=
var length =3D iterable.length || 0, results =3D new Array(length);=0A=
while (length--) results[length] =3D iterable[length];=0A=
return results;=0A=
}=0A=
if (Prototype.Browser.WebKit) {=0A=
$A =3D function(iterable) {=0A=
if (!iterable) return [];=0A=
if (!(Object.isFunction(iterable) && iterable =3D=3D '[object =
NodeList]') &&=0A=
iterable.toArray) return iterable.toArray();=0A=
var length =3D iterable.length || 0, results =3D new Array(length);=0A=
while (length--) results[length] =3D iterable[length];=0A=
return results;=0A=
};=0A=
}=0A=
Array.from =3D $A;=0A=
Object.extend(Array.prototype, Enumerable);=0A=
if (!Array.prototype._reverse) Array.prototype._reverse =3D =
Array.prototype.reverse;=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=
clear: function() {=0A=
this.length =3D 0;=0A=
return this;=0A=
},=0A=
first: function() {=0A=
return this[0];=0A=
},=0A=
last: function() {=0A=
return this[this.length - 1];=0A=
},=0A=
compact: function() {=0A=
return this.select(function(value) {=0A=
return value !=3D null;=0A=
});=0A=
},=0A=
flatten: function() {=0A=
return this.inject([], function(array, value) {=0A=
return array.concat(Object.isArray(value) ?=0A=
value.flatten() : [value]);=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=
reverse: function(inline) {=0A=
return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
},=0A=
reduce: function() {=0A=
return this.length > 1 ? this : this[0];=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=
intersect: function(array) {=0A=
return this.uniq().findAll(function(item) {=0A=
return array.detect(function(value) { return item =3D=3D=3D value });=0A=
});=0A=
},=0A=
clone: function() {=0A=
return [].concat(this);=0A=
},=0A=
size: function() {=0A=
return this.length;=0A=
},=0A=
inspect: function() {=0A=
return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
},=0A=
toJSON: function() {=0A=
var results =3D [];=0A=
this.each(function(object) {=0A=
var value =3D Object.toJSON(object);=0A=
if (!Object.isUndefined(value)) results.push(value);=0A=
});=0A=
return '[' + results.join(', ') + ']';=0A=
}=0A=
});=0A=
// use native browser JS 1.6 implementation if available=0A=
if (Object.isFunction(Array.prototype.forEach))=0A=
Array.prototype._each =3D Array.prototype.forEach;=0A=
if (!Array.prototype.indexOf) Array.prototype.indexOf =3D function(item, =
i) {=0A=
i || (i =3D 0);=0A=
var length =3D this.length;=0A=
if (i < 0) i =3D length + i;=0A=
for (; i < length; i++)=0A=
if (this[i] =3D=3D=3D item) return i;=0A=
return -1;=0A=
};=0A=
if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf =3D =
function(item, i) {=0A=
i =3D isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;=0A=
var n =3D this.slice(0, i).reverse().indexOf(item);=0A=
return (n < 0) ? n : i - n - 1;=0A=
};=0A=
Array.prototype.toArray =3D Array.prototype.clone;=0A=
function $w(string) {=0A=
if (!Object.isString(string)) return [];=0A=
string =3D string.strip();=0A=
return string ? string.split(/\s+/) : [];=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 (Object.isArray(arguments[i])) {=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=
Object.extend(Number.prototype, {=0A=
toColorPart: function() {=0A=
return this.toPaddedString(2, 16);=0A=
},=0A=
succ: function() {=0A=
return this + 1;=0A=
},=0A=
times: function(iterator) {=0A=
$R(0, this, true).each(iterator);=0A=
return this;=0A=
},=0A=
toPaddedString: function(length, radix) {=0A=
var string =3D this.toString(radix || 10);=0A=
return '0'.times(length - string.length) + string;=0A=
},=0A=
toJSON: function() {=0A=
return isFinite(this) ? this.toString() : 'null';=0A=
}=0A=
});=0A=
$w('abs round ceil floor').each(function(method){=0A=
Number.prototype[method] =3D Math[method].methodize();=0A=
});=0A=
function $H(object) {=0A=
return new Hash(object);=0A=
};=0A=
var Hash =3D Class.create(Enumerable, (function() {=0A=
function toQueryPair(key, value) {=0A=
if (Object.isUndefined(value)) return key;=0A=
return key + '=3D' + encodeURIComponent(String.interpret(value));=0A=
}=0A=
return {=0A=
initialize: function(object) {=0A=
this._object =3D Object.isHash(object) ? object.toObject() : =
Object.clone(object);=0A=
},=0A=
_each: function(iterator) {=0A=
for (var key in this._object) {=0A=
var value =3D this._object[key], pair =3D [key, value];=0A=
pair.key =3D key;=0A=
pair.value =3D value;=0A=
iterator(pair);=0A=
}=0A=
},=0A=
set: function(key, value) {=0A=
return this._object[key] =3D value;=0A=
},=0A=
get: function(key) {=0A=
return this._object[key];=0A=
},=0A=
unset: function(key) {=0A=
var value =3D this._object[key];=0A=
delete this._object[key];=0A=
return value;=0A=
},=0A=
toObject: function() {=0A=
return Object.clone(this._object);=0A=
},=0A=
keys: function() {=0A=
return this.pluck('key');=0A=
},=0A=
values: function() {=0A=
return this.pluck('value');=0A=
},=0A=
index: function(value) {=0A=
var match =3D this.detect(function(pair) {=0A=
return pair.value =3D=3D=3D value;=0A=
});=0A=
return match && match.key;=0A=
},=0A=
merge: function(object) {=0A=
return this.clone().update(object);=0A=
},=0A=
update: function(object) {=0A=
return new Hash(object).inject(this, function(result, pair) {=0A=
result.set(pair.key, pair.value);=0A=
return result;=0A=
});=0A=
},=0A=
toQueryString: function() {=0A=
return this.map(function(pair) {=0A=
var key =3D encodeURIComponent(pair.key), values =3D pair.value;=0A=
if (values && typeof values =3D=3D 'object') {=0A=
if (Object.isArray(values))=0A=
return values.map(toQueryPair.curry(key)).join('&');=0A=
}=0A=
return toQueryPair(key, values);=0A=
}).join('&');=0A=
},=0A=
inspect: function() {=0A=
return '#<Hash:{' + this.map(function(pair) {=0A=
return pair.map(Object.inspect).join(': ');=0A=
}).join(', ') + '}>';=0A=
},=0A=
toJSON: function() {=0A=
return Object.toJSON(this.toObject());=0A=
},=0A=
clone: function() {=0A=
return new Hash(this);=0A=
}=0A=
}=0A=
})());=0A=
Hash.prototype.toTemplateReplacements =3D Hash.prototype.toObject;=0A=
Hash.from =3D $H;=0A=
var ObjectRange =3D Class.create(Enumerable, {=0A=
initialize: function(start, end, exclusive) {=0A=
this.start =3D start;=0A=
this.end =3D end;=0A=
this.exclusive =3D exclusive;=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=
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=
var $R =3D function(start, end, exclusive) {=0A=
return new ObjectRange(start, end, exclusive);=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=
activeRequestCount: 0=0A=
};=0A=
Ajax.Responders =3D {=0A=
responders: [],=0A=
_each: function(iterator) {=0A=
this.responders._each(iterator);=0A=
},=0A=
register: function(responder) {=0A=
if (!this.include(responder))=0A=
this.responders.push(responder);=0A=
},=0A=
unregister: function(responder) {=0A=
this.responders =3D this.responders.without(responder);=0A=
},=0A=
dispatch: function(callback, request, transport, json) {=0A=
this.each(function(responder) {=0A=
if (Object.isFunction(responder[callback])) {=0A=
try {=0A=
responder[callback].apply(responder, [request, transport, json]);=0A=
} catch (e) { }=0A=
}=0A=
});=0A=
}=0A=
};=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
Ajax.Responders.register({=0A=
onCreate:   function() { Ajax.activeRequestCount++ },=0A=
onComplete: function() { Ajax.activeRequestCount-- }=0A=
});=0A=
Ajax.Base =3D Class.create({=0A=
initialize: 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=
evalJSON:     true,=0A=
evalJS:       true=0A=
};=0A=
Object.extend(this.options, options || { });=0A=
this.options.method =3D this.options.method.toLowerCase();=0A=
if (Object.isString(this.options.parameters))=0A=
this.options.parameters =3D this.options.parameters.toQueryParams();=0A=
else if (Object.isHash(this.options.parameters))=0A=
this.options.parameters =3D this.options.parameters.toObject();=0A=
}=0A=
});=0A=
Ajax.Request =3D Class.create(Ajax.Base, {=0A=
_complete: false,=0A=
initialize: function($super, url, options) {=0A=
$super(options);=0A=
this.transport =3D Ajax.getTransport();=0A=
this.request(url);=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=
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=
this.parameters =3D params;=0A=
if (params =3D Object.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=
try {=0A=
var response =3D new Ajax.Response(this);=0A=
if (this.options.onCreate) this.options.onCreate(response);=0A=
Ajax.Responders.dispatch('onCreate', this, response);=0A=
this.transport.open(this.method.toUpperCase(), this.url,=0A=
this.options.asynchronous);=0A=
if (this.options.asynchronous) =
this.respondToReadyState.bind(this).defer(1);=0A=
this.transport.onreadystatechange =3D this.onStateChange.bind(this);=0A=
this.setRequestHeaders();=0A=
this.body =3D this.method =3D=3D 'post' ? (this.options.postBody || =
params) : null;=0A=
this.transport.send(this.body);=0A=
/* Force Firefox to handle ready state 4 for synchronous requests */=0A=
if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
this.onStateChange();=0A=
}=0A=
catch (e) {=0A=
this.dispatchException(e);=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=
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=
if (this.method =3D=3D 'post') {=0A=
headers['Content-type'] =3D this.options.contentType +=0A=
(this.options.encoding ? '; charset=3D' + this.options.encoding : '');=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=
// user-defined headers=0A=
if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
var extras =3D this.options.requestHeaders;=0A=
if (Object.isFunction(extras.push))=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=
for (var name in headers)=0A=
this.transport.setRequestHeader(name, headers[name]);=0A=
},=0A=
success: function() {=0A=
var status =3D this.getStatus();=0A=
return !status || (status >=3D 200 && status < 300);=0A=
},=0A=
getStatus: function() {=0A=
try {=0A=
return this.transport.status || 0;=0A=
} catch (e) { return 0 }=0A=
},=0A=
respondToReadyState: function(readyState) {=0A=
var state =3D Ajax.Request.Events[readyState], response =3D new =
Ajax.Response(this);=0A=
if (state =3D=3D 'Complete') {=0A=
try {=0A=
this._complete =3D true;=0A=
(this.options['on' + response.status]=0A=
|| this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
|| Prototype.emptyFunction)(response, response.headerJSON);=0A=
} catch (e) {=0A=
this.dispatchException(e);=0A=
}=0A=
var contentType =3D response.getHeader('Content-type');=0A=
if (this.options.evalJS =3D=3D 'force'=0A=
|| (this.options.evalJS && this.isSameOrigin() && contentType=0A=
&& =
contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s=
*$/i)))=0A=
this.evalResponse();=0A=
}=0A=
try {=0A=
(this.options['on' + state] || Prototype.emptyFunction)(response, =
response.headerJSON);=0A=
Ajax.Responders.dispatch('on' + state, this, response, =
response.headerJSON);=0A=
} catch (e) {=0A=
this.dispatchException(e);=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=
isSameOrigin: function() {=0A=
var m =3D this.url.match(/^\s*https?:\/\/[^\/]*/);=0A=
return !m || (m[0] =3D=3D '#{protocol}//#{domain}#{port}'.interpolate({=0A=
protocol: location.protocol,=0A=
domain: document.domain,=0A=
port: location.port ? ':' + location.port : ''=0A=
}));=0A=
},=0A=
getHeader: function(name) {=0A=
try {=0A=
return this.transport.getResponseHeader(name) || null;=0A=
} catch (e) { return null }=0A=
},=0A=
evalResponse: function() {=0A=
try {=0A=
return eval((this.transport.responseText || '').unfilterJSON());=0A=
} catch (e) {=0A=
this.dispatchException(e);=0A=
}=0A=
},=0A=
dispatchException: function(exception) {=0A=
(this.options.onException || Prototype.emptyFunction)(this, exception);=0A=
Ajax.Responders.dispatch('onException', this, exception);=0A=
}=0A=
});=0A=
Ajax.Request.Events =3D=0A=
['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
Ajax.Response =3D Class.create({=0A=
initialize: function(request){=0A=
this.request =3D request;=0A=
var transport  =3D this.transport  =3D request.transport,=0A=
readyState =3D this.readyState =3D transport.readyState;=0A=
if((readyState > 2 && !Prototype.Browser.IE) || readyState =3D=3D 4) {=0A=
this.status       =3D this.getStatus();=0A=
this.statusText   =3D this.getStatusText();=0A=
this.responseText =3D String.interpret(transport.responseText);=0A=
this.headerJSON   =3D this._getHeaderJSON();=0A=
}=0A=
if(readyState =3D=3D 4) {=0A=
var xml =3D transport.responseXML;=0A=
this.responseXML  =3D Object.isUndefined(xml) ? null : xml;=0A=
this.responseJSON =3D this._getResponseJSON();=0A=
}=0A=
},=0A=
status:      0,=0A=
statusText: '',=0A=
getStatus: Ajax.Request.prototype.getStatus,=0A=
getStatusText: function() {=0A=
try {=0A=
return this.transport.statusText || '';=0A=
} catch (e) { return '' }=0A=
},=0A=
getHeader: Ajax.Request.prototype.getHeader,=0A=
getAllHeaders: function() {=0A=
try {=0A=
return this.getAllResponseHeaders();=0A=
} catch (e) { return null }=0A=
},=0A=
getResponseHeader: function(name) {=0A=
return this.transport.getResponseHeader(name);=0A=
},=0A=
getAllResponseHeaders: function() {=0A=
return this.transport.getAllResponseHeaders();=0A=
},=0A=
_getHeaderJSON: function() {=0A=
var json =3D this.getHeader('X-JSON');=0A=
if (!json) return null;=0A=
json =3D decodeURIComponent(escape(json));=0A=
try {=0A=
return json.evalJSON(this.request.options.sanitizeJSON ||=0A=
!this.request.isSameOrigin());=0A=
} catch (e) {=0A=
this.request.dispatchException(e);=0A=
}=0A=
},=0A=
_getResponseJSON: function() {=0A=
var options =3D this.request.options;=0A=
if (!options.evalJSON || (options.evalJSON !=3D 'force' &&=0A=
!(this.getHeader('Content-type') || '').include('application/json')) ||=0A=
this.responseText.blank())=0A=
return null;=0A=
try {=0A=
return this.responseText.evalJSON(options.sanitizeJSON ||=0A=
!this.request.isSameOrigin());=0A=
} catch (e) {=0A=
this.request.dispatchException(e);=0A=
}=0A=
}=0A=
});=0A=
Ajax.Updater =3D Class.create(Ajax.Request, {=0A=
initialize: function($super, container, url, options) {=0A=
this.container =3D {=0A=
success: (container.success || container),=0A=
failure: (container.failure || (container.success ? null : container))=0A=
};=0A=
options =3D Object.clone(options);=0A=
var onComplete =3D options.onComplete;=0A=
options.onComplete =3D (function(response, json) {=0A=
this.updateContent(response.responseText);=0A=
if (Object.isFunction(onComplete)) onComplete(response, json);=0A=
}).bind(this);=0A=
$super(url, options);=0A=
},=0A=
updateContent: function(responseText) {=0A=
var receiver =3D this.container[this.success() ? 'success' : 'failure'],=0A=
options =3D this.options;=0A=
if (!options.evalScripts) responseText =3D responseText.stripScripts();=0A=
if (receiver =3D $(receiver)) {=0A=
if (options.insertion) {=0A=
if (Object.isString(options.insertion)) {=0A=
var insertion =3D { }; insertion[options.insertion] =3D responseText;=0A=
receiver.insert(insertion);=0A=
}=0A=
else options.insertion(receiver, responseText);=0A=
}=0A=
else receiver.update(responseText);=0A=
}=0A=
}=0A=
});=0A=
Ajax.PeriodicalUpdater =3D Class.create(Ajax.Base, {=0A=
initialize: function($super, container, url, options) {=0A=
$super(options);=0A=
this.onComplete =3D this.options.onComplete;=0A=
this.frequency =3D (this.options.frequency || 2);=0A=
this.decay =3D (this.options.decay || 1);=0A=
this.updater =3D { };=0A=
this.container =3D container;=0A=
this.url =3D url;=0A=
this.start();=0A=
},=0A=
start: function() {=0A=
this.options.onComplete =3D this.updateComplete.bind(this);=0A=
this.onTimerEvent();=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=
updateComplete: function(response) {=0A=
if (this.options.decay) {=0A=
this.decay =3D (response.responseText =3D=3D this.lastText ?=0A=
this.decay * this.options.decay : 1);=0A=
this.lastText =3D response.responseText;=0A=
}=0A=
this.timer =3D this.onTimerEvent.bind(this).delay(this.decay * =
this.frequency);=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 (Object.isString(element))=0A=
element =3D document.getElementById(element);=0A=
return Element.extend(element);=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(Element.extend(query.snapshotItem(i)));=0A=
return results;=0A=
};=0A=
}=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
if (!window.Node) var Node =3D { };=0A=
if (!Node.ELEMENT_NODE) {=0A=
// DOM level 2 ECMAScript Language Binding=0A=
Object.extend(Node, {=0A=
ELEMENT_NODE: 1,=0A=
ATTRIBUTE_NODE: 2,=0A=
TEXT_NODE: 3,=0A=
CDATA_SECTION_NODE: 4,=0A=
ENTITY_REFERENCE_NODE: 5,=0A=
ENTITY_NODE: 6,=0A=
PROCESSING_INSTRUCTION_NODE: 7,=0A=
COMMENT_NODE: 8,=0A=
DOCUMENT_NODE: 9,=0A=
DOCUMENT_TYPE_NODE: 10,=0A=
DOCUMENT_FRAGMENT_NODE: 11,=0A=
NOTATION_NODE: 12=0A=
});=0A=
}=0A=
(function() {=0A=
var element =3D this.Element;=0A=
this.Element =3D function(tagName, attributes) {=0A=
attributes =3D attributes || { };=0A=
tagName =3D tagName.toLowerCase();=0A=
var cache =3D Element.cache;=0A=
if (Prototype.Browser.IE && attributes.name) {=0A=
tagName =3D '<' + tagName + ' name=3D"' + attributes.name + '">';=0A=
delete attributes.name;=0A=
return Element.writeAttribute(document.createElement(tagName), =
attributes);=0A=
}=0A=
if (!cache[tagName]) cache[tagName] =3D =
Element.extend(document.createElement(tagName));=0A=
return Element.writeAttribute(cache[tagName].cloneNode(false), =
attributes);=0A=
};=0A=
Object.extend(this.Element, element || { });=0A=
}).call(window);=0A=
Element.cache =3D { };=0A=
Element.Methods =3D {=0A=
visible: function(element) {=0A=
return $(element).style.display !=3D 'none';=0A=
},=0A=
toggle: function(element) {=0A=
element =3D $(element);=0A=
Element[Element.visible(element) ? 'hide' : 'show'](element);=0A=
return element;=0A=
},=0A=
hide: function(element) {=0A=
$(element).style.display =3D 'none';=0A=
return element;=0A=
},=0A=
show: function(element) {=0A=
$(element).style.display =3D '';=0A=
return element;=0A=
},=0A=
remove: function(element) {=0A=
element =3D $(element);=0A=
element.parentNode.removeChild(element);=0A=
return element;=0A=
},=0A=
update: function(element, content) {=0A=
element =3D $(element);=0A=
if (content && content.toElement) content =3D content.toElement();=0A=
if (Object.isElement(content)) return element.update().insert(content);=0A=
content =3D Object.toHTML(content);=0A=
element.innerHTML =3D content.stripScripts();=0A=
content.evalScripts.bind(content).defer();=0A=
return element;=0A=
},=0A=
replace: function(element, content) {=0A=
element =3D $(element);=0A=
if (content && content.toElement) content =3D content.toElement();=0A=
else if (!Object.isElement(content)) {=0A=
content =3D Object.toHTML(content);=0A=
var range =3D element.ownerDocument.createRange();=0A=
range.selectNode(element);=0A=
content.evalScripts.bind(content).defer();=0A=
content =3D range.createContextualFragment(content.stripScripts());=0A=
}=0A=
element.parentNode.replaceChild(content, element);=0A=
return element;=0A=
},=0A=
insert: function(element, insertions) {=0A=
element =3D $(element);=0A=
if (Object.isString(insertions) || Object.isNumber(insertions) ||=0A=
Object.isElement(insertions) || (insertions && (insertions.toElement || =
insertions.toHTML)))=0A=
insertions =3D {bottom:insertions};=0A=
var content, insert, tagName, childNodes;=0A=
for (var position in insertions) {=0A=
content  =3D insertions[position];=0A=
position =3D position.toLowerCase();=0A=
insert =3D Element._insertionTranslations[position];=0A=
if (content && content.toElement) content =3D content.toElement();=0A=
if (Object.isElement(content)) {=0A=
insert(element, content);=0A=
continue;=0A=
}=0A=
content =3D Object.toHTML(content);=0A=
tagName =3D ((position =3D=3D 'before' || position =3D=3D 'after')=0A=
? element.parentNode : element).tagName.toUpperCase();=0A=
childNodes =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
if (position =3D=3D 'top' || position =3D=3D 'after') =
childNodes.reverse();=0A=
childNodes.each(insert.curry(element));=0A=
content.evalScripts.bind(content).defer();=0A=
}=0A=
return element;=0A=
},=0A=
wrap: function(element, wrapper, attributes) {=0A=
element =3D $(element);=0A=
if (Object.isElement(wrapper))=0A=
$(wrapper).writeAttribute(attributes || { });=0A=
else if (Object.isString(wrapper)) wrapper =3D new Element(wrapper, =
attributes);=0A=
else wrapper =3D new Element('div', wrapper);=0A=
if (element.parentNode)=0A=
element.parentNode.replaceChild(wrapper, element);=0A=
wrapper.appendChild(element);=0A=
return wrapper;=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=
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=
ancestors: function(element) {=0A=
return $(element).recursivelyCollect('parentNode');=0A=
},=0A=
descendants: function(element) {=0A=
return $(element).select("*");=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=
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=
previousSiblings: function(element) {=0A=
return $(element).recursivelyCollect('previousSibling');=0A=
},=0A=
nextSiblings: function(element) {=0A=
return $(element).recursivelyCollect('nextSibling');=0A=
},=0A=
siblings: function(element) {=0A=
element =3D $(element);=0A=
return =
element.previousSiblings().reverse().concat(element.nextSiblings());=0A=
},=0A=
match: function(element, selector) {=0A=
if (Object.isString(selector))=0A=
selector =3D new Selector(selector);=0A=
return selector.match($(element));=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 Object.isNumber(expression) ? ancestors[expression] :=0A=
Selector.findElement(ancestors, expression, index);=0A=
},=0A=
down: function(element, expression, index) {=0A=
element =3D $(element);=0A=
if (arguments.length =3D=3D 1) return element.firstDescendant();=0A=
return Object.isNumber(expression) ? element.descendants()[expression] :=0A=
element.select(expression)[index || 0];=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 Object.isNumber(expression) ? previousSiblings[expression] :=0A=
Selector.findElement(previousSiblings, expression, index);=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 Object.isNumber(expression) ? nextSiblings[expression] :=0A=
Selector.findElement(nextSiblings, expression, index);=0A=
},=0A=
select: function() {=0A=
var args =3D $A(arguments), element =3D $(args.shift());=0A=
return Selector.findChildElements(element, args);=0A=
},=0A=
adjacent: function() {=0A=
var args =3D $A(arguments), element =3D $(args.shift());=0A=
return Selector.findChildElements(element.parentNode, =
args).without(element);=0A=
},=0A=
identify: function(element) {=0A=
element =3D $(element);=0A=
var id =3D element.readAttribute('id'), self =3D arguments.callee;=0A=
if (id) return id;=0A=
do { id =3D 'anonymous_element_' + self.counter++ } while ($(id));=0A=
element.writeAttribute('id', id);=0A=
return id;=0A=
},=0A=
readAttribute: function(element, name) {=0A=
element =3D $(element);=0A=
if (Prototype.Browser.IE) {=0A=
var t =3D Element._attributeTranslations.read;=0A=
if (t.values[name]) return t.values[name](element, name);=0A=
if (t.names[name]) name =3D t.names[name];=0A=
if (name.include(':')) {=0A=
return (!element.attributes || !element.attributes[name]) ? null :=0A=
element.attributes[name].value;=0A=
}=0A=
}=0A=
return element.getAttribute(name);=0A=
},=0A=
writeAttribute: function(element, name, value) {=0A=
element =3D $(element);=0A=
var attributes =3D { }, t =3D Element._attributeTranslations.write;=0A=
if (typeof name =3D=3D 'object') attributes =3D name;=0A=
else attributes[name] =3D Object.isUndefined(value) ? true : value;=0A=
for (var attr in attributes) {=0A=
name =3D t.names[attr] || attr;=0A=
value =3D attributes[attr];=0A=
if (t.values[attr]) name =3D t.values[attr](element, value);=0A=
if (value =3D=3D=3D false || value =3D=3D=3D null)=0A=
element.removeAttribute(name);=0A=
else if (value =3D=3D=3D true)=0A=
element.setAttribute(name, name);=0A=
else element.setAttribute(name, value);=0A=
}=0A=
return element;=0A=
},=0A=
getHeight: function(element) {=0A=
return $(element).getDimensions().height;=0A=
},=0A=
getWidth: function(element) {=0A=
return $(element).getDimensions().width;=0A=
},=0A=
classNames: function(element) {=0A=
return new Element.ClassNames(element);=0A=
},=0A=
hasClassName: function(element, className) {=0A=
if (!(element =3D $(element))) return;=0A=
var elementClassName =3D element.className;=0A=
return (elementClassName.length > 0 && (elementClassName =3D=3D =
className ||=0A=
new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));=0A=
},=0A=
addClassName: function(element, className) {=0A=
if (!(element =3D $(element))) return;=0A=
if (!element.hasClassName(className))=0A=
element.className +=3D (element.className ? ' ' : '') + className;=0A=
return element;=0A=
},=0A=
removeClassName: function(element, className) {=0A=
if (!(element =3D $(element))) return;=0A=
element.className =3D element.className.replace(=0A=
new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();=0A=
return element;=0A=
},=0A=
toggleClassName: function(element, className) {=0A=
if (!(element =3D $(element))) return;=0A=
return element[element.hasClassName(className) ?=0A=
'removeClassName' : 'addClassName'](className);=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=
empty: function(element) {=0A=
return $(element).innerHTML.blank();=0A=
},=0A=
descendantOf: function(element, ancestor) {=0A=
element =3D $(element), ancestor =3D $(ancestor);=0A=
var originalAncestor =3D ancestor;=0A=
if (element.compareDocumentPosition)=0A=
return (element.compareDocumentPosition(ancestor) & 8) =3D=3D=3D 8;=0A=
if (element.sourceIndex && !Prototype.Browser.Opera) {=0A=
var e =3D element.sourceIndex, a =3D ancestor.sourceIndex,=0A=
nextAncestor =3D ancestor.nextSibling;=0A=
if (!nextAncestor) {=0A=
do { ancestor =3D ancestor.parentNode; }=0A=
while (!(nextAncestor =3D ancestor.nextSibling) && ancestor.parentNode);=0A=
}=0A=
if (nextAncestor && nextAncestor.sourceIndex)=0A=
return (e > a && e < nextAncestor.sourceIndex);=0A=
}=0A=
while (element =3D element.parentNode)=0A=
if (element =3D=3D originalAncestor) return true;=0A=
return false;=0A=
},=0A=
scrollTo: function(element) {=0A=
element =3D $(element);=0A=
var pos =3D element.cumulativeOffset();=0A=
window.scrollTo(pos[0], pos[1]);=0A=
return element;=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=
getOpacity: function(element) {=0A=
return $(element).getStyle('opacity');=0A=
},=0A=
setStyle: function(element, styles) {=0A=
element =3D $(element);=0A=
var elementStyle =3D element.style, match;=0A=
if (Object.isString(styles)) {=0A=
element.style.cssText +=3D ';' + styles;=0A=
return styles.include('opacity') ?=0A=
element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;=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=
(Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : =
'styleFloat') :=0A=
property] =3D styles[property];=0A=
return element;=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=
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=
// 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=
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=
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=
makeClipping: function(element) {=0A=
element =3D $(element);=0A=
if (element._overflow) return element;=0A=
element._overflow =3D Element.getStyle(element, 'overflow') || 'auto';=0A=
if (element._overflow !=3D=3D 'hidden')=0A=
element.style.overflow =3D 'hidden';=0A=
return element;=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=
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 Element._returnOffset(valueL, valueT);=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 'static') break;=0A=
}=0A=
} while (element);=0A=
return Element._returnOffset(valueL, valueT);=0A=
},=0A=
absolutize: function(element) {=0A=
element =3D $(element);=0A=
if (element.getStyle('position') =3D=3D 'absolute') return;=0A=
// Position.prepare(); // To be done manually by Scripty when it needs =
it.=0A=
var offsets =3D element.positionedOffset();=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=
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=
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=
return element;=0A=
},=0A=
relativize: function(element) {=0A=
element =3D $(element);=0A=
if (element.getStyle('position') =3D=3D 'relative') return;=0A=
// Position.prepare(); // To be done manually by Scripty when it needs =
it.=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=
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=
return element;=0A=
},=0A=
cumulativeScrollOffset: 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 Element._returnOffset(valueL, valueT);=0A=
},=0A=
getOffsetParent: function(element) {=0A=
if (element.offsetParent) return $(element.offsetParent);=0A=
if (element =3D=3D document.body) return $(element);=0A=
while ((element =3D element.parentNode) && element !=3D document.body && =
Object.isElement(element))=0A=
if (Element.getStyle(element, 'position') !=3D 'static')=0A=
return $(element);=0A=
return $(document.body);=0A=
},=0A=
viewportOffset: function(forElement) {=0A=
var valueT =3D 0, valueL =3D 0;=0A=
var element =3D forElement;=0A=
do {=0A=
valueT +=3D element.offsetTop  || 0;=0A=
valueL +=3D element.offsetLeft || 0;=0A=
// Safari fix=0A=
if (element.offsetParent =3D=3D document.body &&=0A=
Element.getStyle(element, 'position') =3D=3D 'absolute') break;=0A=
} while (element =3D element.offsetParent);=0A=
element =3D forElement;=0A=
do {=0A=
if (!Prototype.Browser.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=
return Element._returnOffset(valueL, valueT);=0A=
},=0A=
clonePosition: function(element, source) {=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=
// find page position of source=0A=
source =3D $(source);=0A=
var p =3D source.viewportOffset();=0A=
// find coordinate system to use=0A=
element =3D $(element);=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(element, 'position') =3D=3D 'absolute') {=0A=
parent =3D element.getOffsetParent();=0A=
delta =3D parent.viewportOffset();=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=
// set position=0A=
if (options.setLeft)   element.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
if (options.setTop)    element.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
if (options.setWidth)  element.style.width =3D source.offsetWidth + 'px';=0A=
if (options.setHeight) element.style.height =3D source.offsetHeight + =
'px';=0A=
return element;=0A=
}=0A=
};=0A=
Element.Methods.identify.counter =3D 1;=0A=
Object.extend(Element.Methods, {=0A=
getElementsBySelector: Element.Methods.select,=0A=
childElements: Element.Methods.immediateDescendants=0A=
});=0A=
Element._attributeTranslations =3D {=0A=
write: {=0A=
names: {=0A=
className: 'class',=0A=
htmlFor:   'for'=0A=
},=0A=
values: { }=0A=
}=0A=
};=0A=
if (Prototype.Browser.Opera) {=0A=
Element.Methods.getStyle =3D Element.Methods.getStyle.wrap(=0A=
function(proceed, element, style) {=0A=
switch (style) {=0A=
case 'left': case 'top': case 'right': case 'bottom':=0A=
if (proceed(element, 'position') =3D=3D=3D 'static') return null;=0A=
case 'height': case 'width':=0A=
// returns '0px' for hidden elements; we want it to return null=0A=
if (!Element.visible(element)) return null;=0A=
// returns the border-box dimensions rather than the content-box=0A=
// dimensions, so we subtract padding and borders from the value=0A=
var dim =3D parseInt(proceed(element, style), 10);=0A=
if (dim !=3D=3D element['offset' + style.capitalize()])=0A=
return dim + 'px';=0A=
var properties;=0A=
if (style =3D=3D=3D 'height') {=0A=
properties =3D ['border-top-width', 'padding-top',=0A=
'padding-bottom', 'border-bottom-width'];=0A=
}=0A=
else {=0A=
properties =3D ['border-left-width', 'padding-left',=0A=
'padding-right', 'border-right-width'];=0A=
}=0A=
return properties.inject(dim, function(memo, property) {=0A=
var val =3D proceed(element, property);=0A=
return val =3D=3D=3D null ? memo : memo - parseInt(val, 10);=0A=
}) + 'px';=0A=
default: return proceed(element, style);=0A=
}=0A=
}=0A=
);=0A=
Element.Methods.readAttribute =3D Element.Methods.readAttribute.wrap(=0A=
function(proceed, element, attribute) {=0A=
if (attribute =3D=3D=3D 'title') return element.title;=0A=
return proceed(element, attribute);=0A=
}=0A=
);=0A=
}=0A=
else if (Prototype.Browser.IE) {=0A=
// IE doesn't report offsets correctly for static elements, so we change =
them=0A=
// to "relative" to get the values, then change them back.=0A=
Element.Methods.getOffsetParent =3D Element.Methods.getOffsetParent.wrap(=0A=
function(proceed, element) {=0A=
element =3D $(element);=0A=
var position =3D element.getStyle('position');=0A=
if (position !=3D=3D 'static') return proceed(element);=0A=
element.setStyle({ position: 'relative' });=0A=
var value =3D proceed(element);=0A=
element.setStyle({ position: position });=0A=
return value;=0A=
}=0A=
);=0A=
$w('positionedOffset viewportOffset').each(function(method) {=0A=
Element.Methods[method] =3D Element.Methods[method].wrap(=0A=
function(proceed, element) {=0A=
element =3D $(element);=0A=
var position =3D element.getStyle('position');=0A=
if (position !=3D=3D 'static') return proceed(element);=0A=
// Trigger hasLayout on the offset parent so that IE6 reports=0A=
// accurate offsetTop and offsetLeft values for position: fixed.=0A=
var offsetParent =3D element.getOffsetParent();=0A=
if (offsetParent && offsetParent.getStyle('position') =3D=3D=3D 'fixed')=0A=
offsetParent.setStyle({ zoom: 1 });=0A=
element.setStyle({ position: 'relative' });=0A=
var value =3D proceed(element);=0A=
element.setStyle({ position: position });=0A=
return value;=0A=
}=0A=
);=0A=
});=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=
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=
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=
Element.Methods.setOpacity =3D function(element, value) {=0A=
function stripAlpha(filter){=0A=
return filter.replace(/alpha\([^\)]*\)/gi,'');=0A=
}=0A=
element =3D $(element);=0A=
var currentStyle =3D element.currentStyle;=0A=
if ((currentStyle && !currentStyle.hasLayout) ||=0A=
(!currentStyle && element.style.zoom =3D=3D 'normal'))=0A=
element.style.zoom =3D 1;=0A=
var filter =3D element.getStyle('filter'), style =3D element.style;=0A=
if (value =3D=3D 1 || value =3D=3D=3D '') {=0A=
(filter =3D stripAlpha(filter)) ?=0A=
style.filter =3D filter : style.removeAttribute('filter');=0A=
return element;=0A=
} else if (value < 0.00001) value =3D 0;=0A=
style.filter =3D stripAlpha(filter) +=0A=
'alpha(opacity=3D' + (value * 100) + ')';=0A=
return element;=0A=
};=0A=
Element._attributeTranslations =3D {=0A=
read: {=0A=
names: {=0A=
'class': 'className',=0A=
'for':   'htmlFor'=0A=
},=0A=
values: {=0A=
_getAttr: function(element, attribute) {=0A=
return element.getAttribute(attribute, 2);=0A=
},=0A=
_getAttrNode: function(element, attribute) {=0A=
var node =3D element.getAttributeNode(attribute);=0A=
return node ? node.value : "";=0A=
},=0A=
_getEv: function(element, attribute) {=0A=
attribute =3D element.getAttribute(attribute);=0A=
return attribute ? attribute.toString().slice(23, -2) : null;=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=
return element.title;=0A=
}=0A=
}=0A=
}=0A=
};=0A=
Element._attributeTranslations.write =3D {=0A=
names: Object.extend({=0A=
cellpadding: 'cellPadding',=0A=
cellspacing: 'cellSpacing'=0A=
}, Element._attributeTranslations.read.names),=0A=
values: {=0A=
checked: function(element, value) {=0A=
element.checked =3D !!value;=0A=
},=0A=
style: function(element, value) {=0A=
element.style.cssText =3D value ? value : '';=0A=
}=0A=
}=0A=
};=0A=
Element._attributeTranslations.has =3D {};=0A=
$w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +=0A=
'encType maxLength readOnly longDesc').each(function(attr) {=0A=
Element._attributeTranslations.write.names[attr.toLowerCase()] =3D attr;=0A=
Element._attributeTranslations.has[attr.toLowerCase()] =3D attr;=0A=
});=0A=
(function(v) {=0A=
Object.extend(v, {=0A=
href:        v._getAttr,=0A=
src:         v._getAttr,=0A=
type:        v._getAttr,=0A=
action:      v._getAttrNode,=0A=
disabled:    v._flag,=0A=
checked:     v._flag,=0A=
readonly:    v._flag,=0A=
multiple:    v._flag,=0A=
onload:      v._getEv,=0A=
onunload:    v._getEv,=0A=
onclick:     v._getEv,=0A=
ondblclick:  v._getEv,=0A=
onmousedown: v._getEv,=0A=
onmouseup:   v._getEv,=0A=
onmouseover: v._getEv,=0A=
onmousemove: v._getEv,=0A=
onmouseout:  v._getEv,=0A=
onfocus:     v._getEv,=0A=
onblur:      v._getEv,=0A=
onkeypress:  v._getEv,=0A=
onkeydown:   v._getEv,=0A=
onkeyup:     v._getEv,=0A=
onsubmit:    v._getEv,=0A=
onreset:     v._getEv,=0A=
onselect:    v._getEv,=0A=
onchange:    v._getEv=0A=
});=0A=
})(Element._attributeTranslations.read.values);=0A=
}=0A=
else if (Prototype.Browser.Gecko && =
/rv:1\.8\.0/.test(navigator.userAgent)) {=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=
else if (Prototype.Browser.WebKit) {=0A=
Element.Methods.setOpacity =3D 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=
if (value =3D=3D 1)=0A=
if(element.tagName =3D=3D 'IMG' && element.width) {=0A=
element.width++; element.width--;=0A=
} else try {=0A=
var n =3D document.createTextNode(' ');=0A=
element.appendChild(n);=0A=
element.removeChild(n);=0A=
} catch (e) { }=0A=
return element;=0A=
};=0A=
// Safari returns margins on body which is incorrect if the child is =
absolutely=0A=
// positioned.  For performance reasons, redefine =
Element#cumulativeOffset for=0A=
// KHTML/WebKit only.=0A=
Element.Methods.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=
element =3D element.offsetParent;=0A=
} while (element);=0A=
return Element._returnOffset(valueL, valueT);=0A=
};=0A=
}=0A=
if (Prototype.Browser.IE || Prototype.Browser.Opera) {=0A=
// IE and Opera are missing .innerHTML support for TABLE-related and =
SELECT elements=0A=
Element.Methods.update =3D function(element, content) {=0A=
element =3D $(element);=0A=
if (content && content.toElement) content =3D content.toElement();=0A=
if (Object.isElement(content)) return element.update().insert(content);=0A=
content =3D Object.toHTML(content);=0A=
var tagName =3D element.tagName.toUpperCase();=0A=
if (tagName in Element._insertionTranslations.tags) {=0A=
$A(element.childNodes).each(function(node) { element.removeChild(node) =
});=0A=
Element._getContentFromAnonymousElement(tagName, content.stripScripts())=0A=
.each(function(node) { element.appendChild(node) });=0A=
}=0A=
else element.innerHTML =3D content.stripScripts();=0A=
content.evalScripts.bind(content).defer();=0A=
return element;=0A=
};=0A=
}=0A=
if ('outerHTML' in document.createElement('div')) {=0A=
Element.Methods.replace =3D function(element, content) {=0A=
element =3D $(element);=0A=
if (content && content.toElement) content =3D content.toElement();=0A=
if (Object.isElement(content)) {=0A=
element.parentNode.replaceChild(content, element);=0A=
return element;=0A=
}=0A=
content =3D Object.toHTML(content);=0A=
var parent =3D element.parentNode, tagName =3D =
parent.tagName.toUpperCase();=0A=
if (Element._insertionTranslations.tags[tagName]) {=0A=
var nextSibling =3D element.next();=0A=
var fragments =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
parent.removeChild(element);=0A=
if (nextSibling)=0A=
fragments.each(function(node) { parent.insertBefore(node, nextSibling) =
});=0A=
else=0A=
fragments.each(function(node) { parent.appendChild(node) });=0A=
}=0A=
else element.outerHTML =3D content.stripScripts();=0A=
content.evalScripts.bind(content).defer();=0A=
return element;=0A=
};=0A=
}=0A=
Element._returnOffset =3D function(l, t) {=0A=
var result =3D [l, t];=0A=
result.left =3D l;=0A=
result.top =3D t;=0A=
return result;=0A=
};=0A=
Element._getContentFromAnonymousElement =3D function(tagName, html) {=0A=
var div =3D new Element('div'), t =3D =
Element._insertionTranslations.tags[tagName];=0A=
if (t) {=0A=
div.innerHTML =3D t[0] + html + t[1];=0A=
t[2].times(function() { div =3D div.firstChild });=0A=
} else div.innerHTML =3D html;=0A=
return $A(div.childNodes);=0A=
};=0A=
Element._insertionTranslations =3D {=0A=
before: function(element, node) {=0A=
element.parentNode.insertBefore(node, element);=0A=
},=0A=
top: function(element, node) {=0A=
element.insertBefore(node, element.firstChild);=0A=
},=0A=
bottom: function(element, node) {=0A=
element.appendChild(node);=0A=
},=0A=
after: function(element, node) {=0A=
element.parentNode.insertBefore(node, element.nextSibling);=0A=
},=0A=
tags: {=0A=
TABLE:  ['<table>',                '</table>',                   1],=0A=
TBODY:  ['<table><tbody>',         '</tbody></table>',           2],=0A=
TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],=0A=
TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],=0A=
SELECT: ['<select>',               '</select>',                  1]=0A=
}=0A=
};=0A=
(function() {=0A=
Object.extend(this.tags, {=0A=
THEAD: this.tags.TBODY,=0A=
TFOOT: this.tags.TBODY,=0A=
TH:    this.tags.TD=0A=
});=0A=
}).call(Element._insertionTranslations);=0A=
Element.Methods.Simulated =3D {=0A=
hasAttribute: function(element, attribute) {=0A=
attribute =3D Element._attributeTranslations.has[attribute] || attribute;=0A=
var node =3D $(element).getAttributeNode(attribute);=0A=
return node && node.specified;=0A=
}=0A=
};=0A=
Element.Methods.ByTag =3D { };=0A=
Object.extend(Element, Element.Methods);=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=
Element.extend =3D (function() {=0A=
if (Prototype.BrowserFeatures.SpecificElementExtensions)=0A=
return Prototype.K;=0A=
var Methods =3D { }, ByTag =3D Element.Methods.ByTag;=0A=
var extend =3D Object.extend(function(element) {=0A=
if (!element || element._extendedByPrototype ||=0A=
element.nodeType !=3D 1 || element =3D=3D window) return element;=0A=
var methods =3D Object.clone(Methods),=0A=
tagName =3D element.tagName, property, value;=0A=
// extend methods for specific tags=0A=
if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);=0A=
for (property in methods) {=0A=
value =3D methods[property];=0A=
if (Object.isFunction(value) && !(property in element))=0A=
element[property] =3D value.methodize();=0A=
}=0A=
element._extendedByPrototype =3D Prototype.emptyFunction;=0A=
return element;=0A=
}, {=0A=
refresh: function() {=0A=
// extend methods for all tags (Safari doesn't need this)=0A=
if (!Prototype.BrowserFeatures.ElementExtensions) {=0A=
Object.extend(Methods, Element.Methods);=0A=
Object.extend(Methods, Element.Methods.Simulated);=0A=
}=0A=
}=0A=
});=0A=
extend.refresh();=0A=
return extend;=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=
Element.addMethods =3D function(methods) {=0A=
var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;=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=
if (arguments.length =3D=3D 2) {=0A=
var tagName =3D methods;=0A=
methods =3D arguments[1];=0A=
}=0A=
if (!tagName) Object.extend(Element.Methods, methods || { });=0A=
else {=0A=
if (Object.isArray(tagName)) tagName.each(extend);=0A=
else extend(tagName);=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=
function copy(methods, destination, onlyIfAbsent) {=0A=
onlyIfAbsent =3D onlyIfAbsent || false;=0A=
for (var property in methods) {=0A=
var value =3D methods[property];=0A=
if (!Object.isFunction(value)) continue;=0A=
if (!onlyIfAbsent || !(property in destination))=0A=
destination[property] =3D value.methodize();=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=
window[klass] =3D { };=0A=
window[klass].prototype =3D document.createElement(tagName).__proto__;=0A=
return window[klass];=0A=
}=0A=
if (F.ElementExtensions) {=0A=
copy(Element.Methods, HTMLElement.prototype);=0A=
copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A=
}=0A=
if (F.SpecificElementExtensions) {=0A=
for (var tag in Element.Methods.ByTag) {=0A=
var klass =3D findDOMClass(tag);=0A=
if (Object.isUndefined(klass)) continue;=0A=
copy(T[tag], klass.prototype);=0A=
}=0A=
}=0A=
Object.extend(Element, Element.Methods);=0A=
delete Element.ByTag;=0A=
if (Element.extend.refresh) Element.extend.refresh();=0A=
Element.cache =3D { };=0A=
};=0A=
document.viewport =3D {=0A=
getDimensions: function() {=0A=
var dimensions =3D { };=0A=
var B =3D Prototype.Browser;=0A=
$w('width height').each(function(d) {=0A=
var D =3D d.capitalize();=0A=
dimensions[d] =3D (B.WebKit && !document.evaluate) ? self['inner' + D] :=0A=
(B.Opera) ? document.body['client' + D] : =
document.documentElement['client' + D];=0A=
});=0A=
return dimensions;=0A=
},=0A=
getWidth: function() {=0A=
return this.getDimensions().width;=0A=
},=0A=
getHeight: function() {=0A=
return this.getDimensions().height;=0A=
},=0A=
getScrollOffsets: function() {=0A=
return Element._returnOffset(=0A=
window.pageXOffset || document.documentElement.scrollLeft || =
document.body.scrollLeft,=0A=
window.pageYOffset || document.documentElement.scrollTop || =
document.body.scrollTop);=0A=
}=0A=
};=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=
var Selector =3D Class.create({=0A=
initialize: function(expression) {=0A=
this.expression =3D expression.strip();=0A=
this.compileMatcher();=0A=
},=0A=
shouldUseXPath: function() {=0A=
if (!Prototype.BrowserFeatures.XPath) return false;=0A=
var e =3D this.expression;=0A=
// Safari 3 chokes on :*-of-type and :empty=0A=
if (Prototype.Browser.WebKit &&=0A=
(e.include("-of-type") || e.include(":empty")))=0A=
return false;=0A=
// XPath can't do namespaced attributes, nor can it read=0A=
// the "checked" property from DOM nodes=0A=
if ((/(\[[\w-]*?:|:checked)/).test(this.expression))=0A=
return false;=0A=
return true;=0A=
},=0A=
compileMatcher: function() {=0A=
if (this.shouldUseXPath())=0A=
return this.compileXPathMatcher();=0A=
var e =3D this.expression, ps =3D Selector.patterns, h =3D =
Selector.handlers,=0A=
c =3D Selector.criteria, le, p, m;=0A=
if (Selector._cache[e]) {=0A=
this.matcher =3D Selector._cache[e];=0A=
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=
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(Object.isFunction(c[i]) ? c[i](m) :=0A=
new Template(c[i]).evaluate(m));=0A=
e =3D e.replace(m[0], '');=0A=
break;=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=
compileXPathMatcher: function() {=0A=
var e =3D this.expression, ps =3D Selector.patterns,=0A=
x =3D Selector.xpath, le, m;=0A=
if (Selector._cache[e]) {=0A=
this.xpath =3D Selector._cache[e]; return;=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(Object.isFunction(x[i]) ? x[i](m) :=0A=
new Template(x[i]).evaluate(m));=0A=
e =3D e.replace(m[0], '');=0A=
break;=0A=
}=0A=
}=0A=
}=0A=
this.xpath =3D this.matcher.join('');=0A=
Selector._cache[this.expression] =3D this.xpath;=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=
match: function(element) {=0A=
this.tokens =3D [];=0A=
var e =3D this.expression, ps =3D Selector.patterns, as =3D =
Selector.assertions;=0A=
var le, p, m;=0A=
while (e && le !=3D=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=
// use the Selector.assertions methods unless the selector=0A=
// is too complex.=0A=
if (as[i]) {=0A=
this.tokens.push([i, Object.clone(m)]);=0A=
e =3D e.replace(m[0], '');=0A=
} else {=0A=
// reluctantly do a document-wide search=0A=
// and look for a match in the array=0A=
return this.findElements(document).include(element);=0A=
}=0A=
}=0A=
}=0A=
}=0A=
var match =3D true, name, matches;=0A=
for (var i =3D 0, token; token =3D this.tokens[i]; i++) {=0A=
name =3D token[0], matches =3D token[1];=0A=
if (!Selector.assertions[name](element, matches)) {=0A=
match =3D false; break;=0A=
}=0A=
}=0A=
return match;=0A=
},=0A=
toString: function() {=0A=
return this.expression;=0A=
},=0A=
inspect: function() {=0A=
return "#<Selector:" + this.expression.inspect() + ">";=0A=
}=0A=
});=0A=
Object.extend(Selector, {=0A=
_cache: { },=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: function(m) {=0A=
m[1] =3D m[1].toLowerCase();=0A=
return new Template("[@#{1}]").evaluate(m);=0A=
},=0A=
attr: function(m) {=0A=
m[1] =3D m[1].toLowerCase();=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 (Object.isFunction(h)) 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, v;=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 Object.isFunction(x[i]) ? 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=
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); 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); 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=
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=
// selectors follow=0A=
tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,=0A=
id:           /^#([\w\-\*]+)(\b|$)/,=0A=
className:    /^\.([\w\-\*]+)(\b|$)/,=0A=
pseudo:=0A=
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis=
)abled|not)(\((.*?)\))?(\b|$|(?=3D\s|[:+~>]))/,=0A=
attrPresence: /^\[([\w]+)\]/,=0A=
attr:         =
/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\4]*?)\4|([^'"][^=
\]]*?)))?\]/=0A=
},=0A=
// for Selector.match and Element#match=0A=
assertions: {=0A=
tagName: function(element, matches) {=0A=
return matches[1].toUpperCase() =3D=3D element.tagName.toUpperCase();=0A=
},=0A=
className: function(element, matches) {=0A=
return Element.hasClassName(element, matches[1]);=0A=
},=0A=
id: function(element, matches) {=0A=
return element.id =3D=3D=3D matches[1];=0A=
},=0A=
attrPresence: function(element, matches) {=0A=
return Element.hasAttribute(element, matches[1]);=0A=
},=0A=
attr: function(element, matches) {=0A=
var nodeValue =3D Element.readAttribute(element, matches[1]);=0A=
return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] =
|| matches[6]);=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=
// marks an array of nodes for counting=0A=
mark: function(nodes) {=0A=
var _true =3D Prototype.emptyFunction;=0A=
for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
node._countedByPrototype =3D _true;=0A=
return nodes;=0A=
},=0A=
unmark: function(nodes) {=0A=
for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
node._countedByPrototype =3D undefined;=0A=
return nodes;=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._countedByPrototype =3D Prototype.emptyFunction;=0A=
if (reverse) {=0A=
for (var nodes =3D parentNode.childNodes, i =3D nodes.length - 1, j =3D =
1; i >=3D 0; i--) {=0A=
var node =3D nodes[i];=0A=
if (node.nodeType =3D=3D 1 && (!ofType || node._countedByPrototype)) =
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._countedByPrototype)) =
node.nodeIndex =3D j++;=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])._countedByPrototype) {=0A=
n._countedByPrototype =3D Prototype.emptyFunction;=0A=
results.push(Element.extend(n));=0A=
}=0A=
return Selector.handlers.unmark(results);=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=
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, 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=
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=
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=
nextElementSibling: function(node) {=0A=
while (node =3D node.nextSibling)=0A=
if (node.nodeType =3D=3D 1) return node;=0A=
return null;=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=
// TOKEN FUNCTIONS=0A=
tagName: function(nodes, root, tagName, combinator) {=0A=
var uTagName =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=3D uTagName) results.push(node);=0A=
return results;=0A=
} else return root.getElementsByTagName(tagName);=0A=
},=0A=
id: function(nodes, root, id, combinator) {=0A=
var targetNode =3D $(id), h =3D Selector.handlers;=0A=
if (!targetNode) return [];=0A=
if (!nodes && root =3D=3D document) return [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=
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=
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=
attrPresence: function(nodes, root, attr, combinator) {=0A=
if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
if (nodes && combinator) nodes =3D this[combinator](nodes);=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=
attr: function(nodes, root, attr, value, operator, combinator) {=0A=
if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
if (nodes && combinator) nodes =3D this[combinator](nodes);=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=
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=
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=
// 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=
// 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._countedByPrototype) {=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=
'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=
'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._countedByPrototype) results.push(node);=0A=
h.unmark(exclusions);=0A=
return results;=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=
'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=
'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=
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=
split: function(expression) {=0A=
var expressions =3D [];=0A=
expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {=0A=
expressions.push(m[1].strip());=0A=
});=0A=
return expressions;=0A=
},=0A=
matchElements: function(elements, expression) {=0A=
var matches =3D $$(expression), 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._countedByPrototype) results.push(element);=0A=
h.unmark(matches);=0A=
return results;=0A=
},=0A=
findElement: function(elements, expression, index) {=0A=
if (Object.isNumber(expression)) {=0A=
index =3D expression; expression =3D false;=0A=
}=0A=
return Selector.matchElements(elements, expression || '*')[index || 0];=0A=
},=0A=
findChildElements: function(element, expressions) {=0A=
expressions =3D Selector.split(expressions.join(','));=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=
if (Prototype.Browser.IE) {=0A=
Object.extend(Selector.handlers, {=0A=
// IE returns comment nodes on getElementsByTagName("*").=0A=
// Filter them out.=0A=
concat: function(a, b) {=0A=
for (var i =3D 0, node; node =3D b[i]; i++)=0A=
if (node.tagName !=3D=3D "!") a.push(node);=0A=
return a;=0A=
},=0A=
// IE improperly serializes _countedByPrototype in (inner|outer)HTML.=0A=
unmark: function(nodes) {=0A=
for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
node.removeAttribute('_countedByPrototype');=0A=
return nodes;=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=
serializeElements: function(elements, options) {=0A=
if (typeof options !=3D 'object') options =3D { hash: !!options };=0A=
else if (Object.isUndefined(options.hash)) options.hash =3D true;=0A=
var key, value, submitted =3D false, submit =3D options.submit;=0A=
var data =3D elements.inject({ }, function(result, element) {=0A=
if (!element.disabled && element.name) {=0A=
key =3D element.name; value =3D $(element).getValue();=0A=
if (value !=3D null && (element.type !=3D 'submit' || (!submitted &&=0A=
submit !=3D=3D false && (!submit || key =3D=3D submit) && (submitted =3D =
true)))) {=0A=
if (key in result) {=0A=
// a key is already present; construct an array of values=0A=
if (!Object.isArray(result[key])) result[key] =3D [result[key]];=0A=
result[key].push(value);=0A=
}=0A=
else result[key] =3D value;=0A=
}=0A=
}=0A=
return result;=0A=
});=0A=
return options.hash ? data : Object.toQueryString(data);=0A=
}=0A=
};=0A=
Form.Methods =3D {=0A=
serialize: function(form, options) {=0A=
return Form.serializeElements(Form.getElements(form), options);=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=
getInputs: function(form, typeName, name) {=0A=
form =3D $(form);=0A=
var inputs =3D form.getElementsByTagName('input');=0A=
if (!typeName && !name) return $A(inputs).map(Element.extend);=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=
return matchingInputs;=0A=
},=0A=
disable: function(form) {=0A=
form =3D $(form);=0A=
Form.getElements(form).invoke('disable');=0A=
return form;=0A=
},=0A=
enable: function(form) {=0A=
form =3D $(form);=0A=
Form.getElements(form).invoke('enable');=0A=
return form;=0A=
},=0A=
findFirstElement: function(form) {=0A=
var elements =3D $(form).getElements().findAll(function(element) {=0A=
return 'hidden' !=3D element.type && !element.disabled;=0A=
});=0A=
var firstByIndex =3D elements.findAll(function(element) {=0A=
return element.hasAttribute('tabIndex') && element.tabIndex >=3D 0;=0A=
}).sortBy(function(element) { return element.tabIndex }).first();=0A=
return firstByIndex ? firstByIndex : elements.find(function(element) {=0A=
return ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
});=0A=
},=0A=
focusFirstElement: function(form) {=0A=
form =3D $(form);=0A=
form.findFirstElement().activate();=0A=
return form;=0A=
},=0A=
request: function(form, options) {=0A=
form =3D $(form), options =3D Object.clone(options || { });=0A=
var params =3D options.parameters, action =3D =
form.readAttribute('action') || '';=0A=
if (action.blank()) action =3D window.location.href;=0A=
options.parameters =3D form.serialize(true);=0A=
if (params) {=0A=
if (Object.isString(params)) params =3D params.toQueryParams();=0A=
Object.extend(options.parameters, params);=0A=
}=0A=
if (form.hasAttribute('method') && !options.method)=0A=
options.method =3D form.method;=0A=
return new Ajax.Request(action, options);=0A=
}=0A=
};=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
Form.Element =3D {=0A=
focus: function(element) {=0A=
$(element).focus();=0A=
return element;=0A=
},=0A=
select: function(element) {=0A=
$(element).select();=0A=
return element;=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 Object.toQueryString(pair);=0A=
}=0A=
}=0A=
return '';=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=
setValue: function(element, value) {=0A=
element =3D $(element);=0A=
var method =3D element.tagName.toLowerCase();=0A=
Form.Element.Serializers[method](element, value);=0A=
return element;=0A=
},=0A=
clear: function(element) {=0A=
$(element).value =3D '';=0A=
return element;=0A=
},=0A=
present: function(element) {=0A=
return $(element).value !=3D '';=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=
disable: function(element) {=0A=
element =3D $(element);=0A=
element.blur();=0A=
element.disabled =3D true;=0A=
return element;=0A=
},=0A=
enable: function(element) {=0A=
element =3D $(element);=0A=
element.disabled =3D false;=0A=
return element;=0A=
}=0A=
};=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
var Field =3D Form.Element;=0A=
var $F =3D Form.Element.Methods.getValue;=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
Form.Element.Serializers =3D {=0A=
input: function(element, value) {=0A=
switch (element.type.toLowerCase()) {=0A=
case 'checkbox':=0A=
case 'radio':=0A=
return Form.Element.Serializers.inputSelector(element, value);=0A=
default:=0A=
return Form.Element.Serializers.textarea(element, value);=0A=
}=0A=
},=0A=
inputSelector: function(element, value) {=0A=
if (Object.isUndefined(value)) return element.checked ? element.value : =
null;=0A=
else element.checked =3D !!value;=0A=
},=0A=
textarea: function(element, value) {=0A=
if (Object.isUndefined(value)) return element.value;=0A=
else element.value =3D value;=0A=
},=0A=
select: function(element, index) {=0A=
if (Object.isUndefined(index))=0A=
return this[element.type =3D=3D 'select-one' ?=0A=
'selectOne' : 'selectMany'](element);=0A=
else {=0A=
var opt, value, single =3D !Object.isArray(index);=0A=
for (var i =3D 0, length =3D element.length; i < length; i++) {=0A=
opt =3D element.options[i];=0A=
value =3D this.optionValue(opt);=0A=
if (single) {=0A=
if (value =3D=3D index) {=0A=
opt.selected =3D true;=0A=
return;=0A=
}=0A=
}=0A=
else opt.selected =3D index.include(value);=0A=
}=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=
selectMany: function(element) {=0A=
var values, length =3D element.length;=0A=
if (!length) return null;=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=
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=
Abstract.TimedObserver =3D Class.create(PeriodicalExecuter, {=0A=
initialize: function($super, element, frequency, callback) {=0A=
$super(callback, frequency);=0A=
this.element   =3D $(element);=0A=
this.lastValue =3D this.getValue();=0A=
},=0A=
execute: function() {=0A=
var value =3D this.getValue();=0A=
if (Object.isString(this.lastValue) && Object.isString(value) ?=0A=
this.lastValue !=3D value : String(this.lastValue) !=3D String(value)) {=0A=
this.callback(this.element, value);=0A=
this.lastValue =3D value;=0A=
}=0A=
}=0A=
});=0A=
Form.Element.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
getValue: function() {=0A=
return Form.Element.getValue(this.element);=0A=
}=0A=
});=0A=
Form.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
getValue: function() {=0A=
return Form.serialize(this.element);=0A=
}=0A=
});=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
Abstract.EventObserver =3D Class.create({=0A=
initialize: function(element, callback) {=0A=
this.element  =3D $(element);=0A=
this.callback =3D callback;=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=
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=
registerFormCallbacks: function() {=0A=
Form.getElements(this.element).each(this.registerCallback, this);=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=
Form.Element.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
getValue: function() {=0A=
return Form.Element.getValue(this.element);=0A=
}=0A=
});=0A=
Form.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
getValue: function() {=0A=
return Form.serialize(this.element);=0A=
}=0A=
});=0A=
if (!window.Event) var Event =3D { };=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=
KEY_INSERT:   45,=0A=
cache: { },=0A=
relatedTarget: function(event) {=0A=
var element;=0A=
switch(event.type) {=0A=
case 'mouseover': element =3D event.fromElement; break;=0A=
case 'mouseout':  element =3D event.toElement;   break;=0A=
default: return null;=0A=
}=0A=
return Element.extend(element);=0A=
}=0A=
});=0A=
Event.Methods =3D (function() {=0A=
var isButton;=0A=
if (Prototype.Browser.IE) {=0A=
var buttonMap =3D { 0: 1, 1: 4, 2: 2 };=0A=
isButton =3D function(event, code) {=0A=
return event.button =3D=3D buttonMap[code];=0A=
};=0A=
} else if (Prototype.Browser.WebKit) {=0A=
isButton =3D function(event, code) {=0A=
switch (code) {=0A=
case 0: return event.which =3D=3D 1 && !event.metaKey;=0A=
case 1: return event.which =3D=3D 1 && event.metaKey;=0A=
default: return false;=0A=
}=0A=
};=0A=
} else {=0A=
isButton =3D function(event, code) {=0A=
return event.which ? (event.which =3D=3D=3D code + 1) : (event.button =
=3D=3D=3D code);=0A=
};=0A=
}=0A=
return {=0A=
isLeftClick:   function(event) { return isButton(event, 0) },=0A=
isMiddleClick: function(event) { return isButton(event, 1) },=0A=
isRightClick:  function(event) { return isButton(event, 2) },=0A=
element: function(event) {=0A=
var node =3D Event.extend(event).target;=0A=
return Element.extend(node.nodeType =3D=3D Node.TEXT_NODE ? =
node.parentNode : node);=0A=
},=0A=
findElement: function(event, expression) {=0A=
var element =3D Event.element(event);=0A=
if (!expression) return element;=0A=
var elements =3D [element].concat(element.ancestors());=0A=
return Selector.findElement(elements, expression, 0);=0A=
},=0A=
pointer: function(event) {=0A=
return {=0A=
x: event.pageX || (event.clientX +=0A=
(document.documentElement.scrollLeft || document.body.scrollLeft)),=0A=
y: event.pageY || (event.clientY +=0A=
(document.documentElement.scrollTop || document.body.scrollTop))=0A=
};=0A=
},=0A=
pointerX: function(event) { return Event.pointer(event).x },=0A=
pointerY: function(event) { return Event.pointer(event).y },=0A=
stop: function(event) {=0A=
Event.extend(event);=0A=
event.preventDefault();=0A=
event.stopPropagation();=0A=
event.stopped =3D true;=0A=
}=0A=
};=0A=
})();=0A=
Event.extend =3D (function() {=0A=
var methods =3D Object.keys(Event.Methods).inject({ }, function(m, name) =
{=0A=
m[name] =3D Event.Methods[name].methodize();=0A=
return m;=0A=
});=0A=
if (Prototype.Browser.IE) {=0A=
Object.extend(methods, {=0A=
stopPropagation: function() { this.cancelBubble =3D true },=0A=
preventDefault:  function() { this.returnValue =3D false },=0A=
inspect: function() { return "[object Event]" }=0A=
});=0A=
return function(event) {=0A=
if (!event) return false;=0A=
if (event._extendedByPrototype) return event;=0A=
event._extendedByPrototype =3D Prototype.emptyFunction;=0A=
var pointer =3D Event.pointer(event);=0A=
Object.extend(event, {=0A=
target: event.srcElement,=0A=
relatedTarget: Event.relatedTarget(event),=0A=
pageX:  pointer.x,=0A=
pageY:  pointer.y=0A=
});=0A=
return Object.extend(event, methods);=0A=
};=0A=
} else {=0A=
Event.prototype =3D Event.prototype || =
document.createEvent("HTMLEvents").__proto__;=0A=
Object.extend(Event.prototype, methods);=0A=
return Prototype.K;=0A=
}=0A=
})();=0A=
Object.extend(Event, (function() {=0A=
var cache =3D Event.cache;=0A=
function getEventID(element) {=0A=
if (element._prototypeEventID) return element._prototypeEventID[0];=0A=
arguments.callee.id =3D arguments.callee.id || 1;=0A=
return element._prototypeEventID =3D [++arguments.callee.id];=0A=
}=0A=
function getDOMEventName(eventName) {=0A=
if (eventName && eventName.include(':')) return "dataavailable";=0A=
return eventName;=0A=
}=0A=
function getCacheForID(id) {=0A=
return cache[id] =3D cache[id] || { };=0A=
}=0A=
function getWrappersForEventName(id, eventName) {=0A=
var c =3D getCacheForID(id);=0A=
return c[eventName] =3D c[eventName] || [];=0A=
}=0A=
function createWrapper(element, eventName, handler) {=0A=
var id =3D getEventID(element);=0A=
var c =3D getWrappersForEventName(id, eventName);=0A=
if (c.pluck("handler").include(handler)) return false;=0A=
var wrapper =3D function(event) {=0A=
if (!Event || !Event.extend ||=0A=
(event.eventName && event.eventName !=3D eventName))=0A=
return false;=0A=
Event.extend(event);=0A=
handler.call(element, event);=0A=
};=0A=
wrapper.handler =3D handler;=0A=
c.push(wrapper);=0A=
return wrapper;=0A=
}=0A=
function findWrapper(id, eventName, handler) {=0A=
var c =3D getWrappersForEventName(id, eventName);=0A=
return c.find(function(wrapper) { return wrapper.handler =3D=3D handler =
});=0A=
}=0A=
function destroyWrapper(id, eventName, handler) {=0A=
var c =3D getCacheForID(id);=0A=
if (!c[eventName]) return false;=0A=
c[eventName] =3D c[eventName].without(findWrapper(id, eventName, =
handler));=0A=
}=0A=
function destroyCache() {=0A=
for (var id in cache)=0A=
for (var eventName in cache[id])=0A=
cache[id][eventName] =3D null;=0A=
}=0A=
if (window.attachEvent) {=0A=
window.attachEvent("onunload", destroyCache);=0A=
}=0A=
return {=0A=
observe: function(element, eventName, handler) {=0A=
element =3D $(element);=0A=
var name =3D getDOMEventName(eventName);=0A=
var wrapper =3D createWrapper(element, eventName, handler);=0A=
if (!wrapper) return element;=0A=
if (element.addEventListener) {=0A=
element.addEventListener(name, wrapper, false);=0A=
} else {=0A=
element.attachEvent("on" + name, wrapper);=0A=
}=0A=
return element;=0A=
},=0A=
stopObserving: function(element, eventName, handler) {=0A=
element =3D $(element);=0A=
var id =3D getEventID(element), name =3D getDOMEventName(eventName);=0A=
if (!handler && eventName) {=0A=
getWrappersForEventName(id, eventName).each(function(wrapper) {=0A=
element.stopObserving(eventName, wrapper.handler);=0A=
});=0A=
return element;=0A=
} else if (!eventName) {=0A=
Object.keys(getCacheForID(id)).each(function(eventName) {=0A=
element.stopObserving(eventName);=0A=
});=0A=
return element;=0A=
}=0A=
var wrapper =3D findWrapper(id, eventName, handler);=0A=
if (!wrapper) return element;=0A=
if (element.removeEventListener) {=0A=
element.removeEventListener(name, wrapper, false);=0A=
} else {=0A=
element.detachEvent("on" + name, wrapper);=0A=
}=0A=
destroyWrapper(id, eventName, handler);=0A=
return element;=0A=
},=0A=
fire: function(element, eventName, memo) {=0A=
element =3D $(element);=0A=
if (element =3D=3D document && document.createEvent && =
!element.dispatchEvent)=0A=
element =3D document.documentElement;=0A=
var event;=0A=
if (document.createEvent) {=0A=
event =3D document.createEvent("HTMLEvents");=0A=
event.initEvent("dataavailable", true, true);=0A=
} else {=0A=
event =3D document.createEventObject();=0A=
event.eventType =3D "ondataavailable";=0A=
}=0A=
event.eventName =3D eventName;=0A=
event.memo =3D memo || { };=0A=
if (document.createEvent) {=0A=
element.dispatchEvent(event);=0A=
} else {=0A=
element.fireEvent(event.eventType, event);=0A=
}=0A=
return Event.extend(event);=0A=
}=0A=
};=0A=
})());=0A=
Object.extend(Event, Event.Methods);=0A=
Element.addMethods({=0A=
fire:          Event.fire,=0A=
observe:       Event.observe,=0A=
stopObserving: Event.stopObserving=0A=
});=0A=
Object.extend(document, {=0A=
fire:          Element.Methods.fire.methodize(),=0A=
observe:       Element.Methods.observe.methodize(),=0A=
stopObserving: Element.Methods.stopObserving.methodize(),=0A=
loaded:        false=0A=
});=0A=
(function() {=0A=
/* Support for the DOMContentLoaded event is based on work by Dan Webb,=0A=
Matthias Miller, Dean Edwards and John Resig. */=0A=
var timer;=0A=
function fireContentLoadedEvent() {=0A=
if (document.loaded) return;=0A=
if (timer) window.clearInterval(timer);=0A=
document.fire("dom:loaded");=0A=
document.loaded =3D true;=0A=
}=0A=
if (document.addEventListener) {=0A=
if (Prototype.Browser.WebKit) {=0A=
timer =3D window.setInterval(function() {=0A=
if (/loaded|complete/.test(document.readyState))=0A=
fireContentLoadedEvent();=0A=
}, 0);=0A=
Event.observe(window, "load", fireContentLoadedEvent);=0A=
} else {=0A=
document.addEventListener("DOMContentLoaded",=0A=
fireContentLoadedEvent, false);=0A=
}=0A=
} else {=0A=
document.write("<script id=3D__onDOMContentLoaded defer =
src=3D//:><\/script>");=0A=
$("__onDOMContentLoaded").onreadystatechange =3D function() {=0A=
if (this.readyState =3D=3D "complete") {=0A=
this.onreadystatechange =3D null;=0A=
fireContentLoadedEvent();=0A=
}=0A=
};=0A=
}=0A=
})();=0A=
/*------------------------------- DEPRECATED =
-------------------------------*/=0A=
Hash.toQueryString =3D Object.toQueryString;=0A=
var Toggle =3D { display: Element.toggle };=0A=
Element.Methods.childOf =3D Element.Methods.descendantOf;=0A=
var Insertion =3D {=0A=
Before: function(element, content) {=0A=
return Element.insert(element, {before:content});=0A=
},=0A=
Top: function(element, content) {=0A=
return Element.insert(element, {top:content});=0A=
},=0A=
Bottom: function(element, content) {=0A=
return Element.insert(element, {bottom:content});=0A=
},=0A=
After: function(element, content) {=0A=
return Element.insert(element, {after:content});=0A=
}=0A=
};=0A=
var $continue =3D new Error('"throw $continue" is deprecated, use =
"return" instead');=0A=
// This should be moved to script.aculo.us; notice the deprecated methods=0A=
// further below, that map to the newer Element methods.=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=
// 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=
// 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 Element.cumulativeOffset(element);=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=
withinIncludingScrolloffsets: function(element, x, y) {=0A=
var offsetcache =3D Element.cumulativeScrollOffset(element);=0A=
this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
this.offset =3D Element.cumulativeOffset(element);=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=
// 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=
// Deprecation layer -- use newer Element methods now (1.5.2).=0A=
cumulativeOffset: Element.Methods.cumulativeOffset,=0A=
positionedOffset: Element.Methods.positionedOffset,=0A=
absolutize: function(element) {=0A=
Position.prepare();=0A=
return Element.absolutize(element);=0A=
},=0A=
relativize: function(element) {=0A=
Position.prepare();=0A=
return Element.relativize(element);=0A=
},=0A=
realOffset: Element.Methods.cumulativeScrollOffset,=0A=
offsetParent: Element.Methods.getOffsetParent,=0A=
page: Element.Methods.viewportOffset,=0A=
clone: function(source, target, options) {=0A=
options =3D options || { };=0A=
return Element.clonePosition(target, source, options);=0A=
}=0A=
};=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
if (!document.getElementsByClassName) document.getElementsByClassName =
=3D function(instanceMethods){=0A=
function iter(name) {=0A=
return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + =
name + " ')]";=0A=
}=0A=
instanceMethods.getElementsByClassName =3D =
Prototype.BrowserFeatures.XPath ?=0A=
function(element, className) {=0A=
className =3D className.toString().strip();=0A=
var cond =3D /\s/.test(className) ? $w(className).map(iter).join('') : =
iter(className);=0A=
return cond ? document._getElementsByXPath('.//*' + cond, element) : [];=0A=
} : function(element, className) {=0A=
className =3D className.toString().strip();=0A=
var elements =3D [], classNames =3D (/\s/.test(className) ? =
$w(className) : null);=0A=
if (!classNames && !className) return elements;=0A=
var nodes =3D $(element).getElementsByTagName('*');=0A=
className =3D ' ' + className + ' ';=0A=
for (var i =3D 0, child, cn; child =3D nodes[i]; i++) {=0A=
if (child.className && (cn =3D ' ' + child.className + ' ') && =
(cn.include(className) ||=0A=
(classNames && classNames.all(function(name) {=0A=
return !name.toString().blank() && cn.include(' ' + name + ' ');=0A=
}))))=0A=
elements.push(Element.extend(child));=0A=
}=0A=
return elements;=0A=
};=0A=
return function(className, parentElement) {=0A=
return $(parentElement || =
document.body).getElementsByClassName(className);=0A=
};=0A=
}(Element.Methods);=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
initialize: function(element) {=0A=
this.element =3D $(element);=0A=
},=0A=
_each: function(iterator) {=0A=
this.element.className.split(/\s+/).select(function(name) {=0A=
return name.length > 0;=0A=
})._each(iterator);=0A=
},=0A=
set: function(className) {=0A=
this.element.className =3D className;=0A=
},=0A=
add: function(classNameToAdd) {=0A=
if (this.include(classNameToAdd)) return;=0A=
this.set($A(this).concat(classNameToAdd).join(' '));=0A=
},=0A=
remove: function(classNameToRemove) {=0A=
if (!this.include(classNameToRemove)) return;=0A=
this.set($A(this).without(classNameToRemove).join(' '));=0A=
},=0A=
toString: function() {=0A=
return $A(this).join(' ');=0A=
}=0A=
};=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
Element.addMethods();=0A=
/* js/lib/cookies.js */=0A=
// http://kourge.net/projects/cookie-js=0A=
var Cookie =3D {=0A=
version: '0.7',=0A=
cookies: {},=0A=
_each: function(iterator) {=0A=
$H(this.cookies).each(iterator);=0A=
},=0A=
getAll: function() {=0A=
this.cookies =3D {};=0A=
$A(document.cookie.split('; ')).each(function(cookie) {=0A=
var seperator =3D cookie.indexOf('=3D');=0A=
this.cookies[cookie.substring(0, seperator)] =3D =0A=
unescape(cookie.substring(seperator + 1, cookie.length));=0A=
}.bind(this));=0A=
return this.cookies;=0A=
},=0A=
read: function() {=0A=
var cookies =3D $A(arguments), results =3D [];=0A=
this.getAll();=0A=
cookies.each(function(name) {=0A=
if (this.cookies[name]) results.push(this.cookies[name]);=0A=
else results.push(null);=0A=
}.bind(this));=0A=
return results.length > 1 ? results : results[0];=0A=
},=0A=
write: function(cookies, options) {=0A=
if (cookies.constructor =3D=3D Object && cookies.name) cookies =3D =
[cookies];=0A=
if (cookies.constructor =3D=3D Array) {=0A=
$A(cookies).each(function(cookie) {=0A=
this._write(cookie.name, cookie.value, cookie.expires,=0A=
cookie.path, cookie.domain);=0A=
}.bind(this));=0A=
}else {=0A=
options =3D options || {expires: false, path: '', domain: ''};=0A=
for (name in cookies){=0A=
this._write(name, cookies[name],=0A=
options.expires, options.path, options.domain);=0A=
}=0A=
}=0A=
},=0A=
_write: function(name, value, expires, path, domain) {=0A=
if (name.indexOf('=3D') !=3D -1) return;=0A=
var cookieString =3D name + '=3D' + escape(value);=0A=
if (expires) cookieString +=3D '; expires=3D' + expires.toGMTString();=0A=
if (path) cookieString +=3D '; path=3D' + path;=0A=
if (domain) cookieString +=3D '; domain=3D' + domain;=0A=
document.cookie =3D cookieString;=0A=
},=0A=
erase: function(cookies) {=0A=
var cookiesToErase =3D {};=0A=
$A(arguments).each(function(cookie) {=0A=
cookiesToErase[cookie] =3D '';=0A=
});=0A=
this.write(cookiesToErase, {expires: (new Date((new Date()).getTime() - =
1e11))});=0A=
this.getAll();=0A=
},=0A=
eraseAll: function() {=0A=
this.erase.apply(this, $H(this.getAll()).keys());=0A=
}=0A=
};=0A=
Object.extend(Cookie, {=0A=
get: Cookie.read,=0A=
set: Cookie.write,=0A=
add: Cookie.read,=0A=
remove: Cookie.erase,=0A=
removeAll: Cookie.eraseAll,=0A=
wipe: Cookie.erase,=0A=
wipeAll: Cookie.eraseAll,=0A=
destroy: Cookie.erase,=0A=
destroyAll: Cookie.eraseAll=0A=
});=0A=
/* js/lib/swfobject.js */=0A=
/**=0A=
* SWFObject v1.5: Flash Player detection and embed - =
http://blog.deconcept.com/swfobject/=0A=
*=0A=
* SWFObject is (c) 2007 Geoff Stearns and is released under the MIT =
License:=0A=
* http://www.opensource.org/licenses/mit-license.php=0A=
*=0A=
*/=0A=
if(typeof deconcept=3D=3D"undefined"){var deconcept=3Dnew =
Object();}if(typeof =
deconcept.util=3D=3D"undefined"){deconcept.util=3Dnew =
Object();}if(typeof =
deconcept.SWFObjectUtil=3D=3D"undefined"){deconcept.SWFObjectUtil=3Dnew =
Object();}deconcept.SWFObject=3Dfunction(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!=
document.getElementById){return;}this.DETECT_KEY=3D_a?_a:"detectflash";th=
is.skipDetect=3Ddeconcept.util.getRequestParameter(this.DETECT_KEY);this.=
params=3Dnew Object();this.variables=3Dnew =
Object();this.attributes=3Dnew =
Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id"=
,id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height=
",h);}if(_5){this.setAttribute("version",new =
deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=3Dd=
econcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&=
&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=3Dtrue;}if(c=
){this.addParam("bgcolor",c);}var =
q=3D_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpress=
Install",false);this.setAttribute("doExpressInstall",false);var =
_c=3D(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.s=
etAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);=
}};deconcept.SWFObject.prototype=3D{useExpressInstall:function(_d){this.x=
iSWFPath=3D!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInsta=
ll",true);},setAttribute:function(_e,_f){this.attributes[_e]=3D_f;},getAt=
tribute:function(_10){return =
this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=3D_12;=
},getParams:function(){return =
this.params;},addVariable:function(_13,_14){this.variables[_13]=3D_14;},g=
etVariable:function(_15){return =
this.variables[_15];},getVariables:function(){return =
this.variables;},getVariablePairs:function(){var _16=3Dnew Array();var =
key;var _18=3Dthis.getVariables();for(key in =
_18){_16[_16.length]=3Dkey+"=3D"+_18[key];}return =
_16;},getSWFHTML:function(){var =
_19=3D"";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.l=
ength){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplay=
erType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19=3D"<embed =
type=3D\"application/x-shockwave-flash\" =
src=3D\""+this.getAttribute("swf")+"\" =
width=3D\""+this.getAttribute("width")+"\" =
height=3D\""+this.getAttribute("height")+"\" =
style=3D\""+this.getAttribute("style")+"\"";_19+=3D" =
id=3D\""+this.getAttribute("id")+"\" =
name=3D\""+this.getAttribute("id")+"\" ";var =
_1a=3Dthis.getParams();for(var key in =
_1a){_19+=3D[key]+"=3D\""+_1a[key]+"\" ";}var =
_1c=3Dthis.getVariablePairs().join("&");if(_1c.length>0){_19+=3D"flashvar=
s=3D\""+_1c+"\"";}_19+=3D"/>";}else{if(this.getAttribute("doExpressInstal=
l")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",t=
his.xiSWFPath);}_19=3D"<object id=3D\""+this.getAttribute("id")+"\" =
classid=3D\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" =
width=3D\""+this.getAttribute("width")+"\" =
height=3D\""+this.getAttribute("height")+"\" =
style=3D\""+this.getAttribute("style")+"\">";_19+=3D"<param =
name=3D\"movie\" value=3D\""+this.getAttribute("swf")+"\" />";var =
_1d=3Dthis.getParams();for(var key in _1d){_19+=3D"<param =
name=3D\""+key+"\" value=3D\""+_1d[key]+"\" />";}var =
_1f=3Dthis.getVariablePairs().join("&");if(_1f.length>0){_19+=3D"<param =
name=3D\"flashvars\" value=3D\""+_1f+"\" />";}_19+=3D"</object>";}return =
_19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var =
_21=3Dnew =
deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21=
)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.=
setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",es=
cape(this.getAttribute("xiRedirectUrl")));document.title=3Ddocument.title=
.slice(0,47)+" - Flash Player =
Installation";this.addVariable("MMdoctitle",document.title);}}if(this.ski=
pDetect||this.getAttribute("doExpressInstall")||this.installedVer.version=
IsValid(this.getAttribute("version"))){var n=3D(typeof =
_20=3D=3D"string")?document.getElementById(_20):_20;n.innerHTML=3Dthis.ge=
tSWFHTML();return =
true;}else{if(this.getAttribute("redirectUrl")!=3D""){document.location.r=
eplace(this.getAttribute("redirectUrl"));}}return =
false;}};deconcept.SWFObjectUtil.getPlayerVersion=3Dfunction(){var =
_23=3Dnew =
deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeType=
s.length){var x=3Dnavigator.plugins["Shockwave =
Flash"];if(x&&x.description){_23=3Dnew =
deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replac=
e(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&nav=
igator.userAgent.indexOf("Windows CE")>=3D0){var axo=3D1;var =
_26=3D3;while(axo){try{_26++;axo=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=3Dnew =
deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=3Dnull;}}}else{try{var =
axo=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var =
axo=3Dnew ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=3Dnew =
deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess=3D"always";}catch=
(e){if(_23.major=3D=3D6){return _23;}}try{axo=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=3Dnull=
){_23=3Dnew deconcept.PlayerVersion(axo.GetVariable("$version").split(" =
")[1].split(","));}}}return =
_23;};deconcept.PlayerVersion=3Dfunction(_29){this.major=3D_29[0]!=3Dnull=
?parseInt(_29[0]):0;this.minor=3D_29[1]!=3Dnull?parseInt(_29[1]):0;this.r=
ev=3D_29[2]!=3Dnull?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototyp=
e.versionIsValid=3Dfunction(fv){if(this.major<fv.major){return =
false;}if(this.major>fv.major){return =
true;}if(this.minor<fv.minor){return =
false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return =
false;}return =
true;};deconcept.util=3D{getRequestParameter:function(_2b){var =
q=3Ddocument.location.search||document.location.hash;if(_2b=3D=3Dnull){re=
turn q;}if(q){var _2d=3Dq.substring(1).split("&");for(var =
i=3D0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("=3D"))=3D=3D=
_2b){return _2d[i].substring((_2d[i].indexOf("=3D")+1));}}}return =
"";}};deconcept.SWFObjectUtil.cleanupSWFs=3Dfunction(){var =
_2f=3Ddocument.getElementsByTagName("OBJECT");for(var =
i=3D_2f.length-1;i>=3D0;i--){_2f[i].style.display=3D"none";for(var x in =
_2f[i]){if(typeof =
_2f[i][x]=3D=3D"function"){_2f[i][x]=3Dfunction(){};}}}};if(deconcept.SWF=
Object.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.pre=
pUnload=3Dfunction(){__flash_unloadHandler=3Dfunction(){};__flash_savedUn=
loadHandler=3Dfunction(){};window.attachEvent("onunload",deconcept.SWFObj=
ectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFO=
bjectUtil.prepUnload);deconcept.unloadSet=3Dtrue;}}if(!document.getElemen=
tById&&document.all){document.getElementById=3Dfunction(id){return =
document.all[id];};}var =
getQueryParamValue=3Ddeconcept.util.getRequestParameter;var =
FlashObject=3Ddeconcept.SWFObject;var SWFObject=3Ddeconcept.SWFObject;=0A=
/* js/lib/builder.js */=0A=
// script.aculo.us builder.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
var Builder =3D {=0A=
NODEMAP: {=0A=
AREA: 'map',=0A=
CAPTION: 'table',=0A=
COL: 'table',=0A=
COLGROUP: 'table',=0A=
LEGEND: 'fieldset',=0A=
OPTGROUP: 'select',=0A=
OPTION: 'select',=0A=
PARAM: 'object',=0A=
TBODY: 'table',=0A=
TD: 'table',=0A=
TFOOT: 'table',=0A=
TH: 'table',=0A=
THEAD: 'table',=0A=
TR: 'table'=0A=
},=0A=
// note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently =
broken,=0A=
//       due to a Firefox bug=0A=
node: function(elementName) {=0A=
elementName =3D elementName.toUpperCase();=0A=
// try innerHTML approach=0A=
var parentTag =3D this.NODEMAP[elementName] || 'div';=0A=
var parentElement =3D document.createElement(parentTag);=0A=
try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707=0A=
parentElement.innerHTML =3D "<" + elementName + "></" + elementName + =
">";=0A=
} catch(e) {}=0A=
var element =3D parentElement.firstChild || null;=0A=
// see if browser added wrapping tags=0A=
if(element && (element.tagName.toUpperCase() !=3D elementName))=0A=
element =3D element.getElementsByTagName(elementName)[0];=0A=
// fallback to createElement approach=0A=
if(!element) element =3D document.createElement(elementName);=0A=
// abort if nothing could be created=0A=
if(!element) return;=0A=
// attributes (or text)=0A=
if(arguments[1])=0A=
if(this._isStringOrNumber(arguments[1]) ||=0A=
(arguments[1] instanceof Array) ||=0A=
arguments[1].tagName) {=0A=
this._children(element, arguments[1]);=0A=
} else {=0A=
var attrs =3D this._attributes(arguments[1]);=0A=
if(attrs.length) {=0A=
try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707=0A=
parentElement.innerHTML =3D "<" +elementName + " " +=0A=
attrs + "></" + elementName + ">";=0A=
} catch(e) {}=0A=
element =3D parentElement.firstChild || null;=0A=
// workaround firefox 1.0.X bug=0A=
if(!element) {=0A=
element =3D document.createElement(elementName);=0A=
for(attr in arguments[1]) =0A=
element[attr =3D=3D 'class' ? 'className' : attr] =3D arguments[1][attr];=0A=
}=0A=
if(element.tagName.toUpperCase() !=3D elementName)=0A=
element =3D parentElement.getElementsByTagName(elementName)[0];=0A=
}=0A=
} =0A=
// text, or array of children=0A=
if(arguments[2])=0A=
this._children(element, arguments[2]);=0A=
return element;=0A=
},=0A=
_text: function(text) {=0A=
return document.createTextNode(text);=0A=
},=0A=
ATTR_MAP: {=0A=
'className': 'class',=0A=
'htmlFor': 'for'=0A=
},=0A=
_attributes: function(attributes) {=0A=
var attrs =3D [];=0A=
for(attribute in attributes)=0A=
attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : =
attribute) +=0A=
'=3D"' + =
attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');=0A=
return attrs.join(" ");=0A=
},=0A=
_children: function(element, children) {=0A=
if(children.tagName) {=0A=
element.appendChild(children);=0A=
return;=0A=
}=0A=
if(typeof children=3D=3D'object') { // array can hold nodes and text=0A=
children.flatten().each( function(e) {=0A=
if(typeof e=3D=3D'object')=0A=
element.appendChild(e)=0A=
else=0A=
if(Builder._isStringOrNumber(e))=0A=
element.appendChild(Builder._text(e));=0A=
});=0A=
} else=0A=
if(Builder._isStringOrNumber(children))=0A=
element.appendChild(Builder._text(children));=0A=
},=0A=
_isStringOrNumber: function(param) {=0A=
return(typeof param=3D=3D'string' || typeof param=3D=3D'number');=0A=
},=0A=
build: function(html) {=0A=
var element =3D this.node('div');=0A=
$(element).update(html.strip());=0A=
return element.down();=0A=
},=0A=
dump: function(scope) { =0A=
if(typeof scope !=3D 'object' && typeof scope !=3D 'function') scope =3D =
window; //global scope =0A=
var tags =3D ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO =
BIG BLOCKQUOTE BODY " +=0A=
"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL =
DT EM FIELDSET " +=0A=
"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG =
INPUT INS ISINDEX "+=0A=
"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL =
OPTGROUP OPTION P "+=0A=
"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP =
TABLE TBODY TD "+=0A=
"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);=0A=
tags.each( function(tag){ =0A=
scope[tag] =3D function() { =0A=
return Builder.node.apply(Builder, [tag].concat($A(arguments)));  =0A=
} =0A=
});=0A=
}=0A=
}=0A=
/* js/lib/effects.js */=0A=
// script.aculo.us effects.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// Contributors:=0A=
//  Justin Palmer (http://encytemedia.com/)=0A=
//  Mark Pilgrim (http://diveintomark.org/)=0A=
//  Martin Bialasinki=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: =
http://script.aculo.us/ =0A=
// converts rgb() and #xxx to #xxxxxx format,  =0A=
// returns self (or first argument) if not convertable  =0A=
String.prototype.parseColor =3D function() {  =0A=
var color =3D '#';=0A=
if (this.slice(0,4) =3D=3D 'rgb(') {  =0A=
var cols =3D this.slice(4,this.length-1).split(',');  =0A=
var i=3D0; do { color +=3D parseInt(cols[i]).toColorPart() } while =
(++i<3);  =0A=
} else {  =0A=
if (this.slice(0,1) =3D=3D '#') {  =0A=
if (this.length=3D=3D4) for(var i=3D1;i<4;i++) color +=3D =
(this.charAt(i) + this.charAt(i)).toLowerCase();  =0A=
if (this.length=3D=3D7) color =3D this.toLowerCase();  =0A=
}  =0A=
}  =0A=
return (color.length=3D=3D7 ? color : (arguments[0] || this));  =0A=
};=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
Element.collectTextNodes =3D function(element) {  =0A=
return $A($(element).childNodes).collect( function(node) {=0A=
return (node.nodeType=3D=3D3 ? node.nodeValue : =0A=
(node.hasChildNodes() ? Element.collectTextNodes(node) : ''));=0A=
}).flatten().join('');=0A=
};=0A=
Element.collectTextNodesIgnoreClass =3D function(element, className) {  =0A=
return $A($(element).childNodes).collect( function(node) {=0A=
return (node.nodeType=3D=3D3 ? node.nodeValue : =0A=
((node.hasChildNodes() && !Element.hasClassName(node,className)) ? =0A=
Element.collectTextNodesIgnoreClass(node, className) : ''));=0A=
}).flatten().join('');=0A=
};=0A=
Element.setContentZoom =3D function(element, percent) {=0A=
element =3D $(element);  =0A=
element.setStyle({fontSize: (percent/100) + 'em'});   =0A=
if (Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
return element;=0A=
};=0A=
Element.getInlineOpacity =3D function(element){=0A=
return $(element).style.opacity || '';=0A=
};=0A=
Element.forceRerendering =3D function(element) {=0A=
try {=0A=
element =3D $(element);=0A=
var n =3D document.createTextNode(' ');=0A=
element.appendChild(n);=0A=
element.removeChild(n);=0A=
} catch(e) { }=0A=
};=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
var Effect =3D {=0A=
_elementDoesNotExistError: {=0A=
name: 'ElementDoesNotExistError',=0A=
message: 'The specified DOM element does not exist, but is required for =
this effect to operate'=0A=
},=0A=
Transitions: {=0A=
linear: Prototype.K,=0A=
sinoidal: function(pos) {=0A=
return (-Math.cos(pos*Math.PI)/2) + 0.5;=0A=
},=0A=
reverse: function(pos) {=0A=
return 1-pos;=0A=
},=0A=
flicker: function(pos) {=0A=
var pos =3D ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;=0A=
return pos > 1 ? 1 : pos;=0A=
},=0A=
wobble: function(pos) {=0A=
return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;=0A=
},=0A=
pulse: function(pos, pulses) { =0A=
pulses =3D pulses || 5; =0A=
return (=0A=
((pos % (1/pulses)) * pulses).round() =3D=3D 0 ? =0A=
((pos * pulses * 2) - (pos * pulses * 2).floor()) : =0A=
1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())=0A=
);=0A=
},=0A=
spring: function(pos) { =0A=
return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); =0A=
},=0A=
none: function(pos) {=0A=
return 0;=0A=
},=0A=
full: function(pos) {=0A=
return 1;=0A=
}=0A=
},=0A=
DefaultOptions: {=0A=
duration:   1.0,   // seconds=0A=
fps:        100,   // 100=3D assume 66fps max.=0A=
sync:       false, // true for combining=0A=
from:       0.0,=0A=
to:         1.0,=0A=
delay:      0.0,=0A=
queue:      'parallel'=0A=
},=0A=
tagifyText: function(element) {=0A=
var tagifyStyle =3D 'position:relative';=0A=
if (Prototype.Browser.IE) tagifyStyle +=3D ';zoom:1';=0A=
element =3D $(element);=0A=
$A(element.childNodes).each( function(child) {=0A=
if (child.nodeType=3D=3D3) {=0A=
child.nodeValue.toArray().each( function(character) {=0A=
element.insertBefore(=0A=
new Element('span', {style: tagifyStyle}).update(=0A=
character =3D=3D ' ' ? String.fromCharCode(160) : character), =0A=
child);=0A=
});=0A=
Element.remove(child);=0A=
}=0A=
});=0A=
},=0A=
multiple: function(element, effect) {=0A=
var elements;=0A=
if (((typeof element =3D=3D 'object') || =0A=
Object.isFunction(element)) && =0A=
(element.length))=0A=
elements =3D element;=0A=
else=0A=
elements =3D $(element).childNodes;=0A=
var options =3D Object.extend({=0A=
speed: 0.1,=0A=
delay: 0.0=0A=
}, arguments[2] || { });=0A=
var masterDelay =3D options.delay;=0A=
$A(elements).each( function(element, index) {=0A=
new effect(element, Object.extend(options, { delay: index * =
options.speed + masterDelay }));=0A=
});=0A=
},=0A=
PAIRS: {=0A=
'slide':  ['SlideDown','SlideUp'],=0A=
'blind':  ['BlindDown','BlindUp'],=0A=
'appear': ['Appear','Fade']=0A=
},=0A=
toggle: function(element, effect) {=0A=
element =3D $(element);=0A=
effect =3D (effect || 'appear').toLowerCase();=0A=
var options =3D Object.extend({=0A=
queue: { position:'end', scope:(element.id || 'global'), limit: 1 }=0A=
}, arguments[2] || { });=0A=
Effect[element.visible() ? =0A=
Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);=0A=
}=0A=
};=0A=
Effect.DefaultOptions.transition =3D Effect.Transitions.sinoidal;=0A=
/* ------------- core effects ------------- */=0A=
Effect.ScopedQueue =3D Class.create(Enumerable, {=0A=
initialize: function() {=0A=
this.effects  =3D [];=0A=
this.interval =3D null;    =0A=
},=0A=
_each: function(iterator) {=0A=
this.effects._each(iterator);=0A=
},=0A=
add: function(effect) {=0A=
var timestamp =3D new Date().getTime();=0A=
var position =3D Object.isString(effect.options.queue) ? =0A=
effect.options.queue : effect.options.queue.position;=0A=
switch(position) {=0A=
case 'front':=0A=
// move unstarted effects after this effect  =0A=
this.effects.findAll(function(e){ return e.state=3D=3D'idle' }).each( =
function(e) {=0A=
e.startOn  +=3D effect.finishOn;=0A=
e.finishOn +=3D effect.finishOn;=0A=
});=0A=
break;=0A=
case 'with-last':=0A=
timestamp =3D this.effects.pluck('startOn').max() || timestamp;=0A=
break;=0A=
case 'end':=0A=
// start effect after last queued effect has finished=0A=
timestamp =3D this.effects.pluck('finishOn').max() || timestamp;=0A=
break;=0A=
}=0A=
effect.startOn  +=3D timestamp;=0A=
effect.finishOn +=3D timestamp;=0A=
if (!effect.options.queue.limit || (this.effects.length < =
effect.options.queue.limit))=0A=
this.effects.push(effect);=0A=
if (!this.interval)=0A=
this.interval =3D setInterval(this.loop.bind(this), 15);=0A=
},=0A=
remove: function(effect) {=0A=
this.effects =3D this.effects.reject(function(e) { return e=3D=3Deffect =
});=0A=
if (this.effects.length =3D=3D 0) {=0A=
clearInterval(this.interval);=0A=
this.interval =3D null;=0A=
}=0A=
},=0A=
loop: function() {=0A=
var timePos =3D new Date().getTime();=0A=
for(var i=3D0, len=3Dthis.effects.length;i<len;i++) =0A=
this.effects[i] && this.effects[i].loop(timePos);=0A=
}=0A=
});=0A=
Effect.Queues =3D {=0A=
instances: $H(),=0A=
get: function(queueName) {=0A=
if (!Object.isString(queueName)) return queueName;=0A=
return this.instances.get(queueName) ||=0A=
this.instances.set(queueName, new Effect.ScopedQueue());=0A=
}=0A=
};=0A=
Effect.Queue =3D Effect.Queues.get('global');=0A=
Effect.Base =3D Class.create({=0A=
position: null,=0A=
start: function(options) {=0A=
function codeForEvent(options,eventName){=0A=
return (=0A=
(options[eventName+'Internal'] ? =
'this.options.'+eventName+'Internal(this);' : '') +=0A=
(options[eventName] ? 'this.options.'+eventName+'(this);' : '')=0A=
);=0A=
}=0A=
if (options && options.transition =3D=3D=3D false) options.transition =
=3D Effect.Transitions.linear;=0A=
this.options      =3D Object.extend(Object.extend({ =
},Effect.DefaultOptions), options || { });=0A=
this.currentFrame =3D 0;=0A=
this.state        =3D 'idle';=0A=
this.startOn      =3D this.options.delay*1000;=0A=
this.finishOn     =3D this.startOn+(this.options.duration*1000);=0A=
this.fromToDelta  =3D this.options.to-this.options.from;=0A=
this.totalTime    =3D this.finishOn-this.startOn;=0A=
this.totalFrames  =3D this.options.fps*this.options.duration;=0A=
eval('this.render =3D function(pos){ '+=0A=
'if (this.state=3D=3D"idle"){this.state=3D"running";'+=0A=
codeForEvent(this.options,'beforeSetup')+=0A=
(this.setup ? 'this.setup();':'')+ =0A=
codeForEvent(this.options,'afterSetup')+=0A=
'};if (this.state=3D=3D"running"){'+=0A=
'pos=3Dthis.options.transition(pos)*'+this.fromToDelta+'+'+this.options.f=
rom+';'+=0A=
'this.position=3Dpos;'+=0A=
codeForEvent(this.options,'beforeUpdate')+=0A=
(this.update ? 'this.update(pos);':'')+=0A=
codeForEvent(this.options,'afterUpdate')+=0A=
'}}');=0A=
this.event('beforeStart');=0A=
if (!this.options.sync)=0A=
Effect.Queues.get(Object.isString(this.options.queue) ? =0A=
'global' : this.options.queue.scope).add(this);=0A=
},=0A=
loop: function(timePos) {=0A=
if (timePos >=3D this.startOn) {=0A=
if (timePos >=3D this.finishOn) {=0A=
this.render(1.0);=0A=
this.cancel();=0A=
this.event('beforeFinish');=0A=
if (this.finish) this.finish(); =0A=
this.event('afterFinish');=0A=
return;  =0A=
}=0A=
var pos   =3D (timePos - this.startOn) / this.totalTime,=0A=
frame =3D (pos * this.totalFrames).round();=0A=
if (frame > this.currentFrame) {=0A=
this.render(pos);=0A=
this.currentFrame =3D frame;=0A=
}=0A=
}=0A=
},=0A=
cancel: function() {=0A=
if (!this.options.sync)=0A=
Effect.Queues.get(Object.isString(this.options.queue) ? =0A=
'global' : this.options.queue.scope).remove(this);=0A=
this.state =3D 'finished';=0A=
},=0A=
event: function(eventName) {=0A=
if (this.options[eventName + 'Internal']) this.options[eventName + =
'Internal'](this);=0A=
if (this.options[eventName]) this.options[eventName](this);=0A=
},=0A=
inspect: function() {=0A=
var data =3D $H();=0A=
for(property in this)=0A=
if (!Object.isFunction(this[property])) data.set(property, =
this[property]);=0A=
return '#<Effect:' + data.inspect() + ',options:' + =
$H(this.options).inspect() + '>';=0A=
}=0A=
});=0A=
Effect.Parallel =3D Class.create(Effect.Base, {=0A=
initialize: function(effects) {=0A=
this.effects =3D effects || [];=0A=
this.start(arguments[1]);=0A=
},=0A=
update: function(position) {=0A=
this.effects.invoke('render', position);=0A=
},=0A=
finish: function(position) {=0A=
this.effects.each( function(effect) {=0A=
effect.render(1.0);=0A=
effect.cancel();=0A=
effect.event('beforeFinish');=0A=
if (effect.finish) effect.finish(position);=0A=
effect.event('afterFinish');=0A=
});=0A=
}=0A=
});=0A=
Effect.Tween =3D Class.create(Effect.Base, {=0A=
initialize: function(object, from, to) {=0A=
object =3D Object.isString(object) ? $(object) : object;=0A=
var args =3D $A(arguments), method =3D args.last(), =0A=
options =3D args.length =3D=3D 5 ? args[3] : null;=0A=
this.method =3D Object.isFunction(method) ? method.bind(object) :=0A=
Object.isFunction(object[method]) ? object[method].bind(object) : =0A=
function(value) { object[method] =3D value };=0A=
this.start(Object.extend({ from: from, to: to }, options || { }));=0A=
},=0A=
update: function(position) {=0A=
this.method(position);=0A=
}=0A=
});=0A=
Effect.Event =3D Class.create(Effect.Base, {=0A=
initialize: function() {=0A=
this.start(Object.extend({ duration: 0 }, arguments[0] || { }));=0A=
},=0A=
update: Prototype.emptyFunction=0A=
});=0A=
Effect.Opacity =3D Class.create(Effect.Base, {=0A=
initialize: function(element) {=0A=
this.element =3D $(element);=0A=
if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
// make this work on IE on elements without 'layout'=0A=
if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))=0A=
this.element.setStyle({zoom: 1});=0A=
var options =3D Object.extend({=0A=
from: this.element.getOpacity() || 0.0,=0A=
to:   1.0=0A=
}, arguments[1] || { });=0A=
this.start(options);=0A=
},=0A=
update: function(position) {=0A=
this.element.setOpacity(position);=0A=
}=0A=
});=0A=
Effect.Move =3D Class.create(Effect.Base, {=0A=
initialize: function(element) {=0A=
this.element =3D $(element);=0A=
if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
var options =3D Object.extend({=0A=
x:    0,=0A=
y:    0,=0A=
mode: 'relative'=0A=
}, arguments[1] || { });=0A=
this.start(options);=0A=
},=0A=
setup: function() {=0A=
this.element.makePositioned();=0A=
this.originalLeft =3D parseFloat(this.element.getStyle('left') || '0');=0A=
this.originalTop  =3D parseFloat(this.element.getStyle('top')  || '0');=0A=
if (this.options.mode =3D=3D 'absolute') {=0A=
this.options.x =3D this.options.x - this.originalLeft;=0A=
this.options.y =3D this.options.y - this.originalTop;=0A=
}=0A=
},=0A=
update: function(position) {=0A=
this.element.setStyle({=0A=
left: (this.options.x  * position + this.originalLeft).round() + 'px',=0A=
top:  (this.options.y  * position + this.originalTop).round()  + 'px'=0A=
});=0A=
}=0A=
});=0A=
// for backwards compatibility=0A=
Effect.MoveBy =3D function(element, toTop, toLeft) {=0A=
return new Effect.Move(element, =0A=
Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));=0A=
};=0A=
Effect.Scale =3D Class.create(Effect.Base, {=0A=
initialize: function(element, percent) {=0A=
this.element =3D $(element);=0A=
if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
var options =3D Object.extend({=0A=
scaleX: true,=0A=
scaleY: true,=0A=
scaleContent: true,=0A=
scaleFromCenter: false,=0A=
scaleMode: 'box',        // 'box' or 'contents' or { } with provided =
values=0A=
scaleFrom: 100.0,=0A=
scaleTo:   percent=0A=
}, arguments[2] || { });=0A=
this.start(options);=0A=
},=0A=
setup: function() {=0A=
this.restoreAfterFinish =3D this.options.restoreAfterFinish || false;=0A=
this.elementPositioning =3D this.element.getStyle('position');=0A=
this.originalStyle =3D { };=0A=
['top','left','width','height','fontSize'].each( function(k) {=0A=
this.originalStyle[k] =3D this.element.style[k];=0A=
}.bind(this));=0A=
this.originalTop  =3D this.element.offsetTop;=0A=
this.originalLeft =3D this.element.offsetLeft;=0A=
var fontSize =3D this.element.getStyle('font-size') || '100%';=0A=
['em','px','%','pt'].each( function(fontSizeType) {=0A=
if (fontSize.indexOf(fontSizeType)>0) {=0A=
this.fontSize     =3D parseFloat(fontSize);=0A=
this.fontSizeType =3D fontSizeType;=0A=
}=0A=
}.bind(this));=0A=
this.factor =3D (this.options.scaleTo - this.options.scaleFrom)/100;=0A=
this.dims =3D null;=0A=
if (this.options.scaleMode=3D=3D'box')=0A=
this.dims =3D [this.element.offsetHeight, this.element.offsetWidth];=0A=
if (/^content/.test(this.options.scaleMode))=0A=
this.dims =3D [this.element.scrollHeight, this.element.scrollWidth];=0A=
if (!this.dims)=0A=
this.dims =3D [this.options.scaleMode.originalHeight,=0A=
this.options.scaleMode.originalWidth];=0A=
},=0A=
update: function(position) {=0A=
var currentScale =3D (this.options.scaleFrom/100.0) + (this.factor * =
position);=0A=
if (this.options.scaleContent && this.fontSize)=0A=
this.element.setStyle({fontSize: this.fontSize * currentScale + =
this.fontSizeType });=0A=
this.setDimensions(this.dims[0] * currentScale, this.dims[1] * =
currentScale);=0A=
},=0A=
finish: function(position) {=0A=
if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);=0A=
},=0A=
setDimensions: function(height, width) {=0A=
var d =3D { };=0A=
if (this.options.scaleX) d.width =3D width.round() + 'px';=0A=
if (this.options.scaleY) d.height =3D height.round() + 'px';=0A=
if (this.options.scaleFromCenter) {=0A=
var topd  =3D (height - this.dims[0])/2;=0A=
var leftd =3D (width  - this.dims[1])/2;=0A=
if (this.elementPositioning =3D=3D 'absolute') {=0A=
if (this.options.scaleY) d.top =3D this.originalTop-topd + 'px';=0A=
if (this.options.scaleX) d.left =3D this.originalLeft-leftd + 'px';=0A=
} else {=0A=
if (this.options.scaleY) d.top =3D -topd + 'px';=0A=
if (this.options.scaleX) d.left =3D -leftd + 'px';=0A=
}=0A=
}=0A=
this.element.setStyle(d);=0A=
}=0A=
});=0A=
Effect.Highlight =3D Class.create(Effect.Base, {=0A=
initialize: function(element) {=0A=
this.element =3D $(element);=0A=
if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
var options =3D Object.extend({ startcolor: '#ffff99' }, arguments[1] || =
{ });=0A=
this.start(options);=0A=
},=0A=
setup: function() {=0A=
// Prevent executing on elements not in the layout flow=0A=
if (this.element.getStyle('display')=3D=3D'none') { this.cancel(); =
return; }=0A=
// Disable background image during the effect=0A=
this.oldStyle =3D { };=0A=
if (!this.options.keepBackgroundImage) {=0A=
this.oldStyle.backgroundImage =3D =
this.element.getStyle('background-image');=0A=
this.element.setStyle({backgroundImage: 'none'});=0A=
}=0A=
if (!this.options.endcolor)=0A=
this.options.endcolor =3D =
this.element.getStyle('background-color').parseColor('#ffffff');=0A=
if (!this.options.restorecolor)=0A=
this.options.restorecolor =3D this.element.getStyle('background-color');=0A=
// init color calculations=0A=
this._base  =3D $R(0,2).map(function(i){ return =
parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));=0A=
this._delta =3D $R(0,2).map(function(i){ return =
parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] =
}.bind(this));=0A=
},=0A=
update: function(position) {=0A=
this.element.setStyle({backgroundColor: =
$R(0,2).inject('#',function(m,v,i){=0A=
return =
m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); =
}.bind(this)) });=0A=
},=0A=
finish: function() {=0A=
this.element.setStyle(Object.extend(this.oldStyle, {=0A=
backgroundColor: this.options.restorecolor=0A=
}));=0A=
}=0A=
});=0A=
Effect.ScrollTo =3D function(element) {=0A=
var options =3D arguments[1] || { },=0A=
scrollOffsets =3D document.viewport.getScrollOffsets(),=0A=
elementOffsets =3D $(element).cumulativeOffset(),=0A=
max =3D (window.height || document.body.scrollHeight) - =
document.viewport.getHeight();  =0A=
if (options.offset) elementOffsets[1] +=3D options.offset;=0A=
return new Effect.Tween(null,=0A=
scrollOffsets.top,=0A=
elementOffsets[1] > max ? max : elementOffsets[1],=0A=
options,=0A=
function(p){ scrollTo(scrollOffsets.left, p.round()) }=0A=
);=0A=
};=0A=
/* ------------- combination effects ------------- */=0A=
Effect.Fade =3D function(element) {=0A=
element =3D $(element);=0A=
var oldOpacity =3D element.getInlineOpacity();=0A=
var options =3D Object.extend({=0A=
from: element.getOpacity() || 1.0,=0A=
to:   0.0,=0A=
afterFinishInternal: function(effect) { =0A=
if (effect.options.to!=3D0) return;=0A=
effect.element.hide().setStyle({opacity: oldOpacity}); =0A=
}=0A=
}, arguments[1] || { });=0A=
return new Effect.Opacity(element,options);=0A=
};=0A=
Effect.Appear =3D function(element) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend({=0A=
from: (element.getStyle('display') =3D=3D 'none' ? 0.0 : =
element.getOpacity() || 0.0),=0A=
to:   1.0,=0A=
// force Safari to render floated elements properly=0A=
afterFinishInternal: function(effect) {=0A=
effect.element.forceRerendering();=0A=
},=0A=
beforeSetup: function(effect) {=0A=
effect.element.setOpacity(effect.options.from).show(); =0A=
}}, arguments[1] || { });=0A=
return new Effect.Opacity(element,options);=0A=
};=0A=
Effect.Puff =3D function(element) {=0A=
element =3D $(element);=0A=
var oldStyle =3D { =0A=
opacity: element.getInlineOpacity(), =0A=
position: element.getStyle('position'),=0A=
top:  element.style.top,=0A=
left: element.style.left,=0A=
width: element.style.width,=0A=
height: element.style.height=0A=
};=0A=
return new Effect.Parallel(=0A=
[ new Effect.Scale(element, 200, =0A=
{ sync: true, scaleFromCenter: true, scaleContent: true, =
restoreAfterFinish: true }), =0A=
new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], =0A=
Object.extend({ duration: 1.0, =0A=
beforeSetupInternal: function(effect) {=0A=
Position.absolutize(effect.effects[0].element)=0A=
},=0A=
afterFinishInternal: function(effect) {=0A=
effect.effects[0].element.hide().setStyle(oldStyle); }=0A=
}, arguments[1] || { })=0A=
);=0A=
};=0A=
Effect.BlindUp =3D function(element) {=0A=
element =3D $(element);=0A=
element.makeClipping();=0A=
return new Effect.Scale(element, 0,=0A=
Object.extend({ scaleContent: false, =0A=
scaleX: false, =0A=
restoreAfterFinish: true,=0A=
afterFinishInternal: function(effect) {=0A=
effect.element.hide().undoClipping();=0A=
} =0A=
}, arguments[1] || { })=0A=
);=0A=
};=0A=
Effect.BlindDown =3D function(element) {=0A=
element =3D $(element);=0A=
var elementDimensions =3D element.getDimensions();=0A=
return new Effect.Scale(element, 100, Object.extend({ =0A=
scaleContent: false, =0A=
scaleX: false,=0A=
scaleFrom: 0,=0A=
scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
restoreAfterFinish: true,=0A=
afterSetup: function(effect) {=0A=
effect.element.makeClipping().setStyle({height: '0px'}).show(); =0A=
},  =0A=
afterFinishInternal: function(effect) {=0A=
effect.element.undoClipping();=0A=
}=0A=
}, arguments[1] || { }));=0A=
};=0A=
Effect.SwitchOff =3D function(element) {=0A=
element =3D $(element);=0A=
var oldOpacity =3D element.getInlineOpacity();=0A=
return new Effect.Appear(element, Object.extend({=0A=
duration: 0.4,=0A=
from: 0,=0A=
transition: Effect.Transitions.flicker,=0A=
afterFinishInternal: function(effect) {=0A=
new Effect.Scale(effect.element, 1, { =0A=
duration: 0.3, scaleFromCenter: true,=0A=
scaleX: false, scaleContent: false, restoreAfterFinish: true,=0A=
beforeSetup: function(effect) { =0A=
effect.element.makePositioned().makeClipping();=0A=
},=0A=
afterFinishInternal: function(effect) {=0A=
effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: =
oldOpacity});=0A=
}=0A=
})=0A=
}=0A=
}, arguments[1] || { }));=0A=
};=0A=
Effect.DropOut =3D function(element) {=0A=
element =3D $(element);=0A=
var oldStyle =3D {=0A=
top: element.getStyle('top'),=0A=
left: element.getStyle('left'),=0A=
opacity: element.getInlineOpacity() };=0A=
return new Effect.Parallel(=0A=
[ new Effect.Move(element, {x: 0, y: 100, sync: true }), =0A=
new Effect.Opacity(element, { sync: true, to: 0.0 }) ],=0A=
Object.extend(=0A=
{ duration: 0.5,=0A=
beforeSetup: function(effect) {=0A=
effect.effects[0].element.makePositioned(); =0A=
},=0A=
afterFinishInternal: function(effect) {=0A=
effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);=0A=
} =0A=
}, arguments[1] || { }));=0A=
};=0A=
Effect.Shake =3D function(element) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend({=0A=
distance: 20,=0A=
duration: 0.5=0A=
}, arguments[1] || {});=0A=
var distance =3D parseFloat(options.distance);=0A=
var split =3D parseFloat(options.duration) / 10.0;=0A=
var oldStyle =3D {=0A=
top: element.getStyle('top'),=0A=
left: element.getStyle('left') };=0A=
return new Effect.Move(element,=0A=
{ x:  distance, y: 0, duration: split, afterFinishInternal: =
function(effect) {=0A=
new Effect.Move(effect.element,=0A=
{ x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
new Effect.Move(effect.element,=0A=
{ x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
new Effect.Move(effect.element,=0A=
{ x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
new Effect.Move(effect.element,=0A=
{ x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
new Effect.Move(effect.element,=0A=
{ x: -distance, y: 0, duration: split, afterFinishInternal: =
function(effect) {=0A=
effect.element.undoPositioned().setStyle(oldStyle);=0A=
}}) }}) }}) }}) }}) }});=0A=
};=0A=
Effect.SlideDown =3D function(element) {=0A=
element =3D $(element).cleanWhitespace();=0A=
// SlideDown need to have the content of the element wrapped in a =
container element with fixed height!=0A=
var oldInnerBottom =3D element.down().getStyle('bottom');=0A=
var elementDimensions =3D element.getDimensions();=0A=
return new Effect.Scale(element, 100, Object.extend({ =0A=
scaleContent: false, =0A=
scaleX: false, =0A=
scaleFrom: window.opera ? 0 : 1,=0A=
scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
restoreAfterFinish: true,=0A=
afterSetup: function(effect) {=0A=
effect.element.makePositioned();=0A=
effect.element.down().makePositioned();=0A=
if (window.opera) effect.element.setStyle({top: ''});=0A=
effect.element.makeClipping().setStyle({height: '0px'}).show(); =0A=
},=0A=
afterUpdateInternal: function(effect) {=0A=
effect.element.down().setStyle({bottom:=0A=
(effect.dims[0] - effect.element.clientHeight) + 'px' }); =0A=
},=0A=
afterFinishInternal: function(effect) {=0A=
effect.element.undoClipping().undoPositioned();=0A=
effect.element.down().undoPositioned().setStyle({bottom: =
oldInnerBottom}); }=0A=
}, arguments[1] || { })=0A=
);=0A=
};=0A=
Effect.SlideUp =3D function(element) {=0A=
element =3D $(element).cleanWhitespace();=0A=
var oldInnerBottom =3D element.down().getStyle('bottom');=0A=
var elementDimensions =3D element.getDimensions();=0A=
return new Effect.Scale(element, window.opera ? 0 : 1,=0A=
Object.extend({ scaleContent: false, =0A=
scaleX: false, =0A=
scaleMode: 'box',=0A=
scaleFrom: 100,=0A=
scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
restoreAfterFinish: true,=0A=
afterSetup: function(effect) {=0A=
effect.element.makePositioned();=0A=
effect.element.down().makePositioned();=0A=
if (window.opera) effect.element.setStyle({top: ''});=0A=
effect.element.makeClipping().show();=0A=
},  =0A=
afterUpdateInternal: function(effect) {=0A=
effect.element.down().setStyle({bottom:=0A=
(effect.dims[0] - effect.element.clientHeight) + 'px' });=0A=
},=0A=
afterFinishInternal: function(effect) {=0A=
effect.element.hide().undoClipping().undoPositioned();=0A=
effect.element.down().undoPositioned().setStyle({bottom: =
oldInnerBottom});=0A=
}=0A=
}, arguments[1] || { })=0A=
);=0A=
};=0A=
// Bug in opera makes the TD containing this element expand for a =
instance after finish =0A=
Effect.Squish =3D function(element) {=0A=
return new Effect.Scale(element, window.opera ? 1 : 0, { =0A=
restoreAfterFinish: true,=0A=
beforeSetup: function(effect) {=0A=
effect.element.makeClipping(); =0A=
},  =0A=
afterFinishInternal: function(effect) {=0A=
effect.element.hide().undoClipping(); =0A=
}=0A=
});=0A=
};=0A=
Effect.Grow =3D function(element) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend({=0A=
direction: 'center',=0A=
moveTransition: Effect.Transitions.sinoidal,=0A=
scaleTransition: Effect.Transitions.sinoidal,=0A=
opacityTransition: Effect.Transitions.full=0A=
}, arguments[1] || { });=0A=
var oldStyle =3D {=0A=
top: element.style.top,=0A=
left: element.style.left,=0A=
height: element.style.height,=0A=
width: element.style.width,=0A=
opacity: element.getInlineOpacity() };=0A=
var dims =3D element.getDimensions();    =0A=
var initialMoveX, initialMoveY;=0A=
var moveX, moveY;=0A=
switch (options.direction) {=0A=
case 'top-left':=0A=
initialMoveX =3D initialMoveY =3D moveX =3D moveY =3D 0; =0A=
break;=0A=
case 'top-right':=0A=
initialMoveX =3D dims.width;=0A=
initialMoveY =3D moveY =3D 0;=0A=
moveX =3D -dims.width;=0A=
break;=0A=
case 'bottom-left':=0A=
initialMoveX =3D moveX =3D 0;=0A=
initialMoveY =3D dims.height;=0A=
moveY =3D -dims.height;=0A=
break;=0A=
case 'bottom-right':=0A=
initialMoveX =3D dims.width;=0A=
initialMoveY =3D dims.height;=0A=
moveX =3D -dims.width;=0A=
moveY =3D -dims.height;=0A=
break;=0A=
case 'center':=0A=
initialMoveX =3D dims.width / 2;=0A=
initialMoveY =3D dims.height / 2;=0A=
moveX =3D -dims.width / 2;=0A=
moveY =3D -dims.height / 2;=0A=
break;=0A=
}=0A=
return new Effect.Move(element, {=0A=
x: initialMoveX,=0A=
y: initialMoveY,=0A=
duration: 0.01, =0A=
beforeSetup: function(effect) {=0A=
effect.element.hide().makeClipping().makePositioned();=0A=
},=0A=
afterFinishInternal: function(effect) {=0A=
new Effect.Parallel(=0A=
[ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, =
transition: options.opacityTransition }),=0A=
new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, =
transition: options.moveTransition }),=0A=
new Effect.Scale(effect.element, 100, {=0A=
scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, =0A=
sync: true, scaleFrom: window.opera ? 1 : 0, transition: =
options.scaleTransition, restoreAfterFinish: true})=0A=
], Object.extend({=0A=
beforeSetup: function(effect) {=0A=
effect.effects[0].element.setStyle({height: '0px'}).show(); =0A=
},=0A=
afterFinishInternal: function(effect) {=0A=
effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldSty=
le); =0A=
}=0A=
}, options)=0A=
)=0A=
}=0A=
});=0A=
};=0A=
Effect.Shrink =3D function(element) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend({=0A=
direction: 'center',=0A=
moveTransition: Effect.Transitions.sinoidal,=0A=
scaleTransition: Effect.Transitions.sinoidal,=0A=
opacityTransition: Effect.Transitions.none=0A=
}, arguments[1] || { });=0A=
var oldStyle =3D {=0A=
top: element.style.top,=0A=
left: element.style.left,=0A=
height: element.style.height,=0A=
width: element.style.width,=0A=
opacity: element.getInlineOpacity() };=0A=
var dims =3D element.getDimensions();=0A=
var moveX, moveY;=0A=
switch (options.direction) {=0A=
case 'top-left':=0A=
moveX =3D moveY =3D 0;=0A=
break;=0A=
case 'top-right':=0A=
moveX =3D dims.width;=0A=
moveY =3D 0;=0A=
break;=0A=
case 'bottom-left':=0A=
moveX =3D 0;=0A=
moveY =3D dims.height;=0A=
break;=0A=
case 'bottom-right':=0A=
moveX =3D dims.width;=0A=
moveY =3D dims.height;=0A=
break;=0A=
case 'center':  =0A=
moveX =3D dims.width / 2;=0A=
moveY =3D dims.height / 2;=0A=
break;=0A=
}=0A=
return new Effect.Parallel(=0A=
[ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, =
transition: options.opacityTransition }),=0A=
new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, =
transition: options.scaleTransition, restoreAfterFinish: true}),=0A=
new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: =
options.moveTransition })=0A=
], Object.extend({            =0A=
beforeStartInternal: function(effect) {=0A=
effect.effects[0].element.makePositioned().makeClipping(); =0A=
},=0A=
afterFinishInternal: function(effect) {=0A=
effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle=
(oldStyle); }=0A=
}, options)=0A=
);=0A=
};=0A=
Effect.Pulsate =3D function(element) {=0A=
element =3D $(element);=0A=
var options    =3D arguments[1] || { };=0A=
var oldOpacity =3D element.getInlineOpacity();=0A=
var transition =3D options.transition || Effect.Transitions.sinoidal;=0A=
var reverser   =3D function(pos){ return =
transition(1-Effect.Transitions.pulse(pos, options.pulses)) };=0A=
reverser.bind(transition);=0A=
return new Effect.Opacity(element, =0A=
Object.extend(Object.extend({  duration: 2.0, from: 0,=0A=
afterFinishInternal: function(effect) { =
effect.element.setStyle({opacity: oldOpacity}); }=0A=
}, options), {transition: reverser}));=0A=
};=0A=
Effect.Fold =3D function(element) {=0A=
element =3D $(element);=0A=
var oldStyle =3D {=0A=
top: element.style.top,=0A=
left: element.style.left,=0A=
width: element.style.width,=0A=
height: element.style.height };=0A=
element.makeClipping();=0A=
return new Effect.Scale(element, 5, Object.extend({   =0A=
scaleContent: false,=0A=
scaleX: false,=0A=
afterFinishInternal: function(effect) {=0A=
new Effect.Scale(element, 1, { =0A=
scaleContent: false, =0A=
scaleY: false,=0A=
afterFinishInternal: function(effect) {=0A=
effect.element.hide().undoClipping().setStyle(oldStyle);=0A=
} });=0A=
}}, arguments[1] || { }));=0A=
};=0A=
Effect.Morph =3D Class.create(Effect.Base, {=0A=
initialize: function(element) {=0A=
this.element =3D $(element);=0A=
if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
var options =3D Object.extend({=0A=
style: { }=0A=
}, arguments[1] || { });=0A=
if (!Object.isString(options.style)) this.style =3D $H(options.style);=0A=
else {=0A=
if (options.style.include(':'))=0A=
this.style =3D options.style.parseStyle();=0A=
else {=0A=
this.element.addClassName(options.style);=0A=
this.style =3D $H(this.element.getStyles());=0A=
this.element.removeClassName(options.style);=0A=
var css =3D this.element.getStyles();=0A=
this.style =3D this.style.reject(function(style) {=0A=
return style.value =3D=3D css[style.key];=0A=
});=0A=
options.afterFinishInternal =3D function(effect) {=0A=
effect.element.addClassName(effect.options.style);=0A=
effect.transforms.each(function(transform) {=0A=
effect.element.style[transform.style] =3D '';=0A=
});=0A=
}=0A=
}=0A=
}=0A=
this.start(options);=0A=
},=0A=
setup: function(){=0A=
function parseColor(color){=0A=
if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color =
=3D '#ffffff';=0A=
color =3D color.parseColor();=0A=
return $R(0,2).map(function(i){=0A=
return parseInt( color.slice(i*2+1,i*2+3), 16 ) =0A=
});=0A=
}=0A=
this.transforms =3D this.style.map(function(pair){=0A=
var property =3D pair[0], value =3D pair[1], unit =3D null;=0A=
if (value.parseColor('#zzzzzz') !=3D '#zzzzzz') {=0A=
value =3D value.parseColor();=0A=
unit  =3D 'color';=0A=
} else if (property =3D=3D 'opacity') {=0A=
value =3D parseFloat(value);=0A=
if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))=0A=
this.element.setStyle({zoom: 1});=0A=
} else if (Element.CSS_LENGTH.test(value)) {=0A=
var components =3D value.match(/^([\+\-]?[0-9\.]+)(.*)$/);=0A=
value =3D parseFloat(components[1]);=0A=
unit =3D (components.length =3D=3D 3) ? components[2] : null;=0A=
}=0A=
var originalValue =3D this.element.getStyle(property);=0A=
return { =0A=
style: property.camelize(), =0A=
originalValue: unit=3D=3D'color' ? parseColor(originalValue) : =
parseFloat(originalValue || 0), =0A=
targetValue: unit=3D=3D'color' ? parseColor(value) : value,=0A=
unit: unit=0A=
};=0A=
}.bind(this)).reject(function(transform){=0A=
return (=0A=
(transform.originalValue =3D=3D transform.targetValue) ||=0A=
(=0A=
transform.unit !=3D 'color' &&=0A=
(isNaN(transform.originalValue) || isNaN(transform.targetValue))=0A=
)=0A=
)=0A=
});=0A=
},=0A=
update: function(position) {=0A=
var style =3D { }, transform, i =3D this.transforms.length;=0A=
while(i--)=0A=
style[(transform =3D this.transforms[i]).style] =3D =0A=
transform.unit=3D=3D'color' ? '#'+=0A=
(Math.round(transform.originalValue[0]+=0A=
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorP=
art() +=0A=
(Math.round(transform.originalValue[1]+=0A=
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorP=
art() +=0A=
(Math.round(transform.originalValue[2]+=0A=
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorP=
art() :=0A=
(transform.originalValue +=0A=
(transform.targetValue - transform.originalValue) * position).toFixed(3) =
+ =0A=
(transform.unit =3D=3D=3D null ? '' : transform.unit);=0A=
this.element.setStyle(style, true);=0A=
}=0A=
});=0A=
Effect.Transform =3D Class.create({=0A=
initialize: function(tracks){=0A=
this.tracks  =3D [];=0A=
this.options =3D arguments[1] || { };=0A=
this.addTracks(tracks);=0A=
},=0A=
addTracks: function(tracks){=0A=
tracks.each(function(track){=0A=
track =3D $H(track);=0A=
var data =3D track.values().first();=0A=
this.tracks.push($H({=0A=
ids:     track.keys().first(),=0A=
effect:  Effect.Morph,=0A=
options: { style: data }=0A=
}));=0A=
}.bind(this));=0A=
return this;=0A=
},=0A=
play: function(){=0A=
return new Effect.Parallel(=0A=
this.tracks.map(function(track){=0A=
var ids =3D track.get('ids'), effect =3D track.get('effect'), options =
=3D track.get('options');=0A=
var elements =3D [$(ids) || $$(ids)].flatten();=0A=
return elements.map(function(e){ return new effect(e, Object.extend({ =
sync:true }, options)) });=0A=
}).flatten(),=0A=
this.options=0A=
);=0A=
}=0A=
});=0A=
Element.CSS_PROPERTIES =3D $w(=0A=
'backgroundColor backgroundPosition borderBottomColor borderBottomStyle =
' + =0A=
'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +=0A=
'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +=0A=
'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +=0A=
'fontSize fontWeight height left letterSpacing lineHeight ' +=0A=
'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+=0A=
'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +=0A=
'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +=0A=
'right textIndent top width wordSpacing zIndex');=0A=
Element.CSS_LENGTH =3D =
/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;=0A=
String.__parseStyleElement =3D document.createElement('div');=0A=
String.prototype.parseStyle =3D function(){=0A=
var style, styleRules =3D $H();=0A=
if (Prototype.Browser.WebKit)=0A=
style =3D new Element('div',{style:this}).style;=0A=
else {=0A=
String.__parseStyleElement.innerHTML =3D '<div style=3D"' + this + =
'"></div>';=0A=
style =3D String.__parseStyleElement.childNodes[0].style;=0A=
}=0A=
Element.CSS_PROPERTIES.each(function(property){=0A=
if (style[property]) styleRules.set(property, style[property]); =0A=
});=0A=
if (Prototype.Browser.IE && this.include('opacity'))=0A=
styleRules.set('opacity', =
this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);=0A=
return styleRules;=0A=
};=0A=
if (document.defaultView && document.defaultView.getComputedStyle) {=0A=
Element.getStyles =3D function(element) {=0A=
var css =3D document.defaultView.getComputedStyle($(element), null);=0A=
return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {=0A=
styles[property] =3D css[property];=0A=
return styles;=0A=
});=0A=
};=0A=
} else {=0A=
Element.getStyles =3D function(element) {=0A=
element =3D $(element);=0A=
var css =3D element.currentStyle, styles;=0A=
styles =3D Element.CSS_PROPERTIES.inject({ }, function(results, =
property) {=0A=
results[property] =3D css[property];=0A=
return results;=0A=
});=0A=
if (!styles.opacity) styles.opacity =3D element.getOpacity();=0A=
return styles;=0A=
};=0A=
};=0A=
Effect.Methods =3D {=0A=
morph: function(element, style) {=0A=
element =3D $(element);=0A=
new Effect.Morph(element, Object.extend({ style: style }, arguments[2] =
|| { }));=0A=
return element;=0A=
},=0A=
visualEffect: function(element, effect, options) {=0A=
element =3D $(element)=0A=
var s =3D effect.dasherize().camelize(), klass =3D =
s.charAt(0).toUpperCase() + s.substring(1);=0A=
new Effect[klass](element, options);=0A=
return element;=0A=
},=0A=
highlight: function(element, options) {=0A=
element =3D $(element);=0A=
new Effect.Highlight(element, options);=0A=
return element;=0A=
}=0A=
};=0A=
$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+=0A=
'pulsate shake puff squish switchOff dropOut').each(=0A=
function(effect) { =0A=
Effect.Methods[effect] =3D function(element, options){=0A=
element =3D $(element);=0A=
Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, =
options);=0A=
return element;=0A=
}=0A=
}=0A=
);=0A=
$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes =
collectTextNodesIgnoreClass getStyles').each( =0A=
function(f) { Effect.Methods[f] =3D Element[f]; }=0A=
);=0A=
Element.addMethods(Effect.Methods);=0A=
/* js/lib/dragdrop.js */=0A=
// script.aculo.us dragdrop.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2007 Sammi Williams =
(http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
if(Object.isUndefined(Effect))=0A=
throw("dragdrop.js requires including script.aculo.us' effects.js =
library");=0A=
var Droppables =3D {=0A=
drops: [],=0A=
remove: function(element) {=0A=
this.drops =3D this.drops.reject(function(d) { return =
d.element=3D=3D$(element) });=0A=
},=0A=
add: function(element) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend({=0A=
greedy:     true,=0A=
hoverclass: null,=0A=
tree:       false=0A=
}, arguments[1] || { });=0A=
// cache containers=0A=
if(options.containment) {=0A=
options._containers =3D [];=0A=
var containment =3D options.containment;=0A=
if(Object.isArray(containment)) {=0A=
containment.each( function(c) { options._containers.push($(c)) });=0A=
} else {=0A=
options._containers.push($(containment));=0A=
}=0A=
}=0A=
if(options.accept) options.accept =3D [options.accept].flatten();=0A=
Element.makePositioned(element); // fix IE=0A=
options.element =3D element;=0A=
this.drops.push(options);=0A=
},=0A=
findDeepestChild: function(drops) {=0A=
deepest =3D drops[0];=0A=
for (i =3D 1; i < drops.length; ++i)=0A=
if (Element.isParent(drops[i].element, deepest.element))=0A=
deepest =3D drops[i];=0A=
return deepest;=0A=
},=0A=
isContained: function(element, drop) {=0A=
var containmentNode;=0A=
if(drop.tree) {=0A=
containmentNode =3D element.treeNode; =0A=
} else {=0A=
containmentNode =3D element.parentNode;=0A=
}=0A=
return drop._containers.detect(function(c) { return containmentNode =
=3D=3D c });=0A=
},=0A=
isAffected: function(point, element, drop) {=0A=
return (=0A=
(drop.element!=3Delement) &&=0A=
((!drop._containers) ||=0A=
this.isContained(element, drop)) &&=0A=
((!drop.accept) ||=0A=
(Element.classNames(element).detect( =0A=
function(v) { return drop.accept.include(v) } ) )) &&=0A=
Position.within(drop.element, point[0], point[1]) );=0A=
},=0A=
deactivate: function(drop) {=0A=
if(drop.hoverclass)=0A=
Element.removeClassName(drop.element, drop.hoverclass);=0A=
this.last_active =3D null;=0A=
},=0A=
activate: function(drop) {=0A=
if(drop.hoverclass)=0A=
Element.addClassName(drop.element, drop.hoverclass);=0A=
this.last_active =3D drop;=0A=
},=0A=
show: function(point, element) {=0A=
if(!this.drops.length) return;=0A=
var drop, affected =3D [];=0A=
this.drops.each( function(drop) {=0A=
if(Droppables.isAffected(point, element, drop))=0A=
affected.push(drop);=0A=
});=0A=
if(affected.length>0)=0A=
drop =3D Droppables.findDeepestChild(affected);=0A=
if(this.last_active && this.last_active !=3D drop) =
this.deactivate(this.last_active);=0A=
if (drop) {=0A=
Position.within(drop.element, point[0], point[1]);=0A=
if(drop.onHover)=0A=
drop.onHover(element, drop.element, Position.overlap(drop.overlap, =
drop.element));=0A=
if (drop !=3D this.last_active) Droppables.activate(drop);=0A=
}=0A=
},=0A=
fire: function(event, element) {=0A=
if(!this.last_active) return;=0A=
Position.prepare();=0A=
if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], =
element, this.last_active))=0A=
if (this.last_active.onDrop) {=0A=
this.last_active.onDrop(element, this.last_active.element, event); =0A=
return true; =0A=
}=0A=
},=0A=
reset: function() {=0A=
if(this.last_active)=0A=
this.deactivate(this.last_active);=0A=
}=0A=
}=0A=
var Draggables =3D {=0A=
drags: [],=0A=
observers: [],=0A=
register: function(draggable) {=0A=
if(this.drags.length =3D=3D 0) {=0A=
this.eventMouseUp   =3D this.endDrag.bindAsEventListener(this);=0A=
this.eventMouseMove =3D this.updateDrag.bindAsEventListener(this);=0A=
this.eventKeypress  =3D this.keyPress.bindAsEventListener(this);=0A=
Event.observe(document, "mouseup", this.eventMouseUp);=0A=
Event.observe(document, "mousemove", this.eventMouseMove);=0A=
Event.observe(document, "keypress", this.eventKeypress);=0A=
}=0A=
this.drags.push(draggable);=0A=
},=0A=
unregister: function(draggable) {=0A=
this.drags =3D this.drags.reject(function(d) { return d=3D=3Ddraggable =
});=0A=
if(this.drags.length =3D=3D 0) {=0A=
Event.stopObserving(document, "mouseup", this.eventMouseUp);=0A=
Event.stopObserving(document, "mousemove", this.eventMouseMove);=0A=
Event.stopObserving(document, "keypress", this.eventKeypress);=0A=
}=0A=
},=0A=
activate: function(draggable) {=0A=
if(draggable.options.delay) { =0A=
this._timeout =3D setTimeout(function() { =0A=
Draggables._timeout =3D null; =0A=
window.focus(); =0A=
Draggables.activeDraggable =3D draggable; =0A=
}.bind(this), draggable.options.delay); =0A=
} else {=0A=
window.focus(); // allows keypress events if window isn't currently =
focused, fails for Safari=0A=
this.activeDraggable =3D draggable;=0A=
}=0A=
},=0A=
deactivate: function() {=0A=
this.activeDraggable =3D null;=0A=
},=0A=
updateDrag: function(event) {=0A=
if(!this.activeDraggable) return;=0A=
var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
// Mozilla-based browsers fire successive mousemove events with=0A=
// the same coordinates, prevent needless redrawing (moz bug?)=0A=
if(this._lastPointer && (this._lastPointer.inspect() =3D=3D =
pointer.inspect())) return;=0A=
this._lastPointer =3D pointer;=0A=
this.activeDraggable.updateDrag(event, pointer);=0A=
},=0A=
endDrag: function(event) {=0A=
if(this._timeout) { =0A=
clearTimeout(this._timeout); =0A=
this._timeout =3D null; =0A=
}=0A=
if(!this.activeDraggable) return;=0A=
this._lastPointer =3D null;=0A=
this.activeDraggable.endDrag(event);=0A=
this.activeDraggable =3D null;=0A=
},=0A=
keyPress: function(event) {=0A=
if(this.activeDraggable)=0A=
this.activeDraggable.keyPress(event);=0A=
},=0A=
addObserver: function(observer) {=0A=
this.observers.push(observer);=0A=
this._cacheObserverCallbacks();=0A=
},=0A=
removeObserver: function(element) {  // element instead of observer =
fixes mem leaks=0A=
this.observers =3D this.observers.reject( function(o) { return =
o.element=3D=3Delement });=0A=
this._cacheObserverCallbacks();=0A=
},=0A=
notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', =
'onDrag'=0A=
if(this[eventName+'Count'] > 0)=0A=
this.observers.each( function(o) {=0A=
if(o[eventName]) o[eventName](eventName, draggable, event);=0A=
});=0A=
if(draggable.options[eventName]) draggable.options[eventName](draggable, =
event);=0A=
},=0A=
_cacheObserverCallbacks: function() {=0A=
['onStart','onEnd','onDrag'].each( function(eventName) {=0A=
Draggables[eventName+'Count'] =3D Draggables.observers.select(=0A=
function(o) { return o[eventName]; }=0A=
).length;=0A=
});=0A=
}=0A=
}=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
var Draggable =3D Class.create({=0A=
initialize: function(element) {=0A=
var defaults =3D {=0A=
handle: false,=0A=
reverteffect: function(element, top_offset, left_offset) {=0A=
var dur =3D =
Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;=0A=
new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: =
dur,=0A=
queue: {scope:'_draggable', position:'end'}=0A=
});=0A=
},=0A=
endeffect: function(element) {=0A=
var toOpacity =3D Object.isNumber(element._opacity) ? element._opacity : =
1.0;=0A=
new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, =0A=
queue: {scope:'_draggable', position:'end'},=0A=
afterFinish: function(){ =0A=
Draggable._dragging[element] =3D false =0A=
}=0A=
}); =0A=
},=0A=
zindex: 1000,=0A=
revert: false,=0A=
quiet: false,=0A=
scroll: false,=0A=
scrollSensitivity: 20,=0A=
scrollSpeed: 15,=0A=
snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }=0A=
delay: 0=0A=
};=0A=
if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))=0A=
Object.extend(defaults, {=0A=
starteffect: function(element) {=0A=
element._opacity =3D Element.getOpacity(element);=0A=
Draggable._dragging[element] =3D true;=0A=
new Effect.Opacity(element, {duration:0.2, from:element._opacity, =
to:0.7}); =0A=
}=0A=
});=0A=
var options =3D Object.extend(defaults, arguments[1] || { });=0A=
this.element =3D $(element);=0A=
if(options.handle && Object.isString(options.handle))=0A=
this.handle =3D this.element.down('.'+options.handle, 0);=0A=
if(!this.handle) this.handle =3D $(options.handle);=0A=
if(!this.handle) this.handle =3D this.element;=0A=
if(options.scroll && !options.scroll.scrollTo && =
!options.scroll.outerHTML) {=0A=
options.scroll =3D $(options.scroll);=0A=
this._isScrollChild =3D Element.childOf(this.element, options.scroll);=0A=
}=0A=
Element.makePositioned(this.element); // fix IE    =0A=
this.options  =3D options;=0A=
this.dragging =3D false;   =0A=
this.eventMouseDown =3D this.initDrag.bindAsEventListener(this);=0A=
Event.observe(this.handle, "mousedown", this.eventMouseDown);=0A=
Draggables.register(this);=0A=
},=0A=
destroy: function() {=0A=
Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);=0A=
Draggables.unregister(this);=0A=
},=0A=
currentDelta: function() {=0A=
return([=0A=
parseInt(Element.getStyle(this.element,'left') || '0'),=0A=
parseInt(Element.getStyle(this.element,'top') || '0')]);=0A=
},=0A=
initDrag: function(event) {=0A=
if(!Object.isUndefined(Draggable._dragging[this.element]) &&=0A=
Draggable._dragging[this.element]) return;=0A=
if(Event.isLeftClick(event)) {    =0A=
// abort on form elements, fixes a Firefox issue=0A=
var src =3D Event.element(event);=0A=
if((tag_name =3D src.tagName.toUpperCase()) && (=0A=
tag_name=3D=3D'INPUT' ||=0A=
tag_name=3D=3D'SELECT' ||=0A=
tag_name=3D=3D'OPTION' ||=0A=
tag_name=3D=3D'BUTTON' ||=0A=
tag_name=3D=3D'TEXTAREA')) return;=0A=
var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
var pos     =3D Position.cumulativeOffset(this.element);=0A=
this.offset =3D [0,1].map( function(i) { return (pointer[i] - pos[i]) });=0A=
Draggables.activate(this);=0A=
Event.stop(event);=0A=
}=0A=
},=0A=
startDrag: function(event) {=0A=
this.dragging =3D true;=0A=
if(!this.delta)=0A=
this.delta =3D this.currentDelta();=0A=
if(this.options.zindex) {=0A=
this.originalZ =3D parseInt(Element.getStyle(this.element,'z-index') || =
0);=0A=
this.element.style.zIndex =3D this.options.zindex;=0A=
}=0A=
if(this.options.ghosting) {=0A=
this._clone =3D this.element.cloneNode(true);=0A=
this.element._originallyAbsolute =3D (this.element.getStyle('position') =
=3D=3D 'absolute');=0A=
if (!this.element._originallyAbsolute)=0A=
Position.absolutize(this.element);=0A=
this.element.parentNode.insertBefore(this._clone, this.element);=0A=
}=0A=
if(this.options.scroll) {=0A=
if (this.options.scroll =3D=3D window) {=0A=
var where =3D this._getWindowScroll(this.options.scroll);=0A=
this.originalScrollLeft =3D where.left;=0A=
this.originalScrollTop =3D where.top;=0A=
} else {=0A=
this.originalScrollLeft =3D this.options.scroll.scrollLeft;=0A=
this.originalScrollTop =3D this.options.scroll.scrollTop;=0A=
}=0A=
}=0A=
Draggables.notify('onStart', this, event);=0A=
if(this.options.starteffect) this.options.starteffect(this.element);=0A=
},=0A=
updateDrag: function(event, pointer) {=0A=
if(!this.dragging) this.startDrag(event);=0A=
if(!this.options.quiet){=0A=
Position.prepare();=0A=
Droppables.show(pointer, this.element);=0A=
}=0A=
Draggables.notify('onDrag', this, event);=0A=
this.draw(pointer);=0A=
if(this.options.change) this.options.change(this);=0A=
if(this.options.scroll) {=0A=
this.stopScrolling();=0A=
var p;=0A=
if (this.options.scroll =3D=3D window) {=0A=
with(this._getWindowScroll(this.options.scroll)) { p =3D [ left, top, =
left+width, top+height ]; }=0A=
} else {=0A=
p =3D Position.page(this.options.scroll);=0A=
p[0] +=3D this.options.scroll.scrollLeft + Position.deltaX;=0A=
p[1] +=3D this.options.scroll.scrollTop + Position.deltaY;=0A=
p.push(p[0]+this.options.scroll.offsetWidth);=0A=
p.push(p[1]+this.options.scroll.offsetHeight);=0A=
}=0A=
var speed =3D [0,0];=0A=
if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] =3D =
pointer[0]-(p[0]+this.options.scrollSensitivity);=0A=
if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] =3D =
pointer[1]-(p[1]+this.options.scrollSensitivity);=0A=
if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] =3D =
pointer[0]-(p[2]-this.options.scrollSensitivity);=0A=
if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] =3D =
pointer[1]-(p[3]-this.options.scrollSensitivity);=0A=
this.startScrolling(speed);=0A=
}=0A=
// fix AppleWebKit rendering=0A=
if(Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
Event.stop(event);=0A=
},=0A=
finishDrag: function(event, success) {=0A=
this.dragging =3D false;=0A=
if(this.options.quiet){=0A=
Position.prepare();=0A=
var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
Droppables.show(pointer, this.element);=0A=
}=0A=
if(this.options.ghosting) {=0A=
if (!this.element._originallyAbsolute)=0A=
Position.relativize(this.element);=0A=
delete this.element._originallyAbsolute;=0A=
Element.remove(this._clone);=0A=
this._clone =3D null;=0A=
}=0A=
var dropped =3D false; =0A=
if(success) { =0A=
dropped =3D Droppables.fire(event, this.element); =0A=
if (!dropped) dropped =3D false; =0A=
}=0A=
if(dropped && this.options.onDropped) =
this.options.onDropped(this.element);=0A=
Draggables.notify('onEnd', this, event);=0A=
var revert =3D this.options.revert;=0A=
if(revert && Object.isFunction(revert)) revert =3D revert(this.element);=0A=
var d =3D this.currentDelta();=0A=
if(revert && this.options.reverteffect) {=0A=
if (dropped =3D=3D 0 || revert !=3D 'failure')=0A=
this.options.reverteffect(this.element,=0A=
d[1]-this.delta[1], d[0]-this.delta[0]);=0A=
} else {=0A=
this.delta =3D d;=0A=
}=0A=
if(this.options.zindex)=0A=
this.element.style.zIndex =3D this.originalZ;=0A=
if(this.options.endeffect) =0A=
this.options.endeffect(this.element);=0A=
Draggables.deactivate(this);=0A=
Droppables.reset();=0A=
},=0A=
keyPress: function(event) {=0A=
if(event.keyCode!=3DEvent.KEY_ESC) return;=0A=
this.finishDrag(event, false);=0A=
Event.stop(event);=0A=
},=0A=
endDrag: function(event) {=0A=
if(!this.dragging) return;=0A=
this.stopScrolling();=0A=
this.finishDrag(event, true);=0A=
Event.stop(event);=0A=
},=0A=
draw: function(point) {=0A=
var pos =3D Position.cumulativeOffset(this.element);=0A=
if(this.options.ghosting) {=0A=
var r   =3D Position.realOffset(this.element);=0A=
pos[0] +=3D r[0] - Position.deltaX; pos[1] +=3D r[1] - Position.deltaY;=0A=
}=0A=
var d =3D this.currentDelta();=0A=
pos[0] -=3D d[0]; pos[1] -=3D d[1];=0A=
if(this.options.scroll && (this.options.scroll !=3D window && =
this._isScrollChild)) {=0A=
pos[0] -=3D this.options.scroll.scrollLeft-this.originalScrollLeft;=0A=
pos[1] -=3D this.options.scroll.scrollTop-this.originalScrollTop;=0A=
}=0A=
var p =3D [0,1].map(function(i){ =0A=
return (point[i]-pos[i]-this.offset[i]) =0A=
}.bind(this));=0A=
if(this.options.snap) {=0A=
if(Object.isFunction(this.options.snap)) {=0A=
p =3D this.options.snap(p[0],p[1],this);=0A=
} else {=0A=
if(Object.isArray(this.options.snap)) {=0A=
p =3D p.map( function(v, i) {=0A=
return (v/this.options.snap[i]).round()*this.options.snap[i] =
}.bind(this))=0A=
} else {=0A=
p =3D p.map( function(v) {=0A=
return (v/this.options.snap).round()*this.options.snap }.bind(this))=0A=
}=0A=
}}=0A=
var style =3D this.element.style;=0A=
if((!this.options.constraint) || =
(this.options.constraint=3D=3D'horizontal'))=0A=
style.left =3D p[0] + "px";=0A=
if((!this.options.constraint) || =
(this.options.constraint=3D=3D'vertical'))=0A=
style.top  =3D p[1] + "px";=0A=
if(style.visibility=3D=3D"hidden") style.visibility =3D ""; // fix gecko =
rendering=0A=
},=0A=
stopScrolling: function() {=0A=
if(this.scrollInterval) {=0A=
clearInterval(this.scrollInterval);=0A=
this.scrollInterval =3D null;=0A=
Draggables._lastScrollPointer =3D null;=0A=
}=0A=
},=0A=
startScrolling: function(speed) {=0A=
if(!(speed[0] || speed[1])) return;=0A=
this.scrollSpeed =3D =
[speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];=0A=
this.lastScrolled =3D new Date();=0A=
this.scrollInterval =3D setInterval(this.scroll.bind(this), 10);=0A=
},=0A=
scroll: function() {=0A=
var current =3D new Date();=0A=
var delta =3D current - this.lastScrolled;=0A=
this.lastScrolled =3D current;=0A=
if(this.options.scroll =3D=3D window) {=0A=
with (this._getWindowScroll(this.options.scroll)) {=0A=
if (this.scrollSpeed[0] || this.scrollSpeed[1]) {=0A=
var d =3D delta / 1000;=0A=
this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + =
d*this.scrollSpeed[1] );=0A=
}=0A=
}=0A=
} else {=0A=
this.options.scroll.scrollLeft +=3D this.scrollSpeed[0] * delta / 1000;=0A=
this.options.scroll.scrollTop  +=3D this.scrollSpeed[1] * delta / 1000;=0A=
}=0A=
Position.prepare();=0A=
Droppables.show(Draggables._lastPointer, this.element);=0A=
Draggables.notify('onDrag', this);=0A=
if (this._isScrollChild) {=0A=
Draggables._lastScrollPointer =3D Draggables._lastScrollPointer || =
$A(Draggables._lastPointer);=0A=
Draggables._lastScrollPointer[0] +=3D this.scrollSpeed[0] * delta / 1000;=0A=
Draggables._lastScrollPointer[1] +=3D this.scrollSpeed[1] * delta / 1000;=0A=
if (Draggables._lastScrollPointer[0] < 0)=0A=
Draggables._lastScrollPointer[0] =3D 0;=0A=
if (Draggables._lastScrollPointer[1] < 0)=0A=
Draggables._lastScrollPointer[1] =3D 0;=0A=
this.draw(Draggables._lastScrollPointer);=0A=
}=0A=
if(this.options.change) this.options.change(this);=0A=
},=0A=
_getWindowScroll: function(w) {=0A=
var T, L, W, H;=0A=
with (w.document) {=0A=
if (w.document.documentElement && documentElement.scrollTop) {=0A=
T =3D documentElement.scrollTop;=0A=
L =3D documentElement.scrollLeft;=0A=
} else if (w.document.body) {=0A=
T =3D body.scrollTop;=0A=
L =3D body.scrollLeft;=0A=
}=0A=
if (w.innerWidth) {=0A=
W =3D w.innerWidth;=0A=
H =3D w.innerHeight;=0A=
} else if (w.document.documentElement && documentElement.clientWidth) {=0A=
W =3D documentElement.clientWidth;=0A=
H =3D documentElement.clientHeight;=0A=
} else {=0A=
W =3D body.offsetWidth;=0A=
H =3D body.offsetHeight=0A=
}=0A=
}=0A=
return { top: T, left: L, width: W, height: H };=0A=
}=0A=
});=0A=
Draggable._dragging =3D { };=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
var SortableObserver =3D Class.create({=0A=
initialize: function(element, observer) {=0A=
this.element   =3D $(element);=0A=
this.observer  =3D observer;=0A=
this.lastValue =3D Sortable.serialize(this.element);=0A=
},=0A=
onStart: function() {=0A=
this.lastValue =3D Sortable.serialize(this.element);=0A=
},=0A=
onEnd: function() {=0A=
Sortable.unmark();=0A=
if(this.lastValue !=3D Sortable.serialize(this.element))=0A=
this.observer(this.element)=0A=
}=0A=
});=0A=
var Sortable =3D {=0A=
SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,=0A=
sortables: { },=0A=
_findRootElement: function(element) {=0A=
while (element.tagName.toUpperCase() !=3D "BODY") {  =0A=
if(element.id && Sortable.sortables[element.id]) return element;=0A=
element =3D element.parentNode;=0A=
}=0A=
},=0A=
options: function(element) {=0A=
element =3D Sortable._findRootElement($(element));=0A=
if(!element) return;=0A=
return Sortable.sortables[element.id];=0A=
},=0A=
destroy: function(element){=0A=
var s =3D Sortable.options(element);=0A=
if(s) {=0A=
Draggables.removeObserver(s.element);=0A=
s.droppables.each(function(d){ Droppables.remove(d) });=0A=
s.draggables.invoke('destroy');=0A=
delete Sortable.sortables[s.element.id];=0A=
}=0A=
},=0A=
create: function(element) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend({ =0A=
element:     element,=0A=
tag:         'li',       // assumes li children, override with tag: =
'tagname'=0A=
dropOnEmpty: false,=0A=
tree:        false,=0A=
treeTag:     'ul',=0A=
overlap:     'vertical', // one of 'vertical', 'horizontal'=0A=
constraint:  'vertical', // one of 'vertical', 'horizontal', false=0A=
containment: element,    // also takes array of elements (or id's); or =
false=0A=
handle:      false,      // or a CSS class=0A=
only:        false,=0A=
delay:       0,=0A=
hoverclass:  null,=0A=
ghosting:    false,=0A=
quiet:       false, =0A=
scroll:      false,=0A=
scrollSensitivity: 20,=0A=
scrollSpeed: 15,=0A=
format:      this.SERIALIZE_RULE,=0A=
// these take arrays of elements or ids and can be =0A=
// used for better initialization performance=0A=
elements:    false,=0A=
handles:     false,=0A=
onChange:    Prototype.emptyFunction,=0A=
onUpdate:    Prototype.emptyFunction=0A=
}, arguments[1] || { });=0A=
// clear any old sortable with same element=0A=
this.destroy(element);=0A=
// build options for the draggables=0A=
var options_for_draggable =3D {=0A=
revert:      true,=0A=
quiet:       options.quiet,=0A=
scroll:      options.scroll,=0A=
scrollSpeed: options.scrollSpeed,=0A=
scrollSensitivity: options.scrollSensitivity,=0A=
delay:       options.delay,=0A=
ghosting:    options.ghosting,=0A=
constraint:  options.constraint,=0A=
handle:      options.handle };=0A=
if(options.starteffect)=0A=
options_for_draggable.starteffect =3D options.starteffect;=0A=
if(options.reverteffect)=0A=
options_for_draggable.reverteffect =3D options.reverteffect;=0A=
else=0A=
if(options.ghosting) options_for_draggable.reverteffect =3D =
function(element) {=0A=
element.style.top  =3D 0;=0A=
element.style.left =3D 0;=0A=
};=0A=
if(options.endeffect)=0A=
options_for_draggable.endeffect =3D options.endeffect;=0A=
if(options.zindex)=0A=
options_for_draggable.zindex =3D options.zindex;=0A=
// build options for the droppables  =0A=
var options_for_droppable =3D {=0A=
overlap:     options.overlap,=0A=
containment: options.containment,=0A=
tree:        options.tree,=0A=
hoverclass:  options.hoverclass,=0A=
onHover:     Sortable.onHover=0A=
}=0A=
var options_for_tree =3D {=0A=
onHover:      Sortable.onEmptyHover,=0A=
overlap:      options.overlap,=0A=
containment:  options.containment,=0A=
hoverclass:   options.hoverclass=0A=
}=0A=
// fix for gecko engine=0A=
Element.cleanWhitespace(element); =0A=
options.draggables =3D [];=0A=
options.droppables =3D [];=0A=
// drop on empty handling=0A=
if(options.dropOnEmpty || options.tree) {=0A=
Droppables.add(element, options_for_tree);=0A=
options.droppables.push(element);=0A=
}=0A=
(options.elements || this.findElements(element, options) || []).each( =
function(e,i) {=0A=
var handle =3D options.handles ? $(options.handles[i]) :=0A=
(options.handle ? $(e).select('.' + options.handle)[0] : e); =0A=
options.draggables.push(=0A=
new Draggable(e, Object.extend(options_for_draggable, { handle: handle =
})));=0A=
Droppables.add(e, options_for_droppable);=0A=
if(options.tree) e.treeNode =3D element;=0A=
options.droppables.push(e);      =0A=
});=0A=
if(options.tree) {=0A=
(Sortable.findTreeElements(element, options) || []).each( function(e) {=0A=
Droppables.add(e, options_for_tree);=0A=
e.treeNode =3D element;=0A=
options.droppables.push(e);=0A=
});=0A=
}=0A=
// keep reference=0A=
this.sortables[element.id] =3D options;=0A=
// for onupdate=0A=
Draggables.addObserver(new SortableObserver(element, options.onUpdate));=0A=
},=0A=
// return all suitable-for-sortable elements in a guaranteed order=0A=
findElements: function(element, options) {=0A=
return Element.findChildren(=0A=
element, options.only, options.tree ? true : false, options.tag);=0A=
},=0A=
findTreeElements: function(element, options) {=0A=
return Element.findChildren(=0A=
element, options.only, options.tree ? true : false, options.treeTag);=0A=
},=0A=
onHover: function(element, dropon, overlap) {=0A=
if(Element.isParent(dropon, element)) return;=0A=
if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {=0A=
return;=0A=
} else if(overlap>0.5) {=0A=
Sortable.mark(dropon, 'before');=0A=
if(dropon.previousSibling !=3D element) {=0A=
var oldParentNode =3D element.parentNode;=0A=
element.style.visibility =3D "hidden"; // fix gecko rendering=0A=
dropon.parentNode.insertBefore(element, dropon);=0A=
if(dropon.parentNode!=3DoldParentNode) =0A=
Sortable.options(oldParentNode).onChange(element);=0A=
Sortable.options(dropon.parentNode).onChange(element);=0A=
}=0A=
} else {=0A=
Sortable.mark(dropon, 'after');=0A=
var nextElement =3D dropon.nextSibling || null;=0A=
if(nextElement !=3D element) {=0A=
var oldParentNode =3D element.parentNode;=0A=
element.style.visibility =3D "hidden"; // fix gecko rendering=0A=
dropon.parentNode.insertBefore(element, nextElement);=0A=
if(dropon.parentNode!=3DoldParentNode) =0A=
Sortable.options(oldParentNode).onChange(element);=0A=
Sortable.options(dropon.parentNode).onChange(element);=0A=
}=0A=
}=0A=
},=0A=
onEmptyHover: function(element, dropon, overlap) {=0A=
var oldParentNode =3D element.parentNode;=0A=
var droponOptions =3D Sortable.options(dropon);=0A=
if(!Element.isParent(dropon, element)) {=0A=
var index;=0A=
var children =3D Sortable.findElements(dropon, {tag: droponOptions.tag, =
only: droponOptions.only});=0A=
var child =3D null;=0A=
if(children) {=0A=
var offset =3D Element.offsetSize(dropon, droponOptions.overlap) * (1.0 =
- overlap);=0A=
for (index =3D 0; index < children.length; index +=3D 1) {=0A=
if (offset - Element.offsetSize (children[index], droponOptions.overlap) =
>=3D 0) {=0A=
offset -=3D Element.offsetSize (children[index], droponOptions.overlap);=0A=
} else if (offset - (Element.offsetSize (children[index], =
droponOptions.overlap) / 2) >=3D 0) {=0A=
child =3D index + 1 < children.length ? children[index + 1] : null;=0A=
break;=0A=
} else {=0A=
child =3D children[index];=0A=
break;=0A=
}=0A=
}=0A=
}=0A=
dropon.insertBefore(element, child);=0A=
Sortable.options(oldParentNode).onChange(element);=0A=
droponOptions.onChange(element);=0A=
}=0A=
},=0A=
unmark: function() {=0A=
if(Sortable._marker) Sortable._marker.hide();=0A=
},=0A=
mark: function(dropon, position) {=0A=
// mark on ghosting only=0A=
var sortable =3D Sortable.options(dropon.parentNode);=0A=
if(sortable && !sortable.ghosting) return; =0A=
if(!Sortable._marker) {=0A=
Sortable._marker =3D =0A=
($('dropmarker') || Element.extend(document.createElement('DIV'))).=0A=
hide().addClassName('dropmarker').setStyle({position:'absolute'});=0A=
document.getElementsByTagName("body").item(0).appendChild(Sortable._marke=
r);=0A=
}    =0A=
var offsets =3D Position.cumulativeOffset(dropon);=0A=
Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + =
'px'});=0A=
if(position=3D=3D'after')=0A=
if(sortable.overlap =3D=3D 'horizontal') =0A=
Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + =
'px'});=0A=
else=0A=
Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + =
'px'});=0A=
Sortable._marker.show();=0A=
},=0A=
_tree: function(element, options, parent) {=0A=
var children =3D Sortable.findElements(element, options) || [];=0A=
for (var i =3D 0; i < children.length; ++i) {=0A=
var match =3D children[i].id.match(options.format);=0A=
if (!match) continue;=0A=
var child =3D {=0A=
id: encodeURIComponent(match ? match[1] : null),=0A=
element: element,=0A=
parent: parent,=0A=
children: [],=0A=
position: parent.children.length,=0A=
container: $(children[i]).down(options.treeTag)=0A=
}=0A=
/* Get the element containing the children and recurse over it */=0A=
if (child.container)=0A=
this._tree(child.container, options, child)=0A=
parent.children.push (child);=0A=
}=0A=
return parent; =0A=
},=0A=
tree: function(element) {=0A=
element =3D $(element);=0A=
var sortableOptions =3D this.options(element);=0A=
var options =3D Object.extend({=0A=
tag: sortableOptions.tag,=0A=
treeTag: sortableOptions.treeTag,=0A=
only: sortableOptions.only,=0A=
name: element.id,=0A=
format: sortableOptions.format=0A=
}, arguments[1] || { });=0A=
var root =3D {=0A=
id: null,=0A=
parent: null,=0A=
children: [],=0A=
container: element,=0A=
position: 0=0A=
}=0A=
return Sortable._tree(element, options, root);=0A=
},=0A=
/* Construct a [i] index for a particular node */=0A=
_constructIndex: function(node) {=0A=
var index =3D '';=0A=
do {=0A=
if (node.id) index =3D '[' + node.position + ']' + index;=0A=
} while ((node =3D node.parent) !=3D null);=0A=
return index;=0A=
},=0A=
sequence: function(element) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend(this.options(element), arguments[1] || { =
});=0A=
return $(this.findElements(element, options) || []).map( function(item) {=0A=
return item.id.match(options.format) ? item.id.match(options.format)[1] =
: '';=0A=
});=0A=
},=0A=
setSequence: function(element, new_sequence) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend(this.options(element), arguments[2] || { =
});=0A=
var nodeMap =3D { };=0A=
this.findElements(element, options).each( function(n) {=0A=
if (n.id.match(options.format))=0A=
nodeMap[n.id.match(options.format)[1]] =3D [n, n.parentNode];=0A=
n.parentNode.removeChild(n);=0A=
});=0A=
new_sequence.each(function(ident) {=0A=
var n =3D nodeMap[ident];=0A=
if (n) {=0A=
n[1].appendChild(n[0]);=0A=
delete nodeMap[ident];=0A=
}=0A=
});=0A=
},=0A=
serialize: function(element) {=0A=
element =3D $(element);=0A=
var options =3D Object.extend(Sortable.options(element), arguments[1] || =
{ });=0A=
var name =3D encodeURIComponent(=0A=
(arguments[1] && arguments[1].name) ? arguments[1].name : element.id);=0A=
if (options.tree) {=0A=
return Sortable.tree(element, arguments[1]).children.map( function =
(item) {=0A=
return [name + Sortable._constructIndex(item) + "[id]=3D" + =0A=
encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));=0A=
}).flatten().join('&');=0A=
} else {=0A=
return Sortable.sequence(element, arguments[1]).map( function(item) {=0A=
return name + "[]=3D" + encodeURIComponent(item);=0A=
}).join('&');=0A=
}=0A=
}=0A=
}=0A=
// Returns true if child is contained within element=0A=
Element.isParent =3D function(child, element) {=0A=
if (!child.parentNode || child =3D=3D element) return false;=0A=
if (child.parentNode =3D=3D element) return true;=0A=
return Element.isParent(child.parentNode, element);=0A=
}=0A=
Element.findChildren =3D function(element, only, recursive, tagName) {   =0A=
if(!element.hasChildNodes()) return null;=0A=
tagName =3D tagName.toUpperCase();=0A=
if(only) only =3D [only].flatten();=0A=
var elements =3D [];=0A=
$A(element.childNodes).each( function(e) {=0A=
if(e.tagName && e.tagName.toUpperCase()=3D=3DtagName &&=0A=
(!only || (Element.classNames(e).detect(function(v) { return =
only.include(v) }))))=0A=
elements.push(e);=0A=
if(recursive) {=0A=
var grandchildren =3D Element.findChildren(e, only, recursive, tagName);=0A=
if(grandchildren) elements.push(grandchildren);=0A=
}=0A=
});=0A=
return (elements.length>0 ? elements.flatten() : []);=0A=
}=0A=
Element.offsetSize =3D function (element, type) {=0A=
return element['offset' + ((type=3D=3D'vertical' || type=3D=3D'height') =
? 'Height' : 'Width')];=0A=
}=0A=
/* js/lib/controls.js */=0A=
// script.aculo.us controls.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2007 Ivan Krstic =
(http://blogs.law.harvard.edu/ivan)=0A=
//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)=0A=
// Contributors:=0A=
//  Richard Livsey=0A=
//  Rahul Bhargava=0A=
//  Rob Wills=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
// Autocompleter.Base handles all the autocompletion functionality =0A=
// that's independent of the data source for autocompletion. This=0A=
// includes drawing the autocompletion menu, observing keyboard=0A=
// and mouse events, and similar.=0A=
//=0A=
// Specific autocompleters need to provide, at the very least, =0A=
// a getUpdatedChoices function that will be invoked every time=0A=
// the text inside the monitored textbox changes. This method =0A=
// should get the text for which to provide autocompletion by=0A=
// invoking this.getToken(), NOT by directly accessing=0A=
// this.element.value. This is to allow incremental tokenized=0A=
// autocompletion. Specific auto-completion logic (AJAX, etc)=0A=
// belongs in getUpdatedChoices.=0A=
//=0A=
// Tokenized incremental autocompletion is enabled automatically=0A=
// when an autocompleter is instantiated with the 'tokens' option=0A=
// in the options parameter, e.g.:=0A=
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });=0A=
// will incrementally autocomplete with a comma as the token.=0A=
// Additionally, ',' in the above example can be replaced with=0A=
// a token array, e.g. { tokens: [',', '\n'] } which=0A=
// enables autocompletion on multiple tokens. This is most =0A=
// useful when one of the tokens is \n (a newline), as it =0A=
// allows smart autocompletion after linebreaks.=0A=
if(typeof Effect =3D=3D 'undefined')=0A=
throw("controls.js requires including script.aculo.us' effects.js =
library");=0A=
var Autocompleter =3D { }=0A=
Autocompleter.Base =3D Class.create({=0A=
baseInitialize: function(element, update, options) {=0A=
element          =3D $(element)=0A=
this.element     =3D element; =0A=
this.update      =3D $(update);  =0A=
this.hasFocus    =3D false; =0A=
this.changed     =3D false; =0A=
this.active      =3D false; =0A=
this.index       =3D 0;     =0A=
this.entryCount  =3D 0;=0A=
this.oldElementValue =3D this.element.value;=0A=
if(this.setOptions)=0A=
this.setOptions(options);=0A=
else=0A=
this.options =3D options || { };=0A=
this.options.paramName    =3D this.options.paramName || =
this.element.name;=0A=
this.options.tokens       =3D this.options.tokens || [];=0A=
this.options.frequency    =3D this.options.frequency || 0.4;=0A=
this.options.minChars     =3D this.options.minChars || 1;=0A=
this.options.onShow       =3D this.options.onShow || =0A=
function(element, update){ =0A=
if(!update.style.position || update.style.position=3D=3D'absolute') {=0A=
update.style.position =3D 'absolute';=0A=
Position.clone(element, update, {=0A=
setHeight: false, =0A=
offsetTop: element.offsetHeight=0A=
});=0A=
}=0A=
Effect.Appear(update,{duration:0.15});=0A=
};=0A=
this.options.onHide =3D this.options.onHide || =0A=
function(element, update){ new Effect.Fade(update,{duration:0.15}) };=0A=
if(typeof(this.options.tokens) =3D=3D 'string') =0A=
this.options.tokens =3D new Array(this.options.tokens);=0A=
// Force carriage returns as token delimiters anyway=0A=
if (!this.options.tokens.include('\n'))=0A=
this.options.tokens.push('\n');=0A=
this.observer =3D null;=0A=
this.element.setAttribute('autocomplete','off');=0A=
Element.hide(this.update);=0A=
Event.observe(this.element, 'blur', =
this.onBlur.bindAsEventListener(this));=0A=
Event.observe(this.element, 'keydown', =
this.onKeyPress.bindAsEventListener(this));=0A=
},=0A=
show: function() {=0A=
if(Element.getStyle(this.update, 'display')=3D=3D'none') =
this.options.onShow(this.element, this.update);=0A=
if(!this.iefix && =0A=
(Prototype.Browser.IE) &&=0A=
(Element.getStyle(this.update, 'position')=3D=3D'absolute')) {=0A=
new Insertion.After(this.update, =0A=
'<iframe id=3D"' + this.update.id + '_iefix" '+=0A=
'style=3D"display:none;position:absolute;filter:progid:DXImageTransform.M=
icrosoft.Alpha(opacity=3D0);" ' +=0A=
'src=3D"javascript:false;" frameborder=3D"0" =
scrolling=3D"no"></iframe>');=0A=
this.iefix =3D $(this.update.id+'_iefix');=0A=
}=0A=
if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);=0A=
},=0A=
fixIEOverlapping: function() {=0A=
Position.clone(this.update, this.iefix, =
{setTop:(!this.update.style.height)});=0A=
this.iefix.style.zIndex =3D 1;=0A=
this.update.style.zIndex =3D 2;=0A=
Element.show(this.iefix);=0A=
},=0A=
hide: function() {=0A=
this.stopIndicator();=0A=
if(Element.getStyle(this.update, 'display')!=3D'none') =
this.options.onHide(this.element, this.update);=0A=
if(this.iefix) Element.hide(this.iefix);=0A=
},=0A=
startIndicator: function() {=0A=
if(this.options.indicator) Element.show(this.options.indicator);=0A=
},=0A=
stopIndicator: function() {=0A=
if(this.options.indicator) Element.hide(this.options.indicator);=0A=
},=0A=
onKeyPress: function(event) {=0A=
if(this.active)=0A=
switch(event.keyCode) {=0A=
case Event.KEY_TAB:=0A=
case Event.KEY_RETURN:=0A=
this.selectEntry();=0A=
Event.stop(event);=0A=
case Event.KEY_ESC:=0A=
this.hide();=0A=
this.active =3D false;=0A=
Event.stop(event);=0A=
return;=0A=
case Event.KEY_LEFT:=0A=
case Event.KEY_RIGHT:=0A=
return;=0A=
case Event.KEY_UP:=0A=
this.markPrevious();=0A=
this.render();=0A=
Event.stop(event);=0A=
return;=0A=
case Event.KEY_DOWN:=0A=
this.markNext();=0A=
this.render();=0A=
Event.stop(event);=0A=
return;=0A=
}=0A=
else =0A=
if(event.keyCode=3D=3DEvent.KEY_TAB || =
event.keyCode=3D=3DEvent.KEY_RETURN || =0A=
(Prototype.Browser.WebKit > 0 && event.keyCode =3D=3D 0)) return;=0A=
this.changed =3D true;=0A=
this.hasFocus =3D true;=0A=
if(this.observer) clearTimeout(this.observer);=0A=
this.observer =3D =0A=
setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);=0A=
},=0A=
activate: function() {=0A=
this.changed =3D false;=0A=
this.hasFocus =3D true;=0A=
this.getUpdatedChoices();=0A=
},=0A=
onHover: function(event) {=0A=
var element =3D Event.findElement(event, 'LI');=0A=
if(this.index !=3D element.autocompleteIndex) =0A=
{=0A=
this.index =3D element.autocompleteIndex;=0A=
this.render();=0A=
}=0A=
Event.stop(event);=0A=
},=0A=
onClick: function(event) {=0A=
var element =3D Event.findElement(event, 'LI');=0A=
this.index =3D element.autocompleteIndex;=0A=
this.selectEntry();=0A=
this.hide();=0A=
},=0A=
onBlur: function(event) {=0A=
// needed to make click events working=0A=
setTimeout(this.hide.bind(this), 250);=0A=
this.hasFocus =3D false;=0A=
this.active =3D false;     =0A=
}, =0A=
render: function() {=0A=
if(this.entryCount > 0) {=0A=
for (var i =3D 0; i < this.entryCount; i++)=0A=
this.index=3D=3Di ? =0A=
Element.addClassName(this.getEntry(i),"selected") : =0A=
Element.removeClassName(this.getEntry(i),"selected");=0A=
if(this.hasFocus) { =0A=
this.show();=0A=
this.active =3D true;=0A=
}=0A=
} else {=0A=
this.active =3D false;=0A=
this.hide();=0A=
}=0A=
},=0A=
markPrevious: function() {=0A=
if(this.index > 0) this.index--=0A=
else this.index =3D this.entryCount-1;=0A=
this.getEntry(this.index).scrollIntoView(true);=0A=
},=0A=
markNext: function() {=0A=
if(this.index < this.entryCount-1) this.index++=0A=
else this.index =3D 0;=0A=
this.getEntry(this.index).scrollIntoView(false);=0A=
},=0A=
getEntry: function(index) {=0A=
return this.update.firstChild.childNodes[index];=0A=
},=0A=
getCurrentEntry: function() {=0A=
return this.getEntry(this.index);=0A=
},=0A=
selectEntry: function() {=0A=
this.active =3D false;=0A=
this.updateElement(this.getCurrentEntry());=0A=
},=0A=
updateElement: function(selectedElement) {=0A=
if (this.options.updateElement) {=0A=
this.options.updateElement(selectedElement);=0A=
return;=0A=
}=0A=
var value =3D '';=0A=
if (this.options.select) {=0A=
var nodes =3D $(selectedElement).select('.' + this.options.select) || [];=0A=
if(nodes.length>0) value =3D Element.collectTextNodes(nodes[0], =
this.options.select);=0A=
} else=0A=
value =3D Element.collectTextNodesIgnoreClass(selectedElement, =
'informal');=0A=
var bounds =3D this.getTokenBounds();=0A=
if (bounds[0] !=3D -1) {=0A=
var newValue =3D this.element.value.substr(0, bounds[0]);=0A=
var whitespace =3D this.element.value.substr(bounds[0]).match(/^\s+/);=0A=
if (whitespace)=0A=
newValue +=3D whitespace[0];=0A=
this.element.value =3D newValue + value + =
this.element.value.substr(bounds[1]);=0A=
} else {=0A=
this.element.value =3D value;=0A=
}=0A=
this.oldElementValue =3D this.element.value;=0A=
this.element.focus();=0A=
if (this.options.afterUpdateElement)=0A=
this.options.afterUpdateElement(this.element, selectedElement);=0A=
},=0A=
updateChoices: function(choices) {=0A=
if(!this.changed && this.hasFocus) {=0A=
this.update.innerHTML =3D choices;=0A=
Element.cleanWhitespace(this.update);=0A=
Element.cleanWhitespace(this.update.down());=0A=
if(this.update.firstChild && this.update.down().childNodes) {=0A=
this.entryCount =3D =0A=
this.update.down().childNodes.length;=0A=
for (var i =3D 0; i < this.entryCount; i++) {=0A=
var entry =3D this.getEntry(i);=0A=
entry.autocompleteIndex =3D i;=0A=
this.addObservers(entry);=0A=
}=0A=
} else { =0A=
this.entryCount =3D 0;=0A=
}=0A=
this.stopIndicator();=0A=
this.index =3D 0;=0A=
if(this.entryCount=3D=3D1 && this.options.autoSelect) {=0A=
this.selectEntry();=0A=
this.hide();=0A=
} else {=0A=
this.render();=0A=
}=0A=
}=0A=
},=0A=
addObservers: function(element) {=0A=
Event.observe(element, "mouseover", =
this.onHover.bindAsEventListener(this));=0A=
Event.observe(element, "click", this.onClick.bindAsEventListener(this));=0A=
},=0A=
onObserverEvent: function() {=0A=
this.changed =3D false;   =0A=
this.tokenBounds =3D null;=0A=
if(this.getToken().length>=3Dthis.options.minChars) {=0A=
this.getUpdatedChoices();=0A=
} else {=0A=
this.active =3D false;=0A=
this.hide();=0A=
}=0A=
this.oldElementValue =3D this.element.value;=0A=
},=0A=
getToken: function() {=0A=
var bounds =3D this.getTokenBounds();=0A=
return this.element.value.substring(bounds[0], bounds[1]).strip();=0A=
},=0A=
getTokenBounds: function() {=0A=
if (null !=3D this.tokenBounds) return this.tokenBounds;=0A=
var value =3D this.element.value;=0A=
if (value.strip().empty()) return [-1, 0];=0A=
var diff =3D arguments.callee.getFirstDifferencePos(value, =
this.oldElementValue);=0A=
var offset =3D (diff =3D=3D this.oldElementValue.length ? 1 : 0);=0A=
var prevTokenPos =3D -1, nextTokenPos =3D value.length;=0A=
var tp;=0A=
for (var index =3D 0, l =3D this.options.tokens.length; index < l; =
++index) {=0A=
tp =3D value.lastIndexOf(this.options.tokens[index], diff + offset - 1);=0A=
if (tp > prevTokenPos) prevTokenPos =3D tp;=0A=
tp =3D value.indexOf(this.options.tokens[index], diff + offset);=0A=
if (-1 !=3D tp && tp < nextTokenPos) nextTokenPos =3D tp;=0A=
}=0A=
return (this.tokenBounds =3D [prevTokenPos + 1, nextTokenPos]);=0A=
}=0A=
});=0A=
Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos =3D =
function(newS, oldS) {=0A=
var boundary =3D Math.min(newS.length, oldS.length);=0A=
for (var index =3D 0; index < boundary; ++index)=0A=
if (newS[index] !=3D oldS[index])=0A=
return index;=0A=
return boundary;=0A=
};=0A=
Ajax.Autocompleter =3D Class.create(Autocompleter.Base, {=0A=
initialize: function(element, update, url, options) {=0A=
this.baseInitialize(element, update, options);=0A=
this.options.asynchronous  =3D true;=0A=
this.options.onComplete    =3D this.onComplete.bind(this);=0A=
this.options.defaultParams =3D this.options.parameters || null;=0A=
this.url                   =3D url;=0A=
},=0A=
getUpdatedChoices: function() {=0A=
this.startIndicator();=0A=
var entry =3D encodeURIComponent(this.options.paramName) + '=3D' + =0A=
encodeURIComponent(this.getToken());=0A=
this.options.parameters =3D this.options.callback ?=0A=
this.options.callback(this.element, entry) : entry;=0A=
if(this.options.defaultParams) =0A=
this.options.parameters +=3D '&' + this.options.defaultParams;=0A=
new Ajax.Request(this.url, this.options);=0A=
},=0A=
onComplete: function(request) {=0A=
this.updateChoices(request.responseText);=0A=
}=0A=
});=0A=
// The local array autocompleter. Used when you'd prefer to=0A=
// inject an array of autocompletion options into the page, rather=0A=
// than sending out Ajax queries, which can be quite slow sometimes.=0A=
//=0A=
// The constructor takes four parameters. The first two are, as usual,=0A=
// the id of the monitored textbox, and id of the autocompletion menu.=0A=
// The third is the array you want to autocomplete from, and the fourth=0A=
// is the options block.=0A=
//=0A=
// Extra local autocompletion options:=0A=
// - choices - How many autocompletion choices to offer=0A=
//=0A=
// - partialSearch - If false, the autocompleter will match entered=0A=
//                    text only at the beginning of strings in the =0A=
//                    autocomplete array. Defaults to true, which will=0A=
//                    match text at the beginning of any *word* in the=0A=
//                    strings in the autocomplete array. If you want to=0A=
//                    search anywhere in the string, additionally set=0A=
//                    the option fullSearch to true (default: off).=0A=
//=0A=
// - fullSsearch - Search anywhere in autocomplete array strings.=0A=
//=0A=
// - partialChars - How many characters to enter before triggering=0A=
//                   a partial match (unlike minChars, which defines=0A=
//                   how many characters are required to do any match=0A=
//                   at all). Defaults to 2.=0A=
//=0A=
// - ignoreCase - Whether to ignore case when autocompleting.=0A=
//                 Defaults to true.=0A=
//=0A=
// It's possible to pass in a custom function as the 'selector' =0A=
// option, if you prefer to write your own autocompletion logic.=0A=
// In that case, the other options above will not apply unless=0A=
// you support them.=0A=
Autocompleter.Local =3D Class.create(Autocompleter.Base, {=0A=
initialize: function(element, update, array, options) {=0A=
this.baseInitialize(element, update, options);=0A=
this.options.array =3D array;=0A=
},=0A=
getUpdatedChoices: function() {=0A=
this.updateChoices(this.options.selector(this));=0A=
},=0A=
setOptions: function(options) {=0A=
this.options =3D Object.extend({=0A=
choices: 10,=0A=
partialSearch: true,=0A=
partialChars: 2,=0A=
ignoreCase: true,=0A=
fullSearch: false,=0A=
selector: function(instance) {=0A=
var ret       =3D []; // Beginning matches=0A=
var partial   =3D []; // Inside matches=0A=
var entry     =3D instance.getToken();=0A=
var count     =3D 0;=0A=
for (var i =3D 0; i < instance.options.array.length &&  =0A=
ret.length < instance.options.choices ; i++) { =0A=
var elem =3D instance.options.array[i];=0A=
var foundPos =3D instance.options.ignoreCase ? =0A=
elem.toLowerCase().indexOf(entry.toLowerCase()) : =0A=
elem.indexOf(entry);=0A=
while (foundPos !=3D -1) {=0A=
if (foundPos =3D=3D 0 && elem.length !=3D entry.length) { =0A=
ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + =0A=
elem.substr(entry.length) + "</li>");=0A=
break;=0A=
} else if (entry.length >=3D instance.options.partialChars && =0A=
instance.options.partialSearch && foundPos !=3D -1) {=0A=
if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) =
{=0A=
partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +=0A=
elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(=0A=
foundPos + entry.length) + "</li>");=0A=
break;=0A=
}=0A=
}=0A=
foundPos =3D instance.options.ignoreCase ? =0A=
elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : =0A=
elem.indexOf(entry, foundPos + 1);=0A=
}=0A=
}=0A=
if (partial.length)=0A=
ret =3D ret.concat(partial.slice(0, instance.options.choices - =
ret.length))=0A=
return "<ul>" + ret.join('') + "</ul>";=0A=
}=0A=
}, options || { });=0A=
}=0A=
});=0A=
// AJAX in-place editor and collection editor=0A=
// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April =
2007).=0A=
// Use this if you notice weird scrolling problems on some browsers,=0A=
// the DOM might be a bit confused when this gets called so do this=0A=
// waits 1 ms (with setTimeout) until it does the activation=0A=
Field.scrollFreeActivate =3D function(field) {=0A=
setTimeout(function() {=0A=
Field.activate(field);=0A=
}, 1);=0A=
}=0A=
Ajax.InPlaceEditor =3D Class.create({=0A=
initialize: function(element, url, options) {=0A=
this.url =3D url;=0A=
this.element =3D element =3D $(element);=0A=
this.prepareOptions();=0A=
this._controls =3D { };=0A=
arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION =
LAYER!!!=0A=
Object.extend(this.options, options || { });=0A=
if (!this.options.formId && this.element.id) {=0A=
this.options.formId =3D this.element.id + '-inplaceeditor';=0A=
if ($(this.options.formId))=0A=
this.options.formId =3D '';=0A=
}=0A=
if (this.options.externalControl)=0A=
this.options.externalControl =3D $(this.options.externalControl);=0A=
if (!this.options.externalControl)=0A=
this.options.externalControlOnly =3D false;=0A=
this._originalBackground =3D this.element.getStyle('background-color') =
|| 'transparent';=0A=
this.element.title =3D this.options.clickToEditText;=0A=
this._boundCancelHandler =3D this.handleFormCancellation.bind(this);=0A=
this._boundComplete =3D (this.options.onComplete || =
Prototype.emptyFunction).bind(this);=0A=
this._boundFailureHandler =3D this.handleAJAXFailure.bind(this);=0A=
this._boundSubmitHandler =3D this.handleFormSubmission.bind(this);=0A=
this._boundWrapperHandler =3D this.wrapUp.bind(this);=0A=
this.registerListeners();=0A=
},=0A=
checkForEscapeOrReturn: function(e) {=0A=
if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;=0A=
if (Event.KEY_ESC =3D=3D e.keyCode)=0A=
this.handleFormCancellation(e);=0A=
else if (Event.KEY_RETURN =3D=3D e.keyCode)=0A=
this.handleFormSubmission(e);=0A=
},=0A=
createControl: function(mode, handler, extraClasses) {=0A=
var control =3D this.options[mode + 'Control'];=0A=
var text =3D this.options[mode + 'Text'];=0A=
if ('button' =3D=3D control) {=0A=
var btn =3D document.createElement('input');=0A=
btn.type =3D 'submit';=0A=
btn.value =3D text;=0A=
btn.className =3D 'editor_' + mode + '_button';=0A=
if ('cancel' =3D=3D mode)=0A=
btn.onclick =3D this._boundCancelHandler;=0A=
this._form.appendChild(btn);=0A=
this._controls[mode] =3D btn;=0A=
} else if ('link' =3D=3D control) {=0A=
var link =3D document.createElement('a');=0A=
link.href =3D '#';=0A=
link.appendChild(document.createTextNode(text));=0A=
link.onclick =3D 'cancel' =3D=3D mode ? this._boundCancelHandler : =
this._boundSubmitHandler;=0A=
link.className =3D 'editor_' + mode + '_link';=0A=
if (extraClasses)=0A=
link.className +=3D ' ' + extraClasses;=0A=
this._form.appendChild(link);=0A=
this._controls[mode] =3D link;=0A=
}=0A=
},=0A=
createEditField: function() {=0A=
var text =3D (this.options.loadTextURL ? this.options.loadingText : =
this.getText());=0A=
var fld;=0A=
if (1 >=3D this.options.rows && !/\r|\n/.test(this.getText())) {=0A=
fld =3D document.createElement('input');=0A=
fld.type =3D 'text';=0A=
var size =3D this.options.size || this.options.cols || 0;=0A=
if (0 < size) fld.size =3D size;=0A=
} else {=0A=
fld =3D document.createElement('textarea');=0A=
fld.rows =3D (1 >=3D this.options.rows ? this.options.autoRows : =
this.options.rows);=0A=
fld.cols =3D this.options.cols || 40;=0A=
}=0A=
fld.name =3D this.options.paramName;=0A=
fld.value =3D text; // No HTML breaks conversion anymore=0A=
fld.className =3D 'editor_field';=0A=
if (this.options.submitOnBlur)=0A=
fld.onblur =3D this._boundSubmitHandler;=0A=
this._controls.editor =3D fld;=0A=
if (this.options.loadTextURL)=0A=
this.loadExternalText();=0A=
this._form.appendChild(this._controls.editor);=0A=
},=0A=
createForm: function() {=0A=
var ipe =3D this;=0A=
function addText(mode, condition) {=0A=
var text =3D ipe.options['text' + mode + 'Controls'];=0A=
if (!text || condition =3D=3D=3D false) return;=0A=
ipe._form.appendChild(document.createTextNode(text));=0A=
};=0A=
this._form =3D $(document.createElement('form'));=0A=
this._form.id =3D this.options.formId;=0A=
this._form.addClassName(this.options.formClassName);=0A=
this._form.onsubmit =3D this._boundSubmitHandler;=0A=
this.createEditField();=0A=
if ('textarea' =3D=3D this._controls.editor.tagName.toLowerCase())=0A=
this._form.appendChild(document.createElement('br'));=0A=
if (this.options.onFormCustomization)=0A=
this.options.onFormCustomization(this, this._form);=0A=
addText('Before', this.options.okControl || this.options.cancelControl);=0A=
this.createControl('ok', this._boundSubmitHandler);=0A=
addText('Between', this.options.okControl && this.options.cancelControl);=0A=
this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');=0A=
addText('After', this.options.okControl || this.options.cancelControl);=0A=
},=0A=
destroy: function() {=0A=
if (this._oldInnerHTML)=0A=
this.element.innerHTML =3D this._oldInnerHTML;=0A=
this.leaveEditMode();=0A=
this.unregisterListeners();=0A=
},=0A=
enterEditMode: function(e) {=0A=
if (this._saving || this._editing) return;=0A=
this._editing =3D true;=0A=
this.triggerCallback('onEnterEditMode');=0A=
if (this.options.externalControl)=0A=
this.options.externalControl.hide();=0A=
this.element.hide();=0A=
this.createForm();=0A=
this.element.parentNode.insertBefore(this._form, this.element);=0A=
if (!this.options.loadTextURL)=0A=
this.postProcessEditField();=0A=
if (e) Event.stop(e);=0A=
},=0A=
enterHover: function(e) {=0A=
if (this.options.hoverClassName)=0A=
this.element.addClassName(this.options.hoverClassName);=0A=
if (this._saving) return;=0A=
this.triggerCallback('onEnterHover');=0A=
},=0A=
getText: function() {=0A=
return this.element.innerHTML;=0A=
},=0A=
handleAJAXFailure: function(transport) {=0A=
this.triggerCallback('onFailure', transport);=0A=
if (this._oldInnerHTML) {=0A=
this.element.innerHTML =3D this._oldInnerHTML;=0A=
this._oldInnerHTML =3D null;=0A=
}=0A=
},=0A=
handleFormCancellation: function(e) {=0A=
this.wrapUp();=0A=
if (e) Event.stop(e);=0A=
},=0A=
handleFormSubmission: function(e) {=0A=
var form =3D this._form;=0A=
var value =3D $F(this._controls.editor);=0A=
this.prepareSubmission();=0A=
var params =3D this.options.callback(form, value) || '';=0A=
if (Object.isString(params))=0A=
params =3D params.toQueryParams();=0A=
params.editorId =3D this.element.id;=0A=
if (this.options.htmlResponse) {=0A=
var options =3D Object.extend({ evalScripts: true }, =
this.options.ajaxOptions);=0A=
Object.extend(options, {=0A=
parameters: params,=0A=
onComplete: this._boundWrapperHandler,=0A=
onFailure: this._boundFailureHandler=0A=
});=0A=
new Ajax.Updater({ success: this.element }, this.url, options);=0A=
} else {=0A=
var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
Object.extend(options, {=0A=
parameters: params,=0A=
onComplete: this._boundWrapperHandler,=0A=
onFailure: this._boundFailureHandler=0A=
});=0A=
new Ajax.Request(this.url, options);=0A=
}=0A=
if (e) Event.stop(e);=0A=
},=0A=
leaveEditMode: function() {=0A=
this.element.removeClassName(this.options.savingClassName);=0A=
this.removeForm();=0A=
this.leaveHover();=0A=
this.element.style.backgroundColor =3D this._originalBackground;=0A=
this.element.show();=0A=
if (this.options.externalControl)=0A=
this.options.externalControl.show();=0A=
this._saving =3D false;=0A=
this._editing =3D false;=0A=
this._oldInnerHTML =3D null;=0A=
this.triggerCallback('onLeaveEditMode');=0A=
},=0A=
leaveHover: function(e) {=0A=
if (this.options.hoverClassName)=0A=
this.element.removeClassName(this.options.hoverClassName);=0A=
if (this._saving) return;=0A=
this.triggerCallback('onLeaveHover');=0A=
},=0A=
loadExternalText: function() {=0A=
this._form.addClassName(this.options.loadingClassName);=0A=
this._controls.editor.disabled =3D true;=0A=
var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
Object.extend(options, {=0A=
parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
onComplete: Prototype.emptyFunction,=0A=
onSuccess: function(transport) {=0A=
this._form.removeClassName(this.options.loadingClassName);=0A=
var text =3D transport.responseText;=0A=
if (this.options.stripLoadedTextTags)=0A=
text =3D text.stripTags();=0A=
this._controls.editor.value =3D text;=0A=
this._controls.editor.disabled =3D false;=0A=
this.postProcessEditField();=0A=
}.bind(this),=0A=
onFailure: this._boundFailureHandler=0A=
});=0A=
new Ajax.Request(this.options.loadTextURL, options);=0A=
},=0A=
postProcessEditField: function() {=0A=
var fpc =3D this.options.fieldPostCreation;=0A=
if (fpc)=0A=
$(this._controls.editor)['focus' =3D=3D fpc ? 'focus' : 'activate']();=0A=
},=0A=
prepareOptions: function() {=0A=
this.options =3D Object.clone(Ajax.InPlaceEditor.DefaultOptions);=0A=
Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);=0A=
[this._extraDefaultOptions].flatten().compact().each(function(defs) {=0A=
Object.extend(this.options, defs);=0A=
}.bind(this));=0A=
},=0A=
prepareSubmission: function() {=0A=
this._saving =3D true;=0A=
this.removeForm();=0A=
this.leaveHover();=0A=
this.showSaving();=0A=
},=0A=
registerListeners: function() {=0A=
this._listeners =3D { };=0A=
var listener;=0A=
$H(Ajax.InPlaceEditor.Listeners).each(function(pair) {=0A=
listener =3D this[pair.value].bind(this);=0A=
this._listeners[pair.key] =3D listener;=0A=
if (!this.options.externalControlOnly)=0A=
this.element.observe(pair.key, listener);=0A=
if (this.options.externalControl)=0A=
this.options.externalControl.observe(pair.key, listener);=0A=
}.bind(this));=0A=
},=0A=
removeForm: function() {=0A=
if (!this._form) return;=0A=
this._form.remove();=0A=
this._form =3D null;=0A=
this._controls =3D { };=0A=
},=0A=
showSaving: function() {=0A=
this._oldInnerHTML =3D this.element.innerHTML;=0A=
this.element.innerHTML =3D this.options.savingText;=0A=
this.element.addClassName(this.options.savingClassName);=0A=
this.element.style.backgroundColor =3D this._originalBackground;=0A=
this.element.show();=0A=
},=0A=
triggerCallback: function(cbName, arg) {=0A=
if ('function' =3D=3D typeof this.options[cbName]) {=0A=
this.options[cbName](this, arg);=0A=
}=0A=
},=0A=
unregisterListeners: function() {=0A=
$H(this._listeners).each(function(pair) {=0A=
if (!this.options.externalControlOnly)=0A=
this.element.stopObserving(pair.key, pair.value);=0A=
if (this.options.externalControl)=0A=
this.options.externalControl.stopObserving(pair.key, pair.value);=0A=
}.bind(this));=0A=
},=0A=
wrapUp: function(transport) {=0A=
this.leaveEditMode();=0A=
// Can't use triggerCallback due to backward compatibility: requires=0A=
// binding + direct element=0A=
this._boundComplete(transport, this.element);=0A=
}=0A=
});=0A=
Object.extend(Ajax.InPlaceEditor.prototype, {=0A=
dispose: Ajax.InPlaceEditor.prototype.destroy=0A=
});=0A=
Ajax.InPlaceCollectionEditor =3D Class.create(Ajax.InPlaceEditor, {=0A=
initialize: function($super, element, url, options) {=0A=
this._extraDefaultOptions =3D =
Ajax.InPlaceCollectionEditor.DefaultOptions;=0A=
$super(element, url, options);=0A=
},=0A=
createEditField: function() {=0A=
var list =3D document.createElement('select');=0A=
list.name =3D this.options.paramName;=0A=
list.size =3D 1;=0A=
this._controls.editor =3D list;=0A=
this._collection =3D this.options.collection || [];=0A=
if (this.options.loadCollectionURL)=0A=
this.loadCollection();=0A=
else=0A=
this.checkForExternalText();=0A=
this._form.appendChild(this._controls.editor);=0A=
},=0A=
loadCollection: function() {=0A=
this._form.addClassName(this.options.loadingClassName);=0A=
this.showLoadingText(this.options.loadingCollectionText);=0A=
var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
Object.extend(options, {=0A=
parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
onComplete: Prototype.emptyFunction,=0A=
onSuccess: function(transport) {=0A=
var js =3D transport.responseText.strip();=0A=
if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check=0A=
throw 'Server returned an invalid collection representation.';=0A=
this._collection =3D eval(js);=0A=
this.checkForExternalText();=0A=
}.bind(this),=0A=
onFailure: this.onFailure=0A=
});=0A=
new Ajax.Request(this.options.loadCollectionURL, options);=0A=
},=0A=
showLoadingText: function(text) {=0A=
this._controls.editor.disabled =3D true;=0A=
var tempOption =3D this._controls.editor.firstChild;=0A=
if (!tempOption) {=0A=
tempOption =3D document.createElement('option');=0A=
tempOption.value =3D '';=0A=
this._controls.editor.appendChild(tempOption);=0A=
tempOption.selected =3D true;=0A=
}=0A=
tempOption.update((text || '').stripScripts().stripTags());=0A=
},=0A=
checkForExternalText: function() {=0A=
this._text =3D this.getText();=0A=
if (this.options.loadTextURL)=0A=
this.loadExternalText();=0A=
else=0A=
this.buildOptionList();=0A=
},=0A=
loadExternalText: function() {=0A=
this.showLoadingText(this.options.loadingText);=0A=
var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
Object.extend(options, {=0A=
parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
onComplete: Prototype.emptyFunction,=0A=
onSuccess: function(transport) {=0A=
this._text =3D transport.responseText.strip();=0A=
this.buildOptionList();=0A=
}.bind(this),=0A=
onFailure: this.onFailure=0A=
});=0A=
new Ajax.Request(this.options.loadTextURL, options);=0A=
},=0A=
buildOptionList: function() {=0A=
this._form.removeClassName(this.options.loadingClassName);=0A=
this._collection =3D this._collection.map(function(entry) {=0A=
return 2 =3D=3D=3D entry.length ? entry : [entry, entry].flatten();=0A=
});=0A=
var marker =3D ('value' in this.options) ? this.options.value : =
this._text;=0A=
var textFound =3D this._collection.any(function(entry) {=0A=
return entry[0] =3D=3D marker;=0A=
}.bind(this));=0A=
this._controls.editor.update('');=0A=
var option;=0A=
this._collection.each(function(entry, index) {=0A=
option =3D document.createElement('option');=0A=
option.value =3D entry[0];=0A=
option.selected =3D textFound ? entry[0] =3D=3D marker : 0 =3D=3D index;=0A=
option.appendChild(document.createTextNode(entry[1]));=0A=
this._controls.editor.appendChild(option);=0A=
}.bind(this));=0A=
this._controls.editor.disabled =3D false;=0A=
Field.scrollFreeActivate(this._controls.editor);=0A=
}=0A=
});=0A=
//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****=0A=
//**** This only  exists for a while,  in order to  let ****=0A=
//**** users adapt to  the new API.  Read up on the new ****=0A=
//**** API and convert your code to it ASAP!            ****=0A=
Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions =3D =
function(options) {=0A=
if (!options) return;=0A=
function fallback(name, expr) {=0A=
if (name in options || expr =3D=3D=3D undefined) return;=0A=
options[name] =3D expr;=0A=
};=0A=
fallback('cancelControl', (options.cancelLink ? 'link' : =
(options.cancelButton ? 'button' :=0A=
options.cancelLink =3D=3D options.cancelButton =3D=3D false ? false : =
undefined)));=0A=
fallback('okControl', (options.okLink ? 'link' : (options.okButton ? =
'button' :=0A=
options.okLink =3D=3D options.okButton =3D=3D false ? false : =
undefined)));=0A=
fallback('highlightColor', options.highlightcolor);=0A=
fallback('highlightEndColor', options.highlightendcolor);=0A=
};=0A=
Object.extend(Ajax.InPlaceEditor, {=0A=
DefaultOptions: {=0A=
ajaxOptions: { },=0A=
autoRows: 3,                                // Use when multi-line w/ =
rows =3D=3D 1=0A=
cancelControl: 'link',                      // 'link'|'button'|false=0A=
cancelText: 'cancel',=0A=
clickToEditText: 'Click to edit',=0A=
externalControl: null,                      // id|elt=0A=
externalControlOnly: false,=0A=
fieldPostCreation: 'activate',              // 'activate'|'focus'|false=0A=
formClassName: 'inplaceeditor-form',=0A=
formId: null,                               // id|elt=0A=
highlightColor: '#ffff99',=0A=
highlightEndColor: '#ffffff',=0A=
hoverClassName: '',=0A=
htmlResponse: true,=0A=
loadingClassName: 'inplaceeditor-loading',=0A=
loadingText: 'Loading...',=0A=
okControl: 'button',                        // 'link'|'button'|false=0A=
okText: 'ok',=0A=
paramName: 'value',=0A=
rows: 1,                                    // If 1 and multi-line, uses =
autoRows=0A=
savingClassName: 'inplaceeditor-saving',=0A=
savingText: 'Saving...',=0A=
size: 0,=0A=
stripLoadedTextTags: false,=0A=
submitOnBlur: false,=0A=
textAfterControls: '',=0A=
textBeforeControls: '',=0A=
textBetweenControls: ''=0A=
},=0A=
DefaultCallbacks: {=0A=
callback: function(form) {=0A=
return Form.serialize(form);=0A=
},=0A=
onComplete: function(transport, element) {=0A=
// For backward compatibility, this one is bound to the IPE, and passes=0A=
// the element directly.  It was too often customized, so we don't break =
it.=0A=
new Effect.Highlight(element, {=0A=
startcolor: this.options.highlightColor, keepBackgroundImage: true });=0A=
},=0A=
onEnterEditMode: null,=0A=
onEnterHover: function(ipe) {=0A=
ipe.element.style.backgroundColor =3D ipe.options.highlightColor;=0A=
if (ipe._effect)=0A=
ipe._effect.cancel();=0A=
},=0A=
onFailure: function(transport, ipe) {=0A=
alert('Error communication with the server: ' + =
transport.responseText.stripTags());=0A=
},=0A=
onFormCustomization: null, // Takes the IPE and its generated form, =
after editor, before controls.=0A=
onLeaveEditMode: null,=0A=
onLeaveHover: function(ipe) {=0A=
ipe._effect =3D new Effect.Highlight(ipe.element, {=0A=
startcolor: ipe.options.highlightColor, endcolor: =
ipe.options.highlightEndColor,=0A=
restorecolor: ipe._originalBackground, keepBackgroundImage: true=0A=
});=0A=
}=0A=
},=0A=
Listeners: {=0A=
click: 'enterEditMode',=0A=
keydown: 'checkForEscapeOrReturn',=0A=
mouseover: 'enterHover',=0A=
mouseout: 'leaveHover'=0A=
}=0A=
});=0A=
Ajax.InPlaceCollectionEditor.DefaultOptions =3D {=0A=
loadingCollectionText: 'Loading options...'=0A=
};=0A=
// Delayed observer, like Form.Element.Observer, =0A=
// but waits for delay after last key input=0A=
// Ideal for live-search fields=0A=
Form.Element.DelayedObserver =3D Class.create({=0A=
initialize: function(element, delay, callback) {=0A=
this.delay     =3D delay || 0.5;=0A=
this.element   =3D $(element);=0A=
this.callback  =3D callback;=0A=
this.timer     =3D null;=0A=
this.lastValue =3D $F(this.element); =0A=
Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListen=
er(this));=0A=
},=0A=
delayedListener: function(event) {=0A=
if(this.lastValue =3D=3D $F(this.element)) return;=0A=
if(this.timer) clearTimeout(this.timer);=0A=
this.timer =3D setTimeout(this.onTimerEvent.bind(this), this.delay * =
1000);=0A=
this.lastValue =3D $F(this.element);=0A=
},=0A=
onTimerEvent: function() {=0A=
this.timer =3D null;=0A=
this.callback(this.element, $F(this.element));=0A=
}=0A=
});=0A=
/* js/lib/slider.js */=0A=
// script.aculo.us slider.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008=0A=
// Copyright (c) 2005-2007 Marty Haught, Thomas Fuchs =0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
if (!Control) var Control =3D { };=0A=
// options:=0A=
//  axis: 'vertical', or 'horizontal' (default)=0A=
//=0A=
// callbacks:=0A=
//  onChange(value)=0A=
//  onSlide(value)=0A=
Control.Slider =3D Class.create({=0A=
initialize: function(handle, track, options) {=0A=
var slider =3D this;=0A=
if (Object.isArray(handle)) {=0A=
this.handles =3D handle.collect( function(e) { return $(e) });=0A=
} else {=0A=
this.handles =3D [$(handle)];=0A=
}=0A=
this.track   =3D $(track);=0A=
this.options =3D options || { };=0A=
this.axis      =3D this.options.axis || 'horizontal';=0A=
this.increment =3D this.options.increment || 1;=0A=
this.step      =3D parseInt(this.options.step || '1');=0A=
this.range     =3D this.options.range || $R(0,1);=0A=
this.value     =3D 0; // assure backwards compat=0A=
this.values    =3D this.handles.map( function() { return 0 });=0A=
this.spans     =3D this.options.spans ? =
this.options.spans.map(function(s){ return $(s) }) : false;=0A=
this.options.startSpan =3D $(this.options.startSpan || null);=0A=
this.options.endSpan   =3D $(this.options.endSpan || null);=0A=
this.restricted =3D this.options.restricted || false;=0A=
this.maximum   =3D this.options.maximum || this.range.end;=0A=
this.minimum   =3D this.options.minimum || this.range.start;=0A=
// Will be used to align the handle onto the track, if necessary=0A=
this.alignX =3D parseInt(this.options.alignX || '0');=0A=
this.alignY =3D parseInt(this.options.alignY || '0');=0A=
this.trackLength =3D this.maximumOffset() - this.minimumOffset();=0A=
this.handleLength =3D this.isVertical() ? =0A=
(this.handles[0].offsetHeight !=3D 0 ? =0A=
this.handles[0].offsetHeight : =
this.handles[0].style.height.replace(/px$/,"")) : =0A=
(this.handles[0].offsetWidth !=3D 0 ? this.handles[0].offsetWidth : =0A=
this.handles[0].style.width.replace(/px$/,""));=0A=
this.active   =3D false;=0A=
this.dragging =3D false;=0A=
this.disabled =3D false;=0A=
if (this.options.disabled) this.setDisabled();=0A=
// Allowed values array=0A=
this.allowedValues =3D this.options.values ? =
this.options.values.sortBy(Prototype.K) : false;=0A=
if (this.allowedValues) {=0A=
this.minimum =3D this.allowedValues.min();=0A=
this.maximum =3D this.allowedValues.max();=0A=
}=0A=
this.eventMouseDown =3D this.startDrag.bindAsEventListener(this);=0A=
this.eventMouseUp   =3D this.endDrag.bindAsEventListener(this);=0A=
this.eventMouseMove =3D this.update.bindAsEventListener(this);=0A=
// Initialize handles in reverse (make sure first handle is active)=0A=
this.handles.each( function(h,i) {=0A=
i =3D slider.handles.length-1-i;=0A=
slider.setValue(parseFloat(=0A=
(Object.isArray(slider.options.sliderValue) ? =0A=
slider.options.sliderValue[i] : slider.options.sliderValue) || =0A=
slider.range.start), i);=0A=
h.makePositioned().observe("mousedown", slider.eventMouseDown);=0A=
});=0A=
this.track.observe("mousedown", this.eventMouseDown);=0A=
document.observe("mouseup", this.eventMouseUp);=0A=
document.observe("mousemove", this.eventMouseMove);=0A=
this.initialized =3D true;=0A=
},=0A=
dispose: function() {=0A=
var slider =3D this;    =0A=
Event.stopObserving(this.track, "mousedown", this.eventMouseDown);=0A=
Event.stopObserving(document, "mouseup", this.eventMouseUp);=0A=
Event.stopObserving(document, "mousemove", this.eventMouseMove);=0A=
this.handles.each( function(h) {=0A=
Event.stopObserving(h, "mousedown", slider.eventMouseDown);=0A=
});=0A=
},=0A=
setDisabled: function(){=0A=
this.disabled =3D true;=0A=
},=0A=
setEnabled: function(){=0A=
this.disabled =3D false;=0A=
},  =0A=
getNearestValue: function(value){=0A=
if (this.allowedValues){=0A=
if (value >=3D this.allowedValues.max()) =
return(this.allowedValues.max());=0A=
if (value <=3D this.allowedValues.min()) =
return(this.allowedValues.min());=0A=
var offset =3D Math.abs(this.allowedValues[0] - value);=0A=
var newValue =3D this.allowedValues[0];=0A=
this.allowedValues.each( function(v) {=0A=
var currentOffset =3D Math.abs(v - value);=0A=
if (currentOffset <=3D offset){=0A=
newValue =3D v;=0A=
offset =3D currentOffset;=0A=
} =0A=
});=0A=
return newValue;=0A=
}=0A=
if (value > this.range.end) return this.range.end;=0A=
if (value < this.range.start) return this.range.start;=0A=
return value;=0A=
},=0A=
setValue: function(sliderValue, handleIdx){=0A=
if (!this.active) {=0A=
this.activeHandleIdx =3D handleIdx || 0;=0A=
this.activeHandle    =3D this.handles[this.activeHandleIdx];=0A=
this.updateStyles();=0A=
}=0A=
handleIdx =3D handleIdx || this.activeHandleIdx || 0;=0A=
if (this.initialized && this.restricted) {=0A=
if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))=0A=
sliderValue =3D this.values[handleIdx-1];=0A=
if ((handleIdx < (this.handles.length-1)) && =
(sliderValue>this.values[handleIdx+1]))=0A=
sliderValue =3D this.values[handleIdx+1];=0A=
}=0A=
sliderValue =3D this.getNearestValue(sliderValue);=0A=
this.values[handleIdx] =3D sliderValue;=0A=
this.value =3D this.values[0]; // assure backwards compat=0A=
this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =3D =0A=
this.translateToPx(sliderValue);=0A=
this.drawSpans();=0A=
if (!this.dragging || !this.event) this.updateFinished();=0A=
},=0A=
setValueBy: function(delta, handleIdx) {=0A=
this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + =
delta, =0A=
handleIdx || this.activeHandleIdx || 0);=0A=
},=0A=
translateToPx: function(value) {=0A=
return Math.round(=0A=
((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) =
* =0A=
(value - this.range.start)) + "px";=0A=
},=0A=
translateToValue: function(offset) {=0A=
return ((offset/(this.trackLength-this.handleLength) * =0A=
(this.range.end-this.range.start)) + this.range.start);=0A=
},=0A=
getRange: function(range) {=0A=
var v =3D this.values.sortBy(Prototype.K); =0A=
range =3D range || 0;=0A=
return $R(v[range],v[range+1]);=0A=
},=0A=
minimumOffset: function(){=0A=
return(this.isVertical() ? this.alignY : this.alignX);=0A=
},=0A=
maximumOffset: function(){=0A=
return(this.isVertical() ? =0A=
(this.track.offsetHeight !=3D 0 ? this.track.offsetHeight :=0A=
this.track.style.height.replace(/px$/,"")) - this.alignY : =0A=
(this.track.offsetWidth !=3D 0 ? this.track.offsetWidth : =0A=
this.track.style.width.replace(/px$/,"")) - this.alignX);=0A=
},  =0A=
isVertical:  function(){=0A=
return (this.axis =3D=3D 'vertical');=0A=
},=0A=
drawSpans: function() {=0A=
var slider =3D this;=0A=
if (this.spans)=0A=
$R(0, this.spans.length-1).each(function(r) { =
slider.setSpan(slider.spans[r], slider.getRange(r)) });=0A=
if (this.options.startSpan)=0A=
this.setSpan(this.options.startSpan,=0A=
$R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));=0A=
if (this.options.endSpan)=0A=
this.setSpan(this.options.endSpan, =0A=
$R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : =
this.value, this.maximum));=0A=
},=0A=
setSpan: function(span, range) {=0A=
if (this.isVertical()) {=0A=
span.style.top =3D this.translateToPx(range.start);=0A=
span.style.height =3D this.translateToPx(range.end - range.start + =
this.range.start);=0A=
} else {=0A=
span.style.left =3D this.translateToPx(range.start);=0A=
span.style.width =3D this.translateToPx(range.end - range.start + =
this.range.start);=0A=
}=0A=
},=0A=
updateStyles: function() {=0A=
this.handles.each( function(h){ Element.removeClassName(h, 'selected') =
});=0A=
Element.addClassName(this.activeHandle, 'selected');=0A=
},=0A=
startDrag: function(event) {=0A=
if (Event.isLeftClick(event)) {=0A=
if (!this.disabled){=0A=
this.active =3D true;=0A=
var handle =3D Event.element(event);=0A=
var pointer  =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
var track =3D handle;=0A=
if (track=3D=3Dthis.track) {=0A=
var offsets  =3D Position.cumulativeOffset(this.track); =0A=
this.event =3D event;=0A=
this.setValue(this.translateToValue( =0A=
(this.isVertical() ? pointer[1]-offsets[1] : =
pointer[0]-offsets[0])-(this.handleLength/2)=0A=
));=0A=
var offsets  =3D Position.cumulativeOffset(this.activeHandle);=0A=
this.offsetX =3D (pointer[0] - offsets[0]);=0A=
this.offsetY =3D (pointer[1] - offsets[1]);=0A=
} else {=0A=
// find the handle (prevents issues with Safari)=0A=
while((this.handles.indexOf(handle) =3D=3D -1) && handle.parentNode) =0A=
handle =3D handle.parentNode;=0A=
if (this.handles.indexOf(handle)!=3D-1) {=0A=
this.activeHandle    =3D handle;=0A=
this.activeHandleIdx =3D this.handles.indexOf(this.activeHandle);=0A=
this.updateStyles();=0A=
var offsets  =3D Position.cumulativeOffset(this.activeHandle);=0A=
this.offsetX =3D (pointer[0] - offsets[0]);=0A=
this.offsetY =3D (pointer[1] - offsets[1]);=0A=
}=0A=
}=0A=
}=0A=
Event.stop(event);=0A=
}=0A=
},=0A=
update: function(event) {=0A=
if (this.active) {=0A=
if (!this.dragging) this.dragging =3D true;=0A=
this.draw(event);=0A=
if (Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
Event.stop(event);=0A=
}=0A=
},=0A=
draw: function(event) {=0A=
var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
var offsets =3D Position.cumulativeOffset(this.track);=0A=
pointer[0] -=3D this.offsetX + offsets[0];=0A=
pointer[1] -=3D this.offsetY + offsets[1];=0A=
this.event =3D event;=0A=
this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : =
pointer[0] ));=0A=
if (this.initialized && this.options.onSlide)=0A=
this.options.onSlide(this.values.length>1 ? this.values : this.value, =
this);=0A=
},=0A=
endDrag: function(event) {=0A=
if (this.active && this.dragging) {=0A=
this.finishDrag(event, true);=0A=
Event.stop(event);=0A=
}=0A=
this.active =3D false;=0A=
this.dragging =3D false;=0A=
},  =0A=
finishDrag: function(event, success) {=0A=
this.active =3D false;=0A=
this.dragging =3D false;=0A=
this.updateFinished();=0A=
},=0A=
updateFinished: function() {=0A=
if (this.initialized && this.options.onChange) =0A=
this.options.onChange(this.values.length>1 ? this.values : this.value, =
this);=0A=
this.event =3D null;=0A=
}=0A=
});=0A=
/* js/calendar/calendar.js */=0A=
/*  Copyright Mihai Bazon, 2002-2005  |  www.bazon.net/mishoo=0A=
* -----------------------------------------------------------=0A=
*=0A=
* The DHTML Calendar, version 1.0 "It is happening again"=0A=
*=0A=
* Details and latest version at:=0A=
* www.dynarch.com/projects/calendar=0A=
*=0A=
* This script is developed by Dynarch.com.  Visit us at www.dynarch.com.=0A=
*=0A=
* This script is distributed under the GNU Lesser General Public License.=0A=
* Read the entire license text here: =
http://www.gnu.org/licenses/lgpl.html=0A=
*/=0A=
// $Id$=0A=
/** The Calendar object constructor. */=0A=
Calendar =3D function (firstDayOfWeek, dateStr, onSelected, onClose) {=0A=
// member variables=0A=
this.activeDiv =3D null;=0A=
this.currentDateEl =3D null;=0A=
this.getDateStatus =3D null;=0A=
this.getDateToolTip =3D null;=0A=
this.getDateText =3D null;=0A=
this.timeout =3D null;=0A=
this.onSelected =3D onSelected || null;=0A=
this.onClose =3D onClose || null;=0A=
this.dragging =3D false;=0A=
this.hidden =3D false;=0A=
this.minYear =3D 1970;=0A=
this.maxYear =3D 2050;=0A=
this.dateFormat =3D Calendar._TT["DEF_DATE_FORMAT"];=0A=
this.ttDateFormat =3D Calendar._TT["TT_DATE_FORMAT"];=0A=
this.isPopup =3D true;=0A=
this.weekNumbers =3D true;=0A=
this.firstDayOfWeek =3D typeof firstDayOfWeek =3D=3D "number" ? =
firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc.=0A=
this.showsOtherMonths =3D false;=0A=
this.dateStr =3D dateStr;=0A=
this.ar_days =3D null;=0A=
this.showsTime =3D false;=0A=
this.time24 =3D true;=0A=
this.yearStep =3D 1;=0A=
this.hiliteToday =3D true;=0A=
this.multiple =3D null;=0A=
// HTML elements=0A=
this.table =3D null;=0A=
this.element =3D null;=0A=
this.tbody =3D null;=0A=
this.firstdayname =3D null;=0A=
// Combo boxes=0A=
this.monthsCombo =3D null;=0A=
this.yearsCombo =3D null;=0A=
this.hilitedMonth =3D null;=0A=
this.activeMonth =3D null;=0A=
this.hilitedYear =3D null;=0A=
this.activeYear =3D null;=0A=
// Information=0A=
this.dateClicked =3D false;=0A=
// one-time initializations=0A=
if (typeof Calendar._SDN =3D=3D "undefined") {=0A=
// table of short day names=0A=
if (typeof Calendar._SDN_len =3D=3D "undefined")=0A=
Calendar._SDN_len =3D 3;=0A=
var ar =3D new Array();=0A=
for (var i =3D 8; i > 0;) {=0A=
ar[--i] =3D Calendar._DN[i].substr(0, Calendar._SDN_len);=0A=
}=0A=
Calendar._SDN =3D ar;=0A=
// table of short month names=0A=
if (typeof Calendar._SMN_len =3D=3D "undefined")=0A=
Calendar._SMN_len =3D 3;=0A=
ar =3D new Array();=0A=
for (var i =3D 12; i > 0;) {=0A=
ar[--i] =3D Calendar._MN[i].substr(0, Calendar._SMN_len);=0A=
}=0A=
Calendar._SMN =3D ar;=0A=
}=0A=
};=0A=
// ** constants=0A=
/// "static", needed for event handlers.=0A=
Calendar._C =3D null;=0A=
/// detect a special case of "web browser"=0A=
Calendar.is_ie =3D ( /msie/i.test(navigator.userAgent) &&=0A=
!/opera/i.test(navigator.userAgent) );=0A=
Calendar.is_ie5 =3D ( Calendar.is_ie && /msie =
5\.0/i.test(navigator.userAgent) );=0A=
/// detect Opera browser=0A=
Calendar.is_opera =3D /opera/i.test(navigator.userAgent);=0A=
/// detect KHTML-based browsers=0A=
Calendar.is_khtml =3D =
/Konqueror|Safari|KHTML/i.test(navigator.userAgent);=0A=
// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a =
separate=0A=
//        library, at some point.=0A=
Calendar.getAbsolutePos =3D function(el) {=0A=
var SL =3D 0, ST =3D 0;=0A=
var is_div =3D /^div$/i.test(el.tagName);=0A=
if (is_div && el.scrollLeft)=0A=
SL =3D el.scrollLeft;=0A=
if (is_div && el.scrollTop)=0A=
ST =3D el.scrollTop;=0A=
var r =3D { x: el.offsetLeft - SL, y: el.offsetTop - ST };=0A=
if (el.offsetParent) {=0A=
var tmp =3D this.getAbsolutePos(el.offsetParent);=0A=
r.x +=3D tmp.x;=0A=
r.y +=3D tmp.y;=0A=
}=0A=
return r;=0A=
};=0A=
Calendar.isRelated =3D function (el, evt) {=0A=
var related =3D evt.relatedTarget;=0A=
if (!related) {=0A=
var type =3D evt.type;=0A=
if (type =3D=3D "mouseover") {=0A=
related =3D evt.fromElement;=0A=
} else if (type =3D=3D "mouseout") {=0A=
related =3D evt.toElement;=0A=
}=0A=
}=0A=
while (related) {=0A=
if (related =3D=3D el) {=0A=
return true;=0A=
}=0A=
related =3D related.parentNode;=0A=
}=0A=
return false;=0A=
};=0A=
Calendar.removeClass =3D function(el, className) {=0A=
if (!(el && el.className)) {=0A=
return;=0A=
}=0A=
var cls =3D el.className.split(" ");=0A=
var ar =3D new Array();=0A=
for (var i =3D cls.length; i > 0;) {=0A=
if (cls[--i] !=3D className) {=0A=
ar[ar.length] =3D cls[i];=0A=
}=0A=
}=0A=
el.className =3D ar.join(" ");=0A=
};=0A=
Calendar.addClass =3D function(el, className) {=0A=
Calendar.removeClass(el, className);=0A=
el.className +=3D " " + className;=0A=
};=0A=
// FIXME: the following 2 functions totally suck, are useless and should =
be replaced immediately.=0A=
Calendar.getElement =3D function(ev) {=0A=
var f =3D Calendar.is_ie ? window.event.srcElement : ev.currentTarget;=0A=
while (f.nodeType !=3D 1 || /^div$/i.test(f.tagName))=0A=
f =3D f.parentNode;=0A=
return f;=0A=
};=0A=
Calendar.getTargetElement =3D function(ev) {=0A=
var f =3D Calendar.is_ie ? window.event.srcElement : ev.target;=0A=
while (f.nodeType !=3D 1)=0A=
f =3D f.parentNode;=0A=
return f;=0A=
};=0A=
Calendar.stopEvent =3D function(ev) {=0A=
ev || (ev =3D window.event);=0A=
if (Calendar.is_ie) {=0A=
ev.cancelBubble =3D true;=0A=
ev.returnValue =3D false;=0A=
} else {=0A=
ev.preventDefault();=0A=
ev.stopPropagation();=0A=
}=0A=
return false;=0A=
};=0A=
Calendar.addEvent =3D function(el, evname, func) {=0A=
if (el.attachEvent) { // IE=0A=
el.attachEvent("on" + evname, func);=0A=
} else if (el.addEventListener) { // Gecko / W3C=0A=
el.addEventListener(evname, func, true);=0A=
} else {=0A=
el["on" + evname] =3D func;=0A=
}=0A=
};=0A=
Calendar.removeEvent =3D function(el, evname, func) {=0A=
if (el.detachEvent) { // IE=0A=
el.detachEvent("on" + evname, func);=0A=
} else if (el.removeEventListener) { // Gecko / W3C=0A=
el.removeEventListener(evname, func, true);=0A=
} else {=0A=
el["on" + evname] =3D null;=0A=
}=0A=
};=0A=
Calendar.createElement =3D function(type, parent) {=0A=
var el =3D null;=0A=
if (document.createElementNS) {=0A=
// use the XHTML namespace; IE won't normally get here unless=0A=
// _they_ "fix" the DOM2 implementation.=0A=
el =3D document.createElementNS("http://www.w3.org/1999/xhtml", type);=0A=
} else {=0A=
el =3D document.createElement(type);=0A=
}=0A=
if (typeof parent !=3D "undefined") {=0A=
parent.appendChild(el);=0A=
}=0A=
return el;=0A=
};=0A=
// END: UTILITY FUNCTIONS=0A=
// BEGIN: CALENDAR STATIC FUNCTIONS=0A=
/** Internal -- adds a set of events to make some element behave like a =
button. */=0A=
Calendar._add_evs =3D function(el) {=0A=
with (Calendar) {=0A=
addEvent(el, "mouseover", dayMouseOver);=0A=
addEvent(el, "mousedown", dayMouseDown);=0A=
addEvent(el, "mouseout", dayMouseOut);=0A=
if (is_ie) {=0A=
addEvent(el, "dblclick", dayMouseDblClick);=0A=
el.setAttribute("unselectable", true);=0A=
}=0A=
}=0A=
};=0A=
Calendar.findMonth =3D function(el) {=0A=
if (typeof el.month !=3D "undefined") {=0A=
return el;=0A=
} else if (typeof el.parentNode.month !=3D "undefined") {=0A=
return el.parentNode;=0A=
}=0A=
return null;=0A=
};=0A=
Calendar.findYear =3D function(el) {=0A=
if (typeof el.year !=3D "undefined") {=0A=
return el;=0A=
} else if (typeof el.parentNode.year !=3D "undefined") {=0A=
return el.parentNode;=0A=
}=0A=
return null;=0A=
};=0A=
Calendar.showMonthsCombo =3D function () {=0A=
var cal =3D Calendar._C;=0A=
if (!cal) {=0A=
return false;=0A=
}=0A=
var cal =3D cal;=0A=
var cd =3D cal.activeDiv;=0A=
var mc =3D cal.monthsCombo;=0A=
if (cal.hilitedMonth) {=0A=
Calendar.removeClass(cal.hilitedMonth, "hilite");=0A=
}=0A=
if (cal.activeMonth) {=0A=
Calendar.removeClass(cal.activeMonth, "active");=0A=
}=0A=
var mon =3D =
cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];=0A=
Calendar.addClass(mon, "active");=0A=
cal.activeMonth =3D mon;=0A=
var s =3D mc.style;=0A=
s.display =3D "block";=0A=
if (cd.navtype < 0)=0A=
s.left =3D cd.offsetLeft + "px";=0A=
else {=0A=
var mcw =3D mc.offsetWidth;=0A=
if (typeof mcw =3D=3D "undefined")=0A=
// Konqueror brain-dead techniques=0A=
mcw =3D 50;=0A=
s.left =3D (cd.offsetLeft + cd.offsetWidth - mcw) + "px";=0A=
}=0A=
s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";=0A=
};=0A=
Calendar.showYearsCombo =3D function (fwd) {=0A=
var cal =3D Calendar._C;=0A=
if (!cal) {=0A=
return false;=0A=
}=0A=
var cal =3D cal;=0A=
var cd =3D cal.activeDiv;=0A=
var yc =3D cal.yearsCombo;=0A=
if (cal.hilitedYear) {=0A=
Calendar.removeClass(cal.hilitedYear, "hilite");=0A=
}=0A=
if (cal.activeYear) {=0A=
Calendar.removeClass(cal.activeYear, "active");=0A=
}=0A=
cal.activeYear =3D null;=0A=
var Y =3D cal.date.getFullYear() + (fwd ? 1 : -1);=0A=
var yr =3D yc.firstChild;=0A=
var show =3D false;=0A=
for (var i =3D 12; i > 0; --i) {=0A=
if (Y >=3D cal.minYear && Y <=3D cal.maxYear) {=0A=
yr.innerHTML =3D Y;=0A=
yr.year =3D Y;=0A=
yr.style.display =3D "block";=0A=
show =3D true;=0A=
} else {=0A=
yr.style.display =3D "none";=0A=
}=0A=
yr =3D yr.nextSibling;=0A=
Y +=3D fwd ? cal.yearStep : -cal.yearStep;=0A=
}=0A=
if (show) {=0A=
var s =3D yc.style;=0A=
s.display =3D "block";=0A=
if (cd.navtype < 0)=0A=
s.left =3D cd.offsetLeft + "px";=0A=
else {=0A=
var ycw =3D yc.offsetWidth;=0A=
if (typeof ycw =3D=3D "undefined")=0A=
// Konqueror brain-dead techniques=0A=
ycw =3D 50;=0A=
s.left =3D (cd.offsetLeft + cd.offsetWidth - ycw) + "px";=0A=
}=0A=
s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";=0A=
}=0A=
};=0A=
// event handlers=0A=
Calendar.tableMouseUp =3D function(ev) {=0A=
var cal =3D Calendar._C;=0A=
if (!cal) {=0A=
return false;=0A=
}=0A=
if (cal.timeout) {=0A=
clearTimeout(cal.timeout);=0A=
}=0A=
var el =3D cal.activeDiv;=0A=
if (!el) {=0A=
return false;=0A=
}=0A=
var target =3D Calendar.getTargetElement(ev);=0A=
ev || (ev =3D window.event);=0A=
Calendar.removeClass(el, "active");=0A=
if (target =3D=3D el || target.parentNode =3D=3D el) {=0A=
Calendar.cellClick(el, ev);=0A=
}=0A=
var mon =3D Calendar.findMonth(target);=0A=
var date =3D null;=0A=
if (mon) {=0A=
date =3D new Date(cal.date);=0A=
if (mon.month !=3D date.getMonth()) {=0A=
date.setMonth(mon.month);=0A=
cal.setDate(date);=0A=
cal.dateClicked =3D false;=0A=
cal.callHandler();=0A=
}=0A=
} else {=0A=
var year =3D Calendar.findYear(target);=0A=
if (year) {=0A=
date =3D new Date(cal.date);=0A=
if (year.year !=3D date.getFullYear()) {=0A=
date.setFullYear(year.year);=0A=
cal.setDate(date);=0A=
cal.dateClicked =3D false;=0A=
cal.callHandler();=0A=
}=0A=
}=0A=
}=0A=
with (Calendar) {=0A=
removeEvent(document, "mouseup", tableMouseUp);=0A=
removeEvent(document, "mouseover", tableMouseOver);=0A=
removeEvent(document, "mousemove", tableMouseOver);=0A=
cal._hideCombos();=0A=
_C =3D null;=0A=
return stopEvent(ev);=0A=
}=0A=
};=0A=
Calendar.tableMouseOver =3D function (ev) {=0A=
var cal =3D Calendar._C;=0A=
if (!cal) {=0A=
return;=0A=
}=0A=
var el =3D cal.activeDiv;=0A=
var target =3D Calendar.getTargetElement(ev);=0A=
if (target =3D=3D el || target.parentNode =3D=3D el) {=0A=
Calendar.addClass(el, "hilite active");=0A=
Calendar.addClass(el.parentNode, "rowhilite");=0A=
} else {=0A=
if (typeof el.navtype =3D=3D "undefined" || (el.navtype !=3D 50 && =
(el.navtype =3D=3D 0 || Math.abs(el.navtype) > 2)))=0A=
Calendar.removeClass(el, "active");=0A=
Calendar.removeClass(el, "hilite");=0A=
Calendar.removeClass(el.parentNode, "rowhilite");=0A=
}=0A=
ev || (ev =3D window.event);=0A=
if (el.navtype =3D=3D 50 && target !=3D el) {=0A=
var pos =3D Calendar.getAbsolutePos(el);=0A=
var w =3D el.offsetWidth;=0A=
var x =3D ev.clientX;=0A=
var dx;=0A=
var decrease =3D true;=0A=
if (x > pos.x + w) {=0A=
dx =3D x - pos.x - w;=0A=
decrease =3D false;=0A=
} else=0A=
dx =3D pos.x - x;=0A=
if (dx < 0) dx =3D 0;=0A=
var range =3D el._range;=0A=
var current =3D el._current;=0A=
var count =3D Math.floor(dx / 10) % range.length;=0A=
for (var i =3D range.length; --i >=3D 0;)=0A=
if (range[i] =3D=3D current)=0A=
break;=0A=
while (count-- > 0)=0A=
if (decrease) {=0A=
if (--i < 0)=0A=
i =3D range.length - 1;=0A=
} else if ( ++i >=3D range.length )=0A=
i =3D 0;=0A=
var newval =3D range[i];=0A=
el.innerHTML =3D newval;=0A=
cal.onUpdateTime();=0A=
}=0A=
var mon =3D Calendar.findMonth(target);=0A=
if (mon) {=0A=
if (mon.month !=3D cal.date.getMonth()) {=0A=
if (cal.hilitedMonth) {=0A=
Calendar.removeClass(cal.hilitedMonth, "hilite");=0A=
}=0A=
Calendar.addClass(mon, "hilite");=0A=
cal.hilitedMonth =3D mon;=0A=
} else if (cal.hilitedMonth) {=0A=
Calendar.removeClass(cal.hilitedMonth, "hilite");=0A=
}=0A=
} else {=0A=
if (cal.hilitedMonth) {=0A=
Calendar.removeClass(cal.hilitedMonth, "hilite");=0A=
}=0A=
var year =3D Calendar.findYear(target);=0A=
if (year) {=0A=
if (year.year !=3D cal.date.getFullYear()) {=0A=
if (cal.hilitedYear) {=0A=
Calendar.removeClass(cal.hilitedYear, "hilite");=0A=
}=0A=
Calendar.addClass(year, "hilite");=0A=
cal.hilitedYear =3D year;=0A=
} else if (cal.hilitedYear) {=0A=
Calendar.removeClass(cal.hilitedYear, "hilite");=0A=
}=0A=
} else if (cal.hilitedYear) {=0A=
Calendar.removeClass(cal.hilitedYear, "hilite");=0A=
}=0A=
}=0A=
return Calendar.stopEvent(ev);=0A=
};=0A=
Calendar.tableMouseDown =3D function (ev) {=0A=
if (Calendar.getTargetElement(ev) =3D=3D Calendar.getElement(ev)) {=0A=
return Calendar.stopEvent(ev);=0A=
}=0A=
};=0A=
Calendar.calDragIt =3D function (ev) {=0A=
var cal =3D Calendar._C;=0A=
if (!(cal && cal.dragging)) {=0A=
return false;=0A=
}=0A=
var posX;=0A=
var posY;=0A=
if (Calendar.is_ie) {=0A=
posY =3D window.event.clientY + document.body.scrollTop;=0A=
posX =3D window.event.clientX + document.body.scrollLeft;=0A=
} else {=0A=
posX =3D ev.pageX;=0A=
posY =3D ev.pageY;=0A=
}=0A=
cal.hideShowCovered();=0A=
var st =3D cal.element.style;=0A=
st.left =3D (posX - cal.xOffs) + "px";=0A=
st.top =3D (posY - cal.yOffs) + "px";=0A=
return Calendar.stopEvent(ev);=0A=
};=0A=
Calendar.calDragEnd =3D function (ev) {=0A=
var cal =3D Calendar._C;=0A=
if (!cal) {=0A=
return false;=0A=
}=0A=
cal.dragging =3D false;=0A=
with (Calendar) {=0A=
removeEvent(document, "mousemove", calDragIt);=0A=
removeEvent(document, "mouseup", calDragEnd);=0A=
tableMouseUp(ev);=0A=
}=0A=
cal.hideShowCovered();=0A=
};=0A=
Calendar.dayMouseDown =3D function(ev) {=0A=
var el =3D Calendar.getElement(ev);=0A=
if (el.disabled) {=0A=
return false;=0A=
}=0A=
var cal =3D el.calendar;=0A=
cal.activeDiv =3D el;=0A=
Calendar._C =3D cal;=0A=
if (el.navtype !=3D 300) with (Calendar) {=0A=
if (el.navtype =3D=3D 50) {=0A=
el._current =3D el.innerHTML;=0A=
addEvent(document, "mousemove", tableMouseOver);=0A=
} else=0A=
addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", =
tableMouseOver);=0A=
addClass(el, "hilite active");=0A=
addEvent(document, "mouseup", tableMouseUp);=0A=
} else if (cal.isPopup) {=0A=
cal._dragStart(ev);=0A=
}=0A=
if (el.navtype =3D=3D -1 || el.navtype =3D=3D 1) {=0A=
if (cal.timeout) clearTimeout(cal.timeout);=0A=
cal.timeout =3D setTimeout("Calendar.showMonthsCombo()", 250);=0A=
} else if (el.navtype =3D=3D -2 || el.navtype =3D=3D 2) {=0A=
if (cal.timeout) clearTimeout(cal.timeout);=0A=
cal.timeout =3D setTimeout((el.navtype > 0) ? =
"Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250);=0A=
} else {=0A=
cal.timeout =3D null;=0A=
}=0A=
return Calendar.stopEvent(ev);=0A=
};=0A=
Calendar.dayMouseDblClick =3D function(ev) {=0A=
Calendar.cellClick(Calendar.getElement(ev), ev || window.event);=0A=
if (Calendar.is_ie) {=0A=
document.selection.empty();=0A=
}=0A=
};=0A=
Calendar.dayMouseOver =3D function(ev) {=0A=
var el =3D Calendar.getElement(ev);=0A=
if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {=0A=
return false;=0A=
}=0A=
if (el.ttip) {=0A=
if (el.ttip.substr(0, 1) =3D=3D "_") {=0A=
el.ttip =3D el.caldate.print(el.calendar.ttDateFormat) + =
el.ttip.substr(1);=0A=
}=0A=
el.calendar.tooltips.innerHTML =3D el.ttip;=0A=
}=0A=
if (el.navtype !=3D 300) {=0A=
Calendar.addClass(el, "hilite");=0A=
if (el.caldate) {=0A=
Calendar.addClass(el.parentNode, "rowhilite");=0A=
}=0A=
}=0A=
return Calendar.stopEvent(ev);=0A=
};=0A=
Calendar.dayMouseOut =3D function(ev) {=0A=
with (Calendar) {=0A=
var el =3D getElement(ev);=0A=
if (isRelated(el, ev) || _C || el.disabled)=0A=
return false;=0A=
removeClass(el, "hilite");=0A=
if (el.caldate)=0A=
removeClass(el.parentNode, "rowhilite");=0A=
if (el.calendar)=0A=
el.calendar.tooltips.innerHTML =3D _TT["SEL_DATE"];=0A=
return stopEvent(ev);=0A=
}=0A=
};=0A=
/**=0A=
*  A generic "click" handler :) handles all types of buttons defined in =
this=0A=
*  calendar.=0A=
*/=0A=
Calendar.cellClick =3D function(el, ev) {=0A=
var cal =3D el.calendar;=0A=
var closing =3D false;=0A=
var newdate =3D false;=0A=
var date =3D null;=0A=
if (typeof el.navtype =3D=3D "undefined") {=0A=
if (cal.currentDateEl) {=0A=
Calendar.removeClass(cal.currentDateEl, "selected");=0A=
Calendar.addClass(el, "selected");=0A=
closing =3D (cal.currentDateEl =3D=3D el);=0A=
if (!closing) {=0A=
cal.currentDateEl =3D el;=0A=
}=0A=
}=0A=
cal.date.setDateOnly(el.caldate);=0A=
date =3D cal.date;=0A=
var other_month =3D !(cal.dateClicked =3D !el.otherMonth);=0A=
if (!other_month && !cal.currentDateEl)=0A=
cal._toggleMultipleDate(new Date(date));=0A=
else=0A=
newdate =3D !el.disabled;=0A=
// a date was clicked=0A=
if (other_month)=0A=
cal._init(cal.firstDayOfWeek, date);=0A=
} else {=0A=
if (el.navtype =3D=3D 200) {=0A=
Calendar.removeClass(el, "hilite");=0A=
cal.callCloseHandler();=0A=
return;=0A=
}=0A=
date =3D new Date(cal.date);=0A=
if (el.navtype =3D=3D 0)=0A=
date.setDateOnly(new Date()); // TODAY=0A=
// unless "today" was clicked, we assume no date was clicked so=0A=
// the selected handler will know not to close the calenar when=0A=
// in single-click mode.=0A=
// cal.dateClicked =3D (el.navtype =3D=3D 0);=0A=
cal.dateClicked =3D false;=0A=
var year =3D date.getFullYear();=0A=
var mon =3D date.getMonth();=0A=
function setMonth(m) {=0A=
var day =3D date.getDate();=0A=
var max =3D date.getMonthDays(m);=0A=
if (day > max) {=0A=
date.setDate(max);=0A=
}=0A=
date.setMonth(m);=0A=
};=0A=
switch (el.navtype) {=0A=
case 400:=0A=
Calendar.removeClass(el, "hilite");=0A=
var text =3D Calendar._TT["ABOUT"];=0A=
if (typeof text !=3D "undefined") {=0A=
text +=3D cal.showsTime ? Calendar._TT["ABOUT_TIME"] : "";=0A=
} else {=0A=
// FIXME: this should be removed as soon as lang files get updated!=0A=
text =3D "Help and about box text is not translated into this =
language.\n" +=0A=
"If you know this language and you feel generous please update\n" +=0A=
"the corresponding file in \"lang\" subdir to match calendar-en.js\n" +=0A=
"and send it back to <mihai_bazon@yahoo.com> to get it into the =
distribution  ;-)\n\n" +=0A=
"Thank you!\n" +=0A=
"http://dynarch.com/mishoo/calendar.epl\n";=0A=
}=0A=
alert(text);=0A=
return;=0A=
case -2:=0A=
if (year > cal.minYear) {=0A=
date.setFullYear(year - 1);=0A=
}=0A=
break;=0A=
case -1:=0A=
if (mon > 0) {=0A=
setMonth(mon - 1);=0A=
} else if (year-- > cal.minYear) {=0A=
date.setFullYear(year);=0A=
setMonth(11);=0A=
}=0A=
break;=0A=
case 1:=0A=
if (mon < 11) {=0A=
setMonth(mon + 1);=0A=
} else if (year < cal.maxYear) {=0A=
date.setFullYear(year + 1);=0A=
setMonth(0);=0A=
}=0A=
break;=0A=
case 2:=0A=
if (year < cal.maxYear) {=0A=
date.setFullYear(year + 1);=0A=
}=0A=
break;=0A=
case 100:=0A=
cal.setFirstDayOfWeek(el.fdow);=0A=
return;=0A=
case 50:=0A=
var range =3D el._range;=0A=
var current =3D el.innerHTML;=0A=
for (var i =3D range.length; --i >=3D 0;)=0A=
if (range[i] =3D=3D current)=0A=
break;=0A=
if (ev && ev.shiftKey) {=0A=
if (--i < 0)=0A=
i =3D range.length - 1;=0A=
} else if ( ++i >=3D range.length )=0A=
i =3D 0;=0A=
var newval =3D range[i];=0A=
el.innerHTML =3D newval;=0A=
cal.onUpdateTime();=0A=
return;=0A=
case 0:=0A=
// TODAY will bring us here=0A=
if ((typeof cal.getDateStatus =3D=3D "function") &&=0A=
cal.getDateStatus(date, date.getFullYear(), date.getMonth(), =
date.getDate())) {=0A=
return false;=0A=
}=0A=
break;=0A=
}=0A=
if (!date.equalsTo(cal.date)) {=0A=
cal.setDate(date);=0A=
newdate =3D true;=0A=
} else if (el.navtype =3D=3D 0)=0A=
newdate =3D closing =3D true;=0A=
}=0A=
if (newdate) {=0A=
ev && cal.callHandler();=0A=
}=0A=
if (closing) {=0A=
Calendar.removeClass(el, "hilite");=0A=
ev && cal.callCloseHandler();=0A=
}=0A=
};=0A=
// END: CALENDAR STATIC FUNCTIONS=0A=
// BEGIN: CALENDAR OBJECT FUNCTIONS=0A=
/**=0A=
*  This function creates the calendar inside the given parent.  If _par =
is=0A=
*  null than it creates a popup calendar inside the BODY element.  If =
_par is=0A=
*  an element, be it BODY, then it creates a non-popup calendar (still=0A=
*  hidden).  Some properties need to be set before calling this function.=0A=
*/=0A=
Calendar.prototype.create =3D function (_par) {=0A=
var parent =3D null;=0A=
if (! _par) {=0A=
// default parent is the document body, in which case we create=0A=
// a popup calendar.=0A=
parent =3D document.getElementsByTagName("body")[0];=0A=
this.isPopup =3D true;=0A=
} else {=0A=
parent =3D _par;=0A=
this.isPopup =3D false;=0A=
}=0A=
this.date =3D this.dateStr ? new Date(this.dateStr) : new Date();=0A=
var table =3D Calendar.createElement("table");=0A=
this.table =3D table;=0A=
table.cellSpacing =3D 0;=0A=
table.cellPadding =3D 0;=0A=
table.calendar =3D this;=0A=
Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);=0A=
var div =3D Calendar.createElement("div");=0A=
this.element =3D div;=0A=
div.className =3D "calendar";=0A=
if (this.isPopup) {=0A=
div.style.position =3D "absolute";=0A=
div.style.display =3D "none";=0A=
}=0A=
div.appendChild(table);=0A=
var thead =3D Calendar.createElement("thead", table);=0A=
var cell =3D null;=0A=
var row =3D null;=0A=
var cal =3D this;=0A=
var hh =3D function (text, cs, navtype) {=0A=
cell =3D Calendar.createElement("td", row);=0A=
cell.colSpan =3D cs;=0A=
cell.className =3D "button";=0A=
if (navtype !=3D 0 && Math.abs(navtype) <=3D 2)=0A=
cell.className +=3D " nav";=0A=
Calendar._add_evs(cell);=0A=
cell.calendar =3D cal;=0A=
cell.navtype =3D navtype;=0A=
cell.innerHTML =3D "<div unselectable=3D'on'>" + text + "</div>";=0A=
return cell;=0A=
};=0A=
row =3D Calendar.createElement("tr", thead);=0A=
var title_length =3D 7; // JCMS HACK REMOVED ABOUT BOX=0A=
(this.isPopup) && --title_length;=0A=
(this.weekNumbers) && ++title_length;=0A=
//hh("?", 1, 400).ttip =3D Calendar._TT["INFO"];// JCMS HACK REMOVED =
ABOUT BOX=0A=
this.title =3D hh("", title_length, 300);=0A=
this.title.className =3D "title";=0A=
if (this.isPopup) {=0A=
this.title.ttip =3D Calendar._TT["DRAG_TO_MOVE"];=0A=
this.title.style.cursor =3D "move";=0A=
hh("&#x00d7;", 1, 200).ttip =3D Calendar._TT["CLOSE"];=0A=
}=0A=
row =3D Calendar.createElement("tr", thead);=0A=
row.className =3D "headrow";=0A=
this._nav_py =3D hh("&#x00ab;", 1, -2);=0A=
this._nav_py.ttip =3D Calendar._TT["PREV_YEAR"];=0A=
this._nav_pm =3D hh("&#x2039;", 1, -1);=0A=
this._nav_pm.ttip =3D Calendar._TT["PREV_MONTH"];=0A=
this._nav_now =3D hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0);=0A=
this._nav_now.ttip =3D Calendar._TT["GO_TODAY"];=0A=
this._nav_nm =3D hh("&#x203a;", 1, 1);=0A=
this._nav_nm.ttip =3D Calendar._TT["NEXT_MONTH"];=0A=
this._nav_ny =3D hh("&#x00bb;", 1, 2);=0A=
this._nav_ny.ttip =3D Calendar._TT["NEXT_YEAR"];=0A=
// day names=0A=
row =3D Calendar.createElement("tr", thead);=0A=
row.className =3D "daynames";=0A=
if (this.weekNumbers) {=0A=
cell =3D Calendar.createElement("td", row);=0A=
cell.className =3D "name wn";=0A=
cell.innerHTML =3D Calendar._TT["WK"];=0A=
}=0A=
for (var i =3D 7; i > 0; --i) {=0A=
cell =3D Calendar.createElement("td", row);=0A=
if (!i) {=0A=
cell.navtype =3D 100;=0A=
cell.calendar =3D this;=0A=
Calendar._add_evs(cell);=0A=
}=0A=
}=0A=
this.firstdayname =3D (this.weekNumbers) ? row.firstChild.nextSibling : =
row.firstChild;=0A=
this._displayWeekdays();=0A=
var tbody =3D Calendar.createElement("tbody", table);=0A=
this.tbody =3D tbody;=0A=
for (i =3D 6; i > 0; --i) {=0A=
row =3D Calendar.createElement("tr", tbody);=0A=
if (this.weekNumbers) {=0A=
cell =3D Calendar.createElement("td", row);=0A=
}=0A=
for (var j =3D 7; j > 0; --j) {=0A=
cell =3D Calendar.createElement("td", row);=0A=
cell.calendar =3D this;=0A=
Calendar._add_evs(cell);=0A=
}=0A=
}=0A=
if (this.showsTime) {=0A=
row =3D Calendar.createElement("tr", tbody);=0A=
row.className =3D "time";=0A=
cell =3D Calendar.createElement("td", row);=0A=
cell.className =3D "time";=0A=
cell.colSpan =3D 2;=0A=
cell.innerHTML =3D Calendar._TT["TIME"] || "&nbsp;";=0A=
cell =3D Calendar.createElement("td", row);=0A=
cell.className =3D "time";=0A=
cell.colSpan =3D this.weekNumbers ? 4 : 3;=0A=
(function(){=0A=
function makeTimePart(className, init, range_start, range_end) {=0A=
var part =3D Calendar.createElement("span", cell);=0A=
part.className =3D className;=0A=
part.innerHTML =3D init;=0A=
part.calendar =3D cal;=0A=
part.ttip =3D Calendar._TT["TIME_PART"];=0A=
part.navtype =3D 50;=0A=
part._range =3D [];=0A=
if (typeof range_start !=3D "number")=0A=
part._range =3D range_start;=0A=
else {=0A=
for (var i =3D range_start; i <=3D range_end; ++i) {=0A=
var txt;=0A=
if (i < 10 && range_end >=3D 10) txt =3D '0' + i;=0A=
else txt =3D '' + i;=0A=
part._range[part._range.length] =3D txt;=0A=
}=0A=
}=0A=
Calendar._add_evs(part);=0A=
return part;=0A=
};=0A=
var hrs =3D cal.date.getHours();=0A=
var mins =3D cal.date.getMinutes();=0A=
var t12 =3D !cal.time24;=0A=
var pm =3D (hrs > 12);=0A=
if (t12 && pm) hrs -=3D 12;=0A=
var H =3D makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);=0A=
var span =3D Calendar.createElement("span", cell);=0A=
span.innerHTML =3D ":";=0A=
span.className =3D "colon";=0A=
var M =3D makeTimePart("minute", mins, 0, 59);=0A=
var AP =3D null;=0A=
cell =3D Calendar.createElement("td", row);=0A=
cell.className =3D "time";=0A=
cell.colSpan =3D 2;=0A=
if (t12)=0A=
AP =3D makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]);=0A=
else=0A=
cell.innerHTML =3D "&nbsp;";=0A=
cal.onSetTime =3D function() {=0A=
var pm, hrs =3D this.date.getHours(),=0A=
mins =3D this.date.getMinutes();=0A=
if (t12) {=0A=
pm =3D (hrs >=3D 12);=0A=
if (pm) hrs -=3D 12;=0A=
if (hrs =3D=3D 0) hrs =3D 12;=0A=
AP.innerHTML =3D pm ? "pm" : "am";=0A=
}=0A=
H.innerHTML =3D (hrs < 10) ? ("0" + hrs) : hrs;=0A=
M.innerHTML =3D (mins < 10) ? ("0" + mins) : mins;=0A=
};=0A=
cal.onUpdateTime =3D function() {=0A=
var date =3D this.date;=0A=
var h =3D parseInt(H.innerHTML, 10);=0A=
if (t12) {=0A=
if (/pm/i.test(AP.innerHTML) && h < 12)=0A=
h +=3D 12;=0A=
else if (/am/i.test(AP.innerHTML) && h =3D=3D 12)=0A=
h =3D 0;=0A=
}=0A=
var d =3D date.getDate();=0A=
var m =3D date.getMonth();=0A=
var y =3D date.getFullYear();=0A=
date.setHours(h);=0A=
date.setMinutes(parseInt(M.innerHTML, 10));=0A=
date.setFullYear(y);=0A=
date.setMonth(m);=0A=
date.setDate(d);=0A=
this.dateClicked =3D false;=0A=
this.callHandler();=0A=
};=0A=
})();=0A=
} else {=0A=
this.onSetTime =3D this.onUpdateTime =3D function() {};=0A=
}=0A=
var tfoot =3D Calendar.createElement("tfoot", table);=0A=
row =3D Calendar.createElement("tr", tfoot);=0A=
row.className =3D "footrow";=0A=
cell =3D hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300);=0A=
cell.className =3D "ttip";=0A=
if (this.isPopup) {=0A=
cell.ttip =3D Calendar._TT["DRAG_TO_MOVE"];=0A=
cell.style.cursor =3D "move";=0A=
}=0A=
this.tooltips =3D cell;=0A=
div =3D Calendar.createElement("div", this.element);=0A=
this.monthsCombo =3D div;=0A=
div.className =3D "combo";=0A=
for (i =3D 0; i < Calendar._MN.length; ++i) {=0A=
var mn =3D Calendar.createElement("div");=0A=
mn.className =3D Calendar.is_ie ? "label-IEfix" : "label";=0A=
mn.month =3D i;=0A=
mn.innerHTML =3D Calendar._SMN[i];=0A=
div.appendChild(mn);=0A=
}=0A=
div =3D Calendar.createElement("div", this.element);=0A=
this.yearsCombo =3D div;=0A=
div.className =3D "combo";=0A=
for (i =3D 12; i > 0; --i) {=0A=
var yr =3D Calendar.createElement("div");=0A=
yr.className =3D Calendar.is_ie ? "label-IEfix" : "label";=0A=
div.appendChild(yr);=0A=
}=0A=
this._init(this.firstDayOfWeek, this.date);=0A=
parent.appendChild(this.element);=0A=
};=0A=
/** keyboard navigation, only for popup calendars */=0A=
Calendar._keyEvent =3D function(ev) {=0A=
var cal =3D window._dynarch_popupCalendar;=0A=
if (!cal || cal.multiple)=0A=
return false;=0A=
(Calendar.is_ie) && (ev =3D window.event);=0A=
var act =3D (Calendar.is_ie || ev.type =3D=3D "keypress"),=0A=
K =3D ev.keyCode;=0A=
if (ev.ctrlKey) {=0A=
switch (K) {=0A=
case 37: // KEY left=0A=
act && Calendar.cellClick(cal._nav_pm);=0A=
break;=0A=
case 38: // KEY up=0A=
act && Calendar.cellClick(cal._nav_py);=0A=
break;=0A=
case 39: // KEY right=0A=
act && Calendar.cellClick(cal._nav_nm);=0A=
break;=0A=
case 40: // KEY down=0A=
act && Calendar.cellClick(cal._nav_ny);=0A=
break;=0A=
default:=0A=
return false;=0A=
}=0A=
} else switch (K) {=0A=
case 32: // KEY space (now)=0A=
Calendar.cellClick(cal._nav_now);=0A=
break;=0A=
case 27: // KEY esc=0A=
act && cal.callCloseHandler();=0A=
break;=0A=
case 37: // KEY left=0A=
case 38: // KEY up=0A=
case 39: // KEY right=0A=
case 40: // KEY down=0A=
if (act) {=0A=
var prev, x, y, ne, el, step;=0A=
prev =3D K =3D=3D 37 || K =3D=3D 38;=0A=
step =3D (K =3D=3D 37 || K =3D=3D 39) ? 1 : 7;=0A=
function setVars() {=0A=
el =3D cal.currentDateEl;=0A=
var p =3D el.pos;=0A=
x =3D p & 15;=0A=
y =3D p >> 4;=0A=
ne =3D cal.ar_days[y][x];=0A=
};setVars();=0A=
function prevMonth() {=0A=
var date =3D new Date(cal.date);=0A=
date.setDate(date.getDate() - step);=0A=
cal.setDate(date);=0A=
};=0A=
function nextMonth() {=0A=
var date =3D new Date(cal.date);=0A=
date.setDate(date.getDate() + step);=0A=
cal.setDate(date);=0A=
};=0A=
while (1) {=0A=
switch (K) {=0A=
case 37: // KEY left=0A=
if (--x >=3D 0)=0A=
ne =3D cal.ar_days[y][x];=0A=
else {=0A=
x =3D 6;=0A=
K =3D 38;=0A=
continue;=0A=
}=0A=
break;=0A=
case 38: // KEY up=0A=
if (--y >=3D 0)=0A=
ne =3D cal.ar_days[y][x];=0A=
else {=0A=
prevMonth();=0A=
setVars();=0A=
}=0A=
break;=0A=
case 39: // KEY right=0A=
if (++x < 7)=0A=
ne =3D cal.ar_days[y][x];=0A=
else {=0A=
x =3D 0;=0A=
K =3D 40;=0A=
continue;=0A=
}=0A=
break;=0A=
case 40: // KEY down=0A=
if (++y < cal.ar_days.length)=0A=
ne =3D cal.ar_days[y][x];=0A=
else {=0A=
nextMonth();=0A=
setVars();=0A=
}=0A=
break;=0A=
}=0A=
break;=0A=
}=0A=
if (ne) {=0A=
if (!ne.disabled)=0A=
Calendar.cellClick(ne);=0A=
else if (prev)=0A=
prevMonth();=0A=
else=0A=
nextMonth();=0A=
}=0A=
}=0A=
break;=0A=
case 13: // KEY enter=0A=
if (act)=0A=
Calendar.cellClick(cal.currentDateEl, ev);=0A=
break;=0A=
default:=0A=
return false;=0A=
}=0A=
return Calendar.stopEvent(ev);=0A=
};=0A=
/**=0A=
*  (RE)Initializes the calendar to the given date and firstDayOfWeek=0A=
*/=0A=
Calendar.prototype._init =3D function (firstDayOfWeek, date) {=0A=
var today =3D new Date(),=0A=
TY =3D today.getFullYear(),=0A=
TM =3D today.getMonth(),=0A=
TD =3D today.getDate();=0A=
this.table.style.visibility =3D "hidden";=0A=
var year =3D date.getFullYear();=0A=
if (year < this.minYear) {=0A=
year =3D this.minYear;=0A=
date.setFullYear(year);=0A=
} else if (year > this.maxYear) {=0A=
year =3D this.maxYear;=0A=
date.setFullYear(year);=0A=
}=0A=
this.firstDayOfWeek =3D firstDayOfWeek;=0A=
this.date =3D new Date(date);=0A=
var month =3D date.getMonth();=0A=
var mday =3D date.getDate();=0A=
var no_days =3D date.getMonthDays();=0A=
// calendar voodoo for computing the first day that would actually be=0A=
// displayed in the calendar, even if it's from the previous month.=0A=
// WARNING: this is magic. ;-)=0A=
date.setDate(1);=0A=
var day1 =3D (date.getDay() - this.firstDayOfWeek) % 7;=0A=
if (day1 < 0)=0A=
day1 +=3D 7;=0A=
date.setDate(-day1);=0A=
date.setDate(date.getDate() + 1);=0A=
var row =3D this.tbody.firstChild;=0A=
var MN =3D Calendar._SMN[month];=0A=
var ar_days =3D this.ar_days =3D new Array();=0A=
var weekend =3D Calendar._TT["WEEKEND"];=0A=
var dates =3D this.multiple ? (this.datesCells =3D {}) : null;=0A=
for (var i =3D 0; i < 6; ++i, row =3D row.nextSibling) {=0A=
var cell =3D row.firstChild;=0A=
if (this.weekNumbers) {=0A=
cell.className =3D "day wn";=0A=
cell.innerHTML =3D date.getWeekNumber();=0A=
cell =3D cell.nextSibling;=0A=
}=0A=
row.className =3D "daysrow";=0A=
var hasdays =3D false, iday, dpos =3D ar_days[i] =3D [];=0A=
for (var j =3D 0; j < 7; ++j, cell =3D cell.nextSibling, =
date.setDate(iday + 1)) {=0A=
iday =3D date.getDate();=0A=
var wday =3D date.getDay();=0A=
cell.className =3D "day";=0A=
cell.pos =3D i << 4 | j;=0A=
dpos[j] =3D cell;=0A=
var current_month =3D (date.getMonth() =3D=3D month);=0A=
if (!current_month) {=0A=
if (this.showsOtherMonths) {=0A=
cell.className +=3D " othermonth";=0A=
cell.otherMonth =3D true;=0A=
} else {=0A=
cell.className =3D "emptycell";=0A=
cell.innerHTML =3D "&nbsp;";=0A=
cell.disabled =3D true;=0A=
continue;=0A=
}=0A=
} else {=0A=
cell.otherMonth =3D false;=0A=
hasdays =3D true;=0A=
}=0A=
cell.disabled =3D false;=0A=
cell.innerHTML =3D this.getDateText ? this.getDateText(date, iday) : =
iday;=0A=
if (dates)=0A=
dates[date.print("%Y%m%d")] =3D cell;=0A=
if (this.getDateStatus) {=0A=
var status =3D this.getDateStatus(date, year, month, iday);=0A=
if (this.getDateToolTip) {=0A=
var toolTip =3D this.getDateToolTip(date, year, month, iday);=0A=
if (toolTip)=0A=
cell.title =3D toolTip;=0A=
}=0A=
if (status =3D=3D=3D true) {=0A=
cell.className +=3D " disabled";=0A=
cell.disabled =3D true;=0A=
} else {=0A=
if (/disabled/i.test(status))=0A=
cell.disabled =3D true;=0A=
cell.className +=3D " " + status;=0A=
}=0A=
}=0A=
if (!cell.disabled) {=0A=
cell.caldate =3D new Date(date);=0A=
cell.ttip =3D "_";=0A=
if (!this.multiple && current_month=0A=
&& iday =3D=3D mday && this.hiliteToday) {=0A=
cell.className +=3D " selected";=0A=
this.currentDateEl =3D cell;=0A=
}=0A=
if (date.getFullYear() =3D=3D TY &&=0A=
date.getMonth() =3D=3D TM &&=0A=
iday =3D=3D TD) {=0A=
cell.className +=3D " today";=0A=
cell.ttip +=3D Calendar._TT["PART_TODAY"];=0A=
}=0A=
if (weekend.indexOf(wday.toString()) !=3D -1)=0A=
cell.className +=3D cell.otherMonth ? " oweekend" : " weekend";=0A=
}=0A=
}=0A=
if (!(hasdays || this.showsOtherMonths))=0A=
row.className =3D "emptyrow";=0A=
}=0A=
this.title.innerHTML =3D Calendar._MN[month] + ", " + year;=0A=
this.onSetTime();=0A=
this.table.style.visibility =3D "visible";=0A=
this._initMultipleDates();=0A=
// PROFILE=0A=
// this.tooltips.innerHTML =3D "Generated in " + ((new Date()) - today) =
+ " ms";=0A=
};=0A=
Calendar.prototype._initMultipleDates =3D function() {=0A=
if (this.multiple) {=0A=
for (var i in this.multiple) {=0A=
var cell =3D this.datesCells[i];=0A=
var d =3D this.multiple[i];=0A=
if (!d)=0A=
continue;=0A=
if (cell)=0A=
cell.className +=3D " selected";=0A=
}=0A=
}=0A=
};=0A=
Calendar.prototype._toggleMultipleDate =3D function(date) {=0A=
if (this.multiple) {=0A=
var ds =3D date.print("%Y%m%d");=0A=
var cell =3D this.datesCells[ds];=0A=
if (cell) {=0A=
var d =3D this.multiple[ds];=0A=
if (!d) {=0A=
Calendar.addClass(cell, "selected");=0A=
this.multiple[ds] =3D date;=0A=
} else {=0A=
Calendar.removeClass(cell, "selected");=0A=
delete this.multiple[ds];=0A=
}=0A=
}=0A=
}=0A=
};=0A=
Calendar.prototype.setDateToolTipHandler =3D function (unaryFunction) {=0A=
this.getDateToolTip =3D unaryFunction;=0A=
};=0A=
/**=0A=
*  Calls _init function above for going to a certain date (but only if =
the=0A=
*  date is different than the currently selected one).=0A=
*/=0A=
Calendar.prototype.setDate =3D function (date) {=0A=
if (!date.equalsTo(this.date)) {=0A=
this._init(this.firstDayOfWeek, date);=0A=
}=0A=
};=0A=
/**=0A=
*  Refreshes the calendar.  Useful if the "disabledHandler" function is=0A=
*  dynamic, meaning that the list of disabled date can change at runtime.=0A=
*  Just * call this function if you think that the list of disabled dates=0A=
*  should * change.=0A=
*/=0A=
Calendar.prototype.refresh =3D function () {=0A=
this._init(this.firstDayOfWeek, this.date);=0A=
};=0A=
/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for =
Monday, etc.). */=0A=
Calendar.prototype.setFirstDayOfWeek =3D function (firstDayOfWeek) {=0A=
this._init(firstDayOfWeek, this.date);=0A=
this._displayWeekdays();=0A=
};=0A=
/**=0A=
*  Allows customization of what dates are enabled.  The "unaryFunction"=0A=
*  parameter must be a function object that receives the date (as a JS =
Date=0A=
*  object) and returns a boolean value.  If the returned value is true =
then=0A=
*  the passed date will be marked as disabled.=0A=
*/=0A=
Calendar.prototype.setDateStatusHandler =3D =
Calendar.prototype.setDisabledHandler =3D function (unaryFunction) {=0A=
this.getDateStatus =3D unaryFunction;=0A=
};=0A=
/** Customization of allowed year range for the calendar. */=0A=
Calendar.prototype.setRange =3D function (a, z) {=0A=
this.minYear =3D a;=0A=
this.maxYear =3D z;=0A=
};=0A=
/** Calls the first user handler (selectedHandler). */=0A=
Calendar.prototype.callHandler =3D function () {=0A=
if (this.onSelected) {=0A=
this.onSelected(this, this.date.print(this.dateFormat));=0A=
}=0A=
};=0A=
/** Calls the second user handler (closeHandler). */=0A=
Calendar.prototype.callCloseHandler =3D function () {=0A=
if (this.onClose) {=0A=
this.onClose(this);=0A=
}=0A=
this.hideShowCovered();=0A=
};=0A=
/** Removes the calendar object from the DOM tree and destroys it. */=0A=
Calendar.prototype.destroy =3D function () {=0A=
var el =3D this.element.parentNode;=0A=
el.removeChild(this.element);=0A=
Calendar._C =3D null;=0A=
window._dynarch_popupCalendar =3D null;=0A=
};=0A=
/**=0A=
*  Moves the calendar element to a different section in the DOM tree =
(changes=0A=
*  its parent).=0A=
*/=0A=
Calendar.prototype.reparent =3D function (new_parent) {=0A=
var el =3D this.element;=0A=
el.parentNode.removeChild(el);=0A=
new_parent.appendChild(el);=0A=
};=0A=
// This gets called when the user presses a mouse button anywhere in the=0A=
// document, if the calendar is shown.  If the click was outside the open=0A=
// calendar this function closes it.=0A=
Calendar._checkCalendar =3D function(ev) {=0A=
var calendar =3D window._dynarch_popupCalendar;=0A=
if (!calendar) {=0A=
return false;=0A=
}=0A=
var el =3D Calendar.is_ie ? Calendar.getElement(ev) : =
Calendar.getTargetElement(ev);=0A=
for (; el !=3D null && el !=3D calendar.element; el =3D el.parentNode);=0A=
if (el =3D=3D null) {=0A=
// calls closeHandler which should hide the calendar.=0A=
window._dynarch_popupCalendar.callCloseHandler();=0A=
return Calendar.stopEvent(ev);=0A=
}=0A=
};=0A=
/** Shows the calendar. */=0A=
Calendar.prototype.show =3D function () {=0A=
var rows =3D this.table.getElementsByTagName("tr");=0A=
for (var i =3D rows.length; i > 0;) {=0A=
var row =3D rows[--i];=0A=
Calendar.removeClass(row, "rowhilite");=0A=
var cells =3D row.getElementsByTagName("td");=0A=
for (var j =3D cells.length; j > 0;) {=0A=
var cell =3D cells[--j];=0A=
Calendar.removeClass(cell, "hilite");=0A=
Calendar.removeClass(cell, "active");=0A=
}=0A=
}=0A=
this.element.style.display =3D "block";=0A=
this.hidden =3D false;=0A=
if (this.isPopup) {=0A=
window._dynarch_popupCalendar =3D this;=0A=
Calendar.addEvent(document, "keydown", Calendar._keyEvent);=0A=
Calendar.addEvent(document, "keypress", Calendar._keyEvent);=0A=
Calendar.addEvent(document, "mousedown", Calendar._checkCalendar);=0A=
}=0A=
this.hideShowCovered();=0A=
};=0A=
/**=0A=
*  Hides the calendar.  Also removes any "hilite" from the class of any =
TD=0A=
*  element.=0A=
*/=0A=
Calendar.prototype.hide =3D function () {=0A=
if (this.isPopup) {=0A=
Calendar.removeEvent(document, "keydown", Calendar._keyEvent);=0A=
Calendar.removeEvent(document, "keypress", Calendar._keyEvent);=0A=
Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar);=0A=
}=0A=
this.element.style.display =3D "none";=0A=
this.hidden =3D true;=0A=
this.hideShowCovered();=0A=
};=0A=
/**=0A=
*  Shows the calendar at a given absolute position (beware that, =
depending on=0A=
*  the calendar element style -- position property -- this might be =
relative=0A=
*  to the parent's containing rectangle).=0A=
*/=0A=
Calendar.prototype.showAt =3D function (x, y) {=0A=
var s =3D this.element.style;=0A=
s.left =3D x + "px";=0A=
s.top =3D y + "px";=0A=
this.show();=0A=
};=0A=
/** Shows the calendar near a given element. */=0A=
Calendar.prototype.showAtElement =3D function (el, opts) {=0A=
var self =3D this;=0A=
var p =3D Calendar.getAbsolutePos(el);=0A=
if (!opts || typeof opts !=3D "string") {=0A=
this.showAt(p.x, p.y + el.offsetHeight);=0A=
return true;=0A=
}=0A=
function fixPosition(box) {=0A=
if (box.x < 0)=0A=
box.x =3D 0;=0A=
if (box.y < 0)=0A=
box.y =3D 0;=0A=
var cp =3D document.createElement("div");=0A=
var s =3D cp.style;=0A=
s.position =3D "absolute";=0A=
s.right =3D s.bottom =3D s.width =3D s.height =3D "0px";=0A=
document.body.appendChild(cp);=0A=
var br =3D Calendar.getAbsolutePos(cp);=0A=
document.body.removeChild(cp);=0A=
if (Calendar.is_ie) {=0A=
br.y +=3D document.body.scrollTop;=0A=
br.x +=3D document.body.scrollLeft;=0A=
} else {=0A=
br.y +=3D window.scrollY;=0A=
br.x +=3D window.scrollX;=0A=
}=0A=
var tmp =3D box.x + box.width - br.x;=0A=
if (tmp > 0) box.x -=3D tmp;=0A=
tmp =3D box.y + box.height - br.y;=0A=
if (tmp > 0) box.y -=3D tmp;=0A=
};=0A=
this.element.style.display =3D "block";=0A=
Calendar.continuation_for_the_fucking_khtml_browser =3D function() {=0A=
var w =3D self.element.offsetWidth;=0A=
var h =3D self.element.offsetHeight;=0A=
self.element.style.display =3D "none";=0A=
var valign =3D opts.substr(0, 1);=0A=
var halign =3D "l";=0A=
if (opts.length > 1) {=0A=
halign =3D opts.substr(1, 1);=0A=
}=0A=
// vertical alignment=0A=
switch (valign) {=0A=
case "T": p.y -=3D h; break;=0A=
case "B": p.y +=3D el.offsetHeight; break;=0A=
case "C": p.y +=3D (el.offsetHeight - h) / 2; break;=0A=
case "t": p.y +=3D el.offsetHeight - h; break;=0A=
case "b": break; // already there=0A=
}=0A=
// horizontal alignment=0A=
switch (halign) {=0A=
case "L": p.x -=3D w; break;=0A=
case "R": p.x +=3D el.offsetWidth; break;=0A=
case "C": p.x +=3D (el.offsetWidth - w) / 2; break;=0A=
case "l": p.x +=3D el.offsetWidth - w; break;=0A=
case "r": break; // already there=0A=
}=0A=
p.width =3D w;=0A=
p.height =3D h + 40;=0A=
self.monthsCombo.style.display =3D "none";=0A=
fixPosition(p);=0A=
self.showAt(p.x, p.y);=0A=
};=0A=
if (Calendar.is_khtml)=0A=
setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10);=0A=
else=0A=
Calendar.continuation_for_the_fucking_khtml_browser();=0A=
};=0A=
/** Customizes the date format. */=0A=
Calendar.prototype.setDateFormat =3D function (str) {=0A=
this.dateFormat =3D str;=0A=
};=0A=
/** Customizes the tooltip date format. */=0A=
Calendar.prototype.setTtDateFormat =3D function (str) {=0A=
this.ttDateFormat =3D str;=0A=
};=0A=
/**=0A=
*  Tries to identify the date represented in a string.  If successful it =
also=0A=
*  calls this.setDate which moves the calendar to the given date.=0A=
*/=0A=
Calendar.prototype.parseDate =3D function(str, fmt) {=0A=
if (!fmt)=0A=
fmt =3D this.dateFormat;=0A=
this.setDate(Date.parseDate(str, fmt));=0A=
};=0A=
Calendar.prototype.hideShowCovered =3D function () {=0A=
if (!Calendar.is_ie && !Calendar.is_opera)=0A=
return;=0A=
function getVisib(obj){=0A=
var value =3D obj.style.visibility;=0A=
if (!value) {=0A=
if (document.defaultView && typeof =
(document.defaultView.getComputedStyle) =3D=3D "function") { // Gecko, =
W3C=0A=
if (!Calendar.is_khtml)=0A=
value =3D document.defaultView.=0A=
getComputedStyle(obj, "").getPropertyValue("visibility");=0A=
else=0A=
value =3D '';=0A=
} else if (obj.currentStyle) { // IE=0A=
value =3D obj.currentStyle.visibility;=0A=
} else=0A=
value =3D '';=0A=
}=0A=
return value;=0A=
};=0A=
var tags =3D new Array("applet", "iframe", "select");=0A=
var el =3D this.element;=0A=
var p =3D Calendar.getAbsolutePos(el);=0A=
var EX1 =3D p.x;=0A=
var EX2 =3D el.offsetWidth + EX1;=0A=
var EY1 =3D p.y;=0A=
var EY2 =3D el.offsetHeight + EY1;=0A=
for (var k =3D tags.length; k > 0; ) {=0A=
var ar =3D document.getElementsByTagName(tags[--k]);=0A=
var cc =3D null;=0A=
for (var i =3D ar.length; i > 0;) {=0A=
cc =3D ar[--i];=0A=
p =3D Calendar.getAbsolutePos(cc);=0A=
var CX1 =3D p.x;=0A=
var CX2 =3D cc.offsetWidth + CX1;=0A=
var CY1 =3D p.y;=0A=
var CY2 =3D cc.offsetHeight + CY1;=0A=
if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < =
EY1)) {=0A=
if (!cc.__msh_save_visibility) {=0A=
cc.__msh_save_visibility =3D getVisib(cc);=0A=
}=0A=
cc.style.visibility =3D cc.__msh_save_visibility;=0A=
} else {=0A=
if (!cc.__msh_save_visibility) {=0A=
cc.__msh_save_visibility =3D getVisib(cc);=0A=
}=0A=
cc.style.visibility =3D "hidden";=0A=
}=0A=
}=0A=
}=0A=
};=0A=
/** Internal function; it displays the bar with the names of the =
weekday. */=0A=
Calendar.prototype._displayWeekdays =3D function () {=0A=
var fdow =3D this.firstDayOfWeek;=0A=
var cell =3D this.firstdayname;=0A=
var weekend =3D Calendar._TT["WEEKEND"];=0A=
for (var i =3D 0; i < 7; ++i) {=0A=
cell.className =3D "day name";=0A=
var realday =3D (i + fdow) % 7;=0A=
if (i) {=0A=
cell.ttip =3D Calendar._TT["DAY_FIRST"].replace("%s", =
Calendar._DN[realday]);=0A=
cell.navtype =3D 100;=0A=
cell.calendar =3D this;=0A=
cell.fdow =3D realday;=0A=
Calendar._add_evs(cell);=0A=
}=0A=
if (weekend.indexOf(realday.toString()) !=3D -1) {=0A=
Calendar.addClass(cell, "weekend");=0A=
}=0A=
cell.innerHTML =3D Calendar._SDN[(i + fdow) % 7];=0A=
cell =3D cell.nextSibling;=0A=
}=0A=
};=0A=
/** Internal function.  Hides all combo boxes that might be displayed. */=0A=
Calendar.prototype._hideCombos =3D function () {=0A=
this.monthsCombo.style.display =3D "none";=0A=
this.yearsCombo.style.display =3D "none";=0A=
};=0A=
/** Internal function.  Starts dragging the element. */=0A=
Calendar.prototype._dragStart =3D function (ev) {=0A=
if (this.dragging) {=0A=
return;=0A=
}=0A=
this.dragging =3D true;=0A=
var posX;=0A=
var posY;=0A=
if (Calendar.is_ie) {=0A=
posY =3D window.event.clientY + document.body.scrollTop;=0A=
posX =3D window.event.clientX + document.body.scrollLeft;=0A=
} else {=0A=
posY =3D ev.clientY + window.scrollY;=0A=
posX =3D ev.clientX + window.scrollX;=0A=
}=0A=
var st =3D this.element.style;=0A=
this.xOffs =3D posX - parseInt(st.left);=0A=
this.yOffs =3D posY - parseInt(st.top);=0A=
with (Calendar) {=0A=
addEvent(document, "mousemove", calDragIt);=0A=
addEvent(document, "mouseup", calDragEnd);=0A=
}=0A=
};=0A=
// BEGIN: DATE OBJECT PATCHES=0A=
/** Adds the number of days array to the Date object. */=0A=
Date._MD =3D new Array(31,28,31,30,31,30,31,31,30,31,30,31);=0A=
/** Constants used for time computations */=0A=
Date.SECOND =3D 1000 /* milliseconds */;=0A=
Date.MINUTE =3D 60 * Date.SECOND;=0A=
Date.HOUR   =3D 60 * Date.MINUTE;=0A=
Date.DAY    =3D 24 * Date.HOUR;=0A=
Date.WEEK   =3D  7 * Date.DAY;=0A=
Date.parseDate =3D function(str, fmt) {=0A=
var today =3D new Date();=0A=
var y =3D 0;=0A=
var m =3D -1;=0A=
var d =3D 0;=0A=
var a =3D str.split(/\W+/);=0A=
var b =3D fmt.match(/%./g);=0A=
var i =3D 0, j =3D 0;=0A=
var hr =3D 0;=0A=
var min =3D 0;=0A=
for (i =3D 0; i < a.length; ++i) {=0A=
if (!a[i])=0A=
continue;=0A=
switch (b[i]) {=0A=
case "%d":=0A=
case "%e":=0A=
d =3D parseInt(a[i], 10);=0A=
break;=0A=
case "%m":=0A=
m =3D parseInt(a[i], 10) - 1;=0A=
break;=0A=
case "%Y":=0A=
case "%y":=0A=
y =3D parseInt(a[i], 10);=0A=
(y < 100) && (y +=3D (y > 29) ? 1900 : 2000);=0A=
break;=0A=
case "%b":=0A=
case "%B":=0A=
for (j =3D 0; j < 12; ++j) {=0A=
if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() =3D=3D =
a[i].toLowerCase()) { m =3D j; break; }=0A=
}=0A=
break;=0A=
case "%H":=0A=
case "%I":=0A=
case "%k":=0A=
case "%l":=0A=
hr =3D parseInt(a[i], 10);=0A=
break;=0A=
case "%P":=0A=
case "%p":=0A=
if (/pm/i.test(a[i]) && hr < 12)=0A=
hr +=3D 12;=0A=
else if (/am/i.test(a[i]) && hr >=3D 12)=0A=
hr -=3D 12;=0A=
break;=0A=
case "%M":=0A=
min =3D parseInt(a[i], 10);=0A=
break;=0A=
}=0A=
}=0A=
if (isNaN(y)) y =3D today.getFullYear();=0A=
if (isNaN(m)) m =3D today.getMonth();=0A=
if (isNaN(d)) d =3D today.getDate();=0A=
if (isNaN(hr)) hr =3D today.getHours();=0A=
if (isNaN(min)) min =3D today.getMinutes();=0A=
if (y !=3D 0 && m !=3D -1 && d !=3D 0)=0A=
return new Date(y, m, d, hr, min, 0);=0A=
y =3D 0; m =3D -1; d =3D 0;=0A=
for (i =3D 0; i < a.length; ++i) {=0A=
if (a[i].search(/[a-zA-Z]+/) !=3D -1) {=0A=
var t =3D -1;=0A=
for (j =3D 0; j < 12; ++j) {=0A=
if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() =3D=3D =
a[i].toLowerCase()) { t =3D j; break; }=0A=
}=0A=
if (t !=3D -1) {=0A=
if (m !=3D -1) {=0A=
d =3D m+1;=0A=
}=0A=
m =3D t;=0A=
}=0A=
} else if (parseInt(a[i], 10) <=3D 12 && m =3D=3D -1) {=0A=
m =3D a[i]-1;=0A=
} else if (parseInt(a[i], 10) > 31 && y =3D=3D 0) {=0A=
y =3D parseInt(a[i], 10);=0A=
(y < 100) && (y +=3D (y > 29) ? 1900 : 2000);=0A=
} else if (d =3D=3D 0) {=0A=
d =3D a[i];=0A=
}=0A=
}=0A=
if (y =3D=3D 0)=0A=
y =3D today.getFullYear();=0A=
if (m !=3D -1 && d !=3D 0)=0A=
return new Date(y, m, d, hr, min, 0);=0A=
return today;=0A=
};=0A=
/** Returns the number of days in the current month */=0A=
Date.prototype.getMonthDays =3D function(month) {=0A=
var year =3D this.getFullYear();=0A=
if (typeof month =3D=3D "undefined") {=0A=
month =3D this.getMonth();=0A=
}=0A=
if (((0 =3D=3D (year%4)) && ( (0 !=3D (year%100)) || (0 =3D=3D =
(year%400)))) && month =3D=3D 1) {=0A=
return 29;=0A=
} else {=0A=
return Date._MD[month];=0A=
}=0A=
};=0A=
/** Returns the number of day in the year. */=0A=
Date.prototype.getDayOfYear =3D function() {=0A=
var now =3D new Date(this.getFullYear(), this.getMonth(), =
this.getDate(), 0, 0, 0);=0A=
var then =3D new Date(this.getFullYear(), 0, 0, 0, 0, 0);=0A=
var time =3D now - then;=0A=
return Math.floor(time / Date.DAY);=0A=
};=0A=
/** Returns the number of the week in year, as defined in ISO 8601. */=0A=
Date.prototype.getWeekNumber =3D function() {=0A=
var d =3D new Date(this.getFullYear(), this.getMonth(), this.getDate(), =
0, 0, 0);=0A=
var DoW =3D d.getDay();=0A=
d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu=0A=
var ms =3D d.valueOf(); // GMT=0A=
d.setMonth(0);=0A=
d.setDate(4); // Thu in Week 1=0A=
return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;=0A=
};=0A=
/** Checks date and time equality */=0A=
Date.prototype.equalsTo =3D function(date) {=0A=
return ((this.getFullYear() =3D=3D date.getFullYear()) &&=0A=
(this.getMonth() =3D=3D date.getMonth()) &&=0A=
(this.getDate() =3D=3D date.getDate()) &&=0A=
(this.getHours() =3D=3D date.getHours()) &&=0A=
(this.getMinutes() =3D=3D date.getMinutes()));=0A=
};=0A=
/** Set only the year, month, date parts (keep existing time) */=0A=
Date.prototype.setDateOnly =3D function(date) {=0A=
var tmp =3D new Date(date);=0A=
this.setDate(1);=0A=
this.setFullYear(tmp.getFullYear());=0A=
this.setMonth(tmp.getMonth());=0A=
this.setDate(tmp.getDate());=0A=
};=0A=
/** Prints the date in a string according to the given format. */=0A=
Date.prototype.print =3D function (str) {=0A=
var m =3D this.getMonth();=0A=
var d =3D this.getDate();=0A=
var y =3D this.getFullYear();=0A=
var wn =3D this.getWeekNumber();=0A=
var w =3D this.getDay();=0A=
var s =3D {};=0A=
var hr =3D this.getHours();=0A=
var pm =3D (hr >=3D 12);=0A=
var ir =3D (pm) ? (hr - 12) : hr;=0A=
var dy =3D this.getDayOfYear();=0A=
if (ir =3D=3D 0)=0A=
ir =3D 12;=0A=
var min =3D this.getMinutes();=0A=
var sec =3D this.getSeconds();=0A=
s["%a"] =3D Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N]=0A=
s["%A"] =3D Calendar._DN[w]; // full weekday name=0A=
s["%b"] =3D Calendar._SMN[m]; // abbreviated month name [FIXME: I18N]=0A=
s["%B"] =3D Calendar._MN[m]; // full month name=0A=
// FIXME: %c : preferred date and time representation for the current =
locale=0A=
s["%C"] =3D 1 + Math.floor(y / 100); // the century number=0A=
s["%d"] =3D (d < 10) ? ("0" + d) : d; // the day of the month (range 01 =
to 31)=0A=
s["%e"] =3D d; // the day of the month (range 1 to 31)=0A=
// FIXME: %D : american date style: %m/%d/%y=0A=
// FIXME: %E, %F, %G, %g, %h (man strftime)=0A=
s["%H"] =3D (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h =
format)=0A=
s["%I"] =3D (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h =
format)=0A=
s["%j"] =3D (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // =
day of the year (range 001 to 366)=0A=
s["%k"] =3D hr;		// hour, range 0 to 23 (24h format)=0A=
s["%l"] =3D ir;		// hour, range 1 to 12 (12h format)=0A=
s["%m"] =3D (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12=0A=
s["%M"] =3D (min < 10) ? ("0" + min) : min; // minute, range 00 to 59=0A=
s["%n"] =3D "\n";		// a newline character=0A=
s["%p"] =3D pm ? "PM" : "AM";=0A=
s["%P"] =3D pm ? "pm" : "am";=0A=
// FIXME: %r : the time in am/pm notation %I:%M:%S %p=0A=
// FIXME: %R : the time in 24-hour notation %H:%M=0A=
s["%s"] =3D Math.floor(this.getTime() / 1000);=0A=
s["%S"] =3D (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59=0A=
s["%t"] =3D "\t";		// a tab character=0A=
// FIXME: %T : the time in 24-hour notation (%H:%M:%S)=0A=
s["%U"] =3D s["%W"] =3D s["%V"] =3D (wn < 10) ? ("0" + wn) : wn;=0A=
s["%u"] =3D w + 1;	// the day of the week (range 1 to 7, 1 =3D MON)=0A=
s["%w"] =3D w;		// the day of the week (range 0 to 6, 0 =3D SUN)=0A=
// FIXME: %x : preferred date representation for the current locale =
without the time=0A=
// FIXME: %X : preferred time representation for the current locale =
without the date=0A=
s["%y"] =3D ('' + y).substr(2, 2); // year without the century (range 00 =
to 99)=0A=
s["%Y"] =3D y;		// year with the century=0A=
s["%%"] =3D "%";		// a literal '%' character=0A=
var re =3D /%./g;=0A=
if (!Calendar.is_ie5 && !Calendar.is_khtml)=0A=
return str.replace(re, function (par) { return s[par] || par; });=0A=
var a =3D str.match(re);=0A=
for (var i =3D 0; i < a.length; i++) {=0A=
var tmp =3D s[a[i]];=0A=
if (tmp) {=0A=
re =3D new RegExp(a[i], 'g');=0A=
str =3D str.replace(re, tmp);=0A=
}=0A=
}=0A=
return str;=0A=
};=0A=
Date.prototype.__msh_oldSetFullYear =3D Date.prototype.setFullYear;=0A=
Date.prototype.setFullYear =3D function(y) {=0A=
var d =3D new Date(this);=0A=
d.__msh_oldSetFullYear(y);=0A=
if (d.getMonth() !=3D this.getMonth())=0A=
this.setDate(28);=0A=
this.__msh_oldSetFullYear(y);=0A=
};=0A=
// END: DATE OBJECT PATCHES=0A=
// global object that remembers the calendar=0A=
window._dynarch_popupCalendar =3D null;=0A=
/* js/calendar/lang/calendar-fr.js */=0A=
// ** I18N=0A=
// Calendar FR language=0A=
// Encoding: UTF-8=0A=
// full day names=0A=
Calendar._DN =3D new Array=0A=
("Dimanche",=0A=
"Lundi",=0A=
"Mardi",=0A=
"Mercredi",=0A=
"Jeudi",=0A=
"Vendredi",=0A=
"Samedi",=0A=
"Dimanche");=0A=
// Please note that the following array of short day names (and the same =
goes=0A=
// for short month names, _SMN) isn't absolutely necessary.  We give it =
here=0A=
// for exemplification on how one can customize the short day names, but =
if=0A=
// they are simply the first N letters of the full name you can simply =
say:=0A=
//=0A=
//   Calendar._SDN_len =3D N; // short day name length=0A=
//   Calendar._SMN_len =3D N; // short month name length=0A=
//=0A=
// If N =3D 3 then this is not needed either since we assume a value of =
3 if not=0A=
// present, to be compatible with translation files that were written =
before=0A=
// this feature.=0A=
// short day names=0A=
Calendar._SDN =3D new Array=0A=
("Dim",=0A=
"Lun",=0A=
"Mar",=0A=
"Mer",=0A=
"Jeu",=0A=
"Ven",=0A=
"Sam",=0A=
"Dim");=0A=
// First day of the week. "0" means display Sunday first, "1" means =
display=0A=
// Monday first, etc.=0A=
Calendar._FD =3D 1;=0A=
// full month names=0A=
Calendar._MN =3D new Array=0A=
("Janvier",=0A=
"F=C3=A9vrier",=0A=
"Mars",=0A=
"Avril",=0A=
"Mai",=0A=
"Juin",=0A=
"Juillet",=0A=
"Ao=C3=BBt",=0A=
"Septembre",=0A=
"Octobre",=0A=
"Novembre",=0A=
"D=C3=A9cembre");=0A=
// short month names=0A=
Calendar._SMN =3D new Array=0A=
("Jan",=0A=
"Fev",=0A=
"Mar",=0A=
"Avr",=0A=
"Mai",=0A=
"Juin",=0A=
"Juil",=0A=
"Aout",=0A=
"Sep",=0A=
"Oct",=0A=
"Nov",=0A=
"Dec");=0A=
// tooltips=0A=
Calendar._TT =3D {};=0A=
Calendar._TT["INFO"] =3D "A propos du calendrier";=0A=
Calendar._TT["ABOUT"] =3D=0A=
"DHTML Date/Heure Selecteur\n" +=0A=
"(c) dynarch.com 2002-2003\n" + // don't translate this this ;-)=0A=
"Pour la derniere version visitez: =
http://dynarch.com/mishoo/calendar.epl\n" +=0A=
"Distribu=C3=A9 par GNU LGPL.  Voir http://gnu.org/licenses/lgpl.html =
pour les details." +=0A=
"\n\n" +=0A=
"Selection de la date :\n" +=0A=
"- Utiliser les bouttons \xab, \xbb  pour selectionner l\'annee\n" +=0A=
"- Utiliser les bouttons " + String.fromCharCode(0x2039) + ", " + =
String.fromCharCode(0x203a) + " pour selectionner les mois\n" +=0A=
"- Garder la souris sur n'importe quels boutons pour un selection plus =
rapide";=0A=
Calendar._TT["ABOUT_TIME"] =3D "\n\n" +=0A=
"Selection de l\'heure:\n" +=0A=
"- Cliquer sur heures ou minutes pour incrementer\n" +=0A=
"- ou Maj-clic pour decrementer\n" +=0A=
"- ou clic et glisser deplacer pour un selection plus rapide";=0A=
Calendar._TT["PREV_YEAR"] =3D "Ann=C3=A9e pr=C3=A9c. (maintenir pour =
menu)";=0A=
Calendar._TT["PREV_MONTH"] =3D "Mois pr=C3=A9c. (maintenir pour menu)";=0A=
Calendar._TT["GO_TODAY"] =3D "Atteindre date du jour";=0A=
Calendar._TT["NEXT_MONTH"] =3D "Mois suiv. (maintenir pour menu)";=0A=
Calendar._TT["NEXT_YEAR"] =3D "Ann=C3=A9e suiv. (maintenir pour menu)";=0A=
Calendar._TT["SEL_DATE"] =3D "Choisir une date";=0A=
Calendar._TT["DRAG_TO_MOVE"] =3D "D=C3=A9placer";=0A=
Calendar._TT["PART_TODAY"] =3D " (Aujourd'hui)";=0A=
// the following is to inform that "%s" is to be the first day of week=0A=
// %s will be replaced with the day name.=0A=
Calendar._TT["DAY_FIRST"] =3D "Commencer par %s";=0A=
// This may be locale-dependent.  It specifies the week-end days, as an =
array=0A=
// of comma-separated numbers.  The numbers are from 0 to 6: 0 means =
Sunday, 1=0A=
// means Monday, etc.=0A=
Calendar._TT["WEEKEND"] =3D "6,0";=0A=
Calendar._TT["CLOSE"] =3D "Fermer";=0A=
Calendar._TT["TODAY"] =3D "Aujourd'hui";=0A=
Calendar._TT["TIME_PART"] =3D "(Maj-)Click ou d=C3=A9placer pour changer =
la valeur";=0A=
// date formats=0A=
Calendar._TT["DEF_DATE_FORMAT"] =3D "%d-%m-%y";=0A=
Calendar._TT["TT_DATE_FORMAT"] =3D " %A %e %B %Y";=0A=
Calendar._TT["WK"] =3D "sem";=0A=
Calendar._TT["TIME"] =3D "Heure:";=0A=
// Original French I18N... no idea if it's used=0A=
Calendar._TT["TOGGLE"] =3D "Changer le premier jour de la semaine";=0A=
Calendar._TT["MON_FIRST"] =3D "Commencer par lundi";=0A=
Calendar._TT["SUN_FIRST"] =3D "Commencer par dimanche";=0A=
/* js/calendar/calendar-setup.js */=0A=
/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/=0A=
* =
-------------------------------------------------------------------------=
--=0A=
*=0A=
* The DHTML Calendar=0A=
*=0A=
* Details and latest version at:=0A=
* http://dynarch.com/mishoo/calendar.epl=0A=
*=0A=
* This script is distributed under the GNU Lesser General Public License.=0A=
* Read the entire license text here: =
http://www.gnu.org/licenses/lgpl.html=0A=
*=0A=
* This file defines helper functions for setting up the calendar.  They =
are=0A=
* intended to help non-programmers get a working calendar on their site=0A=
* quickly.  This script should not be seen as part of the calendar.  It =
just=0A=
* shows you what one can do with the calendar, while in the same time=0A=
* providing a quick and simple method for setting it up.  If you need=0A=
* exhaustive customization of the calendar creation process feel free to=0A=
* modify this code to suit your needs (this is recommended and much =
better=0A=
* than modifying calendar.js itself).=0A=
*/=0A=
// $Id$=0A=
/**=0A=
*  This function "patches" an input field (or other element) to use a =
calendar=0A=
*  widget for date selection.=0A=
*=0A=
*  The "params" is a single object that can have the following =
properties:=0A=
*=0A=
*    prop. name   | description=0A=
*  =
-------------------------------------------------------------------------=
------------------------=0A=
*   inputField    | the ID of an input field to store the date=0A=
*   displayArea   | the ID of a DIV or other element to show the date=0A=
*   button        | ID of a button or other element that will trigger =
the calendar=0A=
*   eventName     | event that will trigger the calendar, without the =
"on" prefix (default: "click")=0A=
*   ifFormat      | date format that will be stored in the input field=0A=
*   daFormat      | the date format that will be used to display the =
date in displayArea=0A=
*   singleClick   | (true/false) wether the calendar is in single click =
mode or not (default: true)=0A=
*   firstDay      | numeric: 0 to 6.  "0" means display Sunday first, =
"1" means display Monday first, etc.=0A=
*   align         | alignment (default: "Br"); if you don't know what's =
this see the calendar documentation=0A=
*   range         | array with 2 elements.  Default: [1900, 2999] -- the =
range of years available=0A=
*   weekNumbers   | (true/false) if it's true (default) the calendar =
will display week numbers=0A=
*   flat          | null or element ID; if not null the calendar will be =
a flat calendar having the parent with the given ID=0A=
*   flatCallback  | function that receives a JS Date object and returns =
an URL to point the browser to (for flat calendar)=0A=
*   disableFunc   | function that receives a JS Date object and should =
return true if that date has to be disabled in the calendar=0A=
*   onSelect      | function that gets called when a date is selected.  =
You don't _have_ to supply this (the default is generally okay)=0A=
*   onClose       | function that gets called when the calendar is =
closed.  [default]=0A=
*   onUpdate      | function that gets called after the date is updated =
in the input field.  Receives a reference to the calendar.=0A=
*   date          | the date that the calendar will be initially =
displayed to=0A=
*   showsTime     | default: false; if true the calendar will include a =
time selector=0A=
*   timeFormat    | the time format; can be "12" or "24", default is "12"=0A=
*   electric      | if true (default) then given fields/date areas are =
updated for each move; otherwise they're updated only on close=0A=
*   step          | configures the step of the years in drop-down boxes; =
default: 2=0A=
*   position      | configures the calendar absolute position; default: =
null=0A=
*   cache         | if "true" (but default: "false") it will reuse the =
same calendar object, where possible=0A=
*   showOthers    | if "true" (but default: "false") it will show days =
from other months too=0A=
*=0A=
*  None of them is required, they all have default values.  However, if =
you=0A=
*  pass none of "inputField", "displayArea" or "button" you'll get a =
warning=0A=
*  saying "nothing to setup".=0A=
*/=0A=
Calendar.setup =3D function (params) {=0A=
function param_default(pname, def) { if (typeof params[pname] =3D=3D =
"undefined") { params[pname] =3D def; } };=0A=
param_default("inputField",     null);=0A=
param_default("displayArea",    null);=0A=
param_default("button",         null);=0A=
param_default("eventName",      "click");=0A=
param_default("ifFormat",       "%Y/%m/%d");=0A=
param_default("daFormat",       "%Y/%m/%d");=0A=
param_default("singleClick",    true);=0A=
param_default("disableFunc",    null);=0A=
param_default("dateStatusFunc", params["disableFunc"]);	// takes =
precedence if both are defined=0A=
param_default("dateText",       null);=0A=
param_default("firstDay",       null);=0A=
param_default("align",          "Bl");=0A=
param_default("range",          [1900, 2999]);=0A=
param_default("weekNumbers",    true);=0A=
param_default("flat",           null);=0A=
param_default("flatCallback",   null);=0A=
param_default("onSelect",       null);=0A=
param_default("onClose",        null);=0A=
param_default("onUpdate",       null);=0A=
param_default("date",           null);=0A=
param_default("showsTime",      false);=0A=
param_default("timeFormat",     "24");=0A=
param_default("electric",       true);=0A=
param_default("step",           2);=0A=
param_default("position",       null);=0A=
param_default("cache",          false);=0A=
param_default("showOthers",     false);=0A=
param_default("multiple",       null);=0A=
var tmp =3D ["inputField", "displayArea", "button"];=0A=
for (var i in tmp) {=0A=
if (typeof params[tmp[i]] =3D=3D "string") {=0A=
params[tmp[i]] =3D document.getElementById(params[tmp[i]]);=0A=
}=0A=
}=0A=
if (!(params.flat || params.multiple || params.inputField || =
params.displayArea || params.button)) {=0A=
alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please =
check your code");=0A=
return false;=0A=
}=0A=
function onSelect(cal) {=0A=
var p =3D cal.params;=0A=
var update =3D (cal.dateClicked || p.electric);=0A=
if (update && p.inputField) {=0A=
p.inputField.value =3D cal.date.print(p.ifFormat);=0A=
if (typeof p.inputField.onchange =3D=3D "function")=0A=
p.inputField.onchange();=0A=
}=0A=
if (update && p.displayArea)=0A=
p.displayArea.innerHTML =3D cal.date.print(p.daFormat);=0A=
if (update && typeof p.onUpdate =3D=3D "function")=0A=
p.onUpdate(cal);=0A=
if (update && p.flat) {=0A=
if (typeof p.flatCallback =3D=3D "function")=0A=
p.flatCallback(cal);=0A=
}=0A=
if (update && p.singleClick && cal.dateClicked)=0A=
cal.callCloseHandler();=0A=
};=0A=
if (params.flat !=3D null) {=0A=
if (typeof params.flat =3D=3D "string")=0A=
params.flat =3D document.getElementById(params.flat);=0A=
if (!params.flat) {=0A=
alert("Calendar.setup:\n  Flat specified but can't find parent.");=0A=
return false;=0A=
}=0A=
var cal =3D new Calendar(params.firstDay, params.date, params.onSelect =
|| onSelect);=0A=
// JCMS added window.calendar for flat calendar too=0A=
window.calendar =3D cal;=0A=
cal.showsOtherMonths =3D params.showOthers;=0A=
cal.showsTime =3D params.showsTime;=0A=
cal.time24 =3D (params.timeFormat =3D=3D "24");=0A=
cal.params =3D params;=0A=
cal.weekNumbers =3D params.weekNumbers;=0A=
cal.setRange(params.range[0], params.range[1]);=0A=
cal.setDateStatusHandler(params.dateStatusFunc);=0A=
cal.getDateText =3D params.dateText;=0A=
if (params.ifFormat) {=0A=
cal.setDateFormat(params.ifFormat);=0A=
}=0A=
if (params.inputField && typeof params.inputField.value =3D=3D "string") =
{=0A=
cal.parseDate(params.inputField.value);=0A=
}=0A=
cal.create(params.flat);=0A=
cal.show();=0A=
return false;=0A=
}=0A=
var triggerEl =3D params.button || params.displayArea || =
params.inputField;=0A=
triggerEl["on" + params.eventName] =3D function() {=0A=
var dateEl =3D params.inputField || params.displayArea;=0A=
var dateFmt =3D params.inputField ? params.ifFormat : params.daFormat;=0A=
var mustCreate =3D false;=0A=
var cal =3D window.calendar;=0A=
if (dateEl)=0A=
params.date =3D Date.parseDate(dateEl.value || dateEl.innerHTML, =
dateFmt);=0A=
if (!(cal && params.cache)) {=0A=
window.calendar =3D cal =3D new Calendar(params.firstDay,=0A=
params.date,=0A=
params.onSelect || onSelect,=0A=
params.onClose || function(cal) { cal.hide(); });=0A=
cal.showsTime =3D params.showsTime;=0A=
cal.time24 =3D (params.timeFormat =3D=3D "24");=0A=
cal.weekNumbers =3D params.weekNumbers;=0A=
mustCreate =3D true;=0A=
} else {=0A=
if (params.date)=0A=
cal.setDate(params.date);=0A=
cal.hide();=0A=
}=0A=
if (params.multiple) {=0A=
cal.multiple =3D {};=0A=
for (var i =3D params.multiple.length; --i >=3D 0;) {=0A=
var d =3D params.multiple[i];=0A=
var ds =3D d.print("%Y%m%d");=0A=
cal.multiple[ds] =3D d;=0A=
}=0A=
}=0A=
cal.showsOtherMonths =3D params.showOthers;=0A=
cal.yearStep =3D params.step;=0A=
cal.setRange(params.range[0], params.range[1]);=0A=
cal.params =3D params;=0A=
cal.setDateStatusHandler(params.dateStatusFunc);=0A=
cal.getDateText =3D params.dateText;=0A=
cal.setDateFormat(dateFmt);=0A=
if (mustCreate)=0A=
cal.create();=0A=
cal.refresh();=0A=
if (!params.position)=0A=
cal.showAtElement(params.button || params.displayArea || =
params.inputField, params.align);=0A=
else=0A=
cal.showAt(params.position[0], params.position[1]);=0A=
return false;=0A=
};=0A=
return cal;=0A=
};=0A=
/* js/jalios/util.js */=0A=
// ----------------------------------------------------=0A=
//  AJAX COMMON JSON-OBJECT PACKAGE=0A=
// ----------------------------------------------------=0A=
/**=0A=
* Usage:=0A=
* -----=0A=
* =0A=
* // Init Json Request=0A=
* var jcmsRequest =3D new JcmsAjaxRequest();=0A=
* =0A=
* // Init RPC with jcmsRequest callback=0A=
* var funcRPC =3D function(){=0A=
*   // Do stuff  =0A=
*   jcmsRequest.asyncJsonCallBack(value);=0A=
* =0A=
*   // Or call JSON method=0A=
*   =
JcmsJsContext.getJsonRPC().callRPCMethod(jcmsRequest.asyncJsonCallBack(va=
lue).bind(jcmsRequest), param1, param2);=0A=
* }=0A=
* =0A=
* // Init CallBack=0A=
* var funcCallBack =3D function(returnValue, returnEffect){ =0A=
*   // Do stuff=0A=
* }=0A=
* =0A=
* // Init Effect (Optional)=0A=
* var functEffect =3D function(){=0A=
*   // Do Stuff=0A=
*   jcmsRequest.asyncEffectCallBack(effect);=0A=
* }=0A=
* =0A=
* jcmsRequest.rpc      =3D funcRPC;=0A=
* jcmsRequest.callback =3D funcCallBack;=0A=
* jcmsRequest.effect   =3D functEffect;=0A=
* jcmsRequest.asyncJsonCall();=0A=
* =0A=
* Note: =0A=
* - jcmsRequest.exception =3D funcException;   // Handle custom rpc =
exception.=0A=
* - jcmsRequest.waitState =3D false;           // Do not display wait =
state=0A=
* - jcmsRequest.asyncJsonCallPeriodical(10); // Periodical RPC=0A=
* - jcmsRequest.timeout =3D 10000;              // Request timeout=0A=
*/=0A=
JcmsAjaxRequest =3D Class.create();=0A=
JcmsAjaxRequest.prototype =3D {=0A=
initialize: function(elm) {=0A=
this.elm         =3D elm;=0A=
this.effect      =3D null;=0A=
this.exception   =3D null;=0A=
this.callback    =3D null;=0A=
this.rpc         =3D null;=0A=
this._periodexec =3D null; =0A=
this.waitState   =3D true; // Display wait state=0A=
this.timeout     =3D 20000;=0A=
this.isOk        =3D false;=0A=
this.isDone      =3D false;=0A=
this.isUpdate    =3D false;=0A=
this.isEffect    =3D false;=0A=
this.isTimeout   =3D false;=0A=
},=0A=
asyncJsonCall: function(){=0A=
// Init request status=0A=
this.isOk       =3D false;=0A=
this.isDone     =3D false;=0A=
this.isUpdate   =3D false;=0A=
this.isEffect   =3D false;=0A=
this.isTimeout  =3D false;=0A=
// Set browser to waiting mode=0A=
if (this.waitState){=0A=
Ajax.setWaitState(true,this.elm);=0A=
}=0A=
try{=0A=
// Call Effect=0A=
if (this.effect)=0A=
this.effect();=0A=
else=0A=
this.isEffect =3D true;=0A=
// Call Timeout=0A=
if (this._timeoutFunc){=0A=
clearTimeout(this._timeoutFunc);=0A=
}=0A=
this._timeoutFunc =3D setTimeout(function(){  =0A=
this.isTimeout =3D true;=0A=
this._asyncResponseCallBack();=0A=
}.bind(this),this.timeout);=0A=
// Call Json=0A=
if (this.rpc)=0A=
this.rpc();=0A=
}=0A=
catch(ex){=0A=
this._handleException();=0A=
}=0A=
},=0A=
asyncJsonCallPeriodical: function(frequency){=0A=
// Todo: Should check if PeriodicalExecuter is running twice ?=0A=
this._periodexec =3D new PeriodicalExecuter(=0A=
(function(){ =0A=
if (this.isDone)=0A=
return;=0A=
this.asyncJsonCall(); }).bind(this), frequency);=0A=
},=0A=
stopPeriodical: function(){=0A=
if (this._periodexec){=0A=
this._periodexec.stop();=0A=
}=0A=
this.dispose();=0A=
},=0A=
/**=0A=
* Must be Called by given function JSON=0A=
* @param value the return value=0A=
*/=0A=
asyncJsonCallBack: function(value, exception){=0A=
if (value){ =0A=
this.returnValue =3D value;=0A=
}=0A=
else{=0A=
this.isOk =3D true;=0A=
}=0A=
// Handle server exception=0A=
if (exception){=0A=
this.returnException =3D exception;=0A=
}=0A=
// Response is done=0A=
this.isDone =3D true;=0A=
// Call response callback=0A=
this._asyncResponseCallBack();=0A=
if (this._periodexec){=0A=
// Reset response for PeriodicalUpdater=0A=
this.isDone =3D false;=0A=
}=0A=
},=0A=
/**=0A=
* Must be Called by given function Effect=0A=
* @param effect the running effect=0A=
*/=0A=
asyncEffectCallBack: function(effect){=0A=
// Effect is finished=0A=
this.isEffect      =3D true;=0A=
this.workingEffect =3D effect;=0A=
// Call response callback=0A=
this._asyncResponseCallBack();=0A=
},=0A=
/**=0A=
* Called by both Effect or JSON to do the=0A=
* real callbaack=0A=
*/=0A=
_asyncResponseCallBack: function(){=0A=
// Handle Timeout=0A=
if (this.isTimeout){=0A=
if (!this._timeoutFunc){=0A=
return;=0A=
}=0A=
this._handleException();=0A=
return;=0A=
}=0A=
if (!this.isDone)=0A=
return;=0A=
if (this.isUpdate)=0A=
return;=0A=
if (!this.isEffect)=0A=
return;=0A=
// Handle Exception=0A=
if (this.returnException){=0A=
JcmsLogger.error('JcmsAjaxRequest', this.returnException.message, ' =
Error: ['+this.returnException.code+']', =0A=
this.returnException.name , '\n'+this.returnException.javaStack);=0A=
this._handleException();=0A=
return;=0A=
}=0A=
if (this._timeoutFunc)=0A=
clearTimeout(this._timeoutFunc);  =0A=
this.isUpdate =3D true;=0A=
// Call callback=0A=
try {=0A=
if (this.callback){=0A=
this.callback(this.returnValue, this.workingEffect);=0A=
}=0A=
}=0A=
catch (ex){ =0A=
/* Trap CallBack error to clean jcmsRequest */ =0A=
JcmsLogger.error('JcmsAjaxRequest',ex);=0A=
}=0A=
this._disposeResponse();=0A=
},=0A=
_disposeResponse: function(){=0A=
// Remove browser from waiting mode=0A=
if (this.waitState){=0A=
Ajax.setWaitState(false,this.elm);=0A=
}=0A=
// Clean stuff=0A=
if (!this._periodexec){=0A=
this.dispose();=0A=
}=0A=
},=0A=
_handleException: function(){=0A=
alert(I18N.glp('warn.json.sessiontimeout'));=0A=
if (this.exception){=0A=
this.exception(this.returnException);=0A=
}=0A=
this._disposeResponse();=0A=
},=0A=
/**=0A=
* Clean pointer to reduce memory leaks=0A=
* and helps Garbage Collector=0A=
*/=0A=
dispose: function(){=0A=
this.elm         =3D null;=0A=
this.effect      =3D null;=0A=
this.exception   =3D null;=0A=
this.callback    =3D null;=0A=
this.rpc         =3D null;=0A=
this._timeoutFunc=3D null;=0A=
this._periodexec =3D null; =0A=
this.timeout     =3D 20000;=0A=
}=0A=
};=0A=
JcmsJsonRequest =3D Class.create();=0A=
Object.extend(JcmsJsonRequest.prototype, JcmsAjaxRequest.prototype);=0A=
// ----------------------------------------------------=0A=
//  AJAX COMMON PACKAGE=0A=
// ----------------------------------------------------=0A=
if (!window.Ajax) {=0A=
var Ajax =3D new Object();=0A=
}=0A=
Object.extend(Ajax,{=0A=
version: '$Revision: 20919 $',=0A=
// ----------------------------=0A=
//  Common usefull AJAX Method=0A=
// ----------------------------=0A=
setWaitState: function(wait, elm){=0A=
var wnd  =3D parent ? parent : window;=0A=
var doc  =3D parent ? parent.document : document;=0A=
var body =3D doc.getElementsByTagName('body')[0];=0A=
if (!Ajax.waitDiv){=0A=
Ajax.waitDiv =3D doc.createElement('DIV');=0A=
Ajax.waitDiv.innerHTML     =3D I18N.glp('info.msg.loading');=0A=
Ajax.waitDiv.className     =3D 'ajaxwait';=0A=
Ajax.waitDiv.style.display =3D 'none';=0A=
body.appendChild(Ajax.waitDiv);=0A=
}=0A=
// Set wait cursor=0A=
if (wait){=0A=
if (elm) elm.style.cursor  =3D 'wait';=0A=
Ajax.waitDiv.style.display =3D 'block';=0A=
body.style.cursor =3D 'wait';=0A=
wnd.status =3D I18N.glp('info.msg.loading');=0A=
}=0A=
else{ // Reset cursor=0A=
if (elm) elm.style.cursor  =3D  '';=0A=
Ajax.waitDiv.style.display =3D 'none';=0A=
body.style.cursor =3D '';=0A=
wnd.status=3D'';=0A=
}=0A=
}=0A=
});=0A=
/**=0A=
* Register AJAX Responder to handle Prototype AJAX Error Requests=0A=
*/=0A=
Ajax.Responders.register({=0A=
onException: function(){=0A=
alert(I18N.glp('warn.json.sessiontimeout'));=0A=
}=0A=
});=0A=
// ----------------------------------------------------=0A=
//  INPUT UTIL=0A=
// ----------------------------------------------------=0A=
if (!window.InputUtil) {=0A=
var InputUtil =3D new Object();=0A=
}=0A=
Object.extend(InputUtil,{=0A=
/**=0A=
* Return an object reprensenting a cross-browser selection=0A=
* @param input the working input=0A=
* @param trim indicate to trim or not selection=0A=
*/=0A=
getSelection: function(input, trim){=0A=
var inputSelection =3D new Object();=0A=
inputSelection.input =3D input;=0A=
// Gecko browser=0A=
if (input.setSelectionRange) {=0A=
inputSelection.start      =3D input.selectionStart;=0A=
inputSelection.end        =3D input.selectionEnd;=0A=
inputSelection.value      =3D =
input.value.substring(input.selectionStart, input.selectionEnd);=0A=
inputSelection.gecko      =3D true;=0A=
inputSelection.scrolltop  =3D input.scrollTop;=0A=
inputSelection.scrollleft =3D input.scrollLeft;=0A=
}=0A=
// Internet Explorer=0A=
else if (input.createTextRange) {=0A=
if (! input.ownerDocument) { input.ownerDocument =3D document; }=0A=
var selection =3D input.ownerDocument.selection.createRange();=0A=
if ( selection.parentElement().tagName!=3D"TEXTAREA" ) {=0A=
inputSelection.start =3D 0;=0A=
inputSelection.end =3D 0;=0A=
}=0A=
// Insert a text to find caret position=0A=
else if (selection.text.length =3D=3D 0) {=0A=
var backup =3D input.value ;=0A=
var bookmark =3D "~JCMSwiki~";=0A=
selection.text =3D bookmark ;=0A=
var index =3D input.value.search( bookmark );=0A=
input.value =3D backup ;=0A=
index -=3D input.value.substr(0,index).split('\n').length - 1;=0A=
inputSelection.value =3D "";=0A=
InputUtil._setSelection(inputSelection,index,index);=0A=
// Update selection=0A=
inputSelection.start =3D index;=0A=
inputSelection.end   =3D index;=0A=
} =0A=
// Check selected text=0A=
else {=0A=
var bookmark       =3D selection.getBookmark();=0A=
var range          =3D input.createTextRange();=0A=
var selectionRange =3D input.createTextRange();=0A=
var fulltext       =3D range.text;=0A=
// Select and retrieve selected text=0A=
selectionRange.moveToBookmark(bookmark);=0A=
var text           =3D selectionRange.text;=0A=
// Retrieve text before selection=0A=
range.setEndPoint('EndToStart', selectionRange);=0A=
var start          =3D range.text.length;=0A=
// Find the real location of text=0A=
var index          =3D fulltext.indexOf(text,start);=0A=
// Find the end location of text=0A=
var end            =3D index + text.length;=0A=
// Count \n in text before index=0A=
var startLines     =3D fulltext.substring(0,index).split('\n').length - =
1;=0A=
// Count \n in text before ends of selection=0A=
var endLines       =3D startLines + text.split('\n').length - 1;=0A=
// Update start and end postion=0A=
start  =3D index - startLines;=0A=
end    =3D end   - endLines;=0A=
// Backup selection=0A=
inputSelection.start =3D start;=0A=
inputSelection.end   =3D end;=0A=
inputSelection.value =3D selectionRange.text;=0A=
// Reset selection=0A=
InputUtil._setSelection(inputSelection,start,end);=0A=
}=0A=
}=0A=
// Logger=0A=
if (JcmsLogger.isDebug && JcmsLogger.InputUtil){=0A=
JcmsLogger.debug('InputUtil',"getSelection: =
"+inputSelection.start+","+inputSelection.end+": =
"+inputSelection.value+"("+inputSelection.scrolltop+","+inputSelection.sc=
rollleft+")");=0A=
}=0A=
return trim ? InputUtil._trimSelection(inputSelection) : inputSelection;=0A=
},=0A=
/**=0A=
* Replace the current selection by the given string.=0A=
* If called by internal method the third parameter is selection (avoid =
to compute twice)=0A=
* @param input the working input=0A=
* @param replace the text to replace=0A=
* @param trim indicate to trim or not selection=0A=
* @param selection the object return by getSelection() set by internal =
method call=0A=
*/=0A=
replaceSelection: function(input, replace, trim, selection){=0A=
input.focus(); =0A=
var selection  =3D selection || InputUtil.getSelection(input,trim);=0A=
var inputValue =3D input.value;=0A=
if (selection.gecko){=0A=
input.value =3D inputValue.substring(0, selection.start) + replace + =
inputValue.substring(selection.end);=0A=
var oldLength =3D selection.value ? selection.value.length : 0;=0A=
InputUtil._setSelection(selection, selection.start, selection.end + =
(replace.length-oldLength));=0A=
}=0A=
else{ =0A=
var range       =3D input.ownerDocument.selection.createRange();=0A=
var isCollapsed =3D (range.text.length =3D=3D 0);=0A=
range.text =3D replace;=0A=
if (!isCollapsed){ // Make a better selection=0A=
var rlen =3D replace.length - (replace.split('\n').length - 1);=0A=
range.moveStart('character', -rlen);=0A=
range.select();=0A=
}=0A=
}=0A=
},=0A=
/**=0A=
* Check the current selection if it match "match" then=0A=
* replace it by "replace" otherwise replace it by "backward"=0A=
* @param input the working input=0A=
* @param match a regular expression to check=0A=
* @param backward the txt to replace if regexp doesn't match (work on .+)=0A=
* @param replace the txt to replace if regexp match=0A=
* @param trim  true to trim selection=0A=
* @param caret true to work even if there is no selection (use backward =
without $1)=0A=
* @param selection the object return by getSelection() set by internal =
method call=0A=
*/=0A=
replaceRegexp: function(input, match, replace, backward, trim, caret, =
selection){=0A=
var selection  =3D selection || InputUtil.getSelection(input,trim);=0A=
var selectText =3D selection.value;=0A=
if (!selectText && !caret) return;=0A=
var replaceText =3D selectText;=0A=
if (!selectText){=0A=
replaceText =3D backward.replace(/\$1/g,'');=0A=
}=0A=
else if (selectText.match(match)){ =0A=
replaceText =3D selectText.replace(match,replace);=0A=
}=0A=
else {=0A=
replaceText =3D selectText.replace(/\s*([\S ]+)(\s*)/g,backward+"$2");=0A=
}=0A=
if (replaceText =3D=3D selectText) return;=0A=
InputUtil.replaceSelection(input, replaceText, trim, selection);=0A=
},=0A=
/**=0A=
* Selects the selection from start to end=0A=
* @param selection the object return by getSelection() set by internal =
method call=0A=
* @param start the new selection start point=0A=
* @param end the new selection end point=0A=
*/=0A=
_setSelection: function(selection, start, end){=0A=
selection.input.focus();=0A=
if (selection.gecko){=0A=
// Set caret=0A=
selection.input.setSelectionRange(start, start);=0A=
// Fix Scrollbar=0A=
if (selection.scrollleft){=0A=
selection.input.scrollLeft =3D selection.scrollleft;=0A=
}=0A=
if (selection.scrolltop){=0A=
selection.input.scrollTop =3D selection.scrolltop;=0A=
}=0A=
else{// Fake event 'esc' key to set scroll=0A=
var evt =3D document.createEvent('KeyEvents'); =0A=
evt.initKeyEvent('keypress',true,true,window,false =
,false,false,false,27,null);=0A=
selection.input.dispatchEvent(evt);=0A=
}=0A=
selection.input.setSelectionRange(start, end);=0A=
}=0A=
else if (selection.input.createTextRange){=0A=
var range   =3D selection.input.createTextRange();=0A=
var text    =3D selection.input.value;=0A=
range.move('character', start);=0A=
range.moveEnd('character', end-start);=0A=
range.select();=0A=
}=0A=
var substart =3D start-selection.start; =0A=
var subend   =3D selection.value.length - (selection.end-end);=0A=
selection.value =3D selection.value.substring(substart, subend);=0A=
selection.start =3D start;=0A=
selection.end   =3D end;=0A=
},=0A=
/**=0A=
* Trims white space in selection =0A=
* and adjsute to new size =0A=
* @param selection the object return by getSelection() set by internal =
method call=0A=
*/=0A=
_trimSelection: function(selection){=0A=
if (selection.start >=3D selection.end){=0A=
return selection;=0A=
}=0A=
// Trim spaces=0A=
var start =3D 0;=0A=
var end   =3D 0;=0A=
while (selection.value.charAt(start) =3D=3D " ") { start++; }=0A=
while (selection.value.charAt(selection.value.length-end-1) =3D=3D " ") =
{ end++; }=0A=
if ((start =3D=3D0) && (end =3D=3D0)){=0A=
return selection;=0A=
}=0A=
// Adjuste new selection area=0A=
InputUtil._setSelection(selection, selection.start+start, =
selection.end-end);=0A=
return selection;=0A=
}=0A=
});=0A=
// ----------------------------------------------------=0A=
//  FORM UTIL=0A=
// ----------------------------------------------------=0A=
if (!window.FormUtil) {=0A=
var FormUtil =3D new Object();=0A=
}=0A=
Object.extend(FormUtil,{=0A=
// disable or enable all the input of the given array, by finding them =
in the=0A=
// given form name according to the boolean=0A=
toggleInputs: function(formName, inputsArray, enable) {=0A=
$A(inputsArray).each(function(str, idx) {=0A=
Form.getInputs(formName, false, str).each(function(element) {=0A=
element.disabled =3D !enable;=0A=
});=0A=
});=0A=
},=0A=
// Sets some values of text input in the given form, =0A=
// using a map of key/value (key being the input name, value=0A=
// the new value for the input)=0A=
setInputValues: function(formName, inputToValueMap) {=0A=
Form.getInputs(formName, 'text', false).each(function(element) {=0A=
var newValue =3D inputToValueMap[element.name];=0A=
if (newValue !=3D undefined) {=0A=
element.value =3D newValue;=0A=
}=0A=
});=0A=
},=0A=
// Cause maxLength is not available on textarea, emule the behaviour=0A=
imposeMaxLength: function(element, maxLength) {=0A=
if (element.value.length < maxLength) {=0A=
return true;=0A=
} else if (element.value.length > maxLength) {=0A=
element.value =3D '';=0A=
return false; =0A=
} else {=0A=
element.value =3D element.value.substr(0, maxLength-1); =0A=
return false;=0A=
}=0A=
}=0A=
});=0A=
// ----------------------------------------------------=0A=
//  JCMSPREFS OBJECT=0A=
// ----------------------------------------------------=0A=
if (!window.JcmsPrefs) {=0A=
var JcmsPrefs =3D new Object();=0A=
}=0A=
Object.extend(JcmsPrefs,{=0A=
items: null,=0A=
put: function(key,value){=0A=
JcmsPrefs._init();=0A=
JcmsPrefs.items[key] =3D value;=0A=
JcmsPrefs._store();=0A=
},=0A=
get: function(key,defaultValue){=0A=
JcmsPrefs._init();=0A=
if (JcmsPrefs.items[key] !=3D undefined){=0A=
return JcmsPrefs.items[key];=0A=
}=0A=
return defaultValue;=0A=
},=0A=
_init: function(){=0A=
// Escape if nothing=0A=
if (JcmsPrefs.items){=0A=
return;=0A=
}=0A=
// Init cookie value=0A=
var cookieString  =3D Cookie.get('JcmsPrefs');=0A=
if (!cookieString){=0A=
JcmsPrefs.items =3D new Object();=0A=
return;=0A=
}=0A=
// Unmarshal JSON Value=0A=
eval("JcmsPrefs.items =3D "+cookieString);=0A=
},=0A=
_store: function(){=0A=
if (!JcmsPrefs.items){=0A=
return;=0A=
}=0A=
var cookieString =3D toJSON(JcmsPrefs.items); //alert(cookieString);=0A=
Cookie.write([{=0A=
name: 'JcmsPrefs', =0A=
value: cookieString,=0A=
expires: new Date((new Date()).getTime() + (1000 * 60 * 60 * 24 * 30)), =
// 30 days=0A=
path: '/',=0A=
domain: ''=0A=
}]);=0A=
}=0A=
});=0A=
// ----------------------------------------------------=0A=
//  UTIL OBJECT=0A=
// ----------------------------------------------------=0A=
// Util 'static Class'=0A=
if (!window.Util) {=0A=
var Util =3D new Object();=0A=
}=0A=
Object.extend(Util,{=0A=
/**=0A=
* Convert the given object in to a boolean value, or use=0A=
* default value if object cannot be converted=0A=
*/=0A=
toBoolean: function(object, defaultValue) {=0A=
if (typeof object =3D=3D 'boolean') { return object; }=0A=
if (object =3D=3D 'false' || object =3D=3D 'no' ) { return false; }=0A=
if (object =3D=3D 'true'  || object =3D=3D 'yes') { return true;  }=0A=
return defaultValue;=0A=
},=0A=
/**=0A=
* Remove all child nodes under the given element.=0A=
* Current implementation call: removeChild() recursively.=0A=
* =0A=
* @param parentElm the root element to work with=0A=
* @param deep should this method called recursively=0A=
*/=0A=
cleanDOMElements: function(parentElm, deep){=0A=
var children =3D parentElm.childNodes;=0A=
if (!children){=0A=
return;=0A=
}=0A=
$A(children).each(function(elm, idx){=0A=
if (deep){=0A=
Util.cleanDOMElements(elm);=0A=
}=0A=
parentElm.onclick =3D null;=0A=
parentElm.removeChild(elm);=0A=
});=0A=
},=0A=
/**=0A=
* This is much faster than using (el.innerHTML =3D str) when there are =
many=0A=
* existing descendants, because in some browsers, innerHTML spends much =
longer=0A=
* removing existing elements than it does creating new ones.=0A=
* =
http://ajaxian.com/archives/replacehtml-for-when-innerhtml-dogs-you-down=0A=
*/=0A=
replaceHtml : function(el, html) {=0A=
var oldEl =3D (typeof el =3D=3D=3D "string" ? =
document.getElementById(el) : el);=0A=
var newEl =3D document.createElement(oldEl.nodeName);=0A=
// Preserve the element's id and class (other properties are lost)=0A=
newEl.id =3D oldEl.id;=0A=
newEl.className =3D oldEl.className;=0A=
// Replace the old with the new=0A=
newEl.innerHTML =3D html;=0A=
oldEl.parentNode.replaceChild(newEl, oldEl);=0A=
/* Since we just removed the old element from the DOM, return a reference=0A=
to the new element, which can be used to restore variable references. */=0A=
return newEl;=0A=
},=0A=
/**=0A=
* Retrieves "position" and "dimension" of the given window's=0A=
* viewport (or the current window if no window argument is given).=0A=
* =0A=
* returns an object containing the following value :=0A=
*   obj.x      =3D viewport X position in the screen=0A=
*   obj.y      =3D viewport Y position in the screen=0A=
*   obj.width  =3D viewport width=0A=
*   obj.height =3D viewport height=0A=
* =0A=
* Warning: the position returned in internet explorer is the position=0A=
* of the window not the viewport (i.e. the viewport position being the=0A=
* position of the window + title and toolbars offset)=0A=
* =0A=
* cf. http://www.quirksmode.org/viewport/compatibility.html=0A=
*/=0A=
getViewportBounds: function(win) {=0A=
var vpWidth =3D 0; =0A=
var vpHeight =3D 0;=0A=
var vpXposInScreen =3D 0;=0A=
var vpYposInScreen =3D 0;=0A=
if (!win) {=0A=
win =3D self;=0A=
}=0A=
var doc =3D win.document;=0A=
// 1. Viewport Position=0A=
// all but mozilla=0A=
if (win.screenTop){=0A=
vpXposInScreen =3D win.screenLeft;=0A=
vpYposInScreen =3D win.screenTop;=0A=
}=0A=
// mozilla=0A=
else if (win.screenX){=0A=
vpXposInScreen =3D win.screenX;=0A=
vpYposInScreen =3D win.screenY;=0A=
}=0A=
// 2. Viewport Dimension=0A=
//   all except Explorer=0A=
if (win.innerHeight) {=0A=
vpWidth =3D win.innerWidth;=0A=
vpHeight =3D win.innerHeight;=0A=
}=0A=
//   Explorer 6 Strict Mode=0A=
else if (doc.documentElement && =
win.document.documentElement.clientHeight) {=0A=
vpWidth =3D doc.documentElement.clientWidth;=0A=
vpHeight =3D doc.documentElement.clientHeight;=0A=
}=0A=
//   other Explorers=0A=
else if (document.body) {=0A=
vpWidth =3D doc.body.clientWidth;=0A=
vpHeight =3D doc.body.clientHeight;=0A=
}=0A=
return { x: vpXposInScreen,=0A=
y: vpYposInScreen,=0A=
width: vpWidth,=0A=
height: vpHeight };=0A=
}=0A=
});=0A=
// ----------------------------------------------------=0A=
//  LOGGER=0A=
// ----------------------------------------------------=0A=
var JcmsLogger =3D {=0A=
// Debug levels used by info(), debug(), warn()=0A=
LEVEL_INFO:  "info",=0A=
LEVEL_DEBUG: "debug",=0A=
LEVEL_WARN:  "warn",=0A=
LEVEL_ERROR: "error",=0A=
// Debug status for each scope=0A=
isDebug: true && window.console && window.console["debug"],=0A=
// Component debug status=0A=
CtxMenuManager:     false,=0A=
CtxMenu:            false,=0A=
WikiToolbar:        false,=0A=
InputUtil:          false,=0A=
Autochooser:        false,=0A=
JcmsJsContext:      false,=0A=
Table:              false,=0A=
TinyMCE_JcmsPlugin: false,=0A=
DocChooser:         false,=0A=
TreeCat:            false,=0A=
JcmsAjaxRequest:    false,=0A=
// --------------------=0A=
//  INTERNAL=0A=
// --------------------=0A=
/**=0A=
* A generic function to log message in Firebug console=0A=
* http://www.joehewitt.com/software/firebug/docs.php=0A=
* =0A=
* @param level the message level (default is DEBUG)=0A=
*/=0A=
_log: function(level,args){=0A=
var scope =3D args[0];=0A=
var msg   =3D args[1];=0A=
if (!JcmsLogger._checkScope(level, scope, msg))=0A=
return;=0A=
// Default on DEBUG level=0A=
level =3D (level =3D=3D undefined) ? JcmsLogger.LEVEL_DEBUG : level;    =0A=
// The message to log=0A=
args[1]  =3D "["+level+"]["+scope+"] "+msg;=0A=
args =3D $A(args).slice(1,args.length);=0A=
// The function call=0A=
if (window.console && window.console[level])=0A=
window.console[level].apply(window.console,args);=0A=
},=0A=
_checkScope: function(level, scope, msg){=0A=
// General check scope=0A=
if ((!msg) || !JcmsLogger.isDebug)=0A=
return false;=0A=
// Default on DEBUG level=0A=
level =3D (level =3D=3D undefined) ? JcmsLogger.LEVEL_DEBUG : level;=0A=
// Check scope=0A=
if ((!scope) || (!JcmsLogger[scope] && =
level=3D=3DJcmsLogger.LEVEL_DEBUG))=0A=
return false;=0A=
return true;=0A=
},=0A=
// --------------------=0A=
//  FUNCTIONS=0A=
// --------------------=0A=
info: function(scope, msg){=0A=
JcmsLogger._log(JcmsLogger.LEVEL_INFO,arguments);=0A=
},=0A=
debug: function(scope, msg){=0A=
JcmsLogger._log(JcmsLogger.LEVEL_DEBUG,arguments);=0A=
},=0A=
warn: function(scope, msg){=0A=
JcmsLogger._log(JcmsLogger.LEVEL_WARN,arguments);=0A=
},=0A=
error: function(scope, msg){=0A=
JcmsLogger._log(JcmsLogger.LEVEL_ERROR,arguments);=0A=
}=0A=
};=0A=
// ----------------------------------------------------=0A=
//  POPUP OBJECT=0A=
//  see also: =0A=
//    - http://www.quirksmode.org/js/popup.html=0A=
//    - http://www.w3schools.com/htmldom/met_win_open.asp=0A=
//  Note: Title must not contains spaces !=0A=
// ----------------------------------------------------=0A=
var Popup =3D {=0A=
popupWindow: function(url, title, w, h, status, resizable, scrollbars, =
reuse, winOpener){=0A=
if (!status) status=3D"no";=0A=
if (!w) w=3D320;=0A=
if (!h) h=3D260;=0A=
resizable =3D "resizable=3D"   + (Util.toBoolean(resizable,  true) ? =
"yes" : "no");=0A=
scrollbars =3D "scrollbars=3D" + (Util.toBoolean(scrollbars, true) ? =
"yes" : "no");=0A=
if (reuse =3D=3D undefined) { =0A=
reuse =3D true; =0A=
}=0A=
if (!navigator.jalios) {=0A=
navigator.jalios =3D new Object();=0A=
}=0A=
var pWnd =3D navigator.jalios.popupWindow; // shorter convenient var=0A=
// Set window opener=0A=
if (winOpener =3D=3D undefined) {=0A=
winOpener =3D window;=0A=
}=0A=
// Set a title=0A=
if (!title && !winOpener.opener) {=0A=
title =3D '_blank';=0A=
}=0A=
// Update title=0A=
else if (!reuse && pWnd){=0A=
navigator.jalios.popupCounter =3D navigator.jalios.popupCounter ? =
navigator.jalios.popupCounter+1 : 1;=0A=
title =3D title + "_"+ navigator.jalios.popupCounter;=0A=
}=0A=
// close previous popup if needed=0A=
if (reuse && pWnd && pWnd.close) {=0A=
pWnd.close();=0A=
}=0A=
// Check popup blocker=0A=
try {=0A=
var params =3D 'status=3D' + status + ',width=3D' + w+ ',height=3D' + h =
+ ',menubar=3Dno,'+ resizable + ',' + scrollbars;=0A=
navigator.jalios.popupWindow =3D winOpener.open(url, title, params);=0A=
pWnd =3D navigator.jalios.popupWindow;=0A=
if (!pWnd){=0A=
alert(I18N.glp('warn.popup.blocker'));=0A=
}=0A=
}=0A=
catch(ex){=0A=
alert(I18N.glp('warn.popup.blocker'));=0A=
}=0A=
// Set the focus if opener have the focus=0A=
if (winOpener.focus && pWnd){=0A=
pWnd.focus();=0A=
}=0A=
},=0A=
/**=0A=
* Resize the current window to the size of the given div.=0A=
* =0A=
* @param divID the div of which to retrieve dimension and to use as =0A=
* a reference for the new window size=0A=
* @param offsetHeight an integer value that will be added to the new =
window height, =0A=
* use this value when you want to add some margin to the div height =
(default is 55 if not given)=0A=
* @param minimumHeight an integer value indicating the minimum height to =
used=0A=
after resize (default is 50).=0A=
*/=0A=
autoResize: function(divID, offsetHeight, minimumHeight) {=0A=
if (!offsetHeight) {=0A=
offsetHeight =3D 55;=0A=
}=0A=
if (!minimumHeight) {=0A=
minimumHeight =3D 50;=0A=
}=0A=
//var elementDim =3D $(document.body).getDimensions();=0A=
var elementDim =3D $(divID).getDimensions();=0A=
var vpBounds =3D Util.getViewportBounds(); // { x, y, width, height }=0A=
// Compute the new height=0A=
var newWinHeight =3D elementDim.height + offsetHeight;=0A=
newWinHeight =3D Math.min(newWinHeight, self.screen.availHeight);=0A=
// Make sure the window is not too high=0A=
if (vpBounds.y && (newWinHeight + vpBounds.y > self.screen.availHeight) =
) {=0A=
newWinHeight =3D self.screen.availHeight - vpBounds.y;=0A=
}=0A=
// Resize the window=0A=
window.resizeTo(vpBounds.width, Math.max(minimumHeight, newWinHeight));=0A=
}=0A=
}=0A=
// ----------------------------------------------------=0A=
//  CONVENIENT=0A=
// ----------------------------------------------------=0A=
document.getElementsBySelector =3D function(selector) {=0A=
return $$(selector);=0A=
}=0A=
Element.addMethods({=0A=
/**=0A=
* Retrieves the ID of the JCMS Data bound to this element by looking=0A=
* in this element's classname, using syntax "ID_{dataId}".=0A=
*/=0A=
getJcmsId : function(element) {=0A=
var idClass =3D $w(element.className).find(function(elm){ =0A=
return elm.startsWith('ID_');=0A=
});=0A=
return idClass && idClass.substring(3);=0A=
},=0A=
/**=0A=
* Retrieves the ID of the JCMS Data bound to this element by looking=0A=
* in this element's classname, using syntax "ID_{dataId}".=0A=
*/=0A=
getJcmsIds : function(element) {=0A=
var ids =3D $w(element.className).findAll(function(str){ =0A=
return str.startsWith('ID_');=0A=
}).collect(function(str){=0A=
return str.substring(3);=0A=
});=0A=
return ids;=0A=
},=0A=
/**=0A=
* Looks for an element matching the specified type (and optionnal =
classname)=0A=
* in the DOM parent hierarchy of this element.=0A=
*=0A=
* @param tagName the tag type to look for, eg. 'A', 'UL', 'TABLE', ...=0A=
* @param classname the classname the element must match in order to be =
returned=0A=
* @param checkThis a boolean indicating whether to include this element =
in the search=0A=
* @return the element matching tagName and className or undefined if no =
element=0A=
*         could be found.=0A=
*/=0A=
fastUp : function(element, tagName, className, checkThis) {=0A=
for (var elm =3D $(checkThis ? element : element.parentNode); elm; elm =
=3D $(elm.parentNode)) {=0A=
if (elm.tagName !=3D=3D tagName) {=0A=
continue;=0A=
}=0A=
if (className && !elm.hasClassName(className)) {=0A=
continue;=0A=
}=0A=
return elm;=0A=
}=0A=
return;=0A=
}=0A=
});=0A=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/js/channel.js?contextPath=

// TODO: Should replace all calls to is* and use those available in =
JcmsJsContext=0A=
var isIE =3D document.all?true:false;=0A=
var isNN4 =3D document.layers?true:false;=0A=
var isNN7 =3D (document.all && document.getElementById)?true:false;=0A=
var isOPERA =3D (navigator.userAgent.indexOf("Opera") !=3D -1 && =
document.getElementById)?true:false;=0A=
var isSafari =3D (navigator.userAgent.indexOf("Safari") !=3D -1);=0A=
=0A=
// ---------------------------------------=0A=
// Jcms Javascript Context=0A=
// ---------------------------------------=0A=
=0A=
var JcmsJsContext =3D {=0A=
  _contextPath : null,=0A=
  _baseUrl : null,=0A=
  _jsonRPC : null,=0A=
  =0A=
  /**=0A=
   * Returns the current context path retrieved from java.=0A=
   * Given by JcmsJspContext through "channel.js" script parameters.=0A=
   */=0A=
  getContextPath: function() { =0A=
    if (!this._contextPath) { this._init(); }=0A=
    return this._contextPath;=0A=
  },=0A=
=0A=
  /**=0A=
   * Returns the current base URL retrieved from java.=0A=
   * Retrieved through the html <base> head tag.=0A=
   */=0A=
  getBaseUrl: function() {=0A=
    if (!this._baseUrl) { this._init(); }=0A=
    return this._baseUrl;=0A=
  },=0A=
 =0A=
  /**=0A=
   * Returns the JSONRpcClient instance to use for AJAX communication.=0A=
   */=0A=
	getJsonRPC: function() {=0A=
    if (!this._jsonRPC) { =0A=
	    this._jsonRPC =3D new JSONRpcClient(JcmsJsContext.getContextPath() =
+ "/JSON-RPC");=0A=
	  }=0A=
	  return this._jsonRPC;=0A=
	},=0A=
  =0A=
  //////////////////////////////////////////////////////////////////=0A=
  // Private methods=0A=
  =0A=
  _init: function() {=0A=
    // Read baseUrl from <base > tag=0A=
    =0A=
    if (!this._baseUrl) {=0A=
      JcmsJsContext._baseUrl =3D =
document.getElementsByTagName('base')[0].href;=0A=
	    JcmsLogger.debug('JcmsJsContext', JcmsJsContext._baseUrl);=0A=
    }=0A=
    // Read contextPath from channel.js params=0A=
	  if (!this._contextPath) {=0A=
	    $A(document.getElementsByTagName('script')).findAll( function(s) {=0A=
	      return (s.src && s.src.indexOf('js/channel.js') !=3D -1)=0A=
	    }).each( function(s) {=0A=
	      var indexOfJs =3D s.src.indexOf('js/channel.js');=0A=
	      var queryString =3D s.src.substring(indexOfJs + =
'js/channel.js?'.length);=0A=
	      var queryParamsMap =3D queryString.toQueryParams();=0A=
	      =0A=
	      // Read context path (If contextpath is empty return '' instead =
of undefined)=0A=
	      JcmsJsContext._contextPath =3D queryParamsMap.contextPath ? =
queryParamsMap.contextPath : '';=0A=
	      JcmsLogger.debug('JcmsJsContext', JcmsJsContext._contextPath);=0A=
	    });=0A=
    }=0A=
  },=0A=
  =0A=
  isIE:  document.all ? true : false,=0A=
  isNN4: document.layers ? true : false,=0A=
  isNN7: (document.all && document.getElementById) ? true : false,=0A=
  isOPERA: (navigator.userAgent.indexOf("Opera") !=3D -1 && =
document.getElementById) ? true : false,=0A=
  isSafari: (navigator.userAgent.indexOf("Safari") !=3D -1)=0A=
}=0A=
=0A=
// ---------------------------------------=0A=
// Form Action Functions |||||||||||||||||=0A=
// ---------------------------------------=0A=
=0A=
function getFormElementPos(form, name){=0A=
=0A=
  // Get all elements=0A=
  elms =3D form.elements;=0A=
 =0A=
  // Find out the (first) current element=0A=
  for (var i =3D 0 ; i < elms.length ; i++){=0A=
    if (elms[i].name =3D=3D name){=0A=
      return i;=0A=
    }=0A=
  }=0A=
  return -1;=0A=
}=0A=
=0A=
function updateOptionMenu(index, tgtOptions, group){=0A=
  for (m =3D tgtOptions.length-1; m > 0; m--) {=0A=
    tgtOptions[m]=3Dnull=0A=
  }=0A=
  for (i =3D 0; i < group[index].length; i++){=0A=
    tgtOptions[i]=3Dnew Option(group[index][i].text, =
group[index][i].value)=0A=
  }=0A=
  tgtOptions[0].selected=3Dtrue=0A=
}=0A=
=0A=
function setField(field, value) {=0A=
  if (field !=3D null) {=0A=
    field.value =3D value;=0A=
  }=0A=
}=0A=
=0A=
function clearField(e1, e2, e3, e4) {=0A=
    if (e1 !=3D null) {=0A=
      e1.value =3D "";=0A=
      if (e1.selectedIndex)=0A=
        e1.selectedIndex =3D 0;=0A=
    }=0A=
    if (e2 !=3D null) {=0A=
      e2.value =3D "";=0A=
      if (e2.selectedIndex)=0A=
        e2.selectedIndex =3D 0;=0A=
    }=0A=
    if (e3 !=3D null) {=0A=
      e3.value =3D "";=0A=
      if (e3.selectedIndex)=0A=
        e3.selectedIndex =3D 0;=0A=
    }=0A=
    if (e4 !=3D null) {=0A=
      e4.value =3D "";=0A=
      if (e4.selectedIndex)=0A=
        e4.selectedIndex =3D 0;=0A=
    }=0A=
}=0A=
=0A=
function blankField(e1, e2, e3, e4) {=0A=
    if (e1 !=3D null) {=0A=
      e1.value =3D " ";=0A=
    }=0A=
    if (e2 !=3D null) {=0A=
      e2.value =3D " ";=0A=
    }=0A=
    if (e3 !=3D null) {=0A=
      e3.value =3D " ";=0A=
    }=0A=
    if (e4 !=3D null) {=0A=
      e4.value =3D " ";=0A=
    }=0A=
}=0A=
=0A=
=0A=
function uncheckElement(form, i1, i2, i3) {=0A=
  if (i1 !=3D null && i1 >=3D 0) {=0A=
    form.elements[i1].checked =3D false;=0A=
  }=0A=
  if (i2 !=3D null && i2 >=3D 0) {=0A=
    form.elements[i2].checked =3D false;=0A=
  }=0A=
  if (i3 !=3D null && i3 >=3D 0) {=0A=
    form.elements[i3].checked =3D false;=0A=
  }=0A=
}=0A=
=0A=
function uncheckAll(form, name, checkbox) {=0A=
  if (name !=3D null) {=0A=
    var elements =3D form.elements[name];=0A=
    for(i =3D 0; i < elements.length; i++) {=0A=
      if (elements[i] !=3D checkbox) {=0A=
        elements[i].checked =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
function checkAll(form, name, checkbox) {=0A=
  checkAllwithId(form, name, checkbox, null, null);=0A=
}=0A=
=0A=
function checkAllwithId(form, name, checkbox, id) {=0A=
  _checkAllwithId(form.elements, name, checkbox, id);=0A=
}=0A=
=0A=
function checkAllwithParentId(parentId, name, checkbox, id) {=0A=
  =0A=
  var elms =3D $$("#"+parentId+" INPUT[type=3Dcheckbox]");=0A=
  if (elms){=0A=
    _checkAllwithId(elms.toArray(), name, checkbox, id);=0A=
  }=0A=
}=0A=
=0A=
function _checkAllwithId(elms, name, checkbox, id) {=0A=
 =0A=
  // Find out the (first) current check=0A=
  for (var i =3D 0 ; i < elms.length ; i++){=0A=
    if (elms[i].name !=3D name)=0A=
      continue;=0A=
    =0A=
    if (id !=3D null && elms[i].id.indexOf(id) < 0)=0A=
      continue;=0A=
      =0A=
    checkIt =3D !elms[i].checked;=0A=
    break;=0A=
  }=0A=
=0A=
  // Check all in the toggle state=0A=
  for (var i =3D 0 ; i < elms.length ; i++){=0A=
    if (elms[i].name !=3D name)=0A=
      continue;=0A=
    if (id !=3D null && elms[i].id.indexOf(id) < 0)=0A=
      continue;=0A=
    elms[i].checked =3D checkIt;=0A=
  }=0A=
  checkbox.checked =3D checkIt;=0A=
}=0A=
=0A=
=0A=
function selectAll(form, name){=0A=
 selectAllwithId(form, name,null);=0A=
}=0A=
=0A=
function selectAllwithId(form, name, id) {=0A=
=0A=
  // Get all elements=0A=
  elms =3D form.elements;=0A=
 =0A=
  // Find out the (first) current value=0A=
  for (var i =3D 0 ; i < elms.length ; i++){=0A=
    if (elms[i].name !=3D name)=0A=
      continue;=0A=
    =0A=
    if (id !=3D null && elms[i].id.indexOf(id) < 0)=0A=
      continue;=0A=
      =0A=
    selectIt =3D elms[i].selectedIndex;=0A=
    break;=0A=
  }=0A=
=0A=
  // Check all in the toggle state=0A=
  for (var i =3D 0 ; i < elms.length ; i++){=0A=
    if (elms[i].name !=3D name)=0A=
      continue;=0A=
    if (id !=3D null && elms[i].id.indexOf(id) < 0)=0A=
      continue;=0A=
    elms[i].selectedIndex =3D selectIt;=0A=
  }=0A=
}=0A=
=0A=
function getSelectedElements(form,name,sep){=0A=
  elms  =3D form.elements;=0A=
  value =3D "";=0A=
  cpt   =3D 0;=0A=
  for (var i =3D 0 ; i < elms.length ; i++){=0A=
    if (elms[i].name !=3D name)=0A=
      continue;=0A=
    if (! elms[i].checked)=0A=
      continue;=0A=
      =0A=
    if (cpt > 0)=0A=
      value +=3D sep;=0A=
    =0A=
    value +=3D elms[i].value;=0A=
    cpt++;=0A=
  }=0A=
  return value;=0A=
}=0A=
=0A=
// DEPRECATED should be removed=0A=
function checkAndSubmitForm(form, field1, field2, error1, error2) {=0A=
   =0A=
  if (field1 && field1.value =3D=3D ""){=0A=
    alert(error1);=0A=
    return;=0A=
  }=0A=
  =0A=
  if (field2 && field2.value =3D=3D ""){=0A=
    alert(error2);=0A=
    return;=0A=
  }=0A=
  =0A=
  if (form.onsubmit)=0A=
    form.onsubmit();=0A=
  form.submit();=0A=
}=0A=
=0A=
// ---------------------------------------=0A=
// Move Form Functions |||||||||||||||||||=0A=
// ---------------------------------------=0A=
=0A=
// Move up/down or delete selected option of a list of select=0A=
function moveFormOption(form, pos, op, first, last) {=0A=
  array =3D form.elements;=0A=
=0A=
  // Move Up=0A=
  if (op =3D=3D "up") {=0A=
    if (pos > first) { =0A=
      tmp =3D array[pos].selectedIndex;=0A=
      array[pos].selectedIndex =3D array[pos - 1].selectedIndex;=0A=
      array[pos - 1].selectedIndex =3D tmp;=0A=
    } else {=0A=
      tmp =3D array[first].selectedIndex;=0A=
      for(i =3D first; i < last; i++) {=0A=
        array[i].selectedIndex =3D array[i + 1].selectedIndex;=0A=
      }=0A=
      array[last].selectedIndex =3D tmp;=0A=
    }=0A=
  } =0A=
  // Move Down=0A=
  else if (op =3D=3D "down") {=0A=
    if (pos < last) {=0A=
      tmp =3D array[pos].selectedIndex;=0A=
      array[pos].selectedIndex =3D array[pos + 1].selectedIndex;=0A=
      array[pos + 1].selectedIndex =3D tmp;=0A=
    } else {=0A=
      tmp =3D array[last].selectedIndex;=0A=
      for(i =3D last; i >=3D first; i--) {=0A=
        array[i].selectedIndex =3D array[i - 1].selectedIndex;=0A=
      }=0A=
      array[first].selectedIndex =3D tmp;=0A=
    }=0A=
  }=0A=
  // Remove Element=0A=
  else if (op =3D=3D "remove") {=0A=
    for(i =3D pos; i < last; i++) {=0A=
      array[i].selectedIndex =3D array[i + 1].selectedIndex;=0A=
    }=0A=
    array[last].selectedIndex =3D 0;=0A=
=0A=
  }=0A=
}=0A=
=0A=
// Move up/down or delete value of list of input=0A=
function moveFormElement(form, pos, op, first, last) {=0A=
  array =3D form.elements;=0A=
=0A=
  // Move Up=0A=
  if (op =3D=3D "up") {=0A=
    if (pos > first) { =0A=
      tmp =3D array[pos].value;=0A=
      array[pos].value =3D array[pos - 1].value;=0A=
      array[pos - 1].value =3D tmp;=0A=
    } else {=0A=
      tmp =3D array[first].value;=0A=
      for(i =3D first; i < last; i++) {=0A=
        array[i].value =3D array[i + 1].value;=0A=
      }=0A=
      array[last].value =3D tmp;=0A=
    }=0A=
  } =0A=
  // Move Down=0A=
  else if (op =3D=3D "down") {=0A=
    if (pos < last) {=0A=
      tmp =3D array[pos].value;=0A=
      array[pos].value =3D array[pos + 1].value;=0A=
      array[pos + 1].value =3D tmp;=0A=
    } else {=0A=
      tmp =3D array[last].value;=0A=
      for(i =3D last; i >=3D first; i--) {=0A=
        array[i].value =3D array[i - 1].value;=0A=
      }=0A=
      array[first].value =3D tmp;=0A=
    }=0A=
  }=0A=
  // Remove Element=0A=
  else if (op =3D=3D "remove") {=0A=
    for(i =3D pos; i < last; i++) {=0A=
      array[i].value =3D array[i + 1].value;=0A=
    }=0A=
    array[last].value =3D "";=0A=
=0A=
  }=0A=
}=0A=
=0A=
// Move up/down or delete value of list of couple of input=0A=
function move2FormElement(form, pos, op, first, last) {=0A=
  array =3D form.elements;=0A=
=0A=
  // Move Up=0A=
  if (op =3D=3D "up") {=0A=
    if (pos > (first + 1)) { =0A=
      tmp =3D array[pos].value;=0A=
      array[pos].value =3D array[pos - 2].value;=0A=
      array[pos - 2].value =3D tmp;=0A=
=0A=
      tmp =3D array[pos - 1].value;=0A=
      array[pos - 1].value =3D array[pos - 3].value;=0A=
      array[pos - 3].value =3D tmp;=0A=
    } else {=0A=
      tmp1 =3D array[first].value;=0A=
      tmp2 =3D array[first + 1].value;=0A=
      for(i =3D first ; i < last; i++) {=0A=
        array[i].value =3D array[i + 2].value;=0A=
      }=0A=
      array[last - 1].value =3D tmp1;=0A=
      array[last].value =3D tmp2;=0A=
    }=0A=
  } =0A=
  // Move Down=0A=
  else if (op =3D=3D "down") {=0A=
    if (pos < last) {=0A=
      tmp =3D array[pos].value;=0A=
      array[pos].value =3D array[pos + 2].value;=0A=
      array[pos + 2].value =3D tmp;=0A=
=0A=
      tmp =3D array[pos - 1].value;=0A=
      array[pos - 1].value =3D array[pos + 1].value;=0A=
      array[pos + 1].value =3D tmp;=0A=
    } else {=0A=
      tmp1 =3D array[last].value;=0A=
      tmp2 =3D array[last - 1].value;=0A=
      for(i =3D last; i >=3D first; i--) {=0A=
        array[i].value =3D array[i - 2].value;=0A=
      }=0A=
      array[first + 1].value =3D tmp1;=0A=
      array[first].value =3D tmp2;=0A=
    }=0A=
  }=0A=
  // Remove Element=0A=
  else if (op =3D=3D "remove") {=0A=
    for(i =3D pos - 1; i < last; i++) {=0A=
      array[i].value =3D array[i + 2].value;=0A=
    }=0A=
    array[last - 1].value =3D "";=0A=
    array[last].value =3D "";=0A=
=0A=
  }=0A=
}=0A=
=0A=
// ---------------------------------------=0A=
// Change URL Functions ||||||||||||||||||=0A=
// ---------------------------------------=0A=
=0A=
function getUrlWithUpdatedParam(url,param,value){=0A=
  var targeturl =3D url.toString();=0A=
      =0A=
  re1 =3D new RegExp("([^\?]*\\?.*)("+param+"=3D[^&]*&?)(.*)","i");=0A=
  re2 =3D new RegExp("([^\?]*\\?)(.*)","i");=0A=
  re3 =3D new RegExp("([^\?]*)","i");=0A=
  =0A=
  if (targeturl.search(re1) !=3D -1){=0A=
    if (value)=0A=
      targeturl =3D targeturl.replace(re1,"$1"+param+"=3D"+value+"&$3");=0A=
    else=0A=
      targeturl =3D targeturl.replace(re1,"$1"+"$3");=0A=
  }=0A=
  else if (targeturl.search(re2) !=3D -1){ =0A=
    if (value)=0A=
      targeturl =3D targeturl.replace(re2,"$1"+param+"=3D"+value+"&$2");=0A=
    else=0A=
      targeturl =3D targeturl.replace(re2,"$1"+"$2");=0A=
  }=0A=
  else { =0A=
    if (value)=0A=
      targeturl =3D targeturl.replace(re3,"$1?"+param+"=3D"+value);=0A=
    else=0A=
      targeturl =3D targeturl.replace(re3,"$1");=0A=
  }=0A=
  =0A=
  return targeturl;=0A=
}=0A=
=0A=
// ---------------------------------------=0A=
// Prompt and Confirm Functions ||||||||||=0A=
// ---------------------------------------=0A=
=0A=
function popupWindow(url, title, w, h, status, resizable, scrollbars, =
reuse, winOpener){=0A=
  Popup.popupWindow(url, title, w, h, status, resizable, scrollbars, =
reuse, winOpener);=0A=
}=0A=
=0A=
/**=0A=
 * This function prompts the given message and provide a text input. =0A=
 * Then, if the user confirms (OK button), it redirect on the given =0A=
 * URL with the input value bound to the given parameter.=0A=
 * =0A=
 * @param msg the message to prompt.=0A=
 * @param url the url to redirect on.=0A=
 * @param param the name of the parameter used to provide the input value=0A=
 * @param defvalue the default value of the text input.=0A=
 */=0A=
function promptAction(msg , url, param, defvalue){=0A=
  =0A=
  var redirect =3D function(value){=0A=
    top.document.location =3D getUrlWithUpdatedParam(url, param, value);=0A=
  };=0A=
  promptJSAction(msg, redirect, defvalue);=0A=
}=0A=
=0A=
/**=0A=
 * This function prompts the given message and provide a text input. =0A=
 * Then, if the user confirms (OK button), it execute a javascript=0A=
 * function.=0A=
 * =0A=
 * @param msg the message to prompt.=0A=
 * @param func the function to execute.=0A=
 * @param defvalue the default value of the text input.=0A=
 */=0A=
function promptJSAction(msg , func, defvalue){=0A=
  value =3D top.prompt(msg,defvalue);=0A=
  if (value =3D=3D undefined) {=0A=
  	return;=0A=
  }=0A=
  func(value);=0A=
}=0A=
=0A=
/**=0A=
 * This function prompts the given message and redirect on the given URL =
if the user confirms (OK button)=0A=
 * @param msg the message to prompt.=0A=
 * @param url the url to redirect on.=0A=
 */=0A=
function confirmAction(msg, url) {=0A=
  if (top.confirm(msg)) {=0A=
    top.document.location =3D url;=0A=
  }=0A=
}=0A=
=0A=
/**=0A=
 * This function prompts the given message and execute given function if =
the user confirms (OK button)=0A=
 * @param msg the message to prompt.=0A=
 * @param func the function to run.=0A=
 */=0A=
function confirmJSAction(msg, func) {=0A=
  if (top.confirm(msg)) {=0A=
    func();=0A=
  }=0A=
}=0A=
=0A=
/**=0A=
 * This function prompts the given message and redirect on the given URL =
if the user does not confirm (Cancel button)=0A=
 * @param msg the message to prompt.=0A=
 * @param url the url to redirect on.=0A=
 */=0A=
function confirmNoAction(msg, url) {=0A=
  if (!top.confirm(msg)) {=0A=
    top.document.location =3D url;=0A=
  }=0A=
}=0A=
=0A=
/**=0A=
 * This function will not return until (at least)=0A=
 * the specified number of milliseconds have passed.=0A=
 * It does a busy-wait loop.=0A=
 */=0A=
function pause(numberMillis) {=0A=
    var now =3D new Date();=0A=
    var exitTime =3D now.getTime() + numberMillis;=0A=
    while (true) {=0A=
        now =3D new Date();=0A=
        if (now.getTime() > exitTime)=0A=
            return;=0A=
    }=0A=
}=0A=
=0A=
// ---------------------------------------=0A=
// Caddy Functions ||||||||||||||||||||=0A=
// ---------------------------------------=0A=
=0A=
/**=0A=
 * Swap the current source of the given image with the given second =
source=0A=
 * and second description.=0A=
 * Make sure image are correctly loaded to prevent a bug in IE=0A=
 * where the image could disapear when swapping.=0A=
 */=0A=
function swapImgSrcAndDescription(ahref, secondSrc, =
secondDescription,swapLinkText) {=0A=
  =0A=
  // Retrieve IMG=0A=
  var ahref =3D $(ahref);=0A=
  var img   =3D ahref.childNodes[0];=0A=
  var text  =3D ahref.childNodes[1];=0A=
  =0A=
  // Lazy backup of parameters=0A=
  if (!img.secondSrc) {=0A=
    img.secondSrc   =3D secondSrc;=0A=
    img.secondTitle =3D secondDescription+".";=0A=
    img.secondAlt   =3D secondDescription;=0A=
	  // preload second image=0A=
	  if (document.images) {=0A=
	    var secondImgPreload =3D new Image();=0A=
	    secondImgPreload.src =3D img.secondSrc; =0A=
	  }=0A=
  }=0A=
  =0A=
  // Swap Values=0A=
  var oldSrc     =3D img.src;=0A=
  var oldTitle   =3D img.title;=0A=
  var oldAlt     =3D img.alt;=0A=
  img.src         =3D img.secondSrc;=0A=
  img.title       =3D img.secondTitle;=0A=
  img.alt         =3D img.secondAlt;=0A=
  img.secondSrc   =3D oldSrc;=0A=
  img.secondTitle =3D oldTitle;=0A=
  img.secondAlt   =3D oldAlt;=0A=
  =0A=
  if (swapLinkText && text){=0A=
    text.nodeValue =3D img.alt;=0A=
  }=0A=
}=0A=
=0A=
// ---------------------------------------=0A=
// ThumbnailTag Functions ||||||||||||||||=0A=
// ---------------------------------------=0A=
=0A=
/** =0A=
 * Method used by Thumbnail tag to delay thumbnail creation using AJAX =
call.=0A=
 * Calls the Java static method =
ThumbnailTag.createThumbnailFromSessionAttribute(String)=0A=
 * which will look inside the session for the given attribute name in =
order to=0A=
 * create the thumbnail using the params stored in session.=0A=
 */ =0A=
function thumbnailTagAjaxLoading(sessionAttrName) {=0A=
  try {=0A=
    =
JcmsJsContext.getJsonRPC().ThumbnailTag.createThumbnailFromSessionAttribu=
te( =0A=
    // Anonymous callback called when the Ajax JSONRPC=0A=
    // call has been treated on the serverside=0A=
    // @param result the result returned by static method=0A=
    //        ThumbnailTag.createThumbnailFromSessionAttribute(), that =
is,=0A=
    //        the new thumbnail path, or null if thumbnail creation =
failed=0A=
		function (result, exception) {=0A=
		  if (exception) {=0A=
		    //alert(exception.message);=0A=
		    return;=0A=
		  }=0A=
      if (result) {=0A=
	      var img =3D $(sessionAttrName);=0A=
	      img.hide();=0A=
	      img.src =3D result;=0A=
	      Effect.Appear(img, { duration: 0.500 });=0A=
      }=0A=
		},=0A=
    sessionAttrName);=0A=
  } catch(ex) { }=0A=
}=0A=
=0A=
=0A=
// ---------------------------------------=0A=
// On Load Functions |||||||||||||||||||||=0A=
// ---------------------------------------=0A=
=0A=
=0A=
function doOnLoad(){=0A=
  // Text area resizer must be called before tabpane to make=0A=
  // sure the textarea are still visible and therefore their=0A=
  // width can be retrieved.=0A=
  initTextAreaResizer();=0A=
  setupAllTabs();=0A=
  // popup resizing must occurs after layout (of tabs) has been done=0A=
  var popupEditionDiv =3D $('popupEdition');=0A=
  // A test popupEditionDiv.id =3D=3D 'popupEdition' is added because of =
a bug in prototype=0A=
  // dollar that returns under IE 6.0 and 7.0 the element with name =
'popupEdition' instead=0A=
  // of a missing element with ID 'popupEdition'  =0A=
  if (popupEditionDiv && popupEditionDiv.id =3D=3D 'popupEdition') {=0A=
    Popup.autoResize(popupEditionDiv);=0A=
  }=0A=
}=0A=
=0A=
// Initialization hook up=0A=
Event.observe(window, 'load', function() { setTimeout(doOnLoad,5); });=0A=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/js/jspacker.jsp?js=js/tabpane.js&js=js/tree.js&js=js/treegroup.js&js=js/widget.js&js=js/treecat.js&js=js/jalios/widget/autocomplete.js&js=js/jalios/textarea-resizer.js&js=js/custom.js

/* js/tabpane.js */=0A=
// This function is used to define if the browser supports the needed=0A=
// features=0A=
function hasSupport() {=0A=
if (typeof hasSupport.support !=3D "undefined")=0A=
return hasSupport.support;=0A=
var ie5 =3D /msie 5\.[0-9]/i.test( navigator.userAgent );=0A=
hasSupport.support =3D ( typeof document.implementation !=3D "undefined" =
&&=0A=
document.implementation.hasFeature( "html", "1.0" ) || ie5 )=0A=
/* Original code			=0A=
// IE5 has a serious DOM1 bug... Patch it!=0A=
if ( ie5 ) {=0A=
document._getElementsByTagName =3D document.getElementsByTagName;=0A=
document.getElementsByTagName =3D function ( sTagName ) {=0A=
if ( sTagName =3D=3D "*" )=0A=
return document.all;=0A=
else=0A=
return document._getElementsByTagName( sTagName );=0A=
};=0A=
}=0A=
*/=0A=
/* Patch for the bug with IE55 and NT4=0A=
if ( ie55 ) {=0A=
document._getElementsByTagName =3D document.getElementsByTagName;=0A=
document.getElementsByTagName =3D function ( sTagName ) {=0A=
if ( sTagName =3D=3D "*" )=0A=
return document.all;=0A=
else=0A=
return document._getElementsByTagName( sTagName );=0A=
};=0A=
}=0A=
*/=0A=
// will cause bug when ie55 patched, so rewrite above=0A=
if ( ie5 ) {  =0A=
document._getAllElements =3D function () {=0A=
return document.all;=0A=
}=0A=
} else {=0A=
document._getAllElements =3D function () {=0A=
return document.getElementsByTagName("*");=0A=
}   =0A=
}=0A=
return hasSupport.support;=0A=
}=0A=
var groups =3D new Array() ;=0A=
var ieMac =3D navigator.appVersion.indexOf("MSIE") >=3D 0 && =
navigator.appVersion.indexOf("Mac") >=3D 0 ;=0A=
/////////////////////////////////////////////////////////////////////////=
//////////=0A=
// The constructor for tab panes=0A=
//=0A=
// el : HTMLElement		The html element used to represent the tab pane=0A=
// bUseCookie : Boolean	Optional. Default is true. Used to determine =
whether to us=0A=
//						persistance using cookies or not=0A=
//=0A=
function WebFXTabPane( el, bUseCookie ) {=0A=
if ( !hasSupport() || el =3D=3D null ) return;=0A=
JcmsLogger.debug('TabPane', 'New tab pane: ', el);=0A=
this.element =3D el;=0A=
this.element.tabPane =3D this;=0A=
var cn =3D this.element.className ;=0A=
this.group =3D cn.length>8 ? cn.substring(9,cn.length) : null;=0A=
if (this.group) {=0A=
if (!groups[this.group]) groups[this.group] =3D new Array() ;=0A=
groups[this.group][groups[this.group].length]=3Dthis.element.id ;=0A=
}=0A=
this.pages =3D [];=0A=
this.selectedIndex =3D null;=0A=
this.useCookie =3D false; // :OD:NOTE: bug-jcms-4.0-148 (Form with many =
tabs may logout the user).  bUseCookie !=3D null ? bUseCookie : true;=0A=
// add class name tag to class name=0A=
this.element.className =3D this.classNameTag + " " + =
this.element.className;=0A=
// add tab row=0A=
this.tabRow =3D document.createElement( "div" );=0A=
this.tabRow.className =3D "tab-row";=0A=
if (ieMac) this.tabRow.style.height =3D "1px";=0A=
el.insertBefore( this.tabRow, el.firstChild );=0A=
var tabIndex =3D 0;=0A=
//	if ( this.useCookie ) { // :OD:NOTE: bug-jcms-4.0-148 vs. force tab =
to open (setSelectedTab())=0A=
tabIndex =3D Number( WebFXTabPane.getCookie( "webfxtab_" + =
this.element.id ) );=0A=
if ( isNaN( tabIndex ))=0A=
tabIndex =3D 0;=0A=
//	}=0A=
this.selectedIndex =3D tabIndex;=0A=
// loop through child nodes and add them=0A=
var n;=0A=
var cs =3D el.childNodes;=0A=
for (var i =3D 0; i < cs.length; i++) {=0A=
if (cs[i].nodeType =3D=3D 1 && cs[i].className =3D=3D "tab-page") {=0A=
this.addTabPage( cs[i] );=0A=
}=0A=
}=0A=
if (this.selectedIndex >=3D this.pages.length)=0A=
this.setSelectedIndex(0);=0A=
}=0A=
WebFXTabPane.prototype.classNameTag =3D "dynamic-tab-pane-control";=0A=
WebFXTabPane.prototype.setSelectedIndex =3D function ( n ) {=0A=
if (n > this.pages.length)=0A=
n =3D 0;=0A=
if (this.selectedIndex !=3D n) {=0A=
if (this.selectedIndex !=3D null && this.pages[ this.selectedIndex ] =
!=3D null )=0A=
this.pages[ this.selectedIndex ].hide();=0A=
this.selectedIndex =3D n;=0A=
this.pages[ this.selectedIndex ].show();=0A=
// Fire a tabpane:change event for the current tab being displayed		=0A=
WebFXTabPane.fireChange(this.pages[this.selectedIndex].element);=0A=
if ( this.useCookie )=0A=
WebFXTabPane.setCookie( "webfxtab_" + this.element.id, n );	// session =
cookie=0A=
}=0A=
};=0A=
WebFXTabPane.prototype.getSelectedIndex =3D function () {=0A=
return this.selectedIndex;=0A=
};=0A=
WebFXTabPane.prototype.addTabPage =3D function ( oElement ) {=0A=
if ( !hasSupport() ) return;=0A=
if ( oElement.tabPage =3D=3D this )	// already added=0A=
return oElement.tabPage;=0A=
var n =3D this.pages.length;=0A=
var tp =3D this.pages[n] =3D new WebFXTabPage( oElement, this, n );=0A=
tp.tabPane =3D this;=0A=
// move the tab out of the box=0A=
this.tabRow.appendChild( tp.tab );=0A=
if ( n =3D=3D this.selectedIndex )=0A=
tp.show();=0A=
else=0A=
tp.hide();=0A=
return tp;=0A=
};=0A=
WebFXTabPane.prototype.dispose =3D function () {=0A=
this.element.tabPane =3D null;=0A=
this.element =3D null;		=0A=
this.tabRow =3D null;=0A=
for (var i =3D 0; i < this.pages.length; i++) {=0A=
this.pages[i].dispose();=0A=
this.pages[i] =3D null;=0A=
}=0A=
this.pages =3D null;=0A=
};=0A=
// Cookie handling=0A=
WebFXTabPane.setCookie =3D function ( sName, sValue, nDays ) {=0A=
var expires =3D "";=0A=
if ( nDays ) {=0A=
var d =3D new Date();=0A=
d.setTime( d.getTime() + nDays * 24 * 60 * 60 * 1000 );=0A=
expires =3D "; expires=3D" + d.toGMTString();=0A=
}=0A=
document.cookie =3D sName + "=3D" + sValue + expires + "; path=3D/";=0A=
};=0A=
WebFXTabPane.getCookie =3D function (sName) {=0A=
var re =3D new RegExp( "(\;|^)[^;]*(" + sName + ")\=3D([^;]*)(;|$)" );=0A=
var res =3D re.exec( document.cookie );=0A=
return res !=3D null ? res[3] : null;=0A=
};=0A=
WebFXTabPane.removeCookie =3D function ( name ) {=0A=
setCookie( name, "", -1 );=0A=
};=0A=
WebFXTabPane.isInVisibleTab =3D function(elm) {=0A=
for (elm =3D elm; elm; elm =3D elm.parentNode) {=0A=
if (elm && elm.style && elm.style.display =3D=3D 'none') {=0A=
return false;=0A=
}=0A=
}=0A=
return true;=0A=
};=0A=
WebFXTabPane.fireChange =3D function ( rootElement ) {=0A=
JcmsLogger.debug('TabPane', 'fireChange("', rootElement, '")');=0A=
$(rootElement).fire('tabpane:change', { tabPage: rootElement });=0A=
}=0A=
/////////////////////////////////////////////////////////////////////////=
//////////=0A=
// The constructor for tab pages. This one should not be used.=0A=
// Use WebFXTabPage.addTabPage instead=0A=
//=0A=
// el : HTMLElement			The html element used to represent the tab pane=0A=
// tabPane : WebFXTabPane	The parent tab pane=0A=
// nindex :	Number			The index of the page in the parent pane page array=0A=
//=0A=
function WebFXTabPage( el, tabPane, nIndex ) {=0A=
if ( !hasSupport() || el =3D=3D null ) return;=0A=
JcmsLogger.debug('TabPane', 'New tab page: ', el, ' for tab pane ', =
tabPane.element);=0A=
// Register a listener on all tag page in order to stop event bubbling =
of the custom 'tabpane:change' event=0A=
Event.observe(el, 'tabpane:change', function(event) { Event.stop(event); =
}.bindAsEventListener(el));=0A=
this.element =3D el;=0A=
this.element.tabPage =3D this;=0A=
this.index =3D nIndex;=0A=
this.group =3D tabPane.group ;=0A=
var cs =3D el.childNodes;=0A=
for (var i =3D 0; i < cs.length; i++) {=0A=
if (cs[i].nodeType =3D=3D 1 && cs[i].className =3D=3D "tab") {=0A=
this.tab =3D cs[i];=0A=
break;=0A=
}=0A=
}=0A=
// insert a tag around content to support keyboard navigation	=0A=
var a =3D document.createElement( "A" );=0A=
this.aElement =3D a;=0A=
a.href =3D "#";=0A=
a.onclick =3D function () { return false; };=0A=
a.hideFocus =3D true ;=0A=
while ( this.tab.hasChildNodes() )=0A=
a.appendChild( this.tab.firstChild );=0A=
this.tab.appendChild( a );=0A=
// hook up events, using DOM0=0A=
var oThis =3D this;=0A=
this.tab.onclick =3D function () { oThis.select(oThis.group); };=0A=
/* =0A=
JALIOS: Commented to reduce jumper tab=0A=
this.tab.onmouseover =3D function () { WebFXTabPage.tabOver( oThis ); };=0A=
this.tab.onmouseout =3D function () { WebFXTabPage.tabOut( oThis ); }; =0A=
*/=0A=
}=0A=
WebFXTabPage.prototype.show =3D function () {=0A=
var el =3D this.tab;=0A=
el.className =3D "tab_selected";=0A=
this.element.style.display =3D "block";=0A=
};=0A=
WebFXTabPage.prototype.hide =3D function () {=0A=
var el =3D this.tab;=0A=
el.className =3D "tab";=0A=
this.element.style.display =3D "none";=0A=
};=0A=
WebFXTabPage.prototype.select =3D function (group) {=0A=
if (group) {=0A=
var g=3Dgroups[group];=0A=
for(var i=3D0 ; i<g.length ; i++) {=0A=
var el =3D document.getElementById(g[i]) ;=0A=
if (el) {=0A=
if (this.index<el.tabPane.pages.length)=0A=
el.tabPane.setSelectedIndex( this.index ) ;=0A=
}=0A=
}=0A=
}=0A=
else this.tabPane.setSelectedIndex( this.index );=0A=
};=0A=
WebFXTabPage.prototype.dispose =3D function () {=0A=
this.aElement.onclick =3D null;=0A=
this.aElement =3D null;=0A=
this.element.tabPage =3D null;=0A=
this.tab.onclick =3D null;=0A=
this.tab.onmouseover =3D null;=0A=
this.tab.onmouseout =3D null;=0A=
this.tab =3D null;=0A=
this.tabPane =3D null;=0A=
this.element =3D null;=0A=
};=0A=
WebFXTabPage.tabOver =3D function ( tabpage ) {=0A=
var el =3D tabpage.tab;=0A=
var s =3D el.className + " hover";=0A=
s =3D s.replace(/ +/g, " ");=0A=
el.className =3D s;=0A=
};=0A=
WebFXTabPage.tabOut =3D function ( tabpage ) {=0A=
var el =3D tabpage.tab;=0A=
var s =3D el.className;=0A=
s =3D s.replace(/ hover/g, "");=0A=
el.className =3D s;=0A=
};=0A=
// This function initializes all uninitialized tab panes and tab pages=0A=
function setupAllTabs() {=0A=
if ( !hasSupport() ) return;=0A=
if ( document.TabPaneSetupAllTabsDone ) { return; }=0A=
document.TabPaneSetupAllTabsDone =3D true;=0A=
JcmsLogger.info('TabPane', 'Setup all tabs');=0A=
var tabPaneRe =3D /tab\-pane/;=0A=
var tabPageRe =3D /tab\-page/;=0A=
var firstTabPage;=0A=
// document.getElementsByTagName( "*" );=0A=
// will cause bug when ie55 patched , so rewrite above=0A=
$A(document._getAllElements()).each(function(el) {=0A=
var cn =3D el.className;=0A=
// no className=0A=
if ( cn =3D=3D "" ) {=0A=
return; //continue=0A=
}=0A=
// uninitiated tab pane=0A=
if ( tabPaneRe.test( cn ) && !el.tabPane ) {=0A=
var pane =3D new WebFXTabPane( el );=0A=
// track first tabpane to fire event=0A=
if (!firstTabPage && pane.pages[0]) {=0A=
firstTabPage =3D pane.pages[0].element;=0A=
}=0A=
}=0A=
// unitiated tab page wit a valid tab pane parent=0A=
else if ( tabPageRe.test( cn ) && !el.tabPage &&=0A=
tabPaneRe.test( el.parentNode.className ) ) {=0A=
el.parentNode.tabPane.addTabPage( el );			=0A=
}=0A=
});=0A=
if (document.TabPaneLanguageTab) {=0A=
setSelectedLanguageTab(document.TabPaneLanguageTab);=0A=
}=0A=
WebFXTabPane.fireChange(firstTabPage ? firstTabPage : document.body);=0A=
}=0A=
function disposeAllTabs() {=0A=
if ( !hasSupport() ) return;=0A=
var tabPaneRe =3D /tab\-pane/;=0A=
var tabPanes =3D [];=0A=
// document.getElementsByTagName( "*" );=0A=
// will cause bug when ie55 patched , so rewrite above=0A=
$A(document._getAllElements()).each(function(el) {=0A=
var cn =3D el.className;=0A=
// no className=0A=
if ( cn =3D=3D "" ) {=0A=
return; //continue=0A=
}=0A=
// tab pane=0A=
if ( tabPaneRe.test( cn ) && el.tabPane ) {=0A=
tabPanes[tabPanes.length] =3D el.tabPane;=0A=
}=0A=
});=0A=
for (var i =3D tabPanes.length - 1; i >=3D 0; i--) {=0A=
tabPanes[i].dispose();=0A=
tabPanes[i] =3D null;=0A=
}=0A=
}=0A=
function setSelectedTab(tabPaneId, index) {=0A=
document.cookie =3D "webfxtab_" + tabPaneId + "=3D" + index + "; =
path=3D/";=0A=
var elt =3D $(tabPaneId); if (!elt){ return;  }=0A=
var tabpane =3D elt.tabPane; if (!tabpane){ return;  }=0A=
tabpane.setSelectedIndex(index);=0A=
}=0A=
function setSelectedLanguageTab(langIndex) {=0A=
// Defer to setupAllTabs if tabpane has no yet been initialized=0A=
if ( !document.TabPaneSetupAllTabsDone ) {=0A=
document.TabPaneLanguageTab =3D langIndex;=0A=
return;=0A=
}=0A=
var g =3D groups["lang"];=0A=
if (g =3D=3D null || g =3D=3D "undefined") {=0A=
return;=0A=
}=0A=
for(var i=3D0 ; i<g.length ; i++) {=0A=
var el =3D document.getElementById(g[i]) ;=0A=
if (el) {=0A=
if (langIndex < el.tabPane.pages.length)=0A=
el.tabPane.setSelectedIndex( langIndex ) ;=0A=
}=0A=
}=0A=
}=0A=
/* js/tree.js */=0A=
function toggleUL(event, ulId,img,open,openable) {=0A=
ulElt =3D document.getElementById(ulId) ;=0A=
ulElt.style.display =3D ulElt.style.display=3D=3D"none" ? "block" : =
"none" ;=0A=
img.src =3D ulElt.style.display=3D=3D"block" ? open : openable ;=0A=
if ( (event&&event.ctrlKey) ) {=0A=
var descendants =3D ulElt.getElementsByTagName("UL") ;=0A=
var icons =3D ulElt.getElementsByTagName("IMG") ;=0A=
if (ulElt.style.display=3D=3D"block") {=0A=
for(var i=3D0;i<descendants.length;i++) { descendants[i].style.display =
=3D "block" ; }=0A=
for(var i=3D0;i<icons.length;i++) { if =
(icons[i].src.indexOf(openable)!=3D-1) { icons[i].src =3D open ; } }=0A=
} else {=0A=
for(var i=3D0;i<descendants.length;i++) { descendants[i].style.display =
=3D "none" ; }=0A=
for(var i=3D0;i<icons.length;i++) { if =
(icons[i].src.indexOf(open)!=3D-1) { icons[i].src =3D openable ; } }  =0A=
}=0A=
}=0A=
}=0A=
/* js/treegroup.js */=0A=
//=0A=
// treegroup.js - $Revision: 19987 $ - since jcms-5.6=0A=
// This file is used by the navigation tree group (see =
Group.printTreeGroup())=0A=
//=0A=
var TreeGroup =3D {=0A=
/**=0A=
* Open/close a workspace node.=0A=
*=0A=
* @param title the title div=0A=
* @param tree the tree div=0A=
* @since jcms-5.6.0=0A=
*/=0A=
toggle: function (title, tree) {=0A=
title =3D $(title);=0A=
// Toggle tree div=0A=
tree.toggle();=0A=
// Change title div class=0A=
if (tree.style.display =3D=3D "") {=0A=
title.addClassName("open");=0A=
} else {=0A=
title.removeClassName("open");=0A=
}=0A=
},=0A=
init: function() {=0A=
// Iterate over all the img tag in the tree=0A=
$$(".tree img").each(function(img) {=0A=
// Add the toggle behaviour for each node=0A=
Event.observe(img, 'click' , function() { =0A=
// For each node under this <li>=0A=
var li =3D img.parentNode;=0A=
$A(li.childNodes).each(function(subNode){=0A=
// Just consider <ul> tag=0A=
if (subNode.tagName !=3D "UL") {=0A=
return;=0A=
}=0A=
// Toggle the UL=0A=
$(subNode).toggle();=0A=
// Change icon=0A=
if (subNode.style.display =3D=3D "") {=0A=
img.src =3D "images/jalios/icons/groupParentOpened.gif";=0A=
} else {=0A=
img.src =3D "images/jalios/icons/groupParent.gif";=0A=
}=0A=
});=0A=
});=0A=
});=0A=
}=0A=
}=0A=
/* js/widget.js */=0A=
// =
-------------------------------------------------------------------------=
----=0A=
//  INITIALISATION=0A=
// =
-------------------------------------------------------------------------=
----=0A=
Event.observe(window, 'load' ,   function() { =
setupSingleSubmitButton();});=0A=
function initUnloadMessage(){=0A=
var func =3D function(event){=0A=
if(event.keyCode =3D=3D 116){  return; } // Skip F5 key=0A=
window.onbeforeunload =3D function unloadMess() { return =
I18N.glp('warn.edit.contentlost'); } // Register unload message=0A=
initKeyObs(false); // Unregister keypress listener=0A=
}=0A=
var initKeyObs =3D function(init){=0A=
if (init){ Event.observe(document, 'keypress' , func); } =0A=
else    { Event.stopObserving(document, 'keypress' , func); }=0A=
$A(window.frames).each(function(elm,idx){=0A=
if (init){ Event.observe(elm.document, 'keypress' , func); } =0A=
else    { Event.stopObserving(elm.document, 'keypress' , func); }=0A=
});=0A=
};=0A=
initKeyObs(true);=0A=
}=0A=
// =
-------------------------------------------------------------------------=
---=0A=
// Data Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function openDataChooser(window, ctxPath, form, widget, pos, jspPath, =
width, height){ // ctxPath must not end with '/', and jspPath must start =
with '/'=0A=
var formName   =3D getFormName(window.document, form);=0A=
var widgetPos  =3D getFormElementPos(form,widget)+pos;=0A=
var chooser    =3D =
ctxPath+jspPath+"targetInput=3Ddocument."+formName+".elements["+widgetPos=
+"].value&targetLabel=3Ddocument."+formName+".elements["+(widgetPos-1)+"]=
.value";=0A=
popupWindow(chooser, 'DataChooser', width, =
height,'no','yes','yes',false);=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Date Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function openDateChooser(window, ctxPath, form, widget, pos, dateOnly, =
showWeek){ =0A=
var formName   =3D getFormName(window.document, form);=0A=
var widgetPos   =3D getFormElementPos(form,widget)+pos;=0A=
var fieldValue  =3D escape(form.elements[widgetPos].value);=0A=
var targetInput =3D =
"document."+formName+".elements["+widgetPos+"].value";=0A=
var chooser     =3D =
ctxPath+"/work/calendarPopup.jsp?showWeekNbr=3D"+showWeek+"&dateOnly=3D"+=
dateOnly+"&datetime=3D"+fieldValue+"&targetInput=3D"+targetInput;=0A=
popupWindow(chooser, 'calendar', '300', dateOnly ? '260' : '275');=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Doc Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function openDocChooser(window, ctxPath, form, widget, pos, nbElt, id){ =0A=
var formName   =3D getFormName(window.document, form);=0A=
var widgetPos  =3D getFormElementPos(form,widget) + pos;=0A=
var chooser    =3D =
ctxPath+"/work/docChooser.jsp?form=3D"+formName+"&nbElt=3D"+nbElt+"&start=
Elt=3D"+(widgetPos-1);=0A=
if (id){=0A=
chooser   =3D chooser+"&id=3D"+id;=0A=
}=0A=
Popup.popupWindow(chooser, 'DocChooser', 640, =
600,'no','yes','yes',false);=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// File Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function openFileChooser(window, ctxPath, path, form, widget, pos){ =0A=
var formName   =3D getFormName(window.document, form);=0A=
var widgetPos  =3D getFormElementPos(form,widget)+pos;=0A=
var chooser    =3D =
ctxPath+"/work/fileChooser.jsp?"+path+"targetInput=3D"+formName+".element=
s["+widgetPos+"]&targetInputValue=3D"+escape(form.elements[widgetPos].val=
ue);=0A=
popupWindow(chooser, 'FileChooser', 700, 500,'no','yes','yes',false);=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Color Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function openColorChooser(window, ctxPath, form, widget, pos){ =0A=
var formName   =3D getFormName(window.document, form);=0A=
var widgetPos  =3D getFormElementPos(form,widget)+pos;=0A=
var chooser    =3D =
ctxPath+"/work/colorChooser.jsp?targetInput=3D"+formName+".elements["+wid=
getPos+"]";=0A=
popupWindow(chooser, 'ColorChooser', 235, 220,'no','no','yes',false);=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Query Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function openQueryChooser(window, ctxPath, form, widget, pos){ =0A=
var formName   =3D getFormName(window.document, form);=0A=
var widgetPos  =3D getFormElementPos(form,widget)+pos;=0A=
var chooser    =3D =
ctxPath+"/work/queryChooser.jsp?targetInput=3Ddocument."+formName+".eleme=
nts["+widgetPos+"].value&targetLabel=3Ddocument."+formName+".elements["+(=
widgetPos-1)+"].value&qs=3D"+escape(form.elements[widgetPos].value);=0A=
popupWindow(chooser, 'QueryChooser', 800, 400,'no','yes','yes',false);=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Image Chooser=0A=
// =
-------------------------------------------------------------------------=
----=0A=
function openImageChooser(window, ctxPath, form, widget, pos){ =0A=
internalOpenImageChooser(window, ctxPath, form, widget, pos, false);=0A=
}=0A=
function openImagePubChooser(window, ctxPath, form, widget, pos){ =0A=
internalOpenImageChooser(window, ctxPath, form, widget, pos, true);=0A=
}=0A=
function internalOpenImageChooser(window, ctxPath, form, widget, pos, =
isPubChooser){ =0A=
var formName   =3D getFormName(window.document, form);=0A=
var widgetPos  =3D getFormElementPos(form,widget)+pos;=0A=
var chooser    =3D ctxPath + =
"/work/mediaBrowser.jsp?medias=3Dimage&jsFunc=3D"=0A=
+ (isPubChooser ? "MediaBrowser.insertPub" : "MediaBrowser.insertMedia")=0A=
+ "&targetInput=3Ddocument."+formName+".elements["+widgetPos+"]"=0A=
+ (isPubChooser ? =
("&targetLabel=3Ddocument."+formName+".elements["+(widgetPos-1)+"]") : =
"");=0A=
popupWindow(chooser, 'MediaBrowser', 930, 570,'no','no','no',false);=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Media Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function openMediaChooser(window, ctxPath, form, widget, pos){ =0A=
internalOpenMediaChooser(window, ctxPath, form, widget, pos, =
'MediaBrowser.insertMedia');=0A=
}=0A=
function openMediaPubChooser(window, ctxPath, form, widget, pos){ =0A=
internalOpenMediaChooser(window, ctxPath, form, widget, pos, =
'MediaBrowser.insertPub', true);=0A=
}=0A=
function internalOpenMediaChooser(window, ctxPath, form, widget, pos, =
jsfunc, label){ =0A=
var formName   =3D getFormName(window.document, form);=0A=
var widgetPos  =3D getFormElementPos(form,widget)+pos;=0A=
var chooser    =3D ctxPath + =
"/work/mediaBrowser.jsp?media=3Dall&jsFunc=3D"+jsfunc=0A=
+ "&targetInput=3Ddocument."+formName+".elements["+widgetPos+"]"=0A=
+ (label ? =
("&targetLabel=3Ddocument."+formName+".elements["+(widgetPos-1)+"]") : =
"");=0A=
popupWindow(chooser, 'MediaBrowser', 930, 570,'no','no','no',false);=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// TEST SQLQuery=0A=
// =
-------------------------------------------------------------------------=
----=0A=
function testSQLQuery(window, ctxPath, form, widget, pos, title){=0A=
var sqlQuery   =3D form.elements[getFormElementPos(form,widget)+pos];=0A=
var dataSource =3D =
form.elements[getFormElementPos(form,widget+"DataSource")+pos];=0A=
var maxRows    =3D =
form.elements[getFormElementPos(form,widget+"MaxRows")+pos];=0A=
var chooser    =3D ctxPath+"/work/checkSQLQuery.jsp?";=0A=
chooser   +=3D "dataSource=3D" +escape(dataSource.value);=0A=
chooser   +=3D "&maxRows=3D"   +escape(maxRows.value);=0A=
chooser   +=3D "&sqlQuery=3D"  +escape(sqlQuery.value);=0A=
// alert("pos: "+pos+"\ndataSource "+dataSource.value + "\nmaxRows " + =
maxRows.value + "\nsqlQuery "+sqlQuery.value);=0A=
popupWindow(chooser, title, 400, 600,'no','yes','yes',false);   =0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Common jsFunc callback functions : Image and Media Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
if (!window.MediaBrowser) {=0A=
var MediaBrowser =3D new Object();=0A=
}=0A=
Object.extend(MediaBrowser,{=0A=
/**=0A=
* @param fdId id of the FileDocument being inserted=0A=
* @param fdTitle title of the FileDocument being inserted=0A=
* @param fdMediaType media type of the FileDocument being inserted=0A=
*        ('image', 'video', 'audio', 'flash', 'other')=0A=
* @param fdUrl the relative url of the FileDocument being inserted=0A=
* @param targetInput the input in which to store the id or URL,=0A=
*        for example 'document.myForm.elements[12]'=0A=
* @param targetLabel the input in which to store the title=0A=
*        for example 'document.myForm.elements[13]'=0A=
*/=0A=
insertPub: function(fdId, fdTitle, fdMediaType, fdUrl, targetInput, =
targetLabel) {=0A=
var evalScript =3D targetInput + ".value =3D '" + fdId + "';";=0A=
evalScript +=3D targetLabel + ".value =3D '" + fdTitle + "';";=0A=
eval(evalScript);=0A=
},=0A=
insertMedia: function(fdId, fdTitle, fdMediaType, fdUrl, targetInput, =
targetLabel) {=0A=
var evalScript =3D targetInput + ".value =3D '" + fdUrl + "';";=0A=
eval(evalScript);=0A=
}=0A=
});=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Duration Chooser =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function fillDurationField(window, form, widget, pos, resolution){=0A=
var widgetPos  =3D getFormElementPos(form,widget)+pos;=0A=
restrictToNumerics(form.elements[widgetPos+1]);=0A=
form.elements[widgetPos].value =3D form.elements[widgetPos+1].value * =
form.elements[widgetPos+2].value / resolution;=0A=
}=0A=
// ---------------------------------------=0A=
// Wysiwyg=0A=
// ---------------------------------------=0A=
// All processed done here are made to make sure that we do not allow=0A=
// form submit when content is not yet ready (which could submit partial =
on empty data).=0A=
var wysisygEditorToBeInitializedOnPage =3D 0;=0A=
/**=0A=
* Count the number of editors on the page, used by call back=0A=
*/=0A=
function countWysisygEditorOnPage() {=0A=
wysisygEditorToBeInitializedOnPage +=3D =
$$('TEXTAREA.formRichText').size();=0A=
checkWysiwygEditorInitialization();=0A=
}=0A=
Event.observe(window, 'load', countWysisygEditorOnPage);=0A=
/**=0A=
* Callback method to use when one editor has been initialized properly.=0A=
*/=0A=
function wysiwygEditorInitialized() {=0A=
wysisygEditorToBeInitializedOnPage =3D =
wysisygEditorToBeInitializedOnPage - 1;=0A=
checkWysiwygEditorInitialization();=0A=
} =0A=
/**=0A=
* This method should be called to check if all wysiwyg editors are =
completely ready.=0A=
*/=0A=
function checkWysiwygEditorInitialization() {=0A=
//alert('wysisygEditorToBeInitializedOnPage : ' + =
wysisygEditorToBeInitializedOnPage);=0A=
if (wysisygEditorToBeInitializedOnPage !=3D 0) {=0A=
return;=0A=
}=0A=
if (window.document.editForm && window.document.editForm.pageLoaded) {=0A=
window.document.editForm.pageLoaded.value =3D 'true';=0A=
//alert('pageLoaded : ' + window.document.editForm.pageLoaded.value);=0A=
}=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Fields =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function fillOpenerField(window, form, widget, pos, id, label){=0A=
var widgetPos  =3D getFormElementPos(form,widget)+pos;=0A=
form.elements[widgetPos].value   =3D id;=0A=
form.elements[widgetPos-1].value =3D label;=0A=
window.close();=0A=
}=0A=
function submitAddCount(window, form, widget, fullwidget, addCount, =
langCount, id){=0A=
var elmCount =3D getFormElementCount(form, widget, id) / langCount;=0A=
fullwidget.value =3D elmCount+addCount;=0A=
simpleSubmitForm(window, form, "opRefresh", "Wait WYSIWYG");=0A=
}=0A=
function clearDefField(def, e1, e2, e3, e4) {=0A=
if (e1 !=3D null) {=0A=
if (e1.options)=0A=
e1.options[0].selected =3D true;=0A=
else=0A=
e1.value =3D def;=0A=
}=0A=
if (e2 !=3D null) {=0A=
if (e2.options)=0A=
e2.options[0].selected =3D true;=0A=
else=0A=
e2.value =3D def;=0A=
}=0A=
if (e3 !=3D null) {=0A=
if (e3.options)=0A=
e3.options[0].selected =3D true;=0A=
else=0A=
e3.value =3D def;=0A=
}=0A=
if (e4 !=3D null) {=0A=
if (e4.options)=0A=
e4.options[0].selected =3D true;=0A=
else=0A=
e4.value =3D def;=0A=
}=0A=
}=0A=
function moveFormElement(form, widget, relativepos, op, relfirst, id) {=0A=
var array =3D form.elements;=0A=
var first =3D getFormElementPos(form,widget,id)+relfirst;=0A=
var last  =3D getFormElementLastPos(form, widget, true,id)+relfirst;=0A=
var pos   =3D first + relativepos;=0A=
// alert(id+': '+first+'->'+pos+'<-'+last);=0A=
// Move Up=0A=
if (op =3D=3D "up") {=0A=
if (pos > first) { =0A=
tmp =3D array[pos].value;=0A=
array[pos].value =3D array[pos - 1].value;=0A=
array[pos - 1].value =3D tmp;=0A=
} else {=0A=
tmp =3D array[first].value;=0A=
for(i =3D first; i < last; i++) {=0A=
array[i].value =3D array[i + 1].value;=0A=
}=0A=
array[last].value =3D tmp;=0A=
}=0A=
} =0A=
// Move Down=0A=
else if (op =3D=3D "down") {=0A=
if (pos < last) {=0A=
tmp =3D array[pos].value;=0A=
array[pos].value =3D array[pos + 1].value;=0A=
array[pos + 1].value =3D tmp;=0A=
} else {=0A=
tmp =3D array[last].value;=0A=
for(i =3D last; i > first; i--) {=0A=
array[i].value =3D array[i - 1].value;=0A=
}=0A=
array[first].value =3D tmp;=0A=
}=0A=
}=0A=
// Remove Element=0A=
else if (op =3D=3D "remove") {=0A=
for(i =3D pos; i < last; i++) {=0A=
array[i].value =3D array[i + 1].value;=0A=
}=0A=
array[last].value =3D "";=0A=
}=0A=
}=0A=
function move2FormElement(form, widget, relativepos, op, relfirst, id) {=0A=
var array =3D form.elements;=0A=
// Find position -1 because we locate the second field not the first one=0A=
var first =3D getFormElementPos(form,widget,id) + relfirst;=0A=
var last  =3D getFormElementLastPos(form, widget, false,id) + relfirst;=0A=
var pos   =3D first + relativepos;=0A=
// Move Up=0A=
if (op =3D=3D "up") {=0A=
if (pos > first) {=0A=
tmp1 =3D array[pos].value;=0A=
tmp2 =3D array[pos+1].value;=0A=
array[pos    ].value =3D array[pos - 2].value;=0A=
array[pos + 1].value =3D array[pos - 1].value;=0A=
array[pos - 2].value =3D tmp1;=0A=
array[pos - 1].value =3D tmp2;=0A=
} else {=0A=
tmp1 =3D array[first].value;=0A=
tmp2 =3D array[first+1].value;=0A=
for(i =3D first; i < last; i+=3D2) {=0A=
array[i  ].value =3D array[i + 2].value;=0A=
array[i+1].value =3D array[i + 3].value;=0A=
}=0A=
array[last].value =3D tmp1;=0A=
array[last+1].value =3D tmp2;=0A=
}=0A=
} =0A=
// Move Down=0A=
else if (op =3D=3D "down") {=0A=
if (pos < last) {=0A=
tmp1 =3D array[pos].value;=0A=
tmp2 =3D array[pos+1].value;=0A=
array[pos    ].value =3D array[pos + 2].value;=0A=
array[pos + 1].value =3D array[pos + 3].value;=0A=
array[pos + 2].value =3D tmp1;=0A=
array[pos + 3].value =3D tmp2;=0A=
} else {=0A=
tmp1 =3D array[last    ].value;=0A=
tmp2 =3D array[last + 1].value;=0A=
for(i =3D last; i > first; i-=3D2) {=0A=
array[i].value =3D array[i - 2].value;=0A=
array[i+1].value =3D array[i - 1].value;=0A=
}=0A=
array[first    ].value =3D tmp1;=0A=
array[first + 1].value =3D tmp2;=0A=
}=0A=
}=0A=
// Remove Element=0A=
else if (op =3D=3D "remove") {=0A=
for(i =3D pos; i < last; i+=3D2) {=0A=
array[i].value   =3D array[i + 2].value;=0A=
array[i+1].value =3D array[i + 3].value;=0A=
}=0A=
array[last].value =3D "";=0A=
array[last+1].value =3D "";=0A=
}=0A=
}=0A=
function move3FormElement(form, widget, relativepos, op, relfirst, id) {=0A=
var array =3D form.elements;=0A=
// Find position -1 because we locate the second field not the first one=0A=
var first =3D getFormElementPos(form,widget,id) + relfirst;=0A=
var last  =3D getFormElementLastPos(form, widget, false, id) + relfirst;=0A=
var pos   =3D first + relativepos;=0A=
// Move Up=0A=
if (op =3D=3D "up") {=0A=
if (pos > first) {=0A=
tmp1 =3D array[pos].value;=0A=
tmp2 =3D array[pos+1].value;=0A=
tmp3 =3D array[pos+2].value;=0A=
array[pos    ].value =3D array[pos - 3].value;=0A=
array[pos + 1].value =3D array[pos - 2].value;=0A=
array[pos + 2].value =3D array[pos - 1].value;=0A=
array[pos - 3].value =3D tmp1;=0A=
array[pos - 2].value =3D tmp2;=0A=
array[pos - 1].value =3D tmp3;=0A=
} else {=0A=
tmp1 =3D array[first].value;=0A=
tmp2 =3D array[first+1].value;=0A=
tmp3 =3D array[first+2].value;=0A=
for(i =3D first; i < last; i+=3D3) {=0A=
array[i  ].value =3D array[i + 3].value;=0A=
array[i+1].value =3D array[i + 4].value;=0A=
array[i+2].value =3D array[i + 5].value;=0A=
}=0A=
array[last].value =3D tmp1;=0A=
array[last+1].value =3D tmp2;=0A=
array[last+2].value =3D tmp3;=0A=
}=0A=
} =0A=
// Move Down=0A=
else if (op =3D=3D "down") {=0A=
if (pos < last) {=0A=
tmp1 =3D array[pos].value;=0A=
tmp2 =3D array[pos+1].value;=0A=
tmp3 =3D array[pos+2].value;=0A=
array[pos    ].value =3D array[pos + 3].value;=0A=
array[pos + 1].value =3D array[pos + 4].value;=0A=
array[pos + 2].value =3D array[pos + 5].value;=0A=
array[pos + 3].value =3D tmp1;=0A=
array[pos + 4].value =3D tmp2;=0A=
array[pos + 5].value =3D tmp3;=0A=
} else {=0A=
tmp1 =3D array[last    ].value;=0A=
tmp2 =3D array[last + 1].value;=0A=
tmp3 =3D array[last + 2].value;=0A=
for(i =3D last; i > first; i-=3D3) {=0A=
array[i].value =3D array[i - 3].value;=0A=
array[i+1].value =3D array[i - 2].value;=0A=
array[i+2].value =3D array[i - 1].value;=0A=
}=0A=
array[first    ].value =3D tmp1;=0A=
array[first + 1].value =3D tmp2;=0A=
array[first + 2].value =3D tmp3;=0A=
}=0A=
}=0A=
// Remove Element=0A=
else if (op =3D=3D "remove") {=0A=
for(i =3D pos; i < last; i+=3D3) {=0A=
array[i].value   =3D array[i + 3].value;=0A=
array[i+1].value =3D array[i + 4].value;=0A=
array[i+2].value =3D array[i + 5].value;=0A=
}=0A=
array[last].value =3D "";=0A=
array[last+1].value =3D "";=0A=
array[last+2].value =3D "";=0A=
}=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Form Element Access =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function getFormElementCount(form, name, id){=0A=
// Get all elements=0A=
var elms  =3D form.elements;=0A=
var count =3D 0;=0A=
// Count element=0A=
for (var i =3D 0 ; i < elms.length ; i++){=0A=
if (elms[i].name !=3D name)=0A=
continue;=0A=
if (!id){=0A=
count++;=0A=
continue;=0A=
}=0A=
if ((elms[i].id =3D=3D id) || (elms[i].id.indexOf(id) > -1)){ // very =
ugly=0A=
count++;=0A=
}=0A=
}=0A=
return count;=0A=
}=0A=
function getFormElementPos(form, name, id){=0A=
// Get all elements=0A=
var elms =3D form.elements;=0A=
// Find out the (first) current element=0A=
for (var i =3D 0 ; i < elms.length ; i++){=0A=
if (elms[i].name !=3D name)=0A=
continue;=0A=
if (!id)=0A=
return i;=0A=
if ((elms[i].id =3D=3D id) || (elms[i].id =3D=3D id+'0')){ // very ugly=0A=
return i;=0A=
}=0A=
}=0A=
return -1;=0A=
}=0A=
function getFormElementLastPos(form, name, first, id){=0A=
// Get all elements=0A=
var elms =3D form.elements;=0A=
// Find out the (last) current element=0A=
var last =3D -1;=0A=
for (var i =3D 0 ; i < elms.length ; i++){=0A=
if (elms[i].name !=3D name){=0A=
if (last > 0 && first)=0A=
break;=0A=
continue;=0A=
}=0A=
if (!id){=0A=
last =3D i;=0A=
continue;=0A=
}=0A=
if (elms[i].id.indexOf(id) > -1){=0A=
last =3D i;=0A=
continue;=0A=
}=0A=
if (last > 0 && first)=0A=
break;=0A=
}=0A=
return last;=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Button =0A=
// =
-------------------------------------------------------------------------=
----=0A=
function toggleSingleSubmitButton(evt, form, on){=0A=
// check "this" is a form, otherwise, use given form=0A=
if (this.elements) {=0A=
form =3D this;=0A=
}=0A=
// Enable/Disable all formButton=0A=
var elements =3D $(form.elements);=0A=
for (var i =3D 0 ; i < elements.length ; i++){=0A=
var elm =3D $(elements[i]);=0A=
if (!on){=0A=
if (!elm.hasClassName("formButton")) { continue; }=0A=
elm.addClassName("disabledButton");=0A=
elm.oldclick =3D elm.onclick;=0A=
elm.onclick  =3D function(event){ return false; }=0A=
} else {=0A=
if (!elm.hasClassName("disabledButton")) { continue;  }=0A=
elm.removeClassName("disabledButton");=0A=
elm.onclick  =3D elm.oldclick;=0A=
elm.oldclick =3D null;=0A=
}=0A=
}=0A=
// Register/Unregister myself=0A=
if (!on){=0A=
form.oldsubmit =3D form.onsubmit;=0A=
form.onsubmit  =3D  function(event){ return false; }=0A=
window.onbeforeunload =3D null;	  // disable the warning msg put in =
doEditPubFooter.jsp=0A=
}=0A=
else{=0A=
form.onsubmit  =3D  form.oldsubmit;=0A=
form.oldsubmit =3D null;=0A=
}=0A=
}=0A=
function setupSingleSubmitButton(off){=0A=
// Register function=0A=
try{=0A=
var forms =3D document.forms;=0A=
for (var i =3D 0 ; i < forms.length ; i++){=0A=
var form =3D $(forms[i]);=0A=
if (form.hasClassName("noSingleSubmitButton"))=0A=
continue;=0A=
if (off){=0A=
toggleSingleSubmitButton(null, forms[i], true);=0A=
continue;=0A=
}=0A=
var onsubmit =3D form.onsubmit;=0A=
if (typeof onsubmit =3D=3D 'function') {=0A=
form.onsubmit =3D function(evt){=0A=
toggleSingleSubmitButton(evt, this);=0A=
return onsubmit(evt, this);=0A=
};=0A=
}=0A=
else{=0A=
form.onsubmit =3D toggleSingleSubmitButton;=0A=
}=0A=
}=0A=
} catch(ex){ alert(ex); }=0A=
}=0A=
function restrictToNumerics(input) {=0A=
var re =3D new RegExp("[^0-9]");=0A=
var value =3D input.value;=0A=
var cleaned =3D value.replace(re, "");=0A=
input.value =3D cleaned;=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// Form =0A=
// =
-------------------------------------------------------------------------=
----=0A=
/**=0A=
* form should be like: window.document.editForm=0A=
*/ =0A=
function simpleSubmitForm(window, fullform, action, warn, anchorValue, =
actionValue) {=0A=
if(fullform.pageLoaded && fullform.pageLoaded.value=3D=3D'false') {=0A=
alert(warn);=0A=
return;=0A=
}=0A=
for (var i =3D 0; i < fullform.elements.length; i++) {=0A=
if (fullform.elements[i].jcmsSubmitCallBack !=3D null) {=0A=
fullform.elements[i].jcmsSubmitCallBack(window, fullform, action, warn, =
anchorValue);=0A=
}=0A=
}=0A=
if (anchorValue){=0A=
fullform.anchor.value =3D anchorValue;=0A=
}=0A=
if (action && fullform.action){=0A=
fullform.action.name  =3D action;=0A=
if (actionValue)=0A=
fullform.action.value =3D actionValue;=0A=
}=0A=
if (fullform.onsubmit)=0A=
fullform.onsubmit();=0A=
fullform.submit();=0A=
}=0A=
function confirmSubmitForm(window, fullform, action, msg, warn, =
anchorValue, actionValue) {=0A=
if (top.confirm(msg)) {=0A=
simpleSubmitForm(window, fullform, action, warn, anchorValue, =
actionValue);=0A=
}=0A=
}=0A=
function getFormName(document, form){=0A=
if (document.all){=0A=
if (form.attributes){=0A=
if (form.attributes.getNamedItem){=0A=
return form.attributes.getNamedItem("NAME").value;=0A=
}=0A=
else{=0A=
if (form.attributes["name"])=0A=
return form.attributes["name"];=0A=
else if (form.attributes["NAME"])=0A=
return form.attributes["NAME"];=0A=
else=0A=
return 'editForm';=0A=
}=0A=
}=0A=
else{=0A=
return 'editForm';=0A=
}=0A=
}=0A=
else{=0A=
return form.getAttribute("NAME");=0A=
}=0A=
}=0A=
// =
-------------------------------------------------------------------------=
----=0A=
// EditPubFooter: DEPRECATED Should be removed or replaced=0A=
// =
-------------------------------------------------------------------------=
----=0A=
function submitForm(action, anchor, actionvalue) {  =0A=
simpleSubmitForm(window, window.document.editForm, =
action,'Error',anchor, actionvalue);=0A=
}=0A=
function confirmSubmit(msg, action, anchor, actionvalue) {=0A=
confirmSubmitForm(window, window.document.editForm, action, msg, anchor, =
actionvalue)=0A=
}=0A=
function submitAction(action, value) {=0A=
simpleSubmitForm(window, window.document.editForm, action,'Error',null, =
value);=0A=
}=0A=
/* This function are no longer used in JCMS 5.5=0A=
function removeField(element, anchor) {=0A=
element.value =3D "__remove__";=0A=
submitForm("opRefresh", anchor);=0A=
}=0A=
function removeSelectedIndex(element, anchor) {=0A=
element.options[element.selectedIndex].value =3D "__remove__";=0A=
submitForm("opRefresh", anchor);=0A=
}=0A=
function clearSelectedIndex(element) {=0A=
element.selectedIndex=3D0;=0A=
}=0A=
function validateListItem(action, list, pos) {=0A=
window.document.editForm.opItem.name =3D action;=0A=
window.document.editForm.opItem.value =3D list;=0A=
window.document.editForm.itemPos.value =3D pos;=0A=
submitForm("opRefresh", list);=0A=
}=0A=
*/=0A=
/* js/treecat.js */=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
//  AJAX TREE PACKAGE=0A=
//=0A=
//  TODO: Try to use JcmsJsonRequest=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
Ajax.Tree =3D {=0A=
enableDragNDrop: true, =0A=
dragdropArray: $A(new Array()),=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
//  AJAX Function=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
_downloadChildrenHooks: $H(),=0A=
/**=0A=
* Allow other javascript code to register a custom callback=0A=
* when a new tree branch is retrieved in ajax.=0A=
*/=0A=
registerDownloadChildrenHook: function(ajaxSuffix, customCallback) {=0A=
var callbacks =3D Ajax.Tree._downloadChildrenHooks.get(ajaxSuffix);=0A=
if (!callbacks) {=0A=
callbacks =3D $A();=0A=
Ajax.Tree._downloadChildrenHooks.set(ajaxSuffix,callbacks);=0A=
}=0A=
callbacks.push(customCallback);=0A=
},=0A=
invokeDownloadChildrenHook: function(ajaxSuffix, ul) {=0A=
var callbacks =3D Ajax.Tree._downloadChildrenHooks.get(ajaxSuffix);=0A=
if (!callbacks) { return; }=0A=
callbacks.each(function(item) {=0A=
item(ul);=0A=
});=0A=
},=0A=
/**=0A=
* Get HTML of children =0A=
* - for the ID in the img.classname (ID_j_42)=0A=
* - for the full tree with given checkedArray=0A=
* =0A=
* Update UL innerHTML with this new content.=0A=
* Remove Image click function to toggleVisibility instead of calling a =
new Ajax call.=0A=
* =0A=
* @param img the clicked image=0A=
* @param ajaxSuffix String that represents the main UL id=0A=
* @param ul the root branch to fill=0A=
* @param checkedArray a Array of checked category ids=0A=
*/=0A=
downloadChildren: function(img, ajaxSuffix, ul, checkedArray, =
openedArray, customCallback) {=0A=
JcmsLogger.debug('TreeCat','downloadChildren():', ajaxSuffix, img, =
checkedArray, openedArray);=0A=
// Init Json Request=0A=
var jsonRequest =3D new JcmsJsonRequest(img); =0A=
// Init RPC with jsonRequest=0A=
var funcRPC =3D function(){=0A=
if (img){=0A=
Ajax.Tree._getRpcTree(ajaxSuffix).getChildren(jsonRequest.asyncJsonCallBa=
ck.bind(jsonRequest), $(img).getJcmsId());=0A=
} else {=0A=
Ajax.Tree._getRpcTree(ajaxSuffix).getChildren(jsonRequest.asyncJsonCallBa=
ck.bind(jsonRequest),checkedArray,openedArray);=0A=
}=0A=
}=0A=
// Init Callback with jsonRequest=0A=
var funcCallback =3D function(returnValue){=0A=
if (!returnValue){=0A=
ul.parentNode.removeChild(ul);=0A=
return;=0A=
}=0A=
// Clean=0A=
Ajax.Tree._disposeUL(ul);=0A=
Util.cleanDOMElements(ul,true);=0A=
ul.innerHTML =3D returnValue;=0A=
// Update DragDrop=0A=
if($(ajaxSuffix).hasClassName('dragdrop') && Ajax.Tree.enableDragNDrop){=0A=
setTimeout(function(){ Ajax.Tree._initDragDrop(ul); },10);=0A=
}=0A=
// Call custom callback=0A=
if (customCallback){=0A=
customCallback();=0A=
}=0A=
Ajax.Tree.invokeDownloadChildrenHook(ajaxSuffix, ul);=0A=
}=0A=
// Init custom exception handle=0A=
var funcException =3D function(){=0A=
ul.parentNode.removeChild(ul);=0A=
Ajax.Tree.toggleOpenClose(img);=0A=
}=0A=
// Run JSON Request=0A=
jsonRequest.rpc       =3D funcRPC;=0A=
jsonRequest.callback  =3D funcCallback;=0A=
jsonRequest.exception =3D funcException;=0A=
jsonRequest.asyncJsonCall();=0A=
},  =0A=
/**=0A=
* Rename the given category using ajax call=0A=
* Refresh the full category tree in ajax=0A=
* =0A=
* @param ajaxSuffix String that represents the main UL id=0A=
* @param catId The JCMS Category id=0A=
* @param value The new category name in current language=0A=
*/=0A=
rename: function(ajaxSuffix, catId, value){=0A=
JcmsLogger.debug('TreeCat','rename():', ajaxSuffix, catId, value);=0A=
// Init Json Request=0A=
var jsonRequest =3D new JcmsJsonRequest(); =0A=
// Init RPC with jsonRequest callback=0A=
var funcRPC =3D function(){=0A=
Ajax.Tree._getRpcTree(ajaxSuffix).rename(function(msg){ =
Ajax.Tree._handleRPCResponse(jsonRequest, msg, ajaxSuffix); }, catId, =
value);=0A=
};=0A=
// Run JSON Request=0A=
jsonRequest.rpc      =3D funcRPC;=0A=
jsonRequest.callback =3D Ajax.Tree._callbackRefresh;=0A=
jsonRequest.asyncJsonCall();=0A=
},=0A=
/**=0A=
* Add a new category using ajax call=0A=
* Refresh the full category tree in ajax=0A=
* =0A=
* @param ajaxSuffix String that represents the main UL id=0A=
* @param catId The JCMS Category id=0A=
* @param value The category name to add in current language=0A=
*/=0A=
addSubCat: function(ajaxSuffix, catId, value){=0A=
JcmsLogger.debug('TreeCat','addSubCat():', ajaxSuffix, catId, value);=0A=
// Init Json Request=0A=
var jsonRequest =3D new JcmsJsonRequest(); =0A=
// Init RPC with jsonRequest callback=0A=
var funcRPC =3D function(){=0A=
Ajax.Tree._getRpcTree(ajaxSuffix).addSubCat(function(msg){ =
Ajax.Tree._handleRPCResponse(jsonRequest, msg, ajaxSuffix); },catId, =
value);=0A=
};=0A=
// Run JSON Request=0A=
jsonRequest.rpc        =3D funcRPC;=0A=
jsonRequest.callback   =3D function(returnValue, returnEffect){ =
Ajax.Tree._callbackRefresh(returnValue, returnEffect, catId); };=0A=
jsonRequest.asyncJsonCall();=0A=
},=0A=
/**=0A=
* Add a sibling category using ajax call=0A=
* Refresh the full category tree in ajax=0A=
* =0A=
* @param ajaxSuffix String that represents the main UL id=0A=
* @param catId The JCMS Category id=0A=
* @param value The category name to add in current language=0A=
*/=0A=
addSiblingCat: function(ajaxSuffix, catId, value){=0A=
JcmsLogger.debug('TreeCat','addSiblingCat():', ajaxSuffix, catId, value);=0A=
// Init Json Request=0A=
var jsonRequest =3D new JcmsJsonRequest(); =0A=
// Init RPC with jsonRequest callback=0A=
var funcRPC =3D function(){=0A=
Ajax.Tree._getRpcTree(ajaxSuffix).addSiblingCat(function(msg){ =
Ajax.Tree._handleRPCResponse(jsonRequest, msg, ajaxSuffix); },catId, =
value);=0A=
};=0A=
// Run JSON Request=0A=
jsonRequest.rpc        =3D funcRPC;=0A=
jsonRequest.callback   =3D function(returnValue, returnEffect){ =
Ajax.Tree._callbackRefresh(returnValue, returnEffect); };=0A=
jsonRequest.asyncJsonCall();=0A=
},=0A=
/**=0A=
* Remove a category using ajax call=0A=
* Refresh the full category tree in ajax=0A=
* =0A=
* @param ajaxSuffix String that represents the main UL id=0A=
* @param catId The JCMS Category id=0A=
*/=0A=
remove: function(ajaxSuffix, catId){=0A=
JcmsLogger.debug('TreeCat','remove():', ajaxSuffix, catId);=0A=
// Init Json Request=0A=
var jsonRequest =3D new JcmsJsonRequest(); =0A=
// Init RPC with jsonRequest callback=0A=
var funcRPC =3D function(){=0A=
Ajax.Tree._getRpcTree(ajaxSuffix).remove(function(msg){ =
Ajax.Tree._handleRPCResponse(jsonRequest, msg, ajaxSuffix); },catId);=0A=
};=0A=
// Run JSON Request=0A=
jsonRequest.rpc        =3D funcRPC;=0A=
jsonRequest.callback   =3D Ajax.Tree._callbackRefresh;=0A=
jsonRequest.asyncJsonCall();=0A=
},=0A=
/**=0A=
* Update the parent of a givent category=0A=
* Refresh the full category tree in ajax=0A=
* =0A=
* @param ajaxSuffix String that represents the main UL id=0A=
* @param catId The JCMS Category id=0A=
*/=0A=
setParent: function(ajaxSuffix, catId, parentId){=0A=
JcmsLogger.debug('TreeCat','setParent():', ajaxSuffix, catId, parentId);=0A=
// Init Json Request=0A=
var jsonRequest =3D new JcmsJsonRequest(); =0A=
// Init RPC with jsonRequest callback=0A=
var funcRPC =3D function(){=0A=
Ajax.Tree._getRpcTree(ajaxSuffix).setParent(function(msg){ =
Ajax.Tree._handleRPCResponse(jsonRequest, msg, ajaxSuffix); },catId, =
parentId);=0A=
};=0A=
// Run JSON Request=0A=
jsonRequest.rpc        =3D funcRPC;=0A=
jsonRequest.callback   =3D function(returnValue, returnEffect){ =
Ajax.Tree._callbackRefresh(returnValue, returnEffect, parentId); };=0A=
jsonRequest.asyncJsonCall();=0A=
},=0A=
/**=0A=
* Refresh an Ajax TreeCat=0A=
* 1. Parse tree to record checked nodes.=0A=
* 2. Remove all children of main branch.=0A=
* 3. Retrieve a new Tree using Ajax.Tree.downloadChildren=0A=
* 4. Update main branch=0A=
* =0A=
* If UL.TreeCat have className 'follow' then the tree will open (not =
select)=0A=
* the given branch ids then follow the Ahref link.=0A=
* =0A=
* @param ajaxSuffix String that represents the main UL id=0A=
* @param ids an array of ids to add to checked/open elements=0A=
*        or a single id (that will follow url after refresh)=0A=
*/=0A=
refresh: function(ajaxSuffix, ids, checked){=0A=
JcmsLogger.debug('TreeCat','refresh():',ajaxSuffix,ids);=0A=
Ajax.setWaitState(true);=0A=
var ul =3D $(ajaxSuffix);=0A=
// Search checked categories=0A=
var openedArray  =3D new Array();=0A=
var checkedArray =3D new Array();=0A=
$A(ul.getElementsByTagName('INPUT')).each(function(elm, idx){=0A=
if (elm.checked){=0A=
checkedArray.push(elm.value);=0A=
}=0A=
});=0A=
// Search opened nodes=0A=
$A(ul.getElementsBySelector('LI.open')).each(function(elm, idx){=0A=
var node =3D elm.down();=0A=
if (node){=0A=
var nodeCatId =3D $(node).getJcmsId();=0A=
openedArray.push(nodeCatId);=0A=
JcmsLogger.debug('TreeCat', 'Opened:', nodeCatId);=0A=
}=0A=
});=0A=
// Add given additional checked ids=0A=
if (ids){=0A=
openedArray =3D openedArray.concat(ids);=0A=
if (checked && !ul.hasClassName('follow')){=0A=
checkedArray =3D checkedArray.concat(ids);=0A=
}=0A=
}=0A=
// Removing all children=0A=
Ajax.Tree._disposeUL(ul);=0A=
Util.cleanDOMElements(ul,true);=0A=
// Append message=0A=
ul.innerHTML =3D "<li><img src=3D's.gif' class=3D'loading'/> =
Loading...</li>";=0A=
// Prepare custom callback follow=0A=
var customCallback =3D null;=0A=
if (ul.hasClassName('follow') && ids && !(ids instanceof Array)){=0A=
customCallback =3D function(){  =
Ajax.Tree._followRefreshCallback(ajaxSuffix, ids); }=0A=
}=0A=
// Dowload children  =0A=
Ajax.Tree.downloadChildren(null, ajaxSuffix, ul, checkedArray, =
openedArray, customCallback);=0A=
},=0A=
/**=0A=
* Called by refresh() for Treecat with class 'follow'=0A=
* @param ajaxSuffix String that represents the main UL id=0A=
* @param ids the id to work with to find URL to follow=0A=
*/=0A=
_followRefreshCallback: function(ajaxSuffix, ids){=0A=
var elms =3D $(ajaxSuffix).select('IMG.ID_'+ids);=0A=
if (!elms || !elms[0]){=0A=
JcmsLogger.warn('TreeCat','Id not found',ids);=0A=
return;=0A=
}=0A=
var img =3D elms[0];=0A=
var ahref =3D img.next('A');=0A=
if (ahref){=0A=
document.location =3D ahref.href;=0A=
}=0A=
},=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
//  Utility Function=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
/**=0A=
* Makes AJAX call to import all the children =0A=
* for the given img LI and given AJAX suffix.=0A=
* =0A=
* @param img the clicked image=0A=
*/=0A=
_importChildren: function(img) {=0A=
var li =3D $(img.parentNode);=0A=
if (li.hasClassName('imported')) {=0A=
return;=0A=
}=0A=
Ajax.setWaitState(true,img);=0A=
// Set wait icon=0A=
var ul =3D document.createElement('UL');=0A=
ul.innerHTML =3D "<li><img src=3D's.gif' class=3D'loading'/> =
Loading...</li>";=0A=
li.appendChild(ul);=0A=
// Mark this branch as imported=0A=
li.addClassName('imported');=0A=
// Asynchronous call=0A=
var ajaxSuffix =3D $(img).fastUp('UL', 'TreeCat').id;=0A=
Ajax.Tree.downloadChildren(img, ajaxSuffix, ul);=0A=
},=0A=
/**=0A=
* Toggles className 'open' and 'close' on parent LI of image.=0A=
* =0A=
* @param img the clicked image=0A=
*/=0A=
toggleOpenClose: function(img) {=0A=
var li =3D $(img.parentNode);=0A=
li.toggleClassName('close');=0A=
li.toggleClassName('open');=0A=
Ajax.Tree._importChildren(img);=0A=
},=0A=
/**=0A=
* Returns the ajaxSuffix of the parent UL of =0A=
* the given element.=0A=
* =0A=
* @param the children element=0A=
*/=0A=
getAjaxSuffix: function(elm){=0A=
if (!elm){=0A=
return;=0A=
}=0A=
var elm =3D $(elm);=0A=
// Hook for an element handle click as a proxy=0A=
if (elm.id && elm.id.indexOf('proxy') >=3D 0){=0A=
return elm.id.substring(6);=0A=
}=0A=
var ul =3D elm.fastUp('UL', 'TreeCat');=0A=
if (!ul){=0A=
return;=0A=
}=0A=
JcmsLogger.debug('TreeCat','getAjaxSuffix():', ul.id);=0A=
return ul.id;=0A=
},=0A=
/**=0A=
* Returns the category id for the given element=0A=
* =0A=
* @param elm the element to work with=0A=
*/=0A=
getCategoryId: function(elm){=0A=
if (!elm){=0A=
return;=0A=
}=0A=
if (elm.tagName =3D=3D 'LI'){=0A=
return Ajax.Tree.getCategoryId(elm.down(0));=0A=
}=0A=
else if (elm.tagName =3D=3D 'IMG'){=0A=
return $(elm).getJcmsId();=0A=
}=0A=
else{=0A=
return Ajax.Tree.getCategoryId(elm.up('UL.TreeCat LI'));=0A=
}=0A=
},=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
//  Internal Function=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
/**=0A=
* Returns the correct JSON-RPC AjaxTree from given ajaxSuffix=0A=
* =0A=
* @param ajaxSuffix the ajaxSuffix or null=0A=
*/=0A=
_getRpcTree: function(ajaxSuffix){=0A=
if (!ajaxSuffix){=0A=
return JcmsJsContext.getJsonRPC().AjaxTree;=0A=
}=0A=
else {=0A=
return JcmsJsContext.getJsonRPC()['AjaxTree'+ajaxSuffix];=0A=
}=0A=
},=0A=
/**=0A=
* Convenient callback function called to refresh =0A=
* treecat after json-rpc call=0A=
* =0A=
* @param ajaxSuffix the ajaxsuffix used to refresh tree=0A=
* @param returnEffect the Effect (not used)=0A=
*/=0A=
_callbackRefresh: function(ajaxSuffix, returnEffect, openId){ =0A=
JcmsLogger.debug('TreeCat','Callback =
Refresh',ajaxSuffix,returnEffect,openId);=0A=
if (ajaxSuffix){=0A=
if (openId){=0A=
var ids =3D new Array();=0A=
ids.push(openId);=0A=
Ajax.Tree.refresh(ajaxSuffix, ids);=0A=
}=0A=
else {=0A=
Ajax.Tree.refresh(ajaxSuffix);=0A=
}=0A=
}=0A=
},=0A=
/**=0A=
* Convenient function used to handle RPC reponse.=0A=
* If RPC returns a message then call alert and finish JsonRequest job=0A=
* else finish JsonRequest Job with the given return value.=0A=
* =0A=
* @param msg the error message=0A=
* @param returnValue the value to return if there is no errors=0A=
*/=0A=
_handleRPCResponse: function(jsonRequest, msg, returnValue){=0A=
if (msg){=0A=
alert(msg);=0A=
jsonRequest.asyncJsonCallBack();=0A=
return;=0A=
}=0A=
jsonRequest.asyncJsonCallBack(returnValue);=0A=
},=0A=
/**=0A=
* Init Sortable on TreeCat=0A=
*/=0A=
_initTreeCat: function(){=0A=
JcmsLogger.info('TreeCat','Init TreeCat');=0A=
if (!Ajax.Tree.enableDragNDrop){=0A=
return;=0A=
}=0A=
$$('UL.TreeCat').each(function(elm, idx){  =0A=
if (elm.hasClassName('dragdrop')){=0A=
Ajax.Tree._initDragDrop(elm);=0A=
}=0A=
});=0A=
},=0A=
/**=0A=
* Clean the cached dragdropArray=0A=
*/=0A=
dispose: function(){=0A=
// Because underlaying function only dispose DrangNDrop=0A=
if (!Ajax.Tree.enableDragNDrop){=0A=
return;=0A=
}=0A=
$$('UL.TreeCat').each(function(elm, idx){ =0A=
Ajax.Tree._disposeUL(elm);=0A=
});=0A=
Ajax.Tree.dragdropArray.clear();=0A=
},=0A=
/**=0A=
* Clean LI items=0A=
* =0A=
* @param li the li to clean=0A=
*/=0A=
_disposeLI: function(li){=0A=
// Remove previous draggable=0A=
if (li.draggable){=0A=
li.draggable.destroy();=0A=
li.draggable =3D null;=0A=
}=0A=
// Remove previous droppable=0A=
Droppables.remove(li);=0A=
},=0A=
/**=0A=
* Remove all drag/drop object bind to LIs under given UL=0A=
* =0A=
* @param ul the ul element to work with=0A=
*/=0A=
_disposeUL: function(ul){=0A=
var ul =3D $(ul);=0A=
// Remove LI Drag/Drop=0A=
$A(ul.getElementsByTagName('LI')).each(function(li,idx){=0A=
Ajax.Tree._disposeLI(li);=0A=
Ajax.Tree.dragdropArray.splice(idx,1);=0A=
});=0A=
// Remove onclick events=0A=
$A(ul.getElementsByTagName('A')).each(function(ahref,idx){=0A=
ahref.onclick =3D null;=0A=
});=0A=
},=0A=
/**=0A=
* Inits all drag/drop object bind to LIs under given UL=0A=
* =0A=
* @param ul the ul element to work with=0A=
*/=0A=
_initDragDrop: function(ul){=0A=
var ul =3D $(ul);=0A=
$A(ul.getElementsByTagName('LI')).each(function(li,idx){=0A=
var li =3D $(li);=0A=
var anchor =3D li.down('IMG.visual');=0A=
Event.observe(anchor,'mousedown',Ajax.Tree._lazyDrag);=0A=
// Init Droppable=0A=
Droppables.remove(li);=0A=
Droppables.add(li,{greedy:false, onHover:Ajax.Tree._onHover, =
onDrop:Ajax.Tree._onDrop});=0A=
// Cache LI's for clean purpose=0A=
Ajax.Tree.dragdropArray.push(li);=0A=
});=0A=
},=0A=
/**=0A=
* Used by _initDragDrop() to lazy initialise draggable onmousedown=0A=
* @param event the mousedown event=0A=
*/=0A=
_lazyDrag: function(event){=0A=
var anchor =3D Event.element(event);=0A=
JcmsLogger.debug('TreeCat','_lazyDrag',anchor);=0A=
// Destroy previous Draggable=0A=
var li =3D anchor.fastUp('LI');=0A=
if (li.draggable){=0A=
li.draggable.destroy();=0A=
}=0A=
// Init new Draggable=0A=
li.draggable =3D new Draggable(li,{revert: true, handle:'visual'});=0A=
// Remove observer=0A=
Event.stopObserving(anchor,'mousedown',Ajax.Tree._lazyDrag);=0A=
// Kick start dnd=0A=
li.draggable.initDrag(event);=0A=
Draggables.updateDrag(event);=0A=
},=0A=
/**=0A=
* Convenient internal function to stop Drag/Drop events=0A=
* =0A=
* @param event the event=0A=
*/=0A=
_stopEvent: function(event){=0A=
Event.stop(event);=0A=
},=0A=
/**=0A=
* Internal function called by _initDragDrop()=0A=
* =0A=
* @param dragElm the object that encapsulate the real element=0A=
*/=0A=
_onChange: function(dragElm){=0A=
// Skip quickly=0A=
if (!dragElm.element.dragObserver){=0A=
JcmsLogger.debug('TreeCat','Start dragObserver');=0A=
Event.observe(dragElm.element, 'click', Ajax.Tree._stopEvent);=0A=
dragElm.element.dragObserver =3D true;=0A=
}=0A=
},=0A=
/**=0A=
* Internal function called by _initDragDrop()=0A=
* =0A=
* @param dragElm Dragged element=0A=
* @param dropElm Dropped element=0A=
* @param overlap Percetage of overlaping=0A=
*/=0A=
_onHover: function(dragElm, dropElm, overlap){=0A=
// Skip quickly=0A=
if (dropElm.className.indexOf('droppable') >=3D 0){=0A=
return;=0A=
}=0A=
// Remove previous droppable if item changes=0A=
if (dragElm.oldDropElm && dragElm.oldDropElm !=3D dropElm){=0A=
dragElm.oldDropElm.removeClassName('droppable');=0A=
}=0A=
// Do not highlight it's own parent=0A=
// if (dragElm.up('LI') =3D=3D dropElm){=0A=
//   return;=0A=
// }=0A=
// Add class name=0A=
dropElm.addClassName('droppable');=0A=
dragElm.oldDropElm =3D dropElm;=0A=
},=0A=
/**=0A=
* Internal function called by _initDragDrop()=0A=
* =0A=
* @param dragElm Dragged element=0A=
* @param dropElm Dropped element=0A=
* @param event the Drag/Drop event=0A=
*/=0A=
_onDrop: function(dragElm, dropElm, event){=0A=
// Stop event handler=0A=
// JcmsLogger.debug('TreeCat','Stop dragObserver');=0A=
// Event.stopObserving(dragElm, 'click', Ajax.Tree._stopEvent);=0A=
// Remove previous droppable if item changes=0A=
if (dragElm.oldDropElm){=0A=
dragElm.oldDropElm.removeClassName('droppable');=0A=
}=0A=
// Do not work on parent element=0A=
if (dragElm.fastUp('LI') =3D=3D=3D dropElm){=0A=
return;=0A=
}=0A=
// Ask question=0A=
var dnd =3D top.confirm(I18N.glp('msg.confirm.dragdrop'));=0A=
// Make AJAX Call=0A=
if (dnd){=0A=
dragElm.hide();  // Hide element=0A=
Ajax.Tree.setParent(Ajax.Tree.getAjaxSuffix(dragElm), =0A=
Ajax.Tree.getCategoryId(dragElm), =0A=
Ajax.Tree.getCategoryId(dropElm));=0A=
}=0A=
}=0A=
}=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
//  EVENT OBSERVER=0A=
// =
-------------------------------------------------------------------------=
-----------=0A=
Event.observe(window, 'load'  , function() { Ajax.Tree._initTreeCat();} =
);=0A=
if (navigator.appVersion.match(/\bMSIE\b/)){=0A=
Event.observe(window, 'unload', function() { Ajax.Tree.dispose(); }, =
false);=0A=
}=0A=
/* js/jalios/widget/autocomplete.js */=0A=
// =
-------------------------------------------------------------------------=
----=0A=
//  INITIALISATION=0A=
// =
-------------------------------------------------------------------------=
----=0A=
Event.observe(window, 'load' , function() { =
Ajax.Autochooser.initChoosers(); });=0A=
// =
-------------------------------------------------------------------------=
----=0A=
//  AUTOCHOOSER=0A=
// =
-------------------------------------------------------------------------=
----=0A=
Ajax.Autochooser =3D {=0A=
/**=0A=
* Inits language specifics AutoChooser properties=0A=
*/=0A=
initLanguage: function(){=0A=
if (I18N.lang =3D=3D 'en'){=0A=
I18N['info.msg.autocomplete']      =3D 'Enter searched text';=0A=
I18N['info.msg.autocomplete.done'] =3D 'Category selected !';=0A=
}=0A=
else if (I18N.lang =3D=3D 'fr'){=0A=
I18N['info.msg.autocomplete']      =3D 'Entrer le texte =C3=A0 =
rechercher';=0A=
I18N['info.msg.autocomplete.done'] =3D 'Cat=C3=A9gorie =
s=C3=A9lectionn=C3=A9e';=0A=
}=0A=
},=0A=
/**=0A=
* Inits (lazy) all elements matching DIV.DataChooser =
INPUT.formChooserLabelfield.=0A=
* Inits all TreeCats.=0A=
* =0A=
* @see Ajax.Autochooser._initElement=0A=
*/=0A=
initChoosers: function(){=0A=
JcmsLogger.info("Autochooser","Init Autochooser Manager");=0A=
Ajax.Autochooser.initLanguage(); =0A=
// Create div to populate=0A=
Ajax.Autochooser.autoCompleteDiv =3D $(document.createElement('DIV'));=0A=
Ajax.Autochooser.autoCompleteDiv.addClassName('autocomplete');=0A=
document.body.appendChild(Ajax.Autochooser.autoCompleteDiv);=0A=
$$('DIV.DataChooser INPUT.formChooserLabelfield').each(function(elm,idx){=0A=
Ajax.Autochooser._initElement(elm);=0A=
});=0A=
// TreeCat=0A=
Ajax.Autochooser._initTreecat();=0A=
},=0A=
// --------------------------------------------------=0A=
//  INIT FUNCTIONS=0A=
// --------------------------------------------------=0A=
/**=0A=
* Lazy initialisation of Aucompleter. =0A=
* Called only on click on the input=0A=
* =0A=
* @param elm the clicked input=0A=
*/=0A=
_initChoosersLazy: function(elm){=0A=
JcmsLogger.info("Autochooser","Init Autochooser Lazy");=0A=
// Retrieve the enclosing div type=0A=
var field =3D elm.up('DIV.DataChooser');=0A=
if (!field){=0A=
return;=0A=
}=0A=
// Retrieve Chooser type=0A=
var type =3D field.className.match(/UI_EDITOR_\S+/);=0A=
if (!type){=0A=
return;=0A=
}=0A=
// Init the right autocompleter=0A=
if ('UI_EDITOR_PUBLICATIONCHOOSER' =3D=3D type){=0A=
Ajax.Autochooser._initPublications(elm, field);=0A=
} else if ('UI_EDITOR_CATEGORYCHOOSER' =3D=3D type){=0A=
Ajax.Autochooser._initCategories(elm, field);=0A=
} else if ('UI_EDITOR_CATEGORIESCHOOSER' =3D=3D type){=0A=
Ajax.Autochooser._initCategories(elm, field);=0A=
} else if ('UI_EDITOR_GROUPCHOOSER' =3D=3D type){=0A=
Ajax.Autochooser._initGroups(elm, field);=0A=
} else if ('UI_EDITOR_MEMBERCHOOSER' =3D=3D type){=0A=
Ajax.Autochooser._initMembers(elm, field);=0A=
} else if ('UI_EDITOR_WORKSPACECHOOSER' =3D=3D type){=0A=
Ajax.Autochooser._initWorkspace(elm, field);=0A=
}=0A=
},=0A=
/**=0A=
* Init the Chooser InputFormLabel=0A=
* - Set input enabled=0A=
* - Add class name 'autocomplete'=0A=
* - Bind onClick a lazy autocompleter initialisation=0A=
* =0A=
* @see Ajax.Autochooser._initChoosersLazy=0A=
* @param input The element to initialise=0A=
*/=0A=
_initElement: function(input){=0A=
input =3D $(input);=0A=
if (input.hasClassName("disabled")) {=0A=
return;=0A=
}=0A=
input.disabled =3D '';=0A=
input.addClassName('autocomplete');=0A=
var observer =3D function() { =0A=
Event.stopObserving(input, 'focus'     , observer);=0A=
Ajax.Autochooser._initChoosersLazy(input); =0A=
};=0A=
Event.observe(input, 'focus'     , observer);=0A=
},=0A=
/**=0A=
* Init all publication choosers=0A=
*/=0A=
_initPublications: function(input, field){=0A=
var type =3D Ajax.Autochooser._getChooserContentType(field);=0A=
// Debug=0A=
if (JcmsLogger.isDebug && JcmsLogger.Autochooser){=0A=
var inputName =3D input.next('INPUT.formChooserfield').name;=0A=
JcmsLogger.debug("Autochooser",inputName+" Type:",type);=0A=
}=0A=
Ajax.Autochooser._newAutocompleter(input,"jcore/autocomplete/acpublicatio=
n.jsp?type=3D"+type);=0A=
},=0A=
/**=0A=
* Init all member choosers=0A=
*/=0A=
_initMembers: function(input, field){=0A=
// Retrieve the enclosing div groups=0A=
var gids =3D Ajax.Autochooser._getChooserGroups(field); =0A=
// Debug=0A=
if (JcmsLogger.isDebug && JcmsLogger.Autochooser){=0A=
var inputName =3D input.next('INPUT.formChooserfield').name;=0A=
JcmsLogger.debug("Autochooser",inputName+" Groups:",gids);=0A=
}=0A=
Ajax.Autochooser._newAutocompleter(input,"jcore/autocomplete/acmember.jsp=
?"+gids);=0A=
},=0A=
/**=0A=
* Init all groups choosers=0A=
*/=0A=
_initGroups: function(input, field){=0A=
// Retrieve the enclosing div groups=0A=
var gids =3D Ajax.Autochooser._getChooserGroups(field); =0A=
// Debug=0A=
if (JcmsLogger.isDebug && JcmsLogger.Autochooser){=0A=
var inputName =3D input.next('INPUT.formChooserfield').name;=0A=
JcmsLogger.debug("Autochooser",inputName+" Groups:",gids);=0A=
}=0A=
Ajax.Autochooser._newAutocompleter(input,"jcore/autocomplete/acgroup.jsp?=
"+gids);=0A=
},=0A=
/**=0A=
* Init all category choosers=0A=
*/=0A=
_initCategories: function(input, field){=0A=
Ajax.Autochooser._newAutocompleter(input,"jcore/autocomplete/accategory.j=
sp");=0A=
},=0A=
/**=0A=
* Init all workspace choosers=0A=
*/=0A=
_initWorkspace: function(input, field){=0A=
Ajax.Autochooser._newAutocompleter(input,"jcore/autocomplete/acworkspace.=
jsp");=0A=
},=0A=
/**=0A=
* Instanciate a new Scriptaculous AJAX Autocompleter=0A=
*/=0A=
_newAutocompleter: function(input, url){=0A=
new Ajax.Autocompleter(input,Ajax.Autochooser.autoCompleteDiv, url, =
{paramName: 'autocomplete', minChars: 2, afterUpdateElement: =
Ajax.Autochooser._populate });=0A=
},=0A=
/**=0A=
* Init all treecat=0A=
*/=0A=
_initTreecat: function(){=0A=
$$('UL.TreeCat').each(function(elm,idx){=0A=
elm =3D $(elm);=0A=
// Treecat must declare "autocomplete" class=0A=
if (!elm.hasClassName('autocomplete')){=0A=
return;=0A=
}=0A=
// Check texfield doesn't already exists=0A=
var tfId =3D elm.id+'_autocomplete';=0A=
var tf =3D $(tfId);=0A=
if (tf){=0A=
tf.value =3D I18N.glp('info.msg.autocomplete');=0A=
return;=0A=
}=0A=
// Create textfield for autocompleter=0A=
var textfield      =3D document.createElement("INPUT");=0A=
textfield.type      =3D 'text';=0A=
textfield.className =3D 'formTextfield autocomplete treecatcomplete';=0A=
textfield.treecat   =3D elm.id;=0A=
textfield.value     =3D I18N.glp('info.msg.autocomplete');=0A=
textfield.id        =3D tfId;=0A=
textfield.tabIndex  =3D "1";=0A=
// Append textfield before TreeCat=0A=
elm.parentNode.insertBefore(textfield, elm);=0A=
Event.observe(textfield, 'focus', function(){ textfield.value =3D ""; });=0A=
// Check filter editmode otherwise it is read mode=0A=
var filter =3D elm.hasClassName('filter') ? '&filter=3Dtrue' : '';=0A=
// Bind an ajax autocompleter=0A=
new =
Ajax.Autocompleter(textfield,Ajax.Autochooser.autoCompleteDiv,"jcore/auto=
complete/accategory.jsp?cids=3D"+elm.getJcmsIds().join('&cids=3D')+filter=
, {paramName: 'autocomplete', minChars: 2, afterUpdateElement: =
Ajax.Autochooser._populateTreeCat });=0A=
});=0A=
},=0A=
// --------------------------------------------------=0A=
//  CLASS PARSING FUNCTIONS=0A=
// --------------------------------------------------=0A=
/**=0A=
* Parses classes of the given field to look for=0A=
* the publication chooser type.=0A=
* =0A=
* The matching classes should be Type_PType (ie Type_Article).=0A=
* This classe is generated by the widget.=0A=
* =0A=
* @param field the enclosing DIV=0A=
* @return String the JCMS type of the chooser=0A=
*/=0A=
_getChooserContentType: function(field){=0A=
var type  =3D field.className.match(/Type_\S+/);=0A=
if (!type){=0A=
JcmsLogger.warn("Autochooser","Missing Publication chooser type");=0A=
return;=0A=
}=0A=
return type.toString().substr(5);=0A=
},=0A=
/**=0A=
* Parses classes of the given field to look for=0A=
* parameter gids (parent groups id).=0A=
* =0A=
* The matching classes should be gids_GroupId (ie gids_c_1234).=0A=
* This classe is generated by the widget parsing chooserQS.=0A=
* =0A=
* @param field the enclosing DIV=0A=
* @return String the JCMS parent groups of the chooser=0A=
*/=0A=
_getChooserGroups: function(field){=0A=
var gids  =3D field.className.match(/gids_\S+/g);=0A=
if (!gids){=0A=
return "";=0A=
}=0A=
var gids  =3D gids.join('&').replace(/gids_/g,'gids=3D');=0A=
return gids;=0A=
},=0A=
// --------------------------------------------------=0A=
//  CALLBACK FUNCTIONS=0A=
// --------------------------------------------------=0A=
/**=0A=
* =0A=
* @param li the item to check=0A=
*/=0A=
_checkItem: function(input, li){=0A=
var li =3D $(li);=0A=
if (li.hasClassName('info')){=0A=
input.value =3D I18N.glp('info.msg.autocomplete');=0A=
return false;=0A=
}=0A=
if (li.hasClassName('nomatch')){=0A=
input.value =3D I18N.glp('info.msg.autocomplete');=0A=
return false;=0A=
}=0A=
return true;=0A=
},=0A=
/**=0A=
* Callback used by Chooser Autocompleter. Called when a =0A=
* selection has been done.=0A=
* =0A=
* @param input the form chooser label input=0A=
* @param li the selected LI tag=0A=
*/=0A=
_populate: function(input,li){=0A=
var input =3D $(input);=0A=
if (!Ajax.Autochooser._checkItem(input, li))=0A=
return;=0A=
var chooser =3D input.next('INPUT.formChooserfield');=0A=
chooser.value =3D li.id.substring(5);=0A=
},=0A=
/**=0A=
* Callback used by TreeCat Autocompleter. Called when a =0A=
* selection has been done.=0A=
* =0A=
* @param input the form chooser label input=0A=
* @param li the selected LI tag=0A=
*/=0A=
_populateTreeCat: function(input,li){=0A=
var input =3D $(input);=0A=
if (!Ajax.Autochooser._checkItem(input, li))=0A=
return;=0A=
input.value =3D I18N.glp('info.msg.autocomplete.done');=0A=
input.addClassName('treecatrefresh');=0A=
input.blur();=0A=
setTimeout(function(){=0A=
input.value =3D I18N.glp('info.msg.autocomplete');=0A=
input.removeClassName('treecatrefresh');=0A=
},2000);=0A=
Ajax.Tree.refresh(input.treecat, li.id.substring(5), true);=0A=
}=0A=
}=0A=
/* js/jalios/textarea-resizer.js */=0A=
/*=0A=
** Adds automatic resizing and resize handle below=0A=
** all textareas with "resizable" class.=0A=
*/=0A=
function TextAreaResizer(elt) {=0A=
this.textarea =3D elt;=0A=
this.create();=0A=
}=0A=
TextAreaResizer.prototype =3D {=0A=
create : function() {=0A=
// Create handle and insert just after textarea=0A=
this.handle =3D document.createElement("DIV");=0A=
this.handle.className =3D "textarea-resizer";=0A=
this.handle.title =3D I18N.glp('ui.textarea-resizer.title');=0A=
// Modify handle size to match size of textarea=0A=
var textAreaWidth =3D $(this.textarea).getDimensions().width;=0A=
if (textAreaWidth > 0 ) {=0A=
this.handle.style.width =3D (textAreaWidth - 2) + "px";=0A=
}=0A=
// insert handle=0A=
this.textarea.parentNode.insertBefore(this.handle, =
this.textarea.nextSibling);=0A=
// Add custom style to text area=0A=
$(this.textarea).addClassName("textarea-resized");=0A=
this.dragStartHdlr =3D function(evt){this.dragStart(evt);}.bind(this);=0A=
this.dragMoveHdlr =3D function(evt){this.dragMove(evt);}.bind(this);=0A=
this.dragStopHdlr =3D function(evt){this.dragStop(evt);}.bind(this);=0A=
this.autoResizeHdlr =3D function(evt){this.autoResize(evt);}.bind(this); =0A=
Event.observe(this.handle, 'mousedown', this.dragStartHdlr);=0A=
Event.observe(this.textarea, 'keyup', this.autoResizeHdlr);=0A=
},=0A=
dragStart : function(evt) {=0A=
this.hasBeenResized =3D true;=0A=
this.dragStartY =3D Event.pointerY(evt);=0A=
this.dragStartH =3D $(this.textarea).getDimensions().height;=0A=
Event.observe(document, 'mousemove', this.dragMoveHdlr);=0A=
Event.observe(document, 'mouseup', this.dragStopHdlr);=0A=
},=0A=
dragMove : function(evt) {=0A=
var newHeight =3D this.dragStartH + Event.pointerY(evt) - =
this.dragStartY ;=0A=
if (newHeight > 15) {=0A=
this.textarea.style.height =3D newHeight + "px";=0A=
}=0A=
},=0A=
dragStop : function(evt) {=0A=
Event.stopObserving(document, "mousemove", this.dragMoveHdlr);=0A=
Event.stopObserving(document, "mouseup", this.dragStopHdlr);=0A=
},=0A=
autoResize : function(evt) {=0A=
if (this.hasBeenResized) {=0A=
return;=0A=
};=0A=
var ta =3D this.textarea;=0A=
var lines =3D ta.value.split('\n');=0A=
var rows =3D 1;=0A=
for (i =3D 0; i < lines.length; i++) {=0A=
if (lines[i].length >=3D ta.cols) { =0A=
rows +=3D Math.floor(lines[i].length / ta.cols);=0A=
}=0A=
}=0A=
rows +=3D lines.length;=0A=
if (rows > ta.rows && rows < 20) {=0A=
ta.rows =3D rows;=0A=
}=0A=
}=0A=
};=0A=
function initTextAreaResizer() {=0A=
if ( document.TextAreaResizerDone ) { return; }=0A=
document.TextAreaResizerDone =3D true;=0A=
$A(document.getElementsByTagName("TEXTAREA")).each(function(textarea) {=0A=
if (textarea.className.indexOf("resizable") !=3D -1) {=0A=
var taResizer =3D new TextAreaResizer(textarea);=0A=
taResizer.autoResize();=0A=
}=0A=
});=0A=
}=0A=
/* js/custom.js */=0A=
// Put your custom scripts here=0A=
// Sample code registering rule effect on Message Box=0A=
// Add to your JSP: jcmsContext.addJSHeader("js/lib/event-selectors.js");=0A=
/*=0A=
var rules1 =3D {=0A=
'DIV.mboxWarning' : function(element){=0A=
new Effect.Shake(element);=0A=
}=0A=
}=0A=
EventSelectors.register(rules1);=0A=
*/=0A=
function MM_swapImgRestore() { //v3.0=0A=
var i,x,a=3Ddocument.MM_sr; =
for(i=3D0;a&&i<a.length&&(x=3Da[i])&&x.oSrc;i++) x.src=3Dx.oSrc;=0A=
}=0A=
function MM_preloadImages() { //v3.0=0A=
var d=3Ddocument; if(d.images){ if(!d.MM_p) d.MM_p=3Dnew Array();=0A=
var i,j=3Dd.MM_p.length,a=3DMM_preloadImages.arguments; for(i=3D0; =
i<a.length; i++)=0A=
if (a[i].indexOf("#")!=3D0){ d.MM_p[j]=3Dnew Image; =
d.MM_p[j++].src=3Da[i];}}=0A=
}=0A=
function MM_findObj(n, d) { //v4.01=0A=
var p,i,x;  if(!d) d=3Ddocument; =
if((p=3Dn.indexOf("?"))>0&&parent.frames.length) {=0A=
d=3Dparent.frames[n.substring(p+1)].document; n=3Dn.substring(0,p);}=0A=
if(!(x=3Dd[n])&&d.all) x=3Dd.all[n]; for =
(i=3D0;!x&&i<d.forms.length;i++) x=3Dd.forms[i][n];=0A=
for(i=3D0;!x&&d.layers&&i<d.layers.length;i++) =
x=3DMM_findObj(n,d.layers[i].document);=0A=
if(!x && d.getElementById) x=3Dd.getElementById(n); return x;=0A=
}=0A=
function MM_swapImage() { //v3.0=0A=
var i,j=3D0,x,a=3DMM_swapImage.arguments; document.MM_sr=3Dnew Array; =
for(i=3D0;i<(a.length-2);i+=3D3)=0A=
if ((x=3DMM_findObj(a[i]))!=3Dnull){document.MM_sr[j++]=3Dx; if(!x.oSrc) =
x.oSrc=3Dx.src; x.src=3Da[i+2];}=0A=
}=0A=
function MM_nbGroup(event, grpName) { //v6.0=0A=
var i,img,nbArr,args=3DMM_nbGroup.arguments;=0A=
if (event =3D=3D "init" && args.length > 2) {=0A=
if ((img =3D MM_findObj(args[2])) !=3D null && !img.MM_init) {=0A=
img.MM_init =3D true; img.MM_up =3D args[3]; img.MM_dn =3D img.src;=0A=
if ((nbArr =3D document[grpName]) =3D=3D null) nbArr =3D =
document[grpName] =3D new Array();=0A=
nbArr[nbArr.length] =3D img;=0A=
for (i=3D4; i < args.length-1; i+=3D2) if ((img =3D MM_findObj(args[i])) =
!=3D null) {=0A=
if (!img.MM_up) img.MM_up =3D img.src;=0A=
img.src =3D img.MM_dn =3D args[i+1];=0A=
nbArr[nbArr.length] =3D img;=0A=
} }=0A=
} else if (event =3D=3D "over") {=0A=
document.MM_nbOver =3D nbArr =3D new Array();=0A=
for (i=3D1; i < args.length-1; i+=3D3) if ((img =3D MM_findObj(args[i])) =
!=3D null) {=0A=
if (!img.MM_up) img.MM_up =3D img.src;=0A=
img.src =3D (img.MM_dn && args[i+2]) ? args[i+2] : ((args[i+1])? =
args[i+1] : img.MM_up);=0A=
nbArr[nbArr.length] =3D img;=0A=
}=0A=
} else if (event =3D=3D "out" ) {=0A=
for (i=3D0; i < document.MM_nbOver.length; i++) {=0A=
img =3D document.MM_nbOver[i]; img.src =3D (img.MM_dn) ? img.MM_dn : =
img.MM_up; }=0A=
} else if (event =3D=3D "down") {=0A=
nbArr =3D document[grpName];=0A=
if (nbArr)=0A=
for (i=3D0; i < nbArr.length; i++) { img=3DnbArr[i]; img.src =3D =
img.MM_up; img.MM_dn =3D 0; }=0A=
document[grpName] =3D nbArr =3D new Array();=0A=
for (i=3D2; i < args.length-1; i+=3D2) if ((img =3D MM_findObj(args[i])) =
!=3D null) {=0A=
if (!img.MM_up) img.MM_up =3D img.src;=0A=
img.src =3D img.MM_dn =3D (args[i+1])? args[i+1] : img.MM_up;=0A=
nbArr[nbArr.length] =3D img;=0A=
} }=0A=
}=0A=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/js/jspacker.jsp?js=js/custom.js&js=js/custom_fo.js

/* js/custom.js */=0A=
// Put your custom scripts here=0A=
// Sample code registering rule effect on Message Box=0A=
// Add to your JSP: jcmsContext.addJSHeader("js/lib/event-selectors.js");=0A=
/*=0A=
var rules1 =3D {=0A=
'DIV.mboxWarning' : function(element){=0A=
new Effect.Shake(element);=0A=
}=0A=
}=0A=
EventSelectors.register(rules1);=0A=
*/=0A=
function MM_swapImgRestore() { //v3.0=0A=
var i,x,a=3Ddocument.MM_sr; =
for(i=3D0;a&&i<a.length&&(x=3Da[i])&&x.oSrc;i++) x.src=3Dx.oSrc;=0A=
}=0A=
function MM_preloadImages() { //v3.0=0A=
var d=3Ddocument; if(d.images){ if(!d.MM_p) d.MM_p=3Dnew Array();=0A=
var i,j=3Dd.MM_p.length,a=3DMM_preloadImages.arguments; for(i=3D0; =
i<a.length; i++)=0A=
if (a[i].indexOf("#")!=3D0){ d.MM_p[j]=3Dnew Image; =
d.MM_p[j++].src=3Da[i];}}=0A=
}=0A=
function MM_findObj(n, d) { //v4.01=0A=
var p,i,x;  if(!d) d=3Ddocument; =
if((p=3Dn.indexOf("?"))>0&&parent.frames.length) {=0A=
d=3Dparent.frames[n.substring(p+1)].document; n=3Dn.substring(0,p);}=0A=
if(!(x=3Dd[n])&&d.all) x=3Dd.all[n]; for =
(i=3D0;!x&&i<d.forms.length;i++) x=3Dd.forms[i][n];=0A=
for(i=3D0;!x&&d.layers&&i<d.layers.length;i++) =
x=3DMM_findObj(n,d.layers[i].document);=0A=
if(!x && d.getElementById) x=3Dd.getElementById(n); return x;=0A=
}=0A=
function MM_swapImage() { //v3.0=0A=
var i,j=3D0,x,a=3DMM_swapImage.arguments; document.MM_sr=3Dnew Array; =
for(i=3D0;i<(a.length-2);i+=3D3)=0A=
if ((x=3DMM_findObj(a[i]))!=3Dnull){document.MM_sr[j++]=3Dx; if(!x.oSrc) =
x.oSrc=3Dx.src; x.src=3Da[i+2];}=0A=
}=0A=
function MM_nbGroup(event, grpName) { //v6.0=0A=
var i,img,nbArr,args=3DMM_nbGroup.arguments;=0A=
if (event =3D=3D "init" && args.length > 2) {=0A=
if ((img =3D MM_findObj(args[2])) !=3D null && !img.MM_init) {=0A=
img.MM_init =3D true; img.MM_up =3D args[3]; img.MM_dn =3D img.src;=0A=
if ((nbArr =3D document[grpName]) =3D=3D null) nbArr =3D =
document[grpName] =3D new Array();=0A=
nbArr[nbArr.length] =3D img;=0A=
for (i=3D4; i < args.length-1; i+=3D2) if ((img =3D MM_findObj(args[i])) =
!=3D null) {=0A=
if (!img.MM_up) img.MM_up =3D img.src;=0A=
img.src =3D img.MM_dn =3D args[i+1];=0A=
nbArr[nbArr.length] =3D img;=0A=
} }=0A=
} else if (event =3D=3D "over") {=0A=
document.MM_nbOver =3D nbArr =3D new Array();=0A=
for (i=3D1; i < args.length-1; i+=3D3) if ((img =3D MM_findObj(args[i])) =
!=3D null) {=0A=
if (!img.MM_up) img.MM_up =3D img.src;=0A=
img.src =3D (img.MM_dn && args[i+2]) ? args[i+2] : ((args[i+1])? =
args[i+1] : img.MM_up);=0A=
nbArr[nbArr.length] =3D img;=0A=
}=0A=
} else if (event =3D=3D "out" ) {=0A=
for (i=3D0; i < document.MM_nbOver.length; i++) {=0A=
img =3D document.MM_nbOver[i]; img.src =3D (img.MM_dn) ? img.MM_dn : =
img.MM_up; }=0A=
} else if (event =3D=3D "down") {=0A=
nbArr =3D document[grpName];=0A=
if (nbArr)=0A=
for (i=3D0; i < nbArr.length; i++) { img=3DnbArr[i]; img.src =3D =
img.MM_up; img.MM_dn =3D 0; }=0A=
document[grpName] =3D nbArr =3D new Array();=0A=
for (i=3D2; i < args.length-1; i+=3D2) if ((img =3D MM_findObj(args[i])) =
!=3D null) {=0A=
if (!img.MM_up) img.MM_up =3D img.src;=0A=
img.src =3D img.MM_dn =3D (args[i+1])? args[i+1] : img.MM_up;=0A=
nbArr[nbArr.length] =3D img;=0A=
} }=0A=
}=0A=
/* js/custom_fo.js */=0A=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/types/PortletNavigate/portletNavigateVertical.js

// ---------------------------------------=0A=
// Vertical Menu Functions |||||||||||||||=0A=
// ---------------------------------------=0A=
=0A=
var expandMenu =3D false;=0A=
=0A=
function vMenuOver(obj, iconOpen, iconClosed) {=0A=
  expandMenu =3D true;=0A=
  icon =3D obj.className=3D=3D"open" ? iconClosed : iconOpen;=0A=
  obj.src =3D icon;=0A=
}=0A=
function vMenuOut(obj, iconOpen, iconClosed) {=0A=
  expandMenu =3D false;=0A=
  icon =3D obj.className=3D=3D"open" ? iconOpen : iconClosed;=0A=
  obj.src =3D icon;=0A=
}=0A=
=0A=
// Expand menu only if the mouse is over an expand icon=0A=
function vMenuLink(obj, iconOpen, iconClosed) {=0A=
  if (expandMenu =3D=3D true) {=0A=
    toggleMenu(obj, iconOpen, iconClosed);=0A=
    return false;=0A=
  }=0A=
}=0A=
=0A=
// Toggle the menu visibility and change the expand icon=0A=
function toggleMenu(obj, iconOpen, iconClosed) {=0A=
  if (obj.parentNode.lastChild.className=3D=3D"open") {=0A=
    obj.parentNode.lastChild.className =3D obj.firstChild.className =3D =
"close";=0A=
    obj.firstChild.src =3D iconOpen;=0A=
  } else {=0A=
    obj.parentNode.lastChild.className =3D obj.firstChild.className =3D =
"open";=0A=
    obj.firstChild.src =3D iconClosed;=0A=
  }=0A=
}
------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/plugins/PluginVideoQuickTime/js/pluginVideos.js

function VideoQuickTime_AffichDiv(as_text, as_divName)=20
{
	if (document.getElementById)
	{
		document.getElementById(as_divName).innerHTML =3D as_text;
	}
	else if (document.all)=20
	{
		document.all[as_divName].innerHTML =3D as_text;
	}
}

function VideoQuickTime_InsertPicture(as_idVideoQuickTime, as_divName)
{
	VideoQuickTime_AffichDiv('<center><img =
src=3D"plugins/PluginVideoQuickTime/images/ajax.gif" =
style=3D"border:none;" /></center>', as_divName);
	new Ajax.Updater(as_divName, =
"plugins/PluginVideoQuickTime/jsp/ajaxVideoQuickTime.jsp?type=3Dpicture&i=
d=3D" + as_idVideoQuickTime);
}

function VideoQuickTime_InsertVideo(as_idVideoQuickTime, as_divName, =
as_urlContext)
{
  	VideoQuickTime_AffichDiv('<center><img src=3D"' + as_urlContext + =
'plugins/PluginVideoQuickTime/images/ajax.gif" =
style=3D"border:none"/></center>', as_divName);
	new Ajax.Updater(as_divName, as_urlContext + =
'plugins/PluginVideoQuickTime/jsp/ajaxVideoQuickTime.jsp?type=3Dvideo&id=3D=
'+ as_idVideoQuickTime, {evalScripts:true, asynchronous:true });
}

function OpenPopup(as_url, as_name, as_option)=20
{
	window.open(as_url, as_name, as_option);
}

document.observe("dom:loaded", function()
{
	var luo_tabDiv =3D $$('div.ULgVideoQT');
	for(li_i=3D0; li_i < luo_tabDiv.length; li_i++)=20
	{
		// Pour quand la WYSIWYG recopie des <div> sans le tag 'ULgVideoQT'
		if (luo_tabDiv[li_i].id !=3D "")
		{
			VideoQuickTime_InsertPicture(luo_tabDiv[li_i].id, =
luo_tabDiv[li_i].id);					// Do the Ajax request
		}
	}=09
});

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://reflexions.ulg.ac.be/plugins/PluginVideoQuickTime/highslide/highslide-with-html.packed.js

/************************************************************************=
******
Name:    Highslide JS
Version: 4.1.8 (October 27 2009)
Config:  default +inline +ajax +iframe +flash +packed=0A=
Author:  Torstein H=C3=B8nsi
Support: http://highslide.com/support

Licence:
Highslide JS is licensed under a Creative Commons =
Attribution-NonCommercial 2.5
License (http://creativecommons.org/licenses/by-nc/2.5/).

You are free:
	* to copy, distribute, display, and perform the work
	* to make derivative works

Under the following conditions:
	* Attribution. You must attribute the work in the manner  specified by  =
the
	  author or licensor.
	* Noncommercial. You may not use this work for commercial purposes.

* For  any  reuse  or  distribution, you  must make clear to others the =
license
  terms of this work.
* Any  of  these  conditions  can  be  waived  if  you  get permission =
from the=20
  copyright holder.

Your fair use and other rights are in no way affected by the above.
*************************************************************************=
*****/
eval(function(p,a,c,k,e,d){e=3Dfunction(c){return(c<a?'':e(parseInt(c/a))=
)+((c=3Dc%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace=
(/^/,String)){while(c--){d[e(c)]=3Dk[c]||e(c)}k=3D[function(e){return =
d[e]}];e=3Dfunction(){return'\\w+'};c=3D1};while(c--){if(k[c]){p=3Dp.repl=
ace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('q(!m){u =
m=3D{1d:{7h:\'ae\',8x:\'b9...\',9f:\'6s 23 b8\',9O:\'6s 23 b7 23 =
b5\',8D:\'b6 23 ba I (f)\',9k:\'bb by <i>9Q 9R</i>\',9o:\'bg 23 bf 9Q 9R =
be\',8v:\'9s\',8t:\'9t\',8A:\'9A\',8J:\'9L\',8I:\'9L =
(bc)\',8k:\'bd\',b4:\'a1\',b3:\'a1 5v (9w)\',aV:\'9J\',aU:\'9J 5v =
(9w)\',8z:\'9s (6r 1f)\',8r:\'9t (6r 2P)\',8u:\'9A\',aT:\'1:1\',88:\'6s =
23 2b 2w, aR aw aS 23 3B. aW 6r aX W 1L aw =
5L.\'},4Y:\'U/b2/\',5r:\'b1.6D\',4H:\'b0.6D\',6Z:66,9U:66,3S:15,7j:15,4I:=
15,5U:15,4j:aY,8y:0.75,7x:J,6J:5,3c:2,aZ:3,4G:1n,8E:\'3w =
2P\',8q:1,a7:J,8P:\'bh://U.bi/\',8V:\'bC\',9W:J,6L:[\'a\'],58:1n,5M:J,3T:=
J,2Z:\'4C\',6m:J,7m:J,3P:9r,4w:9r,4D:J,1x:\'bB-bA\',8S:{9l:\'<1i =
3p=3D"U-aQ"><8n>\'+\'<3l 3p=3D"U-5L">\'+\'<a 2s=3D"#" 2t=3D"{m.1d.8z}" =
2I=3D"D m.5L(k)">\'+\'<2m>{m.1d.8v}</2m></a>\'+\'</3l>\'+\'<3l =
3p=3D"U-1L">\'+\'<a 2s=3D"#" 2t=3D"{m.1d.8r}" 2I=3D"D =
m.1L(k)">\'+\'<2m>{m.1d.8t}</2m></a>\'+\'</3l>\'+\'<3l =
3p=3D"U-3B">\'+\'<a 2s=3D"#" 2t=3D"{m.1d.8u}" 2I=3D"D =
1n">\'+\'<2m>{m.1d.8A}</2m></a>\'+\'</3l>\'+\'<3l 3p=3D"U-2b">\'+\'<a =
2s=3D"#" 2t=3D"{m.1d.8I}" 2I=3D"D =
m.2b(k)">\'+\'<2m>{m.1d.8J}</2m></a>\'+\'</3l>\'+\'</8n></1i>\'+\'<1i =
3p=3D"U-V"></1i>\'+\'<1i 3p=3D"U-bz"><1i>\'+\'<2m 3p=3D"U-3f" =
2t=3D"{m.1d.8k}"><2m></2m></2m>\'+\'</1i></1i>\'},4M:[],74:J,N:[],6C:[\'4=
D\',\'2Q\',\'1x\',\'3c\',\'bD\',\'bE\',\'bJ\',\'9n\',\'bI\',\'bH\',\'bF\'=
,\'9h\',\'8j\',\'7m\',\'K\',\'M\',\'6B\',\'58\',\'5M\',\'3T\',\'bG\',\'bw=
\',\'bv\',\'28\',\'6m\',\'3e\',\'3v\',\'2Z\',\'6j\',\'7C\',\'3P\',\'4w\',=
\'67\',\'6H\',\'4k\',\'2i\',\'9Z\',\'9Y\',\'T\'],1N:[],4y:0,bn:{x:[\'a8\'=
,\'1f\',\'7f\',\'2P\',\'ay\'],y:[\'4P\',\'1a\',\'7Z\',\'3w\',\'5T\']},5t:=
{},9h:{},9n:{},6j:{at:{},1E:{},ap:{}},3q:[],3y:{},3F:[],5J:[],4e:[],5g:{}=
,6w:{},5e:[],3J:/bm\\/4\\.0/.16(4d.5x)?8:6y((4d.5x.5O().30(/.+(?:95|bl|bj=
|1q)[\\/: =
]([\\d.]+)/)||[0,\'0\'])[1]),1q:(P.51&&!1K.3o),4K:/bk/.16(4d.5x),7A:/bo.+=
95:1\\.[0-8].+bp/.16(4d.5x),$:B(1g){q(1g)D =
P.7z(1g)},1X:B(1O,2F){1O[1O.19]=3D2F},14:B(8R,35,3m,4p,8N){u =
C=3DP.14(8R);q(35)m.3a(C,35);q(8N)m.S(C,{6V:0,9u:\'2f\',6I:0});q(3m)m.S(C=
,3m);q(4p)4p.1J(C);D C},3a:B(C,35){W(u x 3z 35)C[x]=3D35[x];D =
C},S:B(C,3m){W(u x 3z =
3m){q(m.1q&&x=3D=3D\'1C\'){q(3m[x]>0.99)C.F.bu(\'52\');L =
C.F.52=3D\'92(1C=3D\'+(3m[x]*2v)+\')\'}L =
C.F[x]=3D3m[x]}},47:B(C,1e,2M){u 3H,3W,3D;q(1w =
2M!=3D\'7F\'||2M=3D=3D=3DH){u =
2G=3D9e;2M=3D{3A:2G[2],2i:2G[3],6W:2G[4]}}q(1w =
2M.3A!=3D\'3X\')2M.3A=3D66;2M.2i=3D1r[2M.2i]||1r.9c;2M.5B=3Dm.3a({},1e);W=
(u 2C 3z 1e){u e=3D1y =
m.1z(C,2M,2C);3H=3D6y(m.7l(C,2C))||0;3W=3D6y(1e[2C]);3D=3D2C!=3D\'1C\'?\'=
E\':\'\';e.2L(3H,3W,3D)}},7l:B(C,1e){q(P.80){D =
P.80.aq(C,H).9E(1e)}L{q(1e=3D=3D\'1C\')1e=3D\'52\';u =
2F=3DC.4v[1e.2d(/\\-(\\w)/g,B(a,b){D =
b.bt()})];q(1e=3D=3D\'52\')2F=3D2F.2d(/92\\(1C=3D([0-9]+)\\)/,B(a,b){D =
b/2v});D 2F=3D=3D=3D\'\'?1:2F}},5n:B(){u =
d=3DP,w=3D1K,55=3Dd.7S&&d.7S!=3D\'ah\'?d.4c:d.V;u =
K=3Dm.1q?55.93:(d.4c.93||5c.bs),M=3Dm.1q?55.bq:5c.br;m.3u=3D{K:K,M:M,5p:m=
.1q?55.5p:bK,5o:m.1q?55.5o:aE}},81:B(C){u =
p=3D{x:C.91,y:C.6X};4a(C.8Y){C=3DC.8Y;p.x+=3DC.91;p.y+=3DC.6X;q(C!=3DP.V&=
&C!=3DP.4c){p.x-=3DC.5p;p.y-=3DC.5o}}D =
p},4N:B(a,1E,2L,Q){q(!a)a=3Dm.14(\'a\',H,{1R:\'2f\'},m.1S);q(1w =
a.4Q=3D=3D\'B\')D 1E;q(Q=3D=3D\'2H\'){W(u =
i=3D0;i<m.3F.19;i++){q(m.3F[i]&&m.3F[i].a=3D=3Da){m.3F[i].9X();m.3F[i]=3D=
H;D 1n}}m.98=3DJ}1l{1y m.4T(a,1E,2L,Q);D 1n}1k(e){D J}},97:B(a,1E,2L){D =
m.4N(a,1E,2L,\'2H\')},6x:B(){D =
m.14(\'1i\',{1p:\'U-2H-O\',2r:m.9m(m.8S.9l)})},4i:B(C,4h,1p){u =
1j=3DC.3N(4h);W(u i=3D0;i<1j.19;i++){q((1y 5i(1p)).16(1j[i].1p)){D =
1j[i]}}D H},9m:B(s){s=3Ds.2d(/\\s/g,\' \');u =
2u=3D/{m\\.1d\\.([^}]+)\\}/g,4Z=3Ds.30(2u),1d;q(4Z)W(u =
i=3D0;i<4Z.19;i++){1d=3D4Z[i].2d(2u,"$1");q(1w =
m.1d[1d]!=3D\'24\')s=3Ds.2d(4Z[i],m.1d[1d])}D s},6o:B(a){W(u =
i=3D0;i<m.4e.19;i++){q(m.4e[i][0]=3D=3Da){u =
c=3Dm.4e[i][1];m.4e[i][1]=3Dc.5V(1);D c}}D H},8i:B(e){u 1O=3Dm.53();W(u =
i=3D0;i<1O.3Y.19;i++){u =
a=3D1O.3Y[i];q(m.41(a,\'28\')=3D=3D\'2B\'&&m.41(a,\'6m\'))m.1X(m.5J,a)}m.=
6i(0)},6i:B(i){q(!m.5J[i])D;u a=3Dm.5J[i];u =
4L=3Dm.3E(m.41(a,\'6B\'));q(!4L)4L=3Dm.6x();u 2B=3D1y =
m.5R(a,4L,1);2B.7K=3DB(){};2B.2O=3DB(){m.1X(m.4e,[a,4L]);m.6i(i+1)};2B.7D=
()},9M:B(){u 6l=3D0,5K=3D-1,N=3Dm.N,A,1v;W(u =
i=3D0;i<N.19;i++){A=3DN[i];q(A){1v=3DA.Y.F.1v;q(1v&&1v>6l){6l=3D1v;5K=3Di=
}}}q(5K=3D=3D-1)m.2q=3D-1;L N[5K].3g()},41:B(a,4R){a.4Q=3Da.2I;u =
p=3Da.4Q?a.4Q():H;a.4Q=3DH;D(p&&1w p[4R]!=3D\'24\')?p[4R]:(1w =
m[4R]!=3D\'24\'?m[4R]:H)},6c:B(a){u T=3Dm.41(a,\'T\');q(T)D T;D =
a.2s},3E:B(1g){u 1D=3Dm.$(1g),3G=3Dm.6w[1g],a=3D{};q(!1D&&!3G)D =
H;q(!3G){3G=3D1D.5V(J);3G.1g=3D\'\';m.6w[1g]=3D3G;D 1D}L{D =
3G.5V(J)}},31:B(d){q(d)m.6E.1J(d);m.6E.2r=3D\'\'},ab:B(7d,A){u =
3I=3DA=3DA||m.3n();q(m.3s)D 1n;L =
m.3I=3D3I;1l{m.3s=3D7d;7d.2I()}1k(e){m.3I=3Dm.3s=3DH}1l{A.2b()}1k(e){}D =
1n},5G:B(C,22){u A=3Dm.3n(C);q(A)D m.ab(A.7e(22),A);L D 1n},5L:B(C){D =
m.5G(C,-1)},1L:B(C){D =
m.5G(C,1)},5h:B(e){q(!e)e=3D1K.1Y;q(!e.2k)e.2k=3De.77;q(1w =
e.2k.7L!=3D\'24\')D J;u A=3Dm.3n();u 22=3DH;8p(e.aB){1F 70:q(A)A.7X();D =
J;1F 32:1F 34:1F 39:1F 40:22=3D1;85;1F 8:1F 33:1F 37:1F 38:22=3D-1;85;1F =
27:1F 13:22=3D0}q(22!=3D=3DH){m.4r(P,1K.3o?\'7r\':\'7v\',m.5h);q(!m.9W)D =
J;q(e.5m)e.5m();L e.aK=3D1n;q(A){q(22=3D=3D0){A.2b()}L{m.5G(A.R,22)}D =
1n}}D J},aN:B(18){m.1X(m.1N,m.3a(18,{2N:\'2N\'+m.4y++}))},84:B(6Y,5C){u =
C,2u=3D/^U-Y-([0-9]+)$/;C=3D6Y;4a(C.2T){q(C.1g&&2u.16(C.1g))D =
C.1g.2d(2u,"$1");C=3DC.2T}q(!5C){C=3D6Y;4a(C.2T){q(C.4h&&m.5s(C)){W(u =
R=3D0;R<m.N.19;R++){u A=3Dm.N[R];q(A&&A.a=3D=3DC)D R}}C=3DC.2T}}D =
H},3n:B(C,5C){q(1w C=3D=3D\'24\')D m.N[m.2q]||H;q(1w C=3D=3D\'3X\')D =
m.N[C]||H;q(1w C=3D=3D\'7p\')C=3Dm.$(C);D =
m.N[m.84(C,5C)]||H},5s:B(a){D(a.2I&&a.2I.8h().2d(/\\s/g,\' =
\').30(/m.(aD|e)aC/))},9q:B(){W(u =
i=3D0;i<m.N.19;i++)q(m.N[i]&&m.N[i].4q)m.9M()},7U:B(e){q(!e)e=3D1K.1Y;q(e=
.aI>1)D J;q(!e.2k)e.2k=3De.77;u =
C=3De.2k;4a(C.2T&&!(/U-(2w|3B|2H|3f)/.16(C.1p))){C=3DC.2T}u =
A=3Dm.3n(C);q(A&&(A.4A||!A.4q))D J;q(A&&e.Q=3D=3D\'7G\'){q(e.2k.7L)D J;u =
30=3DC.1p.30(/U-(2w|3B|3f)/);q(30){m.2h=3D{A:A,Q:30[1],1f:A.x.G,K:A.x.I,1=
a:A.y.G,M:A.y.I,8c:e.5y,a5:e.5w};m.1P(P,\'7J\',m.7b);q(e.5m)e.5m();q(/U-(=
2w|2H)-83/.16(A.O.1p)){A.3g();m.73=3DJ}D 1n}L =
q(/U-2H/.16(C.1p)&&m.2q!=3DA.R){A.3g();A.42(\'1m\')}}L =
q(e.Q=3D=3D\'8l\'){m.4r(P,\'7J\',m.7b);q(m.2h){q(m.49&&m.2h.Q=3D=3D\'2w\'=
)m.2h.A.O.F.3C=3Dm.49;u =
3i=3Dm.2h.3i;q(!3i&&!m.73&&!/(3B|3f)/.16(m.2h.Q)){A.2b()}L =
q(3i||(!3i&&m.98)){m.2h.A.42(\'1m\')}q(m.2h.A.2Y)m.2h.A.2Y.F.1R=3D\'2f\';=
m.73=3D1n;m.2h=3DH}L q(/U-2w-83/.16(C.1p)){C.F.3C=3Dm.49}}D =
1n},7b:B(e){q(!m.2h)D J;q(!e)e=3D1K.1Y;u =
a=3Dm.2h,A=3Da.A;q(A.11){q(!A.2Y)A.2Y=3Dm.14(\'1i\',H,{1c:\'20\',K:A.x.I+=
\'E\',M:A.y.I+\'E\',1f:A.x.cb+\'E\',1a:A.y.cb+\'E\',1v:4,8L:(m.1q?\'cU\':=
\'2f\'),1C:.cT},A.Y,J);q(A.2Y.F.1R=3D=3D\'2f\')A.2Y.F.1R=3D\'\'}a.57=3De.=
5y-a.8c;a.56=3De.5w-a.a5;u =
7a=3D1r.cS(1r.ax(a.57,2)+1r.ax(a.56,2));q(!a.3i)a.3i=3D(a.Q!=3D\'2w\'&&7a=
>0)||(7a>(m.cV||5));q(a.3i&&e.5y>5&&e.5w>5){q(a.Q=3D=3D\'3f\')A.3f(a);L{A=
.7V(a.1f+a.57,a.1a+a.56);q(a.Q=3D=3D\'2w\')A.O.F.3C=3D\'3B\'}}D =
1n},8s:B(e){1l{q(!e)e=3D1K.1Y;u =
5a=3D/cW/i.16(e.Q);q(!e.2k)e.2k=3De.77;q(m.1q)e.78=3D5a?e.cZ:e.cY;u =
A=3Dm.3n(e.2k);q(!A.4q)D;q(!A||!e.78||m.3n(e.78,J)=3D=3DA||m.2h)D;W(u =
i=3D0;i<A.1N.19;i++)(B(){u =
o=3Dm.$(\'2N\'+A.1N[i]);q(o&&o.69){q(5a)m.S(o,{1s:\'2o\',1R:\'\'});m.47(o=
,{1C:5a?o.1C:0},o.3k)}})()}1k(e){}},1P:B(C,1Y,2X){q(C=3D=3DP&&1Y=3D=3D\'3=
d\')m.1X(m.5e,2X);1l{C.1P(1Y,2X,1n)}1k(e){1l{C.az(\'4U\'+1Y,2X);C.cQ(\'4U=
\'+1Y,2X)}1k(e){C[\'4U\'+1Y]=3D2X}}},4r:B(C,1Y,2X){1l{C.4r(1Y,2X,1n)}1k(e=
){1l{C.az(\'4U\'+1Y,2X)}1k(e){C[\'4U\'+1Y]=3DH}}},5f:B(i){q(m.74&&m.4M[i]=
&&m.4M[i]!=3D\'24\'){u =
1u=3DP.14(\'1u\');1u.3x=3DB(){1u=3DH;m.5f(i+1)};1u.T=3Dm.4M[i]}},au:B(3X)=
{q(3X&&1w 3X!=3D\'7F\')m.6J=3D3X;u 1O=3Dm.53();W(u =
i=3D0;i<1O.3Z.19&&i<m.6J;i++){m.1X(m.4M,m.6c(1O.3Z[i]))}q(m.1x)1y =
m.4x(m.1x,B(){m.5f(0)});L m.5f(0);q(m.4H)u =
6D=3Dm.14(\'1u\',{T:m.4Y+m.4H})},5N:B(){q(!m.1S){m.5n();m.5X=3Dm.1q&&m.3J=
<7;m.9b=3Dm.5X&&6q.cJ=3D=3D\'cI:\';W(u x 3z m.5E){q(1w =
m[x]!=3D\'24\')m.1d[x]=3Dm[x];L q(1w m.1d[x]=3D=3D\'24\'&&1w =
m.5E[x]!=3D\'24\')m.1d[x]=3Dm.5E[x]}m.1S=3Dm.14(\'1i\',{1p:\'U-1S\'},{1c:=
\'20\',1f:0,1a:0,K:\'2v%\',1v:m.4j,7i:\'ae\'},P.V,J);m.21=3Dm.14(\'a\',{1=
p:\'U-21\',2t:m.1d.9f,2r:m.1d.8x,2s:\'8C:;\'},{1c:\'20\',1a:\'-3L\',1C:m.=
8y,1v:1},m.1S);m.6E=3Dm.14(\'1i\',H,{1R:\'2f\'},m.1S);m.2K=3Dm.14(\'1i\',=
H,{9C:\'9F\',cH:\'cL\'},H,J);1r.cM=3DB(t,b,c,d){D =
c*t/d+b};1r.9c=3DB(t,b,c,d){D =
c*(t/=3Dd)*t+b};m.ad=3Dm.5X;m.am=3D((1K.3o&&m.3J<9)||4d.9z=3D=3D\'9y\'||(=
m.1q&&m.3J<5.5))}},3d:B(){q(m.7c)D;m.7c=3DJ;W(u =
i=3D0;i<m.5e.19;i++)m.5e[i]()},96:B(){u =
C,1j,51=3D[],3Z=3D[],3Y=3D[],3b=3D{},2u;W(u =
i=3D0;i<m.6L.19;i++){1j=3DP.3N(m.6L[i]);W(u =
j=3D0;j<1j.19;j++){C=3D1j[j];2u=3Dm.5s(C);q(2u){m.1X(51,C);q(2u[0]=3D=3D\=
'm.4N\')m.1X(3Z,C);L q(2u[0]=3D=3D\'m.97\')m.1X(3Y,C);u =
g=3Dm.41(C,\'4k\')||\'2f\';q(!3b[g])3b[g]=3D[];m.1X(3b[g],C)}}}m.5u=3D{51=
:51,3b:3b,3Z:3Z,3Y:3Y};D m.5u},53:B(){D m.5u||m.96()},2b:B(C){u =
A=3Dm.3n(C);q(A)A.2b();D =
1n}};m.1z=3DB(2p,1Q,1e){k.1Q=3D1Q;k.2p=3D2p;k.1e=3D1e;q(!1Q.8O)1Q.8O=3D{}=
};m.1z.54=3D{6S:B(){(m.1z.36[k.1e]||m.1z.36.8M)(k);q(k.1Q.36)k.1Q.36.94(k=
.2p,k.3O,k)},2L:B(8W,23,3D){k.6N=3D(1y =
64()).63();k.3H=3D8W;k.3W=3D23;k.3D=3D3D;k.3O=3Dk.3H;k.G=3Dk.6M=3D0;u =
5c=3Dk;B t(59){D =
5c.36(59)}t.2p=3Dk.2p;q(t()&&m.3q.1X(t)=3D=3D1){m.8Z=3Dd9(B(){u =
3q=3Dm.3q;W(u =
i=3D0;i<3q.19;i++)q(!3q[i]())3q.d7(i--,1);q(!3q.19){d4(m.8Z)}},13)}},36:B=
(59){u t=3D(1y =
64()).63();q(59||t>=3Dk.1Q.3A+k.6N){k.3O=3Dk.3W;k.G=3Dk.6M=3D1;k.6S();k.1=
Q.5B[k.1e]=3DJ;u 6O=3DJ;W(u i 3z =
k.1Q.5B)q(k.1Q.5B[i]!=3D=3DJ)6O=3D1n;q(6O){q(k.1Q.6W)k.1Q.6W.94(k.2p)}D =
1n}L{u =
n=3Dt-k.6N;k.6M=3Dn/k.1Q.3A;k.G=3Dk.1Q.2i(n,0,1,k.1Q.3A);k.3O=3Dk.3H+((k.=
3W-k.3H)*k.G);k.6S()}D =
J}};m.3a(m.1z,{36:{1C:B(1z){m.S(1z.2p,{1C:1z.3O})},8M:B(1z){1l{q(1z.2p.F&=
&1z.2p.F[1z.1e]!=3DH)1z.2p.F[1z.1e]=3D1z.3O+1z.3D;L =
1z.2p[1z.1e]=3D1z.3O}1k(e){}}}});m.4x=3DB(1x,2O){k.2O=3D2O;k.1x=3D1x;u =
v=3Dm.3J,6d;k.6K=3Dm.1q&&v>=3D5.5&&v<7;q(!1x){q(2O)2O();D}m.5N();k.2j=3Dm=
.14(\'2j\',{c3:0},{1s:\'1m\',1c:\'20\',c2:\'c0\',K:0},m.1S,J);u =
6R=3Dm.14(\'6R\',H,H,k.2j,1);k.2a=3D[];W(u =
i=3D0;i<=3D8;i++){q(i%3=3D=3D0)6d=3Dm.14(\'6d\',H,{M:\'1H\'},6R,J);k.2a[i=
]=3Dm.14(\'2a\',H,H,6d,J);u =
F=3Di!=3D4?{c1:0,c5:0}:{1c:\'3t\'};m.S(k.2a[i],F)}k.2a[4].1p=3D1x+\' =
U-1o\';k.9p()};m.4x.54=3D{9p:B(){u T=3Dm.4Y+(m.c6||"cc/")+k.1x+".ca";u =
9g=3Dm.4K?m.1S:H;k.2U=3Dm.14(\'1u\',H,{1c:\'20\',1a:\'-3L\'},9g,J);u =
2S=3Dk;k.2U.3x=3DB(){2S.9a()};k.2U.T=3DT},9a:B(){u =
o=3Dk.1t=3Dk.2U.K/4,G=3D[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-=
6],[-2,-2]],1I=3D{M:(2*o)+\'E\',K:(2*o)+\'E\'};W(u =
i=3D0;i<=3D8;i++){q(G[i]){q(k.6K){u =
w=3D(i=3D=3D1||i=3D=3D7)?\'2v%\':k.2U.K+\'E\';u =
1i=3Dm.14(\'1i\',H,{K:\'2v%\',M:\'2v%\',1c:\'3t\',1W:\'1m\'},k.2a[i],J);m=
.14(\'1i\',H,{52:"c7:c8.9j.bZ(bY=3DbQ, =
T=3D\'"+k.2U.T+"\')",1c:\'20\',K:w,M:k.2U.M+\'E\',1f:(G[i][0]*o)+\'E\',1a=
:(G[i][1]*o)+\'E\'},1i,J)}L{m.S(k.2a[i],{8L:\'7M(\'+k.2U.T+\') =
\'+(G[i][0]*o)+\'E =
\'+(G[i][1]*o)+\'E\'})}q(1K.3o&&(i=3D=3D3||i=3D=3D5))m.14(\'1i\',H,1I,k.2=
a[i],J);m.S(k.2a[i],1I)}}k.2U=3DH;q(m.3y[k.1x])m.3y[k.1x].5Q();m.3y[k.1x]=
=3Dk;q(k.2O)k.2O()},4o:B(G,1t,9d,3k,2i){u =
A=3Dk.A,4z=3DA.Y.F,1t=3D1t||0,G=3DG||{x:A.x.G+1t,y:A.y.G+1t,w:A.x.1b(\'1M=
\')-2*1t,h:A.y.1b(\'1M\')-2*1t};q(9d)k.2j.F.1s=3D(G.h>=3D4*k.1t)?\'2o\':\=
'1m\';m.S(k.2j,{1f:(G.x-k.1t)+\'E\',1a:(G.y-k.1t)+\'E\',K:(G.w+2*k.1t)+\'=
E\'});G.w-=3D2*k.1t;G.h-=3D2*k.1t;m.S(k.2a[4],{K:G.w>=3D0?G.w+\'E\':0,M:G=
.h>=3D0?G.h+\'E\':0});q(k.6K)k.2a[3].F.M=3Dk.2a[5].F.M=3Dk.2a[4].F.M},5Q:=
B(8K){q(8K)k.2j.F.1s=3D\'1m\';L =
m.31(k.2j)}};m.68=3DB(A,1I){k.A=3DA;k.1I=3D1I;k.2J=3D1I=3D=3D\'x\'?\'bP\'=
:\'bO\';k.2y=3Dk.2J.5O();k.4V=3D1I=3D=3D\'x\'?\'bM\':\'bN\';k.79=3Dk.4V.5=
O();k.6G=3D1I=3D=3D\'x\'?\'bR\':\'bS\';k.bX=3Dk.6G.5O();k.1U=3Dk.2R=3D0};=
m.68.54=3D{1b:B(R){8p(R){1F\'6h\':D =
k.1B+k.2x+(k.t-m.21[\'1t\'+k.2J])/2;1F\'1M\':D =
k.I+2*k.cb+k.1U+k.2R;1F\'3R\':D k.5l-k.3K-k.5k;1F\'6F\':D =
k.1b(\'3R\')-2*k.cb-k.1U-k.2R;1F\'4n\':D =
k.G-(k.A.1o?k.A.1o.1t:0);1F\'82\':D =
k.1b(\'1M\')+(k.A.1o?2*k.A.1o.1t:0);1F\'5D\':D =
k.1T?1r.6a((k.I-k.1T)/2):0}},6v:B(){k.cb=3D(k.A.O[\'1t\'+k.2J]-k.t)/2;k.5=
k=3Dm[\'6I\'+k.6G]},71:B(){k.t=3Dk.A.C[k.2y]?3U(k.A.C[k.2y]):k.A.C[\'1t\'=
+k.2J];k.1B=3Dk.A.1B[k.1I];k.2x=3D(k.A.C[\'1t\'+k.2J]-k.t)/2;q(k.1B=3D=3D=
0||k.1B=3D=3D-1){k.1B=3D(m.3u[k.2y]/2)+m.3u[\'3h\'+k.4V]}},6A:B(){u =
A=3Dk.A;k.3Q=3D\'1H\';k.G=3Dk.1B-k.cb+k.2x;q(k.6H&&k.1I=3D=3D\'x\')A.67=3D=
1r.2E(A.67||k.Z,A.6H*k.Z/A.y.Z);k.I=3D1r.2E(k.Z,A[\'7u\'+k.2J]||k.Z);k.2z=
=3DA.4D?1r.2E(A[\'2E\'+k.2J],k.Z):k.Z;q(A.2l&&A.2Q){k.I=3DA[k.2y];k.1T=3D=
k.Z}q(k.1I=3D=3D\'x\'&&m.4G)k.2z=3DA.3P;k.3K=3Dm[\'6I\'+k.4V];k.3h=3Dm.3u=
[\'3h\'+k.4V];k.5l=3Dm.3u[k.2y]},7s:B(i){u =
A=3Dk.A;q(A.2l&&(A.2Q||m.4G)){k.1T=3Di;k.I=3D1r.7u(k.I,k.1T);A.O.F[k.79]=3D=
k.1b(\'5D\')+\'E\'}L =
k.I=3Di;A.O.F[k.2y]=3Di+\'E\';A.Y.F[k.2y]=3Dk.1b(\'1M\')+\'E\';q(A.1o)A.1=
o.4o();q(A.2Y)A.2Y.F[k.2y]=3Di+\'E\';q(k.1I=3D=3D\'y\'&&A.4B&&A.V.F.M!=3D=
\'1H\')1l{A.4B.V.F.1W=3D\'1H\'}1k(e){}q(A.1Z){u =
d=3DA.2e;q(k.6U=3D=3D=3D24)k.6U=3DA.1h[\'1t\'+k.2J]-d[\'1t\'+k.2J];d.F[k.=
2y]=3D(k.I-k.6U)+\'E\';q(k.1I=3D=3D\'x\')A.3M.F.K=3D\'1H\';q(A.V)A.V.F[k.=
2y]=3D\'1H\'}q(k.1I=3D=3D\'x\'&&A.1A)A.44(J)},7Y:B(i){k.G=3Di;k.A.Y.F[k.7=
9]=3Di+\'E\';q(k.A.1o)k.A.1o.4o()}};m.4T=3DB(a,1E,2L,2A){q(P.8Q&&m.1q&&!m=
.7c){m.1P(P,\'3d\',B(){1y =
m.4T(a,1E,2L,2A)});D}k.a=3Da;k.2L=3D2L;k.2A=3D2A||\'2w\';k.1Z=3D(2A=3D=3D=
\'2H\');k.2l=3D!k.1Z;m.74=3D1n;k.1N=3D[];m.5N();u R=3Dk.R=3Dm.N.19;W(u =
i=3D0;i<m.6C.19;i++){u 2C=3Dm.6C[i];k[2C]=3D1E&&1w =
1E[2C]!=3D\'24\'?1E[2C]:m[2C]}q(!k.T)k.T=3Da.2s;u =
C=3D(1E&&1E.7B)?m.$(1E.7B):a;C=3Dk.8H=3DC.3N(\'1u\')[0]||C;k.62=3DC.1g||a=
.1g;W(u i=3D0;i<m.N.19;i++){q(m.N[i]&&m.N[i].a=3D=3Da){m.N[i].3g();D =
1n}}q(!m.bW)W(u =
i=3D0;i<m.N.19;i++){q(m.N[i]&&m.N[i].8H!=3DC&&!m.N[i].65){m.N[i].6t()}}m.=
N[R]=3Dk;q(!m.7x&&!m.3s){q(m.N[R-1])m.N[R-1].2b();q(1w =
m.2q!=3D\'24\'&&m.N[m.2q])m.N[m.2q].2b()}k.C=3DC;k.1B=3Dm.81(C);m.5n();u =
x=3Dk.x=3D1y m.68(k,\'x\');x.71();u y=3Dk.y=3D1y =
m.68(k,\'y\');y.71();k.Y=3Dm.14(\'1i\',{1g:\'U-Y-\'+k.R,1p:\'U-Y =
\'+k.7C},{1s:\'1m\',1c:\'20\',1v:m.4j+=3D2},H,J);k.Y.bV=3Dk.Y.bT=3Dm.8s;q=
(k.2A=3D=3D\'2w\'&&k.3c=3D=3D2)k.3c=3D0;q(!k.1x){k[k.2A+\'6k\']()}L =
q(m.3y[k.1x]){k.6n();k[k.2A+\'6k\']()}L{k.4t();u A=3Dk;1y =
m.4x(k.1x,B(){A.6n();A[A.2A+\'6k\']()})}D =
J};m.4T.54=3D{7O:B(e){1K.6q.2s=3Dk.T},6n:B(){u =
1o=3Dk.1o=3Dm.3y[k.1x];1o.A=3Dk;1o.2j.F.1v=3Dk.Y.F.1v-1;m.3y[k.1x]=3DH},4=
t:B(){q(k.65||k.21)D;k.21=3Dm.21;u A=3Dk;k.21.2I=3DB(){A.6t()};u =
A=3Dk,l=3Dk.x.1b(\'6h\')+\'E\',t=3Dk.y.1b(\'6h\')+\'E\';4S(B(){q(A.21)m.S=
(A.21,{1f:l,1a:t,1v:m.4j++})},2v)},bU:B(){u A=3Dk;u =
1u=3DP.14(\'1u\');k.O=3D1u;1u.3x=3DB(){q(m.N[A.R])A.4s()};q(m.cd)1u.ce=3D=
B(){D =
1n};1u.1p=3D\'U-2w\';m.S(1u,{1s:\'1m\',1R:\'4E\',1c:\'20\',67:\'3L\',1v:3=
});1u.2t=3Dm.1d.88;q(m.4K)m.1S.1J(1u);q(m.1q&&m.cx)1u.T=3DH;1u.T=3Dk.T;k.=
4t()},cw:B(){k.O=3Dm.6o(k.a);q(!k.O)k.O=3Dm.3E(k.6B);q(!k.O)k.O=3Dm.6x();=
k.7n([\'5Z\']);q(k.5Z){u =
V=3Dm.4i(k.O,\'1i\',\'U-V\');q(V)V.1J(k.5Z);k.5Z.F.1R=3D\'4E\'}u =
1h=3Dk.1h=3Dk.O;q(/(3r|11)/.16(k.28))k.6T(1h);m.1S.1J(k.Y);m.S(k.Y,{1c:\'=
cv\',6V:\'0 \'+m.7j+\'E 0 =
\'+m.3S+\'E\'});k.O=3Dm.14(\'1i\',{1p:\'U-2H\'},{1c:\'3t\',1v:3,1W:\'1m\'=
},k.Y);k.3M=3Dm.14(\'1i\',H,H,k.O,1);k.3M.1J(1h);m.S(1h,{1c:\'3t\',1R:\'4=
E\',7i:m.1d.7h||\'\'});q(k.K)1h.F.K=3Dk.K+\'E\';q(k.M)m.S(1h,{M:k.M+\'E\'=
,1W:\'1m\'});q(1h.26<k.3P)1h.F.K=3Dk.3P+\'E\';q(k.28=3D=3D\'2B\'&&!m.6o(k=
.a)){k.4t();u A=3Dk;u 2B=3D1y =
m.5R(k.a,1h);2B.T=3Dk.T;2B.2O=3DB(){q(m.N[A.R])A.4s()};2B.7K=3DB(){6q.2s=3D=
A.T};2B.7D()}L q(k.28=3D=3D\'11\'&&k.2Z=3D=3D\'4C\'){k.5z()}L =
k.4s()},4s:B(){1l{q(!k.O)D;k.O.3x=3DH;q(k.65)D;L k.65=3DJ;u =
x=3Dk.x,y=3Dk.y;q(k.21){m.S(k.21,{1a:\'-3L\'});k.21=3DH}q(k.2l){x.Z=3Dk.O=
.K;y.Z=3Dk.O.M;m.S(k.O,{K:x.t+\'E\',M:y.t+\'E\'});k.Y.1J(k.O);m.1S.1J(k.Y=
)}L =
q(k.72)k.72();x.6v();y.6v();m.S(k.Y,{1f:(x.1B+x.2x-x.cb)+\'E\',1a:(y.1B+x=
.2x-y.cb)+\'E\'});k.al();u =
29=3Dx.Z/y.Z;x.6A();k.3Q(x);y.6A();k.3Q(y);q(k.1Z)k.9B();q(k.1A)k.44(0,1)=
;q(k.4D){q(k.2l)k.9S(29);L =
k.76();q(k.2l&&k.x.Z>(k.x.1T||k.x.I)){k.8F();q(k.1N.19=3D=3D1)k.44()}}k.7=
q()}1k(e){k.7O(e)}},6T:B(4p,1H){u =
c=3Dm.4i(4p,\'5F\',\'U-V\');q(/(11|3r)/.16(k.28)){q(k.3e)c.F.K=3Dk.3e+\'E=
\';q(k.3v)c.F.M=3Dk.3v+\'E\'}},5z:B(){q(k.an)D;u =
A=3Dk;k.V=3Dm.4i(k.1h,\'5F\',\'U-V\');q(k.28=3D=3D\'11\'){k.4t();u =
4f=3Dm.2K.5V(1);k.V.1J(4f);k.cy=3Dk.1h.26;q(!k.3e)k.3e=3D4f.26;u =
4l=3Dk.1h.1G-k.V.1G,h=3Dk.3v||m.3u.M-4l-m.4I-m.5U,3x=3Dk.2Z=3D=3D\'4C\'?\=
' 3x=3D"q (m.N[\'+k.R+\']) m.N[\'+k.R+\'].4s()" \':\'\';k.V.2r+=3D\'<11 =
2C=3D"m\'+(1y 64()).63()+\'" cz=3D"0" R=3D"\'+k.R+\'" \'+\' =
F=3D"K:\'+k.3e+\'E; M:\'+h+\'E" \'+3x+\' T=3D"\'+k.T+\'" =
></11>\';k.4f=3Dk.V.3N(\'1i\')[0];k.11=3Dk.V.3N(\'11\')[0];q(k.2Z=3D=3D\'=
4F\')k.6P()}q(k.28=3D=3D\'3r\'){k.V.1g=3Dk.V.1g||\'m-cE-1g-\'+k.R;u =
a=3Dk.6j;q(!a.1E)a.1E=3D{};q(1w =
a.1E.av=3D=3D\'24\')a.1E.av=3D\'cD\';q(7y)7y.cC(k.T,k.V.1g,k.3e,k.3v,a.cA=
||\'7\',a.cB,a.at,a.1E,a.ap)}k.an=3DJ},72:B(){q(k.11&&!k.3v){k.11.F.M=3Dk=
.V.F.M=3Dk.9D()+\'E\'}k.1h.1J(m.2K);q(!k.x.Z)k.x.Z=3Dk.1h.26;k.y.Z=3Dk.1h=
.1G;k.1h.9v(m.2K);q(m.1q&&k.a2>3U(k.1h.4v.M)){k.a2=3D3U(k.1h.4v.M)}m.S(k.=
Y,{1c:\'20\',6V:\'0\'});m.S(k.O,{K:k.x.t+\'E\',M:k.y.t+\'E\'})},9D:B(){u =
h;1l{u 1V=3Dk.4B=3Dk.11.7o||k.11.4W.P;u =
2K=3D1V.14(\'1i\');2K.F.9C=3D\'9F\';1V.V.1J(2K);h=3D2K.6X;q(m.1q)h+=3D3U(=
1V.V.4v.4I)+3U(1V.V.4v.5U)-1}1k(e){h=3Dcs}D h},6P:B(){u =
48=3Dk.1h.26-k.4f.26;m.31(k.4f);q(48<0)48=3D0;u =
4l=3Dk.1h.1G-k.11.1G;q(k.4B&&!k.3v&&!k.M&&k.y.I=3D=3Dk.y.Z)1l{k.4B.V.F.1W=
=3D\'1m\'}1k(e){}m.S(k.11,{K:1r.7t(k.x.I-48)+\'E\',M:1r.7t(k.y.I-4l)+\'E\=
'});m.S(k.V,{K:k.11.F.K,M:k.11.F.M});k.43=3Dk.11;k.2e=3Dk.43},9B:B(){k.6T=
(k.1h);q(k.28=3D=3D\'3r\'&&k.2Z=3D=3D\'4C\')k.5z();q(k.x.I<k.x.Z&&!k.58)k=
.x.I=3Dk.x.Z;q(k.y.I<k.y.Z&&!k.5M)k.y.I=3Dk.y.Z;k.2e=3Dk.1h;m.S(k.3M,{1c:=
\'3t\',K:k.x.I+\'E\'});m.S(k.1h,{9u:\'2f\',K:\'1H\',M:\'1H\'});u =
1D=3Dm.4i(k.1h,\'5F\',\'U-V\');q(1D&&!/(11|3r)/.16(k.28)){u =
46=3D1D;1D=3Dm.14(46.cj,H,{1W:\'1m\'},H,J);46.2T.ci(1D,46);1D.1J(m.2K);1D=
.1J(46);u 48=3Dk.1h.26-1D.26;u 4l=3Dk.1h.1G-1D.1G;1D.9v(m.2K);u =
6f=3Dm.4K||4d.9z=3D=3D\'9y\'?1:0;m.S(1D,{K:(k.x.I-48-6f)+\'E\',M:(k.y.I-4=
l)+\'E\',1W:\'1H\',1c:\'3t\'});q(6f&&46.1G>1D.1G){1D.F.K=3D(3U(1D.F.K)+6f=
)+\'E\'}k.43=3D1D;k.2e=3Dk.43}q(k.11&&k.2Z=3D=3D\'4C\')k.6P();q(!k.43&&k.=
y.I<k.3M.1G)k.2e=3Dk.O;q(k.2e=3D=3Dk.O&&!k.58&&!/(11|3r)/.16(k.28)){k.x.I=
+=3D17}q(k.2e&&k.2e.1G>k.2e.2T.1G){4S("1l { m.N["+k.R+"].2e.F.1W =3D =
\'1H\'; } 1k(e) {}",m.6Z)}},3Q:B(p,3V){u =
cg,ck=3Dp.2k,1I=3Dp=3D=3Dk.x?\'x\':\'y\';u 6Q=3D1n;u =
45=3Dp.A.4D;p.G=3D1r.6a(p.G-((p.1b(\'1M\')-p.t)/2));q(p.G<p.3h+p.3K){p.G=3D=
p.3h+p.3K;6Q=3DJ}q(!3V&&p.I<p.2z){p.I=3Dp.2z;45=3D1n}q(p.G+p.1b(\'1M\')>p=
.3h+p.5l-p.5k){q(!3V&&6Q&&45){p.I=3D1r.2E(p.I,p.1b(1I=3D=3D\'y\'?\'3R\':\=
'6F\'))}L =
q(p.1b(\'1M\')<p.1b(\'3R\')){p.G=3Dp.3h+p.5l-p.5k-p.1b(\'1M\')}L{p.G=3Dp.=
3h+p.3K;q(!3V&&45)p.I=3Dp.1b(1I=3D=3D\'y\'?\'3R\':\'6F\')}}q(!3V&&p.I<p.2=
z){p.I=3Dp.2z;45=3D1n}q(p.G<p.3K){u =
9P=3Dp.G;p.G=3Dp.3K;q(45&&!3V)p.I=3Dp.I-(p.G-9P)}},9S:B(29){u =
x=3Dk.x,y=3Dk.y,2V=3D1n,2n=3D1r.2E(x.Z,x.I),3j=3D1r.2E(y.Z,y.I),2Q=3D(k.2=
Q||m.4G);q(2n/3j>29){ =
2n=3D3j*29;q(2n<x.2z){2n=3Dx.2z;3j=3D2n/29}2V=3DJ}L q(2n/3j<29){ =
3j=3D2n/29;2V=3DJ}q(m.4G&&x.Z<x.2z){x.1T=3Dx.Z;y.I=3Dy.1T=3Dy.Z}L =
q(k.2Q){x.1T=3D2n;y.1T=3D3j}L{x.I=3D2n;y.I=3D3j}2V=3Dk.76(2Q?H:29,2V);q(2=
Q&&y.I<y.1T){y.1T=3Dy.I;x.1T=3Dy.I*29}q(2V||2Q){x.G=3Dx.1B-x.cb+x.2x;x.2z=
=3Dx.I;k.3Q(x,J);y.G=3Dy.1B-y.cb+y.2x;y.2z=3Dy.I;k.3Q(y,J);q(k.1A)k.44()}=
},76:B(29,2V){u =
x=3Dk.x,y=3Dk.y;q(k.1A&&(k.2l||k.5M)){4a(y.I>k.4w&&x.I>k.3P&&y.1b(\'1M\')=
>y.1b(\'3R\')){y.I-=3D10;q(29)x.I=3Dy.I*29;k.44(0,1);2V=3DJ}}D =
2V},7q:B(){u =
x=3Dk.x,y=3Dk.y;k.42(\'1m\');k.7w(1,{Y:{K:x.1b(\'1M\'),M:y.1b(\'1M\'),1f:=
x.G,1a:y.G},O:{1f:x.1U+x.1b(\'5D\'),1a:y.1U+y.1b(\'5D\'),K:x.1T||x.I,M:y.=
1T||y.I}},m.6Z)},7w:B(2D,23,3k){q(k.1o&&!k.3c){q(2D)k.1o.4o();L =
k.1o.5Q((k.1Z&&k.3T))}q(!2D)k.8G();u =
A=3Dk,x=3DA.x,y=3DA.y,2i=3Dk.2i;q(!2D)2i=3Dk.9Z||2i;u =
4F=3D2D?B(){q(A.1o)A.1o.2j.F.1s=3D"2o";4S(B(){A.a9()},50)}:B(){A.7N()};q(=
2D)m.S(k.Y,{K:x.t+\'E\',M:y.t+\'E\'});q(2D&&k.1Z){m.S(k.Y,{1f:(x.1B-x.cb+=
x.2x)+\'E\',1a:(y.1B-y.cb+y.2x)+\'E\'})}q(k.9Y){m.S(k.Y,{1C:2D?0:1});m.3a=
(23.Y,{1C:2D})}m.47(k.Y,23.Y,{3A:3k,2i:2i,36:B(2F,2G){q(A.1o&&A.3c&&2G.1e=
=3D=3D\'1a\'){u 4u=3D2D?2G.G:1-2G.G;u =
G=3D{w:x.t+(x.1b(\'1M\')-x.t)*4u,h:y.t+(y.1b(\'1M\')-y.t)*4u,x:x.1B+(x.G-=
x.1B)*4u,y:y.1B+(y.G-y.1B)*4u};A.1o.4o(G,0,1)}q(A.1Z){q(2G.1e=3D=3D\'1f\'=
)A.3M.F.1f=3D(x.G-2F)+\'E\';q(2G.1e=3D=3D\'1a\')A.3M.F.1a=3D(y.G-2F)+\'E\=
'}}});m.47(k.O,23.O,3k,2i,4F);q(2D){k.Y.F.1s=3D\'2o\';k.O.F.1s=3D\'2o\';q=
(k.1Z)k.1h.F.1s=3D\'2o\';k.a.1p+=3D\' =
U-8b-8e\'}},a9:B(){k.4q=3DJ;k.3g();q(k.1Z&&k.2Z=3D=3D\'4F\')k.5z();q(k.11=
){1l{u =
A=3Dk,1V=3Dk.11.7o||k.11.4W.P;m.1P(1V,\'7G\',B(){q(m.2q!=3DA.R)A.3g()})}1=
k(e){}q(m.1q&&1w =
k.4A!=3D\'co\')k.11.F.K=3D(k.3e-1)+\'E\'}q(m.3s&&m.3s=3D=3Dk.a)m.3s=3DH;k=
.8o();u =
p=3Dm.3u,6z=3Dm.5t.x+p.5p,6u=3Dm.5t.y+p.5o;k.7T=3Dk.x.G<6z&&6z<k.x.G+k.x.=
1b(\'1M\')&&k.y.G<6u&&6u<k.y.G+k.y.1b(\'1M\');q(k.1A)k.8w()},8o:B(){u =
R=3Dk.R;u 1x=3Dk.1x;1y m.4x(1x,B(){1l{m.N[R].8f()}1k(e){}})},8f:B(){u =
1L=3Dk.7e(1);q(1L&&1L.2I.8h().30(/m\\.4N/))u =
1u=3Dm.14(\'1u\',{T:m.6c(1L)})},7e:B(22){u =
6p=3Dk.8U(),as=3Dm.5u.3b[k.4k||\'2f\'];q(!as[6p+22]&&k.5v&&k.5v.cn){q(22=3D=
=3D1)D as[0];L q(22=3D=3D-1)D as[as.19-1]}D as[6p+22]||H},8U:B(){u =
1O=3Dm.53().3b[k.4k||\'2f\'];q(1O)W(u =
i=3D0;i<1O.19;i++){q(1O[i]=3D=3Dk.a)D i}D =
H},6t:B(){m.31(k.Y);m.N[k.R]=3DH;q(k.21)m.21.F.1f=3D\'-3L\'},a4:B(){k.86=3D=
m.14(\'a\',{2s:m.8P,2k:m.8V,1p:\'U-86\',2r:m.1d.9k,2t:m.1d.9o});k.4J({6e:=
k.86,1c:k.8j||\'1a 1f\'})},7n:B(89,ag){W(u i=3D0;i<89.19;i++){u =
Q=3D89[i],s=3DH;q(!k[Q+\'4b\']&&k.62)k[Q+\'4b\']=3DQ+\'-W-\'+k.62;q(k[Q+\=
'4b\'])k[Q]=3Dm.3E(k[Q+\'4b\']);q(!k[Q]&&!k[Q+\'87\']&&k[Q+\'8d\'])1l{s=3D=
cm(k[Q+\'8d\'])}1k(e){}q(!k[Q]&&k[Q+\'87\']){s=3Dk[Q+\'87\']}q(!k[Q]&&!s)=
{k[Q]=3Dm.3E(k.a[\'8B\'+Q+\'4b\']);q(!k[Q]){u =
1L=3Dk.a.9G;4a(1L&&!m.5s(1L)){q((1y =
5i(\'U-\'+Q)).16(1L.1p||H)){q(!1L.1g)k.a[\'8B\'+Q+\'4b\']=3D1L.1g=3D\'2N\=
'+m.4y++;k[Q]=3Dm.3E(1L.1g);85}1L=3D1L.9G}}}q(!k[Q]&&s)k[Q]=3Dm.14(\'1i\'=
,{1p:\'U-\'+Q,2r:s});q(ag&&k[Q]){u =
o=3D{1c:(Q=3D=3D\'5W\')?\'4P\':\'5T\'};W(u x 3z =
k[Q+\'ai\'])o[x]=3Dk[Q+\'ai\'][x];o.6e=3Dk[Q];k.4J(o)}}},42:B(1s){q(m.ad)=
k.5A(\'cp\',1s);q(m.am)k.5A(\'cq\',1s);q(m.7A)k.5A(\'*\',1s)},5A:B(4h,1s)=
{u 1j=3DP.3N(4h);u 1e=3D4h=3D=3D\'*\'?\'1W\':\'1s\';W(u =
i=3D0;i<1j.19;i++){q(1e=3D=3D\'1s\'||(P.80.aq(1j[i],"").9E(\'1W\')=3D=3D\=
'1H\'||1j[i].9H(\'1m-by\')!=3DH)){u =
2c=3D1j[i].9H(\'1m-by\');q(1s=3D=3D\'2o\'&&2c){2c=3D2c.2d(\'[\'+k.R+\']\'=
,\'\');1j[i].4m(\'1m-by\',2c);q(!2c)1j[i].F[1e]=3D1j[i].8a}L =
q(1s=3D=3D\'1m\'){u 2W=3Dm.81(1j[i]);2W.w=3D1j[i].26;2W.h=3D1j[i].1G;u =
9x=3D(2W.x+2W.w<k.x.1b(\'4n\')||2W.x>k.x.1b(\'4n\')+k.x.1b(\'82\'));u =
9K=3D(2W.y+2W.h<k.y.1b(\'4n\')||2W.y>k.y.1b(\'4n\')+k.y.1b(\'82\'));u =
5H=3Dm.84(1j[i]);q(!9x&&!9K&&5H!=3Dk.R){q(!2c){1j[i].4m(\'1m-by\',\'[\'+k=
.R+\']\');1j[i].8a=3D1j[i].F[1e];1j[i].F[1e]=3D\'1m\'}L =
q(2c.9T(\'[\'+k.R+\']\')=3D=3D-1){1j[i].4m(\'1m-by\',2c+\'[\'+k.R+\']\')}=
}L =
q((2c=3D=3D\'[\'+k.R+\']\'||m.2q=3D=3D5H)&&5H!=3Dk.R){1j[i].4m(\'1m-by\',=
\'\');1j[i].F[1e]=3D1j[i].8a||\'\'}L =
q(2c&&2c.9T(\'[\'+k.R+\']\')>-1){1j[i].4m(\'1m-by\',2c.2d(\'[\'+k.R+\']\'=
,\'\'))}}}}},3g:B(){k.Y.F.1v=3Dm.4j+=3D2;W(u =
i=3D0;i<m.N.19;i++){q(m.N[i]&&i=3D=3Dm.2q){u 4g=3Dm.N[i];4g.O.1p+=3D\' =
U-\'+4g.2A+\'-83\';q(4g.2l){4g.O.F.3C=3Dm.1q?\'af\':\'5q\';4g.O.2t=3Dm.1d=
.9O}}}q(k.1o)k.1o.2j.F.1v=3Dk.Y.F.1v-1;k.O.1p=3D\'U-\'+k.2A;q(k.2l){k.O.2=
t=3Dm.1d.88;q(m.4H){m.49=3D1K.3o?\'5q\':\'7M(\'+m.4Y+m.4H+\'), =
5q\';q(m.1q&&m.3J<6)m.49=3D\'af\';k.O.F.3C=3Dm.49}}m.2q=3Dk.R;m.1P(P,1K.3=
o?\'7r\':\'7v\',m.5h)},7V:B(x,y){k.x.7Y(x);k.y.7Y(y)},3f:B(e){u =
w,h,r=3De.K/e.M;w=3D1r.7u(e.K+e.57,1r.2E(k.3P,k.x.Z));q(k.2l&&1r.7t(w-k.x=
.Z)<12)w=3Dk.x.Z;h=3Dk.1Z?e.M+e.56:w/r;q(h<1r.2E(k.4w,k.y.Z)){h=3D1r.2E(k=
.4w,k.y.Z);q(k.2l)w=3Dh*r}k.7W(w,h)},7W:B(w,h){k.y.7s(h);k.x.7s(w);k.Y.F.=
M=3Dk.y.1b(\'1M\')+\'E\'},2b:B(){q(k.4A||!k.4q)D;k.4A=3DJ;m.4r(P,1K.3o?\'=
7r\':\'7v\',m.5h);1l{q(k.1Z)k.a0();k.O.F.3C=3D\'cl\';k.7w(0,{Y:{K:k.x.t,M=
:k.y.t,1f:k.x.1B-k.x.cb+k.x.2x,1a:k.y.1B-k.y.cb+k.y.2x},O:{1f:0,1a:0,K:k.=
x.t,M:k.y.t}},m.9U)}1k(e){k.7N()}},a0:B(){q(m.7A){q(!m.4O)m.4O=3Dm.14(\'1=
i\',H,{1c:\'20\'},m.1S);m.S(m.4O,{K:k.x.I+\'E\',M:k.y.I+\'E\',1f:k.x.G+\'=
E\',1a:k.y.G+\'E\',1R:\'4E\'})}q(k.28=3D=3D\'3r\')1l{m.$(k.V.1g).cf()}1k(=
e){}q(k.2Z=3D=3D\'4F\'&&!k.3T)k.9V();q(k.2e&&k.2e!=3Dk.43)k.2e.F.1W=3D\'1=
m\'},9V:B(){q(m.1q&&k.11)1l{k.11.4W.P.V.2r=3D\'\'}1k(e){}q(k.28=3D=3D\'3r=
\')7y.ch(k.V.1g);k.V.2r=3D\'\'},8m:B(){q(k.1o)k.1o.2j.F.1R=3D\'2f\';k.2Y=3D=
H;k.Y.F.1R=3D\'2f\';m.1X(m.3F,k)},9X:B(){1l{m.N[k.R]=3Dk;q(!m.7x&&m.2q!=3D=
k.R){1l{m.N[m.2q].2b()}1k(e){}}u =
z=3Dm.4j++,4z=3D{1R:\'\',1v:z};m.S(k.Y,4z);k.4A=3D1n;u =
o=3Dk.1o||0;q(o){q(!k.3c)4z.1s=3D\'1m\';m.S(o.2j,4z)}k.7q()}1k(e){}},4J:B=
(o){u C=3Do.6e;q(1w =
C=3D=3D\'7p\')C=3Dm.3E(C);q(o.2H)C=3Dm.14(\'1i\',{2r:o.2H});q(!C||1w =
C=3D=3D\'7p\')D;C.F.1R=3D\'4E\';k.ac();u =
K=3Do.K&&/^[0-9]+(E|%)$/.16(o.K)?o.K:\'1H\';q(/^(1f|2P)7Q$/.16(o.1c)&&!/^=
[0-9]+E$/.16(o.K))K=3D\'cr\';u =
18=3Dm.14(\'1i\',{1g:\'2N\'+m.4y++,2N:o.2N},{1c:\'20\',1s:\'1m\',K:K,7i:m=
.1d.7h||\'\',1C:0},k.1A,J);18.1J(C);m.3a(18,{1C:1,9I:0,a3:0,3k:(o.7g=3D=3D=
=3D0||o.7g=3D=3D=3D1n||(o.7g=3D=3D2&&m.1q))?0:66});m.3a(18,o);q(k.a6){k.5=
d(18);q(!18.69||k.7T)m.47(18,{1C:18.1C},18.3k)}m.1X(k.1N,m.4y-1)},5d:B(18=
){u p=3D18.1c||\'7Z =
7f\',5S=3D18.9I,5P=3D18.a3;q(18.2T!=3Dk.1A)k.1A.1J(18);q(/1f$/.16(p))18.F=
.1f=3D5S+\'E\';q(/7f$/.16(p))m.S(18,{1f:\'50%\',3S:(5S-1r.6a(18.26/2))+\'=
E\'});q(/2P$/.16(p))18.F.2P=3D-5S+\'E\';q(/^a8$/.16(p)){m.S(18,{2P:\'2v%\=
',7j:k.x.cb+\'E\',1a:-k.y.cb+\'E\',3w:-k.y.cb+\'E\',1W:\'1H\'});k.x.1U=3D=
18.26}L =
q(/^ay$/.16(p)){m.S(18,{1f:\'2v%\',3S:k.x.cb+\'E\',1a:-k.y.cb+\'E\',3w:-k=
.y.cb+\'E\',1W:\'1H\'});k.x.2R=3D18.26}q(/^1a/.16(p))18.F.1a=3D5P+\'E\';q=
(/^7Z/.16(p))m.S(18,{1a:\'50%\',4I:(5P-1r.6a(18.1G/2))+\'E\'});q(/^3w/.16=
(p))18.F.3w=3D-5P+\'E\';q(/^4P$/.16(p)){m.S(18,{1f:(-k.x.1U-k.x.cb)+\'E\'=
,2P:(-k.x.2R-k.x.cb)+\'E\',3w:\'2v%\',5U:k.y.cb+\'E\',K:\'1H\'});k.y.1U=3D=
18.1G}L =
q(/^5T$/.16(p)){m.S(18,{1c:\'3t\',1f:(-k.x.1U-k.x.cb)+\'E\',2P:(-k.x.2R-k=
.x.cb)+\'E\',1a:\'2v%\',4I:k.y.cb+\'E\',K:\'1H\'});k.y.2R=3D18.1G;18.F.1c=
=3D\'20\'}},al:B(){k.7n([\'5W\',\'cu\'],J);q(k.5W&&k.7m)k.5W.1p+=3D\' =
U-3B\';q(m.a7)k.a4();W(u i=3D0;i<m.1N.19;i++){u =
o=3Dm.1N[i],61=3Do.7B,6b=3Do.4k;q((!61&&!6b)||(61&&61=3D=3Dk.62)||(6b&&6b=
=3D=3D=3Dk.4k)){q(k.2l||(k.1Z&&o.ct))k.4J(o)}}u 6g=3D[];W(u =
i=3D0;i<k.1N.19;i++){u =
o=3Dm.$(\'2N\'+k.1N[i]);q(/7Q$/.16(o.1c))k.5d(o);L m.1X(6g,o)}W(u =
i=3D0;i<6g.19;i++)k.5d(6g[i]);k.a6=3DJ},ac:B(){q(!k.1A)k.1A=3Dm.14(\'1i\'=
,{1p:k.7C},{1c:\'20\',K:(k.x.I||(k.2Q?k.K:H)||k.x.Z)+\'E\',M:(k.y.I||k.y.=
Z)+\'E\',1s:\'1m\',1W:\'1m\',1v:m.1q?4:\'1H\'},m.1S,J)},44:B(7P,ak){u =
1A=3Dk.1A,x=3Dk.x,y=3Dk.y;m.S(1A,{K:x.I+\'E\',M:y.I+\'E\'});q(7P||ak){W(u=
 i=3D0;i<k.1N.19;i++){u o=3Dm.$(\'2N\'+k.1N[i]);u =
7R=3D(m.5X||P.7S=3D=3D\'ah\');q(o&&/^(4P|5T)$/.16(o.1c)){q(7R){o.F.K=3D(1=
A.26+2*x.cb+x.1U+x.2R)+\'E\'}y[o.1c=3D=3D\'4P\'?\'1U\':\'2R\']=3Do.1G}q(o=
&&7R&&/^(1f|2P)7Q$/.16(o.1c)){o.F.M=3D(1A.1G+2*y.cb)+\'E\'}}}q(7P){m.S(k.=
O,{1a:y.1U+\'E\'});m.S(1A,{1a:(y.1U+y.cb)+\'E\'})}},8w:B(){u =
b=3Dk.1A;b.1p=3D\'\';m.S(b,{1a:(k.y.1U+k.y.cb)+\'E\',1f:(k.x.1U+k.x.cb)+\=
'E\',1W:\'2o\'});q(m.4K)b.F.1s=3D\'2o\';k.Y.1J(b);W(u =
i=3D0;i<k.1N.19;i++){u =
o=3Dm.$(\'2N\'+k.1N[i]);o.F.1v=3D4;q(!o.69||k.7T){o.F.1s=3D\'2o\';m.S(o,{=
1s:\'2o\',1R:\'\'});m.47(o,{1C:o.1C},o.3k)}}},8G:B(){q(!k.1N.19)D;q(k.1Z&=
&k.3T){k.1A.F.1a=3D\'-3L\';m.1S.1J(k.1A)}L =
m.31(k.1A)},8F:B(){k.5Y=3Dm.14(\'a\',{2s:\'8C:m.N[\'+k.R+\'].7X();\',2t:m=
.1d.8D,1p:\'U-Z-4N\'});k.4J({6e:k.5Y,1c:m.8E,69:J,1C:m.8q})},7X:B(){1l{q(=
k.5Y)m.31(k.5Y);k.3g();u 2n=3Dk.x.I;k.7W(k.x.Z,k.y.Z);u =
60=3Dk.x.G-(k.x.I-2n)/2;q(60<m.3S)60=3Dm.3S;k.7V(60,k.y.G);k.42(\'1m\')}1=
k(e){k.7O(e)}},7N:B(){k.a.1p=3Dk.a.1p.2d(\'U-8b-8e\',\'\');k.42(\'2o\');q=
(k.1Z&&k.3T){k.8m()}L{q(k.1o&&k.3c)k.1o.5Q();m.31(k.Y)}q(m.4O)m.4O.F.1R=3D=
\'2f\';m.N[k.R]=3DH;m.9q()}};m.5R=3DB(a,O,5j){k.a=3Da;k.O=3DO;k.5j=3D5j};=
m.5R.54=3D{7D:B(){u 2g;q(!k.T)k.T=3Dm.6c(k.a);q(k.T.30(\'#\')){u =
1O=3Dk.T.9N(\'#\');k.T=3D1O[0];k.1g=3D1O[1]}q(m.5g[k.T]){k.8g=3Dm.5g[k.T]=
;q(k.1g)k.7I();L k.4X();D}1l{2g=3D1y 90()}1k(e){1l{2g=3D1y =
9i("cG.8T")}1k(e){1l{2g=3D1y 9i("9j.8T")}1k(e){k.7K()}}}u =
2S=3Dk;2g.c4=3DB(){q(2S.2g.8Q=3D=3D4){q(2S.1g)2S.7I();L 2S.4X()}};u =
T=3Dk.T;k.2g=3D2g;q(m.cF)T=3DT.2d(/$/,(/\\?/.16(T)?\'&\':\'?\')+\'bL=3D\'=
+(1y =
64()).63());2g.ao(\'d6\',T,J);2g.8X(\'X-d2-d5\',\'90\');2g.8X(\'da-d3\',\=
'db/x-d8-7L-d0\');2g.cN(H)},7I:B(){m.5N();u =
35=3D1K.3o||m.9b?{T:\'cO:cP\'}:H;k.11=3Dm.14(\'11\',35,{1c:\'20\',1a:\'-3=
L\'},m.1S);k.4X()},4X:B(){u =
s=3Dk.8g||k.2g.cK,5b;q(k.5j)m.5g[k.T]=3Ds;q(!m.1q||m.3J>=3D5.5){s=3Ds.2d(=
1y 5i(\'<d1[^>]*>\',\'ar\'),\'\').2d(1y =
5i(\'<aa[^>]*>.*?</aa>\',\'ar\'),\'\');q(k.11){u =
1V=3Dk.11.7o;q(!1V&&k.11.4W)1V=3Dk.11.4W.P;q(!1V){u =
2S=3Dk;4S(B(){2S.4X()},25);D}1V.ao();1V.cR(s);1V.2b();1l{s=3D1V.7z(k.1g).=
2r}1k(e){1l{s=3Dk.11.P.7z(k.1g).2r}1k(e){}}m.31(k.11)}L{5b=3D/(<V[^>]*>|<=
\\/V>)/cX;q(5b.16(s))s=3Ds.9N(5b)[m.1q?1:2]}}m.4i(k.O,\'5F\',\'U-V\').2r=3D=
s;k.2O();W(u x 3z k)k[x]=3DH}};m.5E=3Dm.1d;u =
c9=3Dm.4T;q(m.1q){(B(){1l{P.4c.bx(\'1f\')}1k(e){4S(9e.aA,50);D}m.3d()})()=
}m.1P(P,\'aL\',m.3d);m.1P(1K,\'7k\',m.3d);m.1P(P,\'3d\',B(){q(m.5r){u =
F=3Dm.14(\'F\',{Q:\'aH/7l\'},H,P.3N(\'aG\')[0]);B =
5I(7E,7H){q(!m.1q){F.1J(P.aP(7E+" {"+7H+"}"))}L{u =
3I=3DP.aj[P.aj.19-1];q(1w(3I.5I)=3D=3D"7F")3I.5I(7E,7H)}}B aM(1e){D\'aF( =
( ( aO =3D P.4c.\'+1e+\' ? P.4c.\'+1e+\' : P.V.\'+1e+\' ) ) + \\\'E\\\' =
);\'}q(m.5r)5I(\'.U 1u\',\'3C: 7M(\'+m.4Y+m.5r+\'), 5q =
!aJ;\')}});m.1P(1K,\'3f\',B(){m.5n()});m.1P(P,\'7J\',B(e){m.5t=3D{x:e.5y,=
y:e.5w}});m.1P(P,\'7G\',m.7U);m.1P(P,\'8l\',m.7U);m.1P(P,\'3d\',m.53);m.1=
P(1K,\'7k\',m.au);m.1P(1K,\'7k\',m.8i)}',62,818,'||||||||||||||||||||this=
||hs||||if||||var||||||exp|function|el|return|px|style|pos|null|size|true=
|width|else|height|expanders|content|document|type|key|setStyles|src|high=
slide|body|for||wrapper|full||iframe|||createElement||test||overlay|lengt=
h|top|get|position|lang|prop|left|id|innerContent|div|els|catch|try|hidde=
n|false|outline|className|ie|Math|visibility|offset|img|zIndex|typeof|out=
lineType|new|fx|overlayBox|tpos|opacity|node|params|case|offsetHeight|aut=
o|dim|appendChild|window|next|wsize|overlays|arr|addEventListener|options=
|display|container|imgSize|p1|doc|overflow|push|event|isHtml|absolute|loa=
ding|op|to|undefined||offsetWidth||objectType|ratio|td|close|hiddenBy|rep=
lace|scrollerDiv|none|xhr|dragArgs|easing|table|target|isImage|span|xSize=
|visible|elem|focusKey|innerHTML|href|title|re|100|image|tb|wh|minSize|co=
ntentType|ajax|name|up|min|val|args|html|onclick|ucwh|clearing|custom|opt=
|hsId|onLoad|right|useBox|p2|pThis|parentNode|graphic|changed|elPos|func|=
releaseMask|objectLoadTime|match|discardElement||||attribs|step||||extend=
|groups|outlineWhileAnimating|ready|objectWidth|resize|focus|scroll|hasDr=
agged|ySize|dur|li|styles|getExpander|opera|class|timers|swf|upcoming|rel=
ative|page|objectHeight|bottom|onload|pendingOutlines|in|duration|move|cu=
rsor|unit|getNode|sleeping|clone|start|last|uaVersion|marginMin|9999px|me=
diumContent|getElementsByTagName|now|minWidth|justify|fitsize|marginLeft|=
preserveContent|parseInt|moveOnly|end|number|htmls|images||getParam|doSho=
wHide|scrollingContent|sizeOverlayBox|allowReduce|cNode|animate|wDiff|sty=
leRestoreCursor|while|Id|documentElement|navigator|cacheBindings|ruler|bl=
urExp|tagName|getElementByClass|zIndexCounter|slideshowGroup|hDiff|setAtt=
ribute|opos|setPosition|parent|isExpanded|removeEventListener|contentLoad=
ed|showLoading|fac|currentStyle|minHeight|Outline|idCounter|stl|isClosing=
|iDoc|before|allowSizeReduction|block|after|padToMinWidth|restoreCursor|m=
arginTop|createOverlay|safari|cache|preloadTheseImages|expand|mask|above|=
getParams|param|setTimeout|Expander|on|uclt|contentWindow|loadHTML|graphi=
csDir|matches||all|filter|getAnchors|prototype|iebody|dY|dX|allowWidthRed=
uction|gotoEnd|over|regBody|self|positionOverlay|onReady|preloadFullImage=
|cachedGets|keyHandler|RegExp|pre|marginMax|clientSize|preventDefault|get=
PageSize|scrollTop|scrollLeft|pointer|expandCursor|isHsAnchor|mouse|ancho=
rs|slideshow|clientY|userAgent|clientX|writeExtendedContent|showHideEleme=
nts|curAnim|expOnly|imgPad|langDefaults|DIV|previousOrNext|wrapperKey|add=
Rule|preloadTheseAjax|topmostKey|previous|allowHeightReduction|init|toLow=
erCase|offY|destroy|Ajax|offX|below|marginBottom|cloneNode|heading|ieLt7|=
fullExpandLabel|maincontent|xpos|tId|thumbsUserSetId|getTime|Date|onLoadS=
tarted|250|maxWidth|Dimension|hideOnMouseOut|round|sg|getSrc|tr|overlayId=
|kdeBugCorr|os|loadingPos|preloadAjaxElement|swfOptions|Create|topZ|cache=
Ajax|connectOutline|getCacheBinding|current|location|arrow|Click|cancelLo=
ading|mY|calcBorders|clones|getSelfRendered|parseFloat|mX|calcExpanded|co=
ntentId|overrides|cur|garbageBin|maxsize|ucrb|maxHeight|margin|numberOfIm=
agesToPreload|hasAlphaImageLoader|openerTagNames|state|startTime|done|cor=
rectIframeSize|hasMovedMin|tbody|update|setObjContainerSize|sizeDiff|padd=
ing|complete|offsetTop|element|expandDuration||calcThumb|htmlGetSize|hasF=
ocused|continuePreloading||fitOverlayBox|srcElement|relatedTarget|lt|dist=
ance|dragHandler|isReady|adj|getAdjacentAnchor|center|fade|cssDirection|d=
irection|marginRight|load|css|dragByHeading|getInline|contentDocument|str=
ing|show|keypress|setSize|abs|max|keydown|changeSize|allowMultipleInstanc=
es|swfobject|getElementById|geckoMac|thumbnailId|wrapperClassName|run|sel=
|object|mousedown|dec|getElementContent|mousemove|onError|form|url|afterC=
lose|error|doWrapper|panel|ie6|compatMode|mouseIsOver|mouseClickHandler|m=
oveTo|resizeTo|doFullExpand|setPos|middle|defaultView|getPosition|osize|b=
lur|getWrapperKey|break|credits|Text|restoreTitle|types|origProp|active|c=
lickX|Eval|anchor|preloadNext|cachedGet|toString|preloadAjax|creditsPosit=
ion|resizeTitle|mouseup|sleep|ul|prepareNextOutline|switch|fullExpandOpac=
ity|nextTitle|wrapperMouseHandler|nextText|moveTitle|previousText|showOve=
rlays|loadingText|loadingOpacity|previousTitle|moveText|_|javascript|full=
ExpandTitle|fullExpandPosition|createFullExpand|destroyOverlays|thumb|clo=
seTitle|closeText|hide|background|_default|nopad|orig|creditsHref|readySt=
ate|tag|skin|XMLHTTP|getAnchorIndex|creditsTarget|from|setRequestHeader|o=
ffsetParent|timerId|XMLHttpRequest|offsetLeft|alpha|clientWidth|call|rv|u=
pdateAnchors|htmlExpand|hasHtmlExpanders||onGraphicLoad|ie6SSL|easeInQuad=
|vis|arguments|loadingTitle|appendTo|headingOverlay|ActiveXObject|Microso=
ft|creditsText|contentWrapper|replaceLang|captionOverlay|creditsTitle|pre=
loadGraphic|reOrder|200|Previous|Next|border|removeChild|spacebar|clearsX=
|KDE|vendor|Move|htmlSizeOperations|clear|getIframePageHeight|getProperty=
Value|both|nextSibling|getAttribute|offsetX|Pause|clearsY|Close|focusTopm=
ost|split|focusTitle|tmpMin|Highslide|JS|correctRatio|indexOf|restoreDura=
tion|destroyObject|enableKeyListener|awake|fadeInOut|easingClose|htmlPrep=
areClose|Play|newHeight|offsetY|writeCredits|clickY|gotOverlays|showCredi=
ts|leftpanel|afterExpand|script|transit|genOverlayBox|hideSelects|ltr|han=
d|addOverlay|BackCompat|Overlay|styleSheets|doPanels|getOverlays|hideIfra=
mes|hasExtendedContent|open|attributes|getComputedStyle|gi||flashvars|pre=
loadImages|wmode|and|pow|rightpanel|detachEvent|callee|keyCode|xpand|html=
E|pageYOffset|expression|HEAD|text|button|important|returnValue|DOMConten=
tLoaded|fix|registerOverlay|ignoreMe|createTextNode|header|click|drag|ful=
lExpandText|pauseTitle|pauseText|Use|keys|1001|outlineStartOffset|zoomout=
|zoomin|graphics|playTitle|playText|front|Expand|bring|cancel|Loading|act=
ual|Powered|esc|Resize|homepage|the|Go|http|com|ra|Safari|it|Trident|oPos=
|Macintosh|Gecko|clientHeight|innerHeight|innerWidth|toUpperCase|removeAt=
tribute|maincontentEval|maincontentText|doScroll||footer|shadow|drop|_sel=
f|captionId|captionText|headingEval|maincontentId|headingText|headingId|c=
aptionEval|pageXOffset|dummy|Left|Top|Height|Width|scale|Right|Bottom|onm=
ouseout|imageCreate|onmouseover|allowSimultaneousLoading|rb|sizingMethod|=
AlphaImageLoader|collapse|lineHeight|borderCollapse|cellSpacing|onreadyst=
atechange|fontSize|outlinesDir|progid|DXImageTransform|HsExpander|png||ou=
tlines|blockRightClick|oncontextmenu|StopPlay|tgtArr|removeSWF|insertBefo=
re|nodeName|tgt|default|eval|repeat|boolean|SELECT|IFRAME|200px|300|useOn=
Html|caption|static|htmlCreate|flushImgSize|newWidth|frameborder|version|=
expressInstallSwfurl|embedSWF|transparent|flash|forceAjaxReload|Msxml2|pa=
ddingTop|https|protocol|responseText|1px|linearTween|send|about|blank|att=
achEvent|write|sqrt|01|white|dragSensitivity|mouseover|ig|toElement|fromE=
lement|urlencoded|link|Requested|Type|clearInterval|With|GET|splice|www|s=
etInterval|Content|application'.split('|'),0,{}))=0A=

------=_NextPart_000_0000_01CBE3CB.CEA46E60
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://static.ak.fbcdn.net/connect.php/js/FB.Share

/*1300232209,177258093,JIT Construction: v353909,en_US*/=0A=
=0A=
if (!window.FB) {FB =3D {};} if(!FB.dynData) { FB.dynData =3D =
{"site_vars":{"canvas_client_compute_content_size_method":1,"use_postMess=
age":0,"use_xdProxy":0,"use_ui_server":1,"monitor_usage_regex":"something=
toputhere.com|huffingtonpost.com|lala.com","monitor_usage_rate":0.05,"ena=
ble_custom_href":1},"ui_server_dialogs":{"bookmark.add":1,"friends.add":1=
},"resources":{"base_url_format":"http:\/\/{0}.facebook.com\/","base_cdn_=
url":"http:\/\/static.ak.fbcdn.net\/","api_channel":1300118768,"api_serve=
r":1300118768,"www_channel":1300118694,"xd_proxy":1300118563,"xd_comm_swf=
_url":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yF\/r\/Y7YCBKX-HZn.swf=
","share_button":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yg\/r\/yZiD=
LhSvAE9.gif","login_img_dark_small_short":"http:\/\/static.ak.fbcdn.net\/=
rsrc.php\/v1\/y2\/r\/ECSptXRJiXu.gif","login_img_dark_medium_short":"http=
:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yN\/r\/WMAGVllinGS.gif","login_im=
g_dark_medium_long":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yq\/r\/C=
tXTsD9gwTy.gif","login_img_dark_large_short":"http:\/\/static.ak.fbcdn.ne=
t\/rsrc.php\/v1\/yg\/r\/di8GQ4yWYmF.gif","login_img_dark_large_long":"htt=
p:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yz\/r\/WuhUANysBjg.gif","login_i=
mg_light_small_short":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yG\/r\=
/HPpl_Q9ir03.gif","login_img_light_medium_short":"http:\/\/static.ak.fbcd=
n.net\/rsrc.php\/v1\/yG\/r\/QVAKZwo2mNu.gif","login_img_light_medium_long=
":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yA\/r\/11hJsvQEMup.gif","l=
ogin_img_light_large_short":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/=
yq\/r\/RwaZQIP0ALn.gif","login_img_light_large_long":"http:\/\/static.ak.=
fbcdn.net\/rsrc.php\/v1\/y6\/r\/kGCxkZx-uZa.gif","login_img_white_small_s=
hort":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yu\/r\/HSGgAQzgm6f.gif=
","login_img_white_medium_short":"http:\/\/static.ak.fbcdn.net\/rsrc.php\=
/v1\/yJ\/r\/a3H8zoa1Ymj.gif","login_img_white_medium_long":"http:\/\/stat=
ic.ak.fbcdn.net\/rsrc.php\/v1\/yK\/r\/McNhTwo6iLp.gif","login_img_white_l=
arge_short":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/y_\/r\/vE_oh0zqP=
1Z.gif","login_img_white_large_long":"http:\/\/static.ak.fbcdn.net\/rsrc.=
php\/v1\/yc\/r\/bGxF25CxBsQ.gif","logout_img_small":"http:\/\/static.ak.f=
bcdn.net\/rsrc.php\/v1\/yL\/r\/_gsP01S3mwQ.gif","logout_img_medium":"http=
:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/y2\/r\/NhZ-RyMbOUr.gif","logout_i=
mg_large":"http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yf\/r\/C9lMHpC5ik8=
.gif"}};} if (!FB.locale) {FB.locale =3D "en_US";} if (!FB.localeIsRTL) =
{FB.localeIsRTL =3D false;}=0A=
=0A=
=0A=
if(!window.FB)window.FB=3D{};if(!window.FB.isSecure)window.FB.isSecure=3D=
function(){return =
(window.location.href.indexOf('https')=3D=3D=3D0)||(window.name.indexOf('=
_fb_https')>-1);};if(!window.FB.Share){FB.Share=3D{results:{},resetUrls:f=
unction(){this.urls=3D{};this.urlsA=3D[];},addQS:function(d,c){var =
a=3D[];for(var b in =
c)if(c[b])a.push(b.toString()+'=3D'+encodeURIComponent(c[b]));return =
d+'?'+a.join('&');},getUrl:function(a){return =
a.getAttribute('share_url')||window.location.href;},getType:function(a){r=
eturn a.getAttribute('type')||'button_count';},pretty:function(a){return =
a>=3D1e+07?Math.round(a/1e+06)+'M':(a>=3D10000?Math.round(a/1000)+'K':a);=
},updateButton:function(a){var =
b=3Dthis.getUrl(a);if(this.results[b])a.fb_count=3Dthis.results[b].total_=
count;this.displayBox(a,3);},displayBox:function(a,d){if(typeof(a.fb_coun=
t)=3D=3D'number'&&a.fb_count>=3Dd)for(var c=3D1;c<=3D2;c++){var =
b=3Da.firstChild.childNodes[c];b.className=3Db.className.replace('fb_shar=
e_no_count','');if(c=3D=3D2)b.lastChild.innerHTML=3Dthis.pretty(a.fb_coun=
t);}},renderButton:function(c){var k=3Dthis.getUrl(c);var =
h=3Dthis.getType(c);var i=3Dc.innerHTML.length>0?c.innerHTML:'Share';var =
g=3D{u:k,t:k=3D=3Dwindow.location.href?document.title:null,src:'sp'};c.hr=
ef=3Dthis.addQS((FB.isSecure()?'https:':'http:')+'//www.facebook.com/shar=
er.php',g);c.onclick=3Dfunction(){if(!c.fb_clicked){c.fb_count+=3D1;FB.Sh=
are.displayBox(this,1);c.fb_clicked=3Dtrue;}window.open(c.href,'sharer','=
toolbar=3D0,status=3D0,width=3D626,height=3D436');return =
false;};c.style.textDecoration=3D'none';if(!this.results[k]&&(h.indexOf('=
count')>=3D0)){this.urls[k]=3Dtrue;this.urlsA.push(k);}var =
j=3D'Small';var a=3D'<span class=3D\'FBConnectButton =
FBConnectButton_'+j+'\''+' style=3D\'cursor:pointer;\'>'+'<span =
class=3D\'FBConnectButton_Text\'>'+i+'</span></span>';if(h.indexOf('count=
')>=3D0){var e=3D(h=3D=3D'box_count');var f=3D(e?'top':'right');var =
d=3D'<span class=3D\'fb_share_size_'+j+' =
'+(e?'fb_share_count_wrapper':'')+'\'>';var b=3D'<span =
class=3D\'fb_share_count_nub_'+f+' =
fb_share_no_count\'></span>';b+=3D'<span class=3D\'fb_share_count =
fb_share_no_count'+' fb_share_count_'+f+'\'>'+'<span =
class=3D\'fb_share_count_inner\'>&nbsp;</span></span>';d+=3D(e)?'<span></=
span>'+b+a:a+b;}else if(h.indexOf('icon')>=3D0){var d=3D'<span =
class=3D\'FBConnectButton_Simple\'>'+'<span =
class=3D\'FBConnectButton_Text_Simple\'>'+(h=3D=3D'icon_link'?i:'&#xFEFF;=
')+'</span>';}else var =
d=3Da;c.innerHTML=3Dd;c.fb_rendered=3Dtrue;},insert:function(a){(document=
.getElementsByTagName('HEAD')[0]||document.body).appendChild(a);},renderA=
ll:function(d){var c=3Ddocument.getElementsByName('fb_share');var =
a=3Dc.length;for(var =
b=3D0;b<a;b++){if(!c[b].fb_rendered)this.renderButton(c[b]);if(this.getTy=
pe(c[b]).indexOf('count')>=3D0&&!c[b].fb_count&&this.results[this.getUrl(=
c[b])])this.updateButton(c[b]);}},fetchData:function(){var =
c=3Ddocument.createElement('script');var a=3D[];for(var =
b=3D0;b<this.urlsA.length;++b)a.push('"'+this.urlsA[b].replace('\\','\\\\=
').replace('"','\\"')+'"');c.src=3Dthis.addQS((FB.isSecure()?'https:':'ht=
tp:')+'//api.facebook.com/restserver.php',{v:'1.0',method:'links.getStats=
',urls:'['+a.join(',')+']',format:'json',callback:'fb_sharepro_render'});=
this.resetUrls();this.insert(c);},stopScan:function(){clearInterval(FB.Sh=
are.scanner);FB.Share.renderPass();},renderPass:function(){FB.Share.rende=
rAll();if(FB.Share.urlsA.length>0)FB.Share.fetchData();},_onFirst:functio=
n(){var =
b=3Ddocument.createElement('link');b.rel=3D'stylesheet';b.type=3D'text/cs=
s';var =
a=3D(FB.isSecure()?'https://s-static.ak.fbcdn.net/':'http://static.ak.fbc=
dn.net/');b.href=3Da+'connect.php/css/share-button-css';this.insert(b);th=
is.resetUrls();window.fb_sharepro_render=3Dfunction(c){for(var =
d=3D0;c&&d<c.length;d++)FB.Share.results[c[d].url]=3Dc[d];FB.Share.render=
All();};this.renderPass();this.scanner=3DsetInterval(FB.Share.renderPass,=
700);if(window.attachEvent){window.attachEvent("onload",FB.Share.stopScan=
);}else =
window.addEventListener("load",FB.Share.stopScan,false);}};FB.Share._onFi=
rst();}=0A=
=0A=
=0A=
if (FB && FB.Loader) { =
FB.Loader.onScriptLoaded(["FB.Share","FB.SharePro"]); }
------=_NextPart_000_0000_01CBE3CB.CEA46E60--
