From: <Salvato da Windows Internet Explorer 8>
Subject: Europaconcorsi: Evento: Le percezioni psicologiche e le patologie psichiatriche nella progettazione dello spazio architettonico
Date: Wed, 26 Aug 2009 21:10:43 +0200
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_003E_01CA2691.AC4F9310"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/events/101585-Le-percezioni-psicologiche-e-le-patologie-psichiatriche-nella-progettazione-dello-spazio-architettonico

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang=3Dit xml:lang=3D"it-IT"=20
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Europaconcorsi: =
Evento: Le percezioni psicologiche e le patologie psichiatriche nella =
progettazione dello spazio architettonico</TITLE>
<META content=3D"text/html; charset=3Dutf-8" http-equiv=3DContent-type>
<META content=3Dit http-equiv=3DContent-Language><LINK=20
title=3D"Europaconcorsi Frontcovers" rel=3Dalternate =
type=3Dapplication/rss+xml=20
href=3D"http://feeds.feedburner.com/ec2_frontcovers">
<META name=3Dcopyright content=3D"(c) Copyright Europaconcorsi">
<META name=3Ddescription=20
content=3D"Europaconcorsi - Servizi per l'architettura in Europa e nel =
Mondo">
<META name=3Dkeywords=20
content=3D"Europaconcorsi, Europaconcorsi.com, architettura, concorso, =
concorsi, progettazione, progettisti, progettista, progetto, progetti, =
ingegneri, ingegnere, architetti, architetto, bandi, bando">
<META name=3Drobots content=3Dall>
<META content=3Dfalse http-equiv=3Dimagetoolbar>
<META name=3DMSSmartTagsPreventParsing content=3Dtrue>
<META name=3Dverify-v1 =
content=3DP4mZc0XcqlRfGuNRPGlGDOMNBcPnqpuxVbT3tHLPhmw=3D>
<META name=3Dcontent-image=20
content=3Dhttp://s3.amazonaws.com/europaconcorsi/source_covers/1404917/im=
ages-1_thumb.jpg><LINK=20
rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/ads.css?1248796221"=20
media=3Dscreen><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/contents.css?1248796221"=20
media=3Dscreen><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/yui/reset-fonts-grids.css?1=
248796221"=20
media=3Dscreen><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/layout.css?1248796221"=20
media=3Dscreen><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/yui/base.css?1248796221"=20
media=3Dscreen><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/presentation.css?1248796221=
"=20
media=3Dscreen><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/yui/menu.css?1248796221"=20
media=3Dscreen><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/yui/tabview.css?1248796221"=
=20
media=3Dscreen><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/forms.css?1248796221" =
media=3Dscreen>
<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/swfobject.js?1248796221"></S=
CRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/yui/yahoo-dom-event.js?12487=
96221"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/yui/container_core.js?124879=
6221"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/yui/menu.js?1248796221"></SC=
RIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/prototype.js?1248796221"></S=
CRIPT>
<LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/events.css?1248796221" =
media=3Dscreen><!--[if IE]><LINK rel=3DStylesheet type=3Dtext/css=20
href=3D"http://europaconcorsi.com/stylesheets/iefix.css?1248796221" =
media=3Dscreen><![endif]-->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/prototype.js?1248796221"></S=
CRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/effects.js?1248796221"></SCR=
IPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/dragdrop.js?1248796221"></SC=
RIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/controls.js?1248796221"></SC=
RIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/application.js?1248796221"><=
/SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/controls_ext.js?1248796221">=
</SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://europaconcorsi.com/javascripts/graft.js?1248796221"></SCRIP=
T>

<SCRIPT type=3Dtext/javascript>=0A=
  //<![CDATA[=0A=
  =0A=
  //]]>=0A=
  </SCRIPT>
<!-- Ad Manager -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://partner.googleadservices.com/gampad/google_service.js">=0A=
  </SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
    GS_googleAddAdSenseService("ca-pub-6301114576447358");=0A=
    GS_googleEnableAllServices();=0A=
  </SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
    GA_googleAddSlot("ca-pub-6301114576447358", "Leaderboard");=0A=
    GA_googleAddSlot("ca-pub-6301114576447358", =
"250x90_Leaderboard_Right");=0A=
    GA_googleAddSlot("ca-pub-6301114576447358", "250x250_Sidebar_Top");=0A=
    GA_googleAddSlot("ca-pub-6301114576447358", =
"250x250_Sidebar_Bottom");=0A=
    // GA_googleAddSlot("ca-pub-6301114576447358", =
"250x250_Sidebar_Middle");=0A=
    GA_googleAddSlot("ca-pub-6301114576447358", "Sponsor_250x90");=0A=
    GA_googleAddSlot("ca-pub-6301114576447358", "Sponsor_due");=0A=
  </SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
    GA_googleFetchAds();=0A=
  </SCRIPT>
<!-- Enf of Ad Manager -->
<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18812"></HEAD>
<BODY class=3Dyui-skin-sam>
<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-111791-6");=0A=
    pageTracker._initData();=0A=
    pageTracker._trackPageview();=0A=
    </SCRIPT>

<DIV id=3Dcustom-doc class=3Dyui-t6>
<DIV id=3Dhd>
<DIV id=3Dside_header class=3Dyui-gf>
<DIV class=3D"yui-u first">
<DIV class=3Dlogo>
<H1><A =
href=3D"http://europaconcorsi.com/">Europaconcorsi</A></H1></DIV></DIV>
<DIV class=3Dyui-u>
<DIV id=3Dmenu_leading>
<UL id=3Dmenu_nav class=3Dmenu_nav>
  <LI><A href=3D"http://europaconcorsi.com/about">Cos'=C3=A8 =
europaconcorsi?</A> |=20
</LI>
  <LI><A href=3D"http://europaconcorsi.com/register">Registrati</A> | =
</LI>
  <LI><A=20
  onclick=3D"Element.hide('menu_nav'); Element.hide('cse-search-box'); =
Element.show('login'); return false;"=20
  =
href=3D"http://europaconcorsi.com/events/101585-Le-percezioni-psicologich=
e-e-le-patologie-psichiatriche-nella-progettazione-dello-spazio-architett=
onico#"><B>Accedi</B></A></LI></UL>
<DIV style=3D"DISPLAY: none; FLOAT: right" id=3Dlogin>
<FORM method=3Dpost action=3D/session>Email <INPUT id=3Dperson_email =
type=3Dtext=20
name=3Dperson[email]> Password <INPUT id=3Dperson_password =
type=3Dpassword=20
name=3Dperson[password]> <INPUT value=3D1 CHECKED type=3Dcheckbox =
name=3Dremember_me>=20
Ricordami <INPUT=20
value=3D/events/101585-Le-percezioni-psicologiche-e-le-patologie-psichiat=
riche-nella-progettazione-dello-spazio-architettonico=20
type=3Dhidden name=3Dreturn_to> <INPUT value=3DAccedi type=3Dsubmit> <A=20
href=3D"http://europaconcorsi.com/people/forgot_password">Password=20
dimenticata?</A> </FORM></DIV>
<FORM id=3Dcse-search-box action=3Dhttp://europaconcorsi.com/gsearch>
<DIV><INPUT value=3D014539900124813874251:9-owch6sizw type=3Dhidden =
name=3Dcx> <INPUT=20
value=3DFORID:9 type=3Dhidden name=3Dcof> <INPUT size=3D25 type=3Dtext =
name=3Dq> <INPUT value=3DCerca type=3Dsubmit name=3Dsa> =
</DIV></FORM><!-- <script type=3D"text/javascript" =
src=3D"http://www.google.com/coop/cse/brand?form=3Dcse-search-box&lang=3D=
it"></script> --></DIV></DIV></DIV>
<DIV id=3Dnavcontainer>
<UL id=3Dnavlist>
  <LI><A href=3D"http://europaconcorsi.com/projects">Progetti</A></LI>
  <LI><A =
href=3D"http://europaconcorsi.com/contributions">Progettisti</A></LI>
  <LI><A =
href=3D"http://europaconcorsi.com/photographers">Fotografi</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/albums">Albums</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/competitions">Bandi</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/results">Risultati</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/stories">Notizie</A></LI>
  <LI><A id=3Dactive =
href=3D"http://europaconcorsi.com/events">Eventi</A></LI>
  <LI><A class=3Djobs href=3D"http://europaconcorsi.com/jobs">Offerte di =

  Lavoro</A></LI>
  <LI><A class=3Dboards =
href=3D"http://europaconcorsi.com/boards">Enti</A></LI>
  <LI class=3Dabout><A=20
href=3D"http://europaconcorsi.com/about">Aiuto</A></LI></UL></DIV>
<DIV id=3Dleaderboard class=3Dyui-ge>
<DIV class=3D"yui-u first">
<SCRIPT=20
type=3Dtext/javascript>=0A=
        GA_googleFillSlot("Leaderboard");=0A=
      </SCRIPT>
</DIV>
<DIV id=3Dtopright_banner class=3Dyui-u>
<SCRIPT=20
type=3Dtext/javascript>=0A=
  GA_googleFillSlot("250x90_Leaderboard_Right");=0A=
</SCRIPT>
</DIV></DIV><SPAN style=3D"DISPLAY: none" =
id=3Dsystem_working>Attendere...</SPAN>=20
</DIV>
<DIV id=3Dbd>
<DIV id=3Dyui-main>
<DIV class=3D"yui-b content">
<DIV id=3Dcontent>
<DIV id=3Dmessage-board>
<SCRIPT type=3Dtext/javascript>=0A=
      if ($('message-container'))=0A=
        new Effect.Highlight($('message-container'), {startcolor: =
'#ff0000'});=0A=
    </SCRIPT>
</DIV>
<DIV id=3Devent>
<DIV class=3D"summary autoclear"><A=20
href=3D"http://europaconcorsi.com/sources/101584-Lalineabiancastudio"><IM=
G=20
alt=3DImages-1_thumb=20
src=3D"http://s3.amazonaws.com/europaconcorsi/source_covers/1404917/image=
s-1_thumb.jpg"=20
width=3D75 height=3D75></A>=20
<DIV class=3Dinfo>
<DIV class=3Ddetails>Roma (RM), Italia </DIV>
<H3><A=20
href=3D"http://europaconcorsi.com/sources/101584-Lalineabiancastudio">Lal=
ineabiancastudio</A></H3></DIV></DIV>
<DIV id=3Dheadline>
<DIV class=3Dcategory>Giornata di studio </DIV>
<DIV class=3Ddetails>Roma (RM), Italia <SPAN>| <A=20
href=3D"http://europaconcorsi.com/events/101585-Le-percezioni-psicologich=
e-e-le-patologie-psichiatriche-nella-progettazione-dello-spazio-architett=
onico/favorites">Preferenze</A>=20
</SPAN></DIV>
<H1>Le percezioni psicologiche e le patologie psichiatriche nella =
progettazione=20
dello spazio architettonico</H1>
<P class=3Devent_venue><STRONG>Luogo:</STRONG> Casa =
dell=E2=80=99Architettura di Roma,=20
piazza Manfredi Fanti, 47</P>
<P class=3Devent_dates><STRONG>Dal:</STRONG> 15 Luglio 2009 <STRONG>alle =

ore</STRONG> 10 e 00 <STRONG>al:</STRONG> 15 Luglio 2009 (<SPAN=20
class=3Dended>Scaduto</SPAN>) </P></DIV>
<DIV class=3Dyui-navset><SPAN>Pubblicato il 06 Luglio 2009</SPAN>=20
<UL class=3Dyui-nav>
  <LI class=3Dselected><A=20
  =
href=3D"http://europaconcorsi.com/events/101585-Le-percezioni-psicologich=
e-e-le-patologie-psichiatriche-nella-progettazione-dello-spazio-architett=
onico"><EM>Evento</EM></A></LI>
  <LI><A=20
  =
href=3D"http://europaconcorsi.com/events/101585-Le-percezioni-psicologich=
e-e-le-patologie-psichiatriche-nella-progettazione-dello-spazio-architett=
onico/location"><EM>Localit=C3=A0</EM></A></LI></UL><BR></DIV>
<DIV class=3Dbody>
<P>
<P>Nell=E2=80=99ambito del proprio Settore Sviluppo e Ricerca, =
Lalineabiancastudio=20
organizza una giornata dedicata allo studio delle percezioni =
psicologiche e=20
delle patologie psichiatriche nella progettazione architettonica.</P>
<P>Capire, interpretare e progettare uno spazio architettonico anche =
attraverso=20
lo studio della sua percezione psicologica e lo studio =
sull=E2=80=99interpretazione=20
delle devianze del rapporto Spazio / Individuo, riconducibili a vere e =
proprie=20
patologie.<BR>Capire, interpretare e progettare lo spazio architettonico =
anche=20
attraverso lo studio del rapporto suono/spazio</P>
<P>Questo convegno propone un confronto tra diverse aree scientifiche e=20
culturali (obiettivo primo della ricerca de Lalineabiancastudio), con lo =
scopo=20
di: - accorciare le =E2=80=9Cdistanze=E2=80=9D tra le varie =E2=80=93 ed =
oggi ancora distanti =E2=80=93=20
professionalit=C3=A0, quali =E2=80=93 in questo caso =E2=80=93 =
l=E2=80=99ARCHITETTURA, la <SPAN=20
class=3Dcaps>PSICOLOGIA</SPAN> e la <SPAN =
class=3Dcaps>PSICHIATRIA</SPAN>,.=20
attraverso una interdisciplinariet=C3=A0 che tenta la scrittura di nuovi =
statuti e=20
connessioni. - fornire alle relative figure professionali strumenti =
necessari=20
per compiere un viaggio all=E2=80=99interno del mondo =
=E2=80=9Cpercepito=E2=80=9D dall=E2=80=99individuo, al=20
fine di =E2=80=9Ccomporre=E2=80=9D ed impostare una progettazione ed =
un=E2=80=99analisi pi=C3=B9 completa e=20
consapevole.</P>
<P>L=E2=80=99esatta, scientifica e calcolata Costruzione Vitruviana, =
dove funzionalit=C3=A0,=20
estetica e solidit=C3=A0 diventano elementi fondamentali per lo spazio=20
architettonico, non considera le =E2=80=9CDimensioni sensoriali e =
mentali=E2=80=9D dell=E2=80=99uomo che=20
quello spazio lo abita e lo vive.<BR>All=E2=80=99interno del triangolo =
Vitruviano, il=20
suono, ad esempio, non viene considerato elemento determinante; =
cos=C3=AC come la=20
percezione soggettiva, frutto di dinamiche legate alla mente =
dell=E2=80=99individuo,=20
viene inglobata nella sola =E2=80=9Cgiusta ed attenta =
proporzione=E2=80=9D.</P>
<P>In questo Convegno, professori, docenti, studiosi ed esperti, =
dibatteranno su=20
4 elementi specifici che coinvolgono l=E2=80=99uomo nella progettazione =
architettonica:=20
le <SPAN class=3Dcaps>PERCEZIONI PSICOLOGICHE</SPAN> dello spazio =
fisico, le <SPAN=20
class=3Dcaps>PATOLOGIE PSICHIATRICHE</SPAN> nella percezione dello =
spazio fisico,=20
le <SPAN class=3Dcaps>PERCEZIONI SENSORIALI</SPAN> dello e nello spazio =
e infine=20
le <SPAN class=3Dcaps>SONORITA</SPAN>=E2=80=99 SPAZIALI.</P>
<P>I lavori del Convegno mirano quindi allo studio e alla esegesi di: - =
una=20
<SPAN class=3Dcaps>PROGETTAZIONE DELLO SPAZIO =
FISICO</SPAN>/ARCHITETTONICO che si=20
connota da un lato attraverso differenti percezioni derivanti dalla =
realt=C3=A0=20
interna dell=E2=80=99uomo, dall=E2=80=99altro attraverso diverse =
realt=C3=A0 fisiche poste in essere=20
dall=E2=80=99individuo e scaturite da patologiche psichiatriche dello =
stesso.<BR>- una=20
<SPAN class=3Dcaps>PROGETTAZIONE DELLO SPAZIO =
FISICO</SPAN>/ARCHITETTONICO che si=20
definisce anche attraverso lo studio delle =
=E2=80=9Csonorit=C3=A0=E2=80=9D e dei =E2=80=9Crumori=E2=80=9D contenuti =

nello stesso Spazio.</P>
<P>Direzione scientifica di Rosario Marrocco.<BR>Interverranno tra gli =
altri gli=20
architetti Franco Purini, Antonino Terranova, Amedeo Schiattarella gli=20
psichiatri Gabriel Levi, Paola Argentino, Roberto Malano, gli psicologi =
Lory=20
Zaccaria, Patrizia Peresso, Mirillia Bonnes, Vezio Ruggieri, Giuseppe =
Carrus, i=20
musicisti Enrico Cocco, Paolo Giommoni</P>
<P></P>
<H2>Progettisti menzionati</H2>
<DIV class=3D"summary autoclear"><A=20
href=3D"http://europaconcorsi.com/people/9129-Franco-Purini"><IMG=20
alt=3D"Senza icona"=20
src=3D"http://europaconcorsi.com/images/image_placeholder.png?1248796221"=
 width=3D75=20
height=3D75></A>=20
<DIV class=3Dinfo>
<DIV class=3Dcity>Roma (RM), Italia</DIV>
<H3><A =
href=3D"http://europaconcorsi.com/people/9129-Franco-Purini">Franco=20
Purini</A> </H3>
<DIV class=3Dperson_extra>
<DIV id=3Dperson_ratings_9129 class=3Dperson_ratings>Rating: 109 | <A=20
onclick=3D"new =
Ajax.Request('/contributions/show_or_hide_details?person_id=3D9129-Franco=
-Purini', {asynchronous:true, evalScripts:true, =
parameters:'is_visible=3D' + =
Element.visible('person_rating_details_9129')}); return false;"=20
href=3D"http://europaconcorsi.com/events/101585-Le-percezioni-psicologich=
e-e-le-patologie-psichiatriche-nella-progettazione-dello-spazio-architett=
onico#"><SPAN=20
id=3Ddetails_label_9129>Mostra dettagli</SPAN></A> </DIV>
<DIV style=3D"DISPLAY: none" id=3Dperson_rating_details_9129=20
class=3Dperson_rating_details></DIV></DIV></DIV></DIV>
<DIV class=3D"summary autoclear"><A=20
href=3D"http://europaconcorsi.com/people/17487-Antonino-Terranova"><IMG=20
alt=3D"Senza icona"=20
src=3D"http://europaconcorsi.com/images/image_placeholder.png?1248796221"=
 width=3D75=20
height=3D75></A>=20
<DIV class=3Dinfo>
<DIV class=3Dcity>Roma (RM), Italia</DIV>
<H3><A =
href=3D"http://europaconcorsi.com/people/17487-Antonino-Terranova">Antoni=
no=20
Terranova</A> </H3></DIV></DIV>
<DIV class=3D"summary autoclear"><A=20
href=3D"http://europaconcorsi.com/people/11338-Amedeo-Schiattarella"><IMG=
=20
alt=3D"Senza icona"=20
src=3D"http://europaconcorsi.com/images/image_placeholder.png?1248796221"=
 width=3D75=20
height=3D75></A>=20
<DIV class=3Dinfo>
<DIV class=3Dcity>Roma (RM), Italia</DIV>
<H3><A =
href=3D"http://europaconcorsi.com/people/11338-Amedeo-Schiattarella">Amed=
eo=20
Schiattarella</A> </H3>
<DIV class=3Dperson_extra>
<DIV id=3Dperson_ratings_11338 class=3Dperson_ratings>Rating: 16 | <A=20
onclick=3D"new =
Ajax.Request('/contributions/show_or_hide_details?person_id=3D11338-Amede=
o-Schiattarella', {asynchronous:true, evalScripts:true, =
parameters:'is_visible=3D' + =
Element.visible('person_rating_details_11338')}); return false;"=20
href=3D"http://europaconcorsi.com/events/101585-Le-percezioni-psicologich=
e-e-le-patologie-psichiatriche-nella-progettazione-dello-spazio-architett=
onico#"><SPAN=20
id=3Ddetails_label_11338>Mostra dettagli</SPAN></A> </DIV>
<DIV style=3D"DISPLAY: none" id=3Dperson_rating_details_11338=20
class=3Dperson_rating_details></DIV></DIV></DIV></DIV>
<H2>Allegati</H2>
<TABLE class=3Ditem_list>
  <THEAD>
  <TR>
    <TH>File</TH>
    <TH>Descrizione</TH>
    <TH>Dimensione</TH></TR></THEAD>
  <TFOOT></TFOOT>
  <TBODY>
  <TR>
    <TD><A=20
      =
href=3D"http://s3.amazonaws.com/europaconcorsi/event_attachments/1404939/=
Invito.pdf">Invito.pdf</A>=20
    </TD>
    <TD>Invito</TD>
    <TD><A=20
      =
href=3D"http://s3.amazonaws.com/europaconcorsi/event_attachments/1404939/=
Invito.pdf">492.2=20
      KB</A> </TD></TR></TBODY></TABLE>
<H2 style=3D"MARGIN-TOP: 1em">Risorse</H2>
<TABLE class=3Ditem_list>
  <TBODY>
  <TR>
    <TD><A=20
      =
href=3D"http://www.lalineabiancastudio.com/repository/PROGRAMMA_CONVEGNO_=
lalineabiancastudio.pdf">Programma</A>=20
    </TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV></DIV>
<DIV class=3D"yui-b sidebar">
<DIV id=3Dsidebar>
<SCRIPT=20
type=3Dtext/javascript>=0A=
  GA_googleFillSlot("250x250_Sidebar_Top");=0A=
</SCRIPT>
<!-- <div style=3D"text-align: center"></div> -->
<DIV class=3D"yui-navset sidebar">
<UL class=3Dyui-nav>
  <LI class=3Dselected><A =
href=3D"http://europaconcorsi.com/jobs"><EM>Offerte di=20
  Lavoro</EM></A></LI></UL>
<DIV class=3Dsidebar_highlights>
<DIV class=3D"summary_highlight autoclear">
<DIV class=3Dcategory>(OG), Italia</DIV>
<H3><A=20
href=3D"http://europaconcorsi.com/jobs/240-cercasi-societ-per-partecipazi=
one-a-bandi-d-incarichi-in-Sardegna-geologo-marco-marcato">cercasi=20
societ=C3=A0 per partecipazione a bandi d'incarichi in Sardegna</A>, =
<SPAN=20
class=3Djob_company>geologo marco marcato</SPAN></H3></DIV>
<DIV class=3D"summary_highlight autoclear">
<DIV class=3Dcategory>Molfetta (BA), Italia</DIV>
<H3><A=20
href=3D"http://europaconcorsi.com/jobs/238-Collaboratori-per-tirocinio-o-=
stage-Studio-Veneziano-team">Collaboratori=20
per tirocinio o stage</A>, <SPAN class=3Djob_company>Studio=20
Veneziano+team</SPAN></H3></DIV>
<DIV class=3D"summary_highlight autoclear">
<DIV class=3Dcategory>Prato (PO), Italia</DIV>
<H3><A=20
href=3D"http://europaconcorsi.com/jobs/237-neolaureato-ingegneria-civile-=
Engineering-Projects-srl">neolaureato=20
ingegneria civile</A>, <SPAN class=3Djob_company>Engineering Projects=20
srl</SPAN></H3></DIV>
<DIV class=3D"summary_highlight autoclear">
<DIV class=3Dcategory>Bellante (TE), Italia</DIV>
<H3><A=20
href=3D"http://europaconcorsi.com/jobs/232-cercasi-collaboratori-per-la-p=
artecipazione-a-concorsi-di-progettazione-oscar-di-domenico-architetto">c=
ercasi=20
collaboratori per la partecipazione a concorsi di progettazione</A>, =
<SPAN=20
class=3Djob_company>oscar di domenico =
architetto</SPAN></H3></DIV></DIV></DIV>
<DIV class=3Dsidebar_ads>
<SCRIPT type=3Dtext/javascript>=0A=
  GA_googleFillSlot("Sponsor_250x90");=0A=
</SCRIPT>
</DIV>
<DIV class=3Dsidebar_ads>
<SCRIPT type=3Dtext/javascript>=0A=
  GA_googleFillSlot("Sponsor_due");=0A=
</SCRIPT>
</DIV>
<DIV class=3Dsidebar_ads>
<SCRIPT=20
type=3Dtext/javascript>=0A=
  GA_googleFillSlot("250x250_Sidebar_Bottom");=0A=
</SCRIPT>
</DIV>
<DIV style=3D"TEXT-ALIGN: center" class=3Dsidebar_ads>
<SCRIPT type=3Dtext/javascript><!--=0A=
google_ad_client =3D "pub-6301114576447358";=0A=
/* 160x600 Skyscraper bottom */=0A=
google_ad_slot =3D "0502054794";=0A=
google_ad_width =3D 160;=0A=
google_ad_height =3D 600;=0A=
//-->=0A=
</SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://pagead2.googlesyndication.com/pagead/show_ads.js">=0A=
</SCRIPT>
</DIV></DIV></DIV></DIV>
<DIV id=3Dft>
<DIV class=3Dyui-gb>
<DIV class=3D"yui-u first">
<DIV class=3Dft-contents>
<H2>Cosa puoi fare su Europaconcorsi</H2>
<OL>
  <LI><A href=3D"http://europaconcorsi.com/explore">Esplora =
europaconcorsi!</A>=20
  Scopri modi di pensare l'architettura diversi dal tuo e goditi il =
piacere di=20
  partecipare ad un mondo pi=C3=B9 aperto con le nostre aggiornatissime =
<A=20
  =
href=3D"http://europaconcorsi.com/about/newsletters_and_rss_feeds">newsle=
tters e=20
  i Feed Rss</A> </LI>
  <LI>Comunica al mondo la tua professionalit=C3=A0! <A=20
  href=3D"http://europaconcorsi.com/explore">Pubblica i tuoi =
progetti</A> e le <A=20
  href=3D"http://europaconcorsi.com/explore">informazioni sul tuo =
studio</A> e usa=20
  il nostro database per pubblicare il tuo <A=20
  href=3D"http://europaconcorsi.com/explore">sito internet =
autonomo</A></LI>
  <LI><A=20
  =
href=3D"http://europaconcorsi.com/about/what_you_can_do/contents">Pubblic=
a i=20
  tuoi annunci!</A>. Su Europaconcorsi puoi pubblicare gratuitamente =
<B>offerte=20
  di lavoro, notizie, eventi e informazioni sulla tua azienda e i tuoi=20
  prodotti</B>. Siamo lieti di contribuire al successo delle tue =
iniziative!=20
  </LI></OL>
<H2>Archivio</H2>
<UL>
  <LI><A href=3D"http://europaconcorsi.com/frontcovers">Vedi tutte le=20
  Copertine</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/previews">Newsletter=20
Preview</A></LI></UL></DIV></DIV>
<DIV class=3Dyui-u>
<DIV class=3Dft-contents>
<H2>Account gratuito o a pagamento?</H2>
<UL>
  <LI>Scopri tutto quello che puoi fare con un <A=20
  href=3D"http://europaconcorsi.com/register">account gratuito</A> e i =
vantaggi=20
  offerti dagli <A href=3D"http://europaconcorsi.com/register">account=20
  illimitati</A></LI>
  <LI>Quanto costa l=E2=80=99account illimitato <A=20
  href=3D"http://europaconcorsi.com/register">=E2=80=9CPro=E2=80=9D</A> =
e come ragistrare un=20
  account illimitato <A=20
  =
href=3D"http://europaconcorsi.com/register">=E2=80=9CLog-on=E2=80=9D</A>?=
</LI>
  <LI>Quali sono i <A href=3D"http://europaconcorsi.com/boards">100 =
enti</A> che=20
  offrono ai propri iscritti un account illimitato =
=E2=80=9CLog-on=E2=80=9D <A=20
  href=3D"http://europaconcorsi.com/logon">e perch=C3=A9?</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/logon">Promuovi Log-on presso =
il tuo=20
  ordine!</A></LI></UL>
<H2>Links</H2>
<UL>
  <LI><A href=3D"http://europaconcorsi.com/about/all/need_help">Hai =
bisogno=20
  d=E2=80=99aiuto?</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/about/advertising">La tua =
pubblicit=C3=A0 su=20
  ec</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/register">Registazione nuovi=20
  account</A></LI>
  <LI><A href=3D"http://europaconcorsi.com/logon">Informazioni su =
Log-on</A></LI>
  <LI><A=20
  =
href=3D"http://europaconcorsi.com/about/newsletters_and_rss_feeds">Serviz=
i=20
  newsletters e Feed Rss</A></LI></UL></DIV></DIV>
<DIV class=3Dyui-u>
<DIV class=3Dft-contents>
<H2>A proposito di europaconcorsi...</H2>
<P>Europaconcorsi =C3=A8 un sito internet dedicato ai professionisti =
della=20
progettazione architettonica</P>
<P>La qualit=C3=A0 del nostro servizio =C3=A8 tale che <B>100 Ordini =
professionali=20
italiani</B> hanno delegato a noi il servizio d'informazione =
professionale verso=20
i loro iscritti e offrono a tutti loro un account europaconcorsi =
illimitato.</P>
<P>Europaconcorsi =C3=A8 il pi=C3=B9 aggiornato e completo servizio =
d=E2=80=99informazione sui=20
<B>bandi di progettazione</B>, la pi=C3=B9 vasta banca dati dedicata ai =
<B>risultati=20
dei concorsi di progettazione</B> in Italia ed all'estero e il pi=C3=B9 =
vasto=20
archivio di <B>architettura contemporanea</B> online.... <A=20
href=3D"http://europaconcorsi.com/about">continua</A></P>
<P class=3Dtwitter><A href=3D"http://twitter.com/europaconcorsi"><IMG=20
class=3Dbottom_icons alt=3D"Segui Europaconcorsi su Twitter"=20
src=3D"http://europaconcorsi.com/images/twitter_logo_s.png?1246015401" =
width=3D88=20
height=3D21></A> <A href=3D"http://twitter.com/europaconcorsi">Seguici =
su=20
Twitter</A> </P></DIV></DIV></DIV>
<DIV class=3Dyui-g>
<DIV class=3D"yui-u first">
<DIV class=3D"ft-contents archiwatch">
<H2>Archiwatch di G. Muratore</H2>
<SCRIPT type=3Dtext/javascript charset=3Dutf-8=20
src=3D"http://feeds.feedburner.com/archiwatch?format=3Dsigpro&amp;openLin=
ks=3Dnew&amp;displayDate=3Dtrue&amp;dateFormat=3Dd/M&amp;nItems=3D4&amp;d=
isplayTitle=3Dfalse"></SCRIPT>
</SCRIPT></DIV></DIV>
<DIV class=3Dyui-u>
<DIV class=3Dbusiness_card>
<P>Europaconcorsi srl Piazza Gentile da Fabriano 3, 00196 Roma =
Italia<BR>T.=20
0698386090 - F. 0660513623 </P>
<P>Email:
<SCRIPT =
type=3Dtext/javascript>eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6=
9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%69%6e%66%6f=
%40%65%75%72%6f%70%61%63%6f%6e%63%6f%72%73%69%2e%63%6f%6d%22%3e%49%6e%66%=
6f%3c%2f%61%3e%27%29%3b'))</SCRIPT>
 |
<SCRIPT =
type=3Dtext/javascript>eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6=
9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%73%61%6c%65=
%73%40%65%75%72%6f%70%61%63%6f%6e%63%6f%72%73%69%2e%63%6f%6d%22%3e%41%62%=
62%6f%6e%61%6d%65%6e%74%6f%3c%2f%61%3e%27%29%3b'))</SCRIPT>
 |
<SCRIPT =
type=3Dtext/javascript>eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6=
9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%73%75%70%70=
%6f%72%74%40%65%75%72%6f%70%61%63%6f%6e%63%6f%72%73%69%2e%63%6f%6d%22%3e%=
53%75%70%70%6f%72%74%6f%3c%2f%61%3e%27%29%3b'))</SCRIPT>
 |
<SCRIPT =
type=3Dtext/javascript>eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6=
9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%70%72%65%73=
%73%40%65%75%72%6f%70%61%63%6f%6e%63%6f%72%73%69%2e%63%6f%6d%22%3e%53%74%=
61%6d%70%61%3c%2f%61%3e%27%29%3b'))</SCRIPT>
 </P><A href=3D"http://europaconcorsi.com/about/contacts">Contatti</A> | =
<A=20
href=3D"http://europaconcorsi.com/tos">Termini d=E2=80=99uso</A> | <A=20
href=3D"http://europaconcorsi.com/privacy">Privacy</A> | <A=20
href=3D"http://europaconcorsi.com/guidelines">Linee Guida</A> | <A=20
href=3D"http://europaconcorsi.com/copyright">Copyright</A><BR>=C2=A9 =
2009=20
Europaconcorsi =C2=AE P.I. 06600401001. Tutti i diritti riservati.=20
</DIV></DIV></DIV></DIV></DIV></BODY></HTML>

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://s3.amazonaws.com/europaconcorsi/source_covers/1404917/images-1_thumb.jpg

/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAoHBwkHBgoJCAkLCwoMDxkQDw4ODx4WFxIZJCAmJSMg
IyIoLTkwKCo2KyIjMkQyNjs9QEBAJjBGS0U+Sjk/QD3/wAALCABLAEsBAREA/8QAHAABAAICAwEA
AAAAAAAAAAAAAAEEAgcDBQYI/8QANhAAAQMDAgEKBAQHAAAAAAAAAQACAwQFERIhBgcTFiIxQVFW
lNEUFTJCI1JhgSRiY3GRkqH/2gAIAQEAAD8A3MiIiIiIiIiIiIiIiIiIiL5S6dcUeYLl6l3unTri
jzBcvUu906dcUeYLl6l3unTrijzBcvUu906dcUeYLl6l3unTrijzBcvUu91s/kUv10vNfdmXK41V
W2KKMsE0pdpJLs4ytvKF0ptl2LnEXlzRqOBzLdhnZfNFvsclwhpzTPHOSOcCHtJGxaB2A/m79lnJ
YPwWPE7YxoDnukJwCQzYAAnteofw1WxxsMhjZrIGOt2EkA7DB7O7J/RZzcOSwwta6eIVB14jOoF7
RGyQY22Ol/3Y8FHRmokdIY3xhjJTGdZPVAcRkuxju7lWkskkURkdU04jcMxOJcOd6urbbbY/dhbL
5JWO4ar7galrpBVRxiMx7DILs516f28e5bThvsT4JZZ4pIeadh2rB2MjmA7Hxaq54jDKjTLBLDDo
Y9usAuk1BxGMH+Xv/dckvEtDDK6Ooklp5WnDo3AZb/gkLzj+Ti127RFbbdUTRB4d16vYEHOoAg7g
qq/k5pJYnMfapseHzA4O7cd230t/1XKeT+m16hapC4fca3JfkHIJx2dY7KXcBUz49BtUgb9I/jAM
NLA04IHV6rQ1Q/gekAfz1tmjYcgyGuGSC4uAzj8zuzKrs4Et8QbALW7GOq03IamY6u2QcbbHC7Wj
4agt7XmOhbmZnXzWYByet2YyD2lX/hNUoMttYIw8ED4vLSdWoZbnBwTqA/VcTKOQam/J4ZG6cZfX
ZIaMgAZzgDJx4LIUjjvJZad787ufVaif7nvXq8JgIir1NNDWQOhnZrjd2jcd6ps4dtbG6W0ceN9t
+/8AdS6wW54Y19LG4MGGg52GSfHxKfILdpLfhW4L+cI1H6sY8VHRu16Xt+EbiQ5cNbt/+rA8MWpx
JNJuf6jvddwiIiIiIiIiIiIiIiIiIiL/2Q==

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://europaconcorsi.com/images/image_placeholder.png?1248796221

iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAMAAAAPkIrYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAYBQTFRF6+vr////29vbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAvt9RAwAAAD1JREFUeNrs2AENACAQA7Hx/kUjgiUQ0hNQAZfplVmt3rZyHovFYrFYLBaL
xWKxWCwWi8W6aH3/MXttAQYAYBYFmcI68EIAAAAASUVORK5CYII=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://europaconcorsi.com/images/twitter_logo_s.png?1246015401

iVBORw0KGgoAAAANSUhEUgAAAFgAAAAVCAMAAAD1jdm0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAwBQTFRF0vT/Hsf/n+f/ouf/adn/R9H/Jsn/Msz/J8n/K8r/KMn/LMr/
Ksr/MMv/L8v/9/3/Kcn/Lsv/Lcr/T9P/Mcv/IMf/I8j/7vv/+P3/9Pz/Mcz/Kcr/Q9D/Isj/a9r/
Jcn/+v7//v//3Pb/TNL/Lcv/N83/+f3/VNX/9v3/uu7/O87/UdT/JMj/i+L/ve//YNf/S9L/l+X/
iOH/suz/p+n/5/n/Jcj/TtP/+/7/HMb/3/f/+f7/ouj/8vz/nOb/dNz/ieL/guD/ZNj/SNH/Nc3/
/f//u+7/tez/o+j/UNT/pOj/6vr/1/X/zPL/yfH/WdX/OM3/QM//leT/adr/W9b/Ydf/ruv/+P7/
5Pj/StL/r+v/1PT/wvD/Ns3/b9v/VtX/qer/P8//uO3/Z9n/X9f/y/L/eN3/q+r/Jsj/2fb/vO7/
/P7/LMv/3vf/Hcf//f7/hOH/6/r/QtD/XNb/Lsr/tOz/6fn/UtT/7Pr/h+H/wO//mOX/6fr/e97/
Icj/YNj/sOz/jeL/9P3/U9T/Qc//3fb/TdL/atr/rOr/rer/Hcb/1fT/luX/keT/VNT/1vX/4ff/
ieH/Os7/yPH/2vb/yvL/WNX/qur/2/b/dt3/d93/Xdb/Ps//8fv/zvP/0PP/t+3/6Pn/j+P/Ytj/
ue7/9f3/keP/fd//f9//SdH/StH/WtX/z/P/heH/X9j/7fr/w/D/2PX/K8v/SdL/bNr/xvH/Oc7/
V9X/ed7/TtL/RdH/m+X/meX/qun/7/v/4vj/vO//ve7/Wdb/gN//3ff/9vz/cNz/oej/s+z/TNP/
pej/Isf/3vb/Ydj/PM7/Ksn/HMf/T9T/Nsz/cdv/rur/mub/8fz/5fj/Msv/tu3/k+T/Qs//hOD/
TdP/heD/5Pn/we//geD/h+L/pOn/zfP/rev/xPD/KMr/8/z/5vn/NM3/Ncz/sOv/pun/neb/lOT/
g+D/8Pv/ddz/btv/aNr/Zdj/0fP/ue3/juP/fN7/et7/Ztn/NMz/M8z/////////vv6R1wAAAQB0
Uk5T////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////AFP3ByUAAARbSURBVHjahJV1YBNJFMZbZGdW
4yFNSFP3UneBKlVoqVLDiru7O4dzOBx27u7u7u7u7jLzyuymaVPotd8fu28m3/528t7MW58O0NTx
/wIveU109C0fZkkP68unQvzUi22u28auEf2TGfjA7rTIPnwADw7flKeDbWOva1ZdAIG5g/Mf6h9s
MzlTq2/qC5yQIfomzafYcuNMZgPwcUhzjvYPHlKtmMnmriR6HvDK588WYhlYwSMxPkIzvIOJtNAb
DBekrhM81GAO3Qs9S9T1FlUV76Wayg9ISDRpuYVtApHiPAXsUVcvhAZG5Jw/U03bKJbAQPcvAdB9
nz/5JDyip6KpQZv6jK24Di5Wj/2jgSmVBFXOqFXXHzr0OZue+Ub83TnsXv7blvEAuqB0mKGCT2bZ
bADZDNzOIptGuCy2Zu2keS3u9TT+NKg97vh/lV1g4hb+Ms5iGZ3O3FjY8SMzJmZglPLRK9LxnJv1
FIUuDQ+P9l9yGBP7/vDw8NJfl0HYcjFGEHDqV1tXMXvxCavgcDgswX4esMAxuSxLU4IXLbqW7dpI
TLlE5nwN05Dp7/qafaeekhBFPNOOf08LlNrVMGMenLWY7YJyK4/W1PpBpV0iVJZlKWqIG4wKE1cm
JCSMyU3JGms0stfBMD3iYhl4OEbKpZ9yhLsvSLFTTbiuRXJHJKYtpVCRo8qCRtUYqTM7sBYThQ+t
ai0c0JkKc9WZzpRv6A08goFzz7wqs1Lo9Vha3GxElL6k13PyqO0cMd5T9lTJYwp15DfLSIlKCgo6
0ugu3gKv7bbhNqNxyxMAKxj4bzY+ysDTVfD9EZsMZjpw4sikPyHzW7O8P/n0yKcrYD1HiWy1WgWz
jMc1SXTaru7tdkVBCOJHdo51z4jKgjcBvuAoXs3GkwQkz97HwDthNDshPpopp8Aoo0wtPMtR2tqK
EK2aELrzez3lDns2tQ8EbsVUqR4wrLg48mMbnBOoeHXjwXgjNYeue6sE2Q0nvl7OwGPgExcxRj8w
7K9LAPwFaqxtevjyIGjiCL/71OObj8y4IRleFyiX7DmRbA2RLkQUgRVZ4galb3+OUv5OFELYXzRE
zbIT6zHI08AtGJEQPe8IqYepMYSKel4gd/wyYRZ62z+7PvYakTy/+AJw0RSLnWhlRtMOhsWtQVS2
ExkbCJIpEV6cDVe5vnNdCVkvOKlqw+PAz5SqhsT6O9RzIVTCWFBEw951mLie7QKzc+g3BXO8yPMi
Vm6BJe1OLEouuvpep0PUW4dOBsh9WbIksVN1lxXzojjndoA98VaBhRl5ACUkxiHygtVcBiucDsvE
brB6wiPbNqaZTGml49X6/ZBv2nisEjITR6ct3PWNWqx/Cvap3wK/7PxoU/AfatmWrawrNQU/Wc7C
Pe8/+kH02hEs9QHrB3+o8wJrvSNAx+RpPDZ3MFdX1DkR5mktDTqdJ7R1hUURDV6+jm5wRy8d86Ke
1bND9tbROnp8Cs8LMADJ9qhRGfQQaQAAAABJRU5ErkJggg==

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/ads.css?1248796221

#topright_banner {
	WIDTH: 25.3%
}
#topright_banner H3 {
	MARGIN-TOP: 0.3em; MARGIN-BOTTOM: 0.3em; FONT-WEIGHT: bold
}
#topright_banner A {
	COLOR: #6392d1
}
#ads {
	MARGIN: 0.6em 0px
}
.adsense {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 0.7em; LINE-HEIGHT: 1.2em; PADDING-LEFT: 0.7em; =
PADDING-RIGHT: 0.7em; DISPLAY: block; HEIGHT: 6.4em; COLOR: #999; =
BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; =
TEXT-DECORATION: none; PADDING-TOP: 0.7em
}
.adsense:hover {
	BORDER-BOTTOM-COLOR: #0f5bb5; BORDER-TOP-COLOR: #0f5bb5; COLOR: #333; =
BORDER-RIGHT-COLOR: #0f5bb5; BORDER-LEFT-COLOR: #0f5bb5; CURSOR: pointer
}
.adsense_sidebar {
	BORDER-BOTTOM: transparent 1px solid; BORDER-LEFT: #ccc 1px solid; =
BORDER-TOP: medium none; BORDER-RIGHT: #ccc 1px solid
}
.sidebar.adsense {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: transparent 1px solid; =
BORDER-TOP: transparent 1px solid; BORDER-RIGHT: transparent 1px solid
}
.single.adsense {
	TEXT-ALIGN: center; LINE-HEIGHT: 2em
}
.adsense .line1 {
	COLOR: #0f5bb5; FONT-SIZE: 116%; FONT-WEIGHT: bold
}
.single.adsense .line1 {
	FONT-SIZE: 182%
}
.single.adsense .line2 {
	FONT-SIZE: 138.5%
}
.single.adsense .line3 {
	FONT-SIZE: 138.5%
}
.single.adsense .visible_url {
	FONT-SIZE: 138.5%
}
.adsense .line2 {
	COLOR: #333; FONT-SIZE: 93%
}
.adsense .line3 {
	COLOR: #333; FONT-SIZE: 93%
}
.adsense .visible_url {
	TEXT-DECORATION: underline
}
.adsense:hover .visible_url {
	COLOR: #0f5bb5
}
#ads .ads_by_google {
	POSITION: absolute; PADDING-BOTTOM: 0pt; BACKGROUND-COLOR: #ffffff; =
MARGIN: -0.6em 0pt 0pt 65em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
PADDING-TOP: 0pt
}
#ads .ads_by_google A {
	COLOR: #ccc
}
#ads .ads_by_google A:visited {
	COLOR: #ccc
}
#ads .ads_by_google A:hover {
	COLOR: #0f5bb5
}
.sidebar.yui-navset {
	MARGIN-TOP: 1em
}
.sidebar_ads {
	MARGIN-TOP: 1em
}
.advertise_here {
	POSITION: absolute; PADDING-BOTTOM: 0pt; MARGIN: -1em 0pt 0pt 19em; =
PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; BACKGROUND: #ffffff 0% 50%; =
FONT-SIZE: 77%; PADDING-TOP: 0pt
}
.leaderboard.advertise_here {
	MARGIN-LEFT: 85em
}
.advertise_here A {
	COLOR: #cccccc
}
.advertise_here A:visited {
	COLOR: #cccccc
}
.advertise_here A:hover {
	COLOR: #0f5bb5
}
.sidebar_highlights {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
MARGIN-BOTTOM: 1em; BORDER-TOP: transparent 1px solid; BORDER-RIGHT: =
#ccc 1px solid
}
#sidebar .archiwatch {
	MARGIN: 1em 0px; WIDTH: 250px; BACKGROUND: =
url(../images/archiwatch.png) no-repeat 0px 0px; HEIGHT: 250px; =
FONT-SIZE: 93%
}
#sidebar .archiwatch UL {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 5em
}
#sidebar .archiwatch UL LI {
	MARGIN: 1.2em 0px 0px 0.5em; COLOR: #999999
}
#sidebar .archiwatch UL LI .headline A {
	COLOR: #0f5bb5; TEXT-DECORATION: none
}
#sidebar .archiwatch UL LI .headline A:hover {
	TEXT-DECORATION: underline
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/contents.css?1248796221

.autoclear:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
.summary {
	PADDING-BOTTOM: 1em; MIN-HEIGHT: 75px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; DISPLAY: block; BACKGROUND: =
url(../images/dotted.gif) repeat-x 50% bottom; COLOR: #333; =
TEXT-DECORATION: none; PADDING-TOP: 1em
}
.summary:hover {
	BACKGROUND-COLOR: #f2f2f2
}
.summary H3 {
	FONT-SIZE: 144%
}
.summary H3 A {
	COLOR: #0f5bb5; TEXT-DECORATION: none
}
.summary H3 A:hover {
	COLOR: #0f5bb5; TEXT-DECORATION: underline
}
.summary IMG {
	FLOAT: left; MARGIN-RIGHT: 1em
}
.summary .info {
	MARGIN-LEFT: 90px
}
.summary .in_source.info {
	MARGIN-LEFT: 0px
}
.summary H3 {
	MARGIN: 0px
}
.summary .content_type {
	COLOR: #ff9900
}
.summary .category {
	COLOR: #568f20
}
#content #headline .category {
	COLOR: #568f20
}
.summary .category STRONG {
	COLOR: #333
}
.summary .info .category SPAN.published_on {
	COLOR: #999; FONT-SIZE: 85%
}
.image_placeholder {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; WIDTH: =
75px; FLOAT: left; HEIGHT: 75px; BORDER-TOP: #ccc 1px solid; =
BORDER-RIGHT: #ccc 1px solid
}
#content H1 {
	FONT-SIZE: 197%
}
#content #headline {
	MARGIN-TOP: 1em
}
#content P A {
	COLOR: #0f5bb5
}
#content P A:visited {
	COLOR: #0f5bb5
}
#content TABLE A {
	COLOR: #0f5bb5
}
#content TABLE A:visited {
	COLOR: #0f5bb5
}
#content #headline .details SPAN {
	COLOR: #999; FONT-SIZE: 93%
}
.yui-navset SPAN {
	FLOAT: left; FONT-SIZE: 93%
}
.yui-navset SPAN.job_company {
	FLOAT: none; COLOR: #333; FONT-WEIGHT: bold
}
#content P {
	FONT-SIZE: 108%
}
#content .body P SPAN {
	FONT-WEIGHT: bold
}
#content .body P SPAN.today {
	COLOR: red
}
#content .body H2 {
	COLOR: #568f20
}
H2.contents_subcategory {
	MARGIN-TOP: 0.4em
}
TABLE.item_list {
	MARGIN-TOP: 0.5em; WIDTH: 98%; MARGIN-LEFT: auto; MARGIN-RIGHT: auto
}
TABLE.item_list TH {
	BORDER-BOTTOM: 0px; TEXT-ALIGN: left; BORDER-LEFT: 0px; PADDING-BOTTOM: =
0.5em; BACKGROUND-COLOR: silver; PADDING-LEFT: 0.5em; PADDING-RIGHT: =
0.5em; COLOR: white; BORDER-TOP: 0px; FONT-WEIGHT: bold; BORDER-RIGHT: =
0px; PADDING-TOP: 0.5em
}
TABLE.item_list TD {
	BORDER-BOTTOM: gray 1px dotted; TEXT-ALIGN: left; BORDER-LEFT: 0px; =
PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
VERTICAL-ALIGN: top; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: =
0.5em
}
TABLE.item_list TD.blockquote_1 {
	PADDING-LEFT: 2em
}
TABLE.item_list TD.blockquote_2 {
	PADDING-LEFT: 4em
}
#favorites .from {
	MARGIN-TOP: -1.5em; FLOAT: right; COLOR: #999; FONT-SIZE: 93%
}
#category_selector .category_menu {
	COLOR: #376bb5; CURSOR: pointer; TEXT-DECORATION: underline
}
#category_selector {
	MARGIN-TOP: 0.5em
}
#category_selector UL.sub_nav {
	MARGIN-BOTTOM: 0.5em
}
#category_selector UL.menu LI {
	LIST-STYLE-TYPE: none
}
#category_selector UL.menu {
	MARGIN-TOP: 0.5em; MARGIN-LEFT: 0px; BORDER-TOP: #e6e6e6 1px solid
}
#category_selector UL.menu LI A.active {
	BACKGROUND-IMAGE: url(../images/li-arrow-right.gif); BORDER-BOTTOM: =
#e3d165 1px solid; BORDER-LEFT: #e3d165 1px solid; BACKGROUND-COLOR: =
#fff2a2; BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: 95% center; =
COLOR: #51470d; BORDER-TOP: #e3d165 0pt solid; BORDER-RIGHT: #e3d165 1px =
solid
}
#category_selector UL.menu LI A:hover {
	BACKGROUND-IMAGE: url(../images/li-arrow-right.gif); BORDER-BOTTOM: =
#e3d165 1px solid; BORDER-LEFT: #e3d165 1px solid; BACKGROUND-COLOR: =
#fff2a2; BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: 95% center; =
COLOR: #51470d; BORDER-TOP: #e3d165 0pt solid; BORDER-RIGHT: #e3d165 1px =
solid
}
#category_selector UL.menu LI A {
	BACKGROUND-IMAGE: url(../images/li-bg.png); BORDER-BOTTOM-COLOR: =
#e6e6e6; BACKGROUND-COLOR: #f1f1f1; BORDER-TOP-COLOR: #e6e6e6; =
PADDING-LEFT: 0.5em; BACKGROUND-REPEAT: repeat-x; BORDER-TOP-WIDTH: 0pt; =
COLOR: #5591d8; BORDER-RIGHT-COLOR: #e6e6e6; FONT-SIZE: 100%; =
BORDER-LEFT-COLOR: #e6e6e6
}
#category_selector .menu A.active {
	BORDER-BOTTOM: #e3d165 1px solid; BORDER-LEFT: #e3d165 1px solid; =
BACKGROUND-COLOR: #fff2a2; COLOR: #51470d; BORDER-TOP: #e3d165 1px =
solid; BORDER-RIGHT: #e3d165 1px solid
}
#category_selector .menu A:hover {
	BORDER-BOTTOM: #e3d165 1px solid; BORDER-LEFT: #e3d165 1px solid; =
BACKGROUND-COLOR: #fff2a2; COLOR: #51470d; BORDER-TOP: #e3d165 1px =
solid; BORDER-RIGHT: #e3d165 1px solid
}
#category_selector .menu A {
	BORDER-BOTTOM: #cbd6df 1px solid; BORDER-LEFT: #cbd6df 1px solid; =
PADDING-BOTTOM: 0.2em; PADDING-LEFT: 0.2em; PADDING-RIGHT: 0.2em; =
DISPLAY: block; COLOR: #0f5bb5; FONT-SIZE: 120%; BORDER-TOP: #cbd6df 1px =
solid; BORDER-RIGHT: #cbd6df 1px solid; TEXT-DECORATION: none; =
PADDING-TOP: 0.2em
}
.post_list {
=09
}
.post {
	MARGIN: 1.5em 0px; MIN-HEIGHT: 80px
}
.post_list H3 {
	BORDER-BOTTOM: #ccc 1px solid; MARGIN: 2em 0px 0.3em; COLOR: #999; =
FONT-SIZE: 131%
}
.post_list .post H2 {
	COLOR: #275dae; FONT-SIZE: 153.9%
}
.post_list .post .post_description {
	FONT-SIZE: 116%
}
.post_link {
	COLOR: #333; TEXT-DECORATION: none
}
.post:hover {
	BACKGROUND-COLOR: #f2f2f2
}
.post_link IMG {
	FLOAT: left; MARGIN-RIGHT: 1em
}
.post_description {
	FONT-SIZE: 116%
}
.post_show {
	MARGIN-TOP: 1em
}
.show.post_description {
	MARGIN-TOP: 1em; FONT-SIZE: 116%
}
.post_show_image {
	TEXT-ALIGN: right; FLOAT: right; COLOR: #999; FONT-SIZE: 85%
}
#entries_collection {
	FONT-SIZE: 123.1%
}
#no_entries {
	FONT-SIZE: 123.1%
}
#entries_collection H3 {
	MARGIN: 1em 0px 1em -1em
}
#entries_collection {
	MARGIN-LEFT: 1.5em
}
.entry_dates {
	COLOR: #e45b00
}
#entries_collection P {
	MARGIN: 0px
}
#entries_collection #no_entries {
	MARGIN-TOP: 1em; FONT-SIZE: 100%
}
#cv_list H3 {
	FONT-SIZE: 123.1%; FONT-WEIGHT: normal
}
#industry H3 {
	FONT-SIZE: 123.1%; FONT-WEIGHT: normal
}
#private H3 {
	FONT-SIZE: 123.1%; FONT-WEIGHT: normal
}
.entry_title {
	COLOR: #333
}
.entry_editor {
	COLOR: #999
}
.entry_dates {
	MARGIN-TOP: 1.5em
}
.entry_controls {
	BORDER-TOP: #e9e9e9 1px solid
}
.client_entry {
	MARGIN-TOP: 2em
}
.sub_entry_controls {
	TEXT-ALIGN: right; MARGIN-TOP: 0.2em; COLOR: #999; FONT-SIZE: 77%
}
UL.sub_entry_controls {
	MARGIN-TOP: 0.2em; FLOAT: right; COLOR: #999; FONT-SIZE: 77%
}
UL.philosophy.sub_entry_controls {
	FONT-SIZE: 93%
}
UL.sub_entry_controls LI {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0.1em; PADDING-RIGHT: 0.1em; =
DISPLAY: inline; PADDING-TOP: 0px
}
UL.sub_entry_controls LI A {
	COLOR: #5591d8
}
.entry_title A {
	COLOR: #5591d8
}
UL.sub_entry_controls LI A:hover {
	COLOR: #e45b00
}
UL.entry_cancel_controls {
	MARGIN-TOP: 0.2em; COLOR: #999
}
UL.entry_cancel_controls LI {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0.1em; PADDING-RIGHT: 0.1em; =
DISPLAY: inline; PADDING-TOP: 0px
}
UL.entry_cancel_controls LI A {
	COLOR: #5591d8
}
UL.entry_cancel_controls LI A:hover {
	COLOR: #e45b00
}
.entry_details {
	MARGIN-TOP: -1.4em; FLOAT: right; COLOR: #999
}
SPAN.dismiss {
	MARGIN: -1.4em 0.5em 0px 0px; FLOAT: right; COLOR: #5591d8; FONT-SIZE: =
85%; CURSOR: pointer; TEXT-DECORATION: underline
}
#person_philosophy {
	MARGIN: 2em 2em 0px 1em; COLOR: #333; FONT-SIZE: 123.1%
}
.inputError {
	BORDER-BOTTOM: red 1px solid; BORDER-LEFT: red 1px solid; =
PADDING-BOTTOM: 0.3em; PADDING-LEFT: 0.3em; PADDING-RIGHT: 0.3em; =
MARGIN-BOTTOM: 0.5em; BORDER-TOP: red 1px solid; BORDER-RIGHT: red 1px =
solid; PADDING-TOP: 0.3em
}
#essay {
	MARGIN: 2em 1em 0px; FONT-SIZE: 123.1%
}
#essay H3 {
	FONT-SIZE: 146.5%; FONT-WEIGHT: normal
}
#essay .essay_abstract {
	MARGIN-TOP: 0px; COLOR: #999
}
#essay .essay_text {
	MARGIN-TOP: 1.5em
}
#essay .essay_date {
	COLOR: #999; FONT-SIZE: 77%
}
.entry_move {
	CURSOR: move
}
.cventry_begin_on.form_row {
	FLOAT: left
}
.competition_begin_on.form_row {
	FLOAT: left
}
.cventry_end_on.form_row {
	MARGIN-LEFT: 200px
}
.competition_end_on.form_row {
	MARGIN-LEFT: 300px
}
.profile.notice.message {
	MARGIN-TOP: 1em
}
#frm-philosophy_form {
	MARGIN-TOP: 1.5em
}
.to_right.frm_form {
	MARGIN: 2em 0px 0px -1.7em; FONT-SIZE: 77%
}
.person_details {
	MARGIN: 0.5em 0px 1.5em; FLOAT: left; COLOR: #999
}
.person_uri {
	MARGIN: 0.2em 0pt 1em 1.5em; FONT-SIZE: 93%
}
.person_address {
	MARGIN-LEFT: 1.5em
}
.person_address SPAN {
	MARGIN-LEFT: 0.5em; FONT-SIZE: 93%
}
.person_details.sub_nav {
	FONT-SIZE: 93%
}
.person_details A {
	COLOR: #5591d8
}
.person_details A:hover {
	COLOR: #e45b00
}
.user_icon {
	BORDER-BOTTOM: #dedede 3px double; BORDER-LEFT: #dedede 3px double; =
MARGIN-TOP: -2.3em; FLOAT: right; BORDER-TOP: #dedede 3px double; =
BORDER-RIGHT: #dedede 3px double
}
.team {
=09
}
.team H2 {
	BORDER-BOTTOM: #ccc 1px solid; MARGIN: 0.8em 0px; COLOR: #999; CLEAR: =
both
}
.team_member {
	MIN-HEIGHT: 80px; DISPLAY: block; MARGIN-BOTTOM: 1em; COLOR: #333; =
CLEAR: both; TEXT-DECORATION: none
}
.team_member_info {
	MARGIN-LEFT: 80px
}
.team_member .member_name {
	COLOR: #275dae; FONT-SIZE: 144%
}
.team_member IMG {
	FLOAT: left; MARGIN-RIGHT: 1em
}
.team_member:hover {
	BACKGROUND-COLOR: #f2f2f2
}
.member_role {
	COLOR: #568f20; FONT-SIZE: 138.5%
}
.member_description {
	FONT-SIZE: 112%
}
.member_show {
	MARGIN-TOP: 1em
}
.show.member_description {
	MARGIN-TOP: 1em; FONT-SIZE: 112%
}
.member_show_image {
	TEXT-ALIGN: right; FLOAT: right; COLOR: #999; FONT-SIZE: 85%
}
UL#industry_entries {
	MARGIN: 0px
}
UL#industry_entries LI {
	LIST-STYLE-TYPE: none
}
.source.content_summary:hover {
	BACKGROUND-COLOR: #fff; CURSOR: default
}
.source.content_summary {
	MARGIN-TOP: 0.5em
}
.source.content_summary H1 {
	MARGIN: 0px
}
.source.content_summary IMG {
	FLOAT: left; MARGIN-RIGHT: 1em
}
#content #headline {
	MARGIN-BOTTOM: 3em
}
#content #headline IMG {
	FLOAT: left; MARGIN-RIGHT: 1em
}
#content #headline H1 {
	MARGIN: 0px
}
#search_contents #global_search {
	BORDER-BOTTOM: silver 1px dotted; TEXT-ALIGN: left; PADDING-BOTTOM: =
1.5em
}
#search_contents #global_search INPUT.text {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; =
BACKGROUND-COLOR: #ffffff; WIDTH: 50%; COLOR: #000; FONT-SIZE: 100%; =
BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid
}
.summary_highlight {
	PADDING-BOTTOM: 0.5em; MIN-HEIGHT: 50px; PADDING-LEFT: 0.5em; =
PADDING-RIGHT: 0.5em; DISPLAY: block; BACKGROUND: =
url(../images/dotted.gif) repeat-x 50% bottom; COLOR: #333; FONT-SIZE: =
85%; TEXT-DECORATION: none; PADDING-TOP: 0.5em
}
.summary_highlight:hover {
	BACKGROUND-COLOR: #f2f2f2
}
.summary_highlight .authors {
	COLOR: #999; FONT-SIZE: 85%
}
.summary_highlight H3 {
	COLOR: #0f5bb5
}
.summary_highlight H3 A {
	COLOR: #0f5bb5; TEXT-DECORATION: none
}
.summary_highlight H3 A:hover {
	COLOR: #0f5bb5; TEXT-DECORATION: underline
}
.summary_highlight IMG {
	FLOAT: left; MARGIN-RIGHT: 0.5em
}
.summary_highlight H3 {
	MARGIN: 0px
}
.summary_highlight .image_placeholder {
	BORDER-BOTTOM: #eee 1px solid; BORDER-LEFT: #eee 1px solid; WIDTH: =
50px; FLOAT: left; HEIGHT: 50px; BORDER-TOP: #eee 1px solid; =
MARGIN-RIGHT: 0.5em; BORDER-RIGHT: #eee 1px solid
}
#navcontainer UL {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; MARGIN: =
0px; PADDING-LEFT: 0px; WIDTH: 99.8%; BACKGROUND: =
url(../images/yui/sprite.png) repeat-x 0px 0px; FLOAT: left; COLOR: =
#fff; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid
}
#navcontainer UL LI {
	DISPLAY: inline
}
#navcontainer UL LI.about A {
	FONT-WEIGHT: bold
}
#navcontainer A {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; WIDTH: =
5.78em; PADDING-RIGHT: 0.5em; FLOAT: left; COLOR: #000; FONT-WEIGHT: =
bold; BORDER-RIGHT: #ccc 1px solid; TEXT-DECORATION: none; PADDING-TOP: =
0.5em
}
#navcontainer A.jobs {
	WIDTH: 8.5em; BACKGROUND: url(../images/yui/sprite.png) repeat-x 0px =
-1300px; COLOR: #333333
}
#navcontainer A.boards {
	WIDTH: 3.3em
}
#navcontainer LI A#active {
	BACKGROUND: url(../images/yui/sprite.png) repeat-x 0px -1400px; COLOR: =
#fff
}
#navcontainer A:hover {
	BACKGROUND: url(../images/yui/sprite.png) repeat-x 0px -1400px; COLOR: =
#fff
}
#content .deadline SPAN {
	COLOR: #e45b00
}
.deadline .ended {
	COLOR: red; FONT-WEIGHT: bold
}
.deadline .today {
	COLOR: red; FONT-WEIGHT: bold
}
.deadline .tomorrow {
	COLOR: red; FONT-WEIGHT: bold
}
UL#images_to_sort_list LI {
	LIST-STYLE-TYPE: none; DISPLAY: inline; FLOAT: left; CURSOR: move; =
MARGIN-RIGHT: 0.3em
}
DIV.auto_complete UL {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
DIV.auto_complete UL LI {
	PADDING-BOTTOM: 0.3em; LIST-STYLE-TYPE: none; PADDING-LEFT: 0.3em; =
PADDING-RIGHT: 0.3em; CURSOR: pointer; PADDING-TOP: 0.3em
}
DIV.auto_complete UL LI.selected {
=09
}
DIV.auto_complete UL STRONG.highlight {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; COLOR: #800; PADDING-TOP: 0px
}
DIV.auto_complete UL LI.even {
=09
}
DIV.auto_complete {
	BORDER-BOTTOM: #888 1px solid; POSITION: absolute; BORDER-LEFT: #888 =
1px solid; PADDING-BOTTOM: 0px; BACKGROUND-COLOR: white; MARGIN: 0px; =
PADDING-LEFT: 0px; WIDTH: 350px; PADDING-RIGHT: 0px; MAX-HEIGHT: 400px; =
OVERFLOW: auto; BORDER-TOP: #888 1px solid; BORDER-RIGHT: #888 1px =
solid; PADDING-TOP: 0px
}
.summary .info .result_extra .result_ratings A {
	COLOR: #000
}
#headline .result_extra .result_ratings A {
	COLOR: #000
}
.summary .info .details SPAN.result_date {
	COLOR: #999; FONT-SIZE: 85%
}
#headline .result_extra .result_ratings {
	COLOR: #999; FONT-SIZE: 85%
}
.summary_deadline {
	COLOR: #999; FONT-SIZE: 85%
}
.person_ratings {
	COLOR: #999; FONT-SIZE: 85%
}
.person_rating_details {
	COLOR: #999; FONT-SIZE: 85%
}
.summary .info .result_extra .result_ratings {
	COLOR: #999; FONT-SIZE: 85%
}
.summary .info .result_extra .result_rating_details {
	COLOR: #999; FONT-SIZE: 85%
}
#headline .result_extra .result_rating_details {
	COLOR: #999; FONT-SIZE: 85%
}
.summary_deadline A {
	COLOR: #000
}
.competition_downloads_activity_details {
	MARGIN-TOP: 0.5em; WIDTH: 100%
}
.competition_downloads_activity_details IMG.chart {
	MARGIN: 0px
}
.summary_deadline SPAN.popular {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0.1em; PADDING-LEFT: 0.4em; =
PADDING-RIGHT: 0.4em; BACKGROUND: #dd201f; COLOR: #fff; PADDING-TOP: =
0.1em; -moz-border-radius-bottomleft: .4em; =
-moz-border-radius-bottomright: .4em; -moz-border-radius-topleft: .4em; =
-moz-border-radius-topright: .4em
}
.person_ratings A {
	COLOR: #333; TEXT-DECORATION: underline
}
.info .person_ratings A {
	COLOR: #333; TEXT-DECORATION: underline
}
#albums_list {
	MARGIN: 2em 0px
}
#albums_category_list {
	MARGIN: 2em 0px
}
#albums_list H2 {
	BACKGROUND: url(../images/dotted.gif) repeat-x 50% bottom; FONT-SIZE: =
197%
}
#albums_category_list H2 {
	BACKGROUND: url(../images/dotted.gif) repeat-x 50% bottom; FONT-SIZE: =
197%
}
.album {
	TEXT-ALIGN: left; WIDTH: 120px; PADDING-RIGHT: 1.9em; FLOAT: left; =
HEIGHT: 180px
}
.album H4 {
	WIDTH: 110px; FONT-SIZE: 116%; FONT-WEIGHT: bold
}
.album A {
	COLOR: #0f5bb5; TEXT-DECORATION: none
}
.album .count {
	COLOR: #777; FONT-SIZE: 85%
}
.album_box {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 7px; WIDTH: 91px; PADDING-RIGHT: =
0px; BACKGROUND: url(../images/album_box.gif) no-repeat; HEIGHT: 95px; =
PADDING-TOP: 7px
}
.album_box A {
	TEXT-DECORATION: none
}
.album_box A:link {
	TEXT-DECORATION: none
}
.album_box A:visited {
	TEXT-DECORATION: none
}
.album_box A:hover {
	BACKGROUND: none transparent scroll repeat 0% 0%; TEXT-DECORATION: none
}
.album_box A:active {
	BACKGROUND: none transparent scroll repeat 0% 0%; TEXT-DECORATION: none
}
.album_box .album_img {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; BORDER-TOP: =
#000 1px solid; BORDER-RIGHT: #000 1px solid
}
.image_copyright {
	FONT-SIZE: 85%
}
.copy_left {
	MARGIN-LEFT: 2em; FONT-SIZE: 85%; FONT-WEIGHT: normal
}
#leaderboard {
	CLEAR: both
}
#search_table SELECT {
	BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; FONT-SIZE: 98%; BORDER-TOP: silver 1px solid; =
BORDER-RIGHT: silver 1px solid; PADDING-TOP: 0px
}
#search_table INPUT.text {
	BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; FONT-SIZE: 98%; BORDER-TOP: silver 1px solid; =
BORDER-RIGHT: silver 1px solid; PADDING-TOP: 0px
}
#search_table TEXTAREA {
	BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; FONT-SIZE: 98%; BORDER-TOP: silver 1px solid; =
BORDER-RIGHT: silver 1px solid; PADDING-TOP: 0px
}
#search_table .small_width {
	WIDTH: 8em
}
#search_table .people.small_width {
	WIDTH: 13em
}
#search_table {
	BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; WIDTH: =
100%; BORDER-COLLAPSE: separate; MARGIN-BOTTOM: 0px; BACKGROUND: #eee; =
BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid
}
#search_table TD {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0.3em; =
PADDING-LEFT: 0.3em; PADDING-RIGHT: 0.3em; WHITE-SPACE: nowrap; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0.3em
}
#search_table .search_label {
	DISPLAY: block; FONT-SIZE: 93%; FONT-WEIGHT: bold
}
.extended_search {
	TEXT-ALIGN: right; MARGIN-TOP: 0.3em; FONT-SIZE: 85%
}
.profile H1 .ec2_icon {
	MARGIN: 0px; FLOAT: none; VERTICAL-ALIGN: top
}
.summary H3 .ec2_icon {
	MARGIN: 0px; FLOAT: none; VERTICAL-ALIGN: top
}
.free_competitions {
	COLOR: #aa0000; FONT-SIZE: 60%
}
.new_badge {
	COLOR: red; FONT-SIZE: 60%
}
.board_row:hover {
	BACKGROUND-COLOR: #f2f2f2
}
.person_message {
	PADDING-BOTTOM: 0.5em; MARGIN-TOP: 0.3em; PADDING-LEFT: 0.2em; =
PADDING-RIGHT: 0px; BACKGROUND: url(../images/dotted.gif) repeat-x 50% =
top; COLOR: #898989; FONT-SIZE: 93%; PADDING-TOP: 0.4em
}
.person_message A {
	COLOR: #5591d8
}
.person_message .person_message_name {
	COLOR: #333
}
.person_message .person_deadline {
	COLOR: #c03
}
.person_message .person_su {
	COLOR: #c03
}
.landing_tutorial {
	FONT-SIZE: 116%
}
.landing_table .yui-gd {
	PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
BACKGROUND: url(../images/dotted.gif) repeat-x 50% bottom; PADDING-TOP: =
0.5em
}
.project_description_details H2 {
	BACKGROUND: url(../images/dotted.gif) repeat-x 50% bottom; FONT-SIZE: =
153.9%
}
.project_description_details UL LI {
	FONT-SIZE: 108%
}
.project_description_details SPAN {
	FONT-WEIGHT: bold
}
.person_extra {
	WIDTH: 100%
}
.result_extra {
	WIDTH: 100%
}
.managed_alert {
	BACKGROUND-COLOR: #f99
}
.ratings_details {
	MARGIN-TOP: 0.5em
}
.ratings_details UL.values {
	MARGIN-TOP: 0px
}
.ratings_details UL.stats {
	MARGIN-TOP: 0px
}
.person_details UL.values {
	MARGIN-TOP: 0px
}
.person_details UL.stats {
	MARGIN-TOP: 0px
}
.ratings_details UL.stats {
	MARGIN-TOP: 0.5em; BORDER-TOP: #eeeeee 1px solid; PADDING-TOP: 0.5em
}
.person_details UL.stats {
	MARGIN-TOP: 0.5em; BORDER-TOP: #eeeeee 1px solid; PADDING-TOP: 0.5em
}
.competition_downloads {
	COLOR: #999; FONT-SIZE: 85%
}
.competition_downloads A {
	COLOR: #999
}
.ratings_details IMG.chart {
	FLOAT: none; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px
}
.person_details IMG.chart {
	FLOAT: none; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px
}
.competition_downloads .competition_downloads_activity_details IMG.chart =
{
	FLOAT: none; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px
}
#content #headline IMG {
	FLOAT: none; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px
}
#competitions_list P.popular_range {
	BORDER-BOTTOM: #eeeeee 1px solid; PADDING-BOTTOM: 0.5em; MARGIN: 0.5em =
0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 100%; =
PADDING-TOP: 0.5em
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/yui/reset-fonts-grids.css?1248796221

HTML {
	BACKGROUND: #fff; COLOR: #000
}
BODY {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
DIV {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
DL {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
DT {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
DD {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
UL {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
OL {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
LI {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
H1 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
H2 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
H3 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
H4 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
H5 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
H6 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
PRE {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
CODE {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
FORM {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
FIELDSET {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
LEGEND {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
INPUT {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
TEXTAREA {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
P {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
BLOCKQUOTE {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
TH {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
TD {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
TABLE {
	BORDER-SPACING: 0; BORDER-COLLAPSE: collapse
}
FIELDSET {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: =
0px
}
ADDRESS {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
CAPTION {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
CITE {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
CODE {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
DFN {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
EM {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
STRONG {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
TH {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
VAR {
	FONT-STYLE: normal; FONT-WEIGHT: normal
}
LI {
	LIST-STYLE-TYPE: none; LIST-STYLE-IMAGE: none
}
CAPTION {
	TEXT-ALIGN: left
}
TH {
	TEXT-ALIGN: left
}
H1 {
	FONT-SIZE: 100%; FONT-WEIGHT: normal
}
H2 {
	FONT-SIZE: 100%; FONT-WEIGHT: normal
}
H3 {
	FONT-SIZE: 100%; FONT-WEIGHT: normal
}
H4 {
	FONT-SIZE: 100%; FONT-WEIGHT: normal
}
H5 {
	FONT-SIZE: 100%; FONT-WEIGHT: normal
}
H6 {
	FONT-SIZE: 100%; FONT-WEIGHT: normal
}
Q:before {
	CONTENT: ''
}
Q:after {
	CONTENT: ''
}
ABBR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; FONT-VARIANT: normal; BORDER-TOP: =
0px; BORDER-RIGHT: 0px
}
ACRONYM {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; FONT-VARIANT: normal; BORDER-TOP: =
0px; BORDER-RIGHT: 0px
}
SUP {
	VERTICAL-ALIGN: text-top
}
SUB {
	VERTICAL-ALIGN: text-bottom
}
INPUT {
	FONT-FAMILY: inherit; FONT-SIZE: inherit; FONT-WEIGHT: inherit
}
TEXTAREA {
	FONT-FAMILY: inherit; FONT-SIZE: inherit; FONT-WEIGHT: inherit
}
SELECT {
	FONT-FAMILY: inherit; FONT-SIZE: inherit; FONT-WEIGHT: inherit
}
LEGEND {
	COLOR: #000
}
BODY {
	FONT: 13px/1.231 arial, helvetica, clean, sans-serif
}
TABLE {
	FONT-SIZE: inherit
}
PRE {
	LINE-HEIGHT: 100%; FONT-FAMILY: monospace
}
CODE {
	LINE-HEIGHT: 100%; FONT-FAMILY: monospace
}
KBD {
	LINE-HEIGHT: 100%; FONT-FAMILY: monospace
}
SAMP {
	LINE-HEIGHT: 100%; FONT-FAMILY: monospace
}
TT {
	LINE-HEIGHT: 100%; FONT-FAMILY: monospace
}
BODY {
	TEXT-ALIGN: center
}
#ft {
	CLEAR: both
}
#doc {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
#doc2 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
#doc3 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
#doc4 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
.yui-t1 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
.yui-t2 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
.yui-t3 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
.yui-t4 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
.yui-t5 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
.yui-t6 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
.yui-t7 {
	MIN-WIDTH: 750px; TEXT-ALIGN: left; MARGIN: auto; WIDTH: 57.69em
}
#doc2 {
	WIDTH: 73.07em
}
#doc3 {
	MARGIN: auto 10px; WIDTH: auto
}
#doc4 {
	WIDTH: 74.92em
}
.yui-b {
	POSITION: relative
}
.yui-b {
	_position: static
}
#yui-main .yui-b {
	POSITION: static
}
#yui-main {
	WIDTH: 100%
}
.yui-t1 #yui-main {
	FLOAT: right; MARGIN-LEFT: -25em
}
.yui-t2 #yui-main {
	FLOAT: right; MARGIN-LEFT: -25em
}
.yui-t3 #yui-main {
	FLOAT: right; MARGIN-LEFT: -25em
}
.yui-t4 #yui-main {
	FLOAT: left; MARGIN-RIGHT: -25em
}
.yui-t5 #yui-main {
	FLOAT: left; MARGIN-RIGHT: -25em
}
.yui-t6 #yui-main {
	FLOAT: left; MARGIN-RIGHT: -25em
}
.yui-t1 .yui-b {
	WIDTH: 12.32em; FLOAT: left
}
.yui-t1 #yui-main .yui-b {
	MARGIN-LEFT: 13.32em
}
.yui-t2 .yui-b {
	WIDTH: 13.84em; FLOAT: left
}
.yui-t2 #yui-main .yui-b {
	MARGIN-LEFT: 14.84em
}
.yui-t3 .yui-b {
	WIDTH: 23.07em; FLOAT: left
}
.yui-t3 #yui-main .yui-b {
	MARGIN-LEFT: 24.07em
}
.yui-t4 .yui-b {
	WIDTH: 13.84em; FLOAT: right
}
.yui-t4 #yui-main .yui-b {
	MARGIN-RIGHT: 14.84em
}
.yui-t5 .yui-b {
	WIDTH: 18.46em; FLOAT: right
}
.yui-t5 #yui-main .yui-b {
	MARGIN-RIGHT: 19.46em
}
.yui-t6 .yui-b {
	WIDTH: 23.07em; FLOAT: right
}
.yui-t6 #yui-main .yui-b {
	MARGIN-RIGHT: 24.07em
}
.yui-t7 #yui-main .yui-b {
	MARGIN: 0px 0px 1em; DISPLAY: block
}
#yui-main .yui-b {
	WIDTH: auto; FLOAT: none
}
.yui-g .yui-gb .yui-u {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gb .yui-g {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gb .yui-gb {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gb .yui-gc {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gb .yui-gd {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gb .yui-ge {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gb .yui-gf {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gb .yui-u {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gc .yui-u {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gc .yui-g {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gd .yui-u {
	WIDTH: 32%; FLOAT: left; MARGIN-LEFT: 2%
}
.yui-gb .yui-gb .yui-u {
	_margin-left: 4%
}
.yui-gb .yui-gc .yui-u {
	_margin-left: 4%
}
.yui-g .yui-gb .yui-u {
	_margin-left: .8%
}
.yui-gb .yui-u {
	FLOAT: right
}
.yui-gb DIV.first {
	FLOAT: left; MARGIN-LEFT: 0px
}
.yui-g .yui-gb DIV.first {
	_width: 31.7%
}
.yui-gb .yui-gb DIV.first {
	_width: 31.7%
}
.yui-gb .yui-gc DIV.first {
=09
}
.yui-gb .yui-gd DIV.first {
=09
}
.yui-gb .yui-gd .yui-u {
	_width: 61.2%
}
.yui-gb .yui-gd DIV.first {
	_width: 29.5%
}
.yui-g .yui-gc .yui-u {
	WIDTH: 32%; MARGIN-RIGHT: 0px; _margin-left: 0; _float: right
}
.yui-gb .yui-gc .yui-u {
	WIDTH: 32%; MARGIN-RIGHT: 0px; _margin-left: 0; _float: right
}
.yui-gb .yui-gc DIV.first {
	WIDTH: 66%
}
.yui-gb .yui-ge .yui-u {
	MARGIN: 0px
}
.yui-gb .yui-gf .yui-u {
	MARGIN: 0px
}
.yui-g .yui-u {
	FLOAT: right
}
.yui-g .yui-g {
	FLOAT: right
}
.yui-g .yui-gb {
	FLOAT: right
}
.yui-g .yui-gc {
	FLOAT: right
}
.yui-g .yui-gd {
	FLOAT: right
}
.yui-g .yui-ge {
	FLOAT: right
}
.yui-g .yui-gf {
	FLOAT: right
}
.yui-gc .yui-u {
	FLOAT: right
}
.yui-gd .yui-g {
	FLOAT: right
}
.yui-g .yui-gc .yui-u {
	FLOAT: right
}
.yui-ge .yui-u {
	FLOAT: right
}
.yui-ge .yui-g {
	FLOAT: right
}
.yui-gf .yui-g {
	FLOAT: right
}
.yui-gf .yui-u {
	FLOAT: right
}
.yui-g .yui-gc DIV.first {
	FLOAT: left
}
.yui-g .yui-ge DIV.first {
	FLOAT: left
}
.yui-g DIV.first {
	FLOAT: left
}
.yui-gc DIV.first {
	FLOAT: left
}
.yui-gc DIV.first DIV.first {
	FLOAT: left
}
.yui-gd DIV.first {
	FLOAT: left
}
.yui-ge DIV.first {
	FLOAT: left
}
.yui-gf DIV.first {
	FLOAT: left
}
.yui-g .yui-g .yui-u {
	WIDTH: 49%
}
.yui-gb .yui-g .yui-u {
	WIDTH: 49%
}
.yui-gc .yui-g .yui-u {
	WIDTH: 49%
}
.yui-gd .yui-g .yui-u {
	WIDTH: 49%
}
.yui-ge .yui-g .yui-u {
	WIDTH: 49%
}
.yui-gf .yui-g .yui-u {
	WIDTH: 49%
}
.yui-g .yui-g DIV.first {
=09
}
.yui-gb .yui-g DIV.first {
	_margin-right: 1.3%
}
.yui-gb .yui-gb .yui-u {
	_margin-left: .7%
}
.yui-gb .yui-g DIV.first {
=09
}
.yui-gb .yui-gb DIV.first {
=09
}
.yui-gc .yui-g .yui-u {
=09
}
.yui-gd .yui-g .yui-u {
=09
}
.yui-g .yui-u {
	WIDTH: 49.1%
}
.yui-g .yui-g {
	WIDTH: 49.1%
}
.yui-g .yui-gb {
	WIDTH: 49.1%
}
.yui-g .yui-gc {
	WIDTH: 49.1%
}
.yui-g .yui-gd {
	WIDTH: 49.1%
}
.yui-g .yui-ge {
	WIDTH: 49.1%
}
.yui-g .yui-gf {
	WIDTH: 49.1%
}
.yui-g .yui-gb DIV.first {
	MARGIN-LEFT: 0px
}
.yui-gb DIV.first {
	MARGIN-LEFT: 0px
}
.yui-gc DIV.first {
	MARGIN-LEFT: 0px
}
.yui-gd DIV.first {
	MARGIN-LEFT: 0px
}
.yui-g .yui-gc DIV.first {
	WIDTH: 66%
}
.yui-gc DIV.first {
	WIDTH: 66%
}
.yui-gd .yui-g {
	WIDTH: 66%
}
.yui-gd .yui-u {
	WIDTH: 66%
}
.yui-gd DIV.first {
	WIDTH: 32%
}
.yui-gb .yui-gd DIV.first {
	WIDTH: 32%
}
.yui-g .yui-gd DIV.first {
	_width: 29.9%
}
.yui-ge .yui-u {
	WIDTH: 24%
}
.yui-ge .yui-g {
	WIDTH: 24%
}
.yui-gf DIV.first {
	WIDTH: 24%
}
.yui-gb .yui-ge DIV.yui-u {
	FLOAT: right
}
.yui-gb .yui-gf DIV.yui-u {
	FLOAT: right
}
.yui-gb .yui-ge DIV.first {
	FLOAT: left
}
.yui-gb .yui-gf DIV.first {
	FLOAT: left
}
.yui-ge DIV.first {
	WIDTH: 74.2%
}
.yui-gf .yui-g {
	WIDTH: 74.2%
}
.yui-gf .yui-u {
	WIDTH: 74.2%
}
.yui-gb .yui-ge .yui-u {
	_width: 20%
}
.yui-gb .yui-gf DIV.first {
	_width: 20%
}
.yui-gb .yui-ge DIV.first {
	_width: 65.5%
}
.yui-gb .yui-gf .yui-u {
	_width: 65.5%
}
#bd:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
.yui-g:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
.yui-gb:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
.yui-gc:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
.yui-gd:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
.yui-ge:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
.yui-gf:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
#bd {
	ZOOM: 1
}
.yui-g {
	ZOOM: 1
}
.yui-gb {
	ZOOM: 1
}
.yui-gc {
	ZOOM: 1
}
.yui-gd {
	ZOOM: 1
}
.yui-ge {
	ZOOM: 1
}
.yui-gf {
	ZOOM: 1
}
.yui-gb .yui-u {
	FLOAT: left
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/layout.css?1248796221

HTML {
	BACKGROUND: #fff; COLOR: #333
}
BODY {
	MARGIN: 0px; FONT-FAMILY: "Trebuchet MS"
}
#custom-doc {
	MIN-WIDTH: 988px; TEXT-ALIGN: left; BACKGROUND-COLOR: #fff; MARGIN: =
auto; WIDTH: 76em
}
#hd {
	MARGIN: 0.5em 0px 0px
}
#hd H1 {
	MARGIN: 0px; COLOR: #ff9900; FONT-SIZE: 197%
}
#bd {
	MARGIN: 0px
}
#content {
=09
}
.yui-t6 .sidebar.yui-b {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px; WIDTH: 19.23em; =
FLOAT: right; BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
.yui-t6 #yui-main .content.yui-b {
	MARGIN-RIGHT: 20em
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/yui/base.css?1248796221

H1 {
	FONT-SIZE: 138.5%
}
H2 {
	FONT-SIZE: 123.1%
}
H3 {
	FONT-SIZE: 108%
}
H1 {
	MARGIN: 1em 0px
}
H2 {
	MARGIN: 1em 0px
}
H3 {
	MARGIN: 1em 0px
}
H1 {
	FONT-WEIGHT: normal
}
H2 {
	FONT-WEIGHT: normal
}
H3 {
	FONT-WEIGHT: normal
}
H4 {
	FONT-WEIGHT: normal
}
H5 {
	FONT-WEIGHT: normal
}
H6 {
	FONT-WEIGHT: normal
}
STRONG {
	FONT-WEIGHT: normal
}
ABBR {
	BORDER-BOTTOM: #000 1px dotted; CURSOR: help
}
ACRONYM {
	BORDER-BOTTOM: #000 1px dotted; CURSOR: help
}
EM {
	FONT-STYLE: italic
}
BLOCKQUOTE {
	MARGIN: 1em
}
UL {
	MARGIN: 1em
}
OL {
	MARGIN: 1em
}
DL {
	MARGIN: 1em
}
OL {
	MARGIN-LEFT: 2em
}
UL {
	MARGIN-LEFT: 2em
}
DL {
	MARGIN-LEFT: 2em
}
OL LI {
	LIST-STYLE-POSITION: outside; LIST-STYLE-TYPE: decimal
}
UL LI {
	LIST-STYLE-POSITION: outside; LIST-STYLE-TYPE: disc
}
DL DD {
	MARGIN-LEFT: 1em
}
TH {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid; PADDING-TOP: =
0.5em
}
TD {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; =
PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid; PADDING-TOP: =
0.5em
}
TH {
	TEXT-ALIGN: center; FONT-WEIGHT: bold
}
CAPTION {
	TEXT-ALIGN: center; MARGIN-BOTTOM: 0.5em
}
P {
	MARGIN-BOTTOM: 1em
}
FIELDSET {
	MARGIN-BOTTOM: 1em
}
TABLE {
	MARGIN-BOTTOM: 1em
}
PRE {
	MARGIN-BOTTOM: 1em
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/presentation.css?1248796221

#menu_top {
	MARGIN: 0px
}
#global_search {
	MARGIN-TOP: 1.2em
}
#hd #side_header {
=09
}
#hd .logo H1 A {
	Z-INDEX: 1000; TEXT-INDENT: -2000em; WIDTH: 200px; DISPLAY: block; =
BACKGROUND: url(../images/logo.png) no-repeat 0px 0px; HEIGHT: 30px
}
#hd .logo H1 A:hover {
	BACKGROUND-POSITION: 0px -30px; CURSOR: pointer
}
H1 A:focus {
	BACKGROUND-POSITION: 0px -30px; CURSOR: pointer
}
#menu_leading {
	TEXT-ALIGN: right
}
UL.menu_nav {
	MARGIN: 0.5em 0px 0px; FLOAT: left; COLOR: #ccc
}
UL.menu_nav LI {
	LIST-STYLE-TYPE: none; PADDING-RIGHT: 0.5em; FLOAT: left
}
UL.menu_nav LI IMG {
	BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; =
PADDING-BOTTOM: 1px; PADDING-LEFT: 1px; PADDING-RIGHT: 1px; BORDER-TOP: =
silver 1px solid; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 1px
}
.full_search FORM {
=09
}
UL.menu_nav LI.first {
=09
}
UL.menu_nav LI A {
	COLOR: #5591d8; TEXT-DECORATION: none
}
#login A {
	COLOR: #5591d8; TEXT-DECORATION: none
}
UL.menu_nav LI A:hover {
	COLOR: #ff9900
}
UL.menu_nav LI A.active {
	COLOR: #ff9900; TEXT-DECORATION: none
}
UL.menu_nav LI.active A {
	COLOR: #ff9900; TEXT-DECORATION: none
}
UL.menu_nav:after {
=09
}
UL.sub_nav {
	MARGIN: 0.3em 0pt 2em 0px
}
UL.sub_nav LI {
	BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: =
none; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; FLOAT: left; =
PADDING-TOP: 0px
}
UL.sub_nav LI.first {
	BORDER-LEFT: transparent 1px solid
}
UL.sub_nav LI.last_on_right {
	BORDER-LEFT: transparent 1px solid; FLOAT: right
}
UL.sub_nav LI A {
	COLOR: #5591d8
}
UL.sub_nav LI A:hover {
	COLOR: #e45b00
}
UL.sub_nav LI A.active {
	COLOR: #e45b00; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
UL.sub_nav LI.active A {
	COLOR: #e45b00; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
UL.sub_nav:after {
	DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: both; CONTENT: =
"."
}
.yui-nav {
	TEXT-ALIGN: right
}
.yui-nav LI {
	TEXT-ALIGN: right
}
.yui-navset H1 {
	MARGIN: 0pt 0pt -1em
}
#global_search {
	TEXT-ALIGN: right
}
.message {
	BORDER-BOTTOM: transparent 1px solid; BORDER-LEFT: transparent 1px =
solid; PADDING-BOTTOM: 0.3em; PADDING-LEFT: 0.3em; PADDING-RIGHT: 0.3em; =
MARGIN-BOTTOM: 0.5em; BORDER-TOP: transparent 1px solid; BORDER-RIGHT: =
transparent 1px solid; PADDING-TOP: 0.3em
}
.message P {
	MARGIN-TOP: 0.1em
}
.error.message {
	BORDER-BOTTOM-COLOR: red; BORDER-TOP-COLOR: red; BORDER-RIGHT-COLOR: =
red; BORDER-LEFT-COLOR: red
}
.notice.message {
	BORDER-BOTTOM-COLOR: #7faa69; BORDER-TOP-COLOR: #7faa69; =
BORDER-RIGHT-COLOR: #7faa69; BORDER-LEFT-COLOR: #7faa69
}
.pagination {
	PADDING-BOTTOM: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; CLEAR: =
both; PADDING-TOP: 1em
}
.pagination UL {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0px; MARGIN: 0.5em 0px 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.pagination LI {
	PADDING-BOTTOM: 1px; LIST-STYLE-TYPE: none; DISPLAY: inline
}
.pagination A {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: =
#2e6ab1; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; =
TEXT-DECORATION: none; PADDING-TOP: 0px
}
.pagination A:visited {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: =
#2e6ab1; BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; =
TEXT-DECORATION: none; PADDING-TOP: 0px
}
.pagination A:hover {
	BORDER-BOTTOM: #e3d165 1px solid; BORDER-LEFT: #e3d165 1px solid; =
BACKGROUND-COLOR: #fff2a2; COLOR: #51470d; BORDER-TOP: #e3d165 1px =
solid; BORDER-RIGHT: #e3d165 1px solid
}
.pagination A:active {
	BORDER-BOTTOM: #e3d165 1px solid; BORDER-LEFT: #e3d165 1px solid; =
BACKGROUND-COLOR: #fff2a2; COLOR: #51470d; BORDER-TOP: #e3d165 1px =
solid; BORDER-RIGHT: #e3d165 1px solid
}
.pagination LI.currentpage {
	BORDER-BOTTOM: #e3d165 1px solid; BORDER-LEFT: #e3d165 1px solid; =
PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff2a2; PADDING-LEFT: 5px; =
PADDING-RIGHT: 5px; COLOR: #51470d; BORDER-TOP: #e3d165 1px solid; =
BORDER-RIGHT: #e3d165 1px solid; PADDING-TOP: 0px
}
.pagination LI.disablepage {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; COLOR: #ccc; =
BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: =
0px
}
.pagination LI.nextpage {
=09
}
* HTML .pagination LI.currentpage {
	PADDING-RIGHT: 0px; MARGIN-RIGHT: 5px
}
* HTML .pagination LI.disablepage {
	PADDING-RIGHT: 0px; MARGIN-RIGHT: 5px
}
.fave.top_icons {
	MARGIN-RIGHT: 0.5em
}
.highlight.top_icons {
	MARGIN-RIGHT: 0.5em
}
.top_icons {
	VERTICAL-ALIGN: top
}
.bottom_icons {
	VERTICAL-ALIGN: bottom
}
.middle_icons {
	VERTICAL-ALIGN: middle
}
SPAN.trigger {
	COLOR: #5591d8; CURSOR: pointer; TEXT-DECORATION: underline
}
#system_working {
	POSITION: absolute; PADDING-BOTTOM: 0px; BACKGROUND-COLOR: red; =
PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; COLOR: white; TOP: 0px; =
RIGHT: 0px; FONT-WEIGHT: bold; PADDING-TOP: 0px
}
.newsletters_form {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; BORDER-TOP: =
#ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: 0.2em
}
.signup .top_header {
	MARGIN: 1em 0px
}
.signup .right_header {
	MARGIN: 1em 0px 2em
}
.signup .button_header {
	MARGIN: 1em 0px 0px 6em
}
A.upgrade {
	COLOR: #5591d8; MARGIN-RIGHT: 1em; TEXT-DECORATION: none
}
A.upgrade:hover {
	COLOR: #ff9900
}
.personal_message {
	MARGIN-TOP: 1.5em; FLOAT: left; MARGIN-LEFT: 8em
}
#ft {
	MARGIN-TOP: 3em; BACKGROUND: #f1f0e9
}
#ft .ft-contents {
	PADDING-BOTTOM: 1em; PADDING-LEFT: 1em; PADDING-RIGHT: 1em; COLOR: =
#999; PADDING-TOP: 1em
}
#ft .ft-contents UL LI {
	MARGIN-BOTTOM: 0.3em
}
#ft .ft-contents OL LI {
	MARGIN-BOTTOM: 0.3em
}
#ft .ft-contents H2 {
	MARGIN: 0px 0px 0.5em
}
#ft .ft-contents A {
	COLOR: #6392d1; TEXT-DECORATION: none
}
#ft .business_card A {
	COLOR: #6392d1; TEXT-DECORATION: none
}
#ft .ft-contents A:hover {
	TEXT-DECORATION: underline
}
#ft .business_card A:hover {
	TEXT-DECORATION: underline
}
#ft .ft-contents H2 {
	COLOR: #333; PADDING-TOP: 0px
}
#ft .business_card {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 0.5em; MARGIN: 0px 1em 1em 0px; PADDING-LEFT: 0.5em; =
PADDING-RIGHT: 0.5em; BACKGROUND: #fff; COLOR: #333; FONT-SIZE: 93%; =
BORDER-TOP: #ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: =
0.5em
}
#ft .ft-contents P.twitter {
	MARGIN-TOP: 4em
}
#ft .archiwatch.ft-contents {
	PADDING-TOP: 0px
}
#ft .archiwatch.ft-contents UL LI {
	MARGIN-BOTTOM: 0px
}
.archiwatch DIV.feedburnerFeedBlock P.date {
	DISPLAY: inline; MARGIN-LEFT: 1em
}
.archiwatch DIV.feedburnerFeedBlock #creditfooter {
	DISPLAY: none
}
.search.yui-u {
	TEXT-ALIGN: right
}
.full_search {
	MARGIN-TOP: 1em; FLOAT: right
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/yui/menu.css?1248796221

.yuimenubar {
	POSITION: static; VISIBILITY: visible
}
.yuimenu .yuimenu {
	POSITION: absolute; VISIBILITY: hidden; TOP: -10000px; LEFT: -10000px
}
.yuimenubar .yuimenu {
	POSITION: absolute; VISIBILITY: hidden; TOP: -10000px; LEFT: -10000px
}
.yuimenubar LI {
	LIST-STYLE-TYPE: none
}
.yuimenu LI {
	LIST-STYLE-TYPE: none
}
.yuimenubar UL {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.yuimenu UL {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.yuimenubar LI {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.yuimenu LI {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.yuimenu H6 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.yuimenubar H6 {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.yuimenuitemlabel {
	TEXT-ALIGN: left; WHITE-SPACE: nowrap
}
.yuimenubaritemlabel {
	TEXT-ALIGN: left; WHITE-SPACE: nowrap
}
.yuimenubar UL {
=09
}
.yuimenubar .yuimenu UL {
=09
}
.yuimenubar > .bd > UL:after {
	LINE-HEIGHT: 0; DISPLAY: block; HEIGHT: 0px; VISIBILITY: hidden; CLEAR: =
both; CONTENT: "."
}
.yuimenubaritem {
	FLOAT: left
}
.yuimenubaritemlabel {
	DISPLAY: block
}
.yuimenuitemlabel {
	DISPLAY: block
}
.yuimenuitemlabel .helptext {
	FONT-STYLE: normal; MARGIN: -1em 0px 0px 10em; DISPLAY: block
}
.yui-menu-shadow {
	Z-INDEX: -1; POSITION: absolute; VISIBILITY: hidden
}
.yui-skin-sam .yui-menu-shadow-visible {
	BOTTOM: -3px; VISIBILITY: visible; TOP: 2px; RIGHT: -3px; LEFT: -3px
}
.hide-scrollbars * {
	OVERFLOW: hidden
}
.hide-scrollbars SELECT {
	DISPLAY: none
}
.show-scrollbars.yuimenu {
	OVERFLOW: visible
}
.show-scrollbars.yuimenubar {
	OVERFLOW: visible
}
.hide-scrollbars.yuimenu .yui-menu-shadow {
	OVERFLOW: hidden
}
.hide-scrollbars.yuimenubar .yui-menu-shadow {
	OVERFLOW: hidden
}
.show-scrollbars.yuimenu .yui-menu-shadow {
	OVERFLOW: auto
}
.show-scrollbars.yuimenubar .yui-menu-shadow {
	OVERFLOW: auto
}
.yui-skin-sam .yuimenubar {
	BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; =
LINE-HEIGHT: 2; BACKGROUND: url(../../images/yui/sprite.png) repeat-x =
0px 0px; FONT-SIZE: 93%; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: =
#808080 1px solid
}
.yui-skin-sam .yuimenubarnav .yuimenubaritem {
	BORDER-RIGHT: #ccc 1px solid
}
.yui-skin-sam .yuimenubaritemlabel {
	BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 0px solid; =
PADDING-BOTTOM: 0px; MARGIN: -1px 0px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; COLOR: #000; BORDER-TOP: #808080 1px solid; CURSOR: =
pointer; BORDER-RIGHT: #808080 0px solid; TEXT-DECORATION: none; =
PADDING-TOP: 0px
}
.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel {
	PADDING-RIGHT: 20px
}
.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu {
	BACKGROUND: url(../../images/yui/menubaritem_submenuindicator.png) =
no-repeat right center
}
.yui-skin-sam .yuimenubaritem-selected {
	BACKGROUND: url(../../images/yui/sprite.png) repeat-x 0px -1700px
}
.yui-skin-sam .yuimenubaritemlabel-selected {
	BORDER-BOTTOM-COLOR: #7d98b8; BORDER-TOP-COLOR: #7d98b8; =
BORDER-RIGHT-COLOR: #7d98b8; BORDER-LEFT-COLOR: #7d98b8
}
.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-selected {
	MARGIN-LEFT: -1px; BORDER-LEFT-WIDTH: 1px
}
.yui-skin-sam .yuimenubaritemlabel-disabled {
	COLOR: #a6a6a6; CURSOR: pointer
}
.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled {
	BACKGROUND-IMAGE: =
url(../../images/yui/menubaritem_submenuindicator_disabled.png)
}
.yui-skin-sam .yuimenu {
	LINE-HEIGHT: 1.5; FONT-SIZE: 93%
}
.yui-skin-sam .yuimenubar .yuimenu {
	FONT-SIZE: 100%
}
.yui-skin-sam .yuimenu .yuimenu {
	FONT-SIZE: 100%
}
.yui-skin-sam .yuimenu .bd {
	BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; =
BACKGROUND-COLOR: #fff; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: =
#808080 1px solid
}
.yui-skin-sam .yuimenu UL {
	BORDER-BOTTOM: #ccc 0px solid; BORDER-LEFT: #ccc 0px solid; =
PADDING-BOTTOM: 3px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: =
#ccc 1px solid; BORDER-RIGHT: #ccc 0px solid; PADDING-TOP: 3px
}
.yui-skin-sam .yuimenu UL.first-of-type {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 0px
}
.yui-skin-sam .yuimenu H6 {
	BORDER-BOTTOM: #ccc 0px solid; BORDER-LEFT: #ccc 0px solid; =
PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; COLOR: =
#a4a4a4; BORDER-TOP: #ccc 1px solid; FONT-WEIGHT: bold; BORDER-RIGHT: =
#ccc 0px solid; PADDING-TOP: 3px
}
.yui-skin-sam .yuimenu UL.hastitle {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 0px
}
.yui-skin-sam .yuimenu H6.first-of-type {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 0px
}
.yui-skin-sam .yuimenu .yui-menu-body-scrolled {
	BORDER-BOTTOM-COLOR: #ccc; BORDER-TOP-COLOR: #ccc; BORDER-RIGHT-COLOR: =
#808080; OVERFLOW: hidden; BORDER-LEFT-COLOR: #808080
}
.yui-skin-sam .yuimenu .topscrollbar {
	BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; =
BACKGROUND: url(../../images/yui/sprite.png) #fff no-repeat 0px 0px; =
HEIGHT: 16px; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px =
solid
}
.yui-skin-sam .yuimenu .bottomscrollbar {
	BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; =
BACKGROUND: url(../../images/yui/sprite.png) #fff no-repeat 0px 0px; =
HEIGHT: 16px; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px =
solid
}
.yui-skin-sam .yuimenu .topscrollbar {
	BACKGROUND-POSITION: center -950px; BORDER-BOTTOM-WIDTH: 0px
}
.yui-skin-sam .yuimenu .topscrollbar_disabled {
	BACKGROUND-POSITION: center -975px
}
.yui-skin-sam .yuimenu .bottomscrollbar {
	BACKGROUND-POSITION: center -850px; BORDER-TOP-WIDTH: 0px
}
.yui-skin-sam .yuimenu .bottomscrollbar_disabled {
	BACKGROUND-POSITION: center -875px
}
.yui-skin-sam .yuimenuitem {
	_border-bottom: solid 1px #fff
}
.yui-skin-sam .yuimenuitemlabel {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 20px; PADDING-RIGHT: 20px; COLOR: =
#000; CURSOR: pointer; TEXT-DECORATION: none; PADDING-TOP: 0px
}
.yui-skin-sam .yuimenuitemlabel .helptext {
	MARGIN-TOP: -1.5em
}
.yui-skin-sam .yuimenuitem-hassubmenu {
	BACKGROUND-IMAGE: url(../../images/yui/menuitem_submenuindicator.png); =
BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: right center
}
.yui-skin-sam .yuimenuitem-checked {
	BACKGROUND-IMAGE: url(../../images/yui/menuitem_checkbox.png); =
BACKGROUND-REPEAT: no-repeat; BACKGROUND-POSITION: left center
}
.yui-skin-sam .yui-menu-shadow-visible {
	BACKGROUND-COLOR: #000; opacity: .12
}
.yui-skin-sam .yuimenuitem-selected {
	BACKGROUND-COLOR: #b3d4ff
}
.yui-skin-sam .yuimenuitemlabel-disabled {
	COLOR: #a6a6a6; CURSOR: pointer
}
.yui-skin-sam .yuimenuitem-hassubmenu-disabled {
	BACKGROUND-IMAGE: =
url(../../images/yui/menuitem_submenuindicator_disabled.png)
}
.yui-skin-sam .yuimenuitem-checked-disabled {
	BACKGROUND-IMAGE: url(../../images/yui/menuitem_checkbox_disabled.png)
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/yui/tabview.css?1248796221

.yui-navset .yui-nav LI {
	MARGIN: 0px 0.5em 0px 0px
}
.yui-navset .yui-navset-top .yui-nav LI {
	MARGIN: 0px 0.5em 0px 0px
}
.yui-navset .yui-navset-bottom .yui-nav LI {
	MARGIN: 0px 0.5em 0px 0px
}
.yui-navset-left .yui-nav LI {
	MARGIN: 0px 0px 0.5em
}
.yui-navset-right .yui-nav LI {
	MARGIN: 0px 0px 0.5em
}
.yui-navset .yui-navset-left .yui-nav {
	WIDTH: 6em
}
.yui-navset .yui-navset-right .yui-nav {
	WIDTH: 6em
}
.yui-navset-left .yui-nav {
	WIDTH: 6em
}
.yui-navset-right .yui-nav {
	WIDTH: 6em
}
.yui-navset-top .yui-nav {
	WIDTH: auto
}
.yui-navset-bottom .yui-nav {
	WIDTH: auto
}
.yui-navset .yui-navset-left {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 6em; PADDING-RIGHT: 0px; =
PADDING-TOP: 0px
}
.yui-navset-left {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 6em; PADDING-RIGHT: 0px; =
PADDING-TOP: 0px
}
.yui-navset-right {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 6em; =
PADDING-TOP: 0px
}
.yui-navset-top {
=09
}
.yui-navset-bottom {
=09
}
.yui-nav {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; LIST-STYLE-IMAGE: none; PADDING-TOP: 0px
}
.yui-nav LI {
	PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; LIST-STYLE-IMAGE: none; PADDING-TOP: 0px
}
.yui-navset LI EM {
	FONT-STYLE: normal
}
.yui-navset {
	POSITION: relative; ZOOM: 1
}
.yui-navset .yui-content {
	ZOOM: 1
}
.yui-navset .yui-nav LI {
	ZOOM: 1; DISPLAY: inline-block; VERTICAL-ALIGN: bottom; CURSOR: pointer
}
.yui-navset .yui-navset-top .yui-nav LI {
	ZOOM: 1; DISPLAY: inline-block; VERTICAL-ALIGN: bottom; CURSOR: pointer
}
.yui-navset .yui-navset-bottom .yui-nav LI {
	ZOOM: 1; DISPLAY: inline-block; VERTICAL-ALIGN: bottom; CURSOR: pointer
}
.yui-navset-left .yui-nav LI {
	DISPLAY: block
}
.yui-navset-right .yui-nav LI {
	DISPLAY: block
}
.yui-navset .yui-nav A {
	POSITION: relative
}
.yui-navset .yui-nav LI A {
	ZOOM: 1; DISPLAY: inline-block; VERTICAL-ALIGN: bottom
}
.yui-navset-top .yui-nav LI A {
	ZOOM: 1; DISPLAY: inline-block; VERTICAL-ALIGN: bottom
}
.yui-navset-bottom .yui-nav LI A {
	ZOOM: 1; DISPLAY: inline-block; VERTICAL-ALIGN: bottom
}
.yui-navset-left .yui-nav LI A {
	DISPLAY: block
}
.yui-navset-right .yui-nav LI A {
	DISPLAY: block
}
.yui-navset-bottom .yui-nav LI A {
	VERTICAL-ALIGN: text-top
}
.yui-navset .yui-nav LI A EM {
	DISPLAY: block
}
.yui-navset-top .yui-nav LI A EM {
	DISPLAY: block
}
.yui-navset-bottom .yui-nav LI A EM {
	DISPLAY: block
}
.yui-navset .yui-navset-left .yui-nav {
	Z-INDEX: 1; POSITION: absolute
}
.yui-navset .yui-navset-right .yui-nav {
	Z-INDEX: 1; POSITION: absolute
}
.yui-navset-left .yui-nav {
	Z-INDEX: 1; POSITION: absolute
}
.yui-navset-right .yui-nav {
	Z-INDEX: 1; POSITION: absolute
}
.yui-navset-top .yui-nav {
	POSITION: static
}
.yui-navset-bottom .yui-nav {
	POSITION: static
}
.yui-navset .yui-navset-left .yui-nav {
	RIGHT: auto; LEFT: 0px
}
.yui-navset-left .yui-nav {
	RIGHT: auto; LEFT: 0px
}
.yui-navset .yui-navset-right .yui-nav {
	RIGHT: 0px; LEFT: auto
}
.yui-navset-right .yui-nav {
	RIGHT: 0px; LEFT: auto
}
.yui-skin-sam .yui-navset .yui-nav {
	BORDER-BOTTOM: #2647a0 5px solid; BORDER-LEFT: #2647a0 0px solid; ZOOM: =
1; BORDER-TOP: #2647a0 0px solid; BORDER-RIGHT: #2647a0 0px solid; =
Xposition: relative
}
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav {
	BORDER-BOTTOM: #2647a0 5px solid; BORDER-LEFT: #2647a0 0px solid; ZOOM: =
1; BORDER-TOP: #2647a0 0px solid; BORDER-RIGHT: #2647a0 0px solid; =
Xposition: relative
}
.yui-skin-sam .yui-navset .yui-nav LI {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0.16em 0px 0px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; ZOOM: 1; PADDING-TOP: 1px
}
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav LI {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0.16em 0px 0px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; ZOOM: 1; PADDING-TOP: 1px
}
.yui-skin-sam .yui-navset .yui-nav .selected {
	MARGIN: 0px 0.16em -1px 0px
}
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected {
	MARGIN: 0px 0.16em -1px 0px
}
.yui-skin-sam .yui-navset .yui-nav A {
	BORDER-BOTTOM: #a3a3a3 0px solid; POSITION: relative; BORDER-LEFT: =
#a3a3a3 1px solid; BACKGROUND: url(../../images/yui/sprite.png) #d8d8d8 =
repeat-x; COLOR: #000; BORDER-TOP: #a3a3a3 0px solid; BORDER-RIGHT: =
#a3a3a3 1px solid; TEXT-DECORATION: none
}
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav A {
	BORDER-BOTTOM: #a3a3a3 0px solid; POSITION: relative; BORDER-LEFT: =
#a3a3a3 1px solid; BACKGROUND: url(../../images/yui/sprite.png) #d8d8d8 =
repeat-x; COLOR: #000; BORDER-TOP: #a3a3a3 0px solid; BORDER-RIGHT: =
#a3a3a3 1px solid; TEXT-DECORATION: none
}
.yui-skin-sam .yui-navset .yui-nav A EM {
	BORDER-BOTTOM: #a3a3a3 0px solid; POSITION: relative; BORDER-LEFT: =
#a3a3a3 0px solid; PADDING-BOTTOM: 0.25em; PADDING-LEFT: 0.75em; BOTTOM: =
0px; PADDING-RIGHT: 0.75em; BORDER-TOP: #a3a3a3 1px solid; TOP: -1px; =
CURSOR: hand; RIGHT: 0px; BORDER-RIGHT: #a3a3a3 0px solid; PADDING-TOP: =
0.25em; LEFT: 0px
}
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav A EM {
	BORDER-BOTTOM: #a3a3a3 0px solid; POSITION: relative; BORDER-LEFT: =
#a3a3a3 0px solid; PADDING-BOTTOM: 0.25em; PADDING-LEFT: 0.75em; BOTTOM: =
0px; PADDING-RIGHT: 0.75em; BORDER-TOP: #a3a3a3 1px solid; TOP: -1px; =
CURSOR: hand; RIGHT: 0px; BORDER-RIGHT: #a3a3a3 0px solid; PADDING-TOP: =
0.25em; LEFT: 0px
}
.yui-skin-sam .yui-navset .yui-nav .selected A {
	BACKGROUND: url(../../images/yui/sprite.png) #2647a0 repeat-x left =
-1400px; COLOR: #fff
}
.yui-skin-sam .yui-navset .yui-nav .selected A:focus {
	BACKGROUND: url(../../images/yui/sprite.png) #2647a0 repeat-x left =
-1400px; COLOR: #fff
}
.yui-skin-sam .yui-navset .yui-nav .selected A:hover {
	BACKGROUND: url(../../images/yui/sprite.png) #2647a0 repeat-x left =
-1400px; COLOR: #fff
}
.yui-skin-sam .yui-navset .yui-nav A:hover {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: 0px; =
BACKGROUND: url(../../images/yui/sprite.png) #bfdaff repeat-x left =
-1300px
}
.yui-skin-sam .yui-navset .yui-nav A:focus {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: 0px; =
BACKGROUND: url(../../images/yui/sprite.png) #bfdaff repeat-x left =
-1300px
}
.yui-skin-sam .yui-navset .yui-nav .selected A EM {
	PADDING-BOTTOM: 0.35em; PADDING-LEFT: 0.75em; PADDING-RIGHT: 0.75em; =
PADDING-TOP: 0.35em
}
.yui-skin-sam .yui-navset .yui-nav .selected A {
	BORDER-BOTTOM-COLOR: #243356; BORDER-TOP-COLOR: #243356; =
BORDER-RIGHT-COLOR: #243356; BORDER-LEFT-COLOR: #243356
}
.yui-skin-sam .yui-navset .yui-nav .selected A EM {
	BORDER-BOTTOM-COLOR: #243356; BORDER-TOP-COLOR: #243356; =
BORDER-RIGHT-COLOR: #243356; BORDER-LEFT-COLOR: #243356
}
.yui-skin-sam .yui-navset .yui-content {
	BACKGROUND: #edf5ff
}
.yui-skin-sam .yui-navset .yui-content {
	BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; =
PADDING-BOTTOM: 0.25em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
BORDER-TOP: #243356 1px solid; BORDER-RIGHT: #808080 1px solid; =
PADDING-TOP: 0.25em
}
.yui-skin-sam .yui-navset .yui-navset-top .yui-content {
	BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; =
PADDING-BOTTOM: 0.25em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
BORDER-TOP: #243356 1px solid; BORDER-RIGHT: #808080 1px solid; =
PADDING-TOP: 0.25em
}
.yui-skin-sam .yui-navset-left .yui-nav {
	BORDER-RIGHT-WIDTH: 5px; BOTTOM: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; TOP: 0px; Xposition: =
absolute
}
.yui-skin-sam .yui-navset .yui-navset-left .yui-nav {
	BORDER-RIGHT-WIDTH: 5px; BOTTOM: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; TOP: 0px; Xposition: =
absolute
}
.yui-skin-sam .yui-navset .yui-navset-right .yui-nav {
	BORDER-RIGHT-WIDTH: 5px; BOTTOM: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; TOP: 0px; Xposition: =
absolute
}
.yui-skin-sam .yui-navset-right .yui-nav {
	BORDER-RIGHT-WIDTH: 5px; BOTTOM: 0px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; TOP: 0px; Xposition: =
absolute
}
.yui-skin-sam .yui-navset .yui-navset-right .yui-nav {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 5px
}
.yui-skin-sam .yui-navset-right .yui-nav {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 5px
}
.yui-skin-sam .yui-navset-left .yui-nav LI {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0.16em; PADDING-LEFT: 1px; =
PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.yui-skin-sam .yui-navset .yui-navset-left .yui-nav LI {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0.16em; PADDING-LEFT: 1px; =
PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.yui-skin-sam .yui-navset-right .yui-nav LI {
	PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0.16em; PADDING-LEFT: 1px; =
PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
.yui-skin-sam .yui-navset-right .yui-nav LI {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 1px; =
PADDING-TOP: 0px
}
.yui-skin-sam .yui-navset-left .yui-nav .selected {
	MARGIN: 0px -1px 0.16em 0px
}
.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected {
	MARGIN: 0px -1px 0.16em 0px
}
.yui-skin-sam .yui-navset-right .yui-nav .selected {
	MARGIN: 0px 0px 0.16em -1px
}
.yui-skin-sam .yui-navset-left .yui-nav A {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 1px; BORDER-BOTTOM-WIDTH: =
1px; BORDER-LEFT-WIDTH: 0px
}
.yui-skin-sam .yui-navset-right .yui-nav A {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 1px; BORDER-BOTTOM-WIDTH: =
1px; BORDER-LEFT-WIDTH: 0px
}
.yui-skin-sam .yui-navset-left .yui-nav A EM {
	PADDING-BOTTOM: 0.2em; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0.75em; =
PADDING-RIGHT: 0.75em; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; =
BORDER-LEFT-WIDTH: 1px; TOP: auto; PADDING-TOP: 0.2em; LEFT: -1px
}
.yui-skin-sam .yui-navset .yui-navset-left .yui-nav A EM {
	PADDING-BOTTOM: 0.2em; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0.75em; =
PADDING-RIGHT: 0.75em; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; =
BORDER-LEFT-WIDTH: 1px; TOP: auto; PADDING-TOP: 0.2em; LEFT: -1px
}
.yui-skin-sam .yui-navset-right .yui-nav A EM {
	PADDING-BOTTOM: 0.2em; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0.75em; =
PADDING-RIGHT: 0.75em; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; =
BORDER-LEFT-WIDTH: 1px; TOP: auto; PADDING-TOP: 0.2em; LEFT: -1px
}
.yui-skin-sam .yui-navset-right .yui-nav A EM {
	BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 0px; RIGHT: -1px; LEFT: auto
}
.yui-skin-sam .yui-navset-left .yui-nav A {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-left .yui-nav .selected A {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-left .yui-nav A:hover {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-right .yui-nav A {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-right .yui-nav .selected A {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-right .yui-nav A:hover {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-bottom .yui-nav A {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-bottom .yui-nav .selected A {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-bottom .yui-nav A:hover {
	BACKGROUND-IMAGE: none
}
.yui-skin-sam .yui-navset-left .yui-content {
	BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #243356 1px solid; =
BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid
}
.yui-skin-sam .yui-navset-bottom .yui-nav {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 5px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 0px
}
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav {
	BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 5px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-LEFT-WIDTH: 0px
}
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected {
	MARGIN: -1px 0.16em 0px 0px
}
.yui-skin-sam .yui-navset-bottom .yui-nav .selected {
	MARGIN: -1px 0.16em 0px 0px
}
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav LI {
	PADDING-BOTTOM: 1px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
VERTICAL-ALIGN: top; PADDING-TOP: 0px
}
.yui-skin-sam .yui-navset-bottom .yui-nav LI {
	PADDING-BOTTOM: 1px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
VERTICAL-ALIGN: top; PADDING-TOP: 0px
}
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav LI A {
=09
}
.yui-skin-sam .yui-navset-bottom .yui-nav LI A {
=09
}
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav A EM {
	BORDER-RIGHT-WIDTH: 0px; BOTTOM: -1px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-WIDTH: 0px; TOP: auto
}
.yui-skin-sam .yui-navset-bottom .yui-nav A EM {
	BORDER-RIGHT-WIDTH: 0px; BOTTOM: -1px; BORDER-TOP-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-WIDTH: 0px; TOP: auto
}
.yui-skin-sam .yui-navset-bottom .yui-content {
	BORDER-BOTTOM: #243356 1px solid; BORDER-LEFT: #808080 1px solid; =
BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid
}
.yui-skin-sam .yui-navset .yui-navset-bottom .yui-content {
	BORDER-BOTTOM: #243356 1px solid; BORDER-LEFT: #808080 1px solid; =
BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/forms.css?1248796221

FIELDSET {
	BORDER-BOTTOM: #8a8a8a 1px solid; BORDER-LEFT: #8a8a8a 1px solid; =
PADDING-BOTTOM: 0.5em; MARGIN-TOP: 0.3em; PADDING-LEFT: 1em; =
PADDING-RIGHT: 1em; BORDER-TOP: #8a8a8a 1px solid; BORDER-RIGHT: #8a8a8a =
1px solid; PADDING-TOP: 0.5em
}
LABEL {
	DISPLAY: block; COLOR: #8a8a8a; FONT-SIZE: 123.1%; FONT-WEIGHT: bold
}
LABEL.radio {
	DISPLAY: inline; COLOR: black; MARGIN-LEFT: 0.3em; FONT-SIZE: 100%; =
CURSOR: pointer; MARGIN-RIGHT: 1.5em
}
DIV.form_row {
	MARGIN-TOP: 0.5em
}
SPAN.mandatory_tag {
	MARGIN: 0px 0.5em; COLOR: red; CURSOR: help; FONT-WEIGHT: bold
}
LABEL SPAN.input_help {
	FONT-SIZE: 93%; FONT-WEIGHT: normal
}
LABEL SPAN.input_help {
	COLOR: #999
}
P.input_help {
	COLOR: #999
}
.buttonset {
	TEXT-ALIGN: right
}
.buttonset INPUT {
	PADDING-BOTTOM: 0.5em; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; =
FONT-SIZE: 140%; PADDING-TOP: 0.5em
}
FORM.button-to DIV {
	DISPLAY: inline
}
FORM.button-to {
	DISPLAY: inline
}
SELECT {
	BORDER-BOTTOM: #cbb945 1px solid; BORDER-LEFT: #cbb945 1px solid; =
PADDING-BOTTOM: 0.2em; BACKGROUND-COLOR: #fffadb; MARGIN-TOP: 0.1em; =
PADDING-LEFT: 0.2em; PADDING-RIGHT: 0.2em; FONT-SIZE: 131%; BORDER-TOP: =
#cbb945 1px solid; BORDER-RIGHT: #cbb945 1px solid; PADDING-TOP: 0.2em
}
INPUT.text {
	BORDER-BOTTOM: #cbb945 1px solid; BORDER-LEFT: #cbb945 1px solid; =
PADDING-BOTTOM: 0.2em; BACKGROUND-COLOR: #fffadb; MARGIN-TOP: 0.1em; =
PADDING-LEFT: 0.2em; PADDING-RIGHT: 0.2em; FONT-SIZE: 131%; BORDER-TOP: =
#cbb945 1px solid; BORDER-RIGHT: #cbb945 1px solid; PADDING-TOP: 0.2em
}
TEXTAREA {
	BORDER-BOTTOM: #cbb945 1px solid; BORDER-LEFT: #cbb945 1px solid; =
PADDING-BOTTOM: 0.2em; BACKGROUND-COLOR: #fffadb; MARGIN-TOP: 0.1em; =
PADDING-LEFT: 0.2em; PADDING-RIGHT: 0.2em; FONT-SIZE: 131%; BORDER-TOP: =
#cbb945 1px solid; BORDER-RIGHT: #cbb945 1px solid; PADDING-TOP: 0.2em
}
.maxwidth {
	WIDTH: 99%
}
.medium_width {
	WIDTH: 50%
}
.min_width {
	WIDTH: 30%
}
LEGEND {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0.5em; PADDING-RIGHT: 0.5em; COLOR: =
#7faa69; MARGIN-LEFT: 0.5em; FONT-SIZE: 153.9%; PADDING-TOP: 0px
}
#login_form {
	BORDER-BOTTOM: #cbd6df 1px solid; BORDER-LEFT: #cbd6df 1px solid; =
PADDING-BOTTOM: 0.5em; BACKGROUND-COLOR: #f1f1f1; PADDING-LEFT: 0.5em; =
PADDING-RIGHT: 0.5em; BORDER-TOP: #cbd6df 0px solid; BORDER-RIGHT: =
#cbd6df 1px solid; PADDING-TOP: 0.5em
}
.editor_invite {
	FONT-STYLE: italic; COLOR: #999
}
.editor_ok_button {
	TEXT-TRANSFORM: uppercase
}
.editor_cancel {
	MARGIN-LEFT: 0.5em
}
.inplaceeditor-form {
	MARGIN-BOTTOM: 0.8em
}
.editor_field {
	MARGIN-BOTTOM: 0.5em
}
.fieldWithErrors {
	PADDING-BOTTOM: 1px; BACKGROUND-COLOR: red; PADDING-LEFT: 1px; =
PADDING-RIGHT: 1px; DISPLAY: table; PADDING-TOP: 1px
}
#errorExplanation {
	BORDER-BOTTOM: #c63 1px solid; BORDER-LEFT: #c63 1px solid; =
PADDING-BOTTOM: 1em; BACKGROUND-COLOR: #fff; PADDING-LEFT: 1em; =
PADDING-RIGHT: 1em; FONT-SIZE: 108%; BORDER-TOP: #c63 1px solid; =
BORDER-RIGHT: #c63 1px solid; PADDING-TOP: 0.5em
}
#errorExplanation H2 {
	COLOR: #c63; FONT-SIZE: 146.5%
}
#errorExplanation P {
	COLOR: #c63
}
#errorExplanation UL LI {
	LIST-STYLE-TYPE: square; COLOR: #333; MARGIN-LEFT: 1.5em
}
#submit-topics {
	MARGIN: 1em 0px
}
#submit-topics DL.col DD {
	PADDING-LEFT: 5px
}
#submit-topics DL.col DT {
	PADDING-LEFT: 5px
}
.col {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; WHITE-SPACE: nowrap; PADDING-TOP: 0px
}
.col DT {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; WHITE-SPACE: nowrap; PADDING-TOP: 0px
}
.col DD {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; WHITE-SPACE: nowrap; PADDING-TOP: 0px
}
.col {
	FLOAT: left; MARGIN-RIGHT: 8px
}
DL.col {
	FLOAT: left; MARGIN-RIGHT: 8px
}
DL.col DT {
	FONT-WEIGHT: bold
}
.col {
	PADDING-BOTTOM: 15px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; =
PADDING-TOP: 5px
}
* HTML DL.col {
	HEIGHT: 160px
}
.col LABEL {
	DISPLAY: inline; FONT-WEIGHT: normal
}
FIELDSET .col DT {
	TEXT-ALIGN: left; WIDTH: auto; FLOAT: none
}
DL.col DT {
	MARGIN-TOP: 5px; FONT-SIZE: 105%; FONT-WEIGHT: bold
}
DL.col DD {
	PADDING-LEFT: 20px; FONT-SIZE: 80%; PADDING-TOP: 2px
}
DL.col LABEL {
	FONT-WEIGHT: bold
}
DL.col DD LABEL {
	LETTER-SPACING: 0em; FONT-WEIGHT: normal
}
DL.col INPUT {
	MARGIN-TOP: -1px; VERTICAL-ALIGN: middle
}
#submit-topics DL.col DD {
	PADDING-LEFT: 5px
}
#submit-topics DL.col DT {
	PADDING-LEFT: 5px
}
#menu_leading #login LABEL {
	DISPLAY: inline; FONT-SIZE: 108%
}
#menu_leading #login SELECT {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: =
108%; PADDING-TOP: 0px
}
#menu_leading #login INPUT.text {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: =
108%; PADDING-TOP: 0px
}
#global_search INPUT.text {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
BACKGROUND-COLOR: #fff; COLOR: #666; FONT-SIZE: 100%; BORDER-TOP: #ccc =
1px solid; BORDER-RIGHT: #ccc 1px solid
}
#global_search INPUT.text:hover {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; COLOR: =
#000; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
Content-Location: http://europaconcorsi.com/stylesheets/events.css?1248796221

#event .event_venue STRONG {
	COLOR: #e45b00
}
#event .event_dates STRONG {
	COLOR: #e45b00
}
#event .ended {
	COLOR: red
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/stylesheets/iefix.css?1248796221

.yui-skin-sam .yuimenubaritemlabel {
	BORDER-BOTTOM: 0px; BORDER-TOP: #808080 1px solid
}
.autoclear {
	DISPLAY: inline-block
}
.autoclear {
	DISPLAY: block
}
#sidebar .menu A {
=09
}
#con-login_form {
	WIDTH: 10%
}
#con-login_form FORM INPUT.text {
	WIDTH: 10em
}
.extra_nav UL {
	HEIGHT: 1%; PADDING-TOP: 4px
}
#doc2 .extra_nav LI {
=09
}
#doc2 .extra_nav LI.active A {
	BACKGROUND-POSITION: 0px 0px
}
#doc2 .extra_nav LI A:hover {
	BACKGROUND-POSITION: 0px -100px; COLOR: black
}
#doc2 .extra_nav LI.active A:hover {
	BACKGROUND-POSITION: 0px 0px
}
#navcontainer A {
	PADDING-BOTTOM: 0.41em; PADDING-LEFT: 0.41em; WIDTH: 5.6em; =
PADDING-RIGHT: 0.41em; PADDING-TOP: 0.41em
}
#ft {
	MARGIN: 3em 0px 1em; BACKGROUND: #f1f0e9
}
.yui-navset SPAN {
	FLOAT: none
}

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/swfobject.js?1248796221

/**=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;
------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/yui/yahoo-dom-event.js?1248796221

/*=0A=
Copyright (c) 2007, Yahoo! Inc. All rights reserved.=0A=
Code licensed under the BSD License:=0A=
http://developer.yahoo.net/yui/license.txt=0A=
version: 2.4.0=0A=
*/=0A=
if(typeof YAHOO=3D=3D"undefined"||!YAHOO){var =
YAHOO=3D{};}YAHOO.namespace=3Dfunction(){var =
A=3Darguments,E=3Dnull,C,B,D;for(C=3D0;C<A.length;C=3DC+1){D=3DA[C].split=
(".");E=3DYAHOO;for(B=3D(D[0]=3D=3D"YAHOO")?1:0;B<D.length;B=3DB+1){E[D[B=
]]=3DE[D[B]]||{};E=3DE[D[B]];}}return =
E;};YAHOO.log=3Dfunction(D,A,C){var =
B=3DYAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return =
false;}};YAHOO.register=3Dfunction(A,E,D){var =
I=3DYAHOO.env.modules;if(!I[A]){I[A]=3D{versions:[],builds:[]};}var =
B=3DI[A],H=3DD.version,G=3DD.build,F=3DYAHOO.env.listeners;B.name=3DA;B.v=
ersion=3DH;B.build=3DG;B.versions.push(H);B.builds.push(G);B.mainClass=3D=
E;for(var =
C=3D0;C<F.length;C=3DC+1){F[C](B);}if(E){E.VERSION=3DH;E.BUILD=3DG;}else{=
YAHOO.log("mainClass is undefined for module =
"+A,"warn");}};YAHOO.env=3DYAHOO.env||{modules:[],listeners:[]};YAHOO.env=
.getVersion=3Dfunction(A){return =
YAHOO.env.modules[A]||null;};YAHOO.env.ua=3Dfunction(){var =
C=3D{ie:0,opera:0,gecko:0,webkit:0,mobile:null};var =
B=3Dnavigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=3D1;}A=3DB.match=
(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=3DparseFloat(A[1]);if(/ =
Mobile\//.test(B)){C.mobile=3D"Apple";}else{A=3DB.match(/NokiaN[^\/]*/);i=
f(A){C.mobile=3DA[0];}}}if(!C.webkit){A=3DB.match(/Opera[\s\/]([^\s]*)/);=
if(A&&A[1]){C.opera=3DparseFloat(A[1]);A=3DB.match(/Opera =
Mini[^;]*/);if(A){C.mobile=3DA[0];}}else{A=3DB.match(/MSIE\s([^;]*)/);if(=
A&&A[1]){C.ie=3DparseFloat(A[1]);}else{A=3DB.match(/Gecko\/([^\s]*)/);if(=
A){C.gecko=3D1;A=3DB.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=3DparseFl=
oat(A[1]);}}}}}return =
C;}();(function(){YAHOO.namespace("util","widget","example");if("undefine=
d"!=3D=3Dtypeof YAHOO_config){var =
B=3DYAHOO_config.listener,A=3DYAHOO.env.listeners,D=3Dtrue,C;if(B){for(C=3D=
0;C<A.length;C=3DC+1){if(A[C]=3D=3DB){D=3Dfalse;break;}}if(D){A.push(B);}=
}}})();YAHOO.lang=3DYAHOO.lang||{isArray:function(B){if(B){var =
A=3DYAHOO.lang;return =
A.isNumber(B.length)&&A.isFunction(B.splice);}return =
false;},isBoolean:function(A){return typeof =
A=3D=3D=3D"boolean";},isFunction:function(A){return typeof =
A=3D=3D=3D"function";},isNull:function(A){return =
A=3D=3D=3Dnull;},isNumber:function(A){return typeof =
A=3D=3D=3D"number"&&isFinite(A);},isObject:function(A){return(A&&(typeof =
A=3D=3D=3D"object"||YAHOO.lang.isFunction(A)))||false;},isString:function=
(A){return typeof A=3D=3D=3D"string";},isUndefined:function(A){return =
typeof =
A=3D=3D=3D"undefined";},hasOwnProperty:function(A,B){if(Object.prototype.=
hasOwnProperty){return A.hasOwnProperty(B);}return =
!YAHOO.lang.isUndefined(A[B])&&A.constructor.prototype[B]!=3D=3DA[B];},_I=
EEnumFix:function(C,B){if(YAHOO.env.ua.ie){var =
E=3D["toString","valueOf"],A;for(A=3D0;A<E.length;A=3DA+1){var =
F=3DE[A],D=3DB[F];if(YAHOO.lang.isFunction(D)&&D!=3DObject.prototype[F]){=
C[F]=3DD;}}}},extend:function(D,E,C){if(!E||!D){throw new =
Error("YAHOO.lang.extend failed, please check that all dependencies are =
included.");}var =
B=3Dfunction(){};B.prototype=3DE.prototype;D.prototype=3Dnew =
B();D.prototype.constructor=3DD;D.superclass=3DE.prototype;if(E.prototype=
.constructor=3D=3DObject.prototype.constructor){E.prototype.constructor=3D=
E;}if(C){for(var A in =
C){D.prototype[A]=3DC[A];}YAHOO.lang._IEEnumFix(D.prototype,C);}},augment=
Object:function(E,D){if(!D||!E){throw new Error("Absorb failed, verify =
dependencies.");}var =
A=3Darguments,C,F,B=3DA[2];if(B&&B!=3D=3Dtrue){for(C=3D2;C<A.length;C=3DC=
+1){E[A[C]]=3DD[A[C]];}}else{for(F in =
D){if(B||!E[F]){E[F]=3DD[F];}}YAHOO.lang._IEEnumFix(E,D);}},augmentProto:=
function(D,C){if(!C||!D){throw new Error("Augment failed, verify =
dependencies.");}var A=3D[D.prototype,C.prototype];for(var =
B=3D2;B<arguments.length;B=3DB+1){A.push(arguments[B]);}YAHOO.lang.augmen=
tObject.apply(this,A);},dump:function(A,G){var =
C=3DYAHOO.lang,D,F,I=3D[],J=3D"{...}",B=3D"f(){...}",H=3D", ",E=3D" =3D> =
";if(!C.isObject(A)){return A+"";}else{if(A instanceof Date||("nodeType" =
in A&&"tagName" in A)){return A;}else{if(C.isFunction(A)){return =
B;}}}G=3D(C.isNumber(G))?G:3;if(C.isArray(A)){I.push("[");for(D=3D0,F=3DA=
.length;D<F;D=3DD+1){if(C.isObject(A[D])){I.push((G>0)?C.dump(A[D],G-1):J=
);}else{I.push(A[D]);}I.push(H);}if(I.length>1){I.pop();}I.push("]");}els=
e{I.push("{");for(D in =
A){if(C.hasOwnProperty(A,D)){I.push(D+E);if(C.isObject(A[D])){I.push((G>0=
)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}}if(I.length>1){I.po=
p();}I.push("}");}return I.join("");},substitute:function(Q,B,J){var =
G,F,E,M,N,P,D=3DYAHOO.lang,L=3D[],C,H=3D"dump",K=3D" =
",A=3D"{",O=3D"}";for(;;){G=3DQ.lastIndexOf(A);if(G<0){break;}F=3DQ.index=
Of(O,G);if(G+1>=3DF){break;}C=3DQ.substring(G+1,F);M=3DC;P=3Dnull;E=3DM.i=
ndexOf(K);if(E>-1){P=3DM.substring(E+1);M=3DM.substring(0,E);}N=3DB[M];if=
(J){N=3DJ(M,N,P);}if(D.isObject(N)){if(D.isArray(N)){N=3DD.dump(N,parseIn=
t(P,10));}else{P=3DP||"";var =
I=3DP.indexOf(H);if(I>-1){P=3DP.substring(4);}if(N.toString=3D=3D=3DObjec=
t.prototype.toString||I>-1){N=3DD.dump(N,parseInt(P,10));}else{N=3DN.toSt=
ring();}}}else{if(!D.isString(N)&&!D.isNumber(N)){N=3D"~-"+L.length+"-~";=
L[L.length]=3DC;}}Q=3DQ.substring(0,G)+N+Q.substring(F+1);}for(G=3DL.leng=
th-1;G>=3D0;G=3DG-1){Q=3DQ.replace(new =
RegExp("~-"+G+"-~"),"{"+L[G]+"}","g");}return =
Q;},trim:function(A){try{return =
A.replace(/^\s+|\s+$/g,"");}catch(B){return A;}},merge:function(){var =
D=3D{},B=3Darguments;for(var =
C=3D0,A=3DB.length;C<A;C=3DC+1){YAHOO.lang.augmentObject(D,B[C],true);}re=
turn D;},later:function(H,B,I,D,E){H=3DH||0;B=3DB||{};var =
C=3DI,G=3DD,F,A;if(YAHOO.lang.isString(I)){C=3DB[I];}if(!C){throw new =
TypeError("method =
undefined");}if(!YAHOO.lang.isArray(G)){G=3D[D];}F=3Dfunction(){C.apply(B=
,G);};A=3D(E)?setInterval(F,H):setTimeout(F,H);return{interval:E,cancel:f=
unction(){if(this.interval){clearInterval(A);}else{clearTimeout(A);}}};},=
isValue:function(B){var =
A=3DYAHOO.lang;return(A.isObject(B)||A.isString(B)||A.isNumber(B)||A.isBo=
olean(B));}};YAHOO.util.Lang=3DYAHOO.lang;YAHOO.lang.augment=3DYAHOO.lang=
.augmentProto;YAHOO.augment=3DYAHOO.lang.augmentProto;YAHOO.extend=3DYAHO=
O.lang.extend;YAHOO.register("yahoo",YAHOO,{version:"2.4.0",build:"733"})=
;(function(){var =
B=3DYAHOO.util,L,J,H=3D0,K=3D{},F=3D{},N=3Dwindow.document;var =
C=3DYAHOO.env.ua.opera,M=3DYAHOO.env.ua.webkit,A=3DYAHOO.env.ua.gecko,G=3D=
YAHOO.env.ua.ie;var E=3D{HYPHEN:/(-[a-z])/i,ROOT_TAG:/^body|html$/i};var =
O=3Dfunction(Q){if(!E.HYPHEN.test(Q)){return Q;}if(K[Q]){return =
K[Q];}var =
R=3DQ;while(E.HYPHEN.exec(R)){R=3DR.replace(RegExp.$1,RegExp.$1.substr(1)=
.toUpperCase());}K[Q]=3DR;return R;};var P=3Dfunction(R){var =
Q=3DF[R];if(!Q){Q=3Dnew =
RegExp("(?:^|\\s+)"+R+"(?:\\s+|$)");F[R]=3DQ;}return =
Q;};if(N.defaultView&&N.defaultView.getComputedStyle){L=3Dfunction(Q,T){v=
ar S=3Dnull;if(T=3D=3D"float"){T=3D"cssFloat";}var =
R=3DN.defaultView.getComputedStyle(Q,"");if(R){S=3DR[O(T)];}return =
Q.style[T]||S;};}else{if(N.documentElement.currentStyle&&G){L=3Dfunction(=
Q,S){switch(O(S)){case"opacity":var =
U=3D100;try{U=3DQ.filters["DXImageTransform.Microsoft.Alpha"].opacity;}ca=
tch(T){try{U=3DQ.filters("alpha").opacity;}catch(T){}}return =
U/100;case"float":S=3D"styleFloat";default:var =
R=3DQ.currentStyle?Q.currentStyle[S]:null;return(Q.style[S]||R);}};}else{=
L=3Dfunction(Q,R){return =
Q.style[R];};}}if(G){J=3Dfunction(Q,R,S){switch(R){case"opacity":if(YAHOO=
.lang.isString(Q.style.filter)){Q.style.filter=3D"alpha(opacity=3D"+S*100=
+")";if(!Q.currentStyle||!Q.currentStyle.hasLayout){Q.style.zoom=3D1;}}br=
eak;case"float":R=3D"styleFloat";default:Q.style[R]=3DS;}};}else{J=3Dfunc=
tion(Q,R,S){if(R=3D=3D"float"){R=3D"cssFloat";}Q.style[R]=3DS;};}var =
D=3Dfunction(Q,R){return =
Q&&Q.nodeType=3D=3D1&&(!R||R(Q));};YAHOO.util.Dom=3D{get:function(S){if(S=
&&(S.tagName||S.item)){return S;}if(YAHOO.lang.isString(S)||!S){return =
N.getElementById(S);}if(S.length!=3D=3Dundefined){var T=3D[];for(var =
R=3D0,Q=3DS.length;R<Q;++R){T[T.length]=3DB.Dom.get(S[R]);}return =
T;}return S;},getStyle:function(Q,S){S=3DO(S);var R=3Dfunction(T){return =
L(T,S);};return =
B.Dom.batch(Q,R,B.Dom,true);},setStyle:function(Q,S,T){S=3DO(S);var =
R=3Dfunction(U){J(U,S,T);};B.Dom.batch(Q,R,B.Dom,true);},getXY:function(Q=
){var =
R=3Dfunction(S){if((S.parentNode=3D=3D=3Dnull||S.offsetParent=3D=3D=3Dnul=
l||this.getStyle(S,"display")=3D=3D"none")&&S!=3DS.ownerDocument.body){re=
turn false;}return I(S);};return =
B.Dom.batch(Q,R,B.Dom,true);},getX:function(Q){var =
R=3Dfunction(S){return B.Dom.getXY(S)[0];};return =
B.Dom.batch(Q,R,B.Dom,true);},getY:function(Q){var =
R=3Dfunction(S){return B.Dom.getXY(S)[1];};return =
B.Dom.batch(Q,R,B.Dom,true);},setXY:function(Q,T,S){var =
R=3Dfunction(W){var =
V=3Dthis.getStyle(W,"position");if(V=3D=3D"static"){this.setStyle(W,"posi=
tion","relative");V=3D"relative";}var =
Y=3Dthis.getXY(W);if(Y=3D=3D=3Dfalse){return false;}var =
X=3D[parseInt(this.getStyle(W,"left"),10),parseInt(this.getStyle(W,"top")=
,10)];if(isNaN(X[0])){X[0]=3D(V=3D=3D"relative")?0:W.offsetLeft;}if(isNaN=
(X[1])){X[1]=3D(V=3D=3D"relative")?0:W.offsetTop;}if(T[0]!=3D=3Dnull){W.s=
tyle.left=3DT[0]-Y[0]+X[0]+"px";}if(T[1]!=3D=3Dnull){W.style.top=3DT[1]-Y=
[1]+X[1]+"px";}if(!S){var =
U=3Dthis.getXY(W);if((T[0]!=3D=3Dnull&&U[0]!=3DT[0])||(T[1]!=3D=3Dnull&&U=
[1]!=3DT[1])){this.setXY(W,T,true);}}};B.Dom.batch(Q,R,B.Dom,true);},setX=
:function(R,Q){B.Dom.setXY(R,[Q,null]);},setY:function(Q,R){B.Dom.setXY(Q=
,[null,R]);},getRegion:function(Q){var =
R=3Dfunction(S){if((S.parentNode=3D=3D=3Dnull||S.offsetParent=3D=3D=3Dnul=
l||this.getStyle(S,"display")=3D=3D"none")&&S!=3DN.body){return =
false;}var T=3DB.Region.getRegion(S);return T;};return =
B.Dom.batch(Q,R,B.Dom,true);},getClientWidth:function(){return =
B.Dom.getViewportWidth();},getClientHeight:function(){return =
B.Dom.getViewportHeight();},getElementsByClassName:function(U,Y,V,W){Y=3D=
Y||"*";V=3D(V)?B.Dom.get(V):null||N;if(!V){return[];}var =
R=3D[],Q=3DV.getElementsByTagName(Y),X=3DP(U);for(var =
S=3D0,T=3DQ.length;S<T;++S){if(X.test(Q[S].className)){R[R.length]=3DQ[S]=
;if(W){W.call(Q[S],Q[S]);}}}return R;},hasClass:function(S,R){var =
Q=3DP(R);var T=3Dfunction(U){return Q.test(U.className);};return =
B.Dom.batch(S,T,B.Dom,true);},addClass:function(R,Q){var =
S=3Dfunction(T){if(this.hasClass(T,Q)){return =
false;}T.className=3DYAHOO.lang.trim([T.className,Q].join(" "));return =
true;};return =
B.Dom.batch(R,S,B.Dom,true);},removeClass:function(S,R){var Q=3DP(R);var =
T=3Dfunction(U){if(!this.hasClass(U,R)){return false;}var =
V=3DU.className;U.className=3DV.replace(Q," =
");if(this.hasClass(U,R)){this.removeClass(U,R);}U.className=3DYAHOO.lang=
.trim(U.className);return true;};return =
B.Dom.batch(S,T,B.Dom,true);},replaceClass:function(T,R,Q){if(!Q||R=3D=3D=
=3DQ){return false;}var S=3DP(R);var =
U=3Dfunction(V){if(!this.hasClass(V,R)){this.addClass(V,Q);return =
true;}V.className=3DV.className.replace(S," "+Q+" =
");if(this.hasClass(V,R)){this.replaceClass(V,R,Q);}V.className=3DYAHOO.l=
ang.trim(V.className);return true;};return =
B.Dom.batch(T,U,B.Dom,true);},generateId:function(Q,S){S=3DS||"yui-gen";v=
ar R=3Dfunction(T){if(T&&T.id){return T.id;}var =
U=3DS+H++;if(T){T.id=3DU;}return U;};return =
B.Dom.batch(Q,R,B.Dom,true)||R.apply(B.Dom,arguments);},isAncestor:functi=
on(Q,R){Q=3DB.Dom.get(Q);R=3DB.Dom.get(R);if(!Q||!R){return =
false;}if(Q.contains&&R.nodeType&&!M){return =
Q.contains(R);}else{if(Q.compareDocumentPosition&&R.nodeType){return =
!!(Q.compareDocumentPosition(R)&16);}else{if(R.nodeType){return =
!!this.getAncestorBy(R,function(S){return S=3D=3DQ;});}}}return =
false;},inDocument:function(Q){return =
this.isAncestor(N.documentElement,Q);},getElementsBy:function(X,R,S,U){R=3D=
R||"*";S=3D(S)?B.Dom.get(S):null||N;if(!S){return[];}var =
T=3D[],W=3DS.getElementsByTagName(R);for(var =
V=3D0,Q=3DW.length;V<Q;++V){if(X(W[V])){T[T.length]=3DW[V];if(U){U(W[V]);=
}}}return =
T;},batch:function(U,X,W,S){U=3D(U&&(U.tagName||U.item))?U:B.Dom.get(U);i=
f(!U||!X){return false;}var =
T=3D(S)?W:window;if(U.tagName||U.length=3D=3D=3Dundefined){return =
X.call(T,U,W);}var V=3D[];for(var =
R=3D0,Q=3DU.length;R<Q;++R){V[V.length]=3DX.call(T,U[R],W);}return =
V;},getDocumentHeight:function(){var =
R=3D(N.compatMode!=3D"CSS1Compat")?N.body.scrollHeight:N.documentElement.=
scrollHeight;var Q=3DMath.max(R,B.Dom.getViewportHeight());return =
Q;},getDocumentWidth:function(){var =
R=3D(N.compatMode!=3D"CSS1Compat")?N.body.scrollWidth:N.documentElement.s=
crollWidth;var Q=3DMath.max(R,B.Dom.getViewportWidth());return =
Q;},getViewportHeight:function(){var Q=3Dself.innerHeight;var =
R=3DN.compatMode;if((R||G)&&!C){Q=3D(R=3D=3D"CSS1Compat")?N.documentEleme=
nt.clientHeight:N.body.clientHeight;=0A=
}return Q;},getViewportWidth:function(){var Q=3Dself.innerWidth;var =
R=3DN.compatMode;if(R||G){Q=3D(R=3D=3D"CSS1Compat")?N.documentElement.cli=
entWidth:N.body.clientWidth;}return =
Q;},getAncestorBy:function(Q,R){while(Q=3DQ.parentNode){if(D(Q,R)){return=
 Q;}}return =
null;},getAncestorByClassName:function(R,Q){R=3DB.Dom.get(R);if(!R){retur=
n null;}var S=3Dfunction(T){return B.Dom.hasClass(T,Q);};return =
B.Dom.getAncestorBy(R,S);},getAncestorByTagName:function(R,Q){R=3DB.Dom.g=
et(R);if(!R){return null;}var S=3Dfunction(T){return =
T.tagName&&T.tagName.toUpperCase()=3D=3DQ.toUpperCase();};return =
B.Dom.getAncestorBy(R,S);},getPreviousSiblingBy:function(Q,R){while(Q){Q=3D=
Q.previousSibling;if(D(Q,R)){return Q;}}return =
null;},getPreviousSibling:function(Q){Q=3DB.Dom.get(Q);if(!Q){return =
null;}return =
B.Dom.getPreviousSiblingBy(Q);},getNextSiblingBy:function(Q,R){while(Q){Q=
=3DQ.nextSibling;if(D(Q,R)){return Q;}}return =
null;},getNextSibling:function(Q){Q=3DB.Dom.get(Q);if(!Q){return =
null;}return =
B.Dom.getNextSiblingBy(Q);},getFirstChildBy:function(Q,S){var =
R=3D(D(Q.firstChild,S))?Q.firstChild:null;return =
R||B.Dom.getNextSiblingBy(Q.firstChild,S);},getFirstChild:function(Q,R){Q=
=3DB.Dom.get(Q);if(!Q){return null;}return =
B.Dom.getFirstChildBy(Q);},getLastChildBy:function(Q,S){if(!Q){return =
null;}var R=3D(D(Q.lastChild,S))?Q.lastChild:null;return =
R||B.Dom.getPreviousSiblingBy(Q.lastChild,S);},getLastChild:function(Q){Q=
=3DB.Dom.get(Q);return =
B.Dom.getLastChildBy(Q);},getChildrenBy:function(R,T){var =
S=3DB.Dom.getFirstChildBy(R,T);var =
Q=3DS?[S]:[];B.Dom.getNextSiblingBy(S,function(U){if(!T||T(U)){Q[Q.length=
]=3DU;}return false;});return =
Q;},getChildren:function(Q){Q=3DB.Dom.get(Q);if(!Q){}return =
B.Dom.getChildrenBy(Q);},getDocumentScrollLeft:function(Q){Q=3DQ||N;retur=
n =
Math.max(Q.documentElement.scrollLeft,Q.body.scrollLeft);},getDocumentScr=
ollTop:function(Q){Q=3DQ||N;return =
Math.max(Q.documentElement.scrollTop,Q.body.scrollTop);},insertBefore:fun=
ction(R,Q){R=3DB.Dom.get(R);Q=3DB.Dom.get(Q);if(!R||!Q||!Q.parentNode){re=
turn null;}return =
Q.parentNode.insertBefore(R,Q);},insertAfter:function(R,Q){R=3DB.Dom.get(=
R);Q=3DB.Dom.get(Q);if(!R||!Q||!Q.parentNode){return =
null;}if(Q.nextSibling){return =
Q.parentNode.insertBefore(R,Q.nextSibling);}else{return =
Q.parentNode.appendChild(R);}},getClientRegion:function(){var =
S=3DB.Dom.getDocumentScrollTop(),R=3DB.Dom.getDocumentScrollLeft(),T=3DB.=
Dom.getViewportWidth()+R,Q=3DB.Dom.getViewportHeight()+S;return new =
B.Region(S,T,Q,R);}};var =
I=3Dfunction(){if(N.documentElement.getBoundingClientRect){return =
function(R){var S=3DR.getBoundingClientRect();var =
Q=3DR.ownerDocument;return[S.left+B.Dom.getDocumentScrollLeft(Q),S.top+B.=
Dom.getDocumentScrollTop(Q)];};}else{return function(S){var =
T=3D[S.offsetLeft,S.offsetTop];var R=3DS.offsetParent;var =
Q=3D(M&&B.Dom.getStyle(S,"position")=3D=3D"absolute"&&S.offsetParent=3D=3D=
S.ownerDocument.body);if(R!=3DS){while(R){T[0]+=3DR.offsetLeft;T[1]+=3DR.=
offsetTop;if(!Q&&M&&B.Dom.getStyle(R,"position")=3D=3D"absolute"){Q=3Dtru=
e;}R=3DR.offsetParent;}}if(Q){T[0]-=3DS.ownerDocument.body.offsetLeft;T[1=
]-=3DS.ownerDocument.body.offsetTop;}R=3DS.parentNode;while(R.tagName&&!E=
.ROOT_TAG.test(R.tagName)){if(B.Dom.getStyle(R,"display").search(/^inline=
|table-row.*$/i)){T[0]-=3DR.scrollLeft;T[1]-=3DR.scrollTop;}R=3DR.parentN=
ode;}return =
T;};}}();})();YAHOO.util.Region=3Dfunction(C,D,A,B){this.top=3DC;this[1]=3D=
C;this.right=3DD;this.bottom=3DA;this.left=3DB;this[0]=3DB;};YAHOO.util.R=
egion.prototype.contains=3Dfunction(A){return(A.left>=3Dthis.left&&A.righ=
t<=3Dthis.right&&A.top>=3Dthis.top&&A.bottom<=3Dthis.bottom);};YAHOO.util=
.Region.prototype.getArea=3Dfunction(){return((this.bottom-this.top)*(thi=
s.right-this.left));};YAHOO.util.Region.prototype.intersect=3Dfunction(E)=
{var C=3DMath.max(this.top,E.top);var =
D=3DMath.min(this.right,E.right);var =
A=3DMath.min(this.bottom,E.bottom);var =
B=3DMath.max(this.left,E.left);if(A>=3DC&&D>=3DB){return new =
YAHOO.util.Region(C,D,A,B);}else{return =
null;}};YAHOO.util.Region.prototype.union=3Dfunction(E){var =
C=3DMath.min(this.top,E.top);var D=3DMath.max(this.right,E.right);var =
A=3DMath.max(this.bottom,E.bottom);var =
B=3DMath.min(this.left,E.left);return new =
YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=3Dfunct=
ion(){return("Region {top: "+this.top+", right: "+this.right+", bottom: =
"+this.bottom+", left: =
"+this.left+"}");};YAHOO.util.Region.getRegion=3Dfunction(D){var =
F=3DYAHOO.util.Dom.getXY(D);var C=3DF[1];var E=3DF[0]+D.offsetWidth;var =
A=3DF[1]+D.offsetHeight;var B=3DF[0];return new =
YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=3Dfunction(A,B){if(YAHOO.la=
ng.isArray(A)){B=3DA[1];A=3DA[0];}this.x=3Dthis.right=3Dthis.left=3Dthis[=
0]=3DA;this.y=3Dthis.top=3Dthis.bottom=3Dthis[1]=3DB;};YAHOO.util.Point.p=
rototype=3Dnew =
YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.4.0",=
build:"733"});YAHOO.util.CustomEvent=3Dfunction(D,B,C,A){this.type=3DD;th=
is.scope=3DB||window;this.silent=3DC;this.signature=3DA||YAHOO.util.Custo=
mEvent.LIST;this.subscribers=3D[];if(!this.silent){}var =
E=3D"_YUICEOnSubscribe";if(D!=3D=3DE){this.subscribeEvent=3Dnew =
YAHOO.util.CustomEvent(E,this,true);}this.lastError=3Dnull;};YAHOO.util.C=
ustomEvent.LIST=3D0;YAHOO.util.CustomEvent.FLAT=3D1;YAHOO.util.CustomEven=
t.prototype=3D{subscribe:function(B,C,A){if(!B){throw new Error("Invalid =
callback for subscriber to =
'"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A=
);}this.subscribers.push(new =
YAHOO.util.Subscriber(B,C,A));},unsubscribe:function(D,F){if(!D){return =
this.unsubscribeAll();}var E=3Dfalse;for(var =
B=3D0,A=3Dthis.subscribers.length;B<A;++B){var =
C=3Dthis.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=3Dtrue;}=
}return E;},fire:function(){var =
D=3Dthis.subscribers.length;if(!D&&this.silent){return true;}var =
G=3D[],F=3Dtrue,C,H=3Dfalse;for(C=3D0;C<arguments.length;++C){G.push(argu=
ments[C]);}if(!this.silent){}for(C=3D0;C<D;++C){var =
K=3Dthis.subscribers[C];if(!K){H=3Dtrue;}else{if(!this.silent){}var =
J=3DK.getScope(this.scope);if(this.signature=3D=3DYAHOO.util.CustomEvent.=
FLAT){var =
A=3Dnull;if(G.length>0){A=3DG[0];}try{F=3DK.fn.call(J,A,K.obj);}catch(E){=
this.lastError=3DE;}}else{try{F=3DK.fn.call(J,this.type,G,K.obj);}catch(E=
){this.lastError=3DE;}}if(false=3D=3D=3DF){if(!this.silent){}return =
false;}}}if(H){var =
I=3D[],B=3Dthis.subscribers;for(C=3D0,D=3DB.length;C<D;C=3DC+1){I.push(B[=
C]);}this.subscribers=3DI;}return =
true;},unsubscribeAll:function(){for(var =
B=3D0,A=3Dthis.subscribers.length;B<A;++B){this._delete(A-1-B);}this.subs=
cribers=3D[];return B;},_delete:function(A){var =
B=3Dthis.subscribers[A];if(B){delete B.fn;delete =
B.obj;}this.subscribers[A]=3Dnull;},toString:function(){return"CustomEven=
t: '"+this.type+"', scope: =
"+this.scope;}};YAHOO.util.Subscriber=3Dfunction(B,C,A){this.fn=3DB;this.=
obj=3DYAHOO.lang.isUndefined(C)?null:C;this.override=3DA;};YAHOO.util.Sub=
scriber.prototype.getScope=3Dfunction(A){if(this.override){if(this.overri=
de=3D=3D=3Dtrue){return this.obj;}else{return this.override;}}return =
A;};YAHOO.util.Subscriber.prototype.contains=3Dfunction(A,B){if(B){return=
(this.fn=3D=3DA&&this.obj=3D=3DB);}else{return(this.fn=3D=3DA);}};YAHOO.u=
til.Subscriber.prototype.toString=3Dfunction(){return"Subscriber { obj: =
"+this.obj+", override: "+(this.override||"no")+" =
}";};if(!YAHOO.util.Event){YAHOO.util.Event=3Dfunction(){var =
H=3Dfalse;var I=3D[];var J=3D[];var G=3D[];var E=3D[];var C=3D0;var =
F=3D[];var B=3D[];var A=3D0;var =
D=3D{63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};return{P=
OLL_RETRYS:4000,POLL_INTERVAL:10,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_=
SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webk=
it:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMR=
eady:false,startInterval:function(){if(!this._interval){var K=3Dthis;var =
L=3Dfunction(){K._tryPreloadAttach();};this._interval=3DsetInterval(L,thi=
s.POLL_INTERVAL);}},onAvailable:function(P,M,Q,O,N){var =
K=3D(YAHOO.lang.isString(P))?[P]:P;for(var =
L=3D0;L<K.length;L=3DL+1){F.push({id:K[L],fn:M,obj:Q,override:O,checkRead=
y:N});}C=3Dthis.POLL_RETRYS;this.startInterval();},onContentReady:functio=
n(M,K,N,L){this.onAvailable(M,K,N,L,true);},onDOMReady:function(K,M,L){if=
(this.DOMReady){setTimeout(function(){var =
N=3Dwindow;if(L){if(L=3D=3D=3Dtrue){N=3DM;}else{N=3DL;}}K.call(N,"DOMRead=
y",[],M);},0);}else{this.DOMReadyEvent.subscribe(K,M,L);}},addListener:fu=
nction(M,K,V,Q,L){if(!V||!V.call){return =
false;}if(this._isValidCollection(M)){var W=3Dtrue;for(var =
R=3D0,T=3DM.length;R<T;++R){W=3Dthis.on(M[R],K,V,Q,L)&&W;}return =
W;}else{if(YAHOO.lang.isString(M)){var =
P=3Dthis.getEl(M);if(P){M=3DP;}else{this.onAvailable(M,function(){YAHOO.u=
til.Event.on(M,K,V,Q,L);});return true;}}}if(!M){return =
false;}if("unload"=3D=3DK&&Q!=3D=3Dthis){J[J.length]=3D[M,K,V,Q,L];return=
 true;}var Y=3DM;if(L){if(L=3D=3D=3Dtrue){Y=3DQ;}else{Y=3DL;}}var =
N=3Dfunction(Z){return V.call(Y,YAHOO.util.Event.getEvent(Z,M),Q);};var =
X=3D[M,K,V,N,Y,Q,L];var =
S=3DI.length;I[S]=3DX;if(this.useLegacyEvent(M,K)){var =
O=3Dthis.getLegacyIndex(M,K);if(O=3D=3D-1||M!=3DG[O][0]){O=3DG.length;B[M=
.id+K]=3DO;G[O]=3D[M,K,M["on"+K]];E[O]=3D[];M["on"+K]=3Dfunction(Z){YAHOO=
.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(Z),O);};}E[O].push(=
X);}else{try{this._simpleAdd(M,K,N,false);}catch(U){this.lastError=3DU;th=
is.removeListener(M,K,V);return false;}}return =
true;},fireLegacyEvent:function(O,M){var =
Q=3Dtrue,K,S,R,T,P;S=3DE[M];for(var =
L=3D0,N=3DS.length;L<N;++L){R=3DS[L];if(R&&R[this.WFN]){T=3DR[this.ADJ_SC=
OPE];P=3DR[this.WFN].call(T,O);Q=3D(Q&&P);}}K=3DG[M];if(K&&K[2]){K[2](O);=
}return Q;},getLegacyIndex:function(L,M){var =
K=3Dthis.generateId(L)+M;if(typeof B[K]=3D=3D"undefined"){return =
-1;}else{return =
B[K];}},useLegacyEvent:function(L,M){if(this.webkit&&("click"=3D=3DM||"db=
lclick"=3D=3DM)){var =
K=3DparseInt(this.webkit,10);if(!isNaN(K)&&K<418){return true;}}return =
false;},removeListener:function(L,K,T){var O,R,V;if(typeof =
L=3D=3D"string"){L=3Dthis.getEl(L);}else{if(this._isValidCollection(L)){v=
ar =
U=3Dtrue;for(O=3D0,R=3DL.length;O<R;++O){U=3D(this.removeListener(L[O],K,=
T)&&U);}return U;}}if(!T||!T.call){return =
this.purgeElement(L,false,K);}if("unload"=3D=3DK){for(O=3D0,R=3DJ.length;=
O<R;O++){V=3DJ[O];if(V&&V[0]=3D=3DL&&V[1]=3D=3DK&&V[2]=3D=3DT){J[O]=3Dnul=
l;return true;}}return false;}var P=3Dnull;var =
Q=3Darguments[3];if("undefined"=3D=3D=3Dtypeof =
Q){Q=3Dthis._getCacheIndex(L,K,T);}if(Q>=3D0){P=3DI[Q];}if(!L||!P){return=
 false;}if(this.useLegacyEvent(L,K)){var =
N=3Dthis.getLegacyIndex(L,K);var =
M=3DE[N];if(M){for(O=3D0,R=3DM.length;O<R;++O){V=3DM[O];if(V&&V[this.EL]=3D=
=3DL&&V[this.TYPE]=3D=3DK&&V[this.FN]=3D=3DT){M[O]=3Dnull;break;}}}}else{=
try{this._simpleRemove(L,K,P[this.WFN],false);}catch(S){this.lastError=3D=
S;return false;}}delete I[Q][this.WFN];delete =
I[Q][this.FN];I[Q]=3Dnull;return true;},getTarget:function(M,L){var =
K=3DM.target||M.srcElement;return =
this.resolveTextNode(K);},resolveTextNode:function(K){if(K&&3=3D=3DK.node=
Type){return K.parentNode;}else{return K;}},getPageX:function(L){var =
K=3DL.pageX;if(!K&&0!=3D=3DK){K=3DL.clientX||0;if(this.isIE){K+=3Dthis._g=
etScrollLeft();}}return K;},getPageY:function(K){var =
L=3DK.pageY;if(!L&&0!=3D=3DL){L=3DK.clientY||0;if(this.isIE){L+=3Dthis._g=
etScrollTop();}}return =
L;},getXY:function(K){return[this.getPageX(K),this.getPageY(K)];=0A=
},getRelatedTarget:function(L){var =
K=3DL.relatedTarget;if(!K){if(L.type=3D=3D"mouseout"){K=3DL.toElement;}el=
se{if(L.type=3D=3D"mouseover"){K=3DL.fromElement;}}}return =
this.resolveTextNode(K);},getTime:function(M){if(!M.time){var L=3Dnew =
Date().getTime();try{M.time=3DL;}catch(K){this.lastError=3DK;return =
L;}}return =
M.time;},stopEvent:function(K){this.stopPropagation(K);this.preventDefaul=
t(K);},stopPropagation:function(K){if(K.stopPropagation){K.stopPropagatio=
n();}else{K.cancelBubble=3Dtrue;}},preventDefault:function(K){if(K.preven=
tDefault){K.preventDefault();}else{K.returnValue=3Dfalse;}},getEvent:func=
tion(M,K){var L=3DM||window.event;if(!L){var =
N=3Dthis.getEvent.caller;while(N){L=3DN.arguments[0];if(L&&Event=3D=3DL.c=
onstructor){break;}N=3DN.caller;}}return L;},getCharCode:function(L){var =
K=3DL.keyCode||L.charCode||0;if(YAHOO.env.ua.webkit&&(K in =
D)){K=3DD[K];}return K;},_getCacheIndex:function(O,P,N){for(var =
M=3D0,L=3DI.length;M<L;++M){var =
K=3DI[M];if(K&&K[this.FN]=3D=3DN&&K[this.EL]=3D=3DO&&K[this.TYPE]=3D=3DP)=
{return M;}}return -1;},generateId:function(K){var =
L=3DK.id;if(!L){L=3D"yuievtautoid-"+A;++A;K.id=3DL;}return =
L;},_isValidCollection:function(L){try{return(L&&typeof =
L!=3D=3D"string"&&L.length&&!L.tagName&&!L.alert&&typeof =
L[0]!=3D=3D"undefined");}catch(K){return =
false;}},elCache:{},getEl:function(K){return(typeof =
K=3D=3D=3D"string")?document.getElementById(K):K;},clearCache:function(){=
},DOMReadyEvent:new =
YAHOO.util.CustomEvent("DOMReady",this),_load:function(L){if(!H){H=3Dtrue=
;var =
K=3DYAHOO.util.Event;K._ready();K._tryPreloadAttach();}},_ready:function(=
L){var =
K=3DYAHOO.util.Event;if(!K.DOMReady){K.DOMReady=3Dtrue;K.DOMReadyEvent.fi=
re();K._simpleRemove(document,"DOMContentLoaded",K._ready);}},_tryPreload=
Attach:function(){if(this.locked){return =
false;}if(this.isIE){if(!this.DOMReady){this.startInterval();return =
false;}}this.locked=3Dtrue;var P=3D!H;if(!P){P=3D(C>0);}var O=3D[];var =
Q=3Dfunction(S,T){var =
R=3DS;if(T.override){if(T.override=3D=3D=3Dtrue){R=3DT.obj;}else{R=3DT.ov=
erride;}}T.fn.call(R,T.obj);};var =
L,K,N,M;for(L=3D0,K=3DF.length;L<K;++L){N=3DF[L];if(N&&!N.checkReady){M=3D=
this.getEl(N.id);if(M){Q(M,N);F[L]=3Dnull;}else{O.push(N);}}}for(L=3D0,K=3D=
F.length;L<K;++L){N=3DF[L];if(N&&N.checkReady){M=3Dthis.getEl(N.id);if(M)=
{if(H||M.nextSibling){Q(M,N);F[L]=3Dnull;}}else{O.push(N);}}}C=3D(O.lengt=
h=3D=3D=3D0)?0:C-1;if(P){this.startInterval();}else{clearInterval(this._i=
nterval);this._interval=3Dnull;}this.locked=3Dfalse;return =
true;},purgeElement:function(O,P,R){var =
M=3D(YAHOO.lang.isString(O))?this.getEl(O):O;var =
Q=3Dthis.getListeners(M,R),N,K;if(Q){for(N=3D0,K=3DQ.length;N<K;++N){var =
L=3DQ[N];this.removeListener(M,L.type,L.fn,L.index);}}if(P&&M&&M.childNod=
es){for(N=3D0,K=3DM.childNodes.length;N<K;++N){this.purgeElement(M.childN=
odes[N],P,R);}}},getListeners:function(M,K){var =
P=3D[],L;if(!K){L=3D[I,J];}else{if(K=3D=3D=3D"unload"){L=3D[J];}else{L=3D=
[I];}}var R=3D(YAHOO.lang.isString(M))?this.getEl(M):M;for(var =
O=3D0;O<L.length;O=3DO+1){var T=3DL[O];if(T&&T.length>0){for(var =
Q=3D0,S=3DT.length;Q<S;++Q){var =
N=3DT[Q];if(N&&N[this.EL]=3D=3D=3DR&&(!K||K=3D=3D=3DN[this.TYPE])){P.push=
({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.OVERRIDE]=
,scope:N[this.ADJ_SCOPE],index:Q});}}}}return(P.length)?P:null;},_unload:=
function(R){var =
Q=3DYAHOO.util.Event,O,N,L,K,M;for(O=3D0,K=3DJ.length;O<K;++O){L=3DJ[O];i=
f(L){var =
P=3Dwindow;if(L[Q.ADJ_SCOPE]){if(L[Q.ADJ_SCOPE]=3D=3D=3Dtrue){P=3DL[Q.UNL=
OAD_OBJ];}else{P=3DL[Q.ADJ_SCOPE];}}L[Q.FN].call(P,Q.getEvent(R,L[Q.EL]),=
L[Q.UNLOAD_OBJ]);J[O]=3Dnull;L=3Dnull;P=3Dnull;}}J=3Dnull;if(YAHOO.env.ua=
.IE&&I&&I.length>0){N=3DI.length;while(N){M=3DN-1;L=3DI[M];if(L){L[Q.EL].=
clearAttributes();}N=3DN-1;}L=3Dnull;}G=3Dnull;Q._simpleRemove(window,"un=
load",Q._unload);},_getScrollLeft:function(){return =
this._getScroll()[1];},_getScrollTop:function(){return =
this._getScroll()[0];},_getScroll:function(){var =
K=3Ddocument.documentElement,L=3Ddocument.body;if(K&&(K.scrollTop||K.scro=
llLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,=
L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:functio=
n(){if(window.addEventListener){return =
function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEve=
nt){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return =
function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener=
){return =
function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detach=
Event){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return =
function(){};}}}()};}();(function(){var =
A=3DYAHOO.util.Event;A.on=3DA.addListener;if(A.isIE){YAHOO.util.Event.onD=
OMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);A._dri=3D=
setInterval(function(){var =
C=3Ddocument.createElement("p");try{C.doScroll("left");clearInterval(A._d=
ri);A._dri=3Dnull;A._ready();C=3Dnull;}catch(B){C=3Dnull;}},A.POLL_INTERV=
AL);}else{if(A.webkit){A._dri=3DsetInterval(function(){var =
B=3Ddocument.readyState;if("loaded"=3D=3DB||"complete"=3D=3DB){clearInter=
val(A._dri);A._dri=3Dnull;A._ready();}},A.POLL_INTERVAL);}else{A._simpleA=
dd(document,"DOMContentLoaded",A._ready);}}A._simpleAdd(window,"load",A._=
load);A._simpleAdd(window,"unload",A._unload);A._tryPreloadAttach();})();=
}YAHOO.util.EventProvider=3Dfunction(){};YAHOO.util.EventProvider.prototy=
pe=3D{__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E=
){this.__yui_events=3Dthis.__yui_events||{};var =
D=3Dthis.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscr=
ibers=3Dthis.__yui_subscribers||{};var =
B=3Dthis.__yui_subscribers;if(!B[A]){B[A]=3D[];}B[A].push({fn:C,obj:F,ove=
rride:E});}},unsubscribe:function(C,E,G){this.__yui_events=3Dthis.__yui_e=
vents||{};var A=3Dthis.__yui_events;if(C){var F=3DA[C];if(F){return =
F.unsubscribe(E,G);}}else{var B=3Dtrue;for(var D in =
A){if(YAHOO.lang.hasOwnProperty(A,D)){B=3DB&&A[D].unsubscribe(E,G);}}retu=
rn B;}return false;},unsubscribeAll:function(A){return =
this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=3Dthis.=
__yui_events||{};var A=3DD||{};var =
I=3Dthis.__yui_events;if(I[G]){}else{var H=3DA.scope||this;var =
E=3D(A.silent);var B=3Dnew =
YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=3DB;if(A.o=
nSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}th=
is.__yui_subscribers=3Dthis.__yui_subscribers||{};=0A=
var F=3Dthis.__yui_subscribers[G];if(F){for(var =
C=3D0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}retu=
rn =
I[G];},fireEvent:function(E,D,A,C){this.__yui_events=3Dthis.__yui_events|=
|{};var G=3Dthis.__yui_events[E];if(!G){return null;}var B=3D[];for(var =
F=3D1;F<arguments.length;++F){B.push(arguments[F]);}return =
G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__=
yui_events[A]){return true;}}return =
false;}};YAHOO.util.KeyListener=3Dfunction(A,F,B,C){if(!A){}else{if(!F){}=
else{if(!B){}}}if(!C){C=3DYAHOO.util.KeyListener.KEYDOWN;}var D=3Dnew =
YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=3Dnew =
YAHOO.util.CustomEvent("enabled");this.disabledEvent=3Dnew =
YAHOO.util.CustomEvent("disabled");if(typeof =
A=3D=3D"string"){A=3Ddocument.getElementById(A);}if(typeof =
B=3D=3D"function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correc=
tScope);}function =
E(J,I){if(!F.shift){F.shift=3Dfalse;}if(!F.alt){F.alt=3Dfalse;}if(!F.ctrl=
){F.ctrl=3Dfalse;}if(J.shiftKey=3D=3DF.shift&&J.altKey=3D=3DF.alt&&J.ctrl=
Key=3D=3DF.ctrl){var G;if(F.keys instanceof Array){for(var =
H=3D0;H<F.keys.length;H++){G=3DF.keys[H];if(G=3D=3DJ.charCode){D.fire(J.c=
harCode,J);break;}else{if(G=3D=3DJ.keyCode){D.fire(J.keyCode,J);break;}}}=
}else{G=3DF.keys;if(G=3D=3DJ.charCode){D.fire(J.charCode,J);}else{if(G=3D=
=3DJ.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=3Dfunction(){if(!this.=
enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}t=
his.enabled=3Dtrue;};this.disable=3Dfunction(){if(this.enabled){YAHOO.uti=
l.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=3D=
false;};this.toString=3Dfunction(){return"KeyListener ["+F.keys+"] =
"+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN=3D"=
keydown";YAHOO.util.KeyListener.KEYUP=3D"keyup";YAHOO.util.KeyListener.KE=
Y=3D{ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35=
,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PA=
GE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:=
32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.4.0",=
build:"733"});YAHOO.register("yahoo-dom-event", YAHOO, {version: =
"2.4.0", build: "733"});=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/yui/container_core.js?1248796221

/*=0A=
Copyright (c) 2007, Yahoo! Inc. All rights reserved.=0A=
Code licensed under the BSD License:=0A=
http://developer.yahoo.net/yui/license.txt=0A=
version: 2.4.0=0A=
*/=0A=
(function () {=0A=
=0A=
    /**=0A=
    * Config is a utility used within an Object to allow the implementer =
to=0A=
    * maintain a list of local configuration properties and listen for =
changes =0A=
    * to those properties dynamically using CustomEvent. The initial =
values are =0A=
    * also maintained so that the configuration can be reset at any =
given point =0A=
    * to its initial state.=0A=
    * @namespace YAHOO.util=0A=
    * @class Config=0A=
    * @constructor=0A=
    * @param {Object} owner The owner Object to which this Config Object =
belongs=0A=
    */=0A=
    YAHOO.util.Config =3D function (owner) {=0A=
=0A=
        if (owner) {=0A=
            this.init(owner);=0A=
        }=0A=
=0A=
=0A=
    };=0A=
=0A=
=0A=
    var Lang =3D YAHOO.lang,=0A=
        CustomEvent =3D YAHOO.util.CustomEvent,=0A=
        Config =3D YAHOO.util.Config;=0A=
=0A=
=0A=
    /**=0A=
     * Constant representing the CustomEvent type for the config changed =
event.=0A=
     * @property YAHOO.util.Config.CONFIG_CHANGED_EVENT=0A=
     * @private=0A=
     * @static=0A=
     * @final=0A=
     */=0A=
    Config.CONFIG_CHANGED_EVENT =3D "configChanged";=0A=
    =0A=
    /**=0A=
     * Constant representing the boolean type string=0A=
     * @property YAHOO.util.Config.BOOLEAN_TYPE=0A=
     * @private=0A=
     * @static=0A=
     * @final=0A=
     */=0A=
    Config.BOOLEAN_TYPE =3D "boolean";=0A=
    =0A=
    Config.prototype =3D {=0A=
     =0A=
        /**=0A=
        * Object reference to the owner of this Config Object=0A=
        * @property owner=0A=
        * @type Object=0A=
        */=0A=
        owner: null,=0A=
        =0A=
        /**=0A=
        * Boolean flag that specifies whether a queue is currently =0A=
        * being executed=0A=
        * @property queueInProgress=0A=
        * @type Boolean=0A=
        */=0A=
        queueInProgress: false,=0A=
        =0A=
        /**=0A=
        * Maintains the local collection of configuration property =
objects and =0A=
        * their specified values=0A=
        * @property config=0A=
        * @private=0A=
        * @type Object=0A=
        */ =0A=
        config: null,=0A=
        =0A=
        /**=0A=
        * Maintains the local collection of configuration property =
objects as =0A=
        * they were initially applied.=0A=
        * This object is used when resetting a property.=0A=
        * @property initialConfig=0A=
        * @private=0A=
        * @type Object=0A=
        */ =0A=
        initialConfig: null,=0A=
        =0A=
        /**=0A=
        * Maintains the local, normalized CustomEvent queue=0A=
        * @property eventQueue=0A=
        * @private=0A=
        * @type Object=0A=
        */ =0A=
        eventQueue: null,=0A=
        =0A=
        /**=0A=
        * Custom Event, notifying subscribers when Config properties are =
set =0A=
        * (setProperty is called without the silent flag=0A=
        * @event configChangedEvent=0A=
        */=0A=
        configChangedEvent: null,=0A=
    =0A=
        /**=0A=
        * Initializes the configuration Object and all of its local =
members.=0A=
        * @method init=0A=
        * @param {Object} owner The owner Object to which this Config =0A=
        * Object belongs=0A=
        */=0A=
        init: function (owner) {=0A=
    =0A=
            this.owner =3D owner;=0A=
    =0A=
            this.configChangedEvent =3D =0A=
                this.createEvent(Config.CONFIG_CHANGED_EVENT);=0A=
    =0A=
            this.configChangedEvent.signature =3D CustomEvent.LIST;=0A=
            this.queueInProgress =3D false;=0A=
            this.config =3D {};=0A=
            this.initialConfig =3D {};=0A=
            this.eventQueue =3D [];=0A=
        =0A=
        },=0A=
        =0A=
        /**=0A=
        * Validates that the value passed in is a Boolean.=0A=
        * @method checkBoolean=0A=
        * @param {Object} val The value to validate=0A=
        * @return {Boolean} true, if the value is valid=0A=
        */ =0A=
        checkBoolean: function (val) {=0A=
            return (typeof val =3D=3D Config.BOOLEAN_TYPE);=0A=
        },=0A=
        =0A=
        /**=0A=
        * Validates that the value passed in is a number.=0A=
        * @method checkNumber=0A=
        * @param {Object} val The value to validate=0A=
        * @return {Boolean} true, if the value is valid=0A=
        */=0A=
        checkNumber: function (val) {=0A=
            return (!isNaN(val));=0A=
        },=0A=
        =0A=
        /**=0A=
        * Fires a configuration property event using the specified =
value. =0A=
        * @method fireEvent=0A=
        * @private=0A=
        * @param {String} key The configuration property's name=0A=
        * @param {value} Object The value of the correct type for the =
property=0A=
        */ =0A=
        fireEvent: function ( key, value ) {=0A=
            var property =3D this.config[key];=0A=
        =0A=
            if (property && property.event) {=0A=
                property.event.fire(value);=0A=
            } =0A=
        },=0A=
        =0A=
        /**=0A=
        * Adds a property to the Config Object's private config hash.=0A=
        * @method addProperty=0A=
        * @param {String} key The configuration property's name=0A=
        * @param {Object} propertyObject The Object containing all of =
this =0A=
        * property's arguments=0A=
        */=0A=
        addProperty: function ( key, propertyObject ) {=0A=
            key =3D key.toLowerCase();=0A=
        =0A=
            this.config[key] =3D propertyObject;=0A=
        =0A=
            propertyObject.event =3D this.createEvent(key, { scope: =
this.owner });=0A=
            propertyObject.event.signature =3D CustomEvent.LIST;=0A=
            =0A=
            =0A=
            propertyObject.key =3D key;=0A=
        =0A=
            if (propertyObject.handler) {=0A=
                propertyObject.event.subscribe(propertyObject.handler, =0A=
                    this.owner);=0A=
            }=0A=
        =0A=
            this.setProperty(key, propertyObject.value, true);=0A=
            =0A=
            if (! propertyObject.suppressEvent) {=0A=
                this.queueProperty(key, propertyObject.value);=0A=
            }=0A=
            =0A=
        },=0A=
        =0A=
        /**=0A=
        * Returns a key-value configuration map of the values currently =
set in  =0A=
        * the Config Object.=0A=
        * @method getConfig=0A=
        * @return {Object} The current config, represented in a =
key-value map=0A=
        */=0A=
        getConfig: function () {=0A=
        =0A=
            var cfg =3D {},=0A=
                prop,=0A=
                property;=0A=
                =0A=
            for (prop in this.config) {=0A=
                property =3D this.config[prop];=0A=
                if (property && property.event) {=0A=
                    cfg[prop] =3D property.value;=0A=
                }=0A=
            }=0A=
            =0A=
            return cfg;=0A=
        },=0A=
        =0A=
        /**=0A=
        * Returns the value of specified property.=0A=
        * @method getProperty=0A=
        * @param {String} key The name of the property=0A=
        * @return {Object}  The value of the specified property=0A=
        */=0A=
        getProperty: function (key) {=0A=
            var property =3D this.config[key.toLowerCase()];=0A=
            if (property && property.event) {=0A=
                return property.value;=0A=
            } else {=0A=
                return undefined;=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Resets the specified property's value to its initial value.=0A=
        * @method resetProperty=0A=
        * @param {String} key The name of the property=0A=
        * @return {Boolean} True is the property was reset, false if not=0A=
        */=0A=
        resetProperty: function (key) {=0A=
    =0A=
            key =3D key.toLowerCase();=0A=
        =0A=
            var property =3D this.config[key];=0A=
    =0A=
            if (property && property.event) {=0A=
    =0A=
                if (this.initialConfig[key] && =0A=
                    !Lang.isUndefined(this.initialConfig[key])) {=0A=
    =0A=
                    this.setProperty(key, this.initialConfig[key]);=0A=
=0A=
                    return true;=0A=
    =0A=
                }=0A=
    =0A=
            } else {=0A=
    =0A=
                return false;=0A=
            }=0A=
    =0A=
        },=0A=
        =0A=
        /**=0A=
        * Sets the value of a property. If the silent property is passed =
as =0A=
        * true, the property's event will not be fired.=0A=
        * @method setProperty=0A=
        * @param {String} key The name of the property=0A=
        * @param {String} value The value to set the property to=0A=
        * @param {Boolean} silent Whether the value should be set =
silently, =0A=
        * without firing the property event.=0A=
        * @return {Boolean} True, if the set was successful, false if it =
failed.=0A=
        */=0A=
        setProperty: function (key, value, silent) {=0A=
        =0A=
            var property;=0A=
        =0A=
            key =3D key.toLowerCase();=0A=
        =0A=
            if (this.queueInProgress && ! silent) {=0A=
                // Currently running through a queue... =0A=
                this.queueProperty(key,value);=0A=
                return true;=0A=
    =0A=
            } else {=0A=
                property =3D this.config[key];=0A=
                if (property && property.event) {=0A=
                    if (property.validator && =
!property.validator(value)) {=0A=
                        return false;=0A=
                    } else {=0A=
                        property.value =3D value;=0A=
                        if (! silent) {=0A=
                            this.fireEvent(key, value);=0A=
                            this.configChangedEvent.fire([key, value]);=0A=
                        }=0A=
                        return true;=0A=
                    }=0A=
                } else {=0A=
                    return false;=0A=
                }=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Sets the value of a property and queues its event to execute. =
If the =0A=
        * event is already scheduled to execute, it is=0A=
        * moved from its current position to the end of the queue.=0A=
        * @method queueProperty=0A=
        * @param {String} key The name of the property=0A=
        * @param {String} value The value to set the property to=0A=
        * @return {Boolean}  true, if the set was successful, false if =0A=
        * it failed.=0A=
        */ =0A=
        queueProperty: function (key, value) {=0A=
        =0A=
            key =3D key.toLowerCase();=0A=
        =0A=
            var property =3D this.config[key],=0A=
                foundDuplicate =3D false,=0A=
                iLen,=0A=
                queueItem,=0A=
                queueItemKey,=0A=
                queueItemValue,=0A=
                sLen,=0A=
                supercedesCheck,=0A=
                qLen,=0A=
                queueItemCheck,=0A=
                queueItemCheckKey,=0A=
                queueItemCheckValue,=0A=
                i,=0A=
                s,=0A=
                q;=0A=
                                =0A=
            if (property && property.event) {=0A=
    =0A=
                if (!Lang.isUndefined(value) && property.validator && =0A=
                    !property.validator(value)) { // validator=0A=
                    return false;=0A=
                } else {=0A=
        =0A=
                    if (!Lang.isUndefined(value)) {=0A=
                        property.value =3D value;=0A=
                    } else {=0A=
                        value =3D property.value;=0A=
                    }=0A=
        =0A=
                    foundDuplicate =3D false;=0A=
                    iLen =3D this.eventQueue.length;=0A=
        =0A=
                    for (i =3D 0; i < iLen; i++) {=0A=
                        queueItem =3D this.eventQueue[i];=0A=
        =0A=
                        if (queueItem) {=0A=
                            queueItemKey =3D queueItem[0];=0A=
                            queueItemValue =3D queueItem[1];=0A=
=0A=
                            if (queueItemKey =3D=3D key) {=0A=
    =0A=
                                /*=0A=
                                    found a dupe... push to end of =
queue, null =0A=
                                    current item, and break=0A=
                                */=0A=
    =0A=
                                this.eventQueue[i] =3D null;=0A=
    =0A=
                                this.eventQueue.push(=0A=
                                    [key, (!Lang.isUndefined(value) ? =0A=
                                    value : queueItemValue)]);=0A=
    =0A=
                                foundDuplicate =3D true;=0A=
                                break;=0A=
                            }=0A=
                        }=0A=
                    }=0A=
                    =0A=
                    // this is a refire, or a new property in the queue=0A=
    =0A=
                    if (! foundDuplicate && !Lang.isUndefined(value)) { =0A=
                        this.eventQueue.push([key, value]);=0A=
                    }=0A=
                }=0A=
        =0A=
                if (property.supercedes) {=0A=
=0A=
                    sLen =3D property.supercedes.length;=0A=
=0A=
                    for (s =3D 0; s < sLen; s++) {=0A=
=0A=
                        supercedesCheck =3D property.supercedes[s];=0A=
                        qLen =3D this.eventQueue.length;=0A=
=0A=
                        for (q =3D 0; q < qLen; q++) {=0A=
                            queueItemCheck =3D this.eventQueue[q];=0A=
=0A=
                            if (queueItemCheck) {=0A=
                                queueItemCheckKey =3D queueItemCheck[0];=0A=
                                queueItemCheckValue =3D =
queueItemCheck[1];=0A=
=0A=
                                if (queueItemCheckKey =3D=3D =0A=
                                    supercedesCheck.toLowerCase() ) {=0A=
=0A=
                                    =
this.eventQueue.push([queueItemCheckKey, =0A=
                                        queueItemCheckValue]);=0A=
=0A=
                                    this.eventQueue[q] =3D null;=0A=
                                    break;=0A=
=0A=
                                }=0A=
                            }=0A=
                        }=0A=
                    }=0A=
                }=0A=
=0A=
=0A=
                return true;=0A=
            } else {=0A=
                return false;=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Fires the event for a property using the property's current =
value.=0A=
        * @method refireEvent=0A=
        * @param {String} key The name of the property=0A=
        */=0A=
        refireEvent: function (key) {=0A=
    =0A=
            key =3D key.toLowerCase();=0A=
        =0A=
            var property =3D this.config[key];=0A=
    =0A=
            if (property && property.event && =0A=
    =0A=
                !Lang.isUndefined(property.value)) {=0A=
    =0A=
                if (this.queueInProgress) {=0A=
    =0A=
                    this.queueProperty(key);=0A=
    =0A=
                } else {=0A=
    =0A=
                    this.fireEvent(key, property.value);=0A=
    =0A=
                }=0A=
    =0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Applies a key-value Object literal to the configuration, =
replacing  =0A=
        * any existing values, and queueing the property events.=0A=
        * Although the values will be set, fireQueue() must be called =
for their =0A=
        * associated events to execute.=0A=
        * @method applyConfig=0A=
        * @param {Object} userConfig The configuration Object literal=0A=
        * @param {Boolean} init  When set to true, the initialConfig =
will =0A=
        * be set to the userConfig passed in, so that calling a reset =
will =0A=
        * reset the properties to the passed values.=0A=
        */=0A=
        applyConfig: function (userConfig, init) {=0A=
        =0A=
            var sKey,=0A=
                oConfig;=0A=
=0A=
            if (init) {=0A=
                oConfig =3D {};=0A=
                for (sKey in userConfig) {=0A=
                    if (Lang.hasOwnProperty(userConfig, sKey)) {=0A=
                        oConfig[sKey.toLowerCase()] =3D userConfig[sKey];=0A=
                    }=0A=
                }=0A=
                this.initialConfig =3D oConfig;=0A=
            }=0A=
=0A=
            for (sKey in userConfig) {=0A=
                if (Lang.hasOwnProperty(userConfig, sKey)) {=0A=
                    this.queueProperty(sKey, userConfig[sKey]);=0A=
                }=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Refires the events for all configuration properties using =
their =0A=
        * current values.=0A=
        * @method refresh=0A=
        */=0A=
        refresh: function () {=0A=
        =0A=
            var prop;=0A=
        =0A=
            for (prop in this.config) {=0A=
                this.refireEvent(prop);=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Fires the normalized list of queued property change events=0A=
        * @method fireQueue=0A=
        */=0A=
        fireQueue: function () {=0A=
        =0A=
            var i, =0A=
                queueItem,=0A=
                key,=0A=
                value,=0A=
                property;=0A=
        =0A=
            this.queueInProgress =3D true;=0A=
            for (i =3D 0;i < this.eventQueue.length; i++) {=0A=
                queueItem =3D this.eventQueue[i];=0A=
                if (queueItem) {=0A=
        =0A=
                    key =3D queueItem[0];=0A=
                    value =3D queueItem[1];=0A=
                    property =3D this.config[key];=0A=
        =0A=
                    property.value =3D value;=0A=
        =0A=
                    this.fireEvent(key,value);=0A=
                }=0A=
            }=0A=
            =0A=
            this.queueInProgress =3D false;=0A=
            this.eventQueue =3D [];=0A=
        },=0A=
        =0A=
        /**=0A=
        * Subscribes an external handler to the change event for any =0A=
        * given property. =0A=
        * @method subscribeToConfigEvent=0A=
        * @param {String} key The property name=0A=
        * @param {Function} handler The handler function to use =
subscribe to =0A=
        * the property's event=0A=
        * @param {Object} obj The Object to use for scoping the event =
handler =0A=
        * (see CustomEvent documentation)=0A=
        * @param {Boolean} override Optional. If true, will override =
"this"  =0A=
        * within the handler to map to the scope Object passed into the =
method.=0A=
        * @return {Boolean} True, if the subscription was successful, =0A=
        * otherwise false.=0A=
        */ =0A=
        subscribeToConfigEvent: function (key, handler, obj, override) {=0A=
    =0A=
            var property =3D this.config[key.toLowerCase()];=0A=
    =0A=
            if (property && property.event) {=0A=
                if (!Config.alreadySubscribed(property.event, handler, =
obj)) {=0A=
                    property.event.subscribe(handler, obj, override);=0A=
                }=0A=
                return true;=0A=
            } else {=0A=
                return false;=0A=
            }=0A=
    =0A=
        },=0A=
        =0A=
        /**=0A=
        * Unsubscribes an external handler from the change event for any =0A=
        * given property. =0A=
        * @method unsubscribeFromConfigEvent=0A=
        * @param {String} key The property name=0A=
        * @param {Function} handler The handler function to use =
subscribe to =0A=
        * the property's event=0A=
        * @param {Object} obj The Object to use for scoping the event =0A=
        * handler (see CustomEvent documentation)=0A=
        * @return {Boolean} True, if the unsubscription was successful, =0A=
        * otherwise false.=0A=
        */=0A=
        unsubscribeFromConfigEvent: function (key, handler, obj) {=0A=
            var property =3D this.config[key.toLowerCase()];=0A=
            if (property && property.event) {=0A=
                return property.event.unsubscribe(handler, obj);=0A=
            } else {=0A=
                return false;=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Returns a string representation of the Config object=0A=
        * @method toString=0A=
        * @return {String} The Config object in string format.=0A=
        */=0A=
        toString: function () {=0A=
            var output =3D "Config";=0A=
            if (this.owner) {=0A=
                output +=3D " [" + this.owner.toString() + "]";=0A=
            }=0A=
            return output;=0A=
        },=0A=
        =0A=
        /**=0A=
        * Returns a string representation of the Config object's current =0A=
        * CustomEvent queue=0A=
        * @method outputEventQueue=0A=
        * @return {String} The string list of CustomEvents currently =
queued =0A=
        * for execution=0A=
        */=0A=
        outputEventQueue: function () {=0A=
=0A=
            var output =3D "",=0A=
                queueItem,=0A=
                q,=0A=
                nQueue =3D this.eventQueue.length;=0A=
              =0A=
            for (q =3D 0; q < nQueue; q++) {=0A=
                queueItem =3D this.eventQueue[q];=0A=
                if (queueItem) {=0A=
                    output +=3D queueItem[0] + "=3D" + queueItem[1] + ", =
";=0A=
                }=0A=
            }=0A=
            return output;=0A=
        },=0A=
=0A=
        /**=0A=
        * Sets all properties to null, unsubscribes all listeners from =
each =0A=
        * property's change event and all listeners from the =
configChangedEvent.=0A=
        * @method destroy=0A=
        */=0A=
        destroy: function () {=0A=
=0A=
            var oConfig =3D this.config,=0A=
                sProperty,=0A=
                oProperty;=0A=
=0A=
=0A=
            for (sProperty in oConfig) {=0A=
            =0A=
                if (Lang.hasOwnProperty(oConfig, sProperty)) {=0A=
=0A=
                    oProperty =3D oConfig[sProperty];=0A=
=0A=
                    oProperty.event.unsubscribeAll();=0A=
                    oProperty.event =3D null;=0A=
=0A=
                }=0A=
            =0A=
            }=0A=
            =0A=
            this.configChangedEvent.unsubscribeAll();=0A=
            =0A=
            this.configChangedEvent =3D null;=0A=
            this.owner =3D null;=0A=
            this.config =3D null;=0A=
            this.initialConfig =3D null;=0A=
            this.eventQueue =3D null;=0A=
        =0A=
        }=0A=
=0A=
    };=0A=
    =0A=
    =0A=
    =0A=
    /**=0A=
    * Checks to determine if a particular function/Object pair are =
already =0A=
    * subscribed to the specified CustomEvent=0A=
    * @method YAHOO.util.Config.alreadySubscribed=0A=
    * @static=0A=
    * @param {YAHOO.util.CustomEvent} evt The CustomEvent for which to =
check =0A=
    * the subscriptions=0A=
    * @param {Function} fn The function to look for in the subscribers =
list=0A=
    * @param {Object} obj The execution scope Object for the subscription=0A=
    * @return {Boolean} true, if the function/Object pair is already =
subscribed =0A=
    * to the CustomEvent passed in=0A=
    */=0A=
    Config.alreadySubscribed =3D function (evt, fn, obj) {=0A=
    =0A=
        var nSubscribers =3D evt.subscribers.length,=0A=
            subsc,=0A=
            i;=0A=
=0A=
        if (nSubscribers > 0) {=0A=
            i =3D nSubscribers - 1;=0A=
            do {=0A=
                subsc =3D evt.subscribers[i];=0A=
                if (subsc && subsc.obj =3D=3D obj && subsc.fn =3D=3D fn) =
{=0A=
                    return true;=0A=
                }=0A=
            }=0A=
            while (i--);=0A=
        }=0A=
=0A=
        return false;=0A=
=0A=
    };=0A=
=0A=
    YAHOO.lang.augmentProto(Config, YAHOO.util.EventProvider);=0A=
=0A=
}());=0A=
=0A=
(function () {=0A=
=0A=
    /**=0A=
    * The Container family of components is designed to enable =
developers to =0A=
    * create different kinds of content-containing modules on the web. =
Module =0A=
    * and Overlay are the most basic containers, and they can be used =
directly =0A=
    * or extended to build custom containers. Also part of the Container =
family =0A=
    * are four UI controls that extend Module and Overlay: Tooltip, =
Panel, =0A=
    * Dialog, and SimpleDialog.=0A=
    * @module container=0A=
    * @title Container=0A=
    * @requires yahoo, dom, event =0A=
    * @optional dragdrop, animation, button=0A=
    */=0A=
    =0A=
    /**=0A=
    * Module is a JavaScript representation of the Standard Module =
Format. =0A=
    * Standard Module Format is a simple standard for markup containers =
where =0A=
    * child nodes representing the header, body, and footer of the =
content are =0A=
    * denoted using the CSS classes "hd", "bd", and "ft" respectively. =0A=
    * Module is the base class for all other classes in the YUI =0A=
    * Container package.=0A=
    * @namespace YAHOO.widget=0A=
    * @class Module=0A=
    * @constructor=0A=
    * @param {String} el The element ID representing the Module =
<em>OR</em>=0A=
    * @param {HTMLElement} el The element representing the Module=0A=
    * @param {Object} userConfig The configuration Object literal =
containing =0A=
    * the configuration that should be set for this module. See =
configuration =0A=
    * documentation for more details.=0A=
    */=0A=
    YAHOO.widget.Module =3D function (el, userConfig) {=0A=
        if (el) {=0A=
            this.init(el, userConfig);=0A=
        } else {=0A=
        }=0A=
    };=0A=
=0A=
    var Dom =3D YAHOO.util.Dom,=0A=
        Config =3D YAHOO.util.Config,=0A=
        Event =3D YAHOO.util.Event,=0A=
        CustomEvent =3D YAHOO.util.CustomEvent,=0A=
        Module =3D YAHOO.widget.Module,=0A=
=0A=
        m_oModuleTemplate,=0A=
        m_oHeaderTemplate,=0A=
        m_oBodyTemplate,=0A=
        m_oFooterTemplate,=0A=
=0A=
        /**=0A=
        * Constant representing the name of the Module's events=0A=
        * @property EVENT_TYPES=0A=
        * @private=0A=
        * @final=0A=
        * @type Object=0A=
        */=0A=
        EVENT_TYPES =3D {=0A=
        =0A=
            "BEFORE_INIT": "beforeInit",=0A=
            "INIT": "init",=0A=
            "APPEND": "append",=0A=
            "BEFORE_RENDER": "beforeRender",=0A=
            "RENDER": "render",=0A=
            "CHANGE_HEADER": "changeHeader",=0A=
            "CHANGE_BODY": "changeBody",=0A=
            "CHANGE_FOOTER": "changeFooter",=0A=
            "CHANGE_CONTENT": "changeContent",=0A=
            "DESTORY": "destroy",=0A=
            "BEFORE_SHOW": "beforeShow",=0A=
            "SHOW": "show",=0A=
            "BEFORE_HIDE": "beforeHide",=0A=
            "HIDE": "hide"=0A=
        =0A=
        },=0A=
            =0A=
        /**=0A=
        * Constant representing the Module's configuration properties=0A=
        * @property DEFAULT_CONFIG=0A=
        * @private=0A=
        * @final=0A=
        * @type Object=0A=
        */=0A=
        DEFAULT_CONFIG =3D {=0A=
        =0A=
            "VISIBLE": { =0A=
                key: "visible", =0A=
                value: true, =0A=
                validator: YAHOO.lang.isBoolean =0A=
            },=0A=
        =0A=
            "EFFECT": { =0A=
                key: "effect", =0A=
                suppressEvent: true, =0A=
                supercedes: ["visible"] =0A=
            },=0A=
=0A=
            "MONITOR_RESIZE": { =0A=
                key: "monitorresize", =0A=
                value: true  =0A=
            },=0A=
=0A=
            "APPEND_TO_DOCUMENT_BODY": { =0A=
                key: "appendtodocumentbody", =0A=
                value: false=0A=
            }=0A=
        };=0A=
    =0A=
    /**=0A=
    * Constant representing the prefix path to use for non-secure images=0A=
    * @property YAHOO.widget.Module.IMG_ROOT=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Module.IMG_ROOT =3D null;=0A=
    =0A=
    /**=0A=
    * Constant representing the prefix path to use for securely served =
images=0A=
    * @property YAHOO.widget.Module.IMG_ROOT_SSL=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Module.IMG_ROOT_SSL =3D null;=0A=
    =0A=
    /**=0A=
    * Constant for the default CSS class name that represents a Module=0A=
    * @property YAHOO.widget.Module.CSS_MODULE=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Module.CSS_MODULE =3D "yui-module";=0A=
    =0A=
    /**=0A=
    * Constant representing the module header=0A=
    * @property YAHOO.widget.Module.CSS_HEADER=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Module.CSS_HEADER =3D "hd";=0A=
    =0A=
    /**=0A=
    * Constant representing the module body=0A=
    * @property YAHOO.widget.Module.CSS_BODY=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Module.CSS_BODY =3D "bd";=0A=
    =0A=
    /**=0A=
    * Constant representing the module footer=0A=
    * @property YAHOO.widget.Module.CSS_FOOTER=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Module.CSS_FOOTER =3D "ft";=0A=
    =0A=
    /**=0A=
    * Constant representing the url for the "src" attribute of the =
iframe =0A=
    * used to monitor changes to the browser's base font size=0A=
    * @property YAHOO.widget.Module.RESIZE_MONITOR_SECURE_URL=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Module.RESIZE_MONITOR_SECURE_URL =3D "javascript:false;";=0A=
    =0A=
    /**=0A=
    * Singleton CustomEvent fired when the font size is changed in the =
browser.=0A=
    * Opera's "zoom" functionality currently does not support text =0A=
    * size detection.=0A=
    * @event YAHOO.widget.Module.textResizeEvent=0A=
    */=0A=
    Module.textResizeEvent =3D new CustomEvent("textResize");=0A=
=0A=
    function createModuleTemplate() {=0A=
=0A=
        if (!m_oModuleTemplate) {=0A=
            m_oModuleTemplate =3D document.createElement("div");=0A=
            =0A=
            m_oModuleTemplate.innerHTML =3D ("<div class=3D\"" + =0A=
                Module.CSS_HEADER + "\"></div>" + "<div class=3D\"" + =0A=
                Module.CSS_BODY + "\"></div><div class=3D\"" + =0A=
                Module.CSS_FOOTER + "\"></div>");=0A=
=0A=
            m_oHeaderTemplate =3D m_oModuleTemplate.firstChild;=0A=
            m_oBodyTemplate =3D m_oHeaderTemplate.nextSibling;=0A=
            m_oFooterTemplate =3D m_oBodyTemplate.nextSibling;=0A=
        }=0A=
=0A=
        return m_oModuleTemplate;=0A=
    }=0A=
=0A=
    function createHeader() {=0A=
        if (!m_oHeaderTemplate) {=0A=
            createModuleTemplate();=0A=
        }=0A=
        return (m_oHeaderTemplate.cloneNode(false));=0A=
    }=0A=
=0A=
    function createBody() {=0A=
        if (!m_oBodyTemplate) {=0A=
            createModuleTemplate();=0A=
        }=0A=
        return (m_oBodyTemplate.cloneNode(false));=0A=
    }=0A=
=0A=
    function createFooter() {=0A=
        if (!m_oFooterTemplate) {=0A=
            createModuleTemplate();=0A=
        }=0A=
        return (m_oFooterTemplate.cloneNode(false));=0A=
    }=0A=
=0A=
    Module.prototype =3D {=0A=
=0A=
        /**=0A=
        * The class's constructor function=0A=
        * @property contructor=0A=
        * @type Function=0A=
        */=0A=
        constructor: Module,=0A=
        =0A=
        /**=0A=
        * The main module element that contains the header, body, and =
footer=0A=
        * @property element=0A=
        * @type HTMLElement=0A=
        */=0A=
        element: null,=0A=
=0A=
        /**=0A=
        * The header element, denoted with CSS class "hd"=0A=
        * @property header=0A=
        * @type HTMLElement=0A=
        */=0A=
        header: null,=0A=
=0A=
        /**=0A=
        * The body element, denoted with CSS class "bd"=0A=
        * @property body=0A=
        * @type HTMLElement=0A=
        */=0A=
        body: null,=0A=
=0A=
        /**=0A=
        * The footer element, denoted with CSS class "ft"=0A=
        * @property footer=0A=
        * @type HTMLElement=0A=
        */=0A=
        footer: null,=0A=
=0A=
        /**=0A=
        * The id of the element=0A=
        * @property id=0A=
        * @type String=0A=
        */=0A=
        id: null,=0A=
=0A=
        /**=0A=
        * A string representing the root path for all images created by=0A=
        * a Module instance.=0A=
        * @deprecated It is recommend that any images for a Module be =
applied=0A=
        * via CSS using the "background-image" property.=0A=
        * @property imageRoot=0A=
        * @type String=0A=
        */=0A=
        imageRoot: Module.IMG_ROOT,=0A=
=0A=
        /**=0A=
        * Initializes the custom events for Module which are fired =0A=
        * automatically at appropriate times by the Module class.=0A=
        * @method initEvents=0A=
        */=0A=
        initEvents: function () {=0A=
=0A=
            var SIGNATURE =3D CustomEvent.LIST;=0A=
=0A=
            /**=0A=
            * CustomEvent fired prior to class initalization.=0A=
            * @event beforeInitEvent=0A=
            * @param {class} classRef class reference of the =
initializing =0A=
            * class, such as this.beforeInitEvent.fire(Module)=0A=
            */=0A=
            this.beforeInitEvent =3D =
this.createEvent(EVENT_TYPES.BEFORE_INIT);=0A=
            this.beforeInitEvent.signature =3D SIGNATURE;=0A=
=0A=
            /**=0A=
            * CustomEvent fired after class initalization.=0A=
            * @event initEvent=0A=
            * @param {class} classRef class reference of the =
initializing =0A=
            * class, such as this.beforeInitEvent.fire(Module)=0A=
            */  =0A=
            this.initEvent =3D this.createEvent(EVENT_TYPES.INIT);=0A=
            this.initEvent.signature =3D SIGNATURE;=0A=
=0A=
            /**=0A=
            * CustomEvent fired when the Module is appended to the DOM=0A=
            * @event appendEvent=0A=
            */=0A=
            this.appendEvent =3D this.createEvent(EVENT_TYPES.APPEND);=0A=
            this.appendEvent.signature =3D SIGNATURE;=0A=
=0A=
            /**=0A=
            * CustomEvent fired before the Module is rendered=0A=
            * @event beforeRenderEvent=0A=
            */=0A=
            this.beforeRenderEvent =3D =
this.createEvent(EVENT_TYPES.BEFORE_RENDER);=0A=
            this.beforeRenderEvent.signature =3D SIGNATURE;=0A=
        =0A=
            /**=0A=
            * CustomEvent fired after the Module is rendered=0A=
            * @event renderEvent=0A=
            */=0A=
            this.renderEvent =3D this.createEvent(EVENT_TYPES.RENDER);=0A=
            this.renderEvent.signature =3D SIGNATURE;=0A=
        =0A=
            /**=0A=
            * CustomEvent fired when the header content of the Module =0A=
            * is modified=0A=
            * @event changeHeaderEvent=0A=
            * @param {String/HTMLElement} content String/element =
representing =0A=
            * the new header content=0A=
            */=0A=
            this.changeHeaderEvent =3D =
this.createEvent(EVENT_TYPES.CHANGE_HEADER);=0A=
            this.changeHeaderEvent.signature =3D SIGNATURE;=0A=
            =0A=
            /**=0A=
            * CustomEvent fired when the body content of the Module is =
modified=0A=
            * @event changeBodyEvent=0A=
            * @param {String/HTMLElement} content String/element =
representing =0A=
            * the new body content=0A=
            */  =0A=
            this.changeBodyEvent =3D =
this.createEvent(EVENT_TYPES.CHANGE_BODY);=0A=
            this.changeBodyEvent.signature =3D SIGNATURE;=0A=
            =0A=
            /**=0A=
            * CustomEvent fired when the footer content of the Module =0A=
            * is modified=0A=
            * @event changeFooterEvent=0A=
            * @param {String/HTMLElement} content String/element =
representing =0A=
            * the new footer content=0A=
            */=0A=
            this.changeFooterEvent =3D =
this.createEvent(EVENT_TYPES.CHANGE_FOOTER);=0A=
            this.changeFooterEvent.signature =3D SIGNATURE;=0A=
        =0A=
            /**=0A=
            * CustomEvent fired when the content of the Module is =
modified=0A=
            * @event changeContentEvent=0A=
            */=0A=
            this.changeContentEvent =3D =
this.createEvent(EVENT_TYPES.CHANGE_CONTENT);=0A=
            this.changeContentEvent.signature =3D SIGNATURE;=0A=
=0A=
            /**=0A=
            * CustomEvent fired when the Module is destroyed=0A=
            * @event destroyEvent=0A=
            */=0A=
            this.destroyEvent =3D this.createEvent(EVENT_TYPES.DESTORY);=0A=
            this.destroyEvent.signature =3D SIGNATURE;=0A=
=0A=
            /**=0A=
            * CustomEvent fired before the Module is shown=0A=
            * @event beforeShowEvent=0A=
            */=0A=
            this.beforeShowEvent =3D =
this.createEvent(EVENT_TYPES.BEFORE_SHOW);=0A=
            this.beforeShowEvent.signature =3D SIGNATURE;=0A=
=0A=
            /**=0A=
            * CustomEvent fired after the Module is shown=0A=
            * @event showEvent=0A=
            */=0A=
            this.showEvent =3D this.createEvent(EVENT_TYPES.SHOW);=0A=
            this.showEvent.signature =3D SIGNATURE;=0A=
=0A=
            /**=0A=
            * CustomEvent fired before the Module is hidden=0A=
            * @event beforeHideEvent=0A=
            */=0A=
            this.beforeHideEvent =3D =
this.createEvent(EVENT_TYPES.BEFORE_HIDE);=0A=
            this.beforeHideEvent.signature =3D SIGNATURE;=0A=
=0A=
            /**=0A=
            * CustomEvent fired after the Module is hidden=0A=
            * @event hideEvent=0A=
            */=0A=
            this.hideEvent =3D this.createEvent(EVENT_TYPES.HIDE);=0A=
            this.hideEvent.signature =3D SIGNATURE;=0A=
        }, =0A=
=0A=
        /**=0A=
        * String representing the current user-agent platform=0A=
        * @property platform=0A=
        * @type String=0A=
        */=0A=
        platform: function () {=0A=
            var ua =3D navigator.userAgent.toLowerCase();=0A=
=0A=
            if (ua.indexOf("windows") !=3D -1 || ua.indexOf("win32") =
!=3D -1) {=0A=
                return "windows";=0A=
            } else if (ua.indexOf("macintosh") !=3D -1) {=0A=
                return "mac";=0A=
            } else {=0A=
                return false;=0A=
            }=0A=
        }(),=0A=
        =0A=
        /**=0A=
        * String representing the user-agent of the browser=0A=
        * @deprecated Use YAHOO.env.ua=0A=
        * @property browser=0A=
        * @type String=0A=
        */=0A=
        browser: function () {=0A=
            var ua =3D navigator.userAgent.toLowerCase();=0A=
            /*=0A=
                 Check Opera first in case of spoof and check Safari =
before=0A=
                 Gecko since Safari's user agent string includes "like =
Gecko"=0A=
            */=0A=
            if (ua.indexOf('opera') !=3D -1) { =0A=
                return 'opera';=0A=
            } else if (ua.indexOf('msie 7') !=3D -1) {=0A=
                return 'ie7';=0A=
            } else if (ua.indexOf('msie') !=3D -1) {=0A=
                return 'ie';=0A=
            } else if (ua.indexOf('safari') !=3D -1) { =0A=
                return 'safari';=0A=
            } else if (ua.indexOf('gecko') !=3D -1) {=0A=
                return 'gecko';=0A=
            } else {=0A=
                return false;=0A=
            }=0A=
        }(),=0A=
        =0A=
        /**=0A=
        * Boolean representing whether or not the current browsing =
context is =0A=
        * secure (https)=0A=
        * @property isSecure=0A=
        * @type Boolean=0A=
        */=0A=
        isSecure: function () {=0A=
            if (window.location.href.toLowerCase().indexOf("https") =
=3D=3D=3D 0) {=0A=
                return true;=0A=
            } else {=0A=
                return false;=0A=
            }=0A=
        }(),=0A=
        =0A=
        /**=0A=
        * Initializes the custom events for Module which are fired =0A=
        * automatically at appropriate times by the Module class.=0A=
        */=0A=
        initDefaultConfig: function () {=0A=
            // Add properties //=0A=
            /**=0A=
            * Specifies whether the Module is visible on the page.=0A=
            * @config visible=0A=
            * @type Boolean=0A=
            * @default true=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.VISIBLE.key, {=0A=
                handler: this.configVisible, =0A=
                value: DEFAULT_CONFIG.VISIBLE.value, =0A=
                validator: DEFAULT_CONFIG.VISIBLE.validator=0A=
            });=0A=
=0A=
            /**=0A=
            * Object or array of objects representing the =
ContainerEffect =0A=
            * classes that are active for animating the container.=0A=
            * @config effect=0A=
            * @type Object=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.EFFECT.key, {=0A=
                suppressEvent: DEFAULT_CONFIG.EFFECT.suppressEvent, =0A=
                supercedes: DEFAULT_CONFIG.EFFECT.supercedes=0A=
            });=0A=
=0A=
            /**=0A=
            * Specifies whether to create a special proxy iframe to =
monitor =0A=
            * for user font resizing in the document=0A=
            * @config monitorresize=0A=
            * @type Boolean=0A=
            * @default true=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.MONITOR_RESIZE.key, {=0A=
                handler: this.configMonitorResize,=0A=
                value: DEFAULT_CONFIG.MONITOR_RESIZE.value=0A=
            });=0A=
=0A=
            /**=0A=
            * Specifies if the module should be rendered as the first =
child =0A=
            * of document.body or appended as the last child when render =
is called=0A=
            * with document.body as the "appendToNode".=0A=
            * <p>=0A=
            * Appending to the body while the DOM is still being =
constructed can =0A=
            * lead to Operation Aborted errors in IE hence this flag is =
set to =0A=
            * false by default.=0A=
            * </p>=0A=
            * =0A=
            * @config appendtodocumentbody=0A=
            * @type Boolean=0A=
            * @default false=0A=
            */=0A=
            =
this.cfg.addProperty(DEFAULT_CONFIG.APPEND_TO_DOCUMENT_BODY.key, {=0A=
                value: DEFAULT_CONFIG.APPEND_TO_DOCUMENT_BODY.value=0A=
            });=0A=
        },=0A=
=0A=
        /**=0A=
        * The Module class's initialization method, which is executed for=0A=
        * Module and all of its subclasses. This method is automatically =0A=
        * called by the constructor, and  sets up all DOM references for =0A=
        * pre-existing markup, and creates required markup if it is not =0A=
        * already present.=0A=
        * @method init=0A=
        * @param {String} el The element ID representing the Module =
<em>OR</em>=0A=
        * @param {HTMLElement} el The element representing the Module=0A=
        * @param {Object} userConfig The configuration Object literal =0A=
        * containing the configuration that should be set for this =
module. =0A=
        * See configuration documentation for more details.=0A=
        */=0A=
        init: function (el, userConfig) {=0A=
=0A=
            var elId, child;=0A=
=0A=
            this.initEvents();=0A=
            this.beforeInitEvent.fire(Module);=0A=
=0A=
            /**=0A=
            * The Module's Config object used for monitoring =0A=
            * configuration properties.=0A=
            * @property cfg=0A=
            * @type YAHOO.util.Config=0A=
            */=0A=
            this.cfg =3D new Config(this);=0A=
=0A=
            if (this.isSecure) {=0A=
                this.imageRoot =3D Module.IMG_ROOT_SSL;=0A=
            }=0A=
=0A=
            if (typeof el =3D=3D "string") {=0A=
                elId =3D el;=0A=
                el =3D document.getElementById(el);=0A=
                if (! el) {=0A=
                    el =3D (createModuleTemplate()).cloneNode(false);=0A=
                    el.id =3D elId;=0A=
                }=0A=
            }=0A=
=0A=
            this.element =3D el;=0A=
=0A=
            if (el.id) {=0A=
                this.id =3D el.id;=0A=
            }=0A=
=0A=
            child =3D this.element.firstChild;=0A=
=0A=
            if (child) {=0A=
                var fndHd =3D false, fndBd =3D false, fndFt =3D false;=0A=
                do {=0A=
                    // We're looking for elements=0A=
                    if (1 =3D=3D child.nodeType) {=0A=
                        if (!fndHd && Dom.hasClass(child, =
Module.CSS_HEADER)) {=0A=
                            this.header =3D child;=0A=
                            fndHd =3D true;=0A=
                        } else if (!fndBd && Dom.hasClass(child, =
Module.CSS_BODY)) {=0A=
                            this.body =3D child;=0A=
                            fndBd =3D true;=0A=
                        } else if (!fndFt && Dom.hasClass(child, =
Module.CSS_FOOTER)){=0A=
                            this.footer =3D child;=0A=
                            fndFt =3D true;=0A=
                        }=0A=
                    }=0A=
                } while ((child =3D child.nextSibling));=0A=
            }=0A=
=0A=
            this.initDefaultConfig();=0A=
=0A=
            Dom.addClass(this.element, Module.CSS_MODULE);=0A=
=0A=
            if (userConfig) {=0A=
                this.cfg.applyConfig(userConfig, true);=0A=
            }=0A=
=0A=
            /*=0A=
                Subscribe to the fireQueue() method of Config so that =
any =0A=
                queued configuration changes are excecuted upon render =
of =0A=
                the Module=0A=
            */ =0A=
=0A=
            if (!Config.alreadySubscribed(this.renderEvent, =
this.cfg.fireQueue, this.cfg)) {=0A=
                this.renderEvent.subscribe(this.cfg.fireQueue, this.cfg, =
true);=0A=
            }=0A=
=0A=
            this.initEvent.fire(Module);=0A=
        },=0A=
=0A=
        /**=0A=
        * Initialized an empty IFRAME that is placed out of the visible =
area =0A=
        * that can be used to detect text resize.=0A=
        * @method initResizeMonitor=0A=
        */=0A=
        initResizeMonitor: function () {=0A=
=0A=
            var oDoc, =0A=
                oIFrame, =0A=
                sHTML;=0A=
=0A=
            function fireTextResize() {=0A=
                Module.textResizeEvent.fire();=0A=
            }=0A=
=0A=
            if (!YAHOO.env.ua.opera) {=0A=
                oIFrame =3D Dom.get("_yuiResizeMonitor");=0A=
=0A=
                if (!oIFrame) {=0A=
                    oIFrame =3D document.createElement("iframe");=0A=
=0A=
                    if (this.isSecure && =
Module.RESIZE_MONITOR_SECURE_URL && YAHOO.env.ua.ie) {=0A=
                        oIFrame.src =3D Module.RESIZE_MONITOR_SECURE_URL;=0A=
                    }=0A=
=0A=
                    /*=0A=
                        Need to set the iframe document for Gecko=0A=
                        to fire resize events on the iframe =
contentWindow.=0A=
                     */=0A=
                    if (YAHOO.env.ua.gecko) {=0A=
                         sHTML =3D ["<html><head><script ",=0A=
                                  "type=3D\"text/javascript\">",=0A=
                                  =
"window.onresize=3Dfunction(){window.parent.",=0A=
                                  "YAHOO.widget.Module.textResizeEvent.",=0A=
                                  "fire();}", =0A=
                                  "<\/script></head>",=0A=
                                  "<body></body></html>"].join('');=0A=
=0A=
                        oIFrame.src =3D =
"data:text/html;charset=3Dutf-8," +=0A=
                            encodeURIComponent(sHTML);=0A=
                    }=0A=
=0A=
                    oIFrame.id =3D "_yuiResizeMonitor";=0A=
                    /*=0A=
                        Need to set "position" property before inserting =
the =0A=
                        iframe into the document or Safari's status bar =
will =0A=
                        forever indicate the iframe is loading =0A=
                        (See SourceForge bug #1723064)=0A=
                    */=0A=
                    oIFrame.style.position =3D "absolute";=0A=
                    oIFrame.style.visibility =3D "hidden";=0A=
=0A=
                    var fc =3D document.body.firstChild;=0A=
                    if (fc) {=0A=
                        document.body.insertBefore(oIFrame, fc);=0A=
                    } else {=0A=
                        document.body.appendChild(oIFrame);=0A=
                    }=0A=
=0A=
                    oIFrame.style.width =3D "10em";=0A=
                    oIFrame.style.height =3D "10em";=0A=
                    oIFrame.style.top =3D (-1 * oIFrame.offsetHeight) + =
"px";=0A=
                    oIFrame.style.left =3D (-1 * oIFrame.offsetWidth) + =
"px";=0A=
                    oIFrame.style.borderWidth =3D "0";=0A=
                    oIFrame.style.visibility =3D "visible";=0A=
=0A=
                    /*=0A=
                       Don't open/close the document for Gecko like we =
used to, since it=0A=
                       leads to duplicate cookies. (See SourceForge bug =
#1721755)=0A=
                    */=0A=
                    if (YAHOO.env.ua.webkit) {=0A=
                        oDoc =3D oIFrame.contentWindow.document;=0A=
                        oDoc.open();=0A=
                        oDoc.close();=0A=
                    }=0A=
                }=0A=
=0A=
                if (oIFrame && oIFrame.contentWindow) {=0A=
                    Module.textResizeEvent.subscribe(this.onDomResize, =
this, true);=0A=
=0A=
                    if (!Module.textResizeInitialized) {=0A=
                         // We already handle gecko using the iframe's =
document content=0A=
                        if (!YAHOO.env.ua.gecko) {=0A=
                            if (!Event.on(oIFrame.contentWindow, =
"resize", fireTextResize)) {=0A=
                                /*=0A=
                                     This will fail in IE if =
document.domain has =0A=
                                     changed, so we must change the =
listener to =0A=
                                     use the oIFrame element instead=0A=
                                */=0A=
                                Event.on(oIFrame, "resize", =
fireTextResize);=0A=
                            }=0A=
                        }=0A=
                        Module.textResizeInitialized =3D true;=0A=
                    }=0A=
                    this.resizeMonitor =3D oIFrame;=0A=
                }=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Event handler fired when the resize monitor element is resized.=0A=
        * @method onDomResize=0A=
        * @param {DOMEvent} e The DOM resize event=0A=
        * @param {Object} obj The scope object passed to the handler=0A=
        */=0A=
        onDomResize: function (e, obj) {=0A=
        =0A=
            var nLeft =3D -1 * this.resizeMonitor.offsetWidth,=0A=
                nTop =3D -1 * this.resizeMonitor.offsetHeight;=0A=
        =0A=
            this.resizeMonitor.style.top =3D nTop + "px";=0A=
            this.resizeMonitor.style.left =3D  nLeft + "px";=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Sets the Module's header content to the HTML specified, or =
appends =0A=
        * the passed element to the header. If no header is present, one =
will =0A=
        * be automatically created.=0A=
        * @method setHeader=0A=
        * @param {String} headerContent The HTML used to set the header =0A=
        * <em>OR</em>=0A=
        * @param {HTMLElement} headerContent The HTMLElement to append =
to =0A=
        * the header=0A=
        */=0A=
        setHeader: function (headerContent) {=0A=
=0A=
            var oHeader =3D this.header || (this.header =3D =
createHeader());=0A=
        =0A=
            if (typeof headerContent =3D=3D "string") {=0A=
=0A=
                oHeader.innerHTML =3D headerContent;=0A=
=0A=
            } else {=0A=
=0A=
                oHeader.innerHTML =3D "";=0A=
                oHeader.appendChild(headerContent);=0A=
=0A=
            }=0A=
        =0A=
            this.changeHeaderEvent.fire(headerContent);=0A=
            this.changeContentEvent.fire();=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Appends the passed element to the header. If no header is =
present, =0A=
        * one will be automatically created.=0A=
        * @method appendToHeader=0A=
        * @param {HTMLElement} element The element to append to the =
header=0A=
        */=0A=
        appendToHeader: function (element) {=0A=
=0A=
            var oHeader =3D this.header || (this.header =3D =
createHeader());=0A=
        =0A=
            oHeader.appendChild(element);=0A=
=0A=
            this.changeHeaderEvent.fire(element);=0A=
            this.changeContentEvent.fire();=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Sets the Module's body content to the HTML specified, or =
appends the=0A=
        * passed element to the body. If no body is present, one will be =0A=
        * automatically created.=0A=
        * @method setBody=0A=
        * @param {String} bodyContent The HTML used to set the body =
<em>OR</em>=0A=
        * @param {HTMLElement} bodyContent The HTMLElement to append to =
the body=0A=
        */=0A=
        setBody: function (bodyContent) {=0A=
=0A=
            var oBody =3D this.body || (this.body =3D createBody());=0A=
        =0A=
            if (typeof bodyContent =3D=3D "string") {=0A=
=0A=
                oBody.innerHTML =3D bodyContent;=0A=
=0A=
            } else {=0A=
=0A=
                oBody.innerHTML =3D "";=0A=
                oBody.appendChild(bodyContent);=0A=
=0A=
            }=0A=
        =0A=
            this.changeBodyEvent.fire(bodyContent);=0A=
            this.changeContentEvent.fire();=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Appends the passed element to the body. If no body is present, =
one =0A=
        * will be automatically created.=0A=
        * @method appendToBody=0A=
        * @param {HTMLElement} element The element to append to the body=0A=
        */=0A=
        appendToBody: function (element) {=0A=
=0A=
            var oBody =3D this.body || (this.body =3D createBody());=0A=
        =0A=
            oBody.appendChild(element);=0A=
=0A=
            this.changeBodyEvent.fire(element);=0A=
            this.changeContentEvent.fire();=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Sets the Module's footer content to the HTML specified, or =
appends =0A=
        * the passed element to the footer. If no footer is present, one =
will =0A=
        * be automatically created.=0A=
        * @method setFooter=0A=
        * @param {String} footerContent The HTML used to set the footer =0A=
        * <em>OR</em>=0A=
        * @param {HTMLElement} footerContent The HTMLElement to append =
to =0A=
        * the footer=0A=
        */=0A=
        setFooter: function (footerContent) {=0A=
=0A=
            var oFooter =3D this.footer || (this.footer =3D =
createFooter());=0A=
        =0A=
            if (typeof footerContent =3D=3D "string") {=0A=
=0A=
                oFooter.innerHTML =3D footerContent;=0A=
=0A=
            } else {=0A=
=0A=
                oFooter.innerHTML =3D "";=0A=
                oFooter.appendChild(footerContent);=0A=
=0A=
            }=0A=
        =0A=
            this.changeFooterEvent.fire(footerContent);=0A=
            this.changeContentEvent.fire();=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Appends the passed element to the footer. If no footer is =
present, =0A=
        * one will be automatically created.=0A=
        * @method appendToFooter=0A=
        * @param {HTMLElement} element The element to append to the =
footer=0A=
        */=0A=
        appendToFooter: function (element) {=0A=
=0A=
            var oFooter =3D this.footer || (this.footer =3D =
createFooter());=0A=
        =0A=
            oFooter.appendChild(element);=0A=
=0A=
            this.changeFooterEvent.fire(element);=0A=
            this.changeContentEvent.fire();=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Renders the Module by inserting the elements that are not =
already =0A=
        * in the main Module into their correct places. Optionally =
appends =0A=
        * the Module to the specified node prior to the render's =
execution. =0A=
        * <p>=0A=
        * For Modules without existing markup, the appendToNode argument =0A=
        * is REQUIRED. If this argument is ommitted and the current =
element is =0A=
        * not present in the document, the function will return false, =0A=
        * indicating that the render was a failure.=0A=
        * </p>=0A=
        * <p>=0A=
        * NOTE: As of 2.3.1, if the appendToNode is the document's body =
element=0A=
        * then the module is rendered as the first child of the body =
element, =0A=
        * and not appended to it, to avoid Operation Aborted errors in =
IE when =0A=
        * rendering the module before window's load event is fired. You =
can =0A=
        * use the appendtodocumentbody configuration property to change =
this =0A=
        * to append to document.body if required.=0A=
        * </p>=0A=
        * @method render=0A=
        * @param {String} appendToNode The element id to which the =
Module =0A=
        * should be appended to prior to rendering <em>OR</em>=0A=
        * @param {HTMLElement} appendToNode The element to which the =
Module =0A=
        * should be appended to prior to rendering=0A=
        * @param {HTMLElement} moduleElement OPTIONAL. The element that =0A=
        * represents the actual Standard Module container.=0A=
        * @return {Boolean} Success or failure of the render=0A=
        */=0A=
        render: function (appendToNode, moduleElement) {=0A=
=0A=
            var me =3D this,=0A=
                firstChild;=0A=
=0A=
            function appendTo(parentNode) {=0A=
                if (typeof parentNode =3D=3D "string") {=0A=
                    parentNode =3D document.getElementById(parentNode);=0A=
                }=0A=
=0A=
                if (parentNode) {=0A=
                    me._addToParent(parentNode, me.element);=0A=
                    me.appendEvent.fire();=0A=
                }=0A=
            }=0A=
=0A=
            this.beforeRenderEvent.fire();=0A=
=0A=
            if (! moduleElement) {=0A=
                moduleElement =3D this.element;=0A=
            }=0A=
=0A=
            if (appendToNode) {=0A=
                appendTo(appendToNode);=0A=
            } else { =0A=
                // No node was passed in. If the element is not already =
in the Dom, this fails=0A=
                if (! Dom.inDocument(this.element)) {=0A=
                    return false;=0A=
                }=0A=
            }=0A=
=0A=
            // Need to get everything into the DOM if it isn't already=0A=
            if (this.header && ! Dom.inDocument(this.header)) {=0A=
                // There is a header, but it's not in the DOM yet. Need =
to add it.=0A=
                firstChild =3D moduleElement.firstChild;=0A=
                if (firstChild) {=0A=
                    moduleElement.insertBefore(this.header, firstChild);=0A=
                } else {=0A=
                    moduleElement.appendChild(this.header);=0A=
                }=0A=
            }=0A=
=0A=
            if (this.body && ! Dom.inDocument(this.body)) {=0A=
                // There is a body, but it's not in the DOM yet. Need to =
add it.		=0A=
                if (this.footer && Dom.isAncestor(this.moduleElement, =
this.footer)) {=0A=
                    moduleElement.insertBefore(this.body, this.footer);=0A=
                } else {=0A=
                    moduleElement.appendChild(this.body);=0A=
                }=0A=
            }=0A=
=0A=
            if (this.footer && ! Dom.inDocument(this.footer)) {=0A=
                // There is a footer, but it's not in the DOM yet. Need =
to add it.=0A=
                moduleElement.appendChild(this.footer);=0A=
            }=0A=
=0A=
            this.renderEvent.fire();=0A=
            return true;=0A=
        },=0A=
=0A=
        /**=0A=
        * Removes the Module element from the DOM and sets all child =
elements =0A=
        * to null.=0A=
        * @method destroy=0A=
        */=0A=
        destroy: function () {=0A=
=0A=
            var parent,=0A=
                e;=0A=
=0A=
            if (this.element) {=0A=
                Event.purgeElement(this.element, true);=0A=
                parent =3D this.element.parentNode;=0A=
            }=0A=
=0A=
            if (parent) {=0A=
                parent.removeChild(this.element);=0A=
            }=0A=
        =0A=
            this.element =3D null;=0A=
            this.header =3D null;=0A=
            this.body =3D null;=0A=
            this.footer =3D null;=0A=
=0A=
            Module.textResizeEvent.unsubscribe(this.onDomResize, this);=0A=
=0A=
            this.cfg.destroy();=0A=
            this.cfg =3D null;=0A=
=0A=
            this.destroyEvent.fire();=0A=
        =0A=
            for (e in this) {=0A=
                if (e instanceof CustomEvent) {=0A=
                    e.unsubscribeAll();=0A=
                }=0A=
            }=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Shows the Module element by setting the visible configuration =0A=
        * property to true. Also fires two events: beforeShowEvent prior =
to =0A=
        * the visibility change, and showEvent after.=0A=
        * @method show=0A=
        */=0A=
        show: function () {=0A=
            this.cfg.setProperty("visible", true);=0A=
        },=0A=
        =0A=
        /**=0A=
        * Hides the Module element by setting the visible configuration =0A=
        * property to false. Also fires two events: beforeHideEvent =
prior to =0A=
        * the visibility change, and hideEvent after.=0A=
        * @method hide=0A=
        */=0A=
        hide: function () {=0A=
            this.cfg.setProperty("visible", false);=0A=
        },=0A=
        =0A=
        // BUILT-IN EVENT HANDLERS FOR MODULE //=0A=
        /**=0A=
        * Default event handler for changing the visibility property of =
a =0A=
        * Module. By default, this is achieved by switching the =
"display" style =0A=
        * between "block" and "none".=0A=
        * This method is responsible for firing showEvent and hideEvent.=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        * @method configVisible=0A=
        */=0A=
        configVisible: function (type, args, obj) {=0A=
            var visible =3D args[0];=0A=
            if (visible) {=0A=
                this.beforeShowEvent.fire();=0A=
                Dom.setStyle(this.element, "display", "block");=0A=
                this.showEvent.fire();=0A=
            } else {=0A=
                this.beforeHideEvent.fire();=0A=
                Dom.setStyle(this.element, "display", "none");=0A=
                this.hideEvent.fire();=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Default event handler for the "monitorresize" configuration =
property=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        * @method configMonitorResize=0A=
        */=0A=
        configMonitorResize: function (type, args, obj) {=0A=
            var monitor =3D args[0];=0A=
            if (monitor) {=0A=
                this.initResizeMonitor();=0A=
            } else {=0A=
                Module.textResizeEvent.unsubscribe(this.onDomResize, =
this, true);=0A=
                this.resizeMonitor =3D null;=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
         * This method is a protected helper, used when constructing the =
DOM structure for the module =0A=
         * to account for situations which may cause Operation Aborted =
errors in IE. It should not =0A=
         * be used for general DOM construction.=0A=
         * <p>=0A=
         * If the parentNode is not document.body, the element is =
appended as the last element.=0A=
         * </p>=0A=
         * <p>=0A=
         * If the parentNode is document.body the element is added as =
the first child to help=0A=
         * prevent Operation Aborted errors in IE.=0A=
         * </p>=0A=
         *=0A=
         * @param {parentNode} The HTML element to which the element =
will be added=0A=
         * @param {element} The HTML element to be added to parentNode's =
children=0A=
         * @method _addToParent=0A=
         * @protected=0A=
         */=0A=
        _addToParent: function(parentNode, element) {=0A=
            if (!this.cfg.getProperty("appendtodocumentbody") && =
parentNode =3D=3D=3D document.body && parentNode.firstChild) {=0A=
                parentNode.insertBefore(element, parentNode.firstChild);=0A=
            } else {=0A=
                parentNode.appendChild(element);=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Returns a String representation of the Object.=0A=
        * @method toString=0A=
        * @return {String} The string representation of the Module=0A=
        */=0A=
        toString: function () {=0A=
            return "Module " + this.id;=0A=
        }=0A=
    };=0A=
=0A=
    YAHOO.lang.augmentProto(Module, YAHOO.util.EventProvider);=0A=
=0A=
}());=0A=
=0A=
(function () {=0A=
=0A=
    /**=0A=
    * Overlay is a Module that is absolutely positioned above the page =
flow. It =0A=
    * has convenience methods for positioning and sizing, as well as =
options for =0A=
    * controlling zIndex and constraining the Overlay's position to the =
current =0A=
    * visible viewport. Overlay also contains a dynamicly generated =
IFRAME which =0A=
    * is placed beneath it for Internet Explorer 6 and 5.x so that it =
will be =0A=
    * properly rendered above SELECT elements.=0A=
    * @namespace YAHOO.widget=0A=
    * @class Overlay=0A=
    * @extends YAHOO.widget.Module=0A=
    * @param {String} el The element ID representing the Overlay =
<em>OR</em>=0A=
    * @param {HTMLElement} el The element representing the Overlay=0A=
    * @param {Object} userConfig The configuration object literal =
containing =0A=
    * the configuration that should be set for this Overlay. See =
configuration =0A=
    * documentation for more details.=0A=
    * @constructor=0A=
    */=0A=
    YAHOO.widget.Overlay =3D function (el, userConfig) {=0A=
        YAHOO.widget.Overlay.superclass.constructor.call(this, el, =
userConfig);=0A=
    };=0A=
=0A=
    var Lang =3D YAHOO.lang,=0A=
        CustomEvent =3D YAHOO.util.CustomEvent,=0A=
        Module =3D YAHOO.widget.Module,=0A=
        Event =3D YAHOO.util.Event,=0A=
        Dom =3D YAHOO.util.Dom,=0A=
        Config =3D YAHOO.util.Config,=0A=
        Overlay =3D YAHOO.widget.Overlay,=0A=
=0A=
        m_oIFrameTemplate,=0A=
=0A=
        /**=0A=
        * Constant representing the name of the Overlay's events=0A=
        * @property EVENT_TYPES=0A=
        * @private=0A=
        * @final=0A=
        * @type Object=0A=
        */=0A=
        EVENT_TYPES =3D {=0A=
            "BEFORE_MOVE": "beforeMove",=0A=
            "MOVE": "move"=0A=
        },=0A=
=0A=
        /**=0A=
        * Constant representing the Overlay's configuration properties=0A=
        * @property DEFAULT_CONFIG=0A=
        * @private=0A=
        * @final=0A=
        * @type Object=0A=
        */=0A=
        DEFAULT_CONFIG =3D {=0A=
=0A=
            "X": { =0A=
                key: "x", =0A=
                validator: Lang.isNumber, =0A=
                suppressEvent: true, =0A=
                supercedes: ["iframe"]=0A=
            },=0A=
=0A=
            "Y": { =0A=
                key: "y", =0A=
                validator: Lang.isNumber, =0A=
                suppressEvent: true, =0A=
                supercedes: ["iframe"]=0A=
            },=0A=
=0A=
            "XY": { =0A=
                key: "xy", =0A=
                suppressEvent: true, =0A=
                supercedes: ["iframe"] =0A=
            },=0A=
=0A=
            "CONTEXT": { =0A=
                key: "context", =0A=
                suppressEvent: true, =0A=
                supercedes: ["iframe"] =0A=
            },=0A=
=0A=
            "FIXED_CENTER": { =0A=
                key: "fixedcenter", =0A=
                value: false, =0A=
                validator: Lang.isBoolean, =0A=
                supercedes: ["iframe", "visible"] =0A=
            },=0A=
=0A=
            "WIDTH": { =0A=
                key: "width", =0A=
                suppressEvent: true, =0A=
                supercedes: ["context", "fixedcenter", "iframe"] =0A=
            }, =0A=
=0A=
            "HEIGHT": { =0A=
                key: "height", =0A=
                suppressEvent: true, =0A=
                supercedes: ["context", "fixedcenter", "iframe"] =0A=
            }, =0A=
=0A=
            "ZINDEX": { =0A=
                key: "zindex", =0A=
                value: null =0A=
            }, =0A=
=0A=
            "CONSTRAIN_TO_VIEWPORT": { =0A=
                key: "constraintoviewport", =0A=
                value: false, =0A=
                validator: Lang.isBoolean, =0A=
                supercedes: ["iframe", "x", "y", "xy"]=0A=
            }, =0A=
=0A=
            "IFRAME": { =0A=
                key: "iframe", =0A=
                value: (YAHOO.env.ua.ie =3D=3D 6 ? true : false), =0A=
                validator: Lang.isBoolean, =0A=
                supercedes: ["zindex"] =0A=
            }=0A=
        };=0A=
=0A=
    /**=0A=
    * The URL that will be placed in the iframe=0A=
    * @property YAHOO.widget.Overlay.IFRAME_SRC=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Overlay.IFRAME_SRC =3D "javascript:false;";=0A=
=0A=
    /**=0A=
    * Number representing how much the iframe shim should be offset from =
each =0A=
    * side of an Overlay instance, in pixels.=0A=
    * @property YAHOO.widget.Overlay.IFRAME_SRC=0A=
    * @default 3=0A=
    * @static=0A=
    * @final=0A=
    * @type Number=0A=
    */=0A=
    Overlay.IFRAME_OFFSET =3D 3;=0A=
=0A=
    /**=0A=
    * Number representing the minimum distance an Overlay instance =
should be =0A=
    * positioned relative to the boundaries of the browser's viewport, =
in pixels.=0A=
    * @property YAHOO.widget.Overlay.VIEWPORT_OFFSET=0A=
    * @default 10=0A=
    * @static=0A=
    * @final=0A=
    * @type Number=0A=
    */=0A=
    Overlay.VIEWPORT_OFFSET =3D 10;=0A=
=0A=
    /**=0A=
    * Constant representing the top left corner of an element, used for =0A=
    * configuring the context element alignment=0A=
    * @property YAHOO.widget.Overlay.TOP_LEFT=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Overlay.TOP_LEFT =3D "tl";=0A=
=0A=
    /**=0A=
    * Constant representing the top right corner of an element, used for =0A=
    * configuring the context element alignment=0A=
    * @property YAHOO.widget.Overlay.TOP_RIGHT=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Overlay.TOP_RIGHT =3D "tr";=0A=
=0A=
    /**=0A=
    * Constant representing the top bottom left corner of an element, =
used for =0A=
    * configuring the context element alignment=0A=
    * @property YAHOO.widget.Overlay.BOTTOM_LEFT=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Overlay.BOTTOM_LEFT =3D "bl";=0A=
=0A=
    /**=0A=
    * Constant representing the bottom right corner of an element, used =
for =0A=
    * configuring the context element alignment=0A=
    * @property YAHOO.widget.Overlay.BOTTOM_RIGHT=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Overlay.BOTTOM_RIGHT =3D "br";=0A=
=0A=
    /**=0A=
    * Constant representing the default CSS class used for an Overlay=0A=
    * @property YAHOO.widget.Overlay.CSS_OVERLAY=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    Overlay.CSS_OVERLAY =3D "yui-overlay";=0A=
=0A=
    /**=0A=
    * A singleton CustomEvent used for reacting to the DOM event for =0A=
    * window scroll=0A=
    * @event YAHOO.widget.Overlay.windowScrollEvent=0A=
    */=0A=
    Overlay.windowScrollEvent =3D new CustomEvent("windowScroll");=0A=
=0A=
    /**=0A=
    * A singleton CustomEvent used for reacting to the DOM event for=0A=
    * window resize=0A=
    * @event YAHOO.widget.Overlay.windowResizeEvent=0A=
    */=0A=
    Overlay.windowResizeEvent =3D new CustomEvent("windowResize");=0A=
=0A=
    /**=0A=
    * The DOM event handler used to fire the CustomEvent for window =
scroll=0A=
    * @method YAHOO.widget.Overlay.windowScrollHandler=0A=
    * @static=0A=
    * @param {DOMEvent} e The DOM scroll event=0A=
    */=0A=
    Overlay.windowScrollHandler =3D function (e) {=0A=
=0A=
        if (YAHOO.env.ua.ie) {=0A=
=0A=
            if (! window.scrollEnd) {=0A=
                window.scrollEnd =3D -1;=0A=
            }=0A=
=0A=
            clearTimeout(window.scrollEnd);=0A=
    =0A=
            window.scrollEnd =3D setTimeout(function () { =0A=
                Overlay.windowScrollEvent.fire(); =0A=
            }, 1);=0A=
    =0A=
        } else {=0A=
            Overlay.windowScrollEvent.fire();=0A=
        }=0A=
    };=0A=
=0A=
    /**=0A=
    * The DOM event handler used to fire the CustomEvent for window =
resize=0A=
    * @method YAHOO.widget.Overlay.windowResizeHandler=0A=
    * @static=0A=
    * @param {DOMEvent} e The DOM resize event=0A=
    */=0A=
    Overlay.windowResizeHandler =3D function (e) {=0A=
=0A=
        if (YAHOO.env.ua.ie) {=0A=
            if (! window.resizeEnd) {=0A=
                window.resizeEnd =3D -1;=0A=
            }=0A=
=0A=
            clearTimeout(window.resizeEnd);=0A=
=0A=
            window.resizeEnd =3D setTimeout(function () {=0A=
                Overlay.windowResizeEvent.fire(); =0A=
            }, 100);=0A=
        } else {=0A=
            Overlay.windowResizeEvent.fire();=0A=
        }=0A=
    };=0A=
=0A=
    /**=0A=
    * A boolean that indicated whether the window resize and scroll =
events have =0A=
    * already been subscribed to.=0A=
    * @property YAHOO.widget.Overlay._initialized=0A=
    * @private=0A=
    * @type Boolean=0A=
    */=0A=
    Overlay._initialized =3D null;=0A=
=0A=
    if (Overlay._initialized =3D=3D=3D null) {=0A=
        Event.on(window, "scroll", Overlay.windowScrollHandler);=0A=
        Event.on(window, "resize", Overlay.windowResizeHandler);=0A=
    =0A=
        Overlay._initialized =3D true;=0A=
    }=0A=
=0A=
    YAHOO.extend(Overlay, Module, {=0A=
=0A=
        /**=0A=
        * The Overlay initialization method, which is executed for =
Overlay and  =0A=
        * all of its subclasses. This method is automatically called by =
the =0A=
        * constructor, and  sets up all DOM references for pre-existing =
markup, =0A=
        * and creates required markup if it is not already present.=0A=
        * @method init=0A=
        * @param {String} el The element ID representing the Overlay =
<em>OR</em>=0A=
        * @param {HTMLElement} el The element representing the Overlay=0A=
        * @param {Object} userConfig The configuration object literal =0A=
        * containing the configuration that should be set for this =
Overlay. =0A=
        * See configuration documentation for more details.=0A=
        */=0A=
        init: function (el, userConfig) {=0A=
    =0A=
            /*=0A=
                 Note that we don't pass the user config in here yet =
because we=0A=
                 only want it executed once, at the lowest subclass level=0A=
            */=0A=
    =0A=
            Overlay.superclass.init.call(this, el/*, userConfig*/);  =0A=
=0A=
            this.beforeInitEvent.fire(Overlay);=0A=
            =0A=
            Dom.addClass(this.element, Overlay.CSS_OVERLAY);=0A=
            =0A=
            if (userConfig) {=0A=
                this.cfg.applyConfig(userConfig, true);=0A=
            }=0A=
=0A=
            if (this.platform =3D=3D "mac" && YAHOO.env.ua.gecko) {=0A=
=0A=
                if (! Config.alreadySubscribed(this.showEvent,=0A=
                    this.showMacGeckoScrollbars, this)) {=0A=
=0A=
                    =
this.showEvent.subscribe(this.showMacGeckoScrollbars, =0A=
                        this, true);=0A=
=0A=
                }=0A=
=0A=
                if (! Config.alreadySubscribed(this.hideEvent, =0A=
                    this.hideMacGeckoScrollbars, this)) {=0A=
=0A=
                    =
this.hideEvent.subscribe(this.hideMacGeckoScrollbars, =0A=
                        this, true);=0A=
=0A=
                }=0A=
            }=0A=
=0A=
            this.initEvent.fire(Overlay);=0A=
        },=0A=
        =0A=
        /**=0A=
        * Initializes the custom events for Overlay which are fired  =0A=
        * automatically at appropriate times by the Overlay class.=0A=
        * @method initEvents=0A=
        */=0A=
        initEvents: function () {=0A=
    =0A=
            Overlay.superclass.initEvents.call(this);=0A=
            =0A=
            var SIGNATURE =3D CustomEvent.LIST;=0A=
            =0A=
            /**=0A=
            * CustomEvent fired before the Overlay is moved.=0A=
            * @event beforeMoveEvent=0A=
            * @param {Number} x x coordinate=0A=
            * @param {Number} y y coordinate=0A=
            */=0A=
            this.beforeMoveEvent =3D =
this.createEvent(EVENT_TYPES.BEFORE_MOVE);=0A=
            this.beforeMoveEvent.signature =3D SIGNATURE;=0A=
            =0A=
            /**=0A=
            * CustomEvent fired after the Overlay is moved.=0A=
            * @event moveEvent=0A=
            * @param {Number} x x coordinate=0A=
            * @param {Number} y y coordinate=0A=
            */=0A=
            this.moveEvent =3D this.createEvent(EVENT_TYPES.MOVE);=0A=
            this.moveEvent.signature =3D SIGNATURE;=0A=
        =0A=
        },=0A=
        =0A=
        /**=0A=
        * Initializes the class's configurable properties which can be =
changed =0A=
        * using the Overlay's Config object (cfg).=0A=
        * @method initDefaultConfig=0A=
        */=0A=
        initDefaultConfig: function () {=0A=
    =0A=
            Overlay.superclass.initDefaultConfig.call(this);=0A=
            =0A=
            =0A=
            // Add overlay config properties //=0A=
            =0A=
            /**=0A=
            * The absolute x-coordinate position of the Overlay=0A=
            * @config x=0A=
            * @type Number=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.X.key, { =0A=
    =0A=
                handler: this.configX, =0A=
                validator: DEFAULT_CONFIG.X.validator, =0A=
                suppressEvent: DEFAULT_CONFIG.X.suppressEvent, =0A=
                supercedes: DEFAULT_CONFIG.X.supercedes=0A=
    =0A=
            });=0A=
    =0A=
            /**=0A=
            * The absolute y-coordinate position of the Overlay=0A=
            * @config y=0A=
            * @type Number=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.Y.key, {=0A=
    =0A=
                handler: this.configY, =0A=
                validator: DEFAULT_CONFIG.Y.validator, =0A=
                suppressEvent: DEFAULT_CONFIG.Y.suppressEvent, =0A=
                supercedes: DEFAULT_CONFIG.Y.supercedes=0A=
    =0A=
            });=0A=
    =0A=
            /**=0A=
            * An array with the absolute x and y positions of the Overlay=0A=
            * @config xy=0A=
            * @type Number[]=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.XY.key, {=0A=
            =0A=
                handler: this.configXY, =0A=
                suppressEvent: DEFAULT_CONFIG.XY.suppressEvent, =0A=
                supercedes: DEFAULT_CONFIG.XY.supercedes=0A=
            =0A=
            });=0A=
    =0A=
            /**=0A=
            * The array of context arguments for context-sensitive =
positioning.  =0A=
            * The format is: [id or element, element corner, context =
corner]. =0A=
            * For example, setting this property to ["img1", "tl", "bl"] =
would =0A=
            * align the Overlay's top left corner to the context =
element's =0A=
            * bottom left corner.=0A=
            * @config context=0A=
            * @type Array=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.CONTEXT.key, {=0A=
            =0A=
                handler: this.configContext, =0A=
                suppressEvent: DEFAULT_CONFIG.CONTEXT.suppressEvent, =0A=
                supercedes: DEFAULT_CONFIG.CONTEXT.supercedes=0A=
            =0A=
            });=0A=
=0A=
            /**=0A=
            * True if the Overlay should be anchored to the center of =0A=
            * the viewport.=0A=
            * @config fixedcenter=0A=
            * @type Boolean=0A=
            * @default false=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.FIXED_CENTER.key, {=0A=
            =0A=
                handler: this.configFixedCenter,=0A=
                value: DEFAULT_CONFIG.FIXED_CENTER.value, =0A=
                validator: DEFAULT_CONFIG.FIXED_CENTER.validator, =0A=
                supercedes: DEFAULT_CONFIG.FIXED_CENTER.supercedes=0A=
            =0A=
            });=0A=
    =0A=
            /**=0A=
            * CSS width of the Overlay.=0A=
            * @config width=0A=
            * @type String=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.WIDTH.key, {=0A=
=0A=
                handler: this.configWidth, =0A=
                suppressEvent: DEFAULT_CONFIG.WIDTH.suppressEvent, =0A=
                supercedes: DEFAULT_CONFIG.WIDTH.supercedes=0A=
=0A=
            });=0A=
=0A=
            /**=0A=
            * CSS height of the Overlay.=0A=
            * @config height=0A=
            * @type String=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.HEIGHT.key, {=0A=
=0A=
                handler: this.configHeight, =0A=
                suppressEvent: DEFAULT_CONFIG.HEIGHT.suppressEvent, =0A=
                supercedes: DEFAULT_CONFIG.HEIGHT.supercedes=0A=
            =0A=
            });=0A=
=0A=
            /**=0A=
            * CSS z-index of the Overlay.=0A=
            * @config zIndex=0A=
            * @type Number=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.ZINDEX.key, {=0A=
=0A=
                handler: this.configzIndex,=0A=
                value: DEFAULT_CONFIG.ZINDEX.value=0A=
=0A=
            });=0A=
            =0A=
            /**=0A=
            * True if the Overlay should be prevented from being =
positioned =0A=
            * out of the viewport.=0A=
            * @config constraintoviewport=0A=
            * @type Boolean=0A=
            * @default false=0A=
            */=0A=
            =
this.cfg.addProperty(DEFAULT_CONFIG.CONSTRAIN_TO_VIEWPORT.key, {=0A=
=0A=
                handler: this.configConstrainToViewport, =0A=
                value: DEFAULT_CONFIG.CONSTRAIN_TO_VIEWPORT.value, =0A=
                validator: =
DEFAULT_CONFIG.CONSTRAIN_TO_VIEWPORT.validator, =0A=
                supercedes: =
DEFAULT_CONFIG.CONSTRAIN_TO_VIEWPORT.supercedes=0A=
=0A=
            });=0A=
            =0A=
            /**=0A=
            * @config iframe=0A=
            * @description Boolean indicating whether or not the Overlay =
should =0A=
            * have an IFRAME shim; used to prevent SELECT elements from =0A=
            * poking through an Overlay instance in IE6.  When set to =
"true", =0A=
            * the iframe shim is created when the Overlay instance is =
intially=0A=
            * made visible.=0A=
            * @type Boolean=0A=
            * @default true for IE6 and below, false for all other =
browsers.=0A=
            */=0A=
            this.cfg.addProperty(DEFAULT_CONFIG.IFRAME.key, {=0A=
=0A=
                handler: this.configIframe, =0A=
                value: DEFAULT_CONFIG.IFRAME.value, =0A=
                validator: DEFAULT_CONFIG.IFRAME.validator, =0A=
                supercedes: DEFAULT_CONFIG.IFRAME.supercedes=0A=
=0A=
            });=0A=
        },=0A=
=0A=
        /**=0A=
        * Moves the Overlay to the specified position. This function is  =0A=
        * identical to calling this.cfg.setProperty("xy", [x,y]);=0A=
        * @method moveTo=0A=
        * @param {Number} x The Overlay's new x position=0A=
        * @param {Number} y The Overlay's new y position=0A=
        */=0A=
        moveTo: function (x, y) {=0A=
            this.cfg.setProperty("xy", [x, y]);=0A=
        },=0A=
=0A=
        /**=0A=
        * Adds a CSS class ("hide-scrollbars") and removes a CSS class =0A=
        * ("show-scrollbars") to the Overlay to fix a bug in Gecko on =
Mac OS X =0A=
        * (https://bugzilla.mozilla.org/show_bug.cgi?id=3D187435)=0A=
        * @method hideMacGeckoScrollbars=0A=
        */=0A=
        hideMacGeckoScrollbars: function () {=0A=
    =0A=
            Dom.removeClass(this.element, "show-scrollbars");=0A=
            Dom.addClass(this.element, "hide-scrollbars");=0A=
    =0A=
        },=0A=
=0A=
        /**=0A=
        * Adds a CSS class ("show-scrollbars") and removes a CSS class =0A=
        * ("hide-scrollbars") to the Overlay to fix a bug in Gecko on =
Mac OS X =0A=
        * (https://bugzilla.mozilla.org/show_bug.cgi?id=3D187435)=0A=
        * @method showMacGeckoScrollbars=0A=
        */=0A=
        showMacGeckoScrollbars: function () {=0A=
    =0A=
            Dom.removeClass(this.element, "hide-scrollbars");=0A=
            Dom.addClass(this.element, "show-scrollbars");=0A=
    =0A=
        },=0A=
=0A=
        // BEGIN BUILT-IN PROPERTY EVENT HANDLERS //=0A=
        /**=0A=
        * The default event handler fired when the "visible" property is =0A=
        * changed.  This method is responsible for firing showEvent=0A=
        * and hideEvent.=0A=
        * @method configVisible=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration=0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configVisible: function (type, args, obj) {=0A=
=0A=
            var visible =3D args[0],=0A=
                currentVis =3D Dom.getStyle(this.element, "visibility"),=0A=
                effect =3D this.cfg.getProperty("effect"),=0A=
                effectInstances =3D [],=0A=
                isMacGecko =3D (this.platform =3D=3D "mac" && =
YAHOO.env.ua.gecko),=0A=
                alreadySubscribed =3D Config.alreadySubscribed,=0A=
                eff, ei, e, i, j, k, h,=0A=
                nEffects,=0A=
                nEffectInstances;=0A=
=0A=
            if (currentVis =3D=3D "inherit") {=0A=
                e =3D this.element.parentNode;=0A=
=0A=
                while (e.nodeType !=3D 9 && e.nodeType !=3D 11) {=0A=
                    currentVis =3D Dom.getStyle(e, "visibility");=0A=
=0A=
                    if (currentVis !=3D "inherit") { =0A=
                        break; =0A=
                    }=0A=
=0A=
                    e =3D e.parentNode;=0A=
                }=0A=
=0A=
                if (currentVis =3D=3D "inherit") {=0A=
                    currentVis =3D "visible";=0A=
                }=0A=
            }=0A=
=0A=
            if (effect) {=0A=
                if (effect instanceof Array) {=0A=
                    nEffects =3D effect.length;=0A=
=0A=
                    for (i =3D 0; i < nEffects; i++) {=0A=
                        eff =3D effect[i];=0A=
                        effectInstances[effectInstances.length] =3D =0A=
                            eff.effect(this, eff.duration);=0A=
=0A=
                    }=0A=
                } else {=0A=
                    effectInstances[effectInstances.length] =3D =0A=
                        effect.effect(this, effect.duration);=0A=
                }=0A=
            }=0A=
=0A=
=0A=
            if (visible) { // Show=0A=
                if (isMacGecko) {=0A=
                    this.showMacGeckoScrollbars();=0A=
                }=0A=
=0A=
                if (effect) { // Animate in=0A=
                    if (visible) { // Animate in if not showing=0A=
                        if (currentVis !=3D "visible" || currentVis =
=3D=3D=3D "") {=0A=
                            this.beforeShowEvent.fire();=0A=
                            nEffectInstances =3D effectInstances.length;=0A=
=0A=
                            for (j =3D 0; j < nEffectInstances; j++) {=0A=
                                ei =3D effectInstances[j];=0A=
                                if (j =3D=3D=3D 0 && !alreadySubscribed(=0A=
                                        ei.animateInCompleteEvent, =0A=
                                        this.showEvent.fire, =
this.showEvent)) {=0A=
=0A=
                                    /*=0A=
                                         Delegate showEvent until end =0A=
                                         of animateInComplete=0A=
                                    */=0A=
=0A=
                                    ei.animateInCompleteEvent.subscribe(=0A=
                                     this.showEvent.fire, =
this.showEvent, true);=0A=
                                }=0A=
                                ei.animateIn();=0A=
                            }=0A=
                        }=0A=
                    }=0A=
                } else { // Show=0A=
                    if (currentVis !=3D "visible" || currentVis =
=3D=3D=3D "") {=0A=
                        this.beforeShowEvent.fire();=0A=
=0A=
                        Dom.setStyle(this.element, "visibility", =
"visible");=0A=
=0A=
                        this.cfg.refireEvent("iframe");=0A=
                        this.showEvent.fire();=0A=
                    }=0A=
                }=0A=
            } else { // Hide=0A=
=0A=
                if (isMacGecko) {=0A=
                    this.hideMacGeckoScrollbars();=0A=
                }=0A=
                    =0A=
                if (effect) { // Animate out if showing=0A=
                    if (currentVis =3D=3D "visible") {=0A=
                        this.beforeHideEvent.fire();=0A=
=0A=
                        nEffectInstances =3D effectInstances.length;=0A=
                        for (k =3D 0; k < nEffectInstances; k++) {=0A=
                            h =3D effectInstances[k];=0A=
    =0A=
                            if (k =3D=3D=3D 0 && !alreadySubscribed(=0A=
                                h.animateOutCompleteEvent, =
this.hideEvent.fire, =0A=
                                this.hideEvent)) {=0A=
    =0A=
                                /*=0A=
                                     Delegate hideEvent until end =0A=
                                     of animateOutComplete=0A=
                                */=0A=
    =0A=
                                h.animateOutCompleteEvent.subscribe(=0A=
                                    this.hideEvent.fire, this.hideEvent, =
true);=0A=
    =0A=
                            }=0A=
                            h.animateOut();=0A=
                        }=0A=
=0A=
                    } else if (currentVis =3D=3D=3D "") {=0A=
                        Dom.setStyle(this.element, "visibility", =
"hidden");=0A=
                    }=0A=
=0A=
                } else { // Simple hide=0A=
=0A=
                    if (currentVis =3D=3D "visible" || currentVis =
=3D=3D=3D "") {=0A=
                        this.beforeHideEvent.fire();=0A=
                        Dom.setStyle(this.element, "visibility", =
"hidden");=0A=
                        this.hideEvent.fire();=0A=
                    }=0A=
                }=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Center event handler used for centering on scroll/resize, but =
only if =0A=
        * the Overlay is visible=0A=
        * @method doCenterOnDOMEvent=0A=
        */=0A=
        doCenterOnDOMEvent: function () {=0A=
            if (this.cfg.getProperty("visible")) {=0A=
                this.center();=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler fired when the "fixedcenter" =
property =0A=
        * is changed.=0A=
        * @method configFixedCenter=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configFixedCenter: function (type, args, obj) {=0A=
=0A=
            var val =3D args[0],=0A=
                alreadySubscribed =3D Config.alreadySubscribed,=0A=
                windowResizeEvent =3D Overlay.windowResizeEvent,=0A=
                windowScrollEvent =3D Overlay.windowScrollEvent;=0A=
=0A=
            if (val) {=0A=
                this.center();=0A=
=0A=
                if (!alreadySubscribed(this.beforeShowEvent, =
this.center, this)) {=0A=
                    this.beforeShowEvent.subscribe(this.center);=0A=
                }=0A=
=0A=
                if (!alreadySubscribed(windowResizeEvent, =
this.doCenterOnDOMEvent, this)) {=0A=
                    windowResizeEvent.subscribe(this.doCenterOnDOMEvent, =
this, true);=0A=
                }=0A=
=0A=
                if (!alreadySubscribed(windowScrollEvent, =
this.doCenterOnDOMEvent, this)) {=0A=
                    windowScrollEvent.subscribe(this.doCenterOnDOMEvent, =
this, true);=0A=
                }=0A=
=0A=
            } else {=0A=
                this.beforeShowEvent.unsubscribe(this.center);=0A=
=0A=
                windowResizeEvent.unsubscribe(this.doCenterOnDOMEvent, =
this);=0A=
                windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent, =
this);=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * The default event handler fired when the "height" property is =
changed.=0A=
        * @method configHeight=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configHeight: function (type, args, obj) {=0A=
    =0A=
            var height =3D args[0],=0A=
                el =3D this.element;=0A=
=0A=
            Dom.setStyle(el, "height", height);=0A=
            this.cfg.refireEvent("iframe");=0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler fired when the "width" property is =
changed.=0A=
        * @method configWidth=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configWidth: function (type, args, obj) {=0A=
=0A=
            var width =3D args[0],=0A=
                el =3D this.element;=0A=
    =0A=
            Dom.setStyle(el, "width", width);=0A=
            this.cfg.refireEvent("iframe");=0A=
        },=0A=
        =0A=
        /**=0A=
        * The default event handler fired when the "zIndex" property is =
changed.=0A=
        * @method configzIndex=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configzIndex: function (type, args, obj) {=0A=
=0A=
            var zIndex =3D args[0],=0A=
                el =3D this.element;=0A=
=0A=
            if (! zIndex) {=0A=
                zIndex =3D Dom.getStyle(el, "zIndex");=0A=
                if (! zIndex || isNaN(zIndex)) {=0A=
                    zIndex =3D 0;=0A=
                }=0A=
            }=0A=
=0A=
            if (this.iframe || this.cfg.getProperty("iframe") =3D=3D=3D =
true) {=0A=
                if (zIndex <=3D 0) {=0A=
                    zIndex =3D 1;=0A=
                }=0A=
            }=0A=
=0A=
            Dom.setStyle(el, "zIndex", zIndex);=0A=
            this.cfg.setProperty("zIndex", zIndex, true);=0A=
=0A=
            if (this.iframe) {=0A=
                this.stackIframe();=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler fired when the "xy" property is =
changed.=0A=
        * @method configXY=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configXY: function (type, args, obj) {=0A=
=0A=
            var pos =3D args[0],=0A=
                x =3D pos[0],=0A=
                y =3D pos[1];=0A=
=0A=
            this.cfg.setProperty("x", x);=0A=
            this.cfg.setProperty("y", y);=0A=
=0A=
            this.beforeMoveEvent.fire([x, y]);=0A=
=0A=
            x =3D this.cfg.getProperty("x");=0A=
            y =3D this.cfg.getProperty("y");=0A=
=0A=
=0A=
            this.cfg.refireEvent("iframe");=0A=
            this.moveEvent.fire([x, y]);=0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler fired when the "x" property is =
changed.=0A=
        * @method configX=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configX: function (type, args, obj) {=0A=
=0A=
            var x =3D args[0],=0A=
                y =3D this.cfg.getProperty("y");=0A=
=0A=
            this.cfg.setProperty("x", x, true);=0A=
            this.cfg.setProperty("y", y, true);=0A=
=0A=
            this.beforeMoveEvent.fire([x, y]);=0A=
=0A=
            x =3D this.cfg.getProperty("x");=0A=
            y =3D this.cfg.getProperty("y");=0A=
            =0A=
            Dom.setX(this.element, x, true);=0A=
            =0A=
            this.cfg.setProperty("xy", [x, y], true);=0A=
           =0A=
            this.cfg.refireEvent("iframe");=0A=
            this.moveEvent.fire([x, y]);=0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler fired when the "y" property is =
changed.=0A=
        * @method configY=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configY: function (type, args, obj) {=0A=
=0A=
            var x =3D this.cfg.getProperty("x"),=0A=
                y =3D args[0];=0A=
=0A=
            this.cfg.setProperty("x", x, true);=0A=
            this.cfg.setProperty("y", y, true);=0A=
=0A=
            this.beforeMoveEvent.fire([x, y]);=0A=
=0A=
            x =3D this.cfg.getProperty("x");=0A=
            y =3D this.cfg.getProperty("y");=0A=
=0A=
            Dom.setY(this.element, y, true);=0A=
=0A=
            this.cfg.setProperty("xy", [x, y], true);=0A=
=0A=
            this.cfg.refireEvent("iframe");=0A=
            this.moveEvent.fire([x, y]);=0A=
        },=0A=
        =0A=
        /**=0A=
        * Shows the iframe shim, if it has been enabled.=0A=
        * @method showIframe=0A=
        */=0A=
        showIframe: function () {=0A=
=0A=
            var oIFrame =3D this.iframe,=0A=
                oParentNode;=0A=
=0A=
            if (oIFrame) {=0A=
                oParentNode =3D this.element.parentNode;=0A=
=0A=
                if (oParentNode !=3D oIFrame.parentNode) {=0A=
                    this._addToParent(oParentNode, oIFrame);=0A=
                }=0A=
                oIFrame.style.display =3D "block";=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Hides the iframe shim, if it has been enabled.=0A=
        * @method hideIframe=0A=
        */=0A=
        hideIframe: function () {=0A=
            if (this.iframe) {=0A=
                this.iframe.style.display =3D "none";=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Syncronizes the size and position of iframe shim to that of =
its =0A=
        * corresponding Overlay instance.=0A=
        * @method syncIframe=0A=
        */=0A=
        syncIframe: function () {=0A=
=0A=
            var oIFrame =3D this.iframe,=0A=
                oElement =3D this.element,=0A=
                nOffset =3D Overlay.IFRAME_OFFSET,=0A=
                nDimensionOffset =3D (nOffset * 2),=0A=
                aXY;=0A=
=0A=
            if (oIFrame) {=0A=
                // Size <iframe>=0A=
                oIFrame.style.width =3D (oElement.offsetWidth + =
nDimensionOffset + "px");=0A=
                oIFrame.style.height =3D (oElement.offsetHeight + =
nDimensionOffset + "px");=0A=
=0A=
                // Position <iframe>=0A=
                aXY =3D this.cfg.getProperty("xy");=0A=
=0A=
                if (!Lang.isArray(aXY) || (isNaN(aXY[0]) || =
isNaN(aXY[1]))) {=0A=
                    this.syncPosition();=0A=
                    aXY =3D this.cfg.getProperty("xy");=0A=
                }=0A=
                Dom.setXY(oIFrame, [(aXY[0] - nOffset), (aXY[1] - =
nOffset)]);=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
         * Sets the zindex of the iframe shim, if it exists, based on =
the zindex of=0A=
         * the Overlay element. The zindex of the iframe is set to be =
one less =0A=
         * than the Overlay element's zindex.=0A=
         * =0A=
         * <p>NOTE: This method will not bump up the zindex of the =
Overlay element=0A=
         * to ensure that the iframe shim has a non-negative zindex.=0A=
         * If you require the iframe zindex to be 0 or higher, the =
zindex of =0A=
         * the Overlay element should be set to a value greater than 0, =
before =0A=
         * this method is called.=0A=
         * </p>=0A=
         * @method stackIframe=0A=
         */=0A=
        stackIframe: function () {=0A=
            if (this.iframe) {=0A=
                var overlayZ =3D Dom.getStyle(this.element, "zIndex");=0A=
                if (!YAHOO.lang.isUndefined(overlayZ) && =
!isNaN(overlayZ)) {=0A=
                    Dom.setStyle(this.iframe, "zIndex", (overlayZ - 1));=0A=
                }=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler fired when the "iframe" property is =
changed.=0A=
        * @method configIframe=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configIframe: function (type, args, obj) {=0A=
=0A=
            var bIFrame =3D args[0];=0A=
=0A=
            function createIFrame() {=0A=
=0A=
                var oIFrame =3D this.iframe,=0A=
                    oElement =3D this.element,=0A=
                    oParent;=0A=
=0A=
                if (!oIFrame) {=0A=
                    if (!m_oIFrameTemplate) {=0A=
                        m_oIFrameTemplate =3D =
document.createElement("iframe");=0A=
=0A=
                        if (this.isSecure) {=0A=
                            m_oIFrameTemplate.src =3D Overlay.IFRAME_SRC;=0A=
                        }=0A=
=0A=
                        /*=0A=
                            Set the opacity of the <iframe> to 0 so that =
it =0A=
                            doesn't modify the opacity of any =
transparent =0A=
                            elements that may be on top of it (like a =
shadow).=0A=
                        */=0A=
=0A=
                        if (YAHOO.env.ua.ie) {=0A=
                            m_oIFrameTemplate.style.filter =3D =
"alpha(opacity=3D0)";=0A=
                            /*=0A=
                                 Need to set the "frameBorder" property =
to 0 =0A=
                                 supress the default <iframe> border in =
IE.  =0A=
                                 Setting the CSS "border" property alone =0A=
                                 doesn't supress it.=0A=
                            */=0A=
                            m_oIFrameTemplate.frameBorder =3D 0;=0A=
                        }=0A=
                        else {=0A=
                            m_oIFrameTemplate.style.opacity =3D "0";=0A=
                        }=0A=
=0A=
                        m_oIFrameTemplate.style.position =3D "absolute";=0A=
                        m_oIFrameTemplate.style.border =3D "none";=0A=
                        m_oIFrameTemplate.style.margin =3D "0";=0A=
                        m_oIFrameTemplate.style.padding =3D "0";=0A=
                        m_oIFrameTemplate.style.display =3D "none";=0A=
                    }=0A=
=0A=
                    oIFrame =3D m_oIFrameTemplate.cloneNode(false);=0A=
                    oParent =3D oElement.parentNode;=0A=
=0A=
                    var parentNode =3D oParent || document.body;=0A=
=0A=
                    this._addToParent(parentNode, oIFrame);=0A=
                    this.iframe =3D oIFrame;=0A=
                }=0A=
=0A=
                /*=0A=
                     Show the <iframe> before positioning it since the =
"setXY" =0A=
                     method of DOM requires the element be in the =
document =0A=
                     and visible.=0A=
                */=0A=
                this.showIframe();=0A=
=0A=
                /*=0A=
                     Syncronize the size and position of the <iframe> to =
that =0A=
                     of the Overlay.=0A=
                */=0A=
                this.syncIframe();=0A=
                this.stackIframe();=0A=
=0A=
                // Add event listeners to update the <iframe> when =
necessary=0A=
                if (!this._hasIframeEventListeners) {=0A=
                    this.showEvent.subscribe(this.showIframe);=0A=
                    this.hideEvent.subscribe(this.hideIframe);=0A=
                    this.changeContentEvent.subscribe(this.syncIframe);=0A=
=0A=
                    this._hasIframeEventListeners =3D true;=0A=
                }=0A=
            }=0A=
=0A=
            function onBeforeShow() {=0A=
                createIFrame.call(this);=0A=
                this.beforeShowEvent.unsubscribe(onBeforeShow);=0A=
                this._iframeDeferred =3D false;=0A=
            }=0A=
=0A=
            if (bIFrame) { // <iframe> shim is enabled=0A=
=0A=
                if (this.cfg.getProperty("visible")) {=0A=
                    createIFrame.call(this);=0A=
                } else {=0A=
                    if (!this._iframeDeferred) {=0A=
                        this.beforeShowEvent.subscribe(onBeforeShow);=0A=
                        this._iframeDeferred =3D true;=0A=
                    }=0A=
                }=0A=
=0A=
            } else {    // <iframe> shim is disabled=0A=
                this.hideIframe();=0A=
=0A=
                if (this._hasIframeEventListeners) {=0A=
                    this.showEvent.unsubscribe(this.showIframe);=0A=
                    this.hideEvent.unsubscribe(this.hideIframe);=0A=
                    this.changeContentEvent.unsubscribe(this.syncIframe);=0A=
=0A=
                    this._hasIframeEventListeners =3D false;=0A=
                }=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler fired when the "constraintoviewport" =0A=
        * property is changed.=0A=
        * @method configConstrainToViewport=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for =0A=
        * the property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configConstrainToViewport: function (type, args, obj) {=0A=
=0A=
            function constrainBeforeShow() {=0A=
                if (YAHOO.lang.isUndefined(this.cfg.getProperty("xy"))) {=0A=
                    // Set CFG XY based on DOM XY=0A=
                    this.syncPosition();=0A=
                }=0A=
                var x =3D this.cfg.getProperty("x");=0A=
                var y =3D this.cfg.getProperty("y");=0A=
=0A=
                // Account for XY being set silently (no moveTo =
fired/called)=0A=
                var cXY =3D this.getConstrainedXY(x, y);=0A=
                if (cXY[0] !=3D=3D x || cXY[1] !=3D=3D y) {=0A=
                    this.moveTo(cXY[0], cXY[1]);=0A=
                }=0A=
            }=0A=
=0A=
            var val =3D args[0];=0A=
=0A=
            if (val) {=0A=
                if (! Config.alreadySubscribed(this.beforeMoveEvent, =
this.enforceConstraints, this)) {=0A=
                    =
this.beforeMoveEvent.subscribe(this.enforceConstraints, this, true);=0A=
                }=0A=
=0A=
                if (! Config.alreadySubscribed(this.beforeShowEvent, =
constrainBeforeShow)) {=0A=
                    this.beforeShowEvent.subscribe(constrainBeforeShow);=0A=
                }=0A=
            } else {=0A=
                this.beforeShowEvent.unsubscribe(constrainBeforeShow);=0A=
                =
this.beforeMoveEvent.unsubscribe(this.enforceConstraints, this);=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler fired when the "context" property =0A=
        * is changed.=0A=
        * @method configContext=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        configContext: function (type, args, obj) {=0A=
    =0A=
            var contextArgs =3D args[0],=0A=
                contextEl,=0A=
                elementMagnetCorner,=0A=
                contextMagnetCorner;=0A=
            =0A=
            if (contextArgs) {=0A=
            =0A=
                contextEl =3D contextArgs[0];=0A=
                elementMagnetCorner =3D contextArgs[1];=0A=
                contextMagnetCorner =3D contextArgs[2];=0A=
                =0A=
                if (contextEl) {=0A=
    =0A=
                    if (typeof contextEl =3D=3D "string") {=0A=
=0A=
                        this.cfg.setProperty("context", =0A=
                            [document.getElementById(contextEl), =0A=
                                elementMagnetCorner, =
contextMagnetCorner], =0A=
                                true);=0A=
=0A=
                    }=0A=
                    =0A=
                    if (elementMagnetCorner && contextMagnetCorner) {=0A=
=0A=
                        this.align(elementMagnetCorner, =
contextMagnetCorner);=0A=
=0A=
                    }=0A=
=0A=
                }=0A=
=0A=
            }=0A=
=0A=
        },=0A=
=0A=
        // END BUILT-IN PROPERTY EVENT HANDLERS //=0A=
=0A=
        /**=0A=
        * Aligns the Overlay to its context element using the specified =
corner =0A=
        * points (represented by the constants TOP_LEFT, TOP_RIGHT, =
BOTTOM_LEFT, =0A=
        * and BOTTOM_RIGHT.=0A=
        * @method align=0A=
        * @param {String} elementAlign  The String representing the =
corner of =0A=
        * the Overlay that should be aligned to the context element=0A=
        * @param {String} contextAlign  The corner of the context =
element =0A=
        * that the elementAlign corner should stick to.=0A=
        */=0A=
        align: function (elementAlign, contextAlign) {=0A=
=0A=
            var contextArgs =3D this.cfg.getProperty("context"),=0A=
                me =3D this,=0A=
                context,=0A=
                element,=0A=
                contextRegion;=0A=
=0A=
            function doAlign(v, h) {=0A=
    =0A=
                switch (elementAlign) {=0A=
    =0A=
                case Overlay.TOP_LEFT:=0A=
                    me.moveTo(h, v);=0A=
                    break;=0A=
    =0A=
                case Overlay.TOP_RIGHT:=0A=
                    me.moveTo((h - element.offsetWidth), v);=0A=
                    break;=0A=
    =0A=
                case Overlay.BOTTOM_LEFT:=0A=
                    me.moveTo(h, (v - element.offsetHeight));=0A=
                    break;=0A=
    =0A=
                case Overlay.BOTTOM_RIGHT:=0A=
                    me.moveTo((h - element.offsetWidth), =0A=
                        (v - element.offsetHeight));=0A=
                    break;=0A=
                }=0A=
            }=0A=
    =0A=
    =0A=
            if (contextArgs) {=0A=
            =0A=
                context =3D contextArgs[0];=0A=
                element =3D this.element;=0A=
                me =3D this;=0A=
                =0A=
                if (! elementAlign) {=0A=
                    elementAlign =3D contextArgs[1];=0A=
                }=0A=
                =0A=
                if (! contextAlign) {=0A=
                    contextAlign =3D contextArgs[2];=0A=
                }=0A=
                =0A=
                if (element && context) {=0A=
                    contextRegion =3D Dom.getRegion(context);=0A=
=0A=
                    switch (contextAlign) {=0A=
    =0A=
                    case Overlay.TOP_LEFT:=0A=
                        doAlign(contextRegion.top, contextRegion.left);=0A=
                        break;=0A=
    =0A=
                    case Overlay.TOP_RIGHT:=0A=
                        doAlign(contextRegion.top, contextRegion.right);=0A=
                        break;=0A=
    =0A=
                    case Overlay.BOTTOM_LEFT:=0A=
                        doAlign(contextRegion.bottom, =
contextRegion.left);=0A=
                        break;=0A=
    =0A=
                    case Overlay.BOTTOM_RIGHT:=0A=
                        doAlign(contextRegion.bottom, =
contextRegion.right);=0A=
                        break;=0A=
                    }=0A=
    =0A=
                }=0A=
    =0A=
            }=0A=
            =0A=
        },=0A=
=0A=
        /**=0A=
        * The default event handler executed when the moveEvent is =
fired, if the =0A=
        * "constraintoviewport" is set to true.=0A=
        * @method enforceConstraints=0A=
        * @param {String} type The CustomEvent type (usually the =
property name)=0A=
        * @param {Object[]} args The CustomEvent arguments. For =
configuration =0A=
        * handlers, args[0] will equal the newly applied value for the =
property.=0A=
        * @param {Object} obj The scope object. For configuration =
handlers, =0A=
        * this will usually equal the owner.=0A=
        */=0A=
        enforceConstraints: function (type, args, obj) {=0A=
            var pos =3D args[0];=0A=
            var cXY =3D this.getConstrainedXY(pos[0], pos[1]);=0A=
            this.cfg.setProperty("x", cXY[0], true);=0A=
            this.cfg.setProperty("y", cXY[1], true);=0A=
            this.cfg.setProperty("xy", cXY, true);=0A=
        },=0A=
=0A=
        /**=0A=
         * Given x, y coordinate values, returns the calculated =
coordinates required to =0A=
         * position the Overlay if it is to be constrained to the =
viewport, based on the =0A=
         * current element size, viewport dimensions and scroll values.=0A=
         *=0A=
         * @param {Number} x The X coordinate value to be constrained=0A=
         * @param {Number} y The Y coordinate value to be constrained=0A=
         * @return {Array} The constrained x and y coordinates at index =
0 and 1 respectively;=0A=
         */=0A=
        getConstrainedXY: function(x, y) {=0A=
=0A=
            var nViewportOffset =3D Overlay.VIEWPORT_OFFSET,=0A=
                viewPortWidth =3D Dom.getViewportWidth(),=0A=
                viewPortHeight =3D Dom.getViewportHeight(),=0A=
                offsetHeight =3D this.element.offsetHeight,=0A=
                offsetWidth =3D this.element.offsetWidth,=0A=
                scrollX =3D Dom.getDocumentScrollLeft(),=0A=
                scrollY =3D Dom.getDocumentScrollTop();=0A=
=0A=
            var xNew =3D x;=0A=
            var yNew =3D y;=0A=
=0A=
            if (offsetWidth + nViewportOffset < viewPortWidth) {=0A=
=0A=
                var leftConstraint =3D scrollX + nViewportOffset;=0A=
                var rightConstraint =3D scrollX + viewPortWidth - =
offsetWidth - nViewportOffset;=0A=
=0A=
                if (x < leftConstraint) {=0A=
                    xNew =3D leftConstraint;=0A=
                } else if (x > rightConstraint) {=0A=
                    xNew =3D rightConstraint;=0A=
                }=0A=
            } else {=0A=
                xNew =3D nViewportOffset + scrollX;=0A=
            }=0A=
=0A=
            if (offsetHeight + nViewportOffset < viewPortHeight) {=0A=
=0A=
                var topConstraint =3D scrollY + nViewportOffset;=0A=
                var bottomConstraint =3D scrollY + viewPortHeight - =
offsetHeight - nViewportOffset;=0A=
=0A=
                if (y < topConstraint) {=0A=
                    yNew  =3D topConstraint;=0A=
                } else if (y  > bottomConstraint) {=0A=
                    yNew  =3D bottomConstraint;=0A=
                }=0A=
            } else {=0A=
                yNew =3D nViewportOffset + scrollY;=0A=
            }=0A=
=0A=
            return [xNew, yNew];=0A=
        },=0A=
=0A=
        /**=0A=
        * Centers the container in the viewport.=0A=
        * @method center=0A=
        */=0A=
        center: function () {=0A=
=0A=
            var nViewportOffset =3D Overlay.VIEWPORT_OFFSET,=0A=
                elementWidth =3D this.element.offsetWidth,=0A=
                elementHeight =3D this.element.offsetHeight,=0A=
                viewPortWidth =3D Dom.getViewportWidth(),=0A=
                viewPortHeight =3D Dom.getViewportHeight(),=0A=
                x,=0A=
                y;=0A=
=0A=
            if (elementWidth < viewPortWidth) {=0A=
                x =3D (viewPortWidth / 2) - (elementWidth / 2) + =
Dom.getDocumentScrollLeft();=0A=
            } else {=0A=
                x =3D nViewportOffset + Dom.getDocumentScrollLeft();=0A=
            }=0A=
=0A=
            if (elementHeight < viewPortHeight) {=0A=
                y =3D (viewPortHeight / 2) - (elementHeight / 2) + =
Dom.getDocumentScrollTop();=0A=
            } else {=0A=
                y =3D nViewportOffset + Dom.getDocumentScrollTop();=0A=
            }=0A=
=0A=
            this.cfg.setProperty("xy", [parseInt(x, 10), parseInt(y, =
10)]);=0A=
            this.cfg.refireEvent("iframe");=0A=
        },=0A=
=0A=
        /**=0A=
        * Synchronizes the Panel's "xy", "x", and "y" properties with =
the =0A=
        * Panel's position in the DOM. This is primarily used to update  =0A=
        * position information during drag & drop.=0A=
        * @method syncPosition=0A=
        */=0A=
        syncPosition: function () {=0A=
=0A=
            var pos =3D Dom.getXY(this.element);=0A=
=0A=
            this.cfg.setProperty("x", pos[0], true);=0A=
            this.cfg.setProperty("y", pos[1], true);=0A=
            this.cfg.setProperty("xy", pos, true);=0A=
=0A=
        },=0A=
=0A=
        /**=0A=
        * Event handler fired when the resize monitor element is resized.=0A=
        * @method onDomResize=0A=
        * @param {DOMEvent} e The resize DOM event=0A=
        * @param {Object} obj The scope object=0A=
        */=0A=
        onDomResize: function (e, obj) {=0A=
=0A=
            var me =3D this;=0A=
=0A=
            Overlay.superclass.onDomResize.call(this, e, obj);=0A=
=0A=
            setTimeout(function () {=0A=
                me.syncPosition();=0A=
                me.cfg.refireEvent("iframe");=0A=
                me.cfg.refireEvent("context");=0A=
            }, 0);=0A=
    =0A=
        },=0A=
=0A=
        /**=0A=
        * Places the Overlay on top of all other instances of =0A=
        * YAHOO.widget.Overlay.=0A=
        * @method bringToTop=0A=
        */=0A=
        bringToTop: function () {=0A=
=0A=
            var aOverlays =3D [],=0A=
                oElement =3D this.element;=0A=
=0A=
            function compareZIndexDesc(p_oOverlay1, p_oOverlay2) {=0A=
=0A=
                var sZIndex1 =3D Dom.getStyle(p_oOverlay1, "zIndex"),=0A=
                    sZIndex2 =3D Dom.getStyle(p_oOverlay2, "zIndex"),=0A=
=0A=
                    nZIndex1 =3D (!sZIndex1 || isNaN(sZIndex1)) ? 0 : =
parseInt(sZIndex1, 10),=0A=
                    nZIndex2 =3D (!sZIndex2 || isNaN(sZIndex2)) ? 0 : =
parseInt(sZIndex2, 10);=0A=
=0A=
                if (nZIndex1 > nZIndex2) {=0A=
                    return -1;=0A=
                } else if (nZIndex1 < nZIndex2) {=0A=
                    return 1;=0A=
                } else {=0A=
                    return 0;=0A=
                }=0A=
            }=0A=
=0A=
            function isOverlayElement(p_oElement) {=0A=
=0A=
                var oOverlay =3D Dom.hasClass(p_oElement, =
Overlay.CSS_OVERLAY),=0A=
                    Panel =3D YAHOO.widget.Panel;=0A=
=0A=
                if (oOverlay && !Dom.isAncestor(oElement, oOverlay)) {=0A=
                    if (Panel && Dom.hasClass(p_oElement, =
Panel.CSS_PANEL)) {=0A=
                        aOverlays[aOverlays.length] =3D =
p_oElement.parentNode;=0A=
                    } else {=0A=
                        aOverlays[aOverlays.length] =3D p_oElement;=0A=
                    }=0A=
                }=0A=
            }=0A=
=0A=
            Dom.getElementsBy(isOverlayElement, "DIV", document.body);=0A=
=0A=
            aOverlays.sort(compareZIndexDesc);=0A=
=0A=
            var oTopOverlay =3D aOverlays[0],=0A=
                nTopZIndex;=0A=
=0A=
            if (oTopOverlay) {=0A=
                nTopZIndex =3D Dom.getStyle(oTopOverlay, "zIndex");=0A=
=0A=
                if (!isNaN(nTopZIndex)) {=0A=
                    var bRequiresBump =3D false;=0A=
=0A=
                    if (oTopOverlay !=3D oElement) {=0A=
                        bRequiresBump =3D true;=0A=
                    } else if (aOverlays.length > 1) {=0A=
                        var nNextZIndex =3D Dom.getStyle(aOverlays[1], =
"zIndex");=0A=
                        // Don't rely on DOM order to stack if 2 =
overlays are at the same zindex.=0A=
                        if (!isNaN(nNextZIndex) && (nTopZIndex =3D=3D =
nNextZIndex)) {=0A=
                            bRequiresBump =3D true;=0A=
                        }=0A=
                    }=0A=
                    if (bRequiresBump) {=0A=
                        this.cfg.setProperty("zindex", =
(parseInt(nTopZIndex, 10) + 2));=0A=
                    }=0A=
                }=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Removes the Overlay element from the DOM and sets all child =0A=
        * elements to null.=0A=
        * @method destroy=0A=
        */=0A=
        destroy: function () {=0A=
=0A=
            if (this.iframe) {=0A=
                this.iframe.parentNode.removeChild(this.iframe);=0A=
            }=0A=
=0A=
            this.iframe =3D null;=0A=
        =0A=
            Overlay.windowResizeEvent.unsubscribe(=0A=
                this.doCenterOnDOMEvent, this);=0A=
    =0A=
            Overlay.windowScrollEvent.unsubscribe(=0A=
                this.doCenterOnDOMEvent, this);=0A=
        =0A=
            Overlay.superclass.destroy.call(this);=0A=
        },=0A=
        =0A=
        /**=0A=
        * Returns a String representation of the object.=0A=
        * @method toString=0A=
        * @return {String} The string representation of the Overlay.=0A=
        */=0A=
        toString: function () {=0A=
            return "Overlay " + this.id;=0A=
        }=0A=
=0A=
    });=0A=
}());=0A=
=0A=
(function () {=0A=
    =0A=
    /**=0A=
    * OverlayManager is used for maintaining the focus status of =0A=
    * multiple Overlays.=0A=
    * @namespace YAHOO.widget=0A=
    * @namespace YAHOO.widget=0A=
    * @class OverlayManager=0A=
    * @constructor=0A=
    * @param {Array} overlays Optional. A collection of Overlays to =
register =0A=
    * with the manager.=0A=
    * @param {Object} userConfig  The object literal representing the =
user =0A=
    * configuration of the OverlayManager=0A=
    */=0A=
    YAHOO.widget.OverlayManager =3D function (userConfig) {=0A=
        this.init(userConfig);=0A=
    };=0A=
=0A=
    var Overlay =3D YAHOO.widget.Overlay,=0A=
        Event =3D YAHOO.util.Event,=0A=
        Dom =3D YAHOO.util.Dom,=0A=
        Config =3D YAHOO.util.Config,=0A=
        CustomEvent =3D YAHOO.util.CustomEvent,=0A=
        OverlayManager =3D YAHOO.widget.OverlayManager;=0A=
    =0A=
    /**=0A=
    * The CSS class representing a focused Overlay=0A=
    * @property OverlayManager.CSS_FOCUSED=0A=
    * @static=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    OverlayManager.CSS_FOCUSED =3D "focused";=0A=
    =0A=
    OverlayManager.prototype =3D {=0A=
    =0A=
        /**=0A=
        * The class's constructor function=0A=
        * @property contructor=0A=
        * @type Function=0A=
        */=0A=
        constructor: OverlayManager,=0A=
        =0A=
        /**=0A=
        * The array of Overlays that are currently registered=0A=
        * @property overlays=0A=
        * @type YAHOO.widget.Overlay[]=0A=
        */=0A=
        overlays: null,=0A=
        =0A=
        /**=0A=
        * Initializes the default configuration of the OverlayManager=0A=
        * @method initDefaultConfig=0A=
        */=0A=
        initDefaultConfig: function () {=0A=
        =0A=
            /**=0A=
            * The collection of registered Overlays in use by =0A=
            * the OverlayManager=0A=
            * @config overlays=0A=
            * @type YAHOO.widget.Overlay[]=0A=
            * @default null=0A=
            */=0A=
            this.cfg.addProperty("overlays", { suppressEvent: true } );=0A=
        =0A=
            /**=0A=
            * The default DOM event that should be used to focus an =
Overlay=0A=
            * @config focusevent=0A=
            * @type String=0A=
            * @default "mousedown"=0A=
            */=0A=
            this.cfg.addProperty("focusevent", { value: "mousedown" } );=0A=
=0A=
        },=0A=
=0A=
        /**=0A=
        * Initializes the OverlayManager=0A=
        * @method init=0A=
        * @param {Overlay[]} overlays Optional. A collection of Overlays =
to =0A=
        * register with the manager.=0A=
        * @param {Object} userConfig  The object literal representing =
the user =0A=
        * configuration of the OverlayManager=0A=
        */=0A=
        init: function (userConfig) {=0A=
=0A=
            /**=0A=
            * The OverlayManager's Config object used for monitoring =0A=
            * configuration properties.=0A=
            * @property cfg=0A=
            * @type Config=0A=
            */=0A=
            this.cfg =3D new Config(this);=0A=
=0A=
            this.initDefaultConfig();=0A=
=0A=
            if (userConfig) {=0A=
                this.cfg.applyConfig(userConfig, true);=0A=
            }=0A=
            this.cfg.fireQueue();=0A=
=0A=
            /**=0A=
            * The currently activated Overlay=0A=
            * @property activeOverlay=0A=
            * @private=0A=
            * @type YAHOO.widget.Overlay=0A=
            */=0A=
            var activeOverlay =3D null;=0A=
=0A=
            /**=0A=
            * Returns the currently focused Overlay=0A=
            * @method getActive=0A=
            * @return {Overlay} The currently focused Overlay=0A=
            */=0A=
            this.getActive =3D function () {=0A=
                return activeOverlay;=0A=
            };=0A=
=0A=
            /**=0A=
            * Focuses the specified Overlay=0A=
            * @method focus=0A=
            * @param {Overlay} overlay The Overlay to focus=0A=
            * @param {String} overlay The id of the Overlay to focus=0A=
            */=0A=
            this.focus =3D function (overlay) {=0A=
                var o =3D this.find(overlay);=0A=
                if (o) {=0A=
                    if (activeOverlay !=3D o) {=0A=
                        if (activeOverlay) {=0A=
                            activeOverlay.blur();=0A=
                        }=0A=
                        this.bringToTop(o);=0A=
=0A=
                        activeOverlay =3D o;=0A=
=0A=
                        Dom.addClass(activeOverlay.element, =0A=
                            OverlayManager.CSS_FOCUSED);=0A=
=0A=
                        o.focusEvent.fire();=0A=
                    }=0A=
                }=0A=
            };=0A=
        =0A=
            /**=0A=
            * Removes the specified Overlay from the manager=0A=
            * @method remove=0A=
            * @param {Overlay} overlay The Overlay to remove=0A=
            * @param {String} overlay The id of the Overlay to remove=0A=
            */=0A=
            this.remove =3D function (overlay) {=0A=
                var o =3D this.find(overlay), =0A=
                        originalZ;=0A=
                if (o) {=0A=
                    if (activeOverlay =3D=3D o) {=0A=
                        activeOverlay =3D null;=0A=
                    }=0A=
=0A=
                    var bDestroyed =3D (o.element =3D=3D=3D null && =
o.cfg =3D=3D=3D null) ? true : false;=0A=
=0A=
                    if (!bDestroyed) {=0A=
                        // Set it's zindex so that it's sorted to the =
end.=0A=
                        originalZ =3D Dom.getStyle(o.element, "zIndex");=0A=
                        o.cfg.setProperty("zIndex", -1000, true);=0A=
                    }=0A=
=0A=
                    this.overlays.sort(this.compareZIndexDesc);=0A=
                    this.overlays =3D this.overlays.slice(0, =
(this.overlays.length - 1));=0A=
=0A=
                    o.hideEvent.unsubscribe(o.blur);=0A=
                    o.destroyEvent.unsubscribe(this._onOverlayDestroy, =
o);=0A=
=0A=
                    if (!bDestroyed) {=0A=
                        Event.removeListener(o.element, =0A=
                                    this.cfg.getProperty("focusevent"), =0A=
                                    this._onOverlayElementFocus);=0A=
=0A=
                        o.cfg.setProperty("zIndex", originalZ, true);=0A=
                        o.cfg.setProperty("manager", null);=0A=
                    }=0A=
=0A=
                    o.focusEvent.unsubscribeAll();=0A=
                    o.blurEvent.unsubscribeAll();=0A=
=0A=
                    o.focusEvent =3D null;=0A=
                    o.blurEvent =3D null;=0A=
=0A=
                    o.focus =3D null;=0A=
                    o.blur =3D null;=0A=
                }=0A=
            };=0A=
=0A=
            /**=0A=
            * Removes focus from all registered Overlays in the manager=0A=
            * @method blurAll=0A=
            */=0A=
            this.blurAll =3D function () {=0A=
    =0A=
                var nOverlays =3D this.overlays.length,=0A=
                    i;=0A=
=0A=
                if (nOverlays > 0) {=0A=
                    i =3D nOverlays - 1;=0A=
=0A=
                    do {=0A=
                        this.overlays[i].blur();=0A=
                    }=0A=
                    while(i--);=0A=
                }=0A=
            };=0A=
        =0A=
            this._onOverlayBlur =3D function (p_sType, p_aArgs) {=0A=
                activeOverlay =3D null;=0A=
            };=0A=
        =0A=
            var overlays =3D this.cfg.getProperty("overlays");=0A=
        =0A=
            if (! this.overlays) {=0A=
                this.overlays =3D [];=0A=
            }=0A=
        =0A=
            if (overlays) {=0A=
                this.register(overlays);=0A=
                this.overlays.sort(this.compareZIndexDesc);=0A=
            }=0A=
        },=0A=
        =0A=
        =0A=
        /**=0A=
        * @method _onOverlayElementFocus=0A=
        * @description Event handler for the DOM event that is used to =
focus =0A=
        * the Overlay instance as specified by the "focusevent" =0A=
        * configuration property.=0A=
        * @private=0A=
        * @param {Event} p_oEvent Object representing the DOM event =0A=
        * object passed back by the event utility (Event).=0A=
        */=0A=
        _onOverlayElementFocus: function (p_oEvent) {=0A=
        =0A=
            var oTarget =3D Event.getTarget(p_oEvent),=0A=
                oClose =3D this.close;=0A=
            =0A=
            if (oClose && (oTarget =3D=3D oClose || =
Dom.isAncestor(oClose, oTarget))) {=0A=
                this.blur();=0A=
            } else {=0A=
                this.focus();=0A=
            }=0A=
        },=0A=
        =0A=
        =0A=
        /**=0A=
        * @method _onOverlayDestroy=0A=
        * @description "destroy" event handler for the Overlay.=0A=
        * @private=0A=
        * @param {String} p_sType String representing the name of the =
event  =0A=
        * that was fired.=0A=
        * @param {Array} p_aArgs Array of arguments sent when the event =0A=
        * was fired.=0A=
        * @param {Overlay} p_oOverlay Object representing the menu that =0A=
        * fired the event.=0A=
        */=0A=
        _onOverlayDestroy: function (p_sType, p_aArgs, p_oOverlay) {=0A=
            this.remove(p_oOverlay);=0A=
        },=0A=
        =0A=
        /**=0A=
        * Registers an Overlay or an array of Overlays with the manager. =
Upon =0A=
        * registration, the Overlay receives functions for focus and =
blur, =0A=
        * along with CustomEvents for each.=0A=
        * @method register=0A=
        * @param {Overlay} overlay  An Overlay to register with the =
manager.=0A=
        * @param {Overlay[]} overlay  An array of Overlays to register =
with =0A=
        * the manager.=0A=
        * @return {Boolean} True if any Overlays are registered.=0A=
        */=0A=
        register: function (overlay) {=0A=
        =0A=
            var mgr =3D this,=0A=
                zIndex,=0A=
                regcount,=0A=
                i,=0A=
                nOverlays;=0A=
        =0A=
            if (overlay instanceof Overlay) {=0A=
=0A=
                overlay.cfg.addProperty("manager", { value: this } );=0A=
=0A=
                overlay.focusEvent =3D overlay.createEvent("focus");=0A=
                overlay.focusEvent.signature =3D CustomEvent.LIST;=0A=
=0A=
                overlay.blurEvent =3D overlay.createEvent("blur");=0A=
                overlay.blurEvent.signature =3D CustomEvent.LIST;=0A=
        =0A=
                overlay.focus =3D function () {=0A=
                    mgr.focus(this);=0A=
                };=0A=
        =0A=
                overlay.blur =3D function () {=0A=
                    if (mgr.getActive() =3D=3D this) {=0A=
                        Dom.removeClass(this.element, =
OverlayManager.CSS_FOCUSED);=0A=
                        this.blurEvent.fire();=0A=
                    }=0A=
                };=0A=
        =0A=
                overlay.blurEvent.subscribe(mgr._onOverlayBlur);=0A=
                overlay.hideEvent.subscribe(overlay.blur);=0A=
                =0A=
                overlay.destroyEvent.subscribe(this._onOverlayDestroy, =
overlay, this);=0A=
        =0A=
                Event.on(overlay.element, =
this.cfg.getProperty("focusevent"), =0A=
                            this._onOverlayElementFocus, null, overlay);=0A=
        =0A=
                zIndex =3D Dom.getStyle(overlay.element, "zIndex");=0A=
=0A=
                if (!isNaN(zIndex)) {=0A=
                    overlay.cfg.setProperty("zIndex", parseInt(zIndex, =
10));=0A=
                } else {=0A=
                    overlay.cfg.setProperty("zIndex", 0);=0A=
                }=0A=
=0A=
                this.overlays.push(overlay);=0A=
                this.bringToTop(overlay);=0A=
=0A=
                return true;=0A=
=0A=
            } else if (overlay instanceof Array) {=0A=
=0A=
                regcount =3D 0;=0A=
                nOverlays =3D overlay.length;=0A=
=0A=
                for (i =3D 0; i < nOverlays; i++) {=0A=
                    if (this.register(overlay[i])) {=0A=
                        regcount++;=0A=
                    }=0A=
                }=0A=
=0A=
                if (regcount > 0) {=0A=
                    return true;=0A=
                }=0A=
            } else {=0A=
                return false;=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Places the specified Overlay instance on top of all other =0A=
        * Overlay instances.=0A=
        * @method bringToTop=0A=
        * @param {YAHOO.widget.Overlay} p_oOverlay Object representing =
an =0A=
        * Overlay instance.=0A=
        * @param {String} p_oOverlay String representing the id of an =0A=
        * Overlay instance.=0A=
        */        =0A=
        bringToTop: function (p_oOverlay) {=0A=
=0A=
            var oOverlay =3D this.find(p_oOverlay),=0A=
                nTopZIndex,=0A=
                oTopOverlay,=0A=
                aOverlays;=0A=
=0A=
            if (oOverlay) {=0A=
=0A=
                aOverlays =3D this.overlays;=0A=
                aOverlays.sort(this.compareZIndexDesc);=0A=
=0A=
                oTopOverlay =3D aOverlays[0];=0A=
=0A=
                if (oTopOverlay) {=0A=
                    nTopZIndex =3D Dom.getStyle(oTopOverlay.element, =
"zIndex");=0A=
=0A=
                    if (!isNaN(nTopZIndex)) {=0A=
=0A=
                        var bRequiresBump =3D false;=0A=
=0A=
                        if (oTopOverlay !=3D=3D oOverlay) {=0A=
                            bRequiresBump =3D true;=0A=
                        } else if (aOverlays.length > 1) {=0A=
                            var nNextZIndex =3D =
Dom.getStyle(aOverlays[1].element, "zIndex");=0A=
                            // Don't rely on DOM order to stack if 2 =
overlays are at the same zindex.=0A=
                            if (!isNaN(nNextZIndex) && (nTopZIndex =
=3D=3D nNextZIndex)) {=0A=
                                bRequiresBump =3D true;=0A=
                            }=0A=
                        }=0A=
=0A=
                        if (bRequiresBump) {=0A=
                            oOverlay.cfg.setProperty("zindex", =
(parseInt(nTopZIndex, 10) + 2));=0A=
                        }=0A=
                    }=0A=
                    aOverlays.sort(this.compareZIndexDesc);=0A=
                }=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Attempts to locate an Overlay by instance or ID.=0A=
        * @method find=0A=
        * @param {Overlay} overlay  An Overlay to locate within the =
manager=0A=
        * @param {String} overlay  An Overlay id to locate within the =
manager=0A=
        * @return {Overlay} The requested Overlay, if found, or null if =
it =0A=
        * cannot be located.=0A=
        */=0A=
        find: function (overlay) {=0A=
=0A=
            var aOverlays =3D this.overlays,=0A=
                nOverlays =3D aOverlays.length,=0A=
                i;=0A=
=0A=
            if (nOverlays > 0) {=0A=
                i =3D nOverlays - 1;=0A=
=0A=
                if (overlay instanceof Overlay) {=0A=
                    do {=0A=
                        if (aOverlays[i] =3D=3D overlay) {=0A=
                            return aOverlays[i];=0A=
                        }=0A=
                    }=0A=
                    while(i--);=0A=
=0A=
                } else if (typeof overlay =3D=3D "string") {=0A=
                    do {=0A=
                        if (aOverlays[i].id =3D=3D overlay) {=0A=
                            return aOverlays[i];=0A=
                        }=0A=
                    }=0A=
                    while(i--);=0A=
                }=0A=
                return null;=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Used for sorting the manager's Overlays by z-index.=0A=
        * @method compareZIndexDesc=0A=
        * @private=0A=
        * @return {Number} 0, 1, or -1, depending on where the Overlay =
should =0A=
        * fall in the stacking order.=0A=
        */=0A=
        compareZIndexDesc: function (o1, o2) {=0A=
=0A=
            var zIndex1 =3D (o1.cfg) ? o1.cfg.getProperty("zIndex") : =
null, // Sort invalid (destroyed)=0A=
                zIndex2 =3D (o2.cfg) ? o2.cfg.getProperty("zIndex") : =
null; // objects at bottom.=0A=
=0A=
            if (zIndex1 =3D=3D=3D null && zIndex2 =3D=3D=3D null) {=0A=
                return 0;=0A=
            } else if (zIndex1 =3D=3D=3D null){=0A=
                return 1;=0A=
            } else if (zIndex2 =3D=3D=3D null) {=0A=
                return -1;=0A=
            } else if (zIndex1 > zIndex2) {=0A=
                return -1;=0A=
            } else if (zIndex1 < zIndex2) {=0A=
                return 1;=0A=
            } else {=0A=
                return 0;=0A=
            }=0A=
        },=0A=
        =0A=
        /**=0A=
        * Shows all Overlays in the manager.=0A=
        * @method showAll=0A=
        */=0A=
        showAll: function () {=0A=
        =0A=
            var aOverlays =3D this.overlays,=0A=
                nOverlays =3D aOverlays.length,=0A=
                i;=0A=
=0A=
            if (nOverlays > 0) {=0A=
                i =3D nOverlays - 1;=0A=
                do {=0A=
                    aOverlays[i].show();=0A=
                }=0A=
                while(i--);=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Hides all Overlays in the manager.=0A=
        * @method hideAll=0A=
        */=0A=
        hideAll: function () {=0A=
        =0A=
            var aOverlays =3D this.overlays,=0A=
                nOverlays =3D aOverlays.length,=0A=
                i;=0A=
=0A=
            if (nOverlays > 0) {=0A=
                i =3D nOverlays - 1;=0A=
                do {=0A=
                    aOverlays[i].hide();=0A=
                }=0A=
                while(i--);=0A=
            }=0A=
        },=0A=
=0A=
        /**=0A=
        * Returns a string representation of the object.=0A=
        * @method toString=0A=
        * @return {String} The string representation of the =
OverlayManager=0A=
        */=0A=
        toString: function () {=0A=
            return "OverlayManager";=0A=
        }=0A=
    };=0A=
=0A=
}());=0A=
=0A=
(function () {=0A=
=0A=
    /**=0A=
    * ContainerEffect encapsulates animation transitions that are =
executed when =0A=
    * an Overlay is shown or hidden.=0A=
    * @namespace YAHOO.widget=0A=
    * @class ContainerEffect=0A=
    * @constructor=0A=
    * @param {YAHOO.widget.Overlay} overlay The Overlay that the =
animation =0A=
    * should be associated with=0A=
    * @param {Object} attrIn The object literal representing the =
animation =0A=
    * arguments to be used for the animate-in transition. The arguments =
for =0A=
    * this literal are: attributes(object, see YAHOO.util.Anim for =
description), =0A=
    * duration(Number), and method(i.e. Easing.easeIn).=0A=
    * @param {Object} attrOut The object literal representing the =
animation =0A=
    * arguments to be used for the animate-out transition. The arguments =
for  =0A=
    * this literal are: attributes(object, see YAHOO.util.Anim for =
description), =0A=
    * duration(Number), and method(i.e. Easing.easeIn).=0A=
    * @param {HTMLElement} targetElement Optional. The target element =
that  =0A=
    * should be animated during the transition. Defaults to =
overlay.element.=0A=
    * @param {class} Optional. The animation class to instantiate. =
Defaults to =0A=
    * YAHOO.util.Anim. Other options include YAHOO.util.Motion.=0A=
    */=0A=
    YAHOO.widget.ContainerEffect =3D =0A=
    =0A=
        function (overlay, attrIn, attrOut, targetElement, animClass) {=0A=
    =0A=
        if (!animClass) {=0A=
            animClass =3D YAHOO.util.Anim;=0A=
        }=0A=
        =0A=
        /**=0A=
        * The overlay to animate=0A=
        * @property overlay=0A=
        * @type YAHOO.widget.Overlay=0A=
        */=0A=
        this.overlay =3D overlay;=0A=
    =0A=
        /**=0A=
        * The animation attributes to use when transitioning into view=0A=
        * @property attrIn=0A=
        * @type Object=0A=
        */=0A=
        this.attrIn =3D attrIn;=0A=
    =0A=
        /**=0A=
        * The animation attributes to use when transitioning out of view=0A=
        * @property attrOut=0A=
        * @type Object=0A=
        */=0A=
        this.attrOut =3D attrOut;=0A=
    =0A=
        /**=0A=
        * The target element to be animated=0A=
        * @property targetElement=0A=
        * @type HTMLElement=0A=
        */=0A=
        this.targetElement =3D targetElement || overlay.element;=0A=
    =0A=
        /**=0A=
        * The animation class to use for animating the overlay=0A=
        * @property animClass=0A=
        * @type class=0A=
        */=0A=
        this.animClass =3D animClass;=0A=
    =0A=
    };=0A=
=0A=
=0A=
    var Dom =3D YAHOO.util.Dom,=0A=
        CustomEvent =3D YAHOO.util.CustomEvent,=0A=
        Easing =3D YAHOO.util.Easing,=0A=
        ContainerEffect =3D YAHOO.widget.ContainerEffect;=0A=
=0A=
=0A=
    /**=0A=
    * A pre-configured ContainerEffect instance that can be used for =
fading =0A=
    * an overlay in and out.=0A=
    * @method FADE=0A=
    * @static=0A=
    * @param {YAHOO.widget.Overlay} overlay The Overlay object to animate=0A=
    * @param {Number} dur The duration of the animation=0A=
    * @return {YAHOO.widget.ContainerEffect} The configured =
ContainerEffect object=0A=
    */=0A=
    ContainerEffect.FADE =3D function (overlay, dur) {=0A=
=0A=
        var fin =3D {=0A=
            attributes: {opacity:{from:0, to:1}},=0A=
            duration: dur,=0A=
            method: Easing.easeIn=0A=
        };=0A=
=0A=
        var fout =3D {=0A=
            attributes: {opacity:{to:0}},=0A=
            duration: dur,=0A=
            method: Easing.easeOut=0A=
        };=0A=
=0A=
        var fade =3D new ContainerEffect(overlay, fin, fout, =
overlay.element);=0A=
=0A=
        fade.handleUnderlayStart =3D function() {=0A=
            var underlay =3D this.overlay.underlay;=0A=
            if (underlay && YAHOO.env.ua.ie) {=0A=
                var hasFilters =3D (underlay.filters && =
underlay.filters.length > 0);=0A=
                if(hasFilters) {=0A=
                    Dom.addClass(overlay.element, "yui-effect-fade");=0A=
                }=0A=
            }=0A=
        };=0A=
=0A=
        fade.handleUnderlayComplete =3D function() {=0A=
            var underlay =3D this.overlay.underlay;=0A=
            if (underlay && YAHOO.env.ua.ie) {=0A=
                Dom.removeClass(overlay.element, "yui-effect-fade");=0A=
            }=0A=
        };=0A=
=0A=
        fade.handleStartAnimateIn =3D function (type,args,obj) {=0A=
            Dom.addClass(obj.overlay.element, "hide-select");=0A=
=0A=
            if (!obj.overlay.underlay) {=0A=
                obj.overlay.cfg.refireEvent("underlay");=0A=
            }=0A=
=0A=
            obj.handleUnderlayStart();=0A=
=0A=
            Dom.setStyle(obj.overlay.element, "visibility", "visible");=0A=
            Dom.setStyle(obj.overlay.element, "opacity", 0);=0A=
        };=0A=
=0A=
        fade.handleCompleteAnimateIn =3D function (type,args,obj) {=0A=
            Dom.removeClass(obj.overlay.element, "hide-select");=0A=
=0A=
            if (obj.overlay.element.style.filter) {=0A=
                obj.overlay.element.style.filter =3D null;=0A=
            }=0A=
=0A=
            obj.handleUnderlayComplete();=0A=
=0A=
            obj.overlay.cfg.refireEvent("iframe");=0A=
            obj.animateInCompleteEvent.fire();=0A=
        };=0A=
=0A=
        fade.handleStartAnimateOut =3D function (type, args, obj) {=0A=
            Dom.addClass(obj.overlay.element, "hide-select");=0A=
            obj.handleUnderlayStart();=0A=
        };=0A=
=0A=
        fade.handleCompleteAnimateOut =3D  function (type, args, obj) {=0A=
            Dom.removeClass(obj.overlay.element, "hide-select");=0A=
            if (obj.overlay.element.style.filter) {=0A=
                obj.overlay.element.style.filter =3D null;=0A=
            }=0A=
            Dom.setStyle(obj.overlay.element, "visibility", "hidden");=0A=
            Dom.setStyle(obj.overlay.element, "opacity", 1);=0A=
=0A=
            obj.handleUnderlayComplete();=0A=
=0A=
            obj.overlay.cfg.refireEvent("iframe");=0A=
            obj.animateOutCompleteEvent.fire();=0A=
        };=0A=
=0A=
        fade.init();=0A=
        return fade;=0A=
    };=0A=
    =0A=
    =0A=
    /**=0A=
    * A pre-configured ContainerEffect instance that can be used for =
sliding an =0A=
    * overlay in and out.=0A=
    * @method SLIDE=0A=
    * @static=0A=
    * @param {YAHOO.widget.Overlay} overlay The Overlay object to animate=0A=
    * @param {Number} dur The duration of the animation=0A=
    * @return {YAHOO.widget.ContainerEffect} The configured =
ContainerEffect object=0A=
    */=0A=
    ContainerEffect.SLIDE =3D function (overlay, dur) {=0A=
    =0A=
        var x =3D overlay.cfg.getProperty("x") || =
Dom.getX(overlay.element),=0A=
    =0A=
            y =3D overlay.cfg.getProperty("y") || =
Dom.getY(overlay.element),=0A=
    =0A=
            clientWidth =3D Dom.getClientWidth(),=0A=
    =0A=
            offsetWidth =3D overlay.element.offsetWidth,=0A=
    =0A=
            slide =3D new ContainerEffect(overlay, =0A=
            =0A=
            { attributes: { points: { to: [x, y] } },=0A=
                duration: dur,=0A=
                method: Easing.easeIn },=0A=
    =0A=
            { attributes: { points: { to: [(clientWidth + 25), y] } },=0A=
                duration: dur,=0A=
                method: Easing.easeOut },=0A=
    =0A=
            overlay.element, YAHOO.util.Motion);=0A=
        =0A=
        =0A=
        slide.handleStartAnimateIn =3D function (type,args,obj) {=0A=
            obj.overlay.element.style.left =3D ((-25) - offsetWidth) + =
"px";=0A=
            obj.overlay.element.style.top  =3D y + "px";=0A=
        };=0A=
        =0A=
        slide.handleTweenAnimateIn =3D function (type, args, obj) {=0A=
        =0A=
            var pos =3D Dom.getXY(obj.overlay.element),=0A=
                currentX =3D pos[0],=0A=
                currentY =3D pos[1];=0A=
        =0A=
            if (Dom.getStyle(obj.overlay.element, "visibility") =3D=3D =0A=
                "hidden" && currentX < x) {=0A=
=0A=
                Dom.setStyle(obj.overlay.element, "visibility", =
"visible");=0A=
=0A=
            }=0A=
        =0A=
            obj.overlay.cfg.setProperty("xy", [currentX, currentY], =
true);=0A=
            obj.overlay.cfg.refireEvent("iframe");=0A=
        };=0A=
        =0A=
        slide.handleCompleteAnimateIn =3D function (type, args, obj) {=0A=
            obj.overlay.cfg.setProperty("xy", [x, y], true);=0A=
            obj.startX =3D x;=0A=
            obj.startY =3D y;=0A=
            obj.overlay.cfg.refireEvent("iframe");=0A=
            obj.animateInCompleteEvent.fire();=0A=
        };=0A=
        =0A=
        slide.handleStartAnimateOut =3D function (type, args, obj) {=0A=
    =0A=
            var vw =3D Dom.getViewportWidth(),=0A=
                pos =3D Dom.getXY(obj.overlay.element),=0A=
                yso =3D pos[1];=0A=
    =0A=
            obj.animOut.attributes.points.to =3D [(vw + 25), yso];=0A=
        };=0A=
        =0A=
        slide.handleTweenAnimateOut =3D function (type, args, obj) {=0A=
    =0A=
            var pos =3D Dom.getXY(obj.overlay.element),=0A=
                xto =3D pos[0],=0A=
                yto =3D pos[1];=0A=
        =0A=
            obj.overlay.cfg.setProperty("xy", [xto, yto], true);=0A=
            obj.overlay.cfg.refireEvent("iframe");=0A=
        };=0A=
        =0A=
        slide.handleCompleteAnimateOut =3D function (type, args, obj) {=0A=
            Dom.setStyle(obj.overlay.element, "visibility", "hidden");=0A=
        =0A=
            obj.overlay.cfg.setProperty("xy", [x, y]);=0A=
            obj.animateOutCompleteEvent.fire();=0A=
        };=0A=
        =0A=
        slide.init();=0A=
        return slide;=0A=
    };=0A=
    =0A=
    ContainerEffect.prototype =3D {=0A=
    =0A=
        /**=0A=
        * Initializes the animation classes and events.=0A=
        * @method init=0A=
        */=0A=
        init: function () {=0A=
=0A=
            this.beforeAnimateInEvent =3D =
this.createEvent("beforeAnimateIn");=0A=
            this.beforeAnimateInEvent.signature =3D CustomEvent.LIST;=0A=
            =0A=
            this.beforeAnimateOutEvent =3D =
this.createEvent("beforeAnimateOut");=0A=
            this.beforeAnimateOutEvent.signature =3D CustomEvent.LIST;=0A=
        =0A=
            this.animateInCompleteEvent =3D =
this.createEvent("animateInComplete");=0A=
            this.animateInCompleteEvent.signature =3D CustomEvent.LIST;=0A=
        =0A=
            this.animateOutCompleteEvent =3D =0A=
                this.createEvent("animateOutComplete");=0A=
            this.animateOutCompleteEvent.signature =3D CustomEvent.LIST;=0A=
        =0A=
            this.animIn =3D new this.animClass(this.targetElement, =0A=
                this.attrIn.attributes, this.attrIn.duration, =0A=
                this.attrIn.method);=0A=
=0A=
            this.animIn.onStart.subscribe(this.handleStartAnimateIn, =
this);=0A=
            this.animIn.onTween.subscribe(this.handleTweenAnimateIn, =
this);=0A=
=0A=
            =
this.animIn.onComplete.subscribe(this.handleCompleteAnimateIn, =0A=
                this);=0A=
        =0A=
            this.animOut =3D new this.animClass(this.targetElement, =0A=
                this.attrOut.attributes, this.attrOut.duration, =0A=
                this.attrOut.method);=0A=
=0A=
            this.animOut.onStart.subscribe(this.handleStartAnimateOut, =
this);=0A=
            this.animOut.onTween.subscribe(this.handleTweenAnimateOut, =
this);=0A=
            =
this.animOut.onComplete.subscribe(this.handleCompleteAnimateOut, =0A=
                this);=0A=
=0A=
        },=0A=
        =0A=
        /**=0A=
        * Triggers the in-animation.=0A=
        * @method animateIn=0A=
        */=0A=
        animateIn: function () {=0A=
            this.beforeAnimateInEvent.fire();=0A=
            this.animIn.animate();=0A=
        },=0A=
        =0A=
        /**=0A=
        * Triggers the out-animation.=0A=
        * @method animateOut=0A=
        */=0A=
        animateOut: function () {=0A=
            this.beforeAnimateOutEvent.fire();=0A=
            this.animOut.animate();=0A=
        },=0A=
        =0A=
        /**=0A=
        * The default onStart handler for the in-animation.=0A=
        * @method handleStartAnimateIn=0A=
        * @param {String} type The CustomEvent type=0A=
        * @param {Object[]} args The CustomEvent arguments=0A=
        * @param {Object} obj The scope object=0A=
        */=0A=
        handleStartAnimateIn: function (type, args, obj) { },=0A=
    =0A=
        /**=0A=
        * The default onTween handler for the in-animation.=0A=
        * @method handleTweenAnimateIn=0A=
        * @param {String} type The CustomEvent type=0A=
        * @param {Object[]} args The CustomEvent arguments=0A=
        * @param {Object} obj The scope object=0A=
        */=0A=
        handleTweenAnimateIn: function (type, args, obj) { },=0A=
    =0A=
        /**=0A=
        * The default onComplete handler for the in-animation.=0A=
        * @method handleCompleteAnimateIn=0A=
        * @param {String} type The CustomEvent type=0A=
        * @param {Object[]} args The CustomEvent arguments=0A=
        * @param {Object} obj The scope object=0A=
        */=0A=
        handleCompleteAnimateIn: function (type, args, obj) { },=0A=
        =0A=
        /**=0A=
        * The default onStart handler for the out-animation.=0A=
        * @method handleStartAnimateOut=0A=
        * @param {String} type The CustomEvent type=0A=
        * @param {Object[]} args The CustomEvent arguments=0A=
        * @param {Object} obj The scope object=0A=
        */=0A=
        handleStartAnimateOut: function (type, args, obj) { },=0A=
    =0A=
        /**=0A=
        * The default onTween handler for the out-animation.=0A=
        * @method handleTweenAnimateOut=0A=
        * @param {String} type The CustomEvent type=0A=
        * @param {Object[]} args The CustomEvent arguments=0A=
        * @param {Object} obj The scope object=0A=
        */=0A=
        handleTweenAnimateOut: function (type, args, obj) { },=0A=
    =0A=
        /**=0A=
        * The default onComplete handler for the out-animation.=0A=
        * @method handleCompleteAnimateOut=0A=
        * @param {String} type The CustomEvent type=0A=
        * @param {Object[]} args The CustomEvent arguments=0A=
        * @param {Object} obj The scope object=0A=
        */=0A=
        handleCompleteAnimateOut: function (type, args, obj) { },=0A=
        =0A=
        /**=0A=
        * Returns a string representation of the object.=0A=
        * @method toString=0A=
        * @return {String} The string representation of the =
ContainerEffect=0A=
        */=0A=
        toString: function () {=0A=
            var output =3D "ContainerEffect";=0A=
            if (this.overlay) {=0A=
                output +=3D " [" + this.overlay.toString() + "]";=0A=
            }=0A=
            return output;=0A=
        }=0A=
    =0A=
    };=0A=
=0A=
    YAHOO.lang.augmentProto(ContainerEffect, YAHOO.util.EventProvider);=0A=
=0A=
})();=0A=
=0A=
YAHOO.register("containercore", YAHOO.widget.Module, {version: "2.4.0", =
build: "733"});=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/yui/menu.js?1248796221

/*=0A=
Copyright (c) 2007, Yahoo! Inc. All rights reserved.=0A=
Code licensed under the BSD License:=0A=
http://developer.yahoo.net/yui/license.txt=0A=
version: 2.4.0=0A=
*/=0A=
=0A=
=0A=
/**=0A=
* @module menu=0A=
* @description <p>The Menu family of components features a collection of =0A=
* controls that make it easy to add menus to your website or web =
application.  =0A=
* With the Menu Controls you can create website fly-out menus, =
customized =0A=
* context menus, or application-style menu bars with just a small amount =
of =0A=
* scripting.</p><p>The Menu family of controls features:</p>=0A=
* <ul>=0A=
*    <li>Keyboard and mouse navigation.</li>=0A=
*    <li>A rich event model that provides access to all of a menu's =0A=
*    interesting moments.</li>=0A=
*    <li>Support for =0A=
*    <a =
href=3D"http://en.wikipedia.org/wiki/Progressive_Enhancement">Progressive=0A=
*    Enhancement</a>; Menus can be created from simple, =0A=
*    semantic markup on the page or purely through JavaScript.</li>=0A=
* </ul>=0A=
* @title Menu=0A=
* @namespace YAHOO.widget=0A=
* @requires Event, Dom, Container=0A=
*/=0A=
(function () {=0A=
=0A=
    var Dom =3D YAHOO.util.Dom,=0A=
        Event =3D YAHOO.util.Event;=0A=
=0A=
=0A=
    /**=0A=
    * Singleton that manages a collection of all menus and menu items.  =
Listens =0A=
    * for DOM events at the document level and dispatches the events to =
the =0A=
    * corresponding menu or menu item.=0A=
    *=0A=
    * @namespace YAHOO.widget=0A=
    * @class MenuManager=0A=
    * @static=0A=
    */=0A=
    YAHOO.widget.MenuManager =3D function () {=0A=
    =0A=
        // Private member variables=0A=
    =0A=
    =0A=
        // Flag indicating if the DOM event handlers have been attached=0A=
    =0A=
        var m_bInitializedEventHandlers =3D false,=0A=
    =0A=
    =0A=
        // Collection of menus=0A=
=0A=
        m_oMenus =3D {},=0A=
=0A=
=0A=
        // Collection of visible menus=0A=
    =0A=
        m_oVisibleMenus =3D {},=0A=
    =0A=
    =0A=
        //  Collection of menu items =0A=
=0A=
        m_oItems =3D {},=0A=
=0A=
=0A=
        // Map of DOM event types to their equivalent CustomEvent types=0A=
        =0A=
        m_oEventTypes =3D {=0A=
            "click": "clickEvent",=0A=
            "mousedown": "mouseDownEvent",=0A=
            "mouseup": "mouseUpEvent",=0A=
            "mouseover": "mouseOverEvent",=0A=
            "mouseout": "mouseOutEvent",=0A=
            "keydown": "keyDownEvent",=0A=
            "keyup": "keyUpEvent",=0A=
            "keypress": "keyPressEvent"=0A=
        },=0A=
    =0A=
    =0A=
        m_oFocusedMenuItem =3D null;=0A=
    =0A=
    =0A=
    =0A=
    =0A=
    =0A=
        // Private methods=0A=
    =0A=
    =0A=
        /**=0A=
        * @method getMenuRootElement=0A=
        * @description Finds the root DIV node of a menu or the root LI =
node of =0A=
        * a menu item.=0A=
        * @private=0A=
        * @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
        * level-one-html.html#ID-58190037">HTMLElement</a>} p_oElement =
Object =0A=
        * specifying an HTML element.=0A=
        */=0A=
        function getMenuRootElement(p_oElement) {=0A=
        =0A=
            var oParentNode;=0A=
    =0A=
            if (p_oElement && p_oElement.tagName) {=0A=
            =0A=
                switch (p_oElement.tagName.toUpperCase()) {=0A=
                        =0A=
                case "DIV":=0A=
    =0A=
                    oParentNode =3D p_oElement.parentNode;=0A=
    =0A=
                    // Check if the DIV is the inner "body" node of a =
menu=0A=
=0A=
                    if (=0A=
                        (=0A=
                            Dom.hasClass(p_oElement, "hd") ||=0A=
                            Dom.hasClass(p_oElement, "bd") ||=0A=
                            Dom.hasClass(p_oElement, "ft")=0A=
                        ) && =0A=
                        oParentNode && =0A=
                        oParentNode.tagName && =0A=
                        oParentNode.tagName.toUpperCase() =3D=3D "DIV") =0A=
                    {=0A=
                    =0A=
                        return oParentNode;=0A=
                    =0A=
                    }=0A=
                    else {=0A=
                    =0A=
                        return p_oElement;=0A=
                    =0A=
                    }=0A=
                =0A=
                    break;=0A=
=0A=
                case "LI":=0A=
    =0A=
                    return p_oElement;=0A=
=0A=
                default:=0A=
    =0A=
                    oParentNode =3D p_oElement.parentNode;=0A=
    =0A=
                    if (oParentNode) {=0A=
                    =0A=
                        return getMenuRootElement(oParentNode);=0A=
                    =0A=
                    }=0A=
                =0A=
                    break;=0A=
                =0A=
                }=0A=
    =0A=
            }=0A=
            =0A=
        }=0A=
    =0A=
    =0A=
    =0A=
        // Private event handlers=0A=
    =0A=
    =0A=
        /**=0A=
        * @method onDOMEvent=0A=
        * @description Generic, global event handler for all of a menu's =0A=
        * DOM-based events.  This listens for events against the =
document =0A=
        * object.  If the target of a given event is a member of a menu =
or =0A=
        * menu item's DOM, the instance's corresponding Custom Event is =
fired.=0A=
        * @private=0A=
        * @param {Event} p_oEvent Object representing the DOM event =
object  =0A=
        * passed back by the event utility (YAHOO.util.Event).=0A=
        */=0A=
        function onDOMEvent(p_oEvent) {=0A=
    =0A=
            // Get the target node of the DOM event=0A=
        =0A=
            var oTarget =3D Event.getTarget(p_oEvent),=0A=
                =0A=
            // See if the target of the event was a menu, or a menu item=0A=
    =0A=
            oElement =3D getMenuRootElement(oTarget),=0A=
            sCustomEventType,=0A=
            sTagName,=0A=
            sId,=0A=
            oMenuItem,=0A=
            oMenu; =0A=
    =0A=
    =0A=
            if (oElement) {=0A=
    =0A=
                sTagName =3D oElement.tagName.toUpperCase();=0A=
        =0A=
                if (sTagName =3D=3D "LI") {=0A=
            =0A=
                    sId =3D oElement.id;=0A=
            =0A=
                    if (sId && m_oItems[sId]) {=0A=
            =0A=
                        oMenuItem =3D m_oItems[sId];=0A=
                        oMenu =3D oMenuItem.parent;=0A=
            =0A=
                    }=0A=
                =0A=
                }=0A=
                else if (sTagName =3D=3D "DIV") {=0A=
                =0A=
                    if (oElement.id) {=0A=
                    =0A=
                        oMenu =3D m_oMenus[oElement.id];=0A=
                    =0A=
                    }=0A=
                =0A=
                }=0A=
    =0A=
            }=0A=
    =0A=
    =0A=
            if (oMenu) {=0A=
    =0A=
                sCustomEventType =3D m_oEventTypes[p_oEvent.type];=0A=
    =0A=
    =0A=
                // Fire the Custom Event that corresponds the current =
DOM event    =0A=
        =0A=
                if (oMenuItem && !oMenuItem.cfg.getProperty("disabled")) =
{=0A=
    =0A=
                    oMenuItem[sCustomEventType].fire(p_oEvent);          =
         =0A=
    =0A=
    =0A=
                    if (=0A=
                            p_oEvent.type =3D=3D "keyup" || =0A=
                            p_oEvent.type =3D=3D "mousedown") =0A=
                    {=0A=
    =0A=
                        if (m_oFocusedMenuItem !=3D oMenuItem) {=0A=
                        =0A=
                            if (m_oFocusedMenuItem) {=0A=
    =0A=
                                m_oFocusedMenuItem.blurEvent.fire();=0A=
                            =0A=
                            }=0A=
    =0A=
                            oMenuItem.focusEvent.fire();=0A=
                        =0A=
                        }=0A=
                    =0A=
                    }=0A=
    =0A=
                }=0A=
        =0A=
                oMenu[sCustomEventType].fire(p_oEvent, oMenuItem);=0A=
            =0A=
            }=0A=
            else if (p_oEvent.type =3D=3D "mousedown") {=0A=
    =0A=
                if (m_oFocusedMenuItem) {=0A=
    =0A=
                    m_oFocusedMenuItem.blurEvent.fire();=0A=
    =0A=
                    m_oFocusedMenuItem =3D null;=0A=
    =0A=
                }=0A=
    =0A=
    =0A=
                /*=0A=
                    If the target of the event wasn't a menu, hide all =0A=
                    dynamically positioned menus=0A=
                */=0A=
                =0A=
                for (var i in m_oVisibleMenus) {=0A=
        =0A=
                    if (YAHOO.lang.hasOwnProperty(m_oVisibleMenus, i)) {=0A=
        =0A=
                        oMenu =3D m_oVisibleMenus[i];=0A=
        =0A=
                        if (oMenu.cfg.getProperty("clicktohide") && =0A=
                            !(oMenu instanceof YAHOO.widget.MenuBar) && =0A=
                            oMenu.cfg.getProperty("position") =3D=3D =
"dynamic") {=0A=
        =0A=
                            oMenu.hide();=0A=
        =0A=
                        }=0A=
                        else {=0A=
    =0A=
                            oMenu.clearActiveItem(true);=0A=
        =0A=
                        }=0A=
        =0A=
                    }=0A=
        =0A=
                } =0A=
    =0A=
            }=0A=
            else if (p_oEvent.type =3D=3D "keyup") { =0A=
    =0A=
                if (m_oFocusedMenuItem) {=0A=
    =0A=
                    m_oFocusedMenuItem.blurEvent.fire();=0A=
    =0A=
                    m_oFocusedMenuItem =3D null;=0A=
    =0A=
                }=0A=
    =0A=
            }=0A=
    =0A=
        }=0A=
    =0A=
    =0A=
        /**=0A=
        * @method onMenuDestroy=0A=
        * @description "destroy" event handler for a menu.=0A=
        * @private=0A=
        * @param {String} p_sType String representing the name of the =
event =0A=
        * that was fired.=0A=
        * @param {Array} p_aArgs Array of arguments sent when the event =0A=
        * was fired.=0A=
        * @param {YAHOO.widget.Menu} p_oMenu The menu that fired the =
event.=0A=
        */=0A=
        function onMenuDestroy(p_sType, p_aArgs, p_oMenu) {=0A=
    =0A=
            if (m_oMenus[p_oMenu.id]) {=0A=
    =0A=
                this.removeMenu(p_oMenu);=0A=
    =0A=
            }=0A=
    =0A=
        }=0A=
    =0A=
    =0A=
        /**=0A=
        * @method onMenuFocus=0A=
        * @description "focus" event handler for a MenuItem instance.=0A=
        * @private=0A=
        * @param {String} p_sType String representing the name of the =
event =0A=
        * that was fired.=0A=
        * @param {Array} p_aArgs Array of arguments sent when the event =0A=
        * was fired.=0A=
        */=0A=
        function onMenuFocus(p_sType, p_aArgs) {=0A=
    =0A=
            var oItem =3D p_aArgs[0];=0A=
    =0A=
            if (oItem) {=0A=
    =0A=
                m_oFocusedMenuItem =3D oItem;=0A=
            =0A=
            }=0A=
    =0A=
        }=0A=
    =0A=
    =0A=
        /**=0A=
        * @method onMenuBlur=0A=
        * @description "blur" event handler for a MenuItem instance.=0A=
        * @private=0A=
        * @param {String} p_sType String representing the name of the =
event  =0A=
        * that was fired.=0A=
        * @param {Array} p_aArgs Array of arguments sent when the event =0A=
        * was fired.=0A=
        */=0A=
        function onMenuBlur(p_sType, p_aArgs) {=0A=
    =0A=
            m_oFocusedMenuItem =3D null;=0A=
    =0A=
        }=0A=
    =0A=
    =0A=
    =0A=
        /**=0A=
        * @method onMenuVisibleConfigChange=0A=
        * @description Event handler for when the "visible" =
configuration  =0A=
        * property of a Menu instance changes.=0A=
        * @private=0A=
        * @param {String} p_sType String representing the name of the =
event  =0A=
        * that was fired.=0A=
        * @param {Array} p_aArgs Array of arguments sent when the event =0A=
        * was fired.=0A=
        */=0A=
        function onMenuVisibleConfigChange(p_sType, p_aArgs) {=0A=
    =0A=
            var bVisible =3D p_aArgs[0],=0A=
                sId =3D this.id;=0A=
            =0A=
            if (bVisible) {=0A=
    =0A=
                m_oVisibleMenus[sId] =3D this;=0A=
                =0A=
            =0A=
            }=0A=
            else if (m_oVisibleMenus[sId]) {=0A=
            =0A=
                delete m_oVisibleMenus[sId];=0A=
                =0A=
            =0A=
            }=0A=
        =0A=
        }=0A=
    =0A=
    =0A=
        /**=0A=
        * @method onItemDestroy=0A=
        * @description "destroy" event handler for a MenuItem instance.=0A=
        * @private=0A=
        * @param {String} p_sType String representing the name of the =
event  =0A=
        * that was fired.=0A=
        * @param {Array} p_aArgs Array of arguments sent when the event =0A=
        * was fired.=0A=
        */=0A=
        function onItemDestroy(p_sType, p_aArgs) {=0A=
    =0A=
            removeItem(this);=0A=
    =0A=
        }=0A=
=0A=
    =0A=
        function removeItem(p_oMenuItem) {=0A=
=0A=
            var sId =3D p_oMenuItem.id;=0A=
    =0A=
            if (sId && m_oItems[sId]) {=0A=
    =0A=
                if (m_oFocusedMenuItem =3D=3D p_oMenuItem) {=0A=
    =0A=
                    m_oFocusedMenuItem =3D null;=0A=
    =0A=
                }=0A=
    =0A=
                delete m_oItems[sId];=0A=
                =0A=
                p_oMenuItem.destroyEvent.unsubscribe(onItemDestroy);=0A=
    =0A=
    =0A=
            }=0A=
=0A=
        }=0A=
    =0A=
    =0A=
        /**=0A=
        * @method onItemAdded=0A=
        * @description "itemadded" event handler for a Menu instance.=0A=
        * @private=0A=
        * @param {String} p_sType String representing the name of the =
event  =0A=
        * that was fired.=0A=
        * @param {Array} p_aArgs Array of arguments sent when the event =0A=
        * was fired.=0A=
        */=0A=
        function onItemAdded(p_sType, p_aArgs) {=0A=
    =0A=
            var oItem =3D p_aArgs[0],=0A=
                sId;=0A=
    =0A=
            if (oItem instanceof YAHOO.widget.MenuItem) { =0A=
    =0A=
                sId =3D oItem.id;=0A=
        =0A=
                if (!m_oItems[sId]) {=0A=
            =0A=
                    m_oItems[sId] =3D oItem;=0A=
        =0A=
                    oItem.destroyEvent.subscribe(onItemDestroy);=0A=
        =0A=
        =0A=
                }=0A=
    =0A=
            }=0A=
        =0A=
        }=0A=
    =0A=
    =0A=
        return {=0A=
    =0A=
            // Privileged methods=0A=
    =0A=
    =0A=
            /**=0A=
            * @method addMenu=0A=
            * @description Adds a menu to the collection of known menus.=0A=
            * @param {YAHOO.widget.Menu} p_oMenu Object specifying the =
Menu  =0A=
            * instance to be added.=0A=
            */=0A=
            addMenu: function (p_oMenu) {=0A=
    =0A=
                var oDoc;=0A=
    =0A=
                if (p_oMenu instanceof YAHOO.widget.Menu && p_oMenu.id =
&& =0A=
                    !m_oMenus[p_oMenu.id]) {=0A=
        =0A=
                    m_oMenus[p_oMenu.id] =3D p_oMenu;=0A=
                =0A=
            =0A=
                    if (!m_bInitializedEventHandlers) {=0A=
            =0A=
                        oDoc =3D document;=0A=
                =0A=
                        Event.on(oDoc, "mouseover", onDOMEvent, this, =
true);=0A=
                        Event.on(oDoc, "mouseout", onDOMEvent, this, =
true);=0A=
                        Event.on(oDoc, "mousedown", onDOMEvent, this, =
true);=0A=
                        Event.on(oDoc, "mouseup", onDOMEvent, this, =
true);=0A=
                        Event.on(oDoc, "click", onDOMEvent, this, true);=0A=
                        Event.on(oDoc, "keydown", onDOMEvent, this, =
true);=0A=
                        Event.on(oDoc, "keyup", onDOMEvent, this, true);=0A=
                        Event.on(oDoc, "keypress", onDOMEvent, this, =
true);=0A=
    =0A=
    =0A=
                        m_bInitializedEventHandlers =3D true;=0A=
                        =0A=
            =0A=
                    }=0A=
            =0A=
                    p_oMenu.cfg.subscribeToConfigEvent("visible", =0A=
                        onMenuVisibleConfigChange);=0A=
=0A=
                    p_oMenu.destroyEvent.subscribe(onMenuDestroy, =
p_oMenu, =0A=
                                            this);=0A=
            =0A=
                    p_oMenu.itemAddedEvent.subscribe(onItemAdded);=0A=
                    p_oMenu.focusEvent.subscribe(onMenuFocus);=0A=
                    p_oMenu.blurEvent.subscribe(onMenuBlur);=0A=
        =0A=
        =0A=
                }=0A=
        =0A=
            },=0A=
    =0A=
        =0A=
            /**=0A=
            * @method removeMenu=0A=
            * @description Removes a menu from the collection of known =
menus.=0A=
            * @param {YAHOO.widget.Menu} p_oMenu Object specifying the =
Menu  =0A=
            * instance to be removed.=0A=
            */=0A=
            removeMenu: function (p_oMenu) {=0A=
    =0A=
                var sId,=0A=
                    aItems,=0A=
                    i;=0A=
        =0A=
                if (p_oMenu) {=0A=
    =0A=
                    sId =3D p_oMenu.id;=0A=
        =0A=
                    if (m_oMenus[sId] =3D=3D p_oMenu) {=0A=
=0A=
                        // Unregister each menu item=0A=
=0A=
                        aItems =3D p_oMenu.getItems();=0A=
=0A=
                        if (aItems && aItems.length > 0) {=0A=
=0A=
                            i =3D aItems.length - 1;=0A=
=0A=
                            do {=0A=
=0A=
                                removeItem(aItems[i]);=0A=
=0A=
                            }=0A=
                            while (i--);=0A=
=0A=
                        }=0A=
=0A=
=0A=
                        // Unregister the menu=0A=
=0A=
                        delete m_oMenus[sId];=0A=
            =0A=
        =0A=
=0A=
                        /*=0A=
                             Unregister the menu from the collection of =0A=
                             visible menus=0A=
                        */=0A=
=0A=
                        if (m_oVisibleMenus[sId] =3D=3D p_oMenu) {=0A=
            =0A=
                            delete m_oVisibleMenus[sId];=0A=
                            =0A=
       =0A=
                        }=0A=
=0A=
=0A=
                        // Unsubscribe event listeners=0A=
=0A=
                        if (p_oMenu.cfg) {=0A=
=0A=
                            =
p_oMenu.cfg.unsubscribeFromConfigEvent("visible", =0A=
                                onMenuVisibleConfigChange);=0A=
                            =0A=
                        }=0A=
=0A=
                        p_oMenu.destroyEvent.unsubscribe(onMenuDestroy, =0A=
                            p_oMenu);=0A=
                =0A=
                        p_oMenu.itemAddedEvent.unsubscribe(onItemAdded);=0A=
                        p_oMenu.focusEvent.unsubscribe(onMenuFocus);=0A=
                        p_oMenu.blurEvent.unsubscribe(onMenuBlur);=0A=
=0A=
                    }=0A=
                =0A=
                }=0A=
    =0A=
            },=0A=
        =0A=
        =0A=
            /**=0A=
            * @method hideVisible=0A=
            * @description Hides all visible, dynamically positioned =
menus =0A=
            * (excluding instances of YAHOO.widget.MenuBar).=0A=
            */=0A=
            hideVisible: function () {=0A=
        =0A=
                var oMenu;=0A=
        =0A=
                for (var i in m_oVisibleMenus) {=0A=
        =0A=
                    if (YAHOO.lang.hasOwnProperty(m_oVisibleMenus, i)) {=0A=
        =0A=
                        oMenu =3D m_oVisibleMenus[i];=0A=
        =0A=
                        if (!(oMenu instanceof YAHOO.widget.MenuBar) && =0A=
                            oMenu.cfg.getProperty("position") =3D=3D =
"dynamic") {=0A=
        =0A=
                            oMenu.hide();=0A=
        =0A=
                        }=0A=
        =0A=
                    }=0A=
        =0A=
                }        =0A=
    =0A=
            },=0A=
=0A=
=0A=
            /**=0A=
            * @method getVisible=0A=
            * @description Returns a collection of all visible menus =
registered=0A=
            * with the menu manger.=0A=
            * @return {Array}=0A=
            */=0A=
            getVisible: function () {=0A=
            =0A=
                return m_oVisibleMenus;=0A=
            =0A=
            },=0A=
=0A=
    =0A=
            /**=0A=
            * @method getMenus=0A=
            * @description Returns a collection of all menus registered =
with the =0A=
            * menu manger.=0A=
            * @return {Array}=0A=
            */=0A=
            getMenus: function () {=0A=
    =0A=
                return m_oMenus;=0A=
            =0A=
            },=0A=
    =0A=
    =0A=
            /**=0A=
            * @method getMenu=0A=
            * @description Returns a menu with the specified id.=0A=
            * @param {String} p_sId String specifying the id of the =0A=
            * <code>&#60;div&#62;</code> element representing the menu to=0A=
            * be retrieved.=0A=
            * @return {YAHOO.widget.Menu}=0A=
            */=0A=
            getMenu: function (p_sId) {=0A=
    =0A=
                var oMenu =3D m_oMenus[p_sId];=0A=
        =0A=
                if (oMenu) {=0A=
                =0A=
                    return oMenu;=0A=
                =0A=
                }=0A=
            =0A=
            },=0A=
    =0A=
    =0A=
            /**=0A=
            * @method getMenuItem=0A=
            * @description Returns a menu item with the specified id.=0A=
            * @param {String} p_sId String specifying the id of the =0A=
            * <code>&#60;li&#62;</code> element representing the menu =
item to=0A=
            * be retrieved.=0A=
            * @return {YAHOO.widget.MenuItem}=0A=
            */=0A=
            getMenuItem: function (p_sId) {=0A=
    =0A=
                var oItem =3D m_oItems[p_sId];=0A=
        =0A=
                if (oItem) {=0A=
                =0A=
                    return oItem;=0A=
                =0A=
                }=0A=
            =0A=
            },=0A=
=0A=
=0A=
            /**=0A=
            * @method getMenuItemGroup=0A=
            * @description Returns an array of menu item instances whose =0A=
            * corresponding <code>&#60;li&#62;</code> elements are child =0A=
            * nodes of the <code>&#60;ul&#62;</code> element with the =0A=
            * specified id.=0A=
            * @param {String} p_sId String specifying the id of the =0A=
            * <code>&#60;ul&#62;</code> element representing the group =
of =0A=
            * menu items to be retrieved.=0A=
            * @return {Array}=0A=
            */=0A=
            getMenuItemGroup: function (p_sId) {=0A=
=0A=
                var oUL =3D Dom.get(p_sId),=0A=
                    aItems,=0A=
                    oNode,=0A=
                    oItem,=0A=
                    sId;=0A=
    =0A=
=0A=
                if (oUL && oUL.tagName && =0A=
                    oUL.tagName.toUpperCase() =3D=3D "UL") {=0A=
=0A=
                    oNode =3D oUL.firstChild;=0A=
=0A=
                    if (oNode) {=0A=
=0A=
                        aItems =3D [];=0A=
                        =0A=
                        do {=0A=
=0A=
                            sId =3D oNode.id;=0A=
=0A=
                            if (sId) {=0A=
                            =0A=
                                oItem =3D this.getMenuItem(sId);=0A=
                                =0A=
                                if (oItem) {=0A=
                                =0A=
                                    aItems[aItems.length] =3D oItem;=0A=
                                =0A=
                                }=0A=
                            =0A=
                            }=0A=
                        =0A=
                        }=0A=
                        while ((oNode =3D oNode.nextSibling));=0A=
=0A=
=0A=
                        if (aItems.length > 0) {=0A=
=0A=
                            return aItems;=0A=
                        =0A=
                        }=0A=
=0A=
                    }=0A=
                =0A=
                }=0A=
            =0A=
            },=0A=
=0A=
    =0A=
            /**=0A=
            * @method getFocusedMenuItem=0A=
            * @description Returns a reference to the menu item that =
currently =0A=
            * has focus.=0A=
            * @return {YAHOO.widget.MenuItem}=0A=
            */=0A=
            getFocusedMenuItem: function () {=0A=
    =0A=
                return m_oFocusedMenuItem;=0A=
    =0A=
            },=0A=
    =0A=
    =0A=
            /**=0A=
            * @method getFocusedMenu=0A=
            * @description Returns a reference to the menu that =
currently =0A=
            * has focus.=0A=
            * @return {YAHOO.widget.Menu}=0A=
            */=0A=
            getFocusedMenu: function () {=0A=
    =0A=
                if (m_oFocusedMenuItem) {=0A=
    =0A=
                    return (m_oFocusedMenuItem.parent.getRoot());=0A=
                =0A=
                }=0A=
    =0A=
            },=0A=
    =0A=
        =0A=
            /**=0A=
            * @method toString=0A=
            * @description Returns a string representing the menu =
manager.=0A=
            * @return {String}=0A=
            */=0A=
            toString: function () {=0A=
            =0A=
                return "MenuManager";=0A=
            =0A=
            }=0A=
    =0A=
        };=0A=
    =0A=
    }();=0A=
=0A=
})();=0A=
=0A=
=0A=
=0A=
(function () {=0A=
=0A=
=0A=
/**=0A=
* The Menu class creates a container that holds a vertical list =
representing =0A=
* a set of options or commands.  Menu is the base class for all =0A=
* menu containers. =0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;div&#62;</code> element of the menu.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;select&#62;</code> element to be used as the data source =0A=
* for the menu.=0A=
* @param {<a href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
* level-one-html.html#ID-22445964">HTMLDivElement</a>} p_oElement Object =0A=
* specifying the <code>&#60;div&#62;</code> element of the menu.=0A=
* @param {<a href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
* level-one-html.html#ID-94282980">HTMLSelectElement</a>} p_oElement =0A=
* Object specifying the <code>&#60;select&#62;</code> element to be used =
as =0A=
* the data source for the menu.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the menu. See configuration class documentation for =0A=
* more details.=0A=
* @namespace YAHOO.widget=0A=
* @class Menu=0A=
* @constructor=0A=
* @extends YAHOO.widget.Overlay=0A=
*/=0A=
YAHOO.widget.Menu =3D function (p_oElement, p_oConfig) {=0A=
=0A=
    if (p_oConfig) {=0A=
=0A=
        this.parent =3D p_oConfig.parent;=0A=
        this.lazyLoad =3D p_oConfig.lazyLoad || p_oConfig.lazyload;=0A=
        this.itemData =3D p_oConfig.itemData || p_oConfig.itemdata;=0A=
=0A=
    }=0A=
=0A=
=0A=
    YAHOO.widget.Menu.superclass.constructor.call(this, p_oElement, =
p_oConfig);=0A=
=0A=
};=0A=
=0A=
=0A=
=0A=
/**=0A=
* @method checkPosition=0A=
* @description Checks to make sure that the value of the "position" =
property =0A=
* is one of the supported strings. Returns true if the position is =
supported.=0A=
* @private=0A=
* @param {Object} p_sPosition String specifying the position of the menu.=0A=
* @return {Boolean}=0A=
*/=0A=
function checkPosition(p_sPosition) {=0A=
=0A=
    if (typeof p_sPosition =3D=3D "string") {=0A=
=0A=
        return ("dynamic,static".indexOf((p_sPosition.toLowerCase())) =
!=3D -1);=0A=
=0A=
    }=0A=
=0A=
}=0A=
=0A=
=0A=
var Dom =3D YAHOO.util.Dom,=0A=
    Event =3D YAHOO.util.Event,=0A=
    Module =3D YAHOO.widget.Module,=0A=
    Overlay =3D YAHOO.widget.Overlay,=0A=
    Menu =3D YAHOO.widget.Menu,=0A=
    MenuManager =3D YAHOO.widget.MenuManager,=0A=
    CustomEvent =3D YAHOO.util.CustomEvent,=0A=
    Lang =3D YAHOO.lang,=0A=
    UA =3D YAHOO.env.ua,=0A=
    =0A=
    m_oShadowTemplate,=0A=
=0A=
    /**=0A=
    * Constant representing the name of the Menu's events=0A=
    * @property EVENT_TYPES=0A=
    * @private=0A=
    * @final=0A=
    * @type Object=0A=
    */=0A=
    EVENT_TYPES =3D {=0A=
    =0A=
        "MOUSE_OVER": "mouseover",=0A=
        "MOUSE_OUT": "mouseout",=0A=
        "MOUSE_DOWN": "mousedown",=0A=
        "MOUSE_UP": "mouseup",=0A=
        "CLICK": "click",=0A=
        "KEY_PRESS": "keypress",=0A=
        "KEY_DOWN": "keydown",=0A=
        "KEY_UP": "keyup",=0A=
        "FOCUS": "focus",=0A=
        "BLUR": "blur",=0A=
        "ITEM_ADDED": "itemAdded",=0A=
        "ITEM_REMOVED": "itemRemoved"=0A=
    =0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * Constant representing the Menu's configuration properties=0A=
    * @property DEFAULT_CONFIG=0A=
    * @private=0A=
    * @final=0A=
    * @type Object=0A=
    */=0A=
    DEFAULT_CONFIG =3D {=0A=
=0A=
        "VISIBLE": { =0A=
            key: "visible", =0A=
            value: false, =0A=
            validator: Lang.isBoolean=0A=
        }, =0A=
    =0A=
        "CONSTRAIN_TO_VIEWPORT": {=0A=
            key: "constraintoviewport", =0A=
            value: true, =0A=
            validator: Lang.isBoolean, =0A=
            supercedes: ["iframe","x","y","xy"]=0A=
        }, =0A=
    =0A=
        "POSITION": { =0A=
            key: "position", =0A=
            value: "dynamic", =0A=
            validator: checkPosition, =0A=
            supercedes: ["visible", "iframe"]=0A=
        }, =0A=
    =0A=
        "SUBMENU_ALIGNMENT": { =0A=
            key: "submenualignment", =0A=
            value: ["tl","tr"],=0A=
            suppressEvent: true=0A=
        },=0A=
    =0A=
        "AUTO_SUBMENU_DISPLAY": { =0A=
            key: "autosubmenudisplay", =0A=
            value: true, =0A=
            validator: Lang.isBoolean,=0A=
            suppressEvent: true=0A=
        }, =0A=
    =0A=
        "SHOW_DELAY": { =0A=
            key: "showdelay", =0A=
            value: 250, =0A=
            validator: Lang.isNumber, =0A=
            suppressEvent: true=0A=
        }, =0A=
    =0A=
        "HIDE_DELAY": { =0A=
            key: "hidedelay", =0A=
            value: 0, =0A=
            validator: Lang.isNumber, =0A=
            suppressEvent: true=0A=
        }, =0A=
    =0A=
        "SUBMENU_HIDE_DELAY": { =0A=
            key: "submenuhidedelay", =0A=
            value: 250, =0A=
            validator: Lang.isNumber,=0A=
            suppressEvent: true=0A=
        }, =0A=
    =0A=
        "CLICK_TO_HIDE": { =0A=
            key: "clicktohide", =0A=
            value: true, =0A=
            validator: Lang.isBoolean,=0A=
            suppressEvent: true=0A=
        },=0A=
    =0A=
        "CONTAINER": { =0A=
            key: "container",=0A=
            suppressEvent: true=0A=
        }, =0A=
=0A=
        "SCROLL_INCREMENT": { =0A=
            key: "scrollincrement", =0A=
            value: 1, =0A=
            validator: Lang.isNumber,=0A=
            supercedes: ["maxheight"],=0A=
            suppressEvent: true=0A=
        },=0A=
=0A=
        "MIN_SCROLL_HEIGHT": { =0A=
            key: "minscrollheight", =0A=
            value: 90, =0A=
            validator: Lang.isNumber,=0A=
            supercedes: ["maxheight"],=0A=
            suppressEvent: true=0A=
        },    =0A=
    =0A=
        "MAX_HEIGHT": { =0A=
            key: "maxheight", =0A=
            value: 0, =0A=
            validator: Lang.isNumber,=0A=
            supercedes: ["iframe"],=0A=
            suppressEvent: true=0A=
        }, =0A=
    =0A=
        "CLASS_NAME": { =0A=
            key: "classname", =0A=
            value: null, =0A=
            validator: Lang.isString,=0A=
            suppressEvent: true=0A=
        }, =0A=
    =0A=
        "DISABLED": { =0A=
            key: "disabled", =0A=
            value: false, =0A=
            validator: Lang.isBoolean,=0A=
            suppressEvent: true=0A=
        }=0A=
    =0A=
    };=0A=
=0A=
=0A=
=0A=
YAHOO.lang.extend(Menu, Overlay, {=0A=
=0A=
=0A=
// Constants=0A=
=0A=
=0A=
/**=0A=
* @property CSS_CLASS_NAME=0A=
* @description String representing the CSS class(es) to be applied to =
the =0A=
* menu's <code>&#60;div&#62;</code> element.=0A=
* @default "yuimenu"=0A=
* @final=0A=
* @type String=0A=
*/=0A=
CSS_CLASS_NAME: "yuimenu",=0A=
=0A=
=0A=
/**=0A=
* @property ITEM_TYPE=0A=
* @description Object representing the type of menu item to instantiate =
and =0A=
* add when parsing the child nodes (either <code>&#60;li&#62;</code> =
element, =0A=
* <code>&#60;optgroup&#62;</code> element or =
<code>&#60;option&#62;</code>) =0A=
* of the menu's source HTML element.=0A=
* @default YAHOO.widget.MenuItem=0A=
* @final=0A=
* @type YAHOO.widget.MenuItem=0A=
*/=0A=
ITEM_TYPE: null,=0A=
=0A=
=0A=
/**=0A=
* @property GROUP_TITLE_TAG_NAME=0A=
* @description String representing the tagname of the HTML element used =
to =0A=
* title the menu's item groups.=0A=
* @default H6=0A=
* @final=0A=
* @type String=0A=
*/=0A=
GROUP_TITLE_TAG_NAME: "h6",=0A=
=0A=
=0A=
/**=0A=
* @property OFF_SCREEN_POSITION=0A=
* @description Array representing the default x and y position that a =
menu =0A=
* should have when it is positioned outside the viewport by the =0A=
* "poistionOffScreen" method.=0A=
* @default [-10000, -10000]=0A=
* @final=0A=
* @type Array=0A=
*/=0A=
OFF_SCREEN_POSITION: [-10000, -10000],=0A=
=0A=
=0A=
// Private properties=0A=
=0A=
=0A=
/** =0A=
* @property _nHideDelayId=0A=
* @description Number representing the time-out setting used to cancel =
the =0A=
* hiding of a menu.=0A=
* @default null=0A=
* @private=0A=
* @type Number=0A=
*/=0A=
_nHideDelayId: null,=0A=
=0A=
=0A=
/** =0A=
* @property _nShowDelayId=0A=
* @description Number representing the time-out setting used to cancel =
the =0A=
* showing of a menu.=0A=
* @default null=0A=
* @private=0A=
* @type Number=0A=
*/=0A=
_nShowDelayId: null,=0A=
=0A=
=0A=
/** =0A=
* @property _nSubmenuHideDelayId=0A=
* @description Number representing the time-out setting used to cancel =
the =0A=
* hiding of a submenu.=0A=
* @default null=0A=
* @private=0A=
* @type Number=0A=
*/=0A=
_nSubmenuHideDelayId: null,=0A=
=0A=
=0A=
/** =0A=
* @property _nBodyScrollId=0A=
* @description Number representing the time-out setting used to cancel =
the =0A=
* scrolling of the menu's body element.=0A=
* @default null=0A=
* @private=0A=
* @type Number=0A=
*/=0A=
_nBodyScrollId: null,=0A=
=0A=
=0A=
/** =0A=
* @property _bHideDelayEventHandlersAssigned=0A=
* @description Boolean indicating if the "mouseover" and "mouseout" =
event =0A=
* handlers used for hiding the menu via a call to "window.setTimeout" =
have =0A=
* already been assigned.=0A=
* @default false=0A=
* @private=0A=
* @type Boolean=0A=
*/=0A=
_bHideDelayEventHandlersAssigned: false,=0A=
=0A=
=0A=
/**=0A=
* @property _bHandledMouseOverEvent=0A=
* @description Boolean indicating the current state of the menu's =0A=
* "mouseover" event.=0A=
* @default false=0A=
* @private=0A=
* @type Boolean=0A=
*/=0A=
_bHandledMouseOverEvent: false,=0A=
=0A=
=0A=
/**=0A=
* @property _bHandledMouseOutEvent=0A=
* @description Boolean indicating the current state of the menu's=0A=
* "mouseout" event.=0A=
* @default false=0A=
* @private=0A=
* @type Boolean=0A=
*/=0A=
_bHandledMouseOutEvent: false,=0A=
=0A=
=0A=
/**=0A=
* @property _aGroupTitleElements=0A=
* @description Array of HTML element used to title groups of menu items.=0A=
* @default []=0A=
* @private=0A=
* @type Array=0A=
*/=0A=
_aGroupTitleElements: null,=0A=
=0A=
=0A=
/**=0A=
* @property _aItemGroups=0A=
* @description Multi-dimensional Array representing the menu items as =
they=0A=
* are grouped in the menu.=0A=
* @default []=0A=
* @private=0A=
* @type Array=0A=
*/=0A=
_aItemGroups: null,=0A=
=0A=
=0A=
/**=0A=
* @property _aListElements=0A=
* @description Array of <code>&#60;ul&#62;</code> elements, each of =
which is =0A=
* the parent node for each item's <code>&#60;li&#62;</code> element.=0A=
* @default []=0A=
* @private=0A=
* @type Array=0A=
*/=0A=
_aListElements: null,=0A=
=0A=
=0A=
/**=0A=
* @property _nCurrentMouseX=0A=
* @description The current x coordinate of the mouse inside the area of =0A=
* the menu.=0A=
* @default 0=0A=
* @private=0A=
* @type Number=0A=
*/=0A=
_nCurrentMouseX: 0,=0A=
=0A=
=0A=
/**=0A=
* @property _bStopMouseEventHandlers=0A=
* @description Stops "mouseover," "mouseout," and "mousemove" event =
handlers =0A=
* from executing.=0A=
* @default false=0A=
* @private=0A=
* @type Boolean=0A=
*/=0A=
_bStopMouseEventHandlers: false,=0A=
=0A=
=0A=
/**=0A=
* @property _sClassName=0A=
* @description The current value of the "classname" configuration =
attribute.=0A=
* @default null=0A=
* @private=0A=
* @type String=0A=
*/=0A=
_sClassName: null,=0A=
=0A=
=0A=
=0A=
// Public properties=0A=
=0A=
=0A=
/**=0A=
* @property lazyLoad=0A=
* @description Boolean indicating if the menu's "lazy load" feature is =0A=
* enabled.  If set to "true," initialization and rendering of the menu's =0A=
* items will be deferred until the first time it is made visible.  This =0A=
* property should be set via the constructor using the configuration =0A=
* object literal.=0A=
* @default false=0A=
* @type Boolean=0A=
*/=0A=
lazyLoad: false,=0A=
=0A=
=0A=
/**=0A=
* @property itemData=0A=
* @description Array of items to be added to the menu.  The array can =
contain =0A=
* strings representing the text for each item to be created, object =
literals =0A=
* representing the menu item configuration properties, or MenuItem =
instances.  =0A=
* This property should be set via the constructor using the =
configuration =0A=
* object literal.=0A=
* @default null=0A=
* @type Array=0A=
*/=0A=
itemData: null,=0A=
=0A=
=0A=
/**=0A=
* @property activeItem=0A=
* @description Object reference to the item in the menu that has is =
selected.=0A=
* @default null=0A=
* @type YAHOO.widget.MenuItem=0A=
*/=0A=
activeItem: null,=0A=
=0A=
=0A=
/**=0A=
* @property parent=0A=
* @description Object reference to the menu's parent menu or menu item.  =0A=
* This property can be set via the constructor using the configuration =0A=
* object literal.=0A=
* @default null=0A=
* @type YAHOO.widget.MenuItem=0A=
*/=0A=
parent: null,=0A=
=0A=
=0A=
/**=0A=
* @property srcElement=0A=
* @description Object reference to the HTML element (either =0A=
* <code>&#60;select&#62;</code> or <code>&#60;div&#62;</code>) used to =0A=
* create the menu.=0A=
* @default null=0A=
* @type <a href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
* level-one-html.html#ID-94282980">HTMLSelectElement</a>|<a =0A=
* =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-html.=0A=
* html#ID-22445964">HTMLDivElement</a>=0A=
*/=0A=
srcElement: null,=0A=
=0A=
=0A=
=0A=
// Events=0A=
=0A=
=0A=
/**=0A=
* @event mouseOverEvent=0A=
* @description Fires when the mouse has entered the menu.  Passes back =0A=
* the DOM Event object as an argument.=0A=
*/=0A=
mouseOverEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event mouseOutEvent=0A=
* @description Fires when the mouse has left the menu.  Passes back the =
DOM =0A=
* Event object as an argument.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
mouseOutEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event mouseDownEvent=0A=
* @description Fires when the user mouses down on the menu.  Passes back =
the =0A=
* DOM Event object as an argument.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
mouseDownEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event mouseUpEvent=0A=
* @description Fires when the user releases a mouse button while the =
mouse is =0A=
* over the menu.  Passes back the DOM Event object as an argument.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
mouseUpEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event clickEvent=0A=
* @description Fires when the user clicks the on the menu.  Passes back =
the =0A=
* DOM Event object as an argument.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
clickEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event keyPressEvent=0A=
* @description Fires when the user presses an alphanumeric key when one =
of the=0A=
* menu's items has focus.  Passes back the DOM Event object as an =
argument.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
keyPressEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event keyDownEvent=0A=
* @description Fires when the user presses a key when one of the menu's =
items =0A=
* has focus.  Passes back the DOM Event object as an argument.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
keyDownEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event keyUpEvent=0A=
* @description Fires when the user releases a key when one of the menu's =
items =0A=
* has focus.  Passes back the DOM Event object as an argument.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
keyUpEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event itemAddedEvent=0A=
* @description Fires when an item is added to the menu.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
itemAddedEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @event itemRemovedEvent=0A=
* @description Fires when an item is removed to the menu.=0A=
* @type YAHOO.util.CustomEvent=0A=
*/=0A=
itemRemovedEvent: null,=0A=
=0A=
=0A=
/**=0A=
* @method init=0A=
* @description The Menu class's initialization method. This method is =0A=
* automatically called by the constructor, and sets up all DOM =
references =0A=
* for pre-existing markup, and creates required markup if it is not =0A=
* already present.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;div&#62;</code> element of the menu.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;select&#62;</code> element to be used as the data source =0A=
* for the menu.=0A=
* @param {<a href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
* level-one-html.html#ID-22445964">HTMLDivElement</a>} p_oElement Object =0A=
* specifying the <code>&#60;div&#62;</code> element of the menu.=0A=
* @param {<a href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
* level-one-html.html#ID-94282980">HTMLSelectElement</a>} p_oElement =0A=
* Object specifying the <code>&#60;select&#62;</code> element to be used =
as =0A=
* the data source for the menu.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the menu. See configuration class documentation for =0A=
* more details.=0A=
*/=0A=
init: function (p_oElement, p_oConfig) {=0A=
=0A=
    this._aItemGroups =3D [];=0A=
    this._aListElements =3D [];=0A=
    this._aGroupTitleElements =3D [];=0A=
=0A=
    if (!this.ITEM_TYPE) {=0A=
=0A=
        this.ITEM_TYPE =3D YAHOO.widget.MenuItem;=0A=
=0A=
    }=0A=
=0A=
=0A=
    var oElement;=0A=
=0A=
    if (typeof p_oElement =3D=3D "string") {=0A=
=0A=
        oElement =3D document.getElementById(p_oElement);=0A=
=0A=
    }=0A=
    else if (p_oElement.tagName) {=0A=
=0A=
        oElement =3D p_oElement;=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (oElement && oElement.tagName) {=0A=
=0A=
        switch(oElement.tagName.toUpperCase()) {=0A=
    =0A=
            case "DIV":=0A=
=0A=
                this.srcElement =3D oElement;=0A=
=0A=
                if (!oElement.id) {=0A=
=0A=
                    oElement.setAttribute("id", Dom.generateId());=0A=
=0A=
                }=0A=
=0A=
=0A=
                /* =0A=
                    Note: we don't pass the user config in here yet =0A=
                    because we only want it executed once, at the lowest =0A=
                    subclass level.=0A=
                */ =0A=
            =0A=
                Menu.superclass.init.call(this, oElement);=0A=
=0A=
                this.beforeInitEvent.fire(Menu);=0A=
=0A=
=0A=
    =0A=
            break;=0A=
    =0A=
            case "SELECT":=0A=
    =0A=
                this.srcElement =3D oElement;=0A=
=0A=
    =0A=
                /*=0A=
                    The source element is not something that we can use =0A=
                    outright, so we need to create a new Overlay=0A=
=0A=
                    Note: we don't pass the user config in here yet =0A=
                    because we only want it executed once, at the lowest =0A=
                    subclass level.=0A=
                */ =0A=
=0A=
                Menu.superclass.init.call(this, Dom.generateId());=0A=
=0A=
                this.beforeInitEvent.fire(Menu);=0A=
=0A=
=0A=
=0A=
            break;=0A=
=0A=
        }=0A=
=0A=
    }=0A=
    else {=0A=
=0A=
        /* =0A=
            Note: we don't pass the user config in here yet =0A=
            because we only want it executed once, at the lowest =0A=
            subclass level.=0A=
        */ =0A=
    =0A=
        Menu.superclass.init.call(this, p_oElement);=0A=
=0A=
        this.beforeInitEvent.fire(Menu);=0A=
=0A=
=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (this.element) {=0A=
=0A=
        Dom.addClass(this.element, this.CSS_CLASS_NAME);=0A=
=0A=
=0A=
        // Subscribe to Custom Events=0A=
=0A=
        this.initEvent.subscribe(this._onInit);=0A=
        this.beforeRenderEvent.subscribe(this._onBeforeRender);=0A=
        this.renderEvent.subscribe(this._onRender);=0A=
        this.renderEvent.subscribe(this.onRender);=0A=
        this.beforeShowEvent.subscribe(this._onBeforeShow);=0A=
        this.hideEvent.subscribe(this.positionOffScreen);=0A=
        this.showEvent.subscribe(this._onShow);=0A=
        this.beforeHideEvent.subscribe(this._onBeforeHide);=0A=
        this.mouseOverEvent.subscribe(this._onMouseOver);=0A=
        this.mouseOutEvent.subscribe(this._onMouseOut);=0A=
        this.clickEvent.subscribe(this._onClick);=0A=
        this.keyDownEvent.subscribe(this._onKeyDown);=0A=
        this.keyPressEvent.subscribe(this._onKeyPress);=0A=
        =0A=
=0A=
        if (UA.gecko || UA.webkit) {=0A=
=0A=
            this.cfg.subscribeToConfigEvent("y", this._onYChange);=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (p_oConfig) {=0A=
    =0A=
            this.cfg.applyConfig(p_oConfig, true);=0A=
    =0A=
        }=0A=
=0A=
=0A=
        // Register the Menu instance with the MenuManager=0A=
=0A=
        MenuManager.addMenu(this);=0A=
        =0A=
=0A=
        this.initEvent.fire(Menu);=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Private methods=0A=
=0A=
=0A=
/**=0A=
* @method _initSubTree=0A=
* @description Iterates the childNodes of the source element to find =
nodes =0A=
* used to instantiate menu and menu items.=0A=
* @private=0A=
*/=0A=
_initSubTree: function () {=0A=
=0A=
    var oSrcElement =3D this.srcElement,=0A=
        sSrcElementTagName,=0A=
        nGroup,=0A=
        sGroupTitleTagName,=0A=
        oNode,=0A=
        aListElements,=0A=
        nListElements,=0A=
        i;=0A=
=0A=
=0A=
    if (oSrcElement) {=0A=
    =0A=
        sSrcElementTagName =3D =0A=
            (oSrcElement.tagName && oSrcElement.tagName.toUpperCase());=0A=
=0A=
=0A=
        if (sSrcElementTagName =3D=3D "DIV") {=0A=
    =0A=
            //  Populate the collection of item groups and item group =
titles=0A=
    =0A=
            oNode =3D this.body.firstChild;=0A=
    =0A=
=0A=
            if (oNode) {=0A=
    =0A=
                nGroup =3D 0;=0A=
                sGroupTitleTagName =3D =
this.GROUP_TITLE_TAG_NAME.toUpperCase();=0A=
        =0A=
                do {=0A=
        =0A=
=0A=
                    if (oNode && oNode.tagName) {=0A=
        =0A=
                        switch (oNode.tagName.toUpperCase()) {=0A=
        =0A=
                            case sGroupTitleTagName:=0A=
                            =0A=
                                this._aGroupTitleElements[nGroup] =3D =
oNode;=0A=
        =0A=
                            break;=0A=
        =0A=
                            case "UL":=0A=
        =0A=
                                this._aListElements[nGroup] =3D oNode;=0A=
                                this._aItemGroups[nGroup] =3D [];=0A=
                                nGroup++;=0A=
        =0A=
                            break;=0A=
        =0A=
                        }=0A=
                    =0A=
                    }=0A=
        =0A=
                }=0A=
                while ((oNode =3D oNode.nextSibling));=0A=
        =0A=
        =0A=
                /*=0A=
                    Apply the "first-of-type" class to the first UL to =
mimic =0A=
                    the "first-of-type" CSS3 psuedo class.=0A=
                */=0A=
        =0A=
                if (this._aListElements[0]) {=0A=
        =0A=
                    Dom.addClass(this._aListElements[0], =
"first-of-type");=0A=
        =0A=
                }=0A=
            =0A=
            }=0A=
    =0A=
        }=0A=
    =0A=
    =0A=
        oNode =3D null;=0A=
    =0A=
    =0A=
=0A=
        if (sSrcElementTagName) {=0A=
    =0A=
            switch (sSrcElementTagName) {=0A=
        =0A=
                case "DIV":=0A=
=0A=
                    aListElements =3D this._aListElements;=0A=
                    nListElements =3D aListElements.length;=0A=
        =0A=
                    if (nListElements > 0) {=0A=
        =0A=
        =0A=
                        i =3D nListElements - 1;=0A=
        =0A=
                        do {=0A=
        =0A=
                            oNode =3D aListElements[i].firstChild;=0A=
            =0A=
                            if (oNode) {=0A=
=0A=
            =0A=
                                do {=0A=
                =0A=
                                    if (oNode && oNode.tagName && =0A=
                                        oNode.tagName.toUpperCase() =
=3D=3D "LI") {=0A=
                =0A=
        =0A=
                                        this.addItem(new =
this.ITEM_TYPE(oNode, =0A=
                                                    { parent: this }), =
i);=0A=
            =0A=
                                    }=0A=
                        =0A=
                                }=0A=
                                while ((oNode =3D oNode.nextSibling));=0A=
                            =0A=
                            }=0A=
                    =0A=
                        }=0A=
                        while (i--);=0A=
        =0A=
                    }=0A=
        =0A=
                break;=0A=
        =0A=
                case "SELECT":=0A=
        =0A=
        =0A=
                    oNode =3D oSrcElement.firstChild;=0A=
        =0A=
                    do {=0A=
        =0A=
                        if (oNode && oNode.tagName) {=0A=
                        =0A=
                            switch (oNode.tagName.toUpperCase()) {=0A=
            =0A=
                                case "OPTGROUP":=0A=
                                case "OPTION":=0A=
            =0A=
            =0A=
                                    this.addItem(=0A=
                                            new this.ITEM_TYPE(=0A=
                                                    oNode, =0A=
                                                    { parent: this }=0A=
                                                )=0A=
                                            );=0A=
            =0A=
                                break;=0A=
            =0A=
                            }=0A=
    =0A=
                        }=0A=
        =0A=
                    }=0A=
                    while ((oNode =3D oNode.nextSibling));=0A=
        =0A=
                break;=0A=
        =0A=
            }=0A=
    =0A=
        }    =0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _getFirstEnabledItem=0A=
* @description Returns the first enabled item in the menu.=0A=
* @return {YAHOO.widget.MenuItem}=0A=
* @private=0A=
*/=0A=
_getFirstEnabledItem: function () {=0A=
=0A=
    var aItems =3D this.getItems(),=0A=
        nItems =3D aItems.length,=0A=
        oItem;=0A=
    =0A=
    for(var i=3D0; i<nItems; i++) {=0A=
=0A=
        oItem =3D aItems[i];=0A=
=0A=
        if (oItem && !oItem.cfg.getProperty("disabled") && =0A=
            oItem.element.style.display !=3D "none") {=0A=
=0A=
            return oItem;=0A=
=0A=
        }=0A=
    =0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _addItemToGroup=0A=
* @description Adds a menu item to a group.=0A=
* @private=0A=
* @param {Number} p_nGroupIndex Number indicating the group to which the =0A=
* item belongs.=0A=
* @param {YAHOO.widget.MenuItem} p_oItem Object reference for the =
MenuItem =0A=
* instance to be added to the menu.=0A=
* @param {String} p_oItem String specifying the text of the item to be =
added =0A=
* to the menu.=0A=
* @param {Object} p_oItem Object literal containing a set of menu item =0A=
* configuration properties.=0A=
* @param {Number} p_nItemIndex Optional. Number indicating the index at =0A=
* which the menu item should be added.=0A=
* @return {YAHOO.widget.MenuItem}=0A=
*/=0A=
_addItemToGroup: function (p_nGroupIndex, p_oItem, p_nItemIndex) {=0A=
=0A=
    var oItem,=0A=
        nGroupIndex,=0A=
        aGroup,=0A=
        oGroupItem,=0A=
        bAppend,=0A=
        oNextItemSibling,=0A=
        nItemIndex;=0A=
=0A=
    function getNextItemSibling(p_aArray, p_nStartIndex) {=0A=
=0A=
        return (p_aArray[p_nStartIndex] || getNextItemSibling(p_aArray, =0A=
                (p_nStartIndex+1)));=0A=
=0A=
    }=0A=
=0A=
    if (p_oItem instanceof this.ITEM_TYPE) {=0A=
=0A=
        oItem =3D p_oItem;=0A=
        oItem.parent =3D this;=0A=
=0A=
    }=0A=
    else if (typeof p_oItem =3D=3D "string") {=0A=
=0A=
        oItem =3D new this.ITEM_TYPE(p_oItem, { parent: this });=0A=
    =0A=
    }=0A=
    else if (typeof p_oItem =3D=3D "object") {=0A=
=0A=
        p_oItem.parent =3D this;=0A=
=0A=
        oItem =3D new this.ITEM_TYPE(p_oItem.text, p_oItem);=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (oItem) {=0A=
=0A=
        if (oItem.cfg.getProperty("selected")) {=0A=
=0A=
            this.activeItem =3D oItem;=0A=
        =0A=
        }=0A=
=0A=
=0A=
        nGroupIndex =3D typeof p_nGroupIndex =3D=3D "number" ? =
p_nGroupIndex : 0;=0A=
        aGroup =3D this._getItemGroup(nGroupIndex);=0A=
=0A=
=0A=
=0A=
        if (!aGroup) {=0A=
=0A=
            aGroup =3D this._createItemGroup(nGroupIndex);=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (typeof p_nItemIndex =3D=3D "number") {=0A=
=0A=
            bAppend =3D (p_nItemIndex >=3D aGroup.length);            =0A=
=0A=
=0A=
            if (aGroup[p_nItemIndex]) {=0A=
    =0A=
                aGroup.splice(p_nItemIndex, 0, oItem);=0A=
    =0A=
            }=0A=
            else {=0A=
    =0A=
                aGroup[p_nItemIndex] =3D oItem;=0A=
    =0A=
            }=0A=
=0A=
=0A=
            oGroupItem =3D aGroup[p_nItemIndex];=0A=
=0A=
            if (oGroupItem) {=0A=
=0A=
                if (bAppend && (!oGroupItem.element.parentNode || =0A=
                        oGroupItem.element.parentNode.nodeType =3D=3D =
11)) {=0A=
        =0A=
                    this._aListElements[nGroupIndex].appendChild(=0A=
                        oGroupItem.element);=0A=
    =0A=
                }=0A=
                else {=0A=
    =0A=
                    oNextItemSibling =3D getNextItemSibling(aGroup, =0A=
                        (p_nItemIndex+1));=0A=
    =0A=
                    if (oNextItemSibling && =
(!oGroupItem.element.parentNode || =0A=
                            oGroupItem.element.parentNode.nodeType =
=3D=3D 11)) {=0A=
            =0A=
                        this._aListElements[nGroupIndex].insertBefore(=0A=
                                oGroupItem.element, =0A=
                                oNextItemSibling.element);=0A=
        =0A=
                    }=0A=
    =0A=
                }=0A=
    =0A=
=0A=
                oGroupItem.parent =3D this;=0A=
        =0A=
                this._subscribeToItemEvents(oGroupItem);=0A=
    =0A=
                this._configureSubmenu(oGroupItem);=0A=
                =0A=
                this._updateItemProperties(nGroupIndex);=0A=
        =0A=
=0A=
                this.itemAddedEvent.fire(oGroupItem);=0A=
                this.changeContentEvent.fire();=0A=
=0A=
                return oGroupItem;=0A=
    =0A=
            }=0A=
=0A=
        }=0A=
        else {=0A=
    =0A=
            nItemIndex =3D aGroup.length;=0A=
    =0A=
            aGroup[nItemIndex] =3D oItem;=0A=
=0A=
            oGroupItem =3D aGroup[nItemIndex];=0A=
    =0A=
=0A=
            if (oGroupItem) {=0A=
    =0A=
                if (!Dom.isAncestor(this._aListElements[nGroupIndex], =0A=
                        oGroupItem.element)) {=0A=
    =0A=
                    this._aListElements[nGroupIndex].appendChild(=0A=
                        oGroupItem.element);=0A=
    =0A=
                }=0A=
    =0A=
                oGroupItem.element.setAttribute("groupindex", =
nGroupIndex);=0A=
                oGroupItem.element.setAttribute("index", nItemIndex);=0A=
        =0A=
                oGroupItem.parent =3D this;=0A=
    =0A=
                oGroupItem.index =3D nItemIndex;=0A=
                oGroupItem.groupIndex =3D nGroupIndex;=0A=
        =0A=
                this._subscribeToItemEvents(oGroupItem);=0A=
    =0A=
                this._configureSubmenu(oGroupItem);=0A=
    =0A=
                if (nItemIndex =3D=3D=3D 0) {=0A=
        =0A=
                    Dom.addClass(oGroupItem.element, "first-of-type");=0A=
        =0A=
                }=0A=
=0A=
        =0A=
=0A=
                this.itemAddedEvent.fire(oGroupItem);=0A=
                this.changeContentEvent.fire();=0A=
=0A=
                return oGroupItem;=0A=
    =0A=
            }=0A=
    =0A=
        }=0A=
=0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _removeItemFromGroupByIndex=0A=
* @description Removes a menu item from a group by index.  Returns the =
menu =0A=
* item that was removed.=0A=
* @private=0A=
* @param {Number} p_nGroupIndex Number indicating the group to which the =
menu =0A=
* item belongs.=0A=
* @param {Number} p_nItemIndex Number indicating the index of the menu =
item =0A=
* to be removed.=0A=
* @return {YAHOO.widget.MenuItem}=0A=
*/=0A=
_removeItemFromGroupByIndex: function (p_nGroupIndex, p_nItemIndex) {=0A=
=0A=
    var nGroupIndex =3D typeof p_nGroupIndex =3D=3D "number" ? =
p_nGroupIndex : 0,=0A=
        aGroup =3D this._getItemGroup(nGroupIndex),=0A=
        aArray,=0A=
        oItem,=0A=
        oUL;=0A=
=0A=
    if (aGroup) {=0A=
=0A=
        aArray =3D aGroup.splice(p_nItemIndex, 1);=0A=
        oItem =3D aArray[0];=0A=
    =0A=
        if (oItem) {=0A=
    =0A=
            // Update the index and className properties of each member  =
      =0A=
            =0A=
            this._updateItemProperties(nGroupIndex);=0A=
    =0A=
            if (aGroup.length =3D=3D=3D 0) {=0A=
    =0A=
                // Remove the UL=0A=
    =0A=
                oUL =3D this._aListElements[nGroupIndex];=0A=
    =0A=
                if (this.body && oUL) {=0A=
    =0A=
                    this.body.removeChild(oUL);=0A=
    =0A=
                }=0A=
    =0A=
                // Remove the group from the array of items=0A=
    =0A=
                this._aItemGroups.splice(nGroupIndex, 1);=0A=
    =0A=
    =0A=
                // Remove the UL from the array of ULs=0A=
    =0A=
                this._aListElements.splice(nGroupIndex, 1);=0A=
    =0A=
    =0A=
                /*=0A=
                     Assign the "first-of-type" class to the new first =
UL =0A=
                     in the collection=0A=
                */=0A=
    =0A=
                oUL =3D this._aListElements[0];=0A=
    =0A=
                if (oUL) {=0A=
    =0A=
                    Dom.addClass(oUL, "first-of-type");=0A=
    =0A=
                }            =0A=
    =0A=
            }=0A=
    =0A=
=0A=
            this.itemRemovedEvent.fire(oItem);=0A=
            this.changeContentEvent.fire();=0A=
=0A=
=0A=
            // Return a reference to the item that was removed=0A=
        =0A=
            return oItem;=0A=
    =0A=
        }=0A=
=0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _removeItemFromGroupByValue=0A=
* @description Removes a menu item from a group by reference.  Returns =
the =0A=
* menu item that was removed.=0A=
* @private=0A=
* @param {Number} p_nGroupIndex Number indicating the group to which the=0A=
* menu item belongs.=0A=
* @param {YAHOO.widget.MenuItem} p_oItem Object reference for the =
MenuItem =0A=
* instance to be removed.=0A=
* @return {YAHOO.widget.MenuItem}=0A=
*/    =0A=
_removeItemFromGroupByValue: function (p_nGroupIndex, p_oItem) {=0A=
=0A=
    var aGroup =3D this._getItemGroup(p_nGroupIndex),=0A=
        nItems,=0A=
        nItemIndex,=0A=
        i;=0A=
=0A=
    if (aGroup) {=0A=
=0A=
        nItems =3D aGroup.length;=0A=
        nItemIndex =3D -1;=0A=
    =0A=
        if (nItems > 0) {=0A=
    =0A=
            i =3D nItems-1;=0A=
        =0A=
            do {=0A=
        =0A=
                if (aGroup[i] =3D=3D p_oItem) {=0A=
        =0A=
                    nItemIndex =3D i;=0A=
                    break;    =0A=
        =0A=
                }=0A=
        =0A=
            }=0A=
            while(i--);=0A=
        =0A=
            if (nItemIndex > -1) {=0A=
        =0A=
                return (this._removeItemFromGroupByIndex(p_nGroupIndex, =0A=
                            nItemIndex));=0A=
        =0A=
            }=0A=
    =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _updateItemProperties=0A=
* @description Updates the "index," "groupindex," and "className" =
properties =0A=
* of the menu items in the specified group. =0A=
* @private=0A=
* @param {Number} p_nGroupIndex Number indicating the group of items to =
update.=0A=
*/=0A=
_updateItemProperties: function (p_nGroupIndex) {=0A=
=0A=
    var aGroup =3D this._getItemGroup(p_nGroupIndex),=0A=
        nItems =3D aGroup.length,=0A=
        oItem,=0A=
        oLI,=0A=
        i;=0A=
=0A=
=0A=
    if (nItems > 0) {=0A=
=0A=
        i =3D nItems - 1;=0A=
=0A=
        // Update the index and className properties of each member=0A=
    =0A=
        do {=0A=
=0A=
            oItem =3D aGroup[i];=0A=
=0A=
            if (oItem) {=0A=
    =0A=
                oLI =3D oItem.element;=0A=
=0A=
                oItem.index =3D i;=0A=
                oItem.groupIndex =3D p_nGroupIndex;=0A=
=0A=
                oLI.setAttribute("groupindex", p_nGroupIndex);=0A=
                oLI.setAttribute("index", i);=0A=
=0A=
                Dom.removeClass(oLI, "first-of-type");=0A=
=0A=
            }=0A=
    =0A=
        }=0A=
        while(i--);=0A=
=0A=
=0A=
        if (oLI) {=0A=
=0A=
            Dom.addClass(oLI, "first-of-type");=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _createItemGroup=0A=
* @description Creates a new menu item group (array) and its associated =0A=
* <code>&#60;ul&#62;</code> element. Returns an aray of menu item groups.=0A=
* @private=0A=
* @param {Number} p_nIndex Number indicating the group to create.=0A=
* @return {Array}=0A=
*/=0A=
_createItemGroup: function (p_nIndex) {=0A=
=0A=
    var oUL;=0A=
=0A=
    if (!this._aItemGroups[p_nIndex]) {=0A=
=0A=
        this._aItemGroups[p_nIndex] =3D [];=0A=
=0A=
        oUL =3D document.createElement("ul");=0A=
=0A=
        this._aListElements[p_nIndex] =3D oUL;=0A=
=0A=
        return this._aItemGroups[p_nIndex];=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _getItemGroup=0A=
* @description Returns the menu item group at the specified index.=0A=
* @private=0A=
* @param {Number} p_nIndex Number indicating the index of the menu item =
group =0A=
* to be retrieved.=0A=
* @return {Array}=0A=
*/=0A=
_getItemGroup: function (p_nIndex) {=0A=
=0A=
    var nIndex =3D ((typeof p_nIndex =3D=3D "number") ? p_nIndex : 0);=0A=
=0A=
    return this._aItemGroups[nIndex];=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _configureSubmenu=0A=
* @description Subscribes the menu item's submenu to its parent menu's =
events.=0A=
* @private=0A=
* @param {YAHOO.widget.MenuItem} p_oItem Object reference for the =
MenuItem =0A=
* instance with the submenu to be configured.=0A=
*/=0A=
_configureSubmenu: function (p_oItem) {=0A=
=0A=
    var oSubmenu =3D p_oItem.cfg.getProperty("submenu");=0A=
=0A=
    if (oSubmenu) {=0A=
            =0A=
        /*=0A=
            Listen for configuration changes to the parent menu =0A=
            so they they can be applied to the submenu.=0A=
        */=0A=
=0A=
        =
this.cfg.configChangedEvent.subscribe(this._onParentMenuConfigChange, =0A=
                oSubmenu, true);=0A=
=0A=
        this.renderEvent.subscribe(this._onParentMenuRender, oSubmenu, =
true);=0A=
=0A=
        oSubmenu.beforeShowEvent.subscribe(this._onSubmenuBeforeShow);=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
=0A=
/**=0A=
* @method _subscribeToItemEvents=0A=
* @description Subscribes a menu to a menu item's event.=0A=
* @private=0A=
* @param {YAHOO.widget.MenuItem} p_oItem Object reference for the =
MenuItem =0A=
* instance whose events should be subscribed to.=0A=
*/=0A=
_subscribeToItemEvents: function (p_oItem) {=0A=
=0A=
    p_oItem.focusEvent.subscribe(this._onMenuItemFocus);=0A=
=0A=
    p_oItem.blurEvent.subscribe(this._onMenuItemBlur);=0A=
=0A=
    p_oItem.destroyEvent.subscribe(this._onMenuItemDestroy, p_oItem, =
this);=0A=
=0A=
    =
p_oItem.cfg.configChangedEvent.subscribe(this._onMenuItemConfigChange,=0A=
        p_oItem, this);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onVisibleChange=0A=
* @description Change event handler for the the menu's "visible" =
configuration=0A=
* property.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onVisibleChange: function (p_sType, p_aArgs) {=0A=
=0A=
    var bVisible =3D p_aArgs[0];=0A=
    =0A=
    if (bVisible) {=0A=
=0A=
        Dom.addClass(this.element, "visible");=0A=
=0A=
    }=0A=
    else {=0A=
=0A=
        Dom.removeClass(this.element, "visible");=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _cancelHideDelay=0A=
* @description Cancels the call to "hideMenu."=0A=
* @private=0A=
*/=0A=
_cancelHideDelay: function () {=0A=
=0A=
    var oRoot =3D this.getRoot();=0A=
=0A=
    if (oRoot._nHideDelayId) {=0A=
=0A=
        window.clearTimeout(oRoot._nHideDelayId);=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _execHideDelay=0A=
* @description Hides the menu after the number of milliseconds specified =
by =0A=
* the "hidedelay" configuration property.=0A=
* @private=0A=
*/=0A=
_execHideDelay: function () {=0A=
=0A=
    this._cancelHideDelay();=0A=
=0A=
    var oRoot =3D this.getRoot(),=0A=
        me =3D this;=0A=
=0A=
    function hideMenu() {=0A=
    =0A=
        if (oRoot.activeItem) {=0A=
=0A=
            oRoot.clearActiveItem();=0A=
=0A=
        }=0A=
=0A=
        if (oRoot =3D=3D me && !(me instanceof YAHOO.widget.MenuBar) && =0A=
            me.cfg.getProperty("position") =3D=3D "dynamic") {=0A=
=0A=
            me.hide();=0A=
        =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
=0A=
    oRoot._nHideDelayId =3D =0A=
        window.setTimeout(hideMenu, oRoot.cfg.getProperty("hidedelay"));=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _cancelShowDelay=0A=
* @description Cancels the call to the "showMenu."=0A=
* @private=0A=
*/=0A=
_cancelShowDelay: function () {=0A=
=0A=
    var oRoot =3D this.getRoot();=0A=
=0A=
    if (oRoot._nShowDelayId) {=0A=
=0A=
        window.clearTimeout(oRoot._nShowDelayId);=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _execShowDelay=0A=
* @description Shows the menu after the number of milliseconds specified =
by =0A=
* the "showdelay" configuration property have ellapsed.=0A=
* @private=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object specifying the menu that =
should =0A=
* be made visible.=0A=
*/=0A=
_execShowDelay: function (p_oMenu) {=0A=
=0A=
    var oRoot =3D this.getRoot();=0A=
=0A=
    function showMenu() {=0A=
=0A=
        if (p_oMenu.parent.cfg.getProperty("selected")) {=0A=
=0A=
            p_oMenu.show();=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
=0A=
    oRoot._nShowDelayId =3D =0A=
        window.setTimeout(showMenu, oRoot.cfg.getProperty("showdelay"));=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _execSubmenuHideDelay=0A=
* @description Hides a submenu after the number of milliseconds =
specified by =0A=
* the "submenuhidedelay" configuration property have ellapsed.=0A=
* @private=0A=
* @param {YAHOO.widget.Menu} p_oSubmenu Object specifying the submenu =
that  =0A=
* should be hidden.=0A=
* @param {Number} p_nMouseX The x coordinate of the mouse when it left =0A=
* the specified submenu's parent menu item.=0A=
* @param {Number} p_nHideDelay The number of milliseconds that should =
ellapse=0A=
* before the submenu is hidden.=0A=
*/=0A=
_execSubmenuHideDelay: function (p_oSubmenu, p_nMouseX, p_nHideDelay) {=0A=
=0A=
    var me =3D this;=0A=
=0A=
    p_oSubmenu._nSubmenuHideDelayId =3D window.setTimeout(function () {=0A=
=0A=
        if (me._nCurrentMouseX > (p_nMouseX + 10)) {=0A=
=0A=
            p_oSubmenu._nSubmenuHideDelayId =3D =
window.setTimeout(function () {=0A=
        =0A=
                p_oSubmenu.hide();=0A=
=0A=
            }, p_nHideDelay);=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            p_oSubmenu.hide();=0A=
        =0A=
        }=0A=
=0A=
    }, 50);=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Protected methods=0A=
=0A=
=0A=
/**=0A=
* @method _disableScrollHeader=0A=
* @description Disables the header used for scrolling the body of the =
menu.=0A=
* @protected=0A=
*/=0A=
_disableScrollHeader: function () {=0A=
=0A=
    if (!this._bHeaderDisabled) {=0A=
=0A=
        Dom.addClass(this.header, "topscrollbar_disabled");=0A=
        this._bHeaderDisabled =3D true;=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _disableScrollFooter=0A=
* @description Disables the footer used for scrolling the body of the =
menu.=0A=
* @protected=0A=
*/=0A=
_disableScrollFooter: function () {=0A=
=0A=
    if (!this._bFooterDisabled) {=0A=
=0A=
        Dom.addClass(this.footer, "bottomscrollbar_disabled");=0A=
        this._bFooterDisabled =3D true;=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _enableScrollHeader=0A=
* @description Enables the header used for scrolling the body of the =
menu.=0A=
* @protected=0A=
*/=0A=
_enableScrollHeader: function () {=0A=
=0A=
    if (this._bHeaderDisabled) {=0A=
=0A=
        Dom.removeClass(this.header, "topscrollbar_disabled");=0A=
        this._bHeaderDisabled =3D false;=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _enableScrollFooter=0A=
* @description Enables the footer used for scrolling the body of the =
menu.=0A=
* @protected=0A=
*/=0A=
_enableScrollFooter: function () {=0A=
=0A=
    if (this._bFooterDisabled) {=0A=
=0A=
        Dom.removeClass(this.footer, "bottomscrollbar_disabled");=0A=
        this._bFooterDisabled =3D false;=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onMouseOver=0A=
* @description "mouseover" event handler for the menu.=0A=
* @protected=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onMouseOver: function (p_sType, p_aArgs) {=0A=
=0A=
    if (this._bStopMouseEventHandlers) {=0A=
    =0A=
        return false;=0A=
    =0A=
    }=0A=
=0A=
=0A=
    var oEvent =3D p_aArgs[0],=0A=
        oItem =3D p_aArgs[1],=0A=
        oTarget =3D Event.getTarget(oEvent),=0A=
        oParentMenu,=0A=
        nShowDelay,=0A=
        bShowDelay,=0A=
        oActiveItem,=0A=
        oItemCfg,=0A=
        oSubmenu;=0A=
=0A=
=0A=
    if (!this._bHandledMouseOverEvent && (oTarget =3D=3D this.element || =0A=
        Dom.isAncestor(this.element, oTarget))) {=0A=
=0A=
        // Menu mouseover logic=0A=
=0A=
        this._nCurrentMouseX =3D 0;=0A=
=0A=
        Event.on(this.element, "mousemove", this._onMouseMove, this, =
true);=0A=
=0A=
=0A=
        this.clearActiveItem();=0A=
=0A=
=0A=
        if (this.parent && this._nSubmenuHideDelayId) {=0A=
=0A=
            window.clearTimeout(this._nSubmenuHideDelayId);=0A=
=0A=
            this.parent.cfg.setProperty("selected", true);=0A=
=0A=
            oParentMenu =3D this.parent.parent;=0A=
=0A=
            oParentMenu._bHandledMouseOutEvent =3D true;=0A=
            oParentMenu._bHandledMouseOverEvent =3D false;=0A=
=0A=
        }=0A=
=0A=
=0A=
        this._bHandledMouseOverEvent =3D true;=0A=
        this._bHandledMouseOutEvent =3D false;=0A=
    =0A=
    }=0A=
=0A=
=0A=
    if (oItem && !oItem.handledMouseOverEvent && =0A=
        !oItem.cfg.getProperty("disabled") && =0A=
        (oTarget =3D=3D oItem.element || Dom.isAncestor(oItem.element, =
oTarget))) {=0A=
=0A=
        // Menu Item mouseover logic=0A=
=0A=
        nShowDelay =3D this.cfg.getProperty("showdelay");=0A=
        bShowDelay =3D (nShowDelay > 0);=0A=
=0A=
=0A=
        if (bShowDelay) {=0A=
        =0A=
            this._cancelShowDelay();=0A=
        =0A=
        }=0A=
=0A=
=0A=
        oActiveItem =3D this.activeItem;=0A=
    =0A=
        if (oActiveItem) {=0A=
    =0A=
            oActiveItem.cfg.setProperty("selected", false);=0A=
    =0A=
        }=0A=
=0A=
=0A=
        oItemCfg =3D oItem.cfg;=0A=
    =0A=
        // Select and focus the current menu item=0A=
    =0A=
        oItemCfg.setProperty("selected", true);=0A=
=0A=
=0A=
        if (this.hasFocus()) {=0A=
        =0A=
            oItem.focus();=0A=
        =0A=
        }=0A=
=0A=
=0A=
        if (this.cfg.getProperty("autosubmenudisplay")) {=0A=
=0A=
            // Show the submenu this menu item=0A=
=0A=
            oSubmenu =3D oItemCfg.getProperty("submenu");=0A=
        =0A=
            if (oSubmenu) {=0A=
        =0A=
                if (bShowDelay) {=0A=
=0A=
                    this._execShowDelay(oSubmenu);=0A=
        =0A=
                }=0A=
                else {=0A=
=0A=
                    oSubmenu.show();=0A=
=0A=
                }=0A=
=0A=
            }=0A=
=0A=
        }                        =0A=
=0A=
        oItem.handledMouseOverEvent =3D true;=0A=
        oItem.handledMouseOutEvent =3D false;=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onMouseOut=0A=
* @description "mouseout" event handler for the menu.=0A=
* @protected=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onMouseOut: function (p_sType, p_aArgs) {=0A=
=0A=
    if (this._bStopMouseEventHandlers) {=0A=
    =0A=
        return false;=0A=
    =0A=
    }=0A=
=0A=
=0A=
    var oEvent =3D p_aArgs[0],=0A=
        oItem =3D p_aArgs[1],=0A=
        oRelatedTarget =3D Event.getRelatedTarget(oEvent),=0A=
        bMovingToSubmenu =3D false,=0A=
        oItemCfg,=0A=
        oSubmenu,=0A=
        nSubmenuHideDelay,=0A=
        nShowDelay;=0A=
=0A=
=0A=
    if (oItem && !oItem.cfg.getProperty("disabled")) {=0A=
=0A=
        oItemCfg =3D oItem.cfg;=0A=
        oSubmenu =3D oItemCfg.getProperty("submenu");=0A=
=0A=
=0A=
        if (oSubmenu && (oRelatedTarget =3D=3D oSubmenu.element ||=0A=
                Dom.isAncestor(oSubmenu.element, oRelatedTarget))) {=0A=
=0A=
            bMovingToSubmenu =3D true;=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (!oItem.handledMouseOutEvent && ((oRelatedTarget !=3D =
oItem.element &&  =0A=
            !Dom.isAncestor(oItem.element, oRelatedTarget)) || =0A=
            bMovingToSubmenu)) {=0A=
=0A=
            // Menu Item mouseout logic=0A=
=0A=
            if (!bMovingToSubmenu) {=0A=
=0A=
                oItem.cfg.setProperty("selected", false);=0A=
=0A=
=0A=
                if (oSubmenu) {=0A=
=0A=
                    nSubmenuHideDelay =3D =0A=
                        this.cfg.getProperty("submenuhidedelay");=0A=
=0A=
                    nShowDelay =3D this.cfg.getProperty("showdelay");=0A=
=0A=
                    if (!(this instanceof YAHOO.widget.MenuBar) && =0A=
                        nSubmenuHideDelay > 0 && =0A=
                        nShowDelay >=3D nSubmenuHideDelay) {=0A=
=0A=
                        this._execSubmenuHideDelay(oSubmenu, =0A=
                                Event.getPageX(oEvent),=0A=
                                nSubmenuHideDelay);=0A=
=0A=
                    }=0A=
                    else {=0A=
=0A=
                        oSubmenu.hide();=0A=
=0A=
                    }=0A=
=0A=
                }=0A=
=0A=
            }=0A=
=0A=
=0A=
            oItem.handledMouseOutEvent =3D true;=0A=
            oItem.handledMouseOverEvent =3D false;=0A=
    =0A=
        }=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (!this._bHandledMouseOutEvent && ((oRelatedTarget !=3D =
this.element &&  =0A=
        !Dom.isAncestor(this.element, oRelatedTarget)) || =
bMovingToSubmenu)) {=0A=
=0A=
        // Menu mouseout logic=0A=
=0A=
        Event.removeListener(this.element, "mousemove", =
this._onMouseMove);=0A=
=0A=
        this._nCurrentMouseX =3D Event.getPageX(oEvent);=0A=
=0A=
        this._bHandledMouseOutEvent =3D true;=0A=
        this._bHandledMouseOverEvent =3D false;=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onMouseMove=0A=
* @description "click" event handler for the menu.=0A=
* @protected=0A=
* @param {Event} p_oEvent Object representing the DOM event object =
passed =0A=
* back by the event utility (YAHOO.util.Event).=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object representing the menu that =0A=
* fired the event.=0A=
*/=0A=
_onMouseMove: function (p_oEvent, p_oMenu) {=0A=
=0A=
    if (this._bStopMouseEventHandlers) {=0A=
    =0A=
        return false;=0A=
    =0A=
    }=0A=
=0A=
    this._nCurrentMouseX =3D Event.getPageX(p_oEvent);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onClick=0A=
* @description "click" event handler for the menu.=0A=
* @protected=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onClick: function (p_sType, p_aArgs) {=0A=
=0A=
    var oEvent =3D p_aArgs[0],=0A=
        oItem =3D p_aArgs[1],=0A=
        oSubmenu,=0A=
        bInMenuAnchor =3D false,=0A=
        oRoot,=0A=
        sId,=0A=
        sURL,=0A=
        nHashPos,=0A=
        nLen;=0A=
=0A=
=0A=
    if (oItem && !oItem.cfg.getProperty("disabled")) {=0A=
=0A=
        oSubmenu =3D oItem.cfg.getProperty("submenu");=0A=
=0A=
        =0A=
        /*=0A=
             Check if the URL of the anchor is pointing to an element =
that is =0A=
             a child of the menu.=0A=
        */=0A=
        =0A=
        sURL =3D oItem.cfg.getProperty("url");=0A=
=0A=
        =0A=
        if (sURL) {=0A=
=0A=
            nHashPos =3D sURL.indexOf("#");=0A=
=0A=
            nLen =3D sURL.length;=0A=
=0A=
=0A=
            if (nHashPos !=3D -1) {=0A=
=0A=
                sURL =3D sURL.substr(nHashPos, nLen);=0A=
    =0A=
                nLen =3D sURL.length;=0A=
=0A=
=0A=
                if (nLen > 1) {=0A=
=0A=
                    sId =3D sURL.substr(1, nLen);=0A=
=0A=
                    bInMenuAnchor =3D Dom.isAncestor(this.element, sId);=0A=
                    =0A=
                }=0A=
                else if (nLen =3D=3D=3D 1) {=0A=
=0A=
                    bInMenuAnchor =3D true;=0A=
                =0A=
                }=0A=
=0A=
            }=0A=
        =0A=
        }=0A=
=0A=
=0A=
        if (bInMenuAnchor && !oItem.cfg.getProperty("target")) {=0A=
=0A=
            Event.preventDefault(oEvent);=0A=
=0A=
            oItem.focus();=0A=
        =0A=
        }=0A=
=0A=
=0A=
        if (!oSubmenu) {=0A=
=0A=
            oRoot =3D this.getRoot();=0A=
            =0A=
            if (oRoot instanceof YAHOO.widget.MenuBar || =0A=
                oRoot.cfg.getProperty("position") =3D=3D "static") {=0A=
=0A=
                oRoot.clearActiveItem();=0A=
=0A=
            }=0A=
            else {=0A=
=0A=
                oRoot.hide();=0A=
            =0A=
            }=0A=
=0A=
        }=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onKeyDown=0A=
* @description "keydown" event handler for the menu.=0A=
* @protected=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onKeyDown: function (p_sType, p_aArgs) {=0A=
=0A=
    var oEvent =3D p_aArgs[0],=0A=
        oItem =3D p_aArgs[1],=0A=
        me =3D this,=0A=
        oSubmenu,=0A=
        oItemCfg,=0A=
        oParentItem,=0A=
        oRoot,=0A=
        oNextItem,=0A=
        oBody,=0A=
        nBodyScrollTop,=0A=
        nBodyOffsetHeight,=0A=
        aItems,=0A=
        nItems,=0A=
        nNextItemOffsetTop,=0A=
        nScrollTarget,=0A=
        oParentMenu;=0A=
=0A=
=0A=
    /*=0A=
        This function is called to prevent a bug in Firefox.  In Firefox,=0A=
        moving a DOM element into a stationary mouse pointer will cause =
the =0A=
        browser to fire mouse events.  This can result in the menu mouse=0A=
        event handlers being called uncessarily, especially when menus =
are =0A=
        moved into a stationary mouse pointer as a result of a =0A=
        key event handler.=0A=
    */=0A=
    function stopMouseEventHandlers() {=0A=
=0A=
        me._bStopMouseEventHandlers =3D true;=0A=
        =0A=
        window.setTimeout(function () {=0A=
        =0A=
            me._bStopMouseEventHandlers =3D false;=0A=
        =0A=
        }, 10);=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (oItem && !oItem.cfg.getProperty("disabled")) {=0A=
=0A=
        oItemCfg =3D oItem.cfg;=0A=
        oParentItem =3D this.parent;=0A=
=0A=
        switch(oEvent.keyCode) {=0A=
    =0A=
            case 38:    // Up arrow=0A=
            case 40:    // Down arrow=0A=
    =0A=
                oNextItem =3D (oEvent.keyCode =3D=3D 38) ? =0A=
                    oItem.getPreviousEnabledSibling() : =0A=
                    oItem.getNextEnabledSibling();=0A=
        =0A=
                if (oNextItem) {=0A=
=0A=
                    this.clearActiveItem();=0A=
=0A=
                    oNextItem.cfg.setProperty("selected", true);=0A=
                    oNextItem.focus();=0A=
=0A=
=0A=
                    if (this.cfg.getProperty("maxheight") > 0) {=0A=
=0A=
                        oBody =3D this.body;=0A=
                        nBodyScrollTop =3D oBody.scrollTop;=0A=
                        nBodyOffsetHeight =3D oBody.offsetHeight;=0A=
                        aItems =3D this.getItems();=0A=
                        nItems =3D aItems.length - 1;=0A=
                        nNextItemOffsetTop =3D =
oNextItem.element.offsetTop;=0A=
=0A=
=0A=
                        if (oEvent.keyCode =3D=3D 40 ) {    // Down=0A=
                       =0A=
                            if (nNextItemOffsetTop >=3D =
(nBodyOffsetHeight + nBodyScrollTop)) {=0A=
=0A=
                                oBody.scrollTop =3D nNextItemOffsetTop - =
nBodyOffsetHeight;=0A=
=0A=
                            }=0A=
                            else if (nNextItemOffsetTop <=3D =
nBodyScrollTop) {=0A=
                            =0A=
                                oBody.scrollTop =3D 0;=0A=
                            =0A=
                            }=0A=
=0A=
=0A=
                            if (oNextItem =3D=3D aItems[nItems]) {=0A=
=0A=
                                oBody.scrollTop =3D =
oNextItem.element.offsetTop;=0A=
=0A=
                            }=0A=
=0A=
                        }=0A=
                        else {  // Up=0A=
=0A=
                            if (nNextItemOffsetTop <=3D nBodyScrollTop) {=0A=
=0A=
                                oBody.scrollTop =3D nNextItemOffsetTop - =
oNextItem.element.offsetHeight;=0A=
                            =0A=
                            }=0A=
                            else if (nNextItemOffsetTop >=3D =
(nBodyScrollTop + nBodyOffsetHeight)) {=0A=
                            =0A=
                                oBody.scrollTop =3D nNextItemOffsetTop;=0A=
                            =0A=
                            }=0A=
=0A=
=0A=
                            if (oNextItem =3D=3D aItems[0]) {=0A=
                            =0A=
                                oBody.scrollTop =3D 0;=0A=
                            =0A=
                            }=0A=
=0A=
                        }=0A=
=0A=
=0A=
                        nBodyScrollTop =3D oBody.scrollTop;=0A=
                        nScrollTarget =3D oBody.scrollHeight - =
oBody.offsetHeight;=0A=
=0A=
                        if (nBodyScrollTop =3D=3D=3D 0) {=0A=
=0A=
                            this._disableScrollHeader();=0A=
                            this._enableScrollFooter();=0A=
=0A=
                        }=0A=
                        else if (nBodyScrollTop =3D=3D nScrollTarget) {=0A=
=0A=
                             this._enableScrollHeader();=0A=
                             this._disableScrollFooter();=0A=
=0A=
                        }=0A=
                        else {=0A=
=0A=
                            this._enableScrollHeader();=0A=
                            this._enableScrollFooter();=0A=
=0A=
                        }=0A=
=0A=
                    }=0A=
=0A=
                }=0A=
=0A=
    =0A=
                Event.preventDefault(oEvent);=0A=
=0A=
                stopMouseEventHandlers();=0A=
    =0A=
            break;=0A=
            =0A=
    =0A=
            case 39:    // Right arrow=0A=
    =0A=
                oSubmenu =3D oItemCfg.getProperty("submenu");=0A=
    =0A=
                if (oSubmenu) {=0A=
    =0A=
                    if (!oItemCfg.getProperty("selected")) {=0A=
        =0A=
                        oItemCfg.setProperty("selected", true);=0A=
        =0A=
                    }=0A=
    =0A=
                    oSubmenu.show();=0A=
                    oSubmenu.setInitialFocus();=0A=
                    oSubmenu.setInitialSelection();=0A=
    =0A=
                }=0A=
                else {=0A=
    =0A=
                    oRoot =3D this.getRoot();=0A=
                    =0A=
                    if (oRoot instanceof YAHOO.widget.MenuBar) {=0A=
    =0A=
                        oNextItem =3D =
oRoot.activeItem.getNextEnabledSibling();=0A=
    =0A=
                        if (oNextItem) {=0A=
                        =0A=
                            oRoot.clearActiveItem();=0A=
    =0A=
                            oNextItem.cfg.setProperty("selected", true);=0A=
    =0A=
                            oSubmenu =3D =
oNextItem.cfg.getProperty("submenu");=0A=
    =0A=
                            if (oSubmenu) {=0A=
    =0A=
                                oSubmenu.show();=0A=
                            =0A=
                            }=0A=
    =0A=
                            oNextItem.focus();=0A=
                        =0A=
                        }=0A=
                    =0A=
                    }=0A=
                =0A=
                }=0A=
    =0A=
    =0A=
                Event.preventDefault(oEvent);=0A=
=0A=
                stopMouseEventHandlers();=0A=
=0A=
            break;=0A=
    =0A=
    =0A=
            case 37:    // Left arrow=0A=
    =0A=
                if (oParentItem) {=0A=
    =0A=
                    oParentMenu =3D oParentItem.parent;=0A=
    =0A=
                    if (oParentMenu instanceof YAHOO.widget.MenuBar) {=0A=
    =0A=
                        oNextItem =3D =0A=
                            =
oParentMenu.activeItem.getPreviousEnabledSibling();=0A=
    =0A=
                        if (oNextItem) {=0A=
                        =0A=
                            oParentMenu.clearActiveItem();=0A=
    =0A=
                            oNextItem.cfg.setProperty("selected", true);=0A=
    =0A=
                            oSubmenu =3D =
oNextItem.cfg.getProperty("submenu");=0A=
    =0A=
                            if (oSubmenu) {=0A=
                            =0A=
                                oSubmenu.show();=0A=
                            =0A=
                            }=0A=
    =0A=
                            oNextItem.focus();=0A=
                        =0A=
                        } =0A=
                    =0A=
                    }=0A=
                    else {=0A=
    =0A=
                        this.hide();=0A=
    =0A=
                        oParentItem.focus();=0A=
                    =0A=
                    }=0A=
    =0A=
                }=0A=
    =0A=
                Event.preventDefault(oEvent);=0A=
=0A=
                stopMouseEventHandlers();=0A=
=0A=
            break;        =0A=
    =0A=
        }=0A=
=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (oEvent.keyCode =3D=3D 27) { // Esc key=0A=
=0A=
        if (this.cfg.getProperty("position") =3D=3D "dynamic") {=0A=
        =0A=
            this.hide();=0A=
=0A=
            if (this.parent) {=0A=
=0A=
                this.parent.focus();=0A=
            =0A=
            }=0A=
=0A=
        }=0A=
        else if (this.activeItem) {=0A=
=0A=
            oSubmenu =3D this.activeItem.cfg.getProperty("submenu");=0A=
=0A=
            if (oSubmenu && oSubmenu.cfg.getProperty("visible")) {=0A=
            =0A=
                oSubmenu.hide();=0A=
                this.activeItem.focus();=0A=
            =0A=
            }=0A=
            else {=0A=
=0A=
                this.activeItem.blur();=0A=
                this.activeItem.cfg.setProperty("selected", false);=0A=
        =0A=
            }=0A=
        =0A=
        }=0A=
=0A=
=0A=
        Event.preventDefault(oEvent);=0A=
    =0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onKeyPress=0A=
* @description "keypress" event handler for a Menu instance.=0A=
* @protected=0A=
* @param {String} p_sType The name of the event that was fired.=0A=
* @param {Array} p_aArgs Collection of arguments sent when the event =0A=
* was fired.=0A=
*/=0A=
_onKeyPress: function (p_sType, p_aArgs) {=0A=
    =0A=
    var oEvent =3D p_aArgs[0];=0A=
=0A=
=0A=
    if (oEvent.keyCode =3D=3D 40 || oEvent.keyCode =3D=3D 38) {=0A=
=0A=
        Event.preventDefault(oEvent);=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onYChange=0A=
* @description "y" event handler for a Menu instance.=0A=
* @protected=0A=
* @param {String} p_sType The name of the event that was fired.=0A=
* @param {Array} p_aArgs Collection of arguments sent when the event =0A=
* was fired.=0A=
*/=0A=
_onYChange: function (p_sType, p_aArgs) {=0A=
=0A=
    var oParent =3D this.parent,=0A=
        nScrollTop,=0A=
        oIFrame,=0A=
        nY;=0A=
=0A=
=0A=
    if (oParent) {=0A=
=0A=
        nScrollTop =3D oParent.parent.body.scrollTop;=0A=
=0A=
=0A=
        if (nScrollTop > 0) {=0A=
    =0A=
            nY =3D (this.cfg.getProperty("y") - nScrollTop);=0A=
            =0A=
            Dom.setY(this.element, nY);=0A=
=0A=
            oIFrame =3D this.iframe;            =0A=
    =0A=
=0A=
            if (oIFrame) {=0A=
    =0A=
                Dom.setY(oIFrame, nY);=0A=
    =0A=
            }=0A=
            =0A=
            this.cfg.setProperty("y", nY, true);=0A=
        =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onScrollTargetMouseOver=0A=
* @description "mouseover" event handler for the menu's "header" and =
"footer" =0A=
* elements.  Used to scroll the body of the menu up and down when the =0A=
* menu's "maxheight" configuration property is set to a value greater =
than 0.=0A=
* @protected=0A=
* @param {Event} p_oEvent Object representing the DOM event object =
passed =0A=
* back by the event utility (YAHOO.util.Event).=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object representing the menu that =0A=
* fired the event.=0A=
*/=0A=
_onScrollTargetMouseOver: function (p_oEvent, p_oMenu) {=0A=
=0A=
    this._cancelHideDelay();=0A=
=0A=
    var oTarget =3D Event.getTarget(p_oEvent),=0A=
        oBody =3D this.body,=0A=
        me =3D this,=0A=
        nScrollIncrement =3D this.cfg.getProperty("scrollincrement"),=0A=
        nScrollTarget,=0A=
        fnScrollFunction;=0A=
=0A=
=0A=
    function scrollBodyDown() {=0A=
=0A=
        var nScrollTop =3D oBody.scrollTop;=0A=
=0A=
=0A=
        if (nScrollTop < nScrollTarget) {=0A=
=0A=
            oBody.scrollTop =3D (nScrollTop + nScrollIncrement);=0A=
=0A=
            me._enableScrollHeader();=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            oBody.scrollTop =3D nScrollTarget;=0A=
            =0A=
            window.clearInterval(me._nBodyScrollId);=0A=
=0A=
            me._disableScrollFooter();=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
=0A=
    function scrollBodyUp() {=0A=
=0A=
        var nScrollTop =3D oBody.scrollTop;=0A=
=0A=
=0A=
        if (nScrollTop > 0) {=0A=
=0A=
            oBody.scrollTop =3D (nScrollTop - nScrollIncrement);=0A=
=0A=
            me._enableScrollFooter();=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            oBody.scrollTop =3D 0;=0A=
            =0A=
            window.clearInterval(me._nBodyScrollId);=0A=
=0A=
            me._disableScrollHeader();=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
    =0A=
    if (Dom.hasClass(oTarget, "hd")) {=0A=
=0A=
        fnScrollFunction =3D scrollBodyUp;=0A=
    =0A=
    }=0A=
    else {=0A=
=0A=
        nScrollTarget =3D oBody.scrollHeight - oBody.offsetHeight;=0A=
=0A=
        fnScrollFunction =3D scrollBodyDown;=0A=
    =0A=
    }=0A=
=0A=
=0A=
    this._nBodyScrollId =3D window.setInterval(fnScrollFunction, 10);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onScrollTargetMouseOut=0A=
* @description "mouseout" event handler for the menu's "header" and =
"footer" =0A=
* elements.  Used to stop scrolling the body of the menu up and down =
when the =0A=
* menu's "maxheight" configuration property is set to a value greater =
than 0.=0A=
* @protected=0A=
* @param {Event} p_oEvent Object representing the DOM event object =
passed =0A=
* back by the event utility (YAHOO.util.Event).=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object representing the menu that =0A=
* fired the event.=0A=
*/=0A=
_onScrollTargetMouseOut: function (p_oEvent, p_oMenu) {=0A=
=0A=
    window.clearInterval(this._nBodyScrollId);=0A=
=0A=
    this._cancelHideDelay();=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Private methods=0A=
=0A=
=0A=
/**=0A=
* @method _onInit=0A=
* @description "init" event handler for the menu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onInit: function (p_sType, p_aArgs) {=0A=
=0A=
    this.cfg.subscribeToConfigEvent("visible", this._onVisibleChange);=0A=
=0A=
    var bRootMenu =3D !this.parent,=0A=
        bLazyLoad =3D this.lazyLoad;=0A=
=0A=
=0A=
    /*=0A=
        Automatically initialize a menu's subtree if:=0A=
=0A=
        1) This is the root menu and lazyload is off=0A=
        =0A=
        2) This is the root menu, lazyload is on, but the menu is =0A=
           already visible=0A=
=0A=
        3) This menu is a submenu and lazyload is off=0A=
    */=0A=
=0A=
=0A=
=0A=
    if (((bRootMenu && !bLazyLoad) || =0A=
        (bRootMenu && (this.cfg.getProperty("visible") || =0A=
        this.cfg.getProperty("position") =3D=3D "static")) || =0A=
        (!bRootMenu && !bLazyLoad)) && this.getItemGroups().length =
=3D=3D=3D 0) {=0A=
=0A=
        if (this.srcElement) {=0A=
=0A=
            this._initSubTree();=0A=
        =0A=
        }=0A=
=0A=
=0A=
        if (this.itemData) {=0A=
=0A=
            this.addItems(this.itemData);=0A=
=0A=
        }=0A=
    =0A=
    }=0A=
    else if (bLazyLoad) {=0A=
=0A=
        this.cfg.fireQueue();=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onBeforeRender=0A=
* @description "beforerender" event handler for the menu.  Appends all =
of the =0A=
* <code>&#60;ul&#62;</code>, <code>&#60;li&#62;</code> and their =
accompanying =0A=
* title elements to the body element of the menu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onBeforeRender: function (p_sType, p_aArgs) {=0A=
=0A=
    var oEl =3D this.element,=0A=
        nListElements =3D this._aListElements.length,=0A=
        bFirstList =3D true,=0A=
        i =3D 0,=0A=
        oUL,=0A=
        oGroupTitle;=0A=
=0A=
    if (nListElements > 0) {=0A=
=0A=
        do {=0A=
=0A=
            oUL =3D this._aListElements[i];=0A=
=0A=
            if (oUL) {=0A=
=0A=
                if (bFirstList) {=0A=
        =0A=
                    Dom.addClass(oUL, "first-of-type");=0A=
                    bFirstList =3D false;=0A=
        =0A=
                }=0A=
=0A=
=0A=
                if (!Dom.isAncestor(oEl, oUL)) {=0A=
=0A=
                    this.appendToBody(oUL);=0A=
=0A=
                }=0A=
=0A=
=0A=
                oGroupTitle =3D this._aGroupTitleElements[i];=0A=
=0A=
                if (oGroupTitle) {=0A=
=0A=
                    if (!Dom.isAncestor(oEl, oGroupTitle)) {=0A=
=0A=
                        oUL.parentNode.insertBefore(oGroupTitle, oUL);=0A=
=0A=
                    }=0A=
=0A=
=0A=
                    Dom.addClass(oUL, "hastitle");=0A=
=0A=
                }=0A=
=0A=
            }=0A=
=0A=
            i++;=0A=
=0A=
        }=0A=
        while(i < nListElements);=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onRender=0A=
* @description "render" event handler for the menu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onRender: function (p_sType, p_aArgs) {=0A=
=0A=
    if (this.cfg.getProperty("position") =3D=3D "dynamic") { =0A=
=0A=
        if (!this.cfg.getProperty("visible")) {=0A=
=0A=
            this.positionOffScreen();=0A=
=0A=
        }=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
/**=0A=
* @method _onBeforeShow=0A=
* @description "beforeshow" event handler for the menu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onBeforeShow: function (p_sType, p_aArgs) {=0A=
=0A=
    var nOptions,=0A=
        n,=0A=
        nViewportHeight,=0A=
        oRegion,=0A=
        oSrcElement;=0A=
=0A=
=0A=
    if (this.lazyLoad && this.getItemGroups().length =3D=3D=3D 0) {=0A=
=0A=
        if (this.srcElement) {=0A=
        =0A=
            this._initSubTree();=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (this.itemData) {=0A=
=0A=
            if (this.parent && this.parent.parent && =0A=
                this.parent.parent.srcElement && =0A=
                this.parent.parent.srcElement.tagName.toUpperCase() =
=3D=3D =0A=
                "SELECT") {=0A=
=0A=
                nOptions =3D this.itemData.length;=0A=
    =0A=
                for(n=3D0; n<nOptions; n++) {=0A=
=0A=
                    if (this.itemData[n].tagName) {=0A=
=0A=
                        this.addItem((new =
this.ITEM_TYPE(this.itemData[n])));=0A=
    =0A=
                    }=0A=
    =0A=
                }=0A=
            =0A=
            }=0A=
            else {=0A=
=0A=
                this.addItems(this.itemData);=0A=
            =0A=
            }=0A=
        =0A=
        }=0A=
=0A=
=0A=
        oSrcElement =3D this.srcElement;=0A=
=0A=
        if (oSrcElement) {=0A=
=0A=
            if (oSrcElement.tagName.toUpperCase() =3D=3D "SELECT") {=0A=
=0A=
                if (Dom.inDocument(oSrcElement)) {=0A=
=0A=
                    this.render(oSrcElement.parentNode);=0A=
                =0A=
                }=0A=
                else {=0A=
                =0A=
                    this.render(this.cfg.getProperty("container"));=0A=
                =0A=
                }=0A=
=0A=
            }=0A=
            else {=0A=
=0A=
                this.render();=0A=
=0A=
            }=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            if (this.parent) {=0A=
=0A=
                this.render(this.parent.element);            =0A=
=0A=
            }=0A=
            else {=0A=
=0A=
                this.render(this.cfg.getProperty("container"));=0A=
=0A=
            }                =0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
=0A=
    var nMaxHeight =3D this.cfg.getProperty("maxheight"),=0A=
        nMinScrollHeight =3D this.cfg.getProperty("minscrollheight"),=0A=
        bDynamicPos =3D this.cfg.getProperty("position") =3D=3D =
"dynamic";=0A=
=0A=
=0A=
    if (!this.parent && bDynamicPos) {=0A=
=0A=
        this.cfg.refireEvent("xy");=0A=
   =0A=
    }=0A=
=0A=
=0A=
    function clearMaxHeight() {=0A=
    =0A=
        this.cfg.setProperty("maxheight", 0);=0A=
    =0A=
        this.hideEvent.unsubscribe(clearMaxHeight);=0A=
    =0A=
    }=0A=
=0A=
=0A=
    if (!(this instanceof YAHOO.widget.MenuBar) && bDynamicPos) {=0A=
=0A=
=0A=
        if (nMaxHeight =3D=3D=3D 0) {=0A=
=0A=
            nViewportHeight =3D Dom.getViewportHeight();=0A=
    =0A=
    =0A=
            if (this.parent && =0A=
                this.parent.parent instanceof YAHOO.widget.MenuBar) {=0A=
               =0A=
                oRegion =3D =
YAHOO.util.Region.getRegion(this.parent.element);=0A=
                =0A=
                nViewportHeight =3D (nViewportHeight - oRegion.bottom);=0A=
    =0A=
            }=0A=
    =0A=
    =0A=
            if (this.element.offsetHeight >=3D nViewportHeight) {=0A=
    =0A=
                nMaxHeight =3D (nViewportHeight - =
(Overlay.VIEWPORT_OFFSET * 2));=0A=
=0A=
                if (nMaxHeight < nMinScrollHeight) {=0A=
=0A=
                    nMaxHeight =3D nMinScrollHeight;=0A=
                =0A=
                }=0A=
=0A=
                this.cfg.setProperty("maxheight", nMaxHeight);=0A=
=0A=
                this.hideEvent.subscribe(clearMaxHeight);=0A=
=0A=
            }=0A=
        =0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onShow=0A=
* @description "show" event handler for the menu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onShow: function (p_sType, p_aArgs) {=0A=
=0A=
    var oParent =3D this.parent,=0A=
        oParentMenu,=0A=
        aParentAlignment,=0A=
        aAlignment;=0A=
=0A=
=0A=
    function disableAutoSubmenuDisplay(p_oEvent) {=0A=
=0A=
        var oTarget;=0A=
=0A=
        if (p_oEvent.type =3D=3D "mousedown" || (p_oEvent.type =3D=3D =
"keydown" && =0A=
            p_oEvent.keyCode =3D=3D 27)) {=0A=
=0A=
            /*  =0A=
                Set the "autosubmenudisplay" to "false" if the user=0A=
                clicks outside the menu bar.=0A=
            */=0A=
=0A=
            oTarget =3D Event.getTarget(p_oEvent);=0A=
=0A=
            if (oTarget !=3D oParentMenu.element || =0A=
                !Dom.isAncestor(oParentMenu.element, oTarget)) {=0A=
=0A=
                oParentMenu.cfg.setProperty("autosubmenudisplay", false);=0A=
=0A=
                Event.removeListener(document, "mousedown", =0A=
                        disableAutoSubmenuDisplay);=0A=
=0A=
                Event.removeListener(document, "keydown", =0A=
                        disableAutoSubmenuDisplay);=0A=
=0A=
            }=0A=
        =0A=
        }=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (oParent) {=0A=
=0A=
        oParentMenu =3D oParent.parent;=0A=
        aParentAlignment =3D =
oParentMenu.cfg.getProperty("submenualignment");=0A=
        aAlignment =3D this.cfg.getProperty("submenualignment");=0A=
=0A=
=0A=
        if ((aParentAlignment[0] !=3D aAlignment[0]) &&=0A=
            (aParentAlignment[1] !=3D aAlignment[1])) {=0A=
=0A=
            this.cfg.setProperty("submenualignment", =0A=
                [aParentAlignment[0], aParentAlignment[1]]);=0A=
        =0A=
        }=0A=
=0A=
=0A=
        if (!oParentMenu.cfg.getProperty("autosubmenudisplay") && =0A=
            (oParentMenu instanceof YAHOO.widget.MenuBar || =0A=
            oParentMenu.cfg.getProperty("position") =3D=3D "static")) {=0A=
=0A=
            oParentMenu.cfg.setProperty("autosubmenudisplay", true);=0A=
=0A=
            Event.on(document, "mousedown", disableAutoSubmenuDisplay);  =
                           =0A=
            Event.on(document, "keydown", disableAutoSubmenuDisplay);=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onBeforeHide=0A=
* @description "beforehide" event handler for the menu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onBeforeHide: function (p_sType, p_aArgs) {=0A=
=0A=
    var oActiveItem =3D this.activeItem,=0A=
        oConfig,=0A=
        oSubmenu;=0A=
=0A=
    if (oActiveItem) {=0A=
=0A=
        oConfig =3D oActiveItem.cfg;=0A=
=0A=
        oConfig.setProperty("selected", false);=0A=
=0A=
        oSubmenu =3D oConfig.getProperty("submenu");=0A=
=0A=
        if (oSubmenu) {=0A=
=0A=
            oSubmenu.hide();=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
    if (this.getRoot() =3D=3D this) {=0A=
=0A=
        this.blur();=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onParentMenuConfigChange=0A=
* @description "configchange" event handler for a submenu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oSubmenu Object representing the submenu =
that =0A=
* subscribed to the event.=0A=
*/=0A=
_onParentMenuConfigChange: function (p_sType, p_aArgs, p_oSubmenu) {=0A=
    =0A=
    var sPropertyName =3D p_aArgs[0][0],=0A=
        oPropertyValue =3D p_aArgs[0][1];=0A=
=0A=
    switch(sPropertyName) {=0A=
=0A=
        case "iframe":=0A=
        case "constraintoviewport":=0A=
        case "hidedelay":=0A=
        case "showdelay":=0A=
        case "submenuhidedelay":=0A=
        case "clicktohide":=0A=
        case "effect":=0A=
        case "classname":=0A=
        case "scrollincrement":=0A=
        case "minscrollheight":=0A=
=0A=
            p_oSubmenu.cfg.setProperty(sPropertyName, oPropertyValue);=0A=
                =0A=
        break;        =0A=
        =0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onParentMenuRender=0A=
* @description "render" event handler for a submenu.  Renders a  =0A=
* submenu in response to the firing of its parent's "render" event.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oSubmenu Object representing the submenu =
that =0A=
* subscribed to the event.=0A=
*/=0A=
_onParentMenuRender: function (p_sType, p_aArgs, p_oSubmenu) {=0A=
=0A=
    var oParentCfg =3D p_oSubmenu.parent.parent.cfg,=0A=
=0A=
        oConfig =3D {=0A=
=0A=
            constraintoviewport: =
oParentCfg.getProperty("constraintoviewport"),=0A=
=0A=
            xy: [0,0],=0A=
=0A=
            clicktohide: oParentCfg.getProperty("clicktohide"),=0A=
                =0A=
            effect: oParentCfg.getProperty("effect"),=0A=
=0A=
            showdelay: oParentCfg.getProperty("showdelay"),=0A=
            =0A=
            hidedelay: oParentCfg.getProperty("hidedelay"),=0A=
=0A=
            submenuhidedelay: oParentCfg.getProperty("submenuhidedelay"),=0A=
=0A=
            classname: oParentCfg.getProperty("classname"),=0A=
            =0A=
            scrollincrement: oParentCfg.getProperty("scrollincrement"),=0A=
            =0A=
            minscrollheight: oParentCfg.getProperty("minscrollheight"),=0A=
            =0A=
            iframe: oParentCfg.getProperty("iframe")=0A=
=0A=
        },=0A=
        =0A=
        oLI;=0A=
=0A=
=0A=
    p_oSubmenu.cfg.applyConfig(oConfig);=0A=
=0A=
=0A=
    if (!this.lazyLoad) {=0A=
=0A=
        oLI =3D this.parent.element;=0A=
=0A=
        if (this.element.parentNode =3D=3D oLI) {=0A=
    =0A=
            this.render();=0A=
    =0A=
        }=0A=
        else {=0A=
=0A=
            this.render(oLI);=0A=
    =0A=
        }=0A=
=0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onSubmenuBeforeShow=0A=
* @description "beforeshow" event handler for a submenu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onSubmenuBeforeShow: function (p_sType, p_aArgs) {=0A=
=0A=
    var oParent =3D this.parent,=0A=
        aAlignment =3D =
oParent.parent.cfg.getProperty("submenualignment");=0A=
=0A=
=0A=
    if (!this.cfg.getProperty("context")) {=0A=
    =0A=
        this.cfg.setProperty("context", =0A=
            [oParent.element, aAlignment[0], aAlignment[1]]);=0A=
=0A=
    }=0A=
    else {=0A=
=0A=
        this.align();=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onMenuItemFocus=0A=
* @description "focus" event handler for the menu's items.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onMenuItemFocus: function (p_sType, p_aArgs) {=0A=
=0A=
    this.parent.focusEvent.fire(this);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onMenuItemBlur=0A=
* @description "blur" event handler for the menu's items.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event =0A=
* that was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
_onMenuItemBlur: function (p_sType, p_aArgs) {=0A=
=0A=
    this.parent.blurEvent.fire(this);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onMenuItemDestroy=0A=
* @description "destroy" event handler for the menu's items.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event =0A=
* that was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.MenuItem} p_oItem Object representing the menu =
item =0A=
* that fired the event.=0A=
*/=0A=
_onMenuItemDestroy: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
    this._removeItemFromGroupByValue(p_oItem.groupIndex, p_oItem);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onMenuItemConfigChange=0A=
* @description "configchange" event handler for the menu's items.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.MenuItem} p_oItem Object representing the menu =
item =0A=
* that fired the event.=0A=
*/=0A=
_onMenuItemConfigChange: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
    var sPropertyName =3D p_aArgs[0][0],=0A=
        oPropertyValue =3D p_aArgs[0][1],=0A=
        oSubmenu;=0A=
=0A=
=0A=
    switch(sPropertyName) {=0A=
=0A=
        case "selected":=0A=
=0A=
            if (oPropertyValue =3D=3D=3D true) {=0A=
=0A=
                this.activeItem =3D p_oItem;=0A=
            =0A=
            }=0A=
=0A=
        break;=0A=
=0A=
        case "submenu":=0A=
=0A=
            oSubmenu =3D p_aArgs[0][1];=0A=
=0A=
            if (oSubmenu) {=0A=
=0A=
                this._configureSubmenu(p_oItem);=0A=
=0A=
            }=0A=
=0A=
        break;=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Public event handlers for configuration properties=0A=
=0A=
=0A=
/**=0A=
* @method enforceConstraints=0A=
* @description The default event handler executed when the moveEvent is =
fired,  =0A=
* if the "constraintoviewport" configuration property is set to true.=0A=
* @param {String} type The name of the event that was fired.=0A=
* @param {Array} args Collection of arguments sent when the =0A=
* event was fired.=0A=
* @param {Array} obj Array containing the current Menu instance =0A=
* and the item that fired the event.=0A=
*/=0A=
enforceConstraints: function (type, args, obj) {=0A=
=0A=
    var oParentMenuItem =3D this.parent,=0A=
        nViewportOffset =3D Overlay.VIEWPORT_OFFSET,=0A=
        oElement =3D this.element,=0A=
        oConfig =3D this.cfg,=0A=
        pos =3D args[0],=0A=
        offsetHeight =3D oElement.offsetHeight,=0A=
        offsetWidth =3D oElement.offsetWidth,=0A=
        viewPortWidth =3D Dom.getViewportWidth(),=0A=
        viewPortHeight =3D Dom.getViewportHeight(),=0A=
        nPadding =3D (oParentMenuItem && =0A=
            oParentMenuItem.parent instanceof YAHOO.widget.MenuBar) ? =0A=
            0 : nViewportOffset,=0A=
        aContext =3D oConfig.getProperty("context"),=0A=
        oContextElement =3D aContext ? aContext[0] : null,=0A=
        topConstraint,=0A=
        leftConstraint,=0A=
        bottomConstraint,=0A=
        rightConstraint,=0A=
        scrollX,=0A=
        scrollY,=0A=
        x,=0A=
        y;=0A=
    =0A=
=0A=
    if (offsetWidth < viewPortWidth) {=0A=
=0A=
        x =3D pos[0];=0A=
        scrollX =3D Dom.getDocumentScrollLeft();=0A=
        leftConstraint =3D scrollX + nPadding;=0A=
        rightConstraint =3D scrollX + viewPortWidth - offsetWidth - =
nPadding;=0A=
=0A=
        if (x < nViewportOffset) {=0A=
    =0A=
            x =3D leftConstraint;=0A=
    =0A=
        } else if ((x + offsetWidth) > viewPortWidth) {=0A=
    =0A=
            if(oContextElement &&=0A=
                ((x - oContextElement.offsetWidth) > offsetWidth)) {=0A=
    =0A=
                if (oParentMenuItem && =0A=
                    oParentMenuItem.parent instanceof =
YAHOO.widget.MenuBar) {=0A=
    =0A=
                    x =3D (x - (offsetWidth - =
oContextElement.offsetWidth));=0A=
    =0A=
                }=0A=
                else {=0A=
    =0A=
                    x =3D (x - (oContextElement.offsetWidth + =
offsetWidth));=0A=
    =0A=
                }=0A=
    =0A=
            }=0A=
            else {=0A=
    =0A=
                x =3D rightConstraint;=0A=
    =0A=
            }=0A=
    =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
=0A=
    if (offsetHeight < viewPortHeight) {=0A=
=0A=
        y =3D pos[1];=0A=
        scrollY =3D Dom.getDocumentScrollTop();=0A=
        topConstraint =3D scrollY + nPadding;=0A=
        bottomConstraint =3D scrollY + viewPortHeight - offsetHeight - =
nPadding;=0A=
=0A=
=0A=
=0A=
        if (y < nViewportOffset) {=0A=
    =0A=
            y =3D topConstraint;=0A=
    =0A=
        } else if (y > bottomConstraint) {=0A=
    =0A=
            if (oContextElement && (y > offsetHeight)) {=0A=
    =0A=
                y =3D ((y + oContextElement.offsetHeight) - =
offsetHeight);=0A=
    =0A=
            }=0A=
            else {=0A=
    =0A=
                y =3D bottomConstraint;=0A=
                =0A=
=0A=
    =0A=
            }=0A=
    =0A=
        }=0A=
=0A=
    }=0A=
=0A=
=0A=
    oConfig.setProperty("x", x, true);=0A=
    oConfig.setProperty("y", y, true);=0A=
    oConfig.setProperty("xy", [x,y], true);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method configVisible=0A=
* @description Event handler for when the "visible" configuration =
property =0A=
* the menu changes.=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object representing the menu that =0A=
* fired the event.=0A=
*/=0A=
configVisible: function (p_sType, p_aArgs, p_oMenu) {=0A=
=0A=
    var bVisible,=0A=
        sDisplay;=0A=
=0A=
    if (this.cfg.getProperty("position") =3D=3D "dynamic") {=0A=
=0A=
        Menu.superclass.configVisible.call(this, p_sType, p_aArgs, =
p_oMenu);=0A=
=0A=
    }=0A=
    else {=0A=
=0A=
        bVisible =3D p_aArgs[0];=0A=
        sDisplay =3D Dom.getStyle(this.element, "display");=0A=
=0A=
        Dom.setStyle(this.element, "visibility", "visible");=0A=
=0A=
        if (bVisible) {=0A=
=0A=
            if (sDisplay !=3D "block") {=0A=
                this.beforeShowEvent.fire();=0A=
                Dom.setStyle(this.element, "display", "block");=0A=
                this.showEvent.fire();=0A=
            }=0A=
        =0A=
        }=0A=
        else {=0A=
=0A=
			if (sDisplay =3D=3D "block") {=0A=
				this.beforeHideEvent.fire();=0A=
				Dom.setStyle(this.element, "display", "none");=0A=
				this.hideEvent.fire();=0A=
			}=0A=
        =0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method configPosition=0A=
* @description Event handler for when the "position" configuration =
property =0A=
* of the menu changes.=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object representing the menu that =0A=
* fired the event.=0A=
*/=0A=
configPosition: function (p_sType, p_aArgs, p_oMenu) {=0A=
=0A=
    var oElement =3D this.element,=0A=
        sCSSPosition =3D p_aArgs[0] =3D=3D "static" ? "static" : =
"absolute",=0A=
        oCfg =3D this.cfg,=0A=
        nZIndex;=0A=
=0A=
=0A=
    Dom.setStyle(oElement, "position", sCSSPosition);=0A=
=0A=
=0A=
    if (sCSSPosition =3D=3D "static") {=0A=
=0A=
        // Statically positioned menus are visible by default=0A=
        =0A=
        Dom.setStyle(oElement, "display", "block");=0A=
=0A=
        oCfg.setProperty("visible", true);=0A=
=0A=
    }=0A=
    else {=0A=
=0A=
        /*=0A=
            Even though the "visible" property is queued to =0A=
            "false" by default, we need to set the "visibility" property =
to =0A=
            "hidden" since Overlay's "configVisible" implementation =
checks the =0A=
            element's "visibility" style property before deciding =
whether =0A=
            or not to show an Overlay instance.=0A=
        */=0A=
=0A=
        Dom.setStyle(oElement, "visibility", "hidden");=0A=
    =0A=
    }=0A=
=0A=
=0A=
    if (sCSSPosition =3D=3D "absolute") {=0A=
=0A=
        nZIndex =3D oCfg.getProperty("zindex");=0A=
=0A=
        if (!nZIndex || nZIndex =3D=3D=3D 0) {=0A=
=0A=
            nZIndex =3D this.parent ? =0A=
                (this.parent.parent.cfg.getProperty("zindex") + 1) : 1;=0A=
=0A=
            oCfg.setProperty("zindex", nZIndex);=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method configIframe=0A=
* @description Event handler for when the "iframe" configuration =
property of =0A=
* the menu changes.=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object representing the menu that =0A=
* fired the event.=0A=
*/=0A=
configIframe: function (p_sType, p_aArgs, p_oMenu) {    =0A=
=0A=
    if (this.cfg.getProperty("position") =3D=3D "dynamic") {=0A=
=0A=
        Menu.superclass.configIframe.call(this, p_sType, p_aArgs, =
p_oMenu);=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method configHideDelay=0A=
* @description Event handler for when the "hidedelay" configuration =
property =0A=
* of the menu changes.=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object representing the menu that =0A=
* fired the event.=0A=
*/=0A=
configHideDelay: function (p_sType, p_aArgs, p_oMenu) {=0A=
=0A=
    var nHideDelay =3D p_aArgs[0],=0A=
        oMouseOutEvent =3D this.mouseOutEvent,=0A=
        oMouseOverEvent =3D this.mouseOverEvent,=0A=
        oKeyDownEvent =3D this.keyDownEvent;=0A=
=0A=
    if (nHideDelay > 0) {=0A=
=0A=
        /*=0A=
            Only assign event handlers once. This way the user change =0A=
            the value for the hidedelay as many times as they want.=0A=
        */=0A=
=0A=
        if (!this._bHideDelayEventHandlersAssigned) {=0A=
=0A=
            oMouseOutEvent.subscribe(this._execHideDelay);=0A=
            oMouseOverEvent.subscribe(this._cancelHideDelay);=0A=
            oKeyDownEvent.subscribe(this._cancelHideDelay);=0A=
=0A=
            this._bHideDelayEventHandlersAssigned =3D true;=0A=
        =0A=
        }=0A=
=0A=
    }=0A=
    else {=0A=
=0A=
        oMouseOutEvent.unsubscribe(this._execHideDelay);=0A=
        oMouseOverEvent.unsubscribe(this._cancelHideDelay);=0A=
        oKeyDownEvent.unsubscribe(this._cancelHideDelay);=0A=
=0A=
        this._bHideDelayEventHandlersAssigned =3D false;=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method configContainer=0A=
* @description Event handler for when the "container" configuration =
property =0A=
* of the menu changes.=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oMenu Object representing the menu that =0A=
* fired the event.=0A=
*/=0A=
configContainer: function (p_sType, p_aArgs, p_oMenu) {=0A=
=0A=
	var oElement =3D p_aArgs[0];=0A=
=0A=
	if (typeof oElement =3D=3D 'string') {=0A=
=0A=
        this.cfg.setProperty("container", =
document.getElementById(oElement), =0A=
                true);=0A=
=0A=
	}=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _setMaxHeight=0A=
* @description "renderEvent" handler used to defer the setting of the =0A=
* "maxheight" configuration property until the menu is rendered in lazy =0A=
* load scenarios.=0A=
* @param {String} p_sType The name of the event that was fired.=0A=
* @param {Array} p_aArgs Collection of arguments sent when the event =0A=
* was fired.=0A=
* @param {Number} p_nMaxHeight Number representing the value to set for =
the =0A=
* "maxheight" configuration property.=0A=
* @private=0A=
*/=0A=
_setMaxHeight: function (p_sType, p_aArgs, p_nMaxHeight) {=0A=
=0A=
    this.cfg.setProperty("maxheight", p_nMaxHeight);=0A=
    this.renderEvent.unsubscribe(this._setMaxHeight);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method configMaxHeight=0A=
* @description Event handler for when the "maxheight" configuration =
property of =0A=
* a Menu changes.=0A=
* @param {String} p_sType The name of the event that was fired.=0A=
* @param {Array} p_aArgs Collection of arguments sent when the event =0A=
* was fired.=0A=
* @param {YAHOO.widget.Menu} p_oMenu The Menu instance fired=0A=
* the event.=0A=
*/=0A=
configMaxHeight: function (p_sType, p_aArgs, p_oMenu) {=0A=
=0A=
    var nMaxHeight =3D p_aArgs[0],=0A=
        oElement =3D this.element,=0A=
        oBody =3D this.body,=0A=
        oHeader =3D this.header,=0A=
        oFooter =3D this.footer,=0A=
        fnMouseOver =3D this._onScrollTargetMouseOver,=0A=
        fnMouseOut =3D this._onScrollTargetMouseOut,=0A=
        nMinScrollHeight =3D this.cfg.getProperty("minscrollheight"),=0A=
        nHeight,=0A=
        nOffsetWidth;=0A=
=0A=
=0A=
    if (nMaxHeight !=3D=3D 0 && nMaxHeight < nMinScrollHeight) {=0A=
    =0A=
        nMaxHeight =3D nMinScrollHeight;=0A=
    =0A=
    }=0A=
=0A=
=0A=
    if (this.lazyLoad && !oBody) {=0A=
=0A=
        this.renderEvent.unsubscribe(this._setMaxHeight);=0A=
    =0A=
        if (nMaxHeight > 0) {=0A=
=0A=
            this.renderEvent.subscribe(this._setMaxHeight, nMaxHeight, =
this);=0A=
=0A=
        }=0A=
=0A=
        return;=0A=
    =0A=
    }=0A=
=0A=
=0A=
    Dom.setStyle(oBody, "height", "");=0A=
    Dom.removeClass(oBody, "yui-menu-body-scrolled");=0A=
=0A=
=0A=
    /*=0A=
        There is a bug in gecko-based browsers where an element whose =0A=
        "position" property is set to "absolute" and "overflow" property =
is set =0A=
        to "hidden" will not render at the correct width when its =0A=
        offsetParent's "position" property is also set to "absolute."  =
It is =0A=
        possible to work around this bug by specifying a value for the =
width =0A=
        property in addition to overflow.=0A=
    */=0A=
=0A=
    if (UA.gecko && this.parent && this.parent.parent && =0A=
        this.parent.parent.cfg.getProperty("position") =3D=3D "dynamic" =
&& =0A=
        !this.cfg.getProperty("width")) {=0A=
=0A=
        nOffsetWidth =3D oElement.offsetWidth;=0A=
=0A=
        /*=0A=
            Measuring the difference of the offsetWidth before and after=0A=
            setting the "width" style attribute allows us to compute the =0A=
            about of padding and borders applied to the element, which =
in =0A=
            turn allows us to set the "width" property correctly.=0A=
        */=0A=
        =0A=
        oElement.style.width =3D nOffsetWidth + "px";=0A=
        oElement.style.width =3D =0A=
                (nOffsetWidth - (oElement.offsetWidth - nOffsetWidth)) + =
"px";=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (!oHeader && !oFooter) {=0A=
=0A=
        this.setHeader("&#32;");=0A=
        this.setFooter("&#32;");=0A=
=0A=
        oHeader =3D this.header;=0A=
        oFooter =3D this.footer;=0A=
=0A=
        Dom.addClass(oHeader, "topscrollbar");=0A=
        Dom.addClass(oFooter, "bottomscrollbar");=0A=
        =0A=
        oElement.insertBefore(oHeader, oBody);=0A=
        oElement.appendChild(oFooter);=0A=
    =0A=
    }=0A=
=0A=
=0A=
    nHeight =3D (nMaxHeight - (oHeader.offsetHeight + =
oHeader.offsetHeight));=0A=
=0A=
=0A=
=0A=
    if (nHeight > 0 && (oBody.offsetHeight > nMaxHeight)) {=0A=
=0A=
        Dom.addClass(oBody, "yui-menu-body-scrolled");=0A=
        Dom.setStyle(oBody, "height", (nHeight + "px"));=0A=
=0A=
        Event.on(oHeader, "mouseover", fnMouseOver, this, true);=0A=
        Event.on(oHeader, "mouseout", fnMouseOut, this, true);=0A=
        Event.on(oFooter, "mouseover", fnMouseOver, this, true);=0A=
        Event.on(oFooter, "mouseout", fnMouseOut, this, true);=0A=
=0A=
        this._disableScrollHeader();=0A=
        this._enableScrollFooter();=0A=
=0A=
    }=0A=
    else if (oHeader && oFooter) {=0A=
=0A=
        this._enableScrollHeader();=0A=
        this._enableScrollFooter();=0A=
=0A=
        Event.removeListener(oHeader, "mouseover", fnMouseOver);=0A=
        Event.removeListener(oHeader, "mouseout", fnMouseOut);=0A=
        Event.removeListener(oFooter, "mouseover", fnMouseOver);=0A=
        Event.removeListener(oFooter, "mouseout", fnMouseOut);=0A=
=0A=
        oElement.removeChild(oHeader);=0A=
        oElement.removeChild(oFooter);=0A=
=0A=
        this.header =3D null;=0A=
        this.footer =3D null;=0A=
    =0A=
    }=0A=
=0A=
    this.cfg.refireEvent("iframe");=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method configClassName=0A=
* @description Event handler for when the "classname" configuration =
property of =0A=
* a menu changes.=0A=
* @param {String} p_sType The name of the event that was fired.=0A=
* @param {Array} p_aArgs Collection of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oMenu The Menu instance fired the event.=0A=
*/=0A=
configClassName: function (p_sType, p_aArgs, p_oMenu) {=0A=
=0A=
    var sClassName =3D p_aArgs[0];=0A=
=0A=
    if (this._sClassName) {=0A=
=0A=
        Dom.removeClass(this.element, this._sClassName);=0A=
=0A=
    }=0A=
=0A=
    Dom.addClass(this.element, sClassName);=0A=
    this._sClassName =3D sClassName;=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onItemAdded=0A=
* @description "itemadded" event handler for a Menu instance.=0A=
* @private=0A=
* @param {String} p_sType The name of the event that was fired.=0A=
* @param {Array} p_aArgs Collection of arguments sent when the event =0A=
* was fired.=0A=
*/=0A=
_onItemAdded: function (p_sType, p_aArgs) {=0A=
=0A=
    var oItem =3D p_aArgs[0];=0A=
    =0A=
    if (oItem) {=0A=
=0A=
        oItem.cfg.setProperty("disabled", true);=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method configDisabled=0A=
* @description Event handler for when the "disabled" configuration =
property of =0A=
* a menu changes.=0A=
* @param {String} p_sType The name of the event that was fired.=0A=
* @param {Array} p_aArgs Collection of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.Menu} p_oMenu The Menu instance fired the event.=0A=
*/=0A=
configDisabled: function (p_sType, p_aArgs, p_oMenu) {=0A=
=0A=
    var bDisabled =3D p_aArgs[0],=0A=
        aItems =3D this.getItems(),=0A=
        nItems,=0A=
        i;=0A=
=0A=
    if (Lang.isArray(aItems)) {=0A=
=0A=
        nItems =3D aItems.length;=0A=
    =0A=
        if (nItems > 0) {=0A=
        =0A=
            i =3D nItems - 1;=0A=
    =0A=
            do {=0A=
    =0A=
                aItems[i].cfg.setProperty("disabled", bDisabled);=0A=
            =0A=
            }=0A=
            while (i--);=0A=
        =0A=
        }=0A=
=0A=
=0A=
        if (bDisabled) {=0A=
=0A=
            this.clearActiveItem(true);=0A=
=0A=
            Dom.addClass(this.element, "disabled");=0A=
=0A=
            this.itemAddedEvent.subscribe(this._onItemAdded);=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            Dom.removeClass(this.element, "disabled");=0A=
=0A=
            this.itemAddedEvent.unsubscribe(this._onItemAdded);=0A=
=0A=
        }=0A=
        =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method onRender=0A=
* @description "render" event handler for the menu.=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
*/=0A=
onRender: function (p_sType, p_aArgs) {=0A=
=0A=
    function sizeShadow() {=0A=
=0A=
        var oElement =3D this.element,=0A=
            oShadow =3D this._shadow;=0A=
    =0A=
        if (oShadow && oElement) {=0A=
=0A=
            oShadow.style.width =3D (oElement.offsetWidth + 6) + "px";=0A=
            oShadow.style.height =3D (oElement.offsetHeight + 1) + "px";=0A=
            =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
=0A=
    function replaceShadow() {=0A=
=0A=
        this.element.appendChild(this._shadow);=0A=
=0A=
    }=0A=
=0A=
=0A=
    function addShadowVisibleClass() {=0A=
    =0A=
        Dom.addClass(this._shadow, "yui-menu-shadow-visible");=0A=
    =0A=
    }=0A=
    =0A=
=0A=
    function removeShadowVisibleClass() {=0A=
=0A=
        Dom.removeClass(this._shadow, "yui-menu-shadow-visible");=0A=
    =0A=
    }=0A=
=0A=
=0A=
    function createShadow() {=0A=
=0A=
        var oShadow =3D this._shadow,=0A=
            oElement,=0A=
            me;=0A=
=0A=
        if (!oShadow) {=0A=
=0A=
            oElement =3D this.element;=0A=
            me =3D this;=0A=
=0A=
            if (!m_oShadowTemplate) {=0A=
=0A=
                m_oShadowTemplate =3D document.createElement("div");=0A=
                m_oShadowTemplate.className =3D =0A=
                    "yui-menu-shadow yui-menu-shadow-visible";=0A=
            =0A=
            }=0A=
=0A=
            oShadow =3D m_oShadowTemplate.cloneNode(false);=0A=
=0A=
            oElement.appendChild(oShadow);=0A=
            =0A=
            this._shadow =3D oShadow;=0A=
=0A=
            this.beforeShowEvent.subscribe(addShadowVisibleClass);=0A=
            this.beforeHideEvent.subscribe(removeShadowVisibleClass);=0A=
=0A=
            if (UA.ie) {=0A=
        =0A=
                /*=0A=
                     Need to call sizeShadow & syncIframe via setTimeout =
for =0A=
                     IE 7 Quirks Mode and IE 6 Standards Mode and Quirks =
Mode =0A=
                     or the shadow and iframe shim will not be sized and =0A=
                     positioned properly.=0A=
                */=0A=
        =0A=
                window.setTimeout(function () { =0A=
        =0A=
                    sizeShadow.call(me); =0A=
                    me.syncIframe();=0A=
        =0A=
                }, 0);=0A=
=0A=
                this.cfg.subscribeToConfigEvent("width", sizeShadow);=0A=
                this.cfg.subscribeToConfigEvent("height", sizeShadow);=0A=
                this.cfg.subscribeToConfigEvent("maxheight", sizeShadow);=0A=
                this.changeContentEvent.subscribe(sizeShadow);=0A=
=0A=
                Module.textResizeEvent.subscribe(sizeShadow, me, true);=0A=
                =0A=
                this.destroyEvent.subscribe(function () {=0A=
                =0A=
                    Module.textResizeEvent.unsubscribe(sizeShadow, me);=0A=
                =0A=
                });=0A=
        =0A=
            }=0A=
=0A=
            this.cfg.subscribeToConfigEvent("maxheight", replaceShadow);=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
=0A=
    function onBeforeShow() {=0A=
    =0A=
        createShadow.call(this);=0A=
=0A=
        this.beforeShowEvent.unsubscribe(onBeforeShow);=0A=
    =0A=
    }=0A=
=0A=
=0A=
    if (this.cfg.getProperty("position") =3D=3D "dynamic") {=0A=
=0A=
        if (this.cfg.getProperty("visible")) {=0A=
=0A=
            createShadow.call(this);=0A=
        =0A=
        }=0A=
        else {=0A=
=0A=
            this.beforeShowEvent.subscribe(onBeforeShow);=0A=
        =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
// Public methods=0A=
=0A=
=0A=
/**=0A=
* @method initEvents=0A=
* @description Initializes the custom events for the menu.=0A=
*/=0A=
initEvents: function () {=0A=
=0A=
	Menu.superclass.initEvents.call(this);=0A=
=0A=
    // Create custom events=0A=
=0A=
    var SIGNATURE =3D CustomEvent.LIST;=0A=
=0A=
    this.mouseOverEvent =3D this.createEvent(EVENT_TYPES.MOUSE_OVER);=0A=
    this.mouseOverEvent.signature =3D SIGNATURE;=0A=
=0A=
    this.mouseOutEvent =3D this.createEvent(EVENT_TYPES.MOUSE_OUT);=0A=
    this.mouseOutEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.mouseDownEvent =3D this.createEvent(EVENT_TYPES.MOUSE_DOWN);=0A=
    this.mouseDownEvent.signature =3D SIGNATURE;=0A=
=0A=
    this.mouseUpEvent =3D this.createEvent(EVENT_TYPES.MOUSE_UP);=0A=
    this.mouseUpEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.clickEvent =3D this.createEvent(EVENT_TYPES.CLICK);=0A=
    this.clickEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.keyPressEvent =3D this.createEvent(EVENT_TYPES.KEY_PRESS);=0A=
    this.keyPressEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.keyDownEvent =3D this.createEvent(EVENT_TYPES.KEY_DOWN);=0A=
    this.keyDownEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.keyUpEvent =3D this.createEvent(EVENT_TYPES.KEY_UP);=0A=
    this.keyUpEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.focusEvent =3D this.createEvent(EVENT_TYPES.FOCUS);=0A=
    this.focusEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.blurEvent =3D this.createEvent(EVENT_TYPES.BLUR);=0A=
    this.blurEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.itemAddedEvent =3D this.createEvent(EVENT_TYPES.ITEM_ADDED);=0A=
    this.itemAddedEvent.signature =3D SIGNATURE;=0A=
    =0A=
    this.itemRemovedEvent =3D this.createEvent(EVENT_TYPES.ITEM_REMOVED);=0A=
    this.itemRemovedEvent.signature =3D SIGNATURE;=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method positionOffScreen=0A=
* @description Positions the menu outside of the boundaries of the =
browser's =0A=
* viewport.  Called automatically when a menu is hidden to ensure that =0A=
* it doesn't force the browser to render uncessary scrollbars.=0A=
*/=0A=
positionOffScreen: function () {=0A=
=0A=
    var oIFrame =3D this.iframe,=0A=
        aPos =3D this.OFF_SCREEN_POSITION;=0A=
=0A=
    Dom.setXY(this.element, aPos);=0A=
    =0A=
    if (oIFrame) {=0A=
=0A=
        Dom.setXY(oIFrame, aPos);=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method getRoot=0A=
* @description Finds the menu's root menu.=0A=
*/=0A=
getRoot: function () {=0A=
=0A=
    var oItem =3D this.parent,=0A=
        oParentMenu;=0A=
=0A=
    if (oItem) {=0A=
=0A=
        oParentMenu =3D oItem.parent;=0A=
=0A=
        return oParentMenu ? oParentMenu.getRoot() : this;=0A=
=0A=
    }=0A=
    else {=0A=
    =0A=
        return this;=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method toString=0A=
* @description Returns a string representing the menu.=0A=
* @return {String}=0A=
*/=0A=
toString: function () {=0A=
=0A=
    var sReturnVal =3D "Menu",=0A=
        sId =3D this.id;=0A=
=0A=
    if (sId) {=0A=
=0A=
        sReturnVal +=3D (" " + sId);=0A=
    =0A=
    }=0A=
=0A=
    return sReturnVal;=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method setItemGroupTitle=0A=
* @description Sets the title of a group of menu items.=0A=
* @param {String} p_sGroupTitle String specifying the title of the group.=0A=
* @param {Number} p_nGroupIndex Optional. Number specifying the group to =
which=0A=
* the title belongs.=0A=
*/=0A=
setItemGroupTitle: function (p_sGroupTitle, p_nGroupIndex) {=0A=
=0A=
    var nGroupIndex,=0A=
        oTitle,=0A=
        i,=0A=
        nFirstIndex;=0A=
        =0A=
    if (typeof p_sGroupTitle =3D=3D "string" && p_sGroupTitle.length > =
0) {=0A=
=0A=
        nGroupIndex =3D typeof p_nGroupIndex =3D=3D "number" ? =
p_nGroupIndex : 0;=0A=
        oTitle =3D this._aGroupTitleElements[nGroupIndex];=0A=
=0A=
=0A=
        if (oTitle) {=0A=
=0A=
            oTitle.innerHTML =3D p_sGroupTitle;=0A=
            =0A=
        }=0A=
        else {=0A=
=0A=
            oTitle =3D document.createElement(this.GROUP_TITLE_TAG_NAME);=0A=
                    =0A=
            oTitle.innerHTML =3D p_sGroupTitle;=0A=
=0A=
            this._aGroupTitleElements[nGroupIndex] =3D oTitle;=0A=
=0A=
        }=0A=
=0A=
=0A=
        i =3D this._aGroupTitleElements.length - 1;=0A=
=0A=
        do {=0A=
=0A=
            if (this._aGroupTitleElements[i]) {=0A=
=0A=
                Dom.removeClass(this._aGroupTitleElements[i], =
"first-of-type");=0A=
=0A=
                nFirstIndex =3D i;=0A=
=0A=
            }=0A=
=0A=
        }=0A=
        while(i--);=0A=
=0A=
=0A=
        if (nFirstIndex !=3D=3D null) {=0A=
=0A=
            Dom.addClass(this._aGroupTitleElements[nFirstIndex], =0A=
                "first-of-type");=0A=
=0A=
        }=0A=
=0A=
        this.changeContentEvent.fire();=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
/**=0A=
* @method addItem=0A=
* @description Appends an item to the menu.=0A=
* @param {YAHOO.widget.MenuItem} p_oItem Object reference for the =
MenuItem =0A=
* instance to be added to the menu.=0A=
* @param {String} p_oItem String specifying the text of the item to be =
added =0A=
* to the menu.=0A=
* @param {Object} p_oItem Object literal containing a set of menu item =0A=
* configuration properties.=0A=
* @param {Number} p_nGroupIndex Optional. Number indicating the group to=0A=
* which the item belongs.=0A=
* @return {YAHOO.widget.MenuItem}=0A=
*/=0A=
addItem: function (p_oItem, p_nGroupIndex) {=0A=
=0A=
    if (p_oItem) {=0A=
=0A=
        return this._addItemToGroup(p_nGroupIndex, p_oItem);=0A=
        =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method addItems=0A=
* @description Adds an array of items to the menu.=0A=
* @param {Array} p_aItems Array of items to be added to the menu.  The =
array =0A=
* can contain strings specifying the text for each item to be created, =
object=0A=
* literals specifying each of the menu item configuration properties, =0A=
* or MenuItem instances.=0A=
* @param {Number} p_nGroupIndex Optional. Number specifying the group to =0A=
* which the items belongs.=0A=
* @return {Array}=0A=
*/=0A=
addItems: function (p_aItems, p_nGroupIndex) {=0A=
=0A=
    var nItems,=0A=
        aItems,=0A=
        oItem,=0A=
        i;=0A=
=0A=
    if (Lang.isArray(p_aItems)) {=0A=
=0A=
        nItems =3D p_aItems.length;=0A=
        aItems =3D [];=0A=
=0A=
        for(i=3D0; i<nItems; i++) {=0A=
=0A=
            oItem =3D p_aItems[i];=0A=
=0A=
            if (oItem) {=0A=
=0A=
                if (Lang.isArray(oItem)) {=0A=
    =0A=
                    aItems[aItems.length] =3D this.addItems(oItem, i);=0A=
    =0A=
                }=0A=
                else {=0A=
    =0A=
                    aItems[aItems.length] =3D =0A=
                        this._addItemToGroup(p_nGroupIndex, oItem);=0A=
                =0A=
                }=0A=
=0A=
            }=0A=
    =0A=
        }=0A=
=0A=
=0A=
        if (aItems.length) {=0A=
        =0A=
            return aItems;=0A=
        =0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method insertItem=0A=
* @description Inserts an item into the menu at the specified index.=0A=
* @param {YAHOO.widget.MenuItem} p_oItem Object reference for the =
MenuItem =0A=
* instance to be added to the menu.=0A=
* @param {String} p_oItem String specifying the text of the item to be =
added =0A=
* to the menu.=0A=
* @param {Object} p_oItem Object literal containing a set of menu item =0A=
* configuration properties.=0A=
* @param {Number} p_nItemIndex Number indicating the ordinal position at =
which=0A=
* the item should be added.=0A=
* @param {Number} p_nGroupIndex Optional. Number indicating the group to =
which =0A=
* the item belongs.=0A=
* @return {YAHOO.widget.MenuItem}=0A=
*/=0A=
insertItem: function (p_oItem, p_nItemIndex, p_nGroupIndex) {=0A=
    =0A=
    if (p_oItem) {=0A=
=0A=
        return this._addItemToGroup(p_nGroupIndex, p_oItem, =
p_nItemIndex);=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method removeItem=0A=
* @description Removes the specified item from the menu.=0A=
* @param {YAHOO.widget.MenuItem} p_oObject Object reference for the =
MenuItem =0A=
* instance to be removed from the menu.=0A=
* @param {Number} p_oObject Number specifying the index of the item =0A=
* to be removed.=0A=
* @param {Number} p_nGroupIndex Optional. Number specifying the group to =0A=
* which the item belongs.=0A=
* @return {YAHOO.widget.MenuItem}=0A=
*/=0A=
removeItem: function (p_oObject, p_nGroupIndex) {=0A=
=0A=
    var oItem;=0A=
    =0A=
    if (typeof p_oObject !=3D "undefined") {=0A=
=0A=
        if (p_oObject instanceof YAHOO.widget.MenuItem) {=0A=
=0A=
            oItem =3D this._removeItemFromGroupByValue(p_nGroupIndex, =
p_oObject);           =0A=
=0A=
        }=0A=
        else if (typeof p_oObject =3D=3D "number") {=0A=
=0A=
            oItem =3D this._removeItemFromGroupByIndex(p_nGroupIndex, =
p_oObject);=0A=
=0A=
        }=0A=
=0A=
        if (oItem) {=0A=
=0A=
            oItem.destroy();=0A=
=0A=
=0A=
            return oItem;=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method getItems=0A=
* @description Returns an array of all of the items in the menu.=0A=
* @return {Array}=0A=
*/=0A=
getItems: function () {=0A=
=0A=
    var aGroups =3D this._aItemGroups,=0A=
        nGroups,=0A=
        aItems =3D [];=0A=
=0A=
    if (Lang.isArray(aGroups)) {=0A=
=0A=
        nGroups =3D aGroups.length;=0A=
=0A=
        return ((nGroups =3D=3D 1) ? aGroups[0] : =0A=
                    (Array.prototype.concat.apply(aItems, aGroups)));=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method getItemGroups=0A=
* @description Multi-dimensional Array representing the menu items as =
they =0A=
* are grouped in the menu.=0A=
* @return {Array}=0A=
*/        =0A=
getItemGroups: function () {=0A=
=0A=
    return this._aItemGroups;=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method getItem=0A=
* @description Returns the item at the specified index.=0A=
* @param {Number} p_nItemIndex Number indicating the ordinal position of =
the =0A=
* item to be retrieved.=0A=
* @param {Number} p_nGroupIndex Optional. Number indicating the group to =
which =0A=
* the item belongs.=0A=
* @return {YAHOO.widget.MenuItem}=0A=
*/=0A=
getItem: function (p_nItemIndex, p_nGroupIndex) {=0A=
    =0A=
    var aGroup;=0A=
    =0A=
    if (typeof p_nItemIndex =3D=3D "number") {=0A=
=0A=
        aGroup =3D this._getItemGroup(p_nGroupIndex);=0A=
=0A=
        if (aGroup) {=0A=
=0A=
            return aGroup[p_nItemIndex];=0A=
        =0A=
        }=0A=
=0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method getSubmenus=0A=
* @description Returns an array of all of the submenus that are =
immediate =0A=
* children of the menu.=0A=
* @return {Array}=0A=
*/=0A=
getSubmenus: function () {=0A=
=0A=
    var aItems =3D this.getItems(),=0A=
        nItems =3D aItems.length,=0A=
        aSubmenus,=0A=
        oSubmenu,=0A=
        oItem,=0A=
        i;=0A=
=0A=
=0A=
    if (nItems > 0) {=0A=
        =0A=
        aSubmenus =3D [];=0A=
=0A=
        for(i=3D0; i<nItems; i++) {=0A=
=0A=
            oItem =3D aItems[i];=0A=
            =0A=
            if (oItem) {=0A=
=0A=
                oSubmenu =3D oItem.cfg.getProperty("submenu");=0A=
                =0A=
                if (oSubmenu) {=0A=
=0A=
                    aSubmenus[aSubmenus.length] =3D oSubmenu;=0A=
=0A=
                }=0A=
            =0A=
            }=0A=
        =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
    return aSubmenus;=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method clearContent=0A=
* @description Removes all of the content from the menu, including the =
menu =0A=
* items, group titles, header and footer.=0A=
*/=0A=
clearContent: function () {=0A=
=0A=
    var aItems =3D this.getItems(),=0A=
        nItems =3D aItems.length,=0A=
        oElement =3D this.element,=0A=
        oBody =3D this.body,=0A=
        oHeader =3D this.header,=0A=
        oFooter =3D this.footer,=0A=
        oItem,=0A=
        oSubmenu,=0A=
        i;=0A=
=0A=
=0A=
    if (nItems > 0) {=0A=
=0A=
        i =3D nItems - 1;=0A=
=0A=
        do {=0A=
=0A=
            oItem =3D aItems[i];=0A=
=0A=
            if (oItem) {=0A=
=0A=
                oSubmenu =3D oItem.cfg.getProperty("submenu");=0A=
=0A=
                if (oSubmenu) {=0A=
=0A=
                    this.cfg.configChangedEvent.unsubscribe(=0A=
                        this._onParentMenuConfigChange, oSubmenu);=0A=
=0A=
                    =
this.renderEvent.unsubscribe(this._onParentMenuRender, =0A=
                        oSubmenu);=0A=
=0A=
                }=0A=
                =0A=
                this.removeItem(oItem);=0A=
=0A=
            }=0A=
        =0A=
        }=0A=
        while(i--);=0A=
=0A=
    }=0A=
=0A=
=0A=
    if (oHeader) {=0A=
=0A=
        Event.purgeElement(oHeader);=0A=
        oElement.removeChild(oHeader);=0A=
=0A=
    }=0A=
    =0A=
=0A=
    if (oFooter) {=0A=
=0A=
        Event.purgeElement(oFooter);=0A=
        oElement.removeChild(oFooter);=0A=
    }=0A=
=0A=
=0A=
    if (oBody) {=0A=
=0A=
        Event.purgeElement(oBody);=0A=
=0A=
        oBody.innerHTML =3D "";=0A=
=0A=
    }=0A=
=0A=
    this.activeItem =3D null;=0A=
=0A=
    this._aItemGroups =3D [];=0A=
    this._aListElements =3D [];=0A=
    this._aGroupTitleElements =3D [];=0A=
=0A=
    this.cfg.setProperty("width", null);=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method destroy=0A=
* @description Removes the menu's <code>&#60;div&#62;</code> element =0A=
* (and accompanying child nodes) from the document.=0A=
*/=0A=
destroy: function () {=0A=
=0A=
    // Remove all items=0A=
=0A=
    this.clearContent();=0A=
=0A=
    this._aItemGroups =3D null;=0A=
    this._aListElements =3D null;=0A=
    this._aGroupTitleElements =3D null;=0A=
=0A=
=0A=
    // Continue with the superclass implementation of this method=0A=
=0A=
    Menu.superclass.destroy.call(this);=0A=
    =0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method setInitialFocus=0A=
* @description Sets focus to the menu's first enabled item.=0A=
*/=0A=
setInitialFocus: function () {=0A=
=0A=
    var oItem =3D this._getFirstEnabledItem();=0A=
    =0A=
    if (oItem) {=0A=
=0A=
        oItem.focus();=0A=
=0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method setInitialSelection=0A=
* @description Sets the "selected" configuration property of the menu's =
first =0A=
* enabled item to "true."=0A=
*/=0A=
setInitialSelection: function () {=0A=
=0A=
    var oItem =3D this._getFirstEnabledItem();=0A=
    =0A=
    if (oItem) {=0A=
    =0A=
        oItem.cfg.setProperty("selected", true);=0A=
    }        =0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method clearActiveItem=0A=
* @description Sets the "selected" configuration property of the menu's =
active=0A=
* item to "false" and hides the item's submenu.=0A=
* @param {Boolean} p_bBlur Boolean indicating if the menu's active item =0A=
* should be blurred.  =0A=
*/=0A=
clearActiveItem: function (p_bBlur) {=0A=
=0A=
    if (this.cfg.getProperty("showdelay") > 0) {=0A=
    =0A=
        this._cancelShowDelay();=0A=
    =0A=
    }=0A=
=0A=
=0A=
    var oActiveItem =3D this.activeItem,=0A=
        oConfig,=0A=
        oSubmenu;=0A=
=0A=
    if (oActiveItem) {=0A=
=0A=
        oConfig =3D oActiveItem.cfg;=0A=
=0A=
        if (p_bBlur) {=0A=
=0A=
            oActiveItem.blur();=0A=
        =0A=
        }=0A=
=0A=
        oConfig.setProperty("selected", false);=0A=
=0A=
        oSubmenu =3D oConfig.getProperty("submenu");=0A=
=0A=
        if (oSubmenu) {=0A=
=0A=
            oSubmenu.hide();=0A=
=0A=
        }=0A=
=0A=
        this.activeItem =3D null;            =0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method focus=0A=
* @description Causes the menu to receive focus and fires the "focus" =
event.=0A=
*/=0A=
focus: function () {=0A=
=0A=
    if (!this.hasFocus()) {=0A=
=0A=
        this.setInitialFocus();=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method blur=0A=
* @description Causes the menu to lose focus and fires the "blur" event.=0A=
*/    =0A=
blur: function () {=0A=
=0A=
    var oItem;=0A=
=0A=
    if (this.hasFocus()) {=0A=
    =0A=
        oItem =3D MenuManager.getFocusedMenuItem();=0A=
        =0A=
        if (oItem) {=0A=
=0A=
            oItem.blur();=0A=
=0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method hasFocus=0A=
* @description Returns a boolean indicating whether or not the menu has =
focus.=0A=
* @return {Boolean}=0A=
*/=0A=
hasFocus: function () {=0A=
=0A=
    return (MenuManager.getFocusedMenu() =3D=3D this.getRoot());=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* Adds the specified CustomEvent subscriber to the menu and each of =0A=
* its submenus.=0A=
* @method subscribe=0A=
* @param p_type     {string}   the type, or name of the event=0A=
* @param p_fn       {function} the function to exectute when the event =
fires=0A=
* @param p_obj      {Object}   An object to be passed along when the =
event =0A=
*                              fires=0A=
* @param p_override {boolean}  If true, the obj passed in becomes the =0A=
*                              execution scope of the listener=0A=
*/=0A=
subscribe: function () {=0A=
=0A=
    function onItemAdded(p_sType, p_aArgs, p_oObject) {=0A=
=0A=
        var oItem =3D p_aArgs[0],=0A=
            oSubmenu =3D oItem.cfg.getProperty("submenu");=0A=
=0A=
        if (oSubmenu) {=0A=
=0A=
            oSubmenu.subscribe.apply(oSubmenu, p_oObject);=0A=
=0A=
        }=0A=
    =0A=
    }=0A=
=0A=
=0A=
    function onSubmenuAdded(p_sType, p_aArgs, p_oObject) { =0A=
    =0A=
        var oSubmenu =3D this.cfg.getProperty("submenu");=0A=
        =0A=
        if (oSubmenu) {=0A=
=0A=
            oSubmenu.subscribe.apply(oSubmenu, p_oObject);=0A=
        =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
=0A=
    Menu.superclass.subscribe.apply(this, arguments);=0A=
    Menu.superclass.subscribe.call(this, "itemAdded", onItemAdded, =
arguments);=0A=
=0A=
=0A=
    var aItems =3D this.getItems(),=0A=
        nItems,=0A=
        oItem,=0A=
        oSubmenu,=0A=
        i;=0A=
        =0A=
=0A=
    if (aItems) {=0A=
=0A=
        nItems =3D aItems.length;=0A=
        =0A=
        if (nItems > 0) {=0A=
        =0A=
            i =3D nItems - 1;=0A=
            =0A=
            do {=0A=
=0A=
                oItem =3D aItems[i];=0A=
                =0A=
                oSubmenu =3D oItem.cfg.getProperty("submenu");=0A=
                =0A=
                if (oSubmenu) {=0A=
                =0A=
                    oSubmenu.subscribe.apply(oSubmenu, arguments);=0A=
                =0A=
                }=0A=
                else {=0A=
                =0A=
                    oItem.cfg.subscribeToConfigEvent("submenu", =
onSubmenuAdded, arguments);=0A=
                =0A=
                }=0A=
=0A=
            }=0A=
            while (i--);=0A=
        =0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @description Initializes the class's configurable properties which can =
be=0A=
* changed using the menu's Config object ("cfg").=0A=
* @method initDefaultConfig=0A=
*/=0A=
initDefaultConfig: function () {=0A=
=0A=
    Menu.superclass.initDefaultConfig.call(this);=0A=
=0A=
    var oConfig =3D this.cfg;=0A=
=0A=
=0A=
    // Module documentation overrides=0A=
=0A=
    /**=0A=
    * @config effect=0A=
    * @description Object or array of objects representing the =
ContainerEffect =0A=
    * classes that are active for animating the container.  When set =
this =0A=
    * property is automatically applied to all submenus.=0A=
    * @type Object=0A=
    * @default null=0A=
    */=0A=
=0A=
    // Overlay documentation overrides=0A=
=0A=
=0A=
    /**=0A=
    * @config x=0A=
    * @description Number representing the absolute x-coordinate =
position of =0A=
    * the Menu.  This property is only applied when the "position" =0A=
    * configuration property is set to dynamic.=0A=
    * @type Number=0A=
    * @default null=0A=
    */=0A=
    =0A=
=0A=
    /**=0A=
    * @config y=0A=
    * @description Number representing the absolute y-coordinate =
position of =0A=
    * the Menu.  This property is only applied when the "position" =0A=
    * configuration property is set to dynamic.=0A=
    * @type Number=0A=
    * @default null=0A=
    */=0A=
=0A=
=0A=
    /**=0A=
    * @description Array of the absolute x and y positions of the Menu.  =
This =0A=
    * property is only applied when the "position" configuration =
property is =0A=
    * set to dynamic.=0A=
    * @config xy=0A=
    * @type Number[]=0A=
    * @default null=0A=
    */=0A=
    =0A=
=0A=
    /**=0A=
    * @config context=0A=
    * @description Array of context arguments for context-sensitive =
positioning.  =0A=
    * The format is: [id or element, element corner, context corner]. =0A=
    * For example, setting this property to ["img1", "tl", "bl"] would =0A=
    * align the Mnu's top left corner to the context element's =0A=
    * bottom left corner.  This property is only applied when the =
"position" =0A=
    * configuration property is set to dynamic.=0A=
    * @type Array=0A=
    * @default null=0A=
    */=0A=
    =0A=
    =0A=
    /**=0A=
    * @config fixedcenter=0A=
    * @description Boolean indicating if the Menu should be anchored to =
the =0A=
    * center of the viewport.  This property is only applied when the =0A=
    * "position" configuration property is set to dynamic.=0A=
    * @type Boolean=0A=
    * @default false=0A=
    */=0A=
=0A=
    =0A=
    /**=0A=
    * @config zindex=0A=
    * @description Number representing the CSS z-index of the Menu.  =
This =0A=
    * property is only applied when the "position" configuration =
property is =0A=
    * set to dynamic.=0A=
    * @type Number=0A=
    * @default null=0A=
    */=0A=
    =0A=
    =0A=
    /**=0A=
    * @config iframe=0A=
    * @description Boolean indicating whether or not the Menu should =0A=
    * have an IFRAME shim; used to prevent SELECT elements from =0A=
    * poking through an Overlay instance in IE6.  When set to "true", =0A=
    * the iframe shim is created when the Menu instance is intially=0A=
    * made visible.  This property is only applied when the "position" =0A=
    * configuration property is set to dynamic and is automatically =
applied =0A=
    * to all submenus.=0A=
    * @type Boolean=0A=
    * @default true for IE6 and below, false for all other browsers.=0A=
    */=0A=
=0A=
=0A=
	// Add configuration attributes=0A=
=0A=
    /*=0A=
        Change the default value for the "visible" configuration =0A=
        property to "false" by re-adding the property.=0A=
    */=0A=
=0A=
    /**=0A=
    * @config visible=0A=
    * @description Boolean indicating whether or not the menu is =
visible.  If =0A=
    * the menu's "position" configuration property is set to "dynamic" =
(the =0A=
    * default), this property toggles the menu's =
<code>&#60;div&#62;</code> =0A=
    * element's "visibility" style property between "visible" (true) or =0A=
    * "hidden" (false).  If the menu's "position" configuration property =
is =0A=
    * set to "static" this property toggles the menu's =0A=
    * <code>&#60;div&#62;</code> element's "display" style property =0A=
    * between "block" (true) or "none" (false).=0A=
    * @default false=0A=
    * @type Boolean=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.VISIBLE.key, =0A=
        {=0A=
            handler: this.configVisible, =0A=
            value: DEFAULT_CONFIG.VISIBLE.value, =0A=
            validator: DEFAULT_CONFIG.VISIBLE.validator=0A=
         }=0A=
     );=0A=
=0A=
=0A=
    /*=0A=
        Change the default value for the "constraintoviewport" =
configuration =0A=
        property to "true" by re-adding the property.=0A=
    */=0A=
=0A=
    /**=0A=
    * @config constraintoviewport=0A=
    * @description Boolean indicating if the menu will try to remain =
inside =0A=
    * the boundaries of the size of viewport.  This property is only =
applied =0A=
    * when the "position" configuration property is set to dynamic and =
is =0A=
    * automatically applied to all submenus.=0A=
    * @default true=0A=
    * @type Boolean=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.CONSTRAIN_TO_VIEWPORT.key, =0A=
        {=0A=
            handler: this.configConstrainToViewport, =0A=
            value: DEFAULT_CONFIG.CONSTRAIN_TO_VIEWPORT.value, =0A=
            validator: DEFAULT_CONFIG.CONSTRAIN_TO_VIEWPORT.validator, =0A=
            supercedes: DEFAULT_CONFIG.CONSTRAIN_TO_VIEWPORT.supercedes =0A=
        } =0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config position=0A=
    * @description String indicating how a menu should be positioned on =
the =0A=
    * screen.  Possible values are "static" and "dynamic."  Static menus =
are =0A=
    * visible by default and reside in the normal flow of the document =0A=
    * (CSS position: static).  Dynamic menus are hidden by default, =
reside =0A=
    * out of the normal flow of the document (CSS position: absolute), =
and =0A=
    * can overlay other elements on the screen.=0A=
    * @default dynamic=0A=
    * @type String=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.POSITION.key, =0A=
        {=0A=
            handler: this.configPosition,=0A=
            value: DEFAULT_CONFIG.POSITION.value, =0A=
            validator: DEFAULT_CONFIG.POSITION.validator,=0A=
            supercedes: DEFAULT_CONFIG.POSITION.supercedes=0A=
        }=0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config submenualignment=0A=
    * @description Array defining how submenus should be aligned to =
their =0A=
    * parent menu item. The format is: [itemCorner, submenuCorner]. By =
default=0A=
    * a submenu's top left corner is aligned to its parent menu item's =
top =0A=
    * right corner.=0A=
    * @default ["tl","tr"]=0A=
    * @type Array=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.SUBMENU_ALIGNMENT.key, =0A=
        { =0A=
            value: DEFAULT_CONFIG.SUBMENU_ALIGNMENT.value,=0A=
            suppressEvent: DEFAULT_CONFIG.SUBMENU_ALIGNMENT.suppressEvent=0A=
        }=0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config autosubmenudisplay=0A=
    * @description Boolean indicating if submenus are automatically made =0A=
    * visible when the user mouses over the menu's items.=0A=
    * @default true=0A=
    * @type Boolean=0A=
    */=0A=
	oConfig.addProperty(=0A=
	   DEFAULT_CONFIG.AUTO_SUBMENU_DISPLAY.key, =0A=
	   { =0A=
	       value: DEFAULT_CONFIG.AUTO_SUBMENU_DISPLAY.value, =0A=
	       validator: DEFAULT_CONFIG.AUTO_SUBMENU_DISPLAY.validator,=0A=
	       suppressEvent: DEFAULT_CONFIG.AUTO_SUBMENU_DISPLAY.suppressEvent=0A=
       } =0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config showdelay=0A=
    * @description Number indicating the time (in milliseconds) that =
should =0A=
    * expire before a submenu is made visible when the user mouses over =0A=
    * the menu's items.  This property is only applied when the =
"position" =0A=
    * configuration property is set to dynamic and is automatically =
applied =0A=
    * to all submenus.=0A=
    * @default 250=0A=
    * @type Number=0A=
    */=0A=
	oConfig.addProperty(=0A=
	   DEFAULT_CONFIG.SHOW_DELAY.key, =0A=
	   { =0A=
	       value: DEFAULT_CONFIG.SHOW_DELAY.value, =0A=
	       validator: DEFAULT_CONFIG.SHOW_DELAY.validator,=0A=
	       suppressEvent: DEFAULT_CONFIG.SHOW_DELAY.suppressEvent=0A=
       } =0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config hidedelay=0A=
    * @description Number indicating the time (in milliseconds) that =
should =0A=
    * expire before the menu is hidden.  This property is only applied =
when =0A=
    * the "position" configuration property is set to dynamic and is =0A=
    * automatically applied to all submenus.=0A=
    * @default 0=0A=
    * @type Number=0A=
    */=0A=
	oConfig.addProperty(=0A=
	   DEFAULT_CONFIG.HIDE_DELAY.key, =0A=
	   { =0A=
	       handler: this.configHideDelay,=0A=
	       value: DEFAULT_CONFIG.HIDE_DELAY.value, =0A=
	       validator: DEFAULT_CONFIG.HIDE_DELAY.validator, =0A=
	       suppressEvent: DEFAULT_CONFIG.HIDE_DELAY.suppressEvent=0A=
       } =0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config submenuhidedelay=0A=
    * @description Number indicating the time (in milliseconds) that =
should =0A=
    * expire before a submenu is hidden when the user mouses out of a =
menu item =0A=
    * heading in the direction of a submenu.  The value must be greater =
than or =0A=
    * equal to the value specified for the "showdelay" configuration =
property.=0A=
    * This property is only applied when the "position" configuration =
property =0A=
    * is set to dynamic and is automatically applied to all submenus.=0A=
    * @default 250=0A=
    * @type Number=0A=
    */=0A=
	oConfig.addProperty(=0A=
	   DEFAULT_CONFIG.SUBMENU_HIDE_DELAY.key, =0A=
	   { =0A=
	       value: DEFAULT_CONFIG.SUBMENU_HIDE_DELAY.value, =0A=
	       validator: DEFAULT_CONFIG.SUBMENU_HIDE_DELAY.validator,=0A=
	       suppressEvent: DEFAULT_CONFIG.SUBMENU_HIDE_DELAY.suppressEvent=0A=
       } =0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config clicktohide=0A=
    * @description Boolean indicating if the menu will automatically be =0A=
    * hidden if the user clicks outside of it.  This property is only =0A=
    * applied when the "position" configuration property is set to =
dynamic =0A=
    * and is automatically applied to all submenus.=0A=
    * @default true=0A=
    * @type Boolean=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.CLICK_TO_HIDE.key,=0A=
        {=0A=
            value: DEFAULT_CONFIG.CLICK_TO_HIDE.value,=0A=
            validator: DEFAULT_CONFIG.CLICK_TO_HIDE.validator,=0A=
            suppressEvent: DEFAULT_CONFIG.CLICK_TO_HIDE.suppressEvent=0A=
        }=0A=
    );=0A=
=0A=
=0A=
	/**=0A=
	* @config container=0A=
	* @description HTML element reference or string specifying the id =0A=
	* attribute of the HTML element that the menu's markup should be =0A=
	* rendered into.=0A=
	* @type <a href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
	* level-one-html.html#ID-58190037">HTMLElement</a>|String=0A=
	* @default document.body=0A=
	*/=0A=
	oConfig.addProperty(=0A=
	   DEFAULT_CONFIG.CONTAINER.key, =0A=
	   { =0A=
	       handler: this.configContainer,=0A=
	       value: document.body,=0A=
           suppressEvent: DEFAULT_CONFIG.CONTAINER.suppressEvent=0A=
       } =0A=
   );=0A=
=0A=
=0A=
    /**=0A=
    * @config scrollincrement=0A=
    * @description Number used to control the scroll speed of a menu.  =
Used to =0A=
    * increment the "scrollTop" property of the menu's body by when a =
menu's =0A=
    * content is scrolling.  When set this property is automatically =
applied =0A=
    * to all submenus.=0A=
    * @default 1=0A=
    * @type Number=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.SCROLL_INCREMENT.key, =0A=
        { =0A=
            value: DEFAULT_CONFIG.SCROLL_INCREMENT.value, =0A=
            validator: DEFAULT_CONFIG.SCROLL_INCREMENT.validator,=0A=
            supercedes: DEFAULT_CONFIG.SCROLL_INCREMENT.supercedes,=0A=
            suppressEvent: DEFAULT_CONFIG.SCROLL_INCREMENT.suppressEvent=0A=
        }=0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config minscrollheight=0A=
    * @description Number defining the minimum threshold for the =
"maxheight" =0A=
    * configuration property.  When set this property is automatically =
applied =0A=
    * to all submenus.=0A=
    * @default 90=0A=
    * @type Number=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.MIN_SCROLL_HEIGHT.key, =0A=
        { =0A=
            value: DEFAULT_CONFIG.MIN_SCROLL_HEIGHT.value, =0A=
            validator: DEFAULT_CONFIG.MIN_SCROLL_HEIGHT.validator,=0A=
            supercedes: DEFAULT_CONFIG.MIN_SCROLL_HEIGHT.supercedes,=0A=
            suppressEvent: DEFAULT_CONFIG.MIN_SCROLL_HEIGHT.suppressEvent=0A=
        }=0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config maxheight=0A=
    * @description Number defining the maximum height (in pixels) for a =
menu's =0A=
    * body element (<code>&#60;div class=3D"bd"&#60;</code>).  Once a =
menu's body =0A=
    * exceeds this height, the contents of the body are scrolled to =
maintain =0A=
    * this value.  This value cannot be set lower than the value of the =0A=
    * "minscrollheight" configuration property.=0A=
    * @default 0=0A=
    * @type Number=0A=
    */=0A=
    oConfig.addProperty(=0A=
       DEFAULT_CONFIG.MAX_HEIGHT.key, =0A=
       {=0A=
            handler: this.configMaxHeight,=0A=
            value: DEFAULT_CONFIG.MAX_HEIGHT.value,=0A=
            validator: DEFAULT_CONFIG.MAX_HEIGHT.validator,=0A=
            suppressEvent: DEFAULT_CONFIG.MAX_HEIGHT.suppressEvent,=0A=
            supercedes: DEFAULT_CONFIG.MAX_HEIGHT.supercedes            =0A=
       } =0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config classname=0A=
    * @description String representing the CSS class to be applied to =
the =0A=
    * menu's root <code>&#60;div&#62;</code> element.  The specified =
class(es)  =0A=
    * are appended in addition to the default class as specified by the =
menu's=0A=
    * CSS_CLASS_NAME constant. When set this property is automatically =0A=
    * applied to all submenus.=0A=
    * @default null=0A=
    * @type String=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.CLASS_NAME.key, =0A=
        { =0A=
            handler: this.configClassName,=0A=
            value: DEFAULT_CONFIG.CLASS_NAME.value, =0A=
            validator: DEFAULT_CONFIG.CLASS_NAME.validator,=0A=
            supercedes: DEFAULT_CONFIG.CLASS_NAME.supercedes      =0A=
        }=0A=
    );=0A=
=0A=
=0A=
    /**=0A=
    * @config disabled=0A=
    * @description Boolean indicating if the menu should be disabled.  =0A=
    * Disabling a menu disables each of its items.  (Disabled menu items =
are =0A=
    * dimmed and will not respond to user input or fire events.)  =
Disabled=0A=
    * menus have a corresponding "disabled" CSS class applied to their =
root=0A=
    * <code>&#60;div&#62;</code> element.=0A=
    * @default false=0A=
    * @type Boolean=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.DISABLED.key, =0A=
        { =0A=
            handler: this.configDisabled,=0A=
            value: DEFAULT_CONFIG.DISABLED.value, =0A=
            validator: DEFAULT_CONFIG.DISABLED.validator,=0A=
            suppressEvent: DEFAULT_CONFIG.DISABLED.suppressEvent=0A=
        }=0A=
    );=0A=
=0A=
}=0A=
=0A=
}); // END YAHOO.lang.extend=0A=
=0A=
})();=0A=
=0A=
=0A=
=0A=
(function () {=0A=
=0A=
=0A=
/**=0A=
* Creates an item for a menu.=0A=
* =0A=
* @param {String} p_oObject String specifying the text of the menu item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-74680021">HTMLLIElement</a>} p_oObject Object =
specifying =0A=
* the <code>&#60;li&#62;</code> element of the menu item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-38450247">HTMLOptGroupElement</a>} p_oObject Object =0A=
* specifying the <code>&#60;optgroup&#62;</code> element of the menu =
item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-70901257">HTMLOptionElement</a>} p_oObject Object =0A=
* specifying the <code>&#60;option&#62;</code> element of the menu item.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the menu item. See configuration class documentation =0A=
* for more details.=0A=
* @class MenuItem=0A=
* @constructor=0A=
*/=0A=
YAHOO.widget.MenuItem =3D function (p_oObject, p_oConfig) {=0A=
=0A=
    if (p_oObject) {=0A=
=0A=
        if (p_oConfig) {=0A=
    =0A=
            this.parent =3D p_oConfig.parent;=0A=
            this.value =3D p_oConfig.value;=0A=
            this.id =3D p_oConfig.id;=0A=
=0A=
        }=0A=
=0A=
        this.init(p_oObject, p_oConfig);=0A=
=0A=
    }=0A=
=0A=
};=0A=
=0A=
=0A=
var Dom =3D YAHOO.util.Dom,=0A=
    Module =3D YAHOO.widget.Module,=0A=
    Menu =3D YAHOO.widget.Menu,=0A=
    MenuItem =3D YAHOO.widget.MenuItem,=0A=
    CustomEvent =3D YAHOO.util.CustomEvent,=0A=
    Lang =3D YAHOO.lang,=0A=
=0A=
    m_oMenuItemTemplate,=0A=
=0A=
    /**=0A=
    * Constant representing the name of the MenuItem's events=0A=
    * @property EVENT_TYPES=0A=
    * @private=0A=
    * @final=0A=
    * @type Object=0A=
    */=0A=
    EVENT_TYPES =3D {=0A=
    =0A=
        "MOUSE_OVER": "mouseover",=0A=
        "MOUSE_OUT": "mouseout",=0A=
        "MOUSE_DOWN": "mousedown",=0A=
        "MOUSE_UP": "mouseup",=0A=
        "CLICK": "click",=0A=
        "KEY_PRESS": "keypress",=0A=
        "KEY_DOWN": "keydown",=0A=
        "KEY_UP": "keyup",=0A=
        "ITEM_ADDED": "itemAdded",=0A=
        "ITEM_REMOVED": "itemRemoved",=0A=
        "FOCUS": "focus",=0A=
        "BLUR": "blur",=0A=
        "DESTROY": "destroy"=0A=
    =0A=
    },=0A=
=0A=
    /**=0A=
    * Constant representing the MenuItem's configuration properties=0A=
    * @property DEFAULT_CONFIG=0A=
    * @private=0A=
    * @final=0A=
    * @type Object=0A=
    */=0A=
    DEFAULT_CONFIG =3D {=0A=
    =0A=
        "TEXT": { =0A=
            key: "text", =0A=
            value: "", =0A=
            validator: Lang.isString, =0A=
            suppressEvent: true =0A=
        }, =0A=
    =0A=
        "HELP_TEXT": { =0A=
            key: "helptext",=0A=
            supercedes: ["text"], =0A=
            suppressEvent: true =0A=
        },=0A=
    =0A=
        "URL": { =0A=
            key: "url", =0A=
            value: "#", =0A=
            suppressEvent: true =0A=
        }, =0A=
    =0A=
        "TARGET": { =0A=
            key: "target", =0A=
            suppressEvent: true =0A=
        }, =0A=
    =0A=
        "EMPHASIS": { =0A=
            key: "emphasis", =0A=
            value: false, =0A=
            validator: Lang.isBoolean, =0A=
            suppressEvent: true, =0A=
            supercedes: ["text"]=0A=
        }, =0A=
    =0A=
        "STRONG_EMPHASIS": { =0A=
            key: "strongemphasis", =0A=
            value: false, =0A=
            validator: Lang.isBoolean, =0A=
            suppressEvent: true,=0A=
            supercedes: ["text"]=0A=
        },=0A=
    =0A=
        "CHECKED": { =0A=
            key: "checked", =0A=
            value: false, =0A=
            validator: Lang.isBoolean, =0A=
            suppressEvent: true, =0A=
            supercedes: ["disabled", "selected"]=0A=
        }, =0A=
=0A=
        "SUBMENU": { =0A=
            key: "submenu",=0A=
            suppressEvent: true,=0A=
            supercedes: ["disabled", "selected"]=0A=
        },=0A=
    =0A=
        "DISABLED": { =0A=
            key: "disabled", =0A=
            value: false, =0A=
            validator: Lang.isBoolean, =0A=
            suppressEvent: true,=0A=
            supercedes: ["text", "selected"]=0A=
        },=0A=
    =0A=
        "SELECTED": { =0A=
            key: "selected", =0A=
            value: false, =0A=
            validator: Lang.isBoolean, =0A=
            suppressEvent: true=0A=
        },=0A=
    =0A=
        "ONCLICK": { =0A=
            key: "onclick",=0A=
            suppressEvent: true=0A=
        },=0A=
    =0A=
        "CLASS_NAME": { =0A=
            key: "classname", =0A=
            value: null, =0A=
            validator: Lang.isString,=0A=
            suppressEvent: true=0A=
        }=0A=
    =0A=
    };=0A=
=0A=
=0A=
MenuItem.prototype =3D {=0A=
=0A=
    /**=0A=
    * @property CSS_CLASS_NAME=0A=
    * @description String representing the CSS class(es) to be applied =
to the =0A=
    * <code>&#60;li&#62;</code> element of the menu item.=0A=
    * @default "yuimenuitem"=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    CSS_CLASS_NAME: "yuimenuitem",=0A=
=0A=
=0A=
    /**=0A=
    * @property CSS_LABEL_CLASS_NAME=0A=
    * @description String representing the CSS class(es) to be applied =
to the =0A=
    * menu item's <code>&#60;a&#62;</code> element.=0A=
    * @default "yuimenuitemlabel"=0A=
    * @final=0A=
    * @type String=0A=
    */=0A=
    CSS_LABEL_CLASS_NAME: "yuimenuitemlabel",=0A=
=0A=
=0A=
    /**=0A=
    * @property SUBMENU_TYPE=0A=
    * @description Object representing the type of menu to instantiate =
and =0A=
    * add when parsing the child nodes of the menu item's source HTML =
element.=0A=
    * @final=0A=
    * @type YAHOO.widget.Menu=0A=
    */=0A=
    SUBMENU_TYPE: null,=0A=
=0A=
=0A=
=0A=
    // Private member variables=0A=
    =0A=
=0A=
    /**=0A=
    * @property _oAnchor=0A=
    * @description Object reference to the menu item's =0A=
    * <code>&#60;a&#62;</code> element.=0A=
    * @default null =0A=
    * @private=0A=
    * @type <a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
    * one-html.html#ID-48250443">HTMLAnchorElement</a>=0A=
    */=0A=
    _oAnchor: null,=0A=
    =0A=
    =0A=
    /**=0A=
    * @property _oHelpTextEM=0A=
    * @description Object reference to the menu item's help text =0A=
    * <code>&#60;em&#62;</code> element.=0A=
    * @default null=0A=
    * @private=0A=
    * @type <a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
    * one-html.html#ID-58190037">HTMLElement</a>=0A=
    */=0A=
    _oHelpTextEM: null,=0A=
    =0A=
    =0A=
    /**=0A=
    * @property _oSubmenu=0A=
    * @description Object reference to the menu item's submenu.=0A=
    * @default null=0A=
    * @private=0A=
    * @type YAHOO.widget.Menu=0A=
    */=0A=
    _oSubmenu: null,=0A=
=0A=
=0A=
    /** =0A=
    * @property _oOnclickAttributeValue=0A=
    * @description Object reference to the menu item's current value for =
the =0A=
    * "onclick" configuration attribute.=0A=
    * @default null=0A=
    * @private=0A=
    * @type Object=0A=
    */=0A=
    _oOnclickAttributeValue: null,=0A=
=0A=
=0A=
    /**=0A=
    * @property _sClassName=0A=
    * @description The current value of the "classname" configuration =
attribute.=0A=
    * @default null=0A=
    * @private=0A=
    * @type String=0A=
    */=0A=
    _sClassName: null,=0A=
=0A=
=0A=
=0A=
    // Public properties=0A=
=0A=
=0A=
	/**=0A=
    * @property constructor=0A=
	* @description Object reference to the menu item's constructor function.=0A=
    * @default YAHOO.widget.MenuItem=0A=
	* @type YAHOO.widget.MenuItem=0A=
	*/=0A=
	constructor: MenuItem,=0A=
=0A=
=0A=
    /**=0A=
    * @property index=0A=
    * @description Number indicating the ordinal position of the menu =
item in =0A=
    * its group.=0A=
    * @default null=0A=
    * @type Number=0A=
    */=0A=
    index: null,=0A=
=0A=
=0A=
    /**=0A=
    * @property groupIndex=0A=
    * @description Number indicating the index of the group to which the =
menu =0A=
    * item belongs.=0A=
    * @default null=0A=
    * @type Number=0A=
    */=0A=
    groupIndex: null,=0A=
=0A=
=0A=
    /**=0A=
    * @property parent=0A=
    * @description Object reference to the menu item's parent menu.=0A=
    * @default null=0A=
    * @type YAHOO.widget.Menu=0A=
    */=0A=
    parent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @property element=0A=
    * @description Object reference to the menu item's =0A=
    * <code>&#60;li&#62;</code> element.=0A=
    * @default <a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level=0A=
    * -one-html.html#ID-74680021">HTMLLIElement</a>=0A=
    * @type <a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
    * one-html.html#ID-74680021">HTMLLIElement</a>=0A=
    */=0A=
    element: null,=0A=
=0A=
=0A=
    /**=0A=
    * @property srcElement=0A=
    * @description Object reference to the HTML element (either =0A=
    * <code>&#60;li&#62;</code>, <code>&#60;optgroup&#62;</code> or =0A=
    * <code>&#60;option&#62;</code>) used create the menu item.=0A=
    * @default <a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
    * level-one-html.html#ID-74680021">HTMLLIElement</a>|<a =
href=3D"http://www.=0A=
    * =
w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-html.html#ID-38450247"=0A=
    * >HTMLOptGroupElement</a>|<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-=0A=
    * =
Level-1-20000929/level-one-html.html#ID-70901257">HTMLOptionElement</a>=0A=
    * @type <a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
    * one-html.html#ID-74680021">HTMLLIElement</a>|<a =
href=3D"http://www.w3.=0A=
    * =
org/TR/2000/WD-DOM-Level-1-20000929/level-one-html.html#ID-38450247">=0A=
    * HTMLOptGroupElement</a>|<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-=0A=
    * =
Level-1-20000929/level-one-html.html#ID-70901257">HTMLOptionElement</a>=0A=
    */=0A=
    srcElement: null,=0A=
=0A=
=0A=
    /**=0A=
    * @property value=0A=
    * @description Object reference to the menu item's value.=0A=
    * @default null=0A=
    * @type Object=0A=
    */=0A=
    value: null,=0A=
=0A=
=0A=
	/**=0A=
    * @property browser=0A=
    * @deprecated Use YAHOO.env.ua=0A=
	* @description String representing the browser.=0A=
	* @type String=0A=
	*/=0A=
	browser: Module.prototype.browser,=0A=
=0A=
=0A=
    /**=0A=
    * @property id=0A=
    * @description Id of the menu item's root <code>&#60;li&#62;</code> =0A=
    * element.  This property should be set via the constructor using =
the =0A=
    * configuration object literal.  If an id is not specified, then one =
will =0A=
    * be created using the "generateId" method of the Dom utility.=0A=
    * @default null=0A=
    * @type String=0A=
    */=0A=
    id: null,=0A=
=0A=
=0A=
=0A=
    // Events=0A=
=0A=
=0A=
    /**=0A=
    * @event destroyEvent=0A=
    * @description Fires when the menu item's <code>&#60;li&#62;</code> =0A=
    * element is removed from its parent <code>&#60;ul&#62;</code> =
element.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    destroyEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event mouseOverEvent=0A=
    * @description Fires when the mouse has entered the menu item.  =
Passes =0A=
    * back the DOM Event object as an argument.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    mouseOverEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event mouseOutEvent=0A=
    * @description Fires when the mouse has left the menu item.  Passes =
back =0A=
    * the DOM Event object as an argument.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    mouseOutEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event mouseDownEvent=0A=
    * @description Fires when the user mouses down on the menu item.  =
Passes =0A=
    * back the DOM Event object as an argument.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    mouseDownEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event mouseUpEvent=0A=
    * @description Fires when the user releases a mouse button while the =
mouse =0A=
    * is over the menu item.  Passes back the DOM Event object as an =
argument.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    mouseUpEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event clickEvent=0A=
    * @description Fires when the user clicks the on the menu item.  =
Passes =0A=
    * back the DOM Event object as an argument.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    clickEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event keyPressEvent=0A=
    * @description Fires when the user presses an alphanumeric key when =
the =0A=
    * menu item has focus.  Passes back the DOM Event object as an =
argument.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    keyPressEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event keyDownEvent=0A=
    * @description Fires when the user presses a key when the menu item =
has =0A=
    * focus.  Passes back the DOM Event object as an argument.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    keyDownEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event keyUpEvent=0A=
    * @description Fires when the user releases a key when the menu item =
has =0A=
    * focus.  Passes back the DOM Event object as an argument.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    keyUpEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event focusEvent=0A=
    * @description Fires when the menu item receives focus.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    focusEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @event blurEvent=0A=
    * @description Fires when the menu item loses the input focus.=0A=
    * @type YAHOO.util.CustomEvent=0A=
    */=0A=
    blurEvent: null,=0A=
=0A=
=0A=
    /**=0A=
    * @method init=0A=
    * @description The MenuItem class's initialization method. This =
method is =0A=
    * automatically called by the constructor, and sets up all DOM =
references =0A=
    * for pre-existing markup, and creates required markup if it is not =0A=
    * already present.=0A=
    * @param {String} p_oObject String specifying the text of the menu =
item.=0A=
    * @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
    * one-html.html#ID-74680021">HTMLLIElement</a>} p_oObject Object =
specifying =0A=
    * the <code>&#60;li&#62;</code> element of the menu item.=0A=
    * @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
    * one-html.html#ID-38450247">HTMLOptGroupElement</a>} p_oObject =
Object =0A=
    * specifying the <code>&#60;optgroup&#62;</code> element of the menu =
item.=0A=
    * @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
    * one-html.html#ID-70901257">HTMLOptionElement</a>} p_oObject Object =0A=
    * specifying the <code>&#60;option&#62;</code> element of the menu =
item.=0A=
    * @param {Object} p_oConfig Optional. Object literal specifying the =0A=
    * configuration for the menu item. See configuration class =
documentation =0A=
    * for more details.=0A=
    */=0A=
    init: function (p_oObject, p_oConfig) {=0A=
=0A=
=0A=
        if (!this.SUBMENU_TYPE) {=0A=
    =0A=
            this.SUBMENU_TYPE =3D Menu;=0A=
    =0A=
        }=0A=
=0A=
=0A=
        // Create the config object=0A=
=0A=
        this.cfg =3D new YAHOO.util.Config(this);=0A=
=0A=
        this.initDefaultConfig();=0A=
=0A=
        var SIGNATURE =3D CustomEvent.LIST,=0A=
            oConfig =3D this.cfg,=0A=
            sURL =3D "#",=0A=
            oAnchor,=0A=
            sTarget,=0A=
            sText,=0A=
            sId;=0A=
=0A=
=0A=
        if (Lang.isString(p_oObject)) {=0A=
=0A=
            this._createRootNodeStructure();=0A=
=0A=
            oConfig.queueProperty("text", p_oObject);=0A=
=0A=
        }=0A=
        else if (p_oObject && p_oObject.tagName) {=0A=
=0A=
            switch(p_oObject.tagName.toUpperCase()) {=0A=
=0A=
                case "OPTION":=0A=
=0A=
                    this._createRootNodeStructure();=0A=
=0A=
                    oConfig.queueProperty("text", p_oObject.text);=0A=
                    oConfig.queueProperty("disabled", =
p_oObject.disabled);=0A=
=0A=
                    this.value =3D p_oObject.value;=0A=
=0A=
                    this.srcElement =3D p_oObject;=0A=
=0A=
                break;=0A=
=0A=
                case "OPTGROUP":=0A=
=0A=
                    this._createRootNodeStructure();=0A=
=0A=
                    oConfig.queueProperty("text", p_oObject.label);=0A=
                    oConfig.queueProperty("disabled", =
p_oObject.disabled);=0A=
=0A=
                    this.srcElement =3D p_oObject;=0A=
=0A=
                    this._initSubTree();=0A=
=0A=
                break;=0A=
=0A=
                case "LI":=0A=
=0A=
                    // Get the anchor node (if it exists)=0A=
                    =0A=
                    oAnchor =3D Dom.getFirstChild(p_oObject);=0A=
=0A=
=0A=
                    // Capture the "text" and/or the "URL"=0A=
=0A=
                    if (oAnchor) {=0A=
=0A=
                        sURL =3D oAnchor.getAttribute("href");=0A=
                        sTarget =3D oAnchor.getAttribute("target");=0A=
=0A=
                        sText =3D oAnchor.innerHTML;=0A=
=0A=
                    }=0A=
=0A=
                    this.srcElement =3D p_oObject;=0A=
                    this.element =3D p_oObject;=0A=
                    this._oAnchor =3D oAnchor;=0A=
=0A=
                    /*=0A=
                        Set these properties silently to sync up the =0A=
                        configuration object without making changes to =
the =0A=
                        element's DOM=0A=
                    */ =0A=
=0A=
                    oConfig.setProperty("text", sText, true);=0A=
                    oConfig.setProperty("url", sURL, true);=0A=
                    oConfig.setProperty("target", sTarget, true);=0A=
=0A=
                    this._initSubTree();=0A=
=0A=
                break;=0A=
=0A=
            }            =0A=
=0A=
        }=0A=
=0A=
=0A=
        if (this.element) {=0A=
=0A=
            sId =3D (this.srcElement || this.element).id;=0A=
=0A=
            if (!sId) {=0A=
=0A=
                sId =3D this.id || Dom.generateId();=0A=
=0A=
                this.element.id =3D sId;=0A=
=0A=
            }=0A=
=0A=
            this.id =3D sId;=0A=
=0A=
=0A=
            Dom.addClass(this.element, this.CSS_CLASS_NAME);=0A=
            Dom.addClass(this._oAnchor, this.CSS_LABEL_CLASS_NAME);=0A=
=0A=
=0A=
            // Create custom events=0A=
=0A=
            this.mouseOverEvent =3D =
this.createEvent(EVENT_TYPES.MOUSE_OVER);=0A=
            this.mouseOverEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.mouseOutEvent =3D =
this.createEvent(EVENT_TYPES.MOUSE_OUT);=0A=
            this.mouseOutEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.mouseDownEvent =3D =
this.createEvent(EVENT_TYPES.MOUSE_DOWN);=0A=
            this.mouseDownEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.mouseUpEvent =3D this.createEvent(EVENT_TYPES.MOUSE_UP);=0A=
            this.mouseUpEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.clickEvent =3D this.createEvent(EVENT_TYPES.CLICK);=0A=
            this.clickEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.keyPressEvent =3D =
this.createEvent(EVENT_TYPES.KEY_PRESS);=0A=
            this.keyPressEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.keyDownEvent =3D this.createEvent(EVENT_TYPES.KEY_DOWN);=0A=
            this.keyDownEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.keyUpEvent =3D this.createEvent(EVENT_TYPES.KEY_UP);=0A=
            this.keyUpEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.focusEvent =3D this.createEvent(EVENT_TYPES.FOCUS);=0A=
            this.focusEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.blurEvent =3D this.createEvent(EVENT_TYPES.BLUR);=0A=
            this.blurEvent.signature =3D SIGNATURE;=0A=
=0A=
            this.destroyEvent =3D this.createEvent(EVENT_TYPES.DESTROY);=0A=
            this.destroyEvent.signature =3D SIGNATURE;=0A=
=0A=
            if (p_oConfig) {=0A=
    =0A=
                oConfig.applyConfig(p_oConfig);=0A=
    =0A=
            }        =0A=
=0A=
            oConfig.fireQueue();=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
=0A=
    // Private methods=0A=
=0A=
=0A=
    /**=0A=
    * @method _createRootNodeStructure=0A=
    * @description Creates the core DOM structure for the menu item.=0A=
    * @private=0A=
    */=0A=
    _createRootNodeStructure: function () {=0A=
=0A=
        var oElement,=0A=
            oAnchor;=0A=
=0A=
        if (!m_oMenuItemTemplate) {=0A=
=0A=
            m_oMenuItemTemplate =3D document.createElement("li");=0A=
            m_oMenuItemTemplate.innerHTML =3D "<a href=3D\"#\"></a>";=0A=
=0A=
        }=0A=
=0A=
        oElement =3D m_oMenuItemTemplate.cloneNode(true);=0A=
        oElement.className =3D this.CSS_CLASS_NAME;=0A=
=0A=
        oAnchor =3D oElement.firstChild;=0A=
        oAnchor.className =3D this.CSS_LABEL_CLASS_NAME;=0A=
        =0A=
        this.element =3D oElement;=0A=
        this._oAnchor =3D oAnchor;=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method _initSubTree=0A=
    * @description Iterates the source element's childNodes collection =
and uses =0A=
    * the child nodes to instantiate other menus.=0A=
    * @private=0A=
    */=0A=
    _initSubTree: function () {=0A=
=0A=
        var oSrcEl =3D this.srcElement,=0A=
            oConfig =3D this.cfg,=0A=
            oNode,=0A=
            aOptions,=0A=
            nOptions,=0A=
            oMenu,=0A=
            n;=0A=
=0A=
=0A=
        if (oSrcEl.childNodes.length > 0) {=0A=
=0A=
            if (this.parent.lazyLoad && this.parent.srcElement && =0A=
                this.parent.srcElement.tagName.toUpperCase() =3D=3D =
"SELECT") {=0A=
=0A=
                oConfig.setProperty(=0A=
                        "submenu", =0A=
                        { id: Dom.generateId(), itemdata: =
oSrcEl.childNodes }=0A=
                    );=0A=
=0A=
            }=0A=
            else {=0A=
=0A=
                oNode =3D oSrcEl.firstChild;=0A=
                aOptions =3D [];=0A=
    =0A=
                do {=0A=
    =0A=
                    if (oNode && oNode.tagName) {=0A=
    =0A=
                        switch(oNode.tagName.toUpperCase()) {=0A=
                =0A=
                            case "DIV":=0A=
                =0A=
                                oConfig.setProperty("submenu", oNode);=0A=
                =0A=
                            break;=0A=
         =0A=
                            case "OPTION":=0A=
        =0A=
                                aOptions[aOptions.length] =3D oNode;=0A=
        =0A=
                            break;=0A=
               =0A=
                        }=0A=
                    =0A=
                    }=0A=
                =0A=
                }        =0A=
                while((oNode =3D oNode.nextSibling));=0A=
    =0A=
    =0A=
                nOptions =3D aOptions.length;=0A=
    =0A=
                if (nOptions > 0) {=0A=
    =0A=
                    oMenu =3D new this.SUBMENU_TYPE(Dom.generateId());=0A=
                    =0A=
                    oConfig.setProperty("submenu", oMenu);=0A=
    =0A=
                    for(n=3D0; n<nOptions; n++) {=0A=
        =0A=
                        oMenu.addItem((new =
oMenu.ITEM_TYPE(aOptions[n])));=0A=
        =0A=
                    }=0A=
        =0A=
                }=0A=
            =0A=
            }=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
=0A=
    // Event handlers for configuration properties=0A=
=0A=
=0A=
    /**=0A=
    * @method configText=0A=
    * @description Event handler for when the "text" configuration =
property of =0A=
    * the menu item changes.=0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */=0A=
    configText: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var sText =3D p_aArgs[0],=0A=
            oConfig =3D this.cfg,=0A=
            oAnchor =3D this._oAnchor,=0A=
            sHelpText =3D oConfig.getProperty("helptext"),=0A=
            sHelpTextHTML =3D "",=0A=
            sEmphasisStartTag =3D "",=0A=
            sEmphasisEndTag =3D "";=0A=
=0A=
=0A=
        if (sText) {=0A=
=0A=
=0A=
            if (sHelpText) {=0A=
                    =0A=
                sHelpTextHTML =3D "<em class=3D\"helptext\">" + =
sHelpText + "</em>";=0A=
            =0A=
            }=0A=
=0A=
=0A=
            if (oConfig.getProperty("emphasis")) {=0A=
=0A=
                sEmphasisStartTag =3D "<em>";=0A=
                sEmphasisEndTag =3D "</em>";=0A=
=0A=
            }=0A=
=0A=
=0A=
            if (oConfig.getProperty("strongemphasis")) {=0A=
=0A=
                sEmphasisStartTag =3D "<strong>";=0A=
                sEmphasisEndTag =3D "</strong>";=0A=
            =0A=
            }=0A=
=0A=
=0A=
            oAnchor.innerHTML =3D (sEmphasisStartTag + sText + =0A=
                sEmphasisEndTag + sHelpTextHTML);=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configHelpText=0A=
    * @description Event handler for when the "helptext" configuration =
property =0A=
    * of the menu item changes.=0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */    =0A=
    configHelpText: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        this.cfg.refireEvent("text");=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configURL=0A=
    * @description Event handler for when the "url" configuration =
property of =0A=
    * the menu item changes.=0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */    =0A=
    configURL: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var sURL =3D p_aArgs[0];=0A=
=0A=
        if (!sURL) {=0A=
=0A=
            sURL =3D "#";=0A=
=0A=
        }=0A=
=0A=
        var oAnchor =3D this._oAnchor;=0A=
=0A=
        if (YAHOO.env.ua.opera) {=0A=
=0A=
            oAnchor.removeAttribute("href");=0A=
        =0A=
        }=0A=
=0A=
        oAnchor.setAttribute("href", sURL);=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configTarget=0A=
    * @description Event handler for when the "target" configuration =
property =0A=
    * of the menu item changes.  =0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */    =0A=
    configTarget: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var sTarget =3D p_aArgs[0],=0A=
            oAnchor =3D this._oAnchor;=0A=
=0A=
        if (sTarget && sTarget.length > 0) {=0A=
=0A=
            oAnchor.setAttribute("target", sTarget);=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            oAnchor.removeAttribute("target");=0A=
        =0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configEmphasis=0A=
    * @description Event handler for when the "emphasis" configuration =
property=0A=
    * of the menu item changes.=0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */    =0A=
    configEmphasis: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var bEmphasis =3D p_aArgs[0],=0A=
            oConfig =3D this.cfg;=0A=
=0A=
=0A=
        if (bEmphasis && oConfig.getProperty("strongemphasis")) {=0A=
=0A=
            oConfig.setProperty("strongemphasis", false);=0A=
=0A=
        }=0A=
=0A=
=0A=
        oConfig.refireEvent("text");=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configStrongEmphasis=0A=
    * @description Event handler for when the "strongemphasis" =
configuration =0A=
    * property of the menu item changes.=0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */    =0A=
    configStrongEmphasis: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var bStrongEmphasis =3D p_aArgs[0],=0A=
            oConfig =3D this.cfg;=0A=
=0A=
=0A=
        if (bStrongEmphasis && oConfig.getProperty("emphasis")) {=0A=
=0A=
            oConfig.setProperty("emphasis", false);=0A=
=0A=
        }=0A=
=0A=
        oConfig.refireEvent("text");=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configChecked=0A=
    * @description Event handler for when the "checked" configuration =
property =0A=
    * of the menu item changes. =0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */    =0A=
    configChecked: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var bChecked =3D p_aArgs[0],=0A=
            oElement =3D this.element,=0A=
            oAnchor =3D this._oAnchor,=0A=
            oConfig =3D this.cfg,=0A=
            sState =3D "-checked",=0A=
            sClassName =3D this.CSS_CLASS_NAME + sState,=0A=
            sLabelClassName =3D this.CSS_LABEL_CLASS_NAME + sState;=0A=
=0A=
=0A=
        if (bChecked) {=0A=
=0A=
            Dom.addClass(oElement, sClassName);=0A=
            Dom.addClass(oAnchor, sLabelClassName);=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            Dom.removeClass(oElement, sClassName);=0A=
            Dom.removeClass(oAnchor, sLabelClassName);=0A=
        =0A=
        }=0A=
=0A=
=0A=
        oConfig.refireEvent("text");=0A=
=0A=
=0A=
        if (oConfig.getProperty("disabled")) {=0A=
=0A=
            oConfig.refireEvent("disabled");=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (oConfig.getProperty("selected")) {=0A=
=0A=
            oConfig.refireEvent("selected");=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
=0A=
    /**=0A=
    * @method configDisabled=0A=
    * @description Event handler for when the "disabled" configuration =
property =0A=
    * of the menu item changes. =0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */    =0A=
    configDisabled: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var bDisabled =3D p_aArgs[0],=0A=
            oConfig =3D this.cfg,=0A=
            oSubmenu =3D oConfig.getProperty("submenu"),=0A=
            bChecked =3D oConfig.getProperty("checked"),=0A=
            oElement =3D this.element,=0A=
            oAnchor =3D this._oAnchor,=0A=
            sState =3D "-disabled",=0A=
            sCheckedState =3D "-checked" + sState,=0A=
            sSubmenuState =3D "-hassubmenu" + sState,=0A=
            sClassName =3D this.CSS_CLASS_NAME + sState,=0A=
            sLabelClassName =3D this.CSS_LABEL_CLASS_NAME + sState,=0A=
            sCheckedClassName =3D this.CSS_CLASS_NAME + sCheckedState,=0A=
            sLabelCheckedClassName =3D this.CSS_LABEL_CLASS_NAME + =
sCheckedState,=0A=
            sSubmenuClassName =3D this.CSS_CLASS_NAME + sSubmenuState,=0A=
            sLabelSubmenuClassName =3D this.CSS_LABEL_CLASS_NAME + =
sSubmenuState;=0A=
=0A=
=0A=
        if (bDisabled) {=0A=
=0A=
            if (oConfig.getProperty("selected")) {=0A=
=0A=
                oConfig.setProperty("selected", false);=0A=
=0A=
            }=0A=
=0A=
            Dom.addClass(oElement, sClassName);=0A=
            Dom.addClass(oAnchor, sLabelClassName);=0A=
=0A=
=0A=
            if (oSubmenu) {=0A=
=0A=
                Dom.addClass(oElement, sSubmenuClassName);=0A=
                Dom.addClass(oAnchor, sLabelSubmenuClassName);=0A=
            =0A=
            }=0A=
            =0A=
=0A=
            if (bChecked) {=0A=
=0A=
                Dom.addClass(oElement, sCheckedClassName);=0A=
                Dom.addClass(oAnchor, sLabelCheckedClassName);=0A=
=0A=
            }=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            Dom.removeClass(oElement, sClassName);=0A=
            Dom.removeClass(oAnchor, sLabelClassName);=0A=
=0A=
=0A=
            if (oSubmenu) {=0A=
=0A=
                Dom.removeClass(oElement, sSubmenuClassName);=0A=
                Dom.removeClass(oAnchor, sLabelSubmenuClassName);=0A=
            =0A=
            }=0A=
            =0A=
=0A=
            if (bChecked) {=0A=
=0A=
                Dom.removeClass(oElement, sCheckedClassName);=0A=
                Dom.removeClass(oAnchor, sLabelCheckedClassName);=0A=
=0A=
            }=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configSelected=0A=
    * @description Event handler for when the "selected" configuration =
property =0A=
    * of the menu item changes. =0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */    =0A=
    configSelected: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var oConfig =3D this.cfg,=0A=
            bSelected =3D p_aArgs[0],=0A=
            oElement =3D this.element,=0A=
            oAnchor =3D this._oAnchor,=0A=
            bChecked =3D oConfig.getProperty("checked"),=0A=
            oSubmenu =3D oConfig.getProperty("submenu"),=0A=
            sState =3D "-selected",=0A=
            sCheckedState =3D "-checked" + sState,=0A=
            sSubmenuState =3D "-hassubmenu" + sState,=0A=
            sClassName =3D this.CSS_CLASS_NAME + sState,=0A=
            sLabelClassName =3D this.CSS_LABEL_CLASS_NAME + sState,=0A=
            sCheckedClassName =3D this.CSS_CLASS_NAME + sCheckedState,=0A=
            sLabelCheckedClassName =3D this.CSS_LABEL_CLASS_NAME + =
sCheckedState,=0A=
            sSubmenuClassName =3D this.CSS_CLASS_NAME + sSubmenuState,=0A=
            sLabelSubmenuClassName =3D this.CSS_LABEL_CLASS_NAME + =
sSubmenuState;=0A=
=0A=
=0A=
        if (YAHOO.env.ua.opera) {=0A=
=0A=
            oAnchor.blur();=0A=
        =0A=
        }=0A=
=0A=
=0A=
        if (bSelected && !oConfig.getProperty("disabled")) {=0A=
=0A=
            Dom.addClass(oElement, sClassName);=0A=
            Dom.addClass(oAnchor, sLabelClassName);=0A=
=0A=
=0A=
            if (oSubmenu) {=0A=
=0A=
                Dom.addClass(oElement, sSubmenuClassName);=0A=
                Dom.addClass(oAnchor, sLabelSubmenuClassName);=0A=
            =0A=
            }=0A=
=0A=
=0A=
            if (bChecked) {=0A=
=0A=
                Dom.addClass(oElement, sCheckedClassName);=0A=
                Dom.addClass(oAnchor, sLabelCheckedClassName);=0A=
=0A=
            }=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            Dom.removeClass(oElement, sClassName);=0A=
            Dom.removeClass(oAnchor, sLabelClassName);=0A=
=0A=
=0A=
            if (oSubmenu) {=0A=
=0A=
                Dom.removeClass(oElement, sSubmenuClassName);=0A=
                Dom.removeClass(oAnchor, sLabelSubmenuClassName);=0A=
            =0A=
            }=0A=
=0A=
        =0A=
            if (bChecked) {=0A=
=0A=
                Dom.removeClass(oElement, sCheckedClassName);=0A=
                Dom.removeClass(oAnchor, sLabelCheckedClassName);=0A=
=0A=
            }=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (this.hasFocus() && YAHOO.env.ua.opera) {=0A=
        =0A=
            oAnchor.focus();=0A=
        =0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method _onSubmenuBeforeHide=0A=
    * @description "beforehide" Custom Event handler for a submenu.=0A=
    * @private=0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    */=0A=
    _onSubmenuBeforeHide: function (p_sType, p_aArgs) {=0A=
=0A=
        var oItem =3D this.parent,=0A=
            oMenu;=0A=
=0A=
        function onHide() {=0A=
=0A=
            oItem._oAnchor.blur();=0A=
            oMenu.beforeHideEvent.unsubscribe(onHide);=0A=
        =0A=
        }=0A=
=0A=
=0A=
        if (oItem.hasFocus()) {=0A=
=0A=
            oMenu =3D oItem.parent;=0A=
=0A=
            oMenu.beforeHideEvent.subscribe(onHide);=0A=
        =0A=
        }=0A=
    =0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configSubmenu=0A=
    * @description Event handler for when the "submenu" configuration =
property =0A=
    * of the menu item changes. =0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */=0A=
    configSubmenu: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var oSubmenu =3D p_aArgs[0],=0A=
            oConfig =3D this.cfg,=0A=
            oElement =3D this.element,=0A=
            oAnchor =3D this._oAnchor,=0A=
            bLazyLoad =3D this.parent && this.parent.lazyLoad,=0A=
            sState =3D "-hassubmenu",=0A=
            sClassName =3D this.CSS_CLASS_NAME + sState,=0A=
            sLabelClassName =3D this.CSS_LABEL_CLASS_NAME + sState,=0A=
            oMenu,=0A=
            sSubmenuId,=0A=
            oSubmenuConfig;=0A=
=0A=
=0A=
        if (oSubmenu) {=0A=
=0A=
            if (oSubmenu instanceof Menu) {=0A=
=0A=
                oMenu =3D oSubmenu;=0A=
                oMenu.parent =3D this;=0A=
                oMenu.lazyLoad =3D bLazyLoad;=0A=
=0A=
            }=0A=
            else if (typeof oSubmenu =3D=3D "object" && oSubmenu.id && =0A=
                !oSubmenu.nodeType) {=0A=
=0A=
                sSubmenuId =3D oSubmenu.id;=0A=
                oSubmenuConfig =3D oSubmenu;=0A=
=0A=
                oSubmenuConfig.lazyload =3D bLazyLoad;=0A=
                oSubmenuConfig.parent =3D this;=0A=
=0A=
                oMenu =3D new this.SUBMENU_TYPE(sSubmenuId, =
oSubmenuConfig);=0A=
=0A=
=0A=
                // Set the value of the property to the Menu instance=0A=
=0A=
                oConfig.setProperty("submenu", oMenu, true);=0A=
=0A=
            }=0A=
            else {=0A=
=0A=
                oMenu =3D new this.SUBMENU_TYPE(oSubmenu,=0A=
                                { lazyload: bLazyLoad, parent: this });=0A=
=0A=
=0A=
                // Set the value of the property to the Menu instance=0A=
                =0A=
                oConfig.setProperty("submenu", oMenu, true);=0A=
=0A=
            }=0A=
=0A=
=0A=
            if (oMenu) {=0A=
=0A=
                Dom.addClass(oElement, sClassName);=0A=
                Dom.addClass(oAnchor, sLabelClassName);=0A=
=0A=
                this._oSubmenu =3D oMenu;=0A=
=0A=
                if (YAHOO.env.ua.opera) {=0A=
                =0A=
                    =
oMenu.beforeHideEvent.subscribe(this._onSubmenuBeforeHide);              =
 =0A=
                =0A=
                }=0A=
            =0A=
            }=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            Dom.removeClass(oElement, sClassName);=0A=
            Dom.removeClass(oAnchor, sLabelClassName);=0A=
=0A=
            if (this._oSubmenu) {=0A=
=0A=
                this._oSubmenu.destroy();=0A=
=0A=
            }=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (oConfig.getProperty("disabled")) {=0A=
=0A=
            oConfig.refireEvent("disabled");=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (oConfig.getProperty("selected")) {=0A=
=0A=
            oConfig.refireEvent("selected");=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configOnClick=0A=
    * @description Event handler for when the "onclick" configuration =
property =0A=
    * of the menu item changes. =0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */=0A=
    configOnClick: function (p_sType, p_aArgs, p_oItem) {=0A=
=0A=
        var oObject =3D p_aArgs[0];=0A=
=0A=
        /*=0A=
            Remove any existing listeners if a "click" event handler has =0A=
            already been specified.=0A=
        */=0A=
=0A=
        if (this._oOnclickAttributeValue && =0A=
            (this._oOnclickAttributeValue !=3D oObject)) {=0A=
=0A=
            this.clickEvent.unsubscribe(this._oOnclickAttributeValue.fn, =0A=
                                this._oOnclickAttributeValue.obj);=0A=
=0A=
            this._oOnclickAttributeValue =3D null;=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (!this._oOnclickAttributeValue && typeof oObject =3D=3D =
"object" && =0A=
            typeof oObject.fn =3D=3D "function") {=0A=
            =0A=
            this.clickEvent.subscribe(oObject.fn, =0A=
                ((!YAHOO.lang.isUndefined(oObject.obj)) ? oObject.obj : =
this), =0A=
                oObject.scope);=0A=
=0A=
            this._oOnclickAttributeValue =3D oObject;=0A=
=0A=
        }=0A=
    =0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method configClassName=0A=
    * @description Event handler for when the "classname" configuration =0A=
    * property of a menu item changes.=0A=
    * @param {String} p_sType String representing the name of the event =
that =0A=
    * was fired.=0A=
    * @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
    * @param {YAHOO.widget.MenuItem} p_oItem Object representing the =
menu item=0A=
    * that fired the event.=0A=
    */=0A=
    configClassName: function (p_sType, p_aArgs, p_oItem) {=0A=
    =0A=
        var sClassName =3D p_aArgs[0];=0A=
    =0A=
        if (this._sClassName) {=0A=
    =0A=
            Dom.removeClass(this.element, this._sClassName);=0A=
    =0A=
        }=0A=
    =0A=
        Dom.addClass(this.element, sClassName);=0A=
        this._sClassName =3D sClassName;=0A=
    =0A=
    },=0A=
=0A=
=0A=
=0A=
    // Public methods=0A=
=0A=
=0A=
	/**=0A=
    * @method initDefaultConfig=0A=
	* @description Initializes an item's configurable properties.=0A=
	*/=0A=
	initDefaultConfig : function () {=0A=
=0A=
        var oConfig =3D this.cfg;=0A=
=0A=
=0A=
        // Define the configuration attributes=0A=
=0A=
        /**=0A=
        * @config text=0A=
        * @description String specifying the text label for the menu =
item.  =0A=
        * When building a menu from existing HTML the value of this =
property=0A=
        * will be interpreted from the menu's markup.=0A=
        * @default ""=0A=
        * @type String=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.TEXT.key, =0A=
            { =0A=
                handler: this.configText, =0A=
                value: DEFAULT_CONFIG.TEXT.value, =0A=
                validator: DEFAULT_CONFIG.TEXT.validator, =0A=
                suppressEvent: DEFAULT_CONFIG.TEXT.suppressEvent =0A=
            }=0A=
        );=0A=
        =0A=
=0A=
        /**=0A=
        * @config helptext=0A=
        * @description String specifying additional instructional text =
to =0A=
        * accompany the text for the menu item.=0A=
        * @deprecated Use "text" configuration property to add help text =
markup.  =0A=
        * For example: <code>oMenuItem.cfg.setProperty("text", "Copy =
&#60;em =0A=
        * class=3D\"helptext\"&#62;Ctrl + C&#60;/em&#60;");</code>=0A=
        * @default null=0A=
        * @type String|<a href=3D"http://www.w3.org/TR/=0A=
        * 2000/WD-DOM-Level-1-20000929/level-one-html.html#ID-58190037">=0A=
        * HTMLElement</a>=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.HELP_TEXT.key,=0A=
            {=0A=
                handler: this.configHelpText, =0A=
                supercedes: DEFAULT_CONFIG.HELP_TEXT.supercedes,=0A=
                suppressEvent: DEFAULT_CONFIG.HELP_TEXT.suppressEvent =0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config url=0A=
        * @description String specifying the URL for the menu item's =
anchor's =0A=
        * "href" attribute.  When building a menu from existing HTML the =
value =0A=
        * of this property will be interpreted from the menu's markup.=0A=
        * @default "#"=0A=
        * @type String=0A=
        */        =0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.URL.key, =0A=
            {=0A=
                handler: this.configURL, =0A=
                value: DEFAULT_CONFIG.URL.value, =0A=
                suppressEvent: DEFAULT_CONFIG.URL.suppressEvent=0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config target=0A=
        * @description String specifying the value for the "target" =
attribute =0A=
        * of the menu item's anchor element. <strong>Specifying a target =
will =0A=
        * require the user to click directly on the menu item's anchor =
node in=0A=
        * order to cause the browser to navigate to the specified =
URL.</strong> =0A=
        * When building a menu from existing HTML the value of this =
property =0A=
        * will be interpreted from the menu's markup.=0A=
        * @default null=0A=
        * @type String=0A=
        */        =0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.TARGET.key, =0A=
            {=0A=
                handler: this.configTarget, =0A=
                suppressEvent: DEFAULT_CONFIG.TARGET.suppressEvent=0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config emphasis=0A=
        * @description Boolean indicating if the text of the menu item =
will be =0A=
        * rendered with emphasis.=0A=
        * @deprecated Use "text" configuration property to add emphasis. =
 =0A=
        * For example: <code>oMenuItem.cfg.setProperty("text", =
"&#60;em&#62;Some =0A=
        * Text&#60;/em&#60;");</code>=0A=
        * @default false=0A=
        * @type Boolean=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.EMPHASIS.key, =0A=
            { =0A=
                handler: this.configEmphasis, =0A=
                value: DEFAULT_CONFIG.EMPHASIS.value, =0A=
                validator: DEFAULT_CONFIG.EMPHASIS.validator, =0A=
                suppressEvent: DEFAULT_CONFIG.EMPHASIS.suppressEvent,=0A=
                supercedes: DEFAULT_CONFIG.EMPHASIS.supercedes=0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config strongemphasis=0A=
        * @description Boolean indicating if the text of the menu item =
will be =0A=
        * rendered with strong emphasis.=0A=
        * @deprecated Use "text" configuration property to add strong =
emphasis.  =0A=
        * For example: <code>oMenuItem.cfg.setProperty("text", =
"&#60;strong&#62; =0A=
        * Some Text&#60;/strong&#60;");</code>=0A=
        * @default false=0A=
        * @type Boolean=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.STRONG_EMPHASIS.key,=0A=
            {=0A=
                handler: this.configStrongEmphasis,=0A=
                value: DEFAULT_CONFIG.STRONG_EMPHASIS.value,=0A=
                validator: DEFAULT_CONFIG.STRONG_EMPHASIS.validator,=0A=
                suppressEvent: =
DEFAULT_CONFIG.STRONG_EMPHASIS.suppressEvent,=0A=
                supercedes: DEFAULT_CONFIG.STRONG_EMPHASIS.supercedes=0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config checked=0A=
        * @description Boolean indicating if the menu item should be =
rendered =0A=
        * with a checkmark.=0A=
        * @default false=0A=
        * @type Boolean=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.CHECKED.key, =0A=
            {=0A=
                handler: this.configChecked, =0A=
                value: DEFAULT_CONFIG.CHECKED.value, =0A=
                validator: DEFAULT_CONFIG.CHECKED.validator, =0A=
                suppressEvent: DEFAULT_CONFIG.CHECKED.suppressEvent,=0A=
                supercedes: DEFAULT_CONFIG.CHECKED.supercedes=0A=
            } =0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config disabled=0A=
        * @description Boolean indicating if the menu item should be =
disabled.  =0A=
        * (Disabled menu items are  dimmed and will not respond to user =
input =0A=
        * or fire events.)=0A=
        * @default false=0A=
        * @type Boolean=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.DISABLED.key,=0A=
            {=0A=
                handler: this.configDisabled,=0A=
                value: DEFAULT_CONFIG.DISABLED.value,=0A=
                validator: DEFAULT_CONFIG.DISABLED.validator,=0A=
                suppressEvent: DEFAULT_CONFIG.DISABLED.suppressEvent=0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config selected=0A=
        * @description Boolean indicating if the menu item should =0A=
        * be highlighted.=0A=
        * @default false=0A=
        * @type Boolean=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.SELECTED.key,=0A=
            {=0A=
                handler: this.configSelected,=0A=
                value: DEFAULT_CONFIG.SELECTED.value,=0A=
                validator: DEFAULT_CONFIG.SELECTED.validator,=0A=
                suppressEvent: DEFAULT_CONFIG.SELECTED.suppressEvent=0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config submenu=0A=
        * @description Object specifying the submenu to be appended to =
the =0A=
        * menu item.  The value can be one of the following: =
<ul><li>Object =0A=
        * specifying a Menu instance.</li><li>Object literal specifying =
the=0A=
        * menu to be created.  Format: <code>{ id: [menu id], itemdata: =0A=
        * [<a href=3D"YAHOO.widget.Menu.html#itemData">array of values =
for =0A=
        * items</a>] }</code>.</li><li>String specifying the id =
attribute =0A=
        * of the <code>&#60;div&#62;</code> element of the menu.</li><li>=0A=
        * Object specifying the <code>&#60;div&#62;</code> element of =
the =0A=
        * menu.</li></ul>=0A=
        * @default null=0A=
        * @type Menu|String|Object|<a href=3D"http://www.w3.org/TR/2000/=0A=
        * WD-DOM-Level-1-20000929/level-one-html.html#ID-58190037">=0A=
        * HTMLElement</a>=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.SUBMENU.key, =0A=
            {=0A=
                handler: this.configSubmenu, =0A=
                supercedes: DEFAULT_CONFIG.SUBMENU.supercedes,=0A=
                suppressEvent: DEFAULT_CONFIG.SUBMENU.suppressEvent=0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config onclick=0A=
        * @description Object literal representing the code to be =
executed when =0A=
        * the item is clicked.  Format:<br> <code> {<br> =0A=
        * <strong>fn:</strong> Function,   &#47;&#47; The handler to =
call when =0A=
        * the event fires.<br> <strong>obj:</strong> Object, &#47;&#47; =
An =0A=
        * object to  pass back to the handler.<br> =
<strong>scope:</strong> =0A=
        * Object &#47;&#47; The object to use for the scope of the =
handler.=0A=
        * <br> } </code>=0A=
        * @type Object=0A=
        * @default null=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.ONCLICK.key, =0A=
            {=0A=
                handler: this.configOnClick, =0A=
                suppressEvent: DEFAULT_CONFIG.ONCLICK.suppressEvent =0A=
            }=0A=
        );=0A=
=0A=
=0A=
        /**=0A=
        * @config classname=0A=
        * @description CSS class to be applied to the menu item's root =0A=
        * <code>&#60;li&#62;</code> element.  The specified class(es) =
are =0A=
        * appended in addition to the default class as specified by the =
menu =0A=
        * item's CSS_CLASS_NAME constant.=0A=
        * @default null=0A=
        * @type String=0A=
        */=0A=
        oConfig.addProperty(=0A=
            DEFAULT_CONFIG.CLASS_NAME.key, =0A=
            { =0A=
                handler: this.configClassName,=0A=
                value: DEFAULT_CONFIG.CLASS_NAME.value, =0A=
                validator: DEFAULT_CONFIG.CLASS_NAME.validator,=0A=
                suppressEvent: DEFAULT_CONFIG.CLASS_NAME.suppressEvent =0A=
            }=0A=
        );=0A=
=0A=
	},=0A=
=0A=
=0A=
    /**=0A=
    * @method getNextEnabledSibling=0A=
    * @description Finds the menu item's next enabled sibling.=0A=
    * @return YAHOO.widget.MenuItem=0A=
    */=0A=
    getNextEnabledSibling: function () {=0A=
=0A=
        var nGroupIndex,=0A=
            aItemGroups,=0A=
            oNextItem,=0A=
            nNextGroupIndex,=0A=
            aNextGroup;=0A=
=0A=
        function getNextArrayItem(p_aArray, p_nStartIndex) {=0A=
=0A=
            return p_aArray[p_nStartIndex] || =0A=
                getNextArrayItem(p_aArray, (p_nStartIndex+1));=0A=
=0A=
        }=0A=
=0A=
        if (this.parent instanceof Menu) {=0A=
=0A=
            nGroupIndex =3D this.groupIndex;=0A=
    =0A=
            aItemGroups =3D this.parent.getItemGroups();=0A=
    =0A=
            if (this.index < (aItemGroups[nGroupIndex].length - 1)) {=0A=
    =0A=
                oNextItem =3D getNextArrayItem(aItemGroups[nGroupIndex], =0A=
                        (this.index+1));=0A=
    =0A=
            }=0A=
            else {=0A=
    =0A=
                if (nGroupIndex < (aItemGroups.length - 1)) {=0A=
    =0A=
                    nNextGroupIndex =3D nGroupIndex + 1;=0A=
    =0A=
                }=0A=
                else {=0A=
    =0A=
                    nNextGroupIndex =3D 0;=0A=
    =0A=
                }=0A=
    =0A=
                aNextGroup =3D getNextArrayItem(aItemGroups, =
nNextGroupIndex);=0A=
    =0A=
                // Retrieve the first menu item in the next group=0A=
    =0A=
                oNextItem =3D getNextArrayItem(aNextGroup, 0);=0A=
    =0A=
            }=0A=
    =0A=
            return (oNextItem.cfg.getProperty("disabled") || =0A=
                oNextItem.element.style.display =3D=3D "none") ? =0A=
                oNextItem.getNextEnabledSibling() : oNextItem;=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method getPreviousEnabledSibling=0A=
    * @description Finds the menu item's previous enabled sibling.=0A=
    * @return {YAHOO.widget.MenuItem}=0A=
    */=0A=
    getPreviousEnabledSibling: function () {=0A=
=0A=
        var nGroupIndex,=0A=
            aItemGroups,=0A=
            oPreviousItem,=0A=
            nPreviousGroupIndex,=0A=
            aPreviousGroup;=0A=
=0A=
        function getPreviousArrayItem(p_aArray, p_nStartIndex) {=0A=
=0A=
            return p_aArray[p_nStartIndex] ||  =0A=
                getPreviousArrayItem(p_aArray, (p_nStartIndex-1));=0A=
=0A=
        }=0A=
=0A=
        function getFirstItemIndex(p_aArray, p_nStartIndex) {=0A=
=0A=
            return p_aArray[p_nStartIndex] ? p_nStartIndex : =0A=
                getFirstItemIndex(p_aArray, (p_nStartIndex+1));=0A=
=0A=
        }=0A=
=0A=
       if (this.parent instanceof Menu) {=0A=
=0A=
            nGroupIndex =3D this.groupIndex;=0A=
            aItemGroups =3D this.parent.getItemGroups();=0A=
=0A=
    =0A=
            if (this.index > getFirstItemIndex(aItemGroups[nGroupIndex], =
0)) {=0A=
    =0A=
                oPreviousItem =3D =
getPreviousArrayItem(aItemGroups[nGroupIndex], =0A=
                        (this.index-1));=0A=
    =0A=
            }=0A=
            else {=0A=
    =0A=
                if (nGroupIndex > getFirstItemIndex(aItemGroups, 0)) {=0A=
    =0A=
                    nPreviousGroupIndex =3D nGroupIndex - 1;=0A=
    =0A=
                }=0A=
                else {=0A=
    =0A=
                    nPreviousGroupIndex =3D aItemGroups.length - 1;=0A=
    =0A=
                }=0A=
    =0A=
                aPreviousGroup =3D getPreviousArrayItem(aItemGroups, =0A=
                    nPreviousGroupIndex);=0A=
    =0A=
                oPreviousItem =3D getPreviousArrayItem(aPreviousGroup, =0A=
                        (aPreviousGroup.length - 1));=0A=
    =0A=
            }=0A=
=0A=
            return (oPreviousItem.cfg.getProperty("disabled") || =0A=
                oPreviousItem.element.style.display =3D=3D "none") ? =0A=
                oPreviousItem.getPreviousEnabledSibling() : =
oPreviousItem;=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method focus=0A=
    * @description Causes the menu item to receive the focus and fires =
the =0A=
    * focus event.=0A=
    */=0A=
    focus: function () {=0A=
=0A=
        var oParent =3D this.parent,=0A=
            oAnchor =3D this._oAnchor,=0A=
            oActiveItem =3D oParent.activeItem,=0A=
            me =3D this;=0A=
=0A=
=0A=
        function setFocus() {=0A=
=0A=
            try {=0A=
=0A=
                if (YAHOO.env.ua.ie && !document.hasFocus()) {=0A=
                =0A=
                    return;=0A=
                =0A=
                }=0A=
=0A=
                if (oActiveItem) {=0A=
    =0A=
                    oActiveItem.blurEvent.fire();=0A=
    =0A=
                }=0A=
=0A=
                oAnchor.focus();=0A=
                =0A=
                me.focusEvent.fire();=0A=
=0A=
            }=0A=
            catch(e) {=0A=
            =0A=
            }=0A=
=0A=
        }=0A=
=0A=
=0A=
        if (!this.cfg.getProperty("disabled") && oParent && =0A=
            oParent.cfg.getProperty("visible") && =0A=
            this.element.style.display !=3D "none") {=0A=
=0A=
=0A=
            /*=0A=
                Setting focus via a timer fixes a race condition in =
Firefox, IE =0A=
                and Opera where the browser viewport jumps as it trys to =0A=
                position and focus the menu.=0A=
            */=0A=
=0A=
            window.setTimeout(setFocus, 0);=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method blur=0A=
    * @description Causes the menu item to lose focus and fires the =0A=
    * blur event.=0A=
    */    =0A=
    blur: function () {=0A=
=0A=
        var oParent =3D this.parent;=0A=
=0A=
        if (!this.cfg.getProperty("disabled") && oParent && =0A=
            oParent.cfg.getProperty("visible")) {=0A=
=0A=
=0A=
            var me =3D this;=0A=
            =0A=
            window.setTimeout(function () {=0A=
=0A=
                try {=0A=
    =0A=
                    me._oAnchor.blur();=0A=
                    me.blurEvent.fire();    =0A=
=0A=
                } =0A=
                catch (e) {=0A=
                =0A=
                }=0A=
                =0A=
            }, 0);=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method hasFocus=0A=
    * @description Returns a boolean indicating whether or not the menu =
item=0A=
    * has focus.=0A=
    * @return {Boolean}=0A=
    */=0A=
    hasFocus: function () {=0A=
    =0A=
        return (YAHOO.widget.MenuManager.getFocusedMenuItem() =3D=3D =
this);=0A=
    =0A=
    },=0A=
=0A=
=0A=
	/**=0A=
    * @method destroy=0A=
	* @description Removes the menu item's <code>&#60;li&#62;</code> =
element =0A=
	* from its parent <code>&#60;ul&#62;</code> element.=0A=
	*/=0A=
    destroy: function () {=0A=
=0A=
        var oEl =3D this.element,=0A=
            oSubmenu,=0A=
            oParentNode;=0A=
=0A=
        if (oEl) {=0A=
=0A=
=0A=
            // If the item has a submenu, destroy it first=0A=
=0A=
            oSubmenu =3D this.cfg.getProperty("submenu");=0A=
=0A=
            if (oSubmenu) {=0A=
            =0A=
                oSubmenu.destroy();=0A=
            =0A=
            }=0A=
=0A=
=0A=
            // Remove CustomEvent listeners=0A=
    =0A=
            this.mouseOverEvent.unsubscribeAll();=0A=
            this.mouseOutEvent.unsubscribeAll();=0A=
            this.mouseDownEvent.unsubscribeAll();=0A=
            this.mouseUpEvent.unsubscribeAll();=0A=
            this.clickEvent.unsubscribeAll();=0A=
            this.keyPressEvent.unsubscribeAll();=0A=
            this.keyDownEvent.unsubscribeAll();=0A=
            this.keyUpEvent.unsubscribeAll();=0A=
            this.focusEvent.unsubscribeAll();=0A=
            this.blurEvent.unsubscribeAll();=0A=
            this.cfg.configChangedEvent.unsubscribeAll();=0A=
=0A=
=0A=
            // Remove the element from the parent node=0A=
=0A=
            oParentNode =3D oEl.parentNode;=0A=
=0A=
            if (oParentNode) {=0A=
=0A=
                oParentNode.removeChild(oEl);=0A=
=0A=
                this.destroyEvent.fire();=0A=
=0A=
            }=0A=
=0A=
            this.destroyEvent.unsubscribeAll();=0A=
=0A=
        }=0A=
=0A=
    },=0A=
=0A=
=0A=
    /**=0A=
    * @method toString=0A=
    * @description Returns a string representing the menu item.=0A=
    * @return {String}=0A=
    */=0A=
    toString: function () {=0A=
=0A=
        var sReturnVal =3D "MenuItem",=0A=
            sId =3D this.id;=0A=
=0A=
        if (sId) {=0A=
    =0A=
            sReturnVal +=3D (" " + sId);=0A=
        =0A=
        }=0A=
=0A=
        return sReturnVal;=0A=
    =0A=
    }=0A=
=0A=
};=0A=
=0A=
Lang.augmentProto(MenuItem, YAHOO.util.EventProvider);=0A=
=0A=
})();=0A=
(function () {=0A=
=0A=
=0A=
/**=0A=
* Creates a list of options or commands which are made visible in =
response to =0A=
* an HTML element's "contextmenu" event ("mousedown" for Opera).=0A=
*=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;div&#62;</code> element of the context menu.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;select&#62;</code> element to be used as the data source =
for the =0A=
* context menu.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-=0A=
* html.html#ID-22445964">HTMLDivElement</a>} p_oElement Object =
specifying the =0A=
* <code>&#60;div&#62;</code> element of the context menu.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-=0A=
* html.html#ID-94282980">HTMLSelectElement</a>} p_oElement Object =
specifying =0A=
* the <code>&#60;select&#62;</code> element to be used as the data =
source for =0A=
* the context menu.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the context menu. See configuration class =
documentation =0A=
* for more details.=0A=
* @class ContextMenu=0A=
* @constructor=0A=
* @extends YAHOO.widget.Menu=0A=
* @namespace YAHOO.widget=0A=
*/=0A=
YAHOO.widget.ContextMenu =3D function(p_oElement, p_oConfig) {=0A=
=0A=
    YAHOO.widget.ContextMenu.superclass.constructor.call(this, =0A=
            p_oElement, p_oConfig);=0A=
=0A=
};=0A=
=0A=
=0A=
var Event =3D YAHOO.util.Event,=0A=
    ContextMenu =3D YAHOO.widget.ContextMenu,=0A=
=0A=
=0A=
=0A=
    /**=0A=
    * Constant representing the name of the ContextMenu's events=0A=
    * @property EVENT_TYPES=0A=
    * @private=0A=
    * @final=0A=
    * @type Object=0A=
    */=0A=
    EVENT_TYPES =3D {=0A=
=0A=
        "TRIGGER_CONTEXT_MENU": "triggerContextMenu",=0A=
        "CONTEXT_MENU": (YAHOO.env.ua.opera ? "mousedown" : =
"contextmenu"),=0A=
        "CLICK": "click"=0A=
=0A=
    },=0A=
    =0A=
    =0A=
    /**=0A=
    * Constant representing the ContextMenu's configuration properties=0A=
    * @property DEFAULT_CONFIG=0A=
    * @private=0A=
    * @final=0A=
    * @type Object=0A=
    */=0A=
    DEFAULT_CONFIG =3D {=0A=
    =0A=
        "TRIGGER": { =0A=
            key: "trigger",=0A=
            suppressEvent: true=0A=
        }=0A=
    =0A=
    };=0A=
=0A=
=0A=
/**=0A=
* @method position=0A=
* @description "beforeShow" event handler used to position the =
contextmenu.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {Array} p_aPos Array representing the xy position for the =
context menu.=0A=
*/=0A=
function position(p_sType, p_aArgs, p_aPos) {=0A=
=0A=
    this.cfg.setProperty("xy", p_aPos);=0A=
    =0A=
    this.beforeShowEvent.unsubscribe(position, p_aPos);=0A=
=0A=
}=0A=
=0A=
=0A=
YAHOO.lang.extend(ContextMenu, YAHOO.widget.Menu, {=0A=
=0A=
=0A=
=0A=
// Private properties=0A=
=0A=
=0A=
/**=0A=
* @property _oTrigger=0A=
* @description Object reference to the current value of the "trigger" =0A=
* configuration property.=0A=
* @default null=0A=
* @private=0A=
* @type String|<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/leve=0A=
* l-one-html.html#ID-58190037">HTMLElement</a>|Array=0A=
*/=0A=
_oTrigger: null,=0A=
=0A=
=0A=
/**=0A=
* @property _bCancelled=0A=
* @description Boolean indicating if the display of the context menu =
should =0A=
* be cancelled.=0A=
* @default false=0A=
* @private=0A=
* @type Boolean=0A=
*/=0A=
_bCancelled: false,=0A=
=0A=
=0A=
=0A=
// Public properties=0A=
=0A=
=0A=
/**=0A=
* @property contextEventTarget=0A=
* @description Object reference for the HTML element that was the target =
of the=0A=
* "contextmenu" DOM event ("mousedown" for Opera) that triggered the =
display of =0A=
* the context menu.=0A=
* @default null=0A=
* @type <a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-=0A=
* html.html#ID-58190037">HTMLElement</a>=0A=
*/=0A=
contextEventTarget: null,=0A=
=0A=
=0A=
=0A=
// Events=0A=
=0A=
=0A=
/**=0A=
* @event triggerContextMenuEvent=0A=
* @description Custom Event wrapper for the "contextmenu" DOM event =0A=
* ("mousedown" for Opera) fired by the element(s) that trigger the =
display of =0A=
* the context menu.=0A=
*/=0A=
triggerContextMenuEvent: null,=0A=
=0A=
=0A=
=0A=
/**=0A=
* @method init=0A=
* @description The ContextMenu class's initialization method. This =
method is =0A=
* automatically called by the constructor, and sets up all DOM =
references for =0A=
* pre-existing markup, and creates required markup if it is not already =
present.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;div&#62;</code> element of the context menu.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;select&#62;</code> element to be used as the data source =
for =0A=
* the context menu.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-=0A=
* html.html#ID-22445964">HTMLDivElement</a>} p_oElement Object =
specifying the =0A=
* <code>&#60;div&#62;</code> element of the context menu.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-=0A=
* html.html#ID-94282980">HTMLSelectElement</a>} p_oElement Object =
specifying =0A=
* the <code>&#60;select&#62;</code> element to be used as the data =
source for =0A=
* the context menu.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the context menu. See configuration class =
documentation =0A=
* for more details.=0A=
*/=0A=
init: function(p_oElement, p_oConfig) {=0A=
=0A=
=0A=
    // Call the init of the superclass (YAHOO.widget.Menu)=0A=
=0A=
    ContextMenu.superclass.init.call(this, p_oElement);=0A=
=0A=
=0A=
    this.beforeInitEvent.fire(ContextMenu);=0A=
=0A=
=0A=
    if(p_oConfig) {=0A=
=0A=
        this.cfg.applyConfig(p_oConfig, true);=0A=
=0A=
    }=0A=
    =0A=
    =0A=
    this.initEvent.fire(ContextMenu);=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method initEvents=0A=
* @description Initializes the custom events for the context menu.=0A=
*/=0A=
initEvents: function() {=0A=
=0A=
	ContextMenu.superclass.initEvents.call(this);=0A=
=0A=
    // Create custom events=0A=
=0A=
    this.triggerContextMenuEvent =3D =0A=
        this.createEvent(EVENT_TYPES.TRIGGER_CONTEXT_MENU);=0A=
=0A=
    this.triggerContextMenuEvent.signature =3D =
YAHOO.util.CustomEvent.LIST;=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method cancel=0A=
* @description Cancels the display of the context menu.=0A=
*/=0A=
cancel: function() {=0A=
=0A=
    this._bCancelled =3D true;=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Private methods=0A=
=0A=
=0A=
/**=0A=
* @method _removeEventHandlers=0A=
* @description Removes all of the DOM event handlers from the HTML =
element(s) =0A=
* whose "context menu" event ("click" for Opera) trigger the display of =0A=
* the context menu.=0A=
* @private=0A=
*/=0A=
_removeEventHandlers: function() {=0A=
=0A=
    var oTrigger =3D this._oTrigger;=0A=
=0A=
=0A=
    // Remove the event handlers from the trigger(s)=0A=
=0A=
    if (oTrigger) {=0A=
=0A=
        Event.removeListener(oTrigger, EVENT_TYPES.CONTEXT_MENU, =0A=
            this._onTriggerContextMenu);    =0A=
        =0A=
        if(YAHOO.env.ua.opera) {=0A=
        =0A=
            Event.removeListener(oTrigger, EVENT_TYPES.CLICK, =0A=
                this._onTriggerClick);=0A=
    =0A=
        }=0A=
=0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Private event handlers=0A=
=0A=
=0A=
=0A=
/**=0A=
* @method _onTriggerClick=0A=
* @description "click" event handler for the HTML element(s) identified =
as the =0A=
* "trigger" for the context menu.  Used to cancel default behaviors in =
Opera.=0A=
* @private=0A=
* @param {Event} p_oEvent Object representing the DOM event object =
passed back =0A=
* by the event utility (YAHOO.util.Event).=0A=
* @param {YAHOO.widget.ContextMenu} p_oMenu Object representing the =
context =0A=
* menu that is handling the event.=0A=
*/=0A=
_onTriggerClick: function(p_oEvent, p_oMenu) {=0A=
=0A=
    if(p_oEvent.ctrlKey) {=0A=
    =0A=
        Event.stopEvent(p_oEvent);=0A=
=0A=
    }=0A=
    =0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onTriggerContextMenu=0A=
* @description "contextmenu" event handler ("mousedown" for Opera) for =
the HTML =0A=
* element(s) that trigger the display of the context menu.=0A=
* @private=0A=
* @param {Event} p_oEvent Object representing the DOM event object =
passed back =0A=
* by the event utility (YAHOO.util.Event).=0A=
* @param {YAHOO.widget.ContextMenu} p_oMenu Object representing the =
context =0A=
* menu that is handling the event.=0A=
*/=0A=
_onTriggerContextMenu: function(p_oEvent, p_oMenu) {=0A=
=0A=
    if (p_oEvent.type =3D=3D "mousedown" && !p_oEvent.ctrlKey) {=0A=
=0A=
        return;=0A=
=0A=
    }=0A=
=0A=
=0A=
    var aXY;=0A=
=0A=
=0A=
    /*=0A=
        Prevent the browser's default context menu from appearing and =0A=
        stop the propagation of the "contextmenu" event so that =0A=
        other ContextMenu instances are not displayed.=0A=
    */=0A=
=0A=
    Event.stopEvent(p_oEvent);=0A=
=0A=
=0A=
    this.contextEventTarget =3D Event.getTarget(p_oEvent);=0A=
=0A=
    this.triggerContextMenuEvent.fire(p_oEvent);=0A=
=0A=
=0A=
    // Hide any other Menu instances that might be visible=0A=
=0A=
    YAHOO.widget.MenuManager.hideVisible();=0A=
    =0A=
=0A=
=0A=
    if(!this._bCancelled) {=0A=
=0A=
        // Position and display the context menu=0A=
=0A=
        aXY =3D Event.getXY(p_oEvent);=0A=
=0A=
=0A=
        if (!YAHOO.util.Dom.inDocument(this.element)) {=0A=
=0A=
            this.beforeShowEvent.subscribe(position, aXY);=0A=
=0A=
        }=0A=
        else {=0A=
=0A=
            this.cfg.setProperty("xy", aXY);=0A=
        =0A=
        }=0A=
=0A=
=0A=
        this.show();=0A=
=0A=
    }=0A=
=0A=
    this._bCancelled =3D false;=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Public methods=0A=
=0A=
=0A=
/**=0A=
* @method toString=0A=
* @description Returns a string representing the context menu.=0A=
* @return {String}=0A=
*/=0A=
toString: function() {=0A=
=0A=
    var sReturnVal =3D "ContextMenu",=0A=
        sId =3D this.id;=0A=
=0A=
    if(sId) {=0A=
=0A=
        sReturnVal +=3D (" " + sId);=0A=
    =0A=
    }=0A=
=0A=
    return sReturnVal;=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method initDefaultConfig=0A=
* @description Initializes the class's configurable properties which can =
be =0A=
* changed using the context menu's Config object ("cfg").=0A=
*/=0A=
initDefaultConfig: function() {=0A=
=0A=
    ContextMenu.superclass.initDefaultConfig.call(this);=0A=
=0A=
    /**=0A=
    * @config trigger=0A=
    * @description The HTML element(s) whose "contextmenu" event =
("mousedown" =0A=
    * for Opera) trigger the display of the context menu.  Can be a =
string =0A=
    * representing the id attribute of the HTML element, an object =
reference =0A=
    * for the HTML element, or an array of strings or HTML element =
references.=0A=
    * @default null=0A=
    * @type String|<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/=0A=
    * level-one-html.html#ID-58190037">HTMLElement</a>|Array=0A=
    */=0A=
    this.cfg.addProperty(DEFAULT_CONFIG.TRIGGER.key, =0A=
        {=0A=
            handler: this.configTrigger, =0A=
            suppressEvent: DEFAULT_CONFIG.TRIGGER.suppressEvent =0A=
        }=0A=
    );=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method destroy=0A=
* @description Removes the context menu's <code>&#60;div&#62;</code> =
element =0A=
* (and accompanying child nodes) from the document.=0A=
*/=0A=
destroy: function() {=0A=
=0A=
    // Remove the DOM event handlers from the current trigger(s)=0A=
=0A=
    this._removeEventHandlers();=0A=
=0A=
=0A=
    // Continue with the superclass implementation of this method=0A=
=0A=
    ContextMenu.superclass.destroy.call(this);=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Public event handlers for configuration properties=0A=
=0A=
=0A=
/**=0A=
* @method configTrigger=0A=
* @description Event handler for when the value of the "trigger" =
configuration =0A=
* property changes. =0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.ContextMenu} p_oMenu Object representing the =
context =0A=
* menu that fired the event.=0A=
*/=0A=
configTrigger: function(p_sType, p_aArgs, p_oMenu) {=0A=
    =0A=
    var oTrigger =3D p_aArgs[0];=0A=
=0A=
    if(oTrigger) {=0A=
=0A=
        /*=0A=
            If there is a current "trigger" - remove the event handlers =0A=
            from that element(s) before assigning new ones=0A=
        */=0A=
=0A=
        if(this._oTrigger) {=0A=
        =0A=
            this._removeEventHandlers();=0A=
=0A=
        }=0A=
=0A=
        this._oTrigger =3D oTrigger;=0A=
=0A=
=0A=
        /*=0A=
            Listen for the "mousedown" event in Opera b/c it does not =0A=
            support the "contextmenu" event=0A=
        */ =0A=
  =0A=
        Event.on(oTrigger, EVENT_TYPES.CONTEXT_MENU, =0A=
            this._onTriggerContextMenu, this, true);=0A=
=0A=
=0A=
        /*=0A=
            Assign a "click" event handler to the trigger element(s) for=0A=
            Opera to prevent default browser behaviors.=0A=
        */=0A=
=0A=
        if(YAHOO.env.ua.opera) {=0A=
        =0A=
            Event.on(oTrigger, EVENT_TYPES.CLICK, this._onTriggerClick, =0A=
                this, true);=0A=
=0A=
        }=0A=
=0A=
    }=0A=
    else {=0A=
   =0A=
        this._removeEventHandlers();=0A=
    =0A=
    }=0A=
    =0A=
}=0A=
=0A=
}); // END YAHOO.lang.extend=0A=
=0A=
}());=0A=
=0A=
=0A=
=0A=
/**=0A=
* Creates an item for a context menu.=0A=
* =0A=
* @param {String} p_oObject String specifying the text of the context =
menu item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-74680021">HTMLLIElement</a>} p_oObject Object =
specifying the =0A=
* <code>&#60;li&#62;</code> element of the context menu item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-38450247">HTMLOptGroupElement</a>} p_oObject Object =0A=
* specifying the <code>&#60;optgroup&#62;</code> element of the context =0A=
* menu item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-70901257">HTMLOptionElement</a>} p_oObject Object =
specifying =0A=
* the <code>&#60;option&#62;</code> element of the context menu item.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the context menu item. See configuration class =0A=
* documentation for more details.=0A=
* @class ContextMenuItem=0A=
* @constructor=0A=
* @extends YAHOO.widget.MenuItem=0A=
* @deprecated As of version 2.4.0 items for YAHOO.widget.ContextMenu =
instances=0A=
* are of type YAHOO.widget.MenuItem.=0A=
*/=0A=
YAHOO.widget.ContextMenuItem =3D YAHOO.widget.MenuItem;=0A=
(function () {=0A=
=0A=
=0A=
/**=0A=
* Horizontal collection of items, each of which can contain a submenu.=0A=
* =0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;div&#62;</code> element of the menu bar.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;select&#62;</code> element to be used as the data source =
for the =0A=
* menu bar.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-22445964">HTMLDivElement</a>} p_oElement Object =
specifying =0A=
* the <code>&#60;div&#62;</code> element of the menu bar.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-94282980">HTMLSelectElement</a>} p_oElement Object =0A=
* specifying the <code>&#60;select&#62;</code> element to be used as the =
data =0A=
* source for the menu bar.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the menu bar. See configuration class documentation =
for=0A=
* more details.=0A=
* @class MenuBar=0A=
* @constructor=0A=
* @extends YAHOO.widget.Menu=0A=
* @namespace YAHOO.widget=0A=
*/=0A=
YAHOO.widget.MenuBar =3D function(p_oElement, p_oConfig) {=0A=
=0A=
    YAHOO.widget.MenuBar.superclass.constructor.call(this, =0A=
        p_oElement, p_oConfig);=0A=
=0A=
};=0A=
=0A=
=0A=
/**=0A=
* @method checkPosition=0A=
* @description Checks to make sure that the value of the "position" =
property =0A=
* is one of the supported strings. Returns true if the position is =
supported.=0A=
* @private=0A=
* @param {Object} p_sPosition String specifying the position of the menu.=0A=
* @return {Boolean}=0A=
*/=0A=
function checkPosition(p_sPosition) {=0A=
=0A=
    if (typeof p_sPosition =3D=3D "string") {=0A=
=0A=
        return ("dynamic,static".indexOf((p_sPosition.toLowerCase())) =
!=3D -1);=0A=
=0A=
    }=0A=
=0A=
}=0A=
=0A=
=0A=
var Event =3D YAHOO.util.Event,=0A=
    MenuBar =3D YAHOO.widget.MenuBar,=0A=
=0A=
    /**=0A=
    * Constant representing the MenuBar's configuration properties=0A=
    * @property DEFAULT_CONFIG=0A=
    * @private=0A=
    * @final=0A=
    * @type Object=0A=
    */=0A=
    DEFAULT_CONFIG =3D {=0A=
    =0A=
        "POSITION": { =0A=
            key: "position", =0A=
            value: "static", =0A=
            validator: checkPosition, =0A=
            supercedes: ["visible"] =0A=
        }, =0A=
    =0A=
        "SUBMENU_ALIGNMENT": { =0A=
            key: "submenualignment", =0A=
            value: ["tl","bl"],=0A=
            suppressEvent: true =0A=
        },=0A=
    =0A=
        "AUTO_SUBMENU_DISPLAY": { =0A=
            key: "autosubmenudisplay", =0A=
            value: false, =0A=
            validator: YAHOO.lang.isBoolean,=0A=
            suppressEvent: true=0A=
        }=0A=
    =0A=
    };=0A=
=0A=
=0A=
=0A=
YAHOO.lang.extend(MenuBar, YAHOO.widget.Menu, {=0A=
=0A=
/**=0A=
* @method init=0A=
* @description The MenuBar class's initialization method. This method is =0A=
* automatically called by the constructor, and sets up all DOM =
references for =0A=
* pre-existing markup, and creates required markup if it is not already =
present.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;div&#62;</code> element of the menu bar.=0A=
* @param {String} p_oElement String specifying the id attribute of the =0A=
* <code>&#60;select&#62;</code> element to be used as the data source =
for the =0A=
* menu bar.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-22445964">HTMLDivElement</a>} p_oElement Object =
specifying =0A=
* the <code>&#60;div&#62;</code> element of the menu bar.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-94282980">HTMLSelectElement</a>} p_oElement Object =0A=
* specifying the <code>&#60;select&#62;</code> element to be used as the =
data =0A=
* source for the menu bar.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the menu bar. See configuration class documentation =
for=0A=
* more details.=0A=
*/=0A=
init: function(p_oElement, p_oConfig) {=0A=
=0A=
    if(!this.ITEM_TYPE) {=0A=
=0A=
        this.ITEM_TYPE =3D YAHOO.widget.MenuBarItem;=0A=
=0A=
    }=0A=
=0A=
=0A=
    // Call the init of the superclass (YAHOO.widget.Menu)=0A=
=0A=
    MenuBar.superclass.init.call(this, p_oElement);=0A=
=0A=
=0A=
    this.beforeInitEvent.fire(MenuBar);=0A=
=0A=
=0A=
    if(p_oConfig) {=0A=
=0A=
        this.cfg.applyConfig(p_oConfig, true);=0A=
=0A=
    }=0A=
=0A=
    this.initEvent.fire(MenuBar);=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Constants=0A=
=0A=
=0A=
/**=0A=
* @property CSS_CLASS_NAME=0A=
* @description String representing the CSS class(es) to be applied to =
the menu =0A=
* bar's <code>&#60;div&#62;</code> element.=0A=
* @default "yuimenubar"=0A=
* @final=0A=
* @type String=0A=
*/=0A=
CSS_CLASS_NAME: "yuimenubar",=0A=
=0A=
=0A=
=0A=
// Protected event handlers=0A=
=0A=
=0A=
/**=0A=
* @method _onKeyDown=0A=
* @description "keydown" Custom Event handler for the menu bar.=0A=
* @private=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.MenuBar} p_oMenuBar Object representing the menu =
bar =0A=
* that fired the event.=0A=
*/=0A=
_onKeyDown: function(p_sType, p_aArgs, p_oMenuBar) {=0A=
=0A=
    var oEvent =3D p_aArgs[0],=0A=
        oItem =3D p_aArgs[1],=0A=
        oSubmenu,=0A=
        oItemCfg,=0A=
        oNextItem;=0A=
=0A=
=0A=
    if(oItem && !oItem.cfg.getProperty("disabled")) {=0A=
=0A=
        oItemCfg =3D oItem.cfg;=0A=
=0A=
        switch(oEvent.keyCode) {=0A=
    =0A=
            case 37:    // Left arrow=0A=
            case 39:    // Right arrow=0A=
    =0A=
                if(oItem =3D=3D this.activeItem && =0A=
                    !oItemCfg.getProperty("selected")) {=0A=
    =0A=
                    oItemCfg.setProperty("selected", true);=0A=
    =0A=
                }=0A=
                else {=0A=
    =0A=
                    oNextItem =3D (oEvent.keyCode =3D=3D 37) ? =0A=
                        oItem.getPreviousEnabledSibling() : =0A=
                        oItem.getNextEnabledSibling();=0A=
            =0A=
                    if(oNextItem) {=0A=
    =0A=
                        this.clearActiveItem();=0A=
    =0A=
                        oNextItem.cfg.setProperty("selected", true);=0A=
    =0A=
    =0A=
                        if(this.cfg.getProperty("autosubmenudisplay")) {=0A=
                        =0A=
                            oSubmenu =3D =
oNextItem.cfg.getProperty("submenu");=0A=
                            =0A=
                            if(oSubmenu) {=0A=
                        =0A=
                                oSubmenu.show();=0A=
                            =0A=
                            }=0A=
                =0A=
                        }           =0A=
    =0A=
                        oNextItem.focus();=0A=
    =0A=
                    }=0A=
    =0A=
                }=0A=
    =0A=
                Event.preventDefault(oEvent);=0A=
    =0A=
            break;=0A=
    =0A=
            case 40:    // Down arrow=0A=
    =0A=
                if(this.activeItem !=3D oItem) {=0A=
    =0A=
                    this.clearActiveItem();=0A=
    =0A=
                    oItemCfg.setProperty("selected", true);=0A=
                    oItem.focus();=0A=
                =0A=
                }=0A=
    =0A=
                oSubmenu =3D oItemCfg.getProperty("submenu");=0A=
    =0A=
                if(oSubmenu) {=0A=
    =0A=
                    if(oSubmenu.cfg.getProperty("visible")) {=0A=
    =0A=
                        oSubmenu.setInitialSelection();=0A=
                        oSubmenu.setInitialFocus();=0A=
                    =0A=
                    }=0A=
                    else {=0A=
    =0A=
                        oSubmenu.show();=0A=
                    =0A=
                    }=0A=
    =0A=
                }=0A=
    =0A=
                Event.preventDefault(oEvent);=0A=
    =0A=
            break;=0A=
    =0A=
        }=0A=
=0A=
    }=0A=
=0A=
=0A=
    if(oEvent.keyCode =3D=3D 27 && this.activeItem) { // Esc key=0A=
=0A=
        oSubmenu =3D this.activeItem.cfg.getProperty("submenu");=0A=
=0A=
        if(oSubmenu && oSubmenu.cfg.getProperty("visible")) {=0A=
        =0A=
            oSubmenu.hide();=0A=
            this.activeItem.focus();=0A=
        =0A=
        }=0A=
        else {=0A=
=0A=
            this.activeItem.cfg.setProperty("selected", false);=0A=
            this.activeItem.blur();=0A=
    =0A=
        }=0A=
=0A=
        Event.preventDefault(oEvent);=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @method _onClick=0A=
* @description "click" event handler for the menu bar.=0A=
* @protected=0A=
* @param {String} p_sType String representing the name of the event that =0A=
* was fired.=0A=
* @param {Array} p_aArgs Array of arguments sent when the event was =
fired.=0A=
* @param {YAHOO.widget.MenuBar} p_oMenuBar Object representing the menu =
bar =0A=
* that fired the event.=0A=
*/=0A=
_onClick: function(p_sType, p_aArgs, p_oMenuBar) {=0A=
=0A=
    MenuBar.superclass._onClick.call(this, p_sType, p_aArgs, p_oMenuBar);=0A=
=0A=
    var oItem =3D p_aArgs[1],=0A=
        oEvent,=0A=
        oTarget,=0A=
        oActiveItem,=0A=
        oConfig,=0A=
        oSubmenu;=0A=
    =0A=
=0A=
    if(oItem && !oItem.cfg.getProperty("disabled")) {=0A=
=0A=
        oEvent =3D p_aArgs[0];=0A=
        oTarget =3D Event.getTarget(oEvent);=0A=
        oActiveItem =3D this.activeItem;=0A=
        oConfig =3D this.cfg;=0A=
=0A=
=0A=
        // Hide any other submenus that might be visible=0A=
    =0A=
        if(oActiveItem && oActiveItem !=3D oItem) {=0A=
    =0A=
            this.clearActiveItem();=0A=
    =0A=
        }=0A=
=0A=
    =0A=
        oItem.cfg.setProperty("selected", true);=0A=
    =0A=
=0A=
        // Show the submenu for the item=0A=
    =0A=
        oSubmenu =3D oItem.cfg.getProperty("submenu");=0A=
=0A=
=0A=
        if(oSubmenu) {=0A=
        =0A=
            if(oSubmenu.cfg.getProperty("visible")) {=0A=
            =0A=
                oSubmenu.hide();=0A=
            =0A=
            }=0A=
            else {=0A=
            =0A=
                oSubmenu.show();                    =0A=
            =0A=
            }=0A=
        =0A=
        }=0A=
    =0A=
    }=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Public methods=0A=
=0A=
=0A=
/**=0A=
* @method toString=0A=
* @description Returns a string representing the menu bar.=0A=
* @return {String}=0A=
*/=0A=
toString: function() {=0A=
=0A=
    var sReturnVal =3D "MenuBar",=0A=
        sId =3D this.id;=0A=
=0A=
    if(sId) {=0A=
=0A=
        sReturnVal +=3D (" " + sId);=0A=
    =0A=
    }=0A=
=0A=
    return sReturnVal;=0A=
=0A=
},=0A=
=0A=
=0A=
/**=0A=
* @description Initializes the class's configurable properties which can =
be=0A=
* changed using the menu bar's Config object ("cfg").=0A=
* @method initDefaultConfig=0A=
*/=0A=
initDefaultConfig: function() {=0A=
=0A=
    MenuBar.superclass.initDefaultConfig.call(this);=0A=
=0A=
    var oConfig =3D this.cfg;=0A=
=0A=
	// Add configuration properties=0A=
=0A=
=0A=
    /*=0A=
        Set the default value for the "position" configuration property=0A=
        to "static" by re-adding the property.=0A=
    */=0A=
=0A=
=0A=
    /**=0A=
    * @config position=0A=
    * @description String indicating how a menu bar should be positioned =
on the =0A=
    * screen.  Possible values are "static" and "dynamic."  Static menu =
bars =0A=
    * are visible by default and reside in the normal flow of the =
document =0A=
    * (CSS position: static).  Dynamic menu bars are hidden by default, =
reside=0A=
    * out of the normal flow of the document (CSS position: absolute), =
and can =0A=
    * overlay other elements on the screen.=0A=
    * @default static=0A=
    * @type String=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.POSITION.key, =0A=
        {=0A=
            handler: this.configPosition, =0A=
            value: DEFAULT_CONFIG.POSITION.value, =0A=
            validator: DEFAULT_CONFIG.POSITION.validator,=0A=
            supercedes: DEFAULT_CONFIG.POSITION.supercedes=0A=
        }=0A=
    );=0A=
=0A=
=0A=
    /*=0A=
        Set the default value for the "submenualignment" configuration =
property=0A=
        to ["tl","bl"] by re-adding the property.=0A=
    */=0A=
=0A=
    /**=0A=
    * @config submenualignment=0A=
    * @description Array defining how submenus should be aligned to =
their =0A=
    * parent menu bar item. The format is: [itemCorner, submenuCorner].=0A=
    * @default ["tl","bl"]=0A=
    * @type Array=0A=
    */=0A=
    oConfig.addProperty(=0A=
        DEFAULT_CONFIG.SUBMENU_ALIGNMENT.key, =0A=
        {=0A=
            value: DEFAULT_CONFIG.SUBMENU_ALIGNMENT.value,=0A=
            suppressEvent: DEFAULT_CONFIG.SUBMENU_ALIGNMENT.suppressEvent=0A=
        }=0A=
    );=0A=
=0A=
=0A=
    /*=0A=
        Change the default value for the "autosubmenudisplay" =
configuration =0A=
        property to "false" by re-adding the property.=0A=
    */=0A=
=0A=
    /**=0A=
    * @config autosubmenudisplay=0A=
    * @description Boolean indicating if submenus are automatically made =0A=
    * visible when the user mouses over the menu bar's items.=0A=
    * @default false=0A=
    * @type Boolean=0A=
    */=0A=
	oConfig.addProperty(=0A=
	   DEFAULT_CONFIG.AUTO_SUBMENU_DISPLAY.key, =0A=
	   {=0A=
	       value: DEFAULT_CONFIG.AUTO_SUBMENU_DISPLAY.value, =0A=
	       validator: DEFAULT_CONFIG.AUTO_SUBMENU_DISPLAY.validator,=0A=
	       suppressEvent: DEFAULT_CONFIG.AUTO_SUBMENU_DISPLAY.suppressEvent=0A=
       } =0A=
    );=0A=
=0A=
}=0A=
 =0A=
}); // END YAHOO.lang.extend=0A=
=0A=
}());=0A=
=0A=
=0A=
=0A=
/**=0A=
* Creates an item for a menu bar.=0A=
* =0A=
* @param {String} p_oObject String specifying the text of the menu bar =
item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-74680021">HTMLLIElement</a>} p_oObject Object =
specifying the =0A=
* <code>&#60;li&#62;</code> element of the menu bar item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-38450247">HTMLOptGroupElement</a>} p_oObject Object =0A=
* specifying the <code>&#60;optgroup&#62;</code> element of the menu bar =
item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-70901257">HTMLOptionElement</a>} p_oObject Object =
specifying =0A=
* the <code>&#60;option&#62;</code> element of the menu bar item.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the menu bar item. See configuration class =
documentation =0A=
* for more details.=0A=
* @class MenuBarItem=0A=
* @constructor=0A=
* @extends YAHOO.widget.MenuItem=0A=
*/=0A=
YAHOO.widget.MenuBarItem =3D function(p_oObject, p_oConfig) {=0A=
=0A=
    YAHOO.widget.MenuBarItem.superclass.constructor.call(this, =0A=
        p_oObject, p_oConfig);=0A=
=0A=
};=0A=
=0A=
YAHOO.lang.extend(YAHOO.widget.MenuBarItem, YAHOO.widget.MenuItem, {=0A=
=0A=
=0A=
=0A=
/**=0A=
* @method init=0A=
* @description The MenuBarItem class's initialization method. This =
method is =0A=
* automatically called by the constructor, and sets up all DOM =
references for =0A=
* pre-existing markup, and creates required markup if it is not already =
present.=0A=
* @param {String} p_oObject String specifying the text of the menu bar =
item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-74680021">HTMLLIElement</a>} p_oObject Object =
specifying the =0A=
* <code>&#60;li&#62;</code> element of the menu bar item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-38450247">HTMLOptGroupElement</a>} p_oObject Object =0A=
* specifying the <code>&#60;optgroup&#62;</code> element of the menu bar =
item.=0A=
* @param {<a =
href=3D"http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-=0A=
* one-html.html#ID-70901257">HTMLOptionElement</a>} p_oObject Object =
specifying =0A=
* the <code>&#60;option&#62;</code> element of the menu bar item.=0A=
* @param {Object} p_oConfig Optional. Object literal specifying the =0A=
* configuration for the menu bar item. See configuration class =
documentation =0A=
* for more details.=0A=
*/=0A=
init: function(p_oObject, p_oConfig) {=0A=
=0A=
    if(!this.SUBMENU_TYPE) {=0A=
=0A=
        this.SUBMENU_TYPE =3D YAHOO.widget.Menu;=0A=
=0A=
    }=0A=
=0A=
=0A=
    /* =0A=
        Call the init of the superclass (YAHOO.widget.MenuItem)=0A=
        Note: We don't pass the user config in here yet =0A=
        because we only want it executed once, at the lowest =0A=
        subclass level.=0A=
    */ =0A=
=0A=
    YAHOO.widget.MenuBarItem.superclass.init.call(this, p_oObject);  =0A=
=0A=
=0A=
    var oConfig =3D this.cfg;=0A=
=0A=
    if(p_oConfig) {=0A=
=0A=
        oConfig.applyConfig(p_oConfig, true);=0A=
=0A=
    }=0A=
=0A=
    oConfig.fireQueue();=0A=
=0A=
},=0A=
=0A=
=0A=
=0A=
// Constants=0A=
=0A=
=0A=
/**=0A=
* @property CSS_CLASS_NAME=0A=
* @description String representing the CSS class(es) to be applied to =
the =0A=
* <code>&#60;li&#62;</code> element of the menu bar item.=0A=
* @default "yuimenubaritem"=0A=
* @final=0A=
* @type String=0A=
*/=0A=
CSS_CLASS_NAME: "yuimenubaritem",=0A=
=0A=
=0A=
/**=0A=
* @property CSS_LABEL_CLASS_NAME=0A=
* @description String representing the CSS class(es) to be applied to =
the =0A=
* menu bar item's <code>&#60;a&#62;</code> element.=0A=
* @default "yuimenubaritemlabel"=0A=
* @final=0A=
* @type String=0A=
*/=0A=
CSS_LABEL_CLASS_NAME: "yuimenubaritemlabel",=0A=
=0A=
=0A=
=0A=
// Public methods=0A=
=0A=
=0A=
/**=0A=
* @method toString=0A=
* @description Returns a string representing the menu bar item.=0A=
* @return {String}=0A=
*/=0A=
toString: function() {=0A=
=0A=
    var sReturnVal =3D "MenuBarItem";=0A=
=0A=
    if(this.cfg && this.cfg.getProperty("text")) {=0A=
=0A=
        sReturnVal +=3D (": " + this.cfg.getProperty("text"));=0A=
=0A=
    }=0A=
=0A=
    return sReturnVal;=0A=
=0A=
}=0A=
    =0A=
}); // END YAHOO.lang.extend=0A=
YAHOO.register("menu", YAHOO.widget.Menu, {version: "2.4.0", build: =
"733"});=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/prototype.js?1248796221

/*  Prototype JavaScript framework, version 1.5.0_rc2=0A=
 *  (c) 2005-2007 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://prototype.conio.net/=0A=
 *=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.5.0_rc2',=0A=
  BrowserFeatures: {=0A=
    XPath: !!document.evaluate=0A=
  },=0A=
=0A=
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',=0A=
  emptyFunction: function() {},=0A=
  K: function(x) { return x }=0A=
}=0A=
=0A=
var Class =3D {=0A=
  create: function() {=0A=
    return function() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
var Abstract =3D new Object();=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
  for (var property in source) {=0A=
    destination[property] =3D source[property];=0A=
  }=0A=
  return destination;=0A=
}=0A=
=0A=
Object.extend(Object, {=0A=
  inspect: function(object) {=0A=
    try {=0A=
      if (object =3D=3D=3D undefined) return 'undefined';=0A=
      if (object =3D=3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : object.toString();=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  },=0A=
=0A=
  keys: function(object) {=0A=
    var keys =3D [];=0A=
    for (var property in object)=0A=
      keys.push(property);=0A=
    return keys;=0A=
  },=0A=
=0A=
  values: function(object) {=0A=
    var values =3D [];=0A=
    for (var property in object)=0A=
      values.push(object[property]);=0A=
    return values;=0A=
  },=0A=
=0A=
  clone: function(object) {=0A=
    return Object.extend({}, object);=0A=
  }=0A=
});=0A=
=0A=
Function.prototype.bind =3D function() {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function() {=0A=
    return __method.apply(object, args.concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Function.prototype.bindAsEventListener =3D function(object) {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function(event) {=0A=
    return __method.apply(object, [( event || =
window.event)].concat(args).concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Number.prototype, {=0A=
  toColorPart: function() {=0A=
    var digits =3D this.toString(16);=0A=
    if (this < 16) return '0' + digits;=0A=
    return digits;=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this + 1;=0A=
  },=0A=
=0A=
  times: function(iterator) {=0A=
    $R(0, this, true).each(iterator);=0A=
    return this;=0A=
  }=0A=
});=0A=
=0A=
var Try =3D {=0A=
  these: function() {=0A=
    var returnValue;=0A=
=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var lambda =3D arguments[i];=0A=
      try {=0A=
        returnValue =3D lambda();=0A=
        break;=0A=
      } catch (e) {}=0A=
    }=0A=
=0A=
    return returnValue;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create();=0A=
PeriodicalExecuter.prototype =3D {=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    if (!this.timer) return;=0A=
    clearInterval(this.timer);=0A=
    this.timer =3D null;=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    if (!this.currentlyExecuting) {=0A=
      try {=0A=
        this.currentlyExecuting =3D true;=0A=
        this.callback(this);=0A=
      } finally {=0A=
        this.currentlyExecuting =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
String.interpret =3D function(value){=0A=
  return value =3D=3D null ? '' : String(value);=0A=
}=0A=
=0A=
Object.extend(String.prototype, {=0A=
  gsub: function(pattern, replacement) {=0A=
    var result =3D '', source =3D this, match;=0A=
    replacement =3D arguments.callee.prepareReplacement(replacement);=0A=
=0A=
    while (source.length > 0) {=0A=
      if (match =3D source.match(pattern)) {=0A=
        result +=3D source.slice(0, match.index);=0A=
        result +=3D String.interpret(replacement(match));=0A=
        source  =3D source.slice(match.index + match[0].length);=0A=
      } else {=0A=
        result +=3D source, source =3D '';=0A=
      }=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  sub: function(pattern, replacement, count) {=0A=
    replacement =3D this.gsub.prepareReplacement(replacement);=0A=
    count =3D count =3D=3D=3D undefined ? 1 : count;=0A=
=0A=
    return this.gsub(pattern, function(match) {=0A=
      if (--count < 0) return match[0];=0A=
      return replacement(match);=0A=
    });=0A=
  },=0A=
=0A=
  scan: function(pattern, iterator) {=0A=
    this.gsub(pattern, iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  truncate: function(length, truncation) {=0A=
    length =3D length || 30;=0A=
    truncation =3D truncation =3D=3D=3D undefined ? '...' : truncation;=0A=
    return this.length > length ?=0A=
      this.slice(0, length - truncation.length) + truncation : this;=0A=
  },=0A=
=0A=
  strip: function() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  },=0A=
=0A=
  stripTags: function() {=0A=
    return this.replace(/<\/?[^>]+>/gi, '');=0A=
  },=0A=
=0A=
  stripScripts: function() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  },=0A=
=0A=
  extractScripts: function() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A=
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  },=0A=
=0A=
  evalScripts: function() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  },=0A=
=0A=
  escapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    var text =3D document.createTextNode(this);=0A=
    div.appendChild(text);=0A=
    return div.innerHTML;=0A=
  },=0A=
=0A=
  unescapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D this.stripTags();=0A=
    return div.childNodes[0] ? (div.childNodes.length > 1 ?=0A=
      $A(div.childNodes).inject('',function(memo,node){ return =
memo+node.nodeValue }) :=0A=
      div.childNodes[0].nodeValue) : '';=0A=
  },=0A=
=0A=
  toQueryParams: function(separator) {=0A=
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
    if (!match) return {};=0A=
=0A=
    return match[1].split(separator || '&').inject({}, function(hash, =
pair) {=0A=
      if ((pair =3D pair.split('=3D'))[0]) {=0A=
        var name =3D decodeURIComponent(pair[0]);=0A=
        var value =3D pair[1] ? decodeURIComponent(pair[1]) : undefined;=0A=
=0A=
        if (hash[name] !=3D=3D undefined) {=0A=
          if (hash[name].constructor !=3D Array)=0A=
            hash[name] =3D [hash[name]];=0A=
          if (value) hash[name].push(value);=0A=
        }=0A=
        else hash[name] =3D value;=0A=
      }=0A=
      return hash;=0A=
    });=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.split('');=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this.slice(0, this.length - 1) +=0A=
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
  },=0A=
=0A=
  camelize: function() {=0A=
    var parts =3D this.split('-'), len =3D parts.length;=0A=
    if (len =3D=3D 1) return parts[0];=0A=
=0A=
    var camelized =3D this.charAt(0) =3D=3D '-'=0A=
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A=
      : parts[0];=0A=
=0A=
    for (var i =3D 1; i < len; i++)=0A=
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);=0A=
=0A=
    return camelized;=0A=
  },=0A=
=0A=
  capitalize: function(){=0A=
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();=0A=
  },=0A=
=0A=
  underscore: function() {=0A=
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();=0A=
  },=0A=
=0A=
  dasherize: function() {=0A=
    return this.gsub(/_/,'-');=0A=
  },=0A=
=0A=
  inspect: function(useDoubleQuotes) {=0A=
    var escapedString =3D this.replace(/\\/g, '\\\\');=0A=
    if (useDoubleQuotes)=0A=
      return '"' + escapedString.replace(/"/g, '\\"') + '"';=0A=
    else=0A=
      return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  }=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
  if (typeof replacement =3D=3D 'function') return replacement;=0A=
  var template =3D new Template(replacement);=0A=
  return function(match) { return template.evaluate(match) };=0A=
}=0A=
=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
=0A=
var Template =3D Class.create();=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
Template.prototype =3D {=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern  =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      var before =3D match[1];=0A=
      if (before =3D=3D '\\') return match[2];=0A=
      return before + String.interpret(object[match[3]]);=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
var $break    =3D new Object();=0A=
var $continue =3D new Object();=0A=
=0A=
var Enumerable =3D {=0A=
  each: function(iterator) {=0A=
    var index =3D 0;=0A=
    try {=0A=
      this._each(function(value) {=0A=
        try {=0A=
          iterator(value, index++);=0A=
        } catch (e) {=0A=
          if (e !=3D $continue) throw e;=0A=
        }=0A=
      });=0A=
    } catch (e) {=0A=
      if (e !=3D $break) throw e;=0A=
    }=0A=
    return this;=0A=
  },=0A=
=0A=
  eachSlice: function(number, iterator) {=0A=
    var index =3D -number, slices =3D [], array =3D this.toArray();=0A=
    while ((index +=3D number) < array.length)=0A=
      slices.push(array.slice(index, index+number));=0A=
    return slices.map(iterator);=0A=
  },=0A=
=0A=
  all: function(iterator) {=0A=
    var result =3D true;=0A=
    this.each(function(value, index) {=0A=
      result =3D result && !!(iterator || Prototype.K)(value, index);=0A=
      if (!result) throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  any: function(iterator) {=0A=
    var result =3D false;=0A=
    this.each(function(value, index) {=0A=
      if (result =3D !!(iterator || Prototype.K)(value, index))=0A=
        throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  collect: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push((iterator || Prototype.K)(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  detect: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index)) {=0A=
        result =3D value;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  findAll: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  grep: function(pattern, iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      var stringValue =3D value.toString();=0A=
      if (stringValue.match(pattern))=0A=
        results.push((iterator || Prototype.K)(value, index));=0A=
    })=0A=
    return results;=0A=
  },=0A=
=0A=
  include: function(object) {=0A=
    var found =3D false;=0A=
    this.each(function(value) {=0A=
      if (value =3D=3D object) {=0A=
        found =3D true;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return found;=0A=
  },=0A=
=0A=
  inGroupsOf: function(number, fillWith) {=0A=
    fillWith =3D fillWith =3D=3D=3D undefined ? null : fillWith;=0A=
    return this.eachSlice(number, function(slice) {=0A=
      while(slice.length < number) slice.push(fillWith);=0A=
      return slice;=0A=
    });=0A=
  },=0A=
=0A=
  inject: function(memo, iterator) {=0A=
    this.each(function(value, index) {=0A=
      memo =3D iterator(memo, value, index);=0A=
    });=0A=
    return memo;=0A=
  },=0A=
=0A=
  invoke: function(method) {=0A=
    var args =3D $A(arguments).slice(1);=0A=
    return this.map(function(value) {=0A=
      return value[method].apply(value, args);=0A=
    });=0A=
  },=0A=
=0A=
  max: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D (iterator || Prototype.K)(value, index);=0A=
      if (result =3D=3D undefined || value >=3D result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  min: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D (iterator || Prototype.K)(value, index);=0A=
      if (result =3D=3D undefined || value < result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  partition: function(iterator) {=0A=
    var trues =3D [], falses =3D [];=0A=
    this.each(function(value, index) {=0A=
      ((iterator || Prototype.K)(value, index) ?=0A=
        trues : falses).push(value);=0A=
    });=0A=
    return [trues, falses];=0A=
  },=0A=
=0A=
  pluck: function(property) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push(value[property]);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  reject: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (!iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  sortBy: function(iterator) {=0A=
    return this.map(function(value, index) {=0A=
      return {value: value, criteria: iterator(value, index)};=0A=
    }).sort(function(left, right) {=0A=
      var a =3D left.criteria, b =3D right.criteria;=0A=
      return a < b ? -1 : a > b ? 1 : 0;=0A=
    }).pluck('value');=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.map();=0A=
  },=0A=
=0A=
  zip: function() {=0A=
    var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
    if (typeof args.last() =3D=3D 'function')=0A=
      iterator =3D args.pop();=0A=
=0A=
    var collections =3D [this].concat(args).map($A);=0A=
    return this.map(function(value, index) {=0A=
      return iterator(collections.pluck(index));=0A=
    });=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.toArray().length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Enumerable:' + this.toArray().inspect() + '>';=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Enumerable, {=0A=
  map:     Enumerable.collect,=0A=
  find:    Enumerable.detect,=0A=
  select:  Enumerable.findAll,=0A=
  member:  Enumerable.include,=0A=
  entries: Enumerable.toArray=0A=
});=0A=
var $A =3D Array.from =3D function(iterable) {=0A=
  if (!iterable) return [];=0A=
  if (iterable.toArray) {=0A=
    return iterable.toArray();=0A=
  } else {=0A=
    var results =3D [];=0A=
    for (var i =3D 0, length =3D iterable.length; i < length; i++)=0A=
      results.push(iterable[i]);=0A=
    return results;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Array.prototype, Enumerable);=0A=
=0A=
if (!Array.prototype._reverse)=0A=
  Array.prototype._reverse =3D Array.prototype.reverse;=0A=
=0A=
Object.extend(Array.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      iterator(this[i]);=0A=
  },=0A=
=0A=
  clear: function() {=0A=
    this.length =3D 0;=0A=
    return this;=0A=
  },=0A=
=0A=
  first: function() {=0A=
    return this[0];=0A=
  },=0A=
=0A=
  last: function() {=0A=
    return this[this.length - 1];=0A=
  },=0A=
=0A=
  compact: function() {=0A=
    return this.select(function(value) {=0A=
      return value !=3D null;=0A=
    });=0A=
  },=0A=
=0A=
  flatten: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.concat(value && value.constructor =3D=3D Array ?=0A=
        value.flatten() : [value]);=0A=
    });=0A=
  },=0A=
=0A=
  without: function() {=0A=
    var values =3D $A(arguments);=0A=
    return this.select(function(value) {=0A=
      return !values.include(value);=0A=
    });=0A=
  },=0A=
=0A=
  indexOf: function(object) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      if (this[i] =3D=3D object) return i;=0A=
    return -1;=0A=
  },=0A=
=0A=
  reverse: function(inline) {=0A=
    return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
  },=0A=
=0A=
  reduce: function() {=0A=
    return this.length > 1 ? this : this[0];=0A=
  },=0A=
=0A=
  uniq: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.include(value) ? array : array.concat([value]);=0A=
    });=0A=
  },=0A=
=0A=
  clone: function() {=0A=
    return [].concat(this);=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
  }=0A=
});=0A=
=0A=
Array.prototype.toArray =3D Array.prototype.clone;=0A=
=0A=
function $w(string){=0A=
  string =3D string.strip();=0A=
  return string ? string.split(/\s+/) : [];=0A=
}=0A=
=0A=
if(window.opera){=0A=
  Array.prototype.concat =3D function(){=0A=
    var array =3D [];=0A=
    for(var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);=0A=
    for(var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      if(arguments[i].constructor =3D=3D Array) {=0A=
        for(var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)=0A=
          array.push(arguments[i][j]);=0A=
      } else {=0A=
        array.push(arguments[i]);=0A=
      }=0A=
    }=0A=
    return array;=0A=
  }=0A=
}=0A=
var Hash =3D {=0A=
  _each: function(iterator) {=0A=
    for (var key in this) {=0A=
      var value =3D this[key];=0A=
      if (typeof value =3D=3D 'function') continue;=0A=
=0A=
      var pair =3D [key, value];=0A=
      pair.key =3D key;=0A=
      pair.value =3D value;=0A=
      iterator(pair);=0A=
    }=0A=
  },=0A=
=0A=
  keys: function() {=0A=
    return this.pluck('key');=0A=
  },=0A=
=0A=
  values: function() {=0A=
    return this.pluck('value');=0A=
  },=0A=
=0A=
  merge: function(hash) {=0A=
    return $H(hash).inject(this, function(mergedHash, pair) {=0A=
      mergedHash[pair.key] =3D pair.value;=0A=
      return mergedHash;=0A=
    });=0A=
  },=0A=
=0A=
  toQueryString: function() {=0A=
    return this.map(function(pair) {=0A=
      if (!pair.key) return null;=0A=
=0A=
      if (pair.value && pair.value.constructor =3D=3D Array) {=0A=
        pair.value =3D pair.value.compact();=0A=
=0A=
        if (pair.value.length < 2) {=0A=
          pair.value =3D pair.value.reduce();=0A=
        } else {=0A=
          var key =3D encodeURIComponent(pair.key);=0A=
          return pair.value.map(function(value) {=0A=
            return key + '=3D' + encodeURIComponent(value);=0A=
		  	  }).join('&');=0A=
        }=0A=
      }=0A=
=0A=
      if (pair.value =3D=3D undefined) pair[1] =3D '';=0A=
      return pair.map(encodeURIComponent).join('=3D');=0A=
    }).join('&');=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Hash:{' + this.map(function(pair) {=0A=
      return pair.map(Object.inspect).join(': ');=0A=
    }).join(', ') + '}>';=0A=
  }=0A=
}=0A=
=0A=
function $H(object) {=0A=
  var hash =3D Object.extend({}, object || {});=0A=
  Object.extend(hash, Enumerable);=0A=
  Object.extend(hash, Hash);=0A=
  return hash;=0A=
}=0A=
ObjectRange =3D Class.create();=0A=
Object.extend(ObjectRange.prototype, Enumerable);=0A=
Object.extend(ObjectRange.prototype, {=0A=
  initialize: function(start, end, exclusive) {=0A=
    this.start =3D start;=0A=
    this.end =3D end;=0A=
    this.exclusive =3D exclusive;=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    var value =3D this.start;=0A=
    while (this.include(value)) {=0A=
      iterator(value);=0A=
      value =3D value.succ();=0A=
    }=0A=
  },=0A=
=0A=
  include: function(value) {=0A=
    if (value < this.start)=0A=
      return false;=0A=
    if (this.exclusive)=0A=
      return value < this.end;=0A=
    return value <=3D this.end;=0A=
  }=0A=
});=0A=
=0A=
var $R =3D function(start, end, exclusive) {=0A=
  return new ObjectRange(start, end, exclusive);=0A=
}=0A=
=0A=
var Ajax =3D {=0A=
  getTransport: function() {=0A=
    return Try.these(=0A=
      function() {return new XMLHttpRequest()},=0A=
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A=
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}=0A=
    ) || false;=0A=
  },=0A=
=0A=
  activeRequestCount: 0=0A=
}=0A=
=0A=
Ajax.Responders =3D {=0A=
  responders: [],=0A=
=0A=
  _each: function(iterator) {=0A=
    this.responders._each(iterator);=0A=
  },=0A=
=0A=
  register: function(responder) {=0A=
    if (!this.include(responder))=0A=
      this.responders.push(responder);=0A=
  },=0A=
=0A=
  unregister: function(responder) {=0A=
    this.responders =3D this.responders.without(responder);=0A=
  },=0A=
=0A=
  dispatch: function(callback, request, transport, json) {=0A=
    this.each(function(responder) {=0A=
      if (typeof responder[callback] =3D=3D 'function') {=0A=
        try {=0A=
          responder[callback].apply(responder, [request, transport, =
json]);=0A=
        } catch (e) {}=0A=
      }=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
=0A=
Ajax.Responders.register({=0A=
  onCreate: function() {=0A=
    Ajax.activeRequestCount++;=0A=
  },=0A=
  onComplete: function() {=0A=
    Ajax.activeRequestCount--;=0A=
  }=0A=
});=0A=
=0A=
Ajax.Base =3D function() {};=0A=
Ajax.Base.prototype =3D {=0A=
  setOptions: function(options) {=0A=
    this.options =3D {=0A=
      method:       'post',=0A=
      asynchronous: true,=0A=
      contentType:  'application/x-www-form-urlencoded',=0A=
      encoding:     'UTF-8',=0A=
      parameters:   ''=0A=
    }=0A=
    Object.extend(this.options, options || {});=0A=
=0A=
    this.options.method =3D this.options.method.toLowerCase();=0A=
    this.options.parameters =3D $H(typeof this.options.parameters =3D=3D =
'string' ?=0A=
      this.options.parameters.toQueryParams() : this.options.parameters);=0A=
  }=0A=
}=0A=
=0A=
Ajax.Request =3D Class.create();=0A=
Ajax.Request.Events =3D=0A=
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Request.prototype =3D Object.extend(new Ajax.Base(), {=0A=
  _complete: false,=0A=
=0A=
  initialize: function(url, options) {=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.setOptions(options);=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  request: function(url) {=0A=
    var params =3D this.options.parameters;=0A=
    if (params.any()) params['_'] =3D '';=0A=
=0A=
    if (!['get', 'post'].include(this.options.method)) {=0A=
      // simulate other verbs over post=0A=
      params['_method'] =3D this.options.method;=0A=
      this.options.method =3D 'post';=0A=
    }=0A=
=0A=
    this.url =3D url;=0A=
=0A=
    // when GET, append parameters to URL=0A=
    if (this.options.method =3D=3D 'get' && params.any())=0A=
      this.url +=3D (this.url.indexOf('?') >=3D 0 ? '&' : '?') +=0A=
        params.toQueryString();=0A=
=0A=
    try {=0A=
      Ajax.Responders.dispatch('onCreate', this, this.transport);=0A=
=0A=
      this.transport.open(this.options.method.toUpperCase(), this.url,=0A=
        this.options.asynchronous);=0A=
=0A=
      if (this.options.asynchronous)=0A=
        setTimeout(function() { this.respondToReadyState(1) =
}.bind(this), 10);=0A=
=0A=
      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
      this.setRequestHeaders();=0A=
=0A=
      var body =3D this.options.method =3D=3D 'post' ?=0A=
        (this.options.postBody || params.toQueryString()) : null;=0A=
=0A=
      this.transport.send(body);=0A=
=0A=
      /* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
      if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
        this.onStateChange();=0A=
=0A=
    }=0A=
    catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  onStateChange: function() {=0A=
    var readyState =3D this.transport.readyState;=0A=
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A=
      this.respondToReadyState(this.transport.readyState);=0A=
  },=0A=
=0A=
  setRequestHeaders: function() {=0A=
    var headers =3D {=0A=
      'X-Requested-With': 'XMLHttpRequest',=0A=
      'X-Prototype-Version': Prototype.Version,=0A=
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'=0A=
    };=0A=
=0A=
    if (this.options.method =3D=3D 'post') {=0A=
      headers['Content-type'] =3D this.options.contentType +=0A=
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');=0A=
=0A=
      /* Force "Connection: close" for older Mozilla browsers to work=0A=
       * around a bug where XMLHttpRequest sends an incorrect=0A=
       * Content-length header. See Mozilla Bugzilla #246651.=0A=
       */=0A=
      if (this.transport.overrideMimeType &&=0A=
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)=0A=
            headers['Connection'] =3D 'close';=0A=
    }=0A=
=0A=
    // user-defined headers=0A=
    if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
      var extras =3D this.options.requestHeaders;=0A=
=0A=
      if (typeof extras.push =3D=3D 'function')=0A=
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A=
          headers[extras[i]] =3D extras[i+1];=0A=
      else=0A=
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });=0A=
    }=0A=
=0A=
    for (var name in headers)=0A=
      this.transport.setRequestHeader(name, headers[name]);=0A=
  },=0A=
=0A=
  success: function() {=0A=
    return !this.transport.status=0A=
        || (this.transport.status >=3D 200 && this.transport.status < =
300);=0A=
  },=0A=
=0A=
  respondToReadyState: function(readyState) {=0A=
    var state =3D Ajax.Request.Events[readyState];=0A=
    var transport =3D this.transport, json =3D this.evalJSON();=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      try {=0A=
        this._complete =3D true;=0A=
        (this.options['on' + this.transport.status]=0A=
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
         || Prototype.emptyFunction)(transport, json);=0A=
      } catch (e) {=0A=
        this.dispatchException(e);=0A=
      }=0A=
=0A=
      if ((this.getHeader('Content-type') || 'text/javascript').strip().=0A=
        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))=0A=
          this.evalResponse();=0A=
    }=0A=
=0A=
    try {=0A=
      (this.options['on' + state] || Prototype.emptyFunction)(transport, =
json);=0A=
      Ajax.Responders.dispatch('on' + state, this, transport, json);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      // avoid memory leak in MSIE: clean up=0A=
      this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
    }=0A=
  },=0A=
=0A=
  getHeader: function(name) {=0A=
    try {=0A=
      return this.transport.getResponseHeader(name);=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalJSON: function() {=0A=
    try {=0A=
      var json =3D this.getHeader('X-JSON');=0A=
      return json ? eval('(' + json + ')') : null;=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalResponse: function() {=0A=
    try {=0A=
      return eval(this.transport.responseText);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  dispatchException: function(exception) {=0A=
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
    Ajax.Responders.dispatch('onException', this, exception);=0A=
  }=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create();=0A=
=0A=
Object.extend(Object.extend(Ajax.Updater.prototype, =
Ajax.Request.prototype), {=0A=
  initialize: function(container, url, options) {=0A=
    this.container =3D {=0A=
      success: (container.success || container),=0A=
      failure: (container.failure || (container.success ? null : =
container))=0A=
    }=0A=
=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.setOptions(options);=0A=
=0A=
    var onComplete =3D this.options.onComplete || =
Prototype.emptyFunction;=0A=
    this.options.onComplete =3D (function(transport, param) {=0A=
      this.updateContent();=0A=
      onComplete(transport, param);=0A=
    }).bind(this);=0A=
=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  updateContent: function() {=0A=
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'];=0A=
    var response =3D this.transport.responseText;=0A=
=0A=
    if (!this.options.evalScripts) response =3D response.stripScripts();=0A=
=0A=
    if (receiver =3D $(receiver)) {=0A=
      if (this.options.insertion)=0A=
        new this.options.insertion(receiver, response);=0A=
      else=0A=
        receiver.update(response);=0A=
    }=0A=
=0A=
    if (this.success()) {=0A=
      if (this.onComplete)=0A=
        setTimeout(this.onComplete.bind(this), 10);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create();=0A=
Ajax.PeriodicalUpdater.prototype =3D Object.extend(new Ajax.Base(), {=0A=
  initialize: function(container, url, options) {=0A=
    this.setOptions(options);=0A=
    this.onComplete =3D this.options.onComplete;=0A=
=0A=
    this.frequency =3D (this.options.frequency || 2);=0A=
    this.decay =3D (this.options.decay || 1);=0A=
=0A=
    this.updater =3D {};=0A=
    this.container =3D container;=0A=
    this.url =3D url;=0A=
=0A=
    this.start();=0A=
  },=0A=
=0A=
  start: function() {=0A=
    this.options.onComplete =3D this.updateComplete.bind(this);=0A=
    this.onTimerEvent();=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    this.updater.options.onComplete =3D undefined;=0A=
    clearTimeout(this.timer);=0A=
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A=
  },=0A=
=0A=
  updateComplete: function(request) {=0A=
    if (this.options.decay) {=0A=
      this.decay =3D (request.responseText =3D=3D this.lastText ?=0A=
        this.decay * this.options.decay : 1);=0A=
=0A=
      this.lastText =3D request.responseText;=0A=
    }=0A=
    this.timer =3D setTimeout(this.onTimerEvent.bind(this),=0A=
      this.decay * this.frequency * 1000);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
  }=0A=
});=0A=
function $(element) {=0A=
  if (arguments.length > 1) {=0A=
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)=0A=
      elements.push($(arguments[i]));=0A=
    return elements;=0A=
  }=0A=
  if (typeof element =3D=3D 'string')=0A=
    element =3D document.getElementById(element);=0A=
  return Element.extend(element);=0A=
}=0A=
=0A=
if (Prototype.BrowserFeatures.XPath) {=0A=
  document._getElementsByXPath =3D function(expression, parentElement) {=0A=
    var results =3D [];=0A=
    var query =3D document.evaluate(expression, $(parentElement) || =
document,=0A=
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);=0A=
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)=0A=
      results.push(query.snapshotItem(i));=0A=
    return results;=0A=
  }=0A=
}=0A=
=0A=
document.getElementsByClassName =3D function(className, parentElement) {=0A=
  if (Prototype.BrowserFeatures.XPath) {=0A=
    var q =3D ".//*[contains(concat(' ', @class, ' '), ' " + className + =
" ')]";=0A=
    return document._getElementsByXPath(q, parentElement);=0A=
  } else {=0A=
    var children =3D ($(parentElement) || =
document.body).getElementsByTagName('*');=0A=
    var elements =3D [], child;=0A=
    for (var i =3D 0, length =3D children.length; i < length; i++) {=0A=
      child =3D children[i];=0A=
      if (Element.hasClassName(child, className))=0A=
        elements.push(Element.extend(child));=0A=
    }=0A=
    return elements;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Element)=0A=
  var Element =3D new Object();=0A=
=0A=
Element.extend =3D function(element) {=0A=
  if (!element || _nativeExtensions || element.nodeType =3D=3D 3) return =
element;=0A=
=0A=
  if (!element._extended && element.tagName && element !=3D window) {=0A=
    var methods =3D Object.clone(Element.Methods), cache =3D =
Element.extend.cache;=0A=
=0A=
    if (element.tagName =3D=3D 'FORM')=0A=
      Object.extend(methods, Form.Methods);=0A=
    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))=0A=
      Object.extend(methods, Form.Element.Methods);=0A=
=0A=
    Object.extend(methods, Element.Methods.Simulated);=0A=
=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (typeof value =3D=3D 'function' && !(property in element))=0A=
        element[property] =3D cache.findOrStore(value);=0A=
    }=0A=
  }=0A=
=0A=
  element._extended =3D true;=0A=
  return element;=0A=
}=0A=
=0A=
Element.extend.cache =3D {=0A=
  findOrStore: function(value) {=0A=
    return this[value] =3D this[value] || function() {=0A=
      return value.apply(null, [this].concat($A(arguments)));=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Element.Methods =3D {=0A=
  visible: function(element) {=0A=
    return $(element).style.display !=3D 'none';=0A=
  },=0A=
=0A=
  toggle: function(element) {=0A=
    element =3D $(element);=0A=
    Element[Element.visible(element) ? 'hide' : 'show'](element);=0A=
    return element;=0A=
  },=0A=
=0A=
  hide: function(element) {=0A=
    $(element).style.display =3D 'none';=0A=
    return element;=0A=
  },=0A=
=0A=
  show: function(element) {=0A=
    $(element).style.display =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  remove: function(element) {=0A=
    element =3D $(element);=0A=
    element.parentNode.removeChild(element);=0A=
    return element;=0A=
  },=0A=
=0A=
  update: function(element, html) {=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    $(element).innerHTML =3D html.stripScripts();=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  },=0A=
=0A=
  replace: function(element, html) {=0A=
    element =3D $(element);=0A=
    if (element.outerHTML) {=0A=
      element.outerHTML =3D html.stripScripts();=0A=
    } else {=0A=
      var range =3D element.ownerDocument.createRange();=0A=
      range.selectNodeContents(element);=0A=
      element.parentNode.replaceChild(=0A=
        range.createContextualFragment(html.stripScripts()), element);=0A=
    }=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  },=0A=
=0A=
  inspect: function(element) {=0A=
    element =3D $(element);=0A=
    var result =3D '<' + element.tagName.toLowerCase();=0A=
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A=
      var property =3D pair.first(), attribute =3D pair.last();=0A=
      var value =3D (element[property] || '').toString();=0A=
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);=0A=
    });=0A=
    return result + '>';=0A=
  },=0A=
=0A=
  recursivelyCollect: function(element, property) {=0A=
    element =3D $(element);=0A=
    var elements =3D [];=0A=
    while (element =3D element[property])=0A=
      if (element.nodeType =3D=3D 1)=0A=
        elements.push(Element.extend(element));=0A=
    return elements;=0A=
  },=0A=
=0A=
  ancestors: function(element) {=0A=
    return $(element).recursivelyCollect('parentNode');=0A=
  },=0A=
=0A=
  descendants: function(element) {=0A=
    return $A($(element).getElementsByTagName('*'));=0A=
  },=0A=
=0A=
  immediateDescendants: function(element) {=0A=
    if (!(element =3D $(element).firstChild)) return [];=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    if (element) return [element].concat($(element).nextSiblings());=0A=
    return [];=0A=
  },=0A=
=0A=
  previousSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('previousSibling');=0A=
  },=0A=
=0A=
  nextSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('nextSibling');=0A=
  },=0A=
=0A=
  siblings: function(element) {=0A=
    element =3D $(element);=0A=
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());=0A=
  },=0A=
=0A=
  match: function(element, selector) {=0A=
    if (typeof selector =3D=3D 'string')=0A=
      selector =3D new Selector(selector);=0A=
    return selector.match($(element));=0A=
  },=0A=
=0A=
  up: function(element, expression, index) {=0A=
    return Selector.findElement($(element).ancestors(), expression, =
index);=0A=
  },=0A=
=0A=
  down: function(element, expression, index) {=0A=
    return Selector.findElement($(element).descendants(), expression, =
index);=0A=
  },=0A=
=0A=
  previous: function(element, expression, index) {=0A=
    return Selector.findElement($(element).previousSiblings(), =
expression, index);=0A=
  },=0A=
=0A=
  next: function(element, expression, index) {=0A=
    return Selector.findElement($(element).nextSiblings(), expression, =
index);=0A=
  },=0A=
=0A=
  getElementsBySelector: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element, args);=0A=
  },=0A=
=0A=
  getElementsByClassName: function(element, className) {=0A=
    return document.getElementsByClassName(className, element);=0A=
  },=0A=
=0A=
  readAttribute: function(element, name) {=0A=
    return $(element).getAttribute(name);=0A=
  },=0A=
=0A=
  getHeight: function(element) {=0A=
    return $(element).offsetHeight;=0A=
  },=0A=
=0A=
  classNames: function(element) {=0A=
    return new Element.ClassNames(element);=0A=
  },=0A=
=0A=
  hasClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var elementClassName =3D element.className;=0A=
    if (elementClassName.length =3D=3D 0) return false;=0A=
    if (elementClassName =3D=3D className ||=0A=
        elementClassName.match(new RegExp("(^|\\s)" + className + =
"(\\s|$)")))=0A=
      return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  addClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element).add(className);=0A=
    return element;=0A=
  },=0A=
=0A=
  removeClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element).remove(className);=0A=
    return element;=0A=
  },=0A=
=0A=
  toggleClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element)[element.hasClassName(className) ? =
'remove' : 'add'](className);=0A=
    return element;=0A=
  },=0A=
=0A=
  observe: function() {=0A=
    Event.observe.apply(Event, arguments);=0A=
    return $A(arguments).first();=0A=
  },=0A=
=0A=
  stopObserving: function() {=0A=
    Event.stopObserving.apply(Event, arguments);=0A=
    return $A(arguments).first();=0A=
  },=0A=
=0A=
  // removes whitespace-only text node children=0A=
  cleanWhitespace: function(element) {=0A=
    element =3D $(element);=0A=
    var node =3D element.firstChild;=0A=
    while (node) {=0A=
      var nextNode =3D node.nextSibling;=0A=
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A=
        element.removeChild(node);=0A=
      node =3D nextNode;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  empty: function(element) {=0A=
    return $(element).innerHTML.match(/^\s*$/);=0A=
  },=0A=
=0A=
  childOf: function(element, ancestor) {=0A=
    element =3D $(element), ancestor =3D $(ancestor);=0A=
    while (element =3D element.parentNode)=0A=
      if (element =3D=3D ancestor) return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  scrollTo: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Position.cumulativeOffset(element);=0A=
    window.scrollTo(pos[0], pos[1]);=0A=
    return element;=0A=
  },=0A=
=0A=
  getStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    var camelizedStyle =3D (style =3D=3D 'float' ?=0A=
      (typeof element.style.styleFloat !=3D 'undefined' ? 'styleFloat' : =
'cssFloat') : style).camelize();=0A=
    var value =3D element.style[camelizedStyle];=0A=
    if (!value) {=0A=
      if (document.defaultView && document.defaultView.getComputedStyle) =
{=0A=
        var css =3D document.defaultView.getComputedStyle(element, null);=0A=
        value =3D css ? css[camelizedStyle] : null;=0A=
      } else if (element.currentStyle) {=0A=
        value =3D element.currentStyle[camelizedStyle];=0A=
      }=0A=
    }=0A=
=0A=
    if((value =3D=3D 'auto') && ['width','height'].include(style) && =
(element.getStyle('display') !=3D 'none'))=0A=
      value =3D element['offset'+style.capitalize()] + 'px';=0A=
=0A=
    if (window.opera && ['left', 'top', 'right', =
'bottom'].include(style))=0A=
      if (Element.getStyle(element, 'position') =3D=3D 'static') value =
=3D 'auto';=0A=
    if(style =3D=3D 'opacity') {=0A=
      if(value) return parseFloat(value);=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=
    return value =3D=3D 'auto' ? null : value;=0A=
  },=0A=
=0A=
  setStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    for (var name in style) {=0A=
      var value =3D style[name];=0A=
      if(name =3D=3D 'opacity') {=0A=
        if (value =3D=3D 1) {=0A=
          value =3D (/Gecko/.test(navigator.userAgent) &&=0A=
            !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? =
0.999999 : 1.0;=0A=
          if(/MSIE/.test(navigator.userAgent) && !window.opera)=0A=
            element.style.filter =3D =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');=0A=
        } else {=0A=
          if(value < 0.00001) value =3D 0;=0A=
          if(/MSIE/.test(navigator.userAgent) && !window.opera)=0A=
            element.style.filter =3D =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +=0A=
              'alpha(opacity=3D'+value*100+')';=0A=
        }=0A=
      } else if(name =3D=3D 'float') name =3D (typeof =
element.style.styleFloat !=3D 'undefined') ? 'styleFloat' : 'cssFloat';=0A=
      element.style[name.camelize()] =3D value;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  getDimensions: function(element) {=0A=
    element =3D $(element);=0A=
    if (Element.getStyle(element, 'display') !=3D 'none')=0A=
      return {width: element.offsetWidth, height: element.offsetHeight};=0A=
=0A=
    // All *Width and *Height properties give 0 on elements with display =
none,=0A=
    // so enable the element temporarily=0A=
    var els =3D element.style;=0A=
    var originalVisibility =3D els.visibility;=0A=
    var originalPosition =3D els.position;=0A=
    els.visibility =3D 'hidden';=0A=
    els.position =3D 'absolute';=0A=
    els.display =3D '';=0A=
    var originalWidth =3D element.clientWidth;=0A=
    var originalHeight =3D element.clientHeight;=0A=
    els.display =3D 'none';=0A=
    els.position =3D originalPosition;=0A=
    els.visibility =3D originalVisibility;=0A=
    return {width: originalWidth, height: originalHeight};=0A=
  },=0A=
=0A=
  makePositioned: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Element.getStyle(element, 'position');=0A=
    if (pos =3D=3D 'static' || !pos) {=0A=
      element._madePositioned =3D true;=0A=
      element.style.position =3D 'relative';=0A=
      // Opera returns the offset relative to the positioning context, =
when an=0A=
      // element is position relative but top and left have not been =
defined=0A=
      if (window.opera) {=0A=
        element.style.top =3D 0;=0A=
        element.style.left =3D 0;=0A=
      }=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  undoPositioned: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._madePositioned) {=0A=
      element._madePositioned =3D undefined;=0A=
      element.style.position =3D=0A=
        element.style.top =3D=0A=
        element.style.left =3D=0A=
        element.style.bottom =3D=0A=
        element.style.right =3D '';=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  makeClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._overflow) return element;=0A=
    element._overflow =3D element.style.overflow || 'auto';=0A=
    if ((Element.getStyle(element, 'overflow') || 'visible') !=3D =
'hidden')=0A=
      element.style.overflow =3D 'hidden';=0A=
    return element;=0A=
  },=0A=
=0A=
  undoClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element._overflow) return element;=0A=
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;=0A=
    element._overflow =3D null;=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Element.Methods.Simulated =3D {=0A=
  hasAttribute: function(element, attribute) {=0A=
    return $(element).getAttributeNode(attribute).specified;=0A=
  }=0A=
}=0A=
=0A=
// IE is missing .innerHTML support for TABLE-related elements=0A=
if(document.all){=0A=
  Element.Methods.update =3D function(element, html) {=0A=
    element =3D $(element);=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    var tagName =3D element.tagName.toUpperCase();=0A=
    if (['THEAD','TBODY','TR','TD'].include(tagName)) {=0A=
      var div =3D document.createElement('div');=0A=
      switch (tagName) {=0A=
        case 'THEAD':=0A=
        case 'TBODY':=0A=
          div.innerHTML =3D '<table><tbody>' +  html.stripScripts() + =
'</tbody></table>';=0A=
          depth =3D 2;=0A=
          break;=0A=
        case 'TR':=0A=
          div.innerHTML =3D '<table><tbody><tr>' +  html.stripScripts() =
+ '</tr></tbody></table>';=0A=
          depth =3D 3;=0A=
          break;=0A=
        case 'TD':=0A=
          div.innerHTML =3D '<table><tbody><tr><td>' +  =
html.stripScripts() + '</td></tr></tbody></table>';=0A=
          depth =3D 4;=0A=
      }=0A=
      $A(element.childNodes).each(function(node){=0A=
        element.removeChild(node)=0A=
      });=0A=
      depth.times(function(){ div =3D div.firstChild });=0A=
=0A=
      $A(div.childNodes).each(=0A=
        function(node){ element.appendChild(node) });=0A=
    } else {=0A=
      element.innerHTML =3D html.stripScripts();=0A=
    }=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
var _nativeExtensions =3D false;=0A=
=0A=
if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {=0A=
    var className =3D 'HTML' + tag + 'Element';=0A=
    if(window[className]) return;=0A=
    var klass =3D window[className] =3D {};=0A=
    klass.prototype =3D document.createElement(tag ? tag.toLowerCase() : =
'div').__proto__;=0A=
  });=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
  Object.extend(Element.Methods, methods || {});=0A=
=0A=
  function copy(methods, destination, onlyIfAbsent) {=0A=
    onlyIfAbsent =3D onlyIfAbsent || false;=0A=
    var cache =3D Element.extend.cache;=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (!onlyIfAbsent || !(property in destination))=0A=
        destination[property] =3D cache.findOrStore(value);=0A=
    }=0A=
  }=0A=
=0A=
  if (typeof HTMLElement !=3D 'undefined') {=0A=
    copy(Element.Methods, HTMLElement.prototype);=0A=
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A=
    copy(Form.Methods, HTMLFormElement.prototype);=0A=
    [HTMLInputElement, HTMLTextAreaElement, =
HTMLSelectElement].each(function(klass) {=0A=
      copy(Form.Element.Methods, klass.prototype);=0A=
    });=0A=
    _nativeExtensions =3D true;=0A=
  }=0A=
}=0A=
=0A=
var Toggle =3D new Object();=0A=
Toggle.display =3D Element.toggle;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.Insertion =3D function(adjacency) {=0A=
  this.adjacency =3D adjacency;=0A=
}=0A=
=0A=
Abstract.Insertion.prototype =3D {=0A=
  initialize: function(element, content) {=0A=
    this.element =3D $(element);=0A=
    this.content =3D content.stripScripts();=0A=
=0A=
    if (this.adjacency && this.element.insertAdjacentHTML) {=0A=
      try {=0A=
        this.element.insertAdjacentHTML(this.adjacency, this.content);=0A=
      } catch (e) {=0A=
        var tagName =3D this.element.tagName.toUpperCase();=0A=
        if (['TBODY', 'TR'].include(tagName)) {=0A=
          this.insertContent(this.contentFromAnonymousTable());=0A=
        } else {=0A=
          throw e;=0A=
        }=0A=
      }=0A=
    } else {=0A=
      this.range =3D this.element.ownerDocument.createRange();=0A=
      if (this.initializeRange) this.initializeRange();=0A=
      =
this.insertContent([this.range.createContextualFragment(this.content)]);=0A=
    }=0A=
=0A=
    setTimeout(function() {content.evalScripts()}, 10);=0A=
  },=0A=
=0A=
  contentFromAnonymousTable: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D '<table><tbody>' + this.content + =
'</tbody></table>';=0A=
    return $A(div.childNodes[0].childNodes[0].childNodes);=0A=
  }=0A=
}=0A=
=0A=
var Insertion =3D new Object();=0A=
=0A=
Insertion.Before =3D Class.create();=0A=
Insertion.Before.prototype =3D Object.extend(new =
Abstract.Insertion('beforeBegin'), {=0A=
  initializeRange: function() {=0A=
    this.range.setStartBefore(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.parentNode.insertBefore(fragment, this.element);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.Top =3D Class.create();=0A=
Insertion.Top.prototype =3D Object.extend(new =
Abstract.Insertion('afterBegin'), {=0A=
  initializeRange: function() {=0A=
    this.range.selectNodeContents(this.element);=0A=
    this.range.collapse(true);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.reverse(false).each((function(fragment) {=0A=
      this.element.insertBefore(fragment, this.element.firstChild);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.Bottom =3D Class.create();=0A=
Insertion.Bottom.prototype =3D Object.extend(new =
Abstract.Insertion('beforeEnd'), {=0A=
  initializeRange: function() {=0A=
    this.range.selectNodeContents(this.element);=0A=
    this.range.collapse(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.appendChild(fragment);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.After =3D Class.create();=0A=
Insertion.After.prototype =3D Object.extend(new =
Abstract.Insertion('afterEnd'), {=0A=
  initializeRange: function() {=0A=
    this.range.setStartAfter(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.parentNode.insertBefore(fragment,=0A=
        this.element.nextSibling);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    this.element.className.split(/\s+/).select(function(name) {=0A=
      return name.length > 0;=0A=
    })._each(iterator);=0A=
  },=0A=
=0A=
  set: function(className) {=0A=
    this.element.className =3D className;=0A=
  },=0A=
=0A=
  add: function(classNameToAdd) {=0A=
    if (this.include(classNameToAdd)) return;=0A=
    this.set($A(this).concat(classNameToAdd).join(' '));=0A=
  },=0A=
=0A=
  remove: function(classNameToRemove) {=0A=
    if (!this.include(classNameToRemove)) return;=0A=
    this.set($A(this).without(classNameToRemove).join(' '));=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return $A(this).join(' ');=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
var Selector =3D Class.create();=0A=
Selector.prototype =3D {=0A=
  initialize: function(expression) {=0A=
    this.params =3D {classNames: []};=0A=
    this.expression =3D expression.toString().strip();=0A=
    this.parseExpression();=0A=
    this.compileMatcher();=0A=
  },=0A=
=0A=
  parseExpression: function() {=0A=
    function abort(message) { throw 'Parse error in selector: ' + =
message; }=0A=
=0A=
    if (this.expression =3D=3D '')  abort('empty expression');=0A=
=0A=
    var params =3D this.params, expr =3D this.expression, match, =
modifier, clause, rest;=0A=
    while (match =3D =
expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=3D)(?:"([^"]*)"|([^\]\s]*))=
)?\]$/i)) {=0A=
      params.attributes =3D params.attributes || [];=0A=
      params.attributes.push({name: match[2], operator: match[3], value: =
match[4] || match[5] || ''});=0A=
      expr =3D match[1];=0A=
    }=0A=
=0A=
    if (expr =3D=3D '*') return this.params.wildcard =3D true;=0A=
=0A=
    while (match =3D expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {=0A=
      modifier =3D match[1], clause =3D match[2], rest =3D match[3];=0A=
      switch (modifier) {=0A=
        case '#':       params.id =3D clause; break;=0A=
        case '.':       params.classNames.push(clause); break;=0A=
        case '':=0A=
        case undefined: params.tagName =3D clause.toUpperCase(); break;=0A=
        default:        abort(expr.inspect());=0A=
      }=0A=
      expr =3D rest;=0A=
    }=0A=
=0A=
    if (expr.length > 0) abort(expr.inspect());=0A=
  },=0A=
=0A=
  buildMatchExpression: function() {=0A=
    var params =3D this.params, conditions =3D [], clause;=0A=
=0A=
    if (params.wildcard)=0A=
      conditions.push('true');=0A=
    if (clause =3D params.id)=0A=
      conditions.push('element.getAttribute("id") =3D=3D ' + =
clause.inspect());=0A=
    if (clause =3D params.tagName)=0A=
      conditions.push('element.tagName.toUpperCase() =3D=3D ' + =
clause.inspect());=0A=
    if ((clause =3D params.classNames).length > 0)=0A=
      for (var i =3D 0, length =3D clause.length; i < length; i++)=0A=
        conditions.push('Element.hasClassName(element, ' + =
clause[i].inspect() + ')');=0A=
    if (clause =3D params.attributes) {=0A=
      clause.each(function(attribute) {=0A=
        var value =3D 'element.getAttribute(' + attribute.name.inspect() =
+ ')';=0A=
        var splitValueBy =3D function(delimiter) {=0A=
          return value + ' && ' + value + '.split(' + =
delimiter.inspect() + ')';=0A=
        }=0A=
=0A=
        switch (attribute.operator) {=0A=
          case '=3D':       conditions.push(value + ' =3D=3D ' + =
attribute.value.inspect()); break;=0A=
          case '~=3D':      conditions.push(splitValueBy(' ') + =
'.include(' + attribute.value.inspect() + ')'); break;=0A=
          case '|=3D':      conditions.push(=0A=
                            splitValueBy('-') + '.first().toUpperCase() =
=3D=3D ' + attribute.value.toUpperCase().inspect()=0A=
                          ); break;=0A=
          case '!=3D':      conditions.push(value + ' !=3D ' + =
attribute.value.inspect()); break;=0A=
          case '':=0A=
          case undefined: conditions.push(value + ' !=3D null'); break;=0A=
          default:        throw 'Unknown operator ' + attribute.operator =
+ ' in selector';=0A=
        }=0A=
      });=0A=
    }=0A=
=0A=
    return conditions.join(' && ');=0A=
  },=0A=
=0A=
  compileMatcher: function() {=0A=
    this.match =3D new Function('element', 'if (!element.tagName) return =
false; \=0A=
      return ' + this.buildMatchExpression());=0A=
  },=0A=
=0A=
  findElements: function(scope) {=0A=
    var element;=0A=
=0A=
    if (element =3D $(this.params.id))=0A=
      if (this.match(element))=0A=
        if (!scope || Element.childOf(element, scope))=0A=
          return [element];=0A=
=0A=
    scope =3D (scope || =
document).getElementsByTagName(this.params.tagName || '*');=0A=
=0A=
    var results =3D [];=0A=
    for (var i =3D 0, length =3D scope.length; i < length; i++)=0A=
      if (this.match(element =3D scope[i]))=0A=
        results.push(Element.extend(element));=0A=
=0A=
    return results;=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return this.expression;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Selector, {=0A=
  matchElements: function(elements, expression) {=0A=
    var selector =3D new Selector(expression);=0A=
    return =
elements.select(selector.match.bind(selector)).map(Element.extend);=0A=
  },=0A=
=0A=
  findElement: function(elements, expression, index) {=0A=
    if (typeof expression =3D=3D 'number') index =3D expression, =
expression =3D false;=0A=
    return Selector.matchElements(elements, expression || '*')[index || =
0];=0A=
  },=0A=
=0A=
  findChildElements: function(element, expressions) {=0A=
    return expressions.map(function(expression) {=0A=
      return expression.strip().split(/\s+/).inject([null], =
function(results, expr) {=0A=
        var selector =3D new Selector(expr);=0A=
        return results.inject([], function(elements, result) {=0A=
          return elements.concat(selector.findElements(result || =
element));=0A=
        });=0A=
      });=0A=
    }).flatten();=0A=
  }=0A=
});=0A=
=0A=
function $$() {=0A=
  return Selector.findChildElements(document, $A(arguments));=0A=
}=0A=
var Form =3D {=0A=
  reset: function(form) {=0A=
    $(form).reset();=0A=
    return form;=0A=
  },=0A=
=0A=
  serializeElements: function(elements) {=0A=
    return elements.inject([], function(queryComponents, element) {=0A=
      var queryComponent =3D Form.Element.serialize(element);=0A=
      if (queryComponent) queryComponents.push(queryComponent);=0A=
      return queryComponents;=0A=
    }).join('&');=0A=
  }=0A=
};=0A=
=0A=
Form.Methods =3D {=0A=
  serialize: function(form) {=0A=
    return Form.serializeElements(Form.getElements(form));=0A=
  },=0A=
=0A=
  getElements: function(form) {=0A=
    return $A($(form).getElementsByTagName('*')).inject([],=0A=
      function(elements, child) {=0A=
        if (Form.Element.Serializers[child.tagName.toLowerCase()])=0A=
          elements.push(Element.extend(child));=0A=
        return elements;=0A=
      }=0A=
    );=0A=
  },=0A=
=0A=
  getInputs: function(form, typeName, name) {=0A=
    form =3D $(form);=0A=
    var inputs =3D form.getElementsByTagName('input'), matchingInputs =
=3D [];=0A=
=0A=
    if (!typeName && !name)=0A=
      return $A(inputs).map(Element.extend);=0A=
=0A=
    for (var i =3D 0, length =3D inputs.length; i < length; i++) {=0A=
      var input =3D inputs[i];=0A=
      if ((typeName && input.type !=3D typeName) ||=0A=
          (name && input.name !=3D name))=0A=
        continue;=0A=
      matchingInputs.push(Element.extend(input));=0A=
    }=0A=
=0A=
    return matchingInputs;=0A=
  },=0A=
=0A=
  disable: function(form) {=0A=
    form =3D $(form);=0A=
    form.getElements().each(function(element) {=0A=
      element.blur();=0A=
      element.disabled =3D 'true';=0A=
    });=0A=
    return form;=0A=
  },=0A=
=0A=
  enable: function(form) {=0A=
    form =3D $(form);=0A=
    form.getElements().each(function(element) {=0A=
      element.disabled =3D '';=0A=
    });=0A=
    return form;=0A=
  },=0A=
=0A=
  findFirstElement: function(form) {=0A=
    return $(form).getElements().find(function(element) {=0A=
      return element.type !=3D 'hidden' && !element.disabled &&=0A=
        ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
    });=0A=
  },=0A=
=0A=
  focusFirstElement: function(form) {=0A=
    form =3D $(form);=0A=
    form.findFirstElement().activate();=0A=
    return form;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Form, Form.Methods);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element =3D {=0A=
  focus: function(element) {=0A=
    $(element).focus();=0A=
    return element;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    $(element).select();=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Form.Element.Methods =3D {=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.disabled) return '';=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    var parameter =3D Form.Element.Serializers[method](element);=0A=
=0A=
    if (parameter) {=0A=
      var key =3D encodeURIComponent(parameter[0]);=0A=
      if (key.length =3D=3D 0) return;=0A=
=0A=
      if (parameter[1].constructor !=3D Array)=0A=
        parameter[1] =3D [parameter[1]];=0A=
=0A=
      return parameter[1].map(function(value) {=0A=
        return key + '=3D' + encodeURIComponent(value);=0A=
      }).join('&');=0A=
    }=0A=
  },=0A=
=0A=
  getValue: function(element) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    var parameter =3D Form.Element.Serializers[method](element);=0A=
=0A=
    if (parameter)=0A=
      return parameter[1];=0A=
  },=0A=
=0A=
  clear: function(element) {=0A=
    $(element).value =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  present: function(element) {=0A=
    return $(element).value !=3D '';=0A=
  },=0A=
=0A=
  activate: function(element) {=0A=
    element =3D $(element);=0A=
    element.focus();=0A=
    if (element.select && ( element.tagName.toLowerCase() !=3D 'input' ||=0A=
      !['button', 'reset', 'submit'].include(element.type) ) )=0A=
      element.select();=0A=
    return element;=0A=
  },=0A=
=0A=
  disable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D true;=0A=
    return element;=0A=
  },=0A=
=0A=
  enable: function(element) {=0A=
    element =3D $(element);=0A=
    element.blur();=0A=
    element.disabled =3D false;=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Form.Element, Form.Element.Methods);=0A=
var Field =3D Form.Element;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D {=0A=
  input: function(element) {=0A=
    switch (element.type.toLowerCase()) {=0A=
      case 'checkbox':=0A=
      case 'radio':=0A=
        return Form.Element.Serializers.inputSelector(element);=0A=
      default:=0A=
        return Form.Element.Serializers.textarea(element);=0A=
    }=0A=
    return false;=0A=
  },=0A=
=0A=
  inputSelector: function(element) {=0A=
    if (element.checked)=0A=
      return [element.name, element.value];=0A=
  },=0A=
=0A=
  textarea: function(element) {=0A=
    return [element.name, element.value];=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    return Form.Element.Serializers[element.type =3D=3D 'select-one' ?=0A=
      'selectOne' : 'selectMany'](element);=0A=
  },=0A=
=0A=
  selectOne: function(element) {=0A=
    var value =3D '', opt, index =3D element.selectedIndex;=0A=
    if (index >=3D 0) {=0A=
      opt =3D Element.extend(element.options[index]);=0A=
      // Uses the new potential extension if hasAttribute isn't native.=0A=
      value =3D opt.hasAttribute('value') ? opt.value : opt.text;=0A=
    }=0A=
    return [element.name, value];=0A=
  },=0A=
=0A=
  selectMany: function(element) {=0A=
    var value =3D [];=0A=
    for (var i =3D 0, length =3D element.length; i < length; i++) {=0A=
      var opt =3D Element.extend(element.options[i]);=0A=
      if (opt.selected)=0A=
        // Uses the new potential extension if hasAttribute isn't native.=0A=
        value.push(opt.hasAttribute('value') ? opt.value : opt.text);=0A=
    }=0A=
    return [element.name, value];=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var $F =3D Form.Element.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.TimedObserver =3D function() {}=0A=
Abstract.TimedObserver.prototype =3D {=0A=
  initialize: function(element, frequency, callback) {=0A=
    this.frequency =3D frequency;=0A=
    this.element   =3D $(element);=0A=
    this.callback  =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    var changed =3D ('string' =3D=3D typeof this.lastValue && 'string' =
=3D=3D typeof value=0A=
      ? this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value));=0A=
    if (changed) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Form.Element.Observer =3D Class.create();=0A=
Form.Element.Observer.prototype =3D Object.extend(new =
Abstract.TimedObserver(), {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.Observer =3D Class.create();=0A=
Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D function() {}=0A=
Abstract.EventObserver.prototype =3D {=0A=
  initialize: function(element, callback) {=0A=
    this.element  =3D $(element);=0A=
    this.callback =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
      this.registerFormCallbacks();=0A=
    else=0A=
      this.registerCallback(this.element);=0A=
  },=0A=
=0A=
  onElementEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    if (this.lastValue !=3D value) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  },=0A=
=0A=
  registerFormCallbacks: function() {=0A=
    =
Form.getElements(this.element).each(this.registerCallback.bind(this));=0A=
  },=0A=
=0A=
  registerCallback: function(element) {=0A=
    if (element.type) {=0A=
      switch (element.type.toLowerCase()) {=0A=
        case 'checkbox':=0A=
        case 'radio':=0A=
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
        default:=0A=
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Form.Element.EventObserver =3D Class.create();=0A=
Form.Element.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create();=0A=
Form.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
if (!window.Event) {=0A=
  var Event =3D new Object();=0A=
}=0A=
=0A=
Object.extend(Event, {=0A=
  KEY_BACKSPACE: 8,=0A=
  KEY_TAB:       9,=0A=
  KEY_RETURN:   13,=0A=
  KEY_ESC:      27,=0A=
  KEY_LEFT:     37,=0A=
  KEY_UP:       38,=0A=
  KEY_RIGHT:    39,=0A=
  KEY_DOWN:     40,=0A=
  KEY_DELETE:   46,=0A=
  KEY_HOME:     36,=0A=
  KEY_END:      35,=0A=
  KEY_PAGEUP:   33,=0A=
  KEY_PAGEDOWN: 34,=0A=
=0A=
  element: function(event) {=0A=
    return event.target || event.srcElement;=0A=
  },=0A=
=0A=
  isLeftClick: function(event) {=0A=
    return (((event.which) && (event.which =3D=3D 1)) ||=0A=
            ((event.button) && (event.button =3D=3D 1)));=0A=
  },=0A=
=0A=
  pointerX: function(event) {=0A=
    return event.pageX || (event.clientX +=0A=
      (document.documentElement.scrollLeft || document.body.scrollLeft));=0A=
  },=0A=
=0A=
  pointerY: function(event) {=0A=
    return event.pageY || (event.clientY +=0A=
      (document.documentElement.scrollTop || document.body.scrollTop));=0A=
  },=0A=
=0A=
  stop: function(event) {=0A=
    if (event.preventDefault) {=0A=
      event.preventDefault();=0A=
      event.stopPropagation();=0A=
    } else {=0A=
      event.returnValue =3D false;=0A=
      event.cancelBubble =3D true;=0A=
    }=0A=
  },=0A=
=0A=
  // find the first node with the given tagName, starting from the=0A=
  // node the event was triggered on; traverses the DOM upwards=0A=
  findElement: function(event, tagName) {=0A=
    var element =3D Event.element(event);=0A=
    while (element.parentNode && (!element.tagName ||=0A=
        (element.tagName.toUpperCase() !=3D tagName.toUpperCase())))=0A=
      element =3D element.parentNode;=0A=
    return element;=0A=
  },=0A=
=0A=
  observers: false,=0A=
=0A=
  _observeAndCache: function(element, name, observer, useCapture) {=0A=
    if (!this.observers) this.observers =3D [];=0A=
    if (element.addEventListener) {=0A=
      this.observers.push([element, name, observer, useCapture]);=0A=
      element.addEventListener(name, observer, useCapture);=0A=
    } else if (element.attachEvent) {=0A=
      this.observers.push([element, name, observer, useCapture]);=0A=
      element.attachEvent('on' + name, observer);=0A=
    }=0A=
  },=0A=
=0A=
  unloadCache: function() {=0A=
    if (!Event.observers) return;=0A=
    for (var i =3D 0, length =3D Event.observers.length; i < length; =
i++) {=0A=
      Event.stopObserving.apply(this, Event.observers[i]);=0A=
      Event.observers[i][0] =3D null;=0A=
    }=0A=
    Event.observers =3D false;=0A=
  },=0A=
=0A=
  observe: function(element, name, observer, useCapture) {=0A=
    element =3D $(element);=0A=
    useCapture =3D useCapture || false;=0A=
=0A=
    if (name =3D=3D 'keypress' &&=0A=
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A=
        || element.attachEvent))=0A=
      name =3D 'keydown';=0A=
=0A=
    Event._observeAndCache(element, name, observer, useCapture);=0A=
  },=0A=
=0A=
  stopObserving: function(element, name, observer, useCapture) {=0A=
    element =3D $(element);=0A=
    useCapture =3D useCapture || false;=0A=
=0A=
    if (name =3D=3D 'keypress' &&=0A=
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A=
        || element.detachEvent))=0A=
      name =3D 'keydown';=0A=
=0A=
    if (element.removeEventListener) {=0A=
      element.removeEventListener(name, observer, useCapture);=0A=
    } else if (element.detachEvent) {=0A=
      try {=0A=
        element.detachEvent('on' + name, observer);=0A=
      } catch (e) {}=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
/* prevent memory leaks in IE */=0A=
if (navigator.appVersion.match(/\bMSIE\b/))=0A=
  Event.observe(window, 'unload', Event.unloadCache, false);=0A=
var Position =3D {=0A=
  // set to true if needed, warning: firefox performance problems=0A=
  // NOT neeeded for page scrolling, only if draggable contained in=0A=
  // scrollable elements=0A=
  includeScrollOffsets: false,=0A=
=0A=
  // must be called before calling withinIncludingScrolloffset, every =
time the=0A=
  // page is scrolled=0A=
  prepare: function() {=0A=
    this.deltaX =3D  window.pageXOffset=0A=
                || document.documentElement.scrollLeft=0A=
                || document.body.scrollLeft=0A=
                || 0;=0A=
    this.deltaY =3D  window.pageYOffset=0A=
                || document.documentElement.scrollTop=0A=
                || document.body.scrollTop=0A=
                || 0;=0A=
  },=0A=
=0A=
  realOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.scrollTop  || 0;=0A=
      valueL +=3D element.scrollLeft || 0;=0A=
      element =3D element.parentNode;=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  cumulativeOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  positionedOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
      if (element) {=0A=
        if(element.tagName=3D=3D'BODY') break;=0A=
        var p =3D Element.getStyle(element, 'position');=0A=
        if (p =3D=3D 'relative' || p =3D=3D 'absolute') break;=0A=
      }=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  offsetParent: function(element) {=0A=
    if (element.offsetParent) return element.offsetParent;=0A=
    if (element =3D=3D document.body) return element;=0A=
=0A=
    while ((element =3D element.parentNode) && element !=3D =
document.body)=0A=
      if (Element.getStyle(element, 'position') !=3D 'static')=0A=
        return element;=0A=
=0A=
    return document.body;=0A=
  },=0A=
=0A=
  // caches x/y coordinate pair to use with overlap=0A=
  within: function(element, x, y) {=0A=
    if (this.includeScrollOffsets)=0A=
      return this.withinIncludingScrolloffsets(element, x, y);=0A=
    this.xcomp =3D x;=0A=
    this.ycomp =3D y;=0A=
    this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
    return (y >=3D this.offset[1] &&=0A=
            y <  this.offset[1] + element.offsetHeight &&=0A=
            x >=3D this.offset[0] &&=0A=
            x <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  withinIncludingScrolloffsets: function(element, x, y) {=0A=
    var offsetcache =3D this.realOffset(element);=0A=
=0A=
    this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
    this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
    this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
    return (this.ycomp >=3D this.offset[1] &&=0A=
            this.ycomp <  this.offset[1] + element.offsetHeight &&=0A=
            this.xcomp >=3D this.offset[0] &&=0A=
            this.xcomp <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  // within must be called directly before=0A=
  overlap: function(mode, element) {=0A=
    if (!mode) return 0;=0A=
    if (mode =3D=3D 'vertical')=0A=
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A=
        element.offsetHeight;=0A=
    if (mode =3D=3D 'horizontal')=0A=
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A=
        element.offsetWidth;=0A=
  },=0A=
=0A=
  page: function(forElement) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
=0A=
    var element =3D forElement;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
=0A=
      // Safari fix=0A=
      if (element.offsetParent=3D=3Ddocument.body)=0A=
        if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A=
=0A=
    } while (element =3D element.offsetParent);=0A=
=0A=
    element =3D forElement;=0A=
    do {=0A=
      if (!window.opera || element.tagName=3D=3D'BODY') {=0A=
        valueT -=3D element.scrollTop  || 0;=0A=
        valueL -=3D element.scrollLeft || 0;=0A=
      }=0A=
    } while (element =3D element.parentNode);=0A=
=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  clone: function(source, target) {=0A=
    var options =3D Object.extend({=0A=
      setLeft:    true,=0A=
      setTop:     true,=0A=
      setWidth:   true,=0A=
      setHeight:  true,=0A=
      offsetTop:  0,=0A=
      offsetLeft: 0=0A=
    }, arguments[2] || {})=0A=
=0A=
    // find page position of source=0A=
    source =3D $(source);=0A=
    var p =3D Position.page(source);=0A=
=0A=
    // find coordinate system to use=0A=
    target =3D $(target);=0A=
    var delta =3D [0, 0];=0A=
    var parent =3D null;=0A=
    // delta [0,0] will do fine with position: fixed elements,=0A=
    // position:absolute needs offsetParent deltas=0A=
    if (Element.getStyle(target,'position') =3D=3D 'absolute') {=0A=
      parent =3D Position.offsetParent(target);=0A=
      delta =3D Position.page(parent);=0A=
    }=0A=
=0A=
    // correct by body offsets (fixes Safari)=0A=
    if (parent =3D=3D document.body) {=0A=
      delta[0] -=3D document.body.offsetLeft;=0A=
      delta[1] -=3D document.body.offsetTop;=0A=
    }=0A=
=0A=
    // set position=0A=
    if(options.setLeft)   target.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
    if(options.setTop)    target.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
    if(options.setWidth)  target.style.width =3D source.offsetWidth + =
'px';=0A=
    if(options.setHeight) target.style.height =3D source.offsetHeight + =
'px';=0A=
  },=0A=
=0A=
  absolutize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.style.position =3D=3D 'absolute') return;=0A=
    Position.prepare();=0A=
=0A=
    var offsets =3D Position.positionedOffset(element);=0A=
    var top     =3D offsets[1];=0A=
    var left    =3D offsets[0];=0A=
    var width   =3D element.clientWidth;=0A=
    var height  =3D element.clientHeight;=0A=
=0A=
    element._originalLeft   =3D left - parseFloat(element.style.left  || =
0);=0A=
    element._originalTop    =3D top  - parseFloat(element.style.top || =
0);=0A=
    element._originalWidth  =3D element.style.width;=0A=
    element._originalHeight =3D element.style.height;=0A=
=0A=
    element.style.position =3D 'absolute';=0A=
    element.style.top    =3D top + 'px';;=0A=
    element.style.left   =3D left + 'px';;=0A=
    element.style.width  =3D width + 'px';;=0A=
    element.style.height =3D height + 'px';;=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.style.position =3D=3D 'relative') return;=0A=
    Position.prepare();=0A=
=0A=
    element.style.position =3D 'relative';=0A=
    var top  =3D parseFloat(element.style.top  || 0) - =
(element._originalTop || 0);=0A=
    var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);=0A=
=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.height =3D element._originalHeight;=0A=
    element.style.width  =3D element._originalWidth;=0A=
  }=0A=
}=0A=
=0A=
// Safari returns margins on body which is incorrect if the child is =
absolutely=0A=
// positioned.  For performance reasons, redefine =
Position.cumulativeOffset for=0A=
// KHTML/WebKit only.=0A=
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A=
  Position.cumulativeOffset =3D function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
=0A=
    return [valueL, valueT];=0A=
  }=0A=
}=0A=
=0A=
Element.addMethods();
------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/effects.js?1248796221

// Copyright (c) 2005, 2006 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=
=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=
/*-----------------------------------------------------------------------=
---*/=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=
=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=
=0A=
Element.setContentZoom =3D function(element, percent) {=0A=
  element =3D $(element);  =0A=
  element.setStyle({fontSize: (percent/100) + 'em'});   =0A=
  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);=0A=
  return element;=0A=
}=0A=
=0A=
Element.getOpacity =3D function(element){=0A=
  element =3D $(element);=0A=
  var opacity;=0A=
  if (opacity =3D element.getStyle('opacity'))  =0A=
    return parseFloat(opacity);  =0A=
  if (opacity =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))  =0A=
    if(opacity[1]) return parseFloat(opacity[1]) / 100;  =0A=
  return 1.0;  =0A=
}=0A=
=0A=
Element.setOpacity =3D function(element, value){  =0A=
  element=3D $(element);  =0A=
  if (value =3D=3D 1){=0A=
    element.setStyle({ opacity: =0A=
      (/Gecko/.test(navigator.userAgent) && =
!/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? =0A=
      0.999999 : 1.0 });=0A=
    if(/MSIE/.test(navigator.userAgent) && !window.opera)  =0A=
      element.setStyle({filter: =
Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  =0A=
  } else {  =0A=
    if(value < 0.00001) value =3D 0;  =0A=
    element.setStyle({opacity: value});=0A=
    if(/MSIE/.test(navigator.userAgent) && !window.opera)  =0A=
      element.setStyle(=0A=
        { filter: =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +=0A=
            'alpha(opacity=3D'+value*100+')' });  =0A=
  }=0A=
  return element;=0A=
}  =0A=
 =0A=
Element.getInlineOpacity =3D function(element){  =0A=
  return $(element).style.opacity || '';=0A=
}  =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=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Array.prototype.call =3D function() {=0A=
  var args =3D arguments;=0A=
  this.each(function(f){ f.apply(this, args) });=0A=
}=0A=
=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=
  tagifyText: function(element) {=0A=
    if(typeof Builder =3D=3D 'undefined')=0A=
      throw("Effect.tagifyText requires including script.aculo.us' =
builder.js library");=0A=
      =0A=
    var tagifyStyle =3D 'position:relative';=0A=
    if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle =
+=3D ';zoom:1';=0A=
    =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=
            Builder.node('span',{style: tagifyStyle},=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=
        (typeof element =3D=3D 'function')) && =0A=
       (element.length))=0A=
      elements =3D element;=0A=
    else=0A=
      elements =3D $(element).childNodes;=0A=
      =0A=
    var options =3D Object.extend({=0A=
      speed: 0.1,=0A=
      delay: 0.0=0A=
    }, arguments[2] || {});=0A=
    var masterDelay =3D options.delay;=0A=
=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=
=0A=
var Effect2 =3D Effect; // deprecated=0A=
=0A=
/* ------------- transitions ------------- */=0A=
=0A=
Effect.Transitions =3D {=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=
    return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;=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=
      Math.round((pos % (1/pulses)) * pulses) =3D=3D 0 ? =0A=
            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : =0A=
        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))=0A=
      );=0A=
  },=0A=
  none: function(pos) {=0A=
    return 0;=0A=
  },=0A=
  full: function(pos) {=0A=
    return 1;=0A=
  }=0A=
};=0A=
=0A=
/* ------------- core effects ------------- */=0A=
=0A=
Effect.ScopedQueue =3D Class.create();=0A=
Object.extend(Object.extend(Effect.ScopedQueue.prototype, 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=
    =0A=
    var position =3D (typeof effect.options.queue =3D=3D 'string') ? =0A=
      effect.options.queue : effect.options.queue.position;=0A=
    =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=
    =0A=
    effect.startOn  +=3D timestamp;=0A=
    effect.finishOn +=3D timestamp;=0A=
=0A=
    if(!effect.options.queue.limit || (this.effects.length < =
effect.options.queue.limit))=0A=
      this.effects.push(effect);=0A=
    =0A=
    if(!this.interval) =0A=
      this.interval =3D setInterval(this.loop.bind(this), 40);=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=
    this.effects.invoke('loop', timePos);=0A=
  }=0A=
});=0A=
=0A=
Effect.Queues =3D {=0A=
  instances: $H(),=0A=
  get: function(queueName) {=0A=
    if(typeof queueName !=3D 'string') return queueName;=0A=
    =0A=
    if(!this.instances[queueName])=0A=
      this.instances[queueName] =3D new Effect.ScopedQueue();=0A=
      =0A=
    return this.instances[queueName];=0A=
  }=0A=
}=0A=
Effect.Queue =3D Effect.Queues.get('global');=0A=
=0A=
Effect.DefaultOptions =3D {=0A=
  transition: Effect.Transitions.sinoidal,=0A=
  duration:   1.0,   // seconds=0A=
  fps:        25.0,  // max. 25fps due to Effect.Queue implementation=0A=
  sync:       false, // true for combining=0A=
  from:       0.0,=0A=
  to:         1.0,=0A=
  delay:      0.0,=0A=
  queue:      'parallel'=0A=
}=0A=
=0A=
Effect.Base =3D function() {};=0A=
Effect.Base.prototype =3D {=0A=
  position: null,=0A=
  start: function(options) {=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.event('beforeStart');=0A=
    if(!this.options.sync)=0A=
      Effect.Queues.get(typeof this.options.queue =3D=3D 'string' ? =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.finishOn - =
this.startOn);=0A=
      var frame =3D Math.round(pos * this.options.fps * =
this.options.duration);=0A=
      if(frame > this.currentFrame) {=0A=
        this.render(pos);=0A=
        this.currentFrame =3D frame;=0A=
      }=0A=
    }=0A=
  },=0A=
  render: function(pos) {=0A=
    if(this.state =3D=3D 'idle') {=0A=
      this.state =3D 'running';=0A=
      this.event('beforeSetup');=0A=
      if(this.setup) this.setup();=0A=
      this.event('afterSetup');=0A=
    }=0A=
    if(this.state =3D=3D 'running') {=0A=
      if(this.options.transition) pos =3D this.options.transition(pos);=0A=
      pos *=3D (this.options.to-this.options.from);=0A=
      pos +=3D this.options.from;=0A=
      this.position =3D pos;=0A=
      this.event('beforeUpdate');=0A=
      if(this.update) this.update(pos);=0A=
      this.event('afterUpdate');=0A=
    }=0A=
  },=0A=
  cancel: function() {=0A=
    if(!this.options.sync)=0A=
      Effect.Queues.get(typeof this.options.queue =3D=3D 'string' ? =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=
    return '#<Effect:' + $H(this).inspect() + ',options:' + =
$H(this.options).inspect() + '>';=0A=
  }=0A=
}=0A=
=0A=
Effect.Parallel =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Parallel.prototype, =
Effect.Base.prototype), {=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=
=0A=
Effect.Event =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Event.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function() {=0A=
    var options =3D Object.extend({=0A=
      duration: 0=0A=
    }, arguments[0] || {});=0A=
    this.start(options);=0A=
  },=0A=
  update: Prototype.emptyFunction=0A=
});=0A=
=0A=
Effect.Opacity =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Opacity.prototype, =
Effect.Base.prototype), {=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(/MSIE/.test(navigator.userAgent) && !window.opera && =
(!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=
=0A=
Effect.Move =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Move.prototype, =
Effect.Base.prototype), {=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=
    // Bug in Opera: Opera returns the "real" position of a static =
element or=0A=
    // relative element that does not have top/left explicitly set.=0A=
    // =3D=3D> Always set top and left for position relative elements in =
your stylesheets =0A=
    // (to 0 if you do not need them) =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=
      // absolute movement, so we need to calc deltaX and deltaY=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: Math.round(this.options.x  * position + this.originalLeft) + =
'px',=0A=
      top:  Math.round(this.options.y  * position + this.originalTop)  + =
'px'=0A=
    });=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=
=0A=
Effect.Scale =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Scale.prototype, =
Effect.Base.prototype), {=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=
    =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=
      =0A=
    this.originalTop  =3D this.element.offsetTop;=0A=
    this.originalLeft =3D this.element.offsetLeft;=0A=
    =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=
    =0A=
    this.factor =3D (this.options.scaleTo - this.options.scaleFrom)/100;=0A=
    =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 Math.round(width) + 'px';=0A=
    if(this.options.scaleY) d.height =3D Math.round(height) + '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=
=0A=
Effect.Highlight =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Highlight.prototype, =
Effect.Base.prototype), {=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=
      backgroundImage: this.element.getStyle('background-image') };=0A=
    this.element.setStyle({backgroundImage: 'none'});=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+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); =
}.bind(this)) });=0A=
  },=0A=
  finish: function() {=0A=
    this.element.setStyle(Object.extend(this.oldStyle, {=0A=
      backgroundColor: this.options.restorecolor=0A=
    }));=0A=
  }=0A=
});=0A=
=0A=
Effect.ScrollTo =3D Class.create();=0A=
Object.extend(Object.extend(Effect.ScrollTo.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    this.start(arguments[1] || {});=0A=
  },=0A=
  setup: function() {=0A=
    Position.prepare();=0A=
    var offsets =3D Position.cumulativeOffset(this.element);=0A=
    if(this.options.offset) offsets[1] +=3D this.options.offset;=0A=
    var max =3D window.innerHeight ? =0A=
      window.height - window.innerHeight :=0A=
      document.body.scrollHeight - =0A=
        (document.documentElement.clientHeight ? =0A=
          document.documentElement.clientHeight : =
document.body.clientHeight);=0A=
    this.scrollStart =3D Position.deltaY;=0A=
    this.delta =3D (offsets[1] > max ? max : offsets[1]) - =
this.scrollStart;=0A=
  },=0A=
  update: function(position) {=0A=
    Position.prepare();=0A=
    window.scrollTo(Position.deltaX, =0A=
      this.scrollStart + (position*this.delta));=0A=
  }=0A=
});=0A=
=0A=
/* ------------- combination effects ------------- */=0A=
=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=
  }}, arguments[1] || {});=0A=
  return new Effect.Opacity(element,options);=0A=
}=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=
=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=
=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=
=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=
=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=
=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=
=0A=
Effect.Shake =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    top: element.getStyle('top'),=0A=
    left: element.getStyle('left') };=0A=
    return new Effect.Move(element, =0A=
      { x:  20, y: 0, duration: 0.05, afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -20, y: 0, duration: 0.05, afterFinishInternal: =
function(effect) {=0A=
        effect.element.undoPositioned().setStyle(oldStyle);=0A=
  }}) }}) }}) }}) }}) }});=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=
=0A=
Effect.SlideUp =3D function(element) {=0A=
  element =3D $(element).cleanWhitespace();=0A=
  var oldInnerBottom =3D element.down().getStyle('bottom');=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=
    restoreAfterFinish: true,=0A=
    beforeStartInternal: 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().setStyle({bottom: =
oldInnerBottom});=0A=
      effect.element.down().undoPositioned();=0A=
    }=0A=
   }, arguments[1] || {})=0A=
  );=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=
=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=
=0A=
  var dims =3D element.getDimensions();    =0A=
  var initialMoveX, initialMoveY;=0A=
  var moveX, moveY;=0A=
  =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=
  =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=
=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=
=0A=
  var dims =3D element.getDimensions();=0A=
  var moveX, moveY;=0A=
  =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=
  =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=
=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=
=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=
=0A=
Effect.Morph =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Morph.prototype, =
Effect.Base.prototype), {=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=
    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.options.style.parseStyle().map(function(property){=0A=
      var originalValue =3D this.element.getStyle(property[0]);=0A=
      return $H({ =0A=
        style: property[0], =0A=
        originalValue: property[1].unit=3D=3D'color' ? =0A=
          parseColor(originalValue) : parseFloat(originalValue || 0), =0A=
        targetValue: property[1].unit=3D=3D'color' ? =0A=
          parseColor(property[1].value) : property[1].value,=0A=
        unit: property[1].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 $H(), value =3D null;=0A=
    this.transforms.each(function(transform){=0A=
      value =3D transform.unit=3D=3D'color' ?=0A=
        $R(0,2).inject('#',function(m,v,i){=0A=
          return m+(Math.round(transform.originalValue[i]+=0A=
            (transform.targetValue[i] - =
transform.originalValue[i])*position)).toColorPart() }) : =0A=
        transform.originalValue + Math.round(=0A=
          ((transform.targetValue - transform.originalValue) * position) =
* 1000)/1000 + transform.unit;=0A=
      style[transform.style] =3D value;=0A=
    });=0A=
    this.element.setStyle(style);=0A=
  }=0A=
});=0A=
=0A=
Effect.Transform =3D Class.create();=0A=
Object.extend(Effect.Transform.prototype, {=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=
      var data =3D $H(track).values().first();=0A=
      this.tracks.push($H({=0A=
        ids:     $H(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 elements =3D [$(track.ids) || $$(track.ids)].flatten();=0A=
        return elements.map(function(e){ return new track.effect(e, =
Object.extend({ sync:true }, track.options)) });=0A=
      }).flatten(),=0A=
      this.options=0A=
    );=0A=
  }=0A=
});=0A=
=0A=
Element.CSS_PROPERTIES =3D ['azimuth', 'backgroundAttachment', =
'backgroundColor', 'backgroundImage', =0A=
  'backgroundPosition', 'backgroundRepeat', 'borderBottomColor', =
'borderBottomStyle', =0A=
  'borderBottomWidth', 'borderCollapse', 'borderLeftColor', =
'borderLeftStyle', 'borderLeftWidth',=0A=
  'borderRightColor', 'borderRightStyle', 'borderRightWidth', =
'borderSpacing', 'borderTopColor',=0A=
  'borderTopStyle', 'borderTopWidth', 'bottom', 'captionSide', 'clear', =
'clip', 'color', 'content',=0A=
  'counterIncrement', 'counterReset', 'cssFloat', 'cueAfter', =
'cueBefore', 'cursor', 'direction',=0A=
  'display', 'elevation', 'emptyCells', 'fontFamily', 'fontSize', =
'fontSizeAdjust', 'fontStretch',=0A=
  'fontStyle', 'fontVariant', 'fontWeight', 'height', 'left', =
'letterSpacing', 'lineHeight',=0A=
  'listStyleImage', 'listStylePosition', 'listStyleType', =
'marginBottom', 'marginLeft', 'marginRight',=0A=
  'marginTop', 'markerOffset', 'marks', 'maxHeight', 'maxWidth', =
'minHeight', 'minWidth', 'opacity',=0A=
  'orphans', 'outlineColor', 'outlineOffset', 'outlineStyle', =
'outlineWidth', 'overflowX', 'overflowY',=0A=
  'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop', 'page', =
'pageBreakAfter', 'pageBreakBefore',=0A=
  'pageBreakInside', 'pauseAfter', 'pauseBefore', 'pitch', 'pitchRange', =
'position', 'quotes',=0A=
  'richness', 'right', 'size', 'speakHeader', 'speakNumeral', =
'speakPunctuation', 'speechRate', 'stress',=0A=
  'tableLayout', 'textAlign', 'textDecoration', 'textIndent', =
'textShadow', 'textTransform', 'top',=0A=
  'unicodeBidi', 'verticalAlign', 'visibility', 'voiceFamily', 'volume', =
'whiteSpace', 'widows',=0A=
  'width', 'wordSpacing', 'zIndex'];=0A=
  =0A=
Element.CSS_LENGTH =3D =
/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;=0A=
=0A=
String.prototype.parseStyle =3D function(){=0A=
  var element =3D Element.extend(document.createElement('div'));=0A=
  element.innerHTML =3D '<div style=3D"' + this + '"></div>';=0A=
  var style =3D element.down().style, styleRules =3D $H();=0A=
  =0A=
  Element.CSS_PROPERTIES.each(function(property){=0A=
   if(style[property]) styleRules[property] =3D style[property]; =0A=
  });=0A=
  =0A=
  var result =3D $H();=0A=
  =0A=
  styleRules.each(function(pair){=0A=
    var property =3D pair[0], value =3D pair[1], unit =3D null;=0A=
    =0A=
    if(value.parseColor('#zzzzzz') !=3D '#zzzzzz') {=0A=
      value =3D value.parseColor();=0A=
      unit  =3D 'color';=0A=
    } else if(Element.CSS_LENGTH.test(value)) =0A=
      var components =3D value.match(/^([\+\-]?[0-9\.]+)(.*)$/),=0A=
          value =3D parseFloat(components[1]), unit =3D =
(components.length =3D=3D 3) ? components[2] : null;=0A=
    =0A=
    result[property.underscore().dasherize()] =3D $H({ value:value, =
unit:unit });=0A=
  }.bind(this));=0A=
  =0A=
  return result;=0A=
};=0A=
=0A=
Element.morph =3D function(element, style) {=0A=
  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] =
|| {}));=0A=
  return element;=0A=
};=0A=
=0A=
['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setCont=
entZoom',=0A=
 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( =0A=
  function(f) { Element.Methods[f] =3D Element[f]; }=0A=
);=0A=
=0A=
Element.Methods.visualEffect =3D function(element, effect, options) {=0A=
  s =3D effect.gsub(/_/, '-').camelize();=0A=
  effect_class =3D s.charAt(0).toUpperCase() + s.substring(1);=0A=
  new Effect[effect_class](element, options);=0A=
  return $(element);=0A=
};=0A=
=0A=
Element.addMethods();
------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/dragdrop.js?1248796221

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005, 2006 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=
=0A=
if(typeof Effect =3D=3D 'undefined')=0A=
  throw("dragdrop.js requires including script.aculo.us' effects.js =
library");=0A=
=0A=
var Droppables =3D {=0A=
  drops: [],=0A=
=0A=
  remove: function(element) {=0A=
    this.drops =3D this.drops.reject(function(d) { return =
d.element=3D=3D$(element) });=0A=
  },=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=
=0A=
    // cache containers=0A=
    if(options.containment) {=0A=
      options._containers =3D [];=0A=
      var containment =3D options.containment;=0A=
      if((typeof containment =3D=3D 'object') && =0A=
        (containment.constructor =3D=3D Array)) {=0A=
        containment.each( function(c) { options._containers.push($(c)) =
});=0A=
      } else {=0A=
        options._containers.push($(containment));=0A=
      }=0A=
    }=0A=
    =0A=
    if(options.accept) options.accept =3D [options.accept].flatten();=0A=
=0A=
    Element.makePositioned(element); // fix IE=0A=
    options.element =3D element;=0A=
=0A=
    this.drops.push(options);=0A=
  },=0A=
  =0A=
  findDeepestChild: function(drops) {=0A=
    deepest =3D drops[0];=0A=
      =0A=
    for (i =3D 1; i < drops.length; ++i)=0A=
      if (Element.isParent(drops[i].element, deepest.element))=0A=
        deepest =3D drops[i];=0A=
    =0A=
    return deepest;=0A=
  },=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=
  =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=
=0A=
  deactivate: function(drop) {=0A=
    if(drop.hoverclass)=0A=
      Element.removeClassName(drop.element, drop.hoverclass);=0A=
    this.last_active =3D null;=0A=
  },=0A=
=0A=
  activate: function(drop) {=0A=
    if(drop.hoverclass)=0A=
      Element.addClassName(drop.element, drop.hoverclass);=0A=
    this.last_active =3D drop;=0A=
  },=0A=
=0A=
  show: function(point, element) {=0A=
    if(!this.drops.length) return;=0A=
    var affected =3D [];=0A=
    =0A=
    if(this.last_active) this.deactivate(this.last_active);=0A=
    this.drops.each( function(drop) {=0A=
      if(Droppables.isAffected(point, element, drop))=0A=
        affected.push(drop);=0A=
    });=0A=
        =0A=
    if(affected.length>0) {=0A=
      drop =3D Droppables.findDeepestChild(affected);=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=
      =0A=
      Droppables.activate(drop);=0A=
    }=0A=
  },=0A=
=0A=
  fire: function(event, element) {=0A=
    if(!this.last_active) return;=0A=
    Position.prepare();=0A=
=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=
  },=0A=
=0A=
  reset: function() {=0A=
    if(this.last_active)=0A=
      this.deactivate(this.last_active);=0A=
  }=0A=
}=0A=
=0A=
var Draggables =3D {=0A=
  drags: [],=0A=
  observers: [],=0A=
  =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=
      =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=
  =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=
  =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=
  =0A=
  deactivate: function() {=0A=
    this.activeDraggable =3D null;=0A=
  },=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=
    =0A=
    this.activeDraggable.updateDrag(event, pointer);=0A=
  },=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=
  =0A=
  keyPress: function(event) {=0A=
    if(this.activeDraggable)=0A=
      this.activeDraggable.keyPress(event);=0A=
  },=0A=
  =0A=
  addObserver: function(observer) {=0A=
    this.observers.push(observer);=0A=
    this._cacheObserverCallbacks();=0A=
  },=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=
  =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=
  =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=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Draggable =3D Class.create();=0A=
Draggable._dragging    =3D {};=0A=
=0A=
Draggable.prototype =3D {=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 typeof element._opacity =3D=3D 'number' ? =
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=
      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=
    =0A=
    if(!arguments[1] || typeof arguments[1].endeffect =3D=3D 'undefined')=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=
    =0A=
    var options =3D Object.extend(defaults, arguments[1] || {});=0A=
=0A=
    this.element =3D $(element);=0A=
    =0A=
    if(options.handle && (typeof options.handle =3D=3D 'string'))=0A=
      this.handle =3D this.element.down('.'+options.handle, 0);=0A=
    =0A=
    if(!this.handle) this.handle =3D $(options.handle);=0A=
    if(!this.handle) this.handle =3D this.element;=0A=
    =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=
=0A=
    Element.makePositioned(this.element); // fix IE    =0A=
=0A=
    this.delta    =3D this.currentDelta();=0A=
    this.options  =3D options;=0A=
    this.dragging =3D false;   =0A=
=0A=
    this.eventMouseDown =3D this.initDrag.bindAsEventListener(this);=0A=
    Event.observe(this.handle, "mousedown", this.eventMouseDown);=0A=
    =0A=
    Draggables.register(this);=0A=
  },=0A=
  =0A=
  destroy: function() {=0A=
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);=0A=
    Draggables.unregister(this);=0A=
  },=0A=
  =0A=
  currentDelta: function() {=0A=
    return([=0A=
      parseInt(Element.getStyle(this.element,'left') || '0'),=0A=
      parseInt(Element.getStyle(this.element,'top') || '0')]);=0A=
  },=0A=
  =0A=
  initDrag: function(event) {=0A=
    if(typeof Draggable._dragging[this.element] !=3D 'undefined' &&=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(src.tagName && (=0A=
        src.tagName=3D=3D'INPUT' ||=0A=
        src.tagName=3D=3D'SELECT' ||=0A=
        src.tagName=3D=3D'OPTION' ||=0A=
        src.tagName=3D=3D'BUTTON' ||=0A=
        src.tagName=3D=3D'TEXTAREA')) return;=0A=
        =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=
      =0A=
      Draggables.activate(this);=0A=
      Event.stop(event);=0A=
    }=0A=
  },=0A=
  =0A=
  startDrag: function(event) {=0A=
    this.dragging =3D true;=0A=
    =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=
    =0A=
    if(this.options.ghosting) {=0A=
      this._clone =3D this.element.cloneNode(true);=0A=
      Position.absolutize(this.element);=0A=
      this.element.parentNode.insertBefore(this._clone, this.element);=0A=
    }=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=
    =0A=
    Draggables.notify('onStart', this, event);=0A=
        =0A=
    if(this.options.starteffect) this.options.starteffect(this.element);=0A=
  },=0A=
  =0A=
  updateDrag: function(event, pointer) {=0A=
    if(!this.dragging) this.startDrag(event);=0A=
    Position.prepare();=0A=
    Droppables.show(pointer, this.element);=0A=
    Draggables.notify('onDrag', this, event);=0A=
    =0A=
    this.draw(pointer);=0A=
    if(this.options.change) this.options.change(this);=0A=
    =0A=
    if(this.options.scroll) {=0A=
      this.stopScrolling();=0A=
      =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=
    =0A=
    // fix AppleWebKit rendering=0A=
    if(navigator.appVersion.indexOf('AppleWebKit')>0) =
window.scrollBy(0,0);=0A=
    =0A=
    Event.stop(event);=0A=
  },=0A=
  =0A=
  finishDrag: function(event, success) {=0A=
    this.dragging =3D false;=0A=
=0A=
    if(this.options.ghosting) {=0A=
      Position.relativize(this.element);=0A=
      Element.remove(this._clone);=0A=
      this._clone =3D null;=0A=
    }=0A=
=0A=
    if(success) Droppables.fire(event, this.element);=0A=
    Draggables.notify('onEnd', this, event);=0A=
=0A=
    var revert =3D this.options.revert;=0A=
    if(revert && typeof revert =3D=3D 'function') revert =3D =
revert(this.element);=0A=
    =0A=
    var d =3D this.currentDelta();=0A=
    if(revert && this.options.reverteffect) {=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=
=0A=
    if(this.options.zindex)=0A=
      this.element.style.zIndex =3D this.originalZ;=0A=
=0A=
    if(this.options.endeffect) =0A=
      this.options.endeffect(this.element);=0A=
      =0A=
    Draggables.deactivate(this);=0A=
    Droppables.reset();=0A=
  },=0A=
  =0A=
  keyPress: function(event) {=0A=
    if(event.keyCode!=3DEvent.KEY_ESC) return;=0A=
    this.finishDrag(event, false);=0A=
    Event.stop(event);=0A=
  },=0A=
  =0A=
  endDrag: function(event) {=0A=
    if(!this.dragging) return;=0A=
    this.stopScrolling();=0A=
    this.finishDrag(event, true);=0A=
    Event.stop(event);=0A=
  },=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=
    =0A=
    var d =3D this.currentDelta();=0A=
    pos[0] -=3D d[0]; pos[1] -=3D d[1];=0A=
    =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=
    =0A=
    var p =3D [0,1].map(function(i){ =0A=
      return (point[i]-pos[i]-this.offset[i]) =0A=
    }.bind(this));=0A=
    =0A=
    if(this.options.snap) {=0A=
      if(typeof this.options.snap =3D=3D 'function') {=0A=
        p =3D this.options.snap(p[0],p[1],this);=0A=
      } else {=0A=
      if(this.options.snap instanceof Array) {=0A=
        p =3D p.map( function(v, i) {=0A=
          return Math.round(v/this.options.snap[i])*this.options.snap[i] =
}.bind(this))=0A=
      } else {=0A=
        p =3D p.map( function(v) {=0A=
          return Math.round(v/this.options.snap)*this.options.snap =
}.bind(this))=0A=
      }=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=
    =0A=
    if(style.visibility=3D=3D"hidden") style.visibility =3D ""; // fix =
gecko rendering=0A=
  },=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=
  =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=
  =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=
    =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=
    =0A=
    if(this.options.change) this.options.change(this);=0A=
  },=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=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var SortableObserver =3D Class.create();=0A=
SortableObserver.prototype =3D {=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=
  =0A=
  onStart: function() {=0A=
    this.lastValue =3D Sortable.serialize(this.element);=0A=
  },=0A=
  =0A=
  onEnd: function() {=0A=
    Sortable.unmark();=0A=
    if(this.lastValue !=3D Sortable.serialize(this.element))=0A=
      this.observer(this.element)=0A=
  }=0A=
}=0A=
=0A=
var Sortable =3D {=0A=
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,=0A=
  =0A=
  sortables: {},=0A=
  =0A=
  _findRootElement: function(element) {=0A=
    while (element.tagName !=3D "BODY") {  =0A=
      if(element.id && Sortable.sortables[element.id]) return element;=0A=
      element =3D element.parentNode;=0A=
    }=0A=
  },=0A=
=0A=
  options: function(element) {=0A=
    element =3D Sortable._findRootElement($(element));=0A=
    if(!element) return;=0A=
    return Sortable.sortables[element.id];=0A=
  },=0A=
  =0A=
  destroy: function(element){=0A=
    var s =3D Sortable.options(element);=0A=
    =0A=
    if(s) {=0A=
      Draggables.removeObserver(s.element);=0A=
      s.droppables.each(function(d){ Droppables.remove(d) });=0A=
      s.draggables.invoke('destroy');=0A=
      =0A=
      delete Sortable.sortables[s.element.id];=0A=
    }=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=
      scroll:      false,=0A=
      scrollSensitivity: 20,=0A=
      scrollSpeed: 15,=0A=
      format:      this.SERIALIZE_RULE,=0A=
      onChange:    Prototype.emptyFunction,=0A=
      onUpdate:    Prototype.emptyFunction=0A=
    }, arguments[1] || {});=0A=
=0A=
    // clear any old sortable with same element=0A=
    this.destroy(element);=0A=
=0A=
    // build options for the draggables=0A=
    var options_for_draggable =3D {=0A=
      revert:      true,=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=
=0A=
    if(options.starteffect)=0A=
      options_for_draggable.starteffect =3D options.starteffect;=0A=
=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=
=0A=
    if(options.endeffect)=0A=
      options_for_draggable.endeffect =3D options.endeffect;=0A=
=0A=
    if(options.zindex)=0A=
      options_for_draggable.zindex =3D options.zindex;=0A=
=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=
    =0A=
    var options_for_tree =3D {=0A=
      onHover:      Sortable.onEmptyHover,=0A=
      overlap:      options.overlap,=0A=
      containment:  options.containment,=0A=
      hoverclass:   options.hoverclass=0A=
    }=0A=
=0A=
    // fix for gecko engine=0A=
    Element.cleanWhitespace(element); =0A=
=0A=
    options.draggables =3D [];=0A=
    options.droppables =3D [];=0A=
=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=
=0A=
    (this.findElements(element, options) || []).each( function(e) {=0A=
      // handles are per-draggable=0A=
      var handle =3D options.handle ? =0A=
        $(e).down('.'+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=
    =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=
=0A=
    // keep reference=0A=
    this.sortables[element.id] =3D options;=0A=
=0A=
    // for onupdate=0A=
    Draggables.addObserver(new SortableObserver(element, =
options.onUpdate));=0A=
=0A=
  },=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=
  =0A=
  findTreeElements: function(element, options) {=0A=
    return Element.findChildren(=0A=
      element, options.only, options.tree ? true : false, =
options.treeTag);=0A=
  },=0A=
=0A=
  onHover: function(element, dropon, overlap) {=0A=
    if(Element.isParent(dropon, element)) return;=0A=
=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=
  =0A=
  onEmptyHover: function(element, dropon, overlap) {=0A=
    var oldParentNode =3D element.parentNode;=0A=
    var droponOptions =3D Sortable.options(dropon);=0A=
        =0A=
    if(!Element.isParent(dropon, element)) {=0A=
      var index;=0A=
      =0A=
      var children =3D Sortable.findElements(dropon, {tag: =
droponOptions.tag, only: droponOptions.only});=0A=
      var child =3D null;=0A=
            =0A=
      if(children) {=0A=
        var offset =3D Element.offsetSize(dropon, droponOptions.overlap) =
* (1.0 - overlap);=0A=
        =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=
      =0A=
      dropon.insertBefore(element, child);=0A=
      =0A=
      Sortable.options(oldParentNode).onChange(element);=0A=
      droponOptions.onChange(element);=0A=
    }=0A=
  },=0A=
=0A=
  unmark: function() {=0A=
    if(Sortable._marker) Sortable._marker.hide();=0A=
  },=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=
=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=
    =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=
    =0A=
    Sortable._marker.show();=0A=
  },=0A=
  =0A=
  _tree: function(element, options, parent) {=0A=
    var children =3D Sortable.findElements(element, options) || [];=0A=
  =0A=
    for (var i =3D 0; i < children.length; ++i) {=0A=
      var match =3D children[i].id.match(options.format);=0A=
=0A=
      if (!match) continue;=0A=
      =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=
      =0A=
      /* Get the element containing the children and recurse over it */=0A=
      if (child.container)=0A=
        this._tree(child.container, options, child)=0A=
      =0A=
      parent.children.push (child);=0A=
    }=0A=
=0A=
    return parent; =0A=
  },=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=
    =0A=
    var root =3D {=0A=
      id: null,=0A=
      parent: null,=0A=
      children: [],=0A=
      container: element,=0A=
      position: 0=0A=
    }=0A=
    =0A=
    return Sortable._tree(element, options, root);=0A=
  },=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=
=0A=
  sequence: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend(this.options(element), arguments[1] || =
{});=0A=
    =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=
=0A=
  setSequence: function(element, new_sequence) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend(this.options(element), arguments[2] || =
{});=0A=
    =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=
   =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=
  =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=
    =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=
=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=
=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=
=0A=
  return (elements.length>0 ? elements.flatten() : []);=0A=
}=0A=
=0A=
Element.offsetSize =3D function (element, type) {=0A=
  return element['offset' + ((type=3D=3D'vertical' || =
type=3D=3D'height') ? 'Height' : 'Width')];=0A=
}=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/controls.js?1248796221

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005, 2006 Ivan Krstic =
(http://blogs.law.harvard.edu/ivan)=0A=
//           (c) 2005, 2006 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=
=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=
=0A=
if(typeof Effect =3D=3D 'undefined')=0A=
  throw("controls.js requires including script.aculo.us' effects.js =
library");=0A=
=0A=
var Autocompleter =3D {}=0A=
Autocompleter.Base =3D function() {};=0A=
Autocompleter.Base.prototype =3D {=0A=
  baseInitialize: function(element, update, options) {=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=
=0A=
    if(this.setOptions)=0A=
      this.setOptions(options);=0A=
    else=0A=
      this.options =3D options || {};=0A=
=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=
        // Flexer=0A=
        //Effect.Appear(update,{duration:0.15});=0A=
        Element.show(update);=0A=
      };=0A=
    this.options.onHide =3D this.options.onHide || =0A=
      function(element, update){=0A=
        // Flexer=0A=
        //new EffecFade(update,{duration:0.15})=0A=
        Element.hide(update);=0A=
      };=0A=
=0A=
    if(typeof(this.options.tokens) =3D=3D 'string') =0A=
      this.options.tokens =3D new Array(this.options.tokens);=0A=
=0A=
    this.observer =3D null;=0A=
    =0A=
    this.element.setAttribute('autocomplete','off');=0A=
=0A=
    Element.hide(this.update);=0A=
=0A=
    Event.observe(this.element, "blur", =
this.onBlur.bindAsEventListener(this));=0A=
    Event.observe(this.element, "keypress", =
this.onKeyPress.bindAsEventListener(this));=0A=
  },=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=
      (navigator.appVersion.indexOf('MSIE')>0) &&=0A=
      (navigator.userAgent.indexOf('Opera')<0) &&=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=
  =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=
=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=
=0A=
  startIndicator: function() {=0A=
    if(this.options.indicator) Element.show(this.options.indicator);=0A=
  },=0A=
=0A=
  stopIndicator: function() {=0A=
    if(this.options.indicator) Element.hide(this.options.indicator);=0A=
  },=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=
         if(navigator.appVersion.indexOf('AppleWebKit')>0) =
Event.stop(event);=0A=
         return;=0A=
       case Event.KEY_DOWN:=0A=
         this.markNext();=0A=
         this.render();=0A=
         if(navigator.appVersion.indexOf('AppleWebKit')>0) =
Event.stop(event);=0A=
         return;=0A=
      }=0A=
     else =0A=
       if(event.keyCode=3D=3DEvent.KEY_TAB || =
event.keyCode=3D=3DEvent.KEY_RETURN || =0A=
         (navigator.appVersion.indexOf('AppleWebKit') > 0 && =
event.keyCode =3D=3D 0)) return;=0A=
=0A=
    this.changed =3D true;=0A=
    this.hasFocus =3D true;=0A=
=0A=
    if(this.observer) clearTimeout(this.observer);=0A=
      this.observer =3D =0A=
        setTimeout(this.onObserverEvent.bind(this), =
this.options.frequency*1000);=0A=
  },=0A=
=0A=
  activate: function() {=0A=
    this.changed =3D false;=0A=
    this.hasFocus =3D true;=0A=
    this.getUpdatedChoices();=0A=
  },=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=
  =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=
  =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=
  =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=
        =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=
  =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=
  =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=
  =0A=
  getEntry: function(index) {=0A=
    return this.update.firstChild.childNodes[index];=0A=
  },=0A=
  =0A=
  getCurrentEntry: function() {=0A=
    return this.getEntry(this.index);=0A=
  },=0A=
  =0A=
  selectEntry: function() {=0A=
    this.active =3D false;=0A=
    this.updateElement(this.getCurrentEntry());=0A=
  },=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 document.getElementsByClassName(this.options.select, =
selectedElement) || [];=0A=
      if(nodes.length>0) value =3D Element.collectTextNodes(nodes[0], =
this.options.select);=0A=
    } else=0A=
      value =3D Element.collectTextNodesIgnoreClass(selectedElement, =
'informal');=0A=
    =0A=
    var lastTokenPos =3D this.findLastToken();=0A=
    if (lastTokenPos !=3D -1) {=0A=
      var newValue =3D this.element.value.substr(0, lastTokenPos + 1);=0A=
      var whitespace =3D this.element.value.substr(lastTokenPos + =
1).match(/^\s+/);=0A=
      if (whitespace)=0A=
        newValue +=3D whitespace[0];=0A=
      this.element.value =3D newValue + value;=0A=
    } else {=0A=
      this.element.value =3D value;=0A=
    }=0A=
    this.element.focus();=0A=
    =0A=
    if (this.options.afterUpdateElement)=0A=
      this.options.afterUpdateElement(this.element, selectedElement);=0A=
  },=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=
=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=
=0A=
      this.stopIndicator();=0A=
      this.index =3D 0;=0A=
      =0A=
      if(this.entryCount=3D=3D1 && this.options.autoSelect) {=0A=
        this.selectEntry();=0A=
        this.hide();=0A=
      } else {=0A=
        this.render();=0A=
      }=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=
=0A=
  onObserverEvent: function() {=0A=
    this.changed =3D false;   =0A=
    if(this.getToken().length>=3Dthis.options.minChars) {=0A=
      this.startIndicator();=0A=
      this.getUpdatedChoices();=0A=
    } else {=0A=
      this.active =3D false;=0A=
      this.hide();=0A=
    }=0A=
  },=0A=
=0A=
  getToken: function() {=0A=
    var tokenPos =3D this.findLastToken();=0A=
    if (tokenPos !=3D -1)=0A=
      var ret =3D this.element.value.substr(tokenPos + =
1).replace(/^\s+/,'').replace(/\s+$/,'');=0A=
    else=0A=
      var ret =3D this.element.value;=0A=
=0A=
    return /\n/.test(ret) ? '' : ret;=0A=
  },=0A=
=0A=
  findLastToken: function() {=0A=
    var lastTokenPos =3D -1;=0A=
=0A=
    for (var i=3D0; i<this.options.tokens.length; i++) {=0A=
      var thisTokenPos =3D =
this.element.value.lastIndexOf(this.options.tokens[i]);=0A=
      if (thisTokenPos > lastTokenPos)=0A=
        lastTokenPos =3D thisTokenPos;=0A=
    }=0A=
    return lastTokenPos;=0A=
  }=0A=
}=0A=
=0A=
Ajax.Autocompleter =3D Class.create();=0A=
Object.extend(Object.extend(Ajax.Autocompleter.prototype, =
Autocompleter.Base.prototype), {=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=
=0A=
  getUpdatedChoices: function() {=0A=
    entry =3D encodeURIComponent(this.options.paramName) + '=3D' + =0A=
      encodeURIComponent(this.getToken());=0A=
=0A=
    this.options.parameters =3D this.options.callback ?=0A=
      this.options.callback(this.element, entry) : entry;=0A=
=0A=
    if(this.options.defaultParams) =0A=
      this.options.parameters +=3D '&' + this.options.defaultParams;=0A=
=0A=
    new Ajax.Request(this.url, this.options);=0A=
  },=0A=
=0A=
  onComplete: function(request) {=0A=
    this.updateChoices(request.responseText);=0A=
  }=0A=
=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=
=0A=
Autocompleter.Local =3D Class.create();=0A=
Autocompleter.Local.prototype =3D Object.extend(new =
Autocompleter.Base(), {=0A=
  initialize: function(element, update, array, options) {=0A=
    this.baseInitialize(element, update, options);=0A=
    this.options.array =3D array;=0A=
  },=0A=
=0A=
  getUpdatedChoices: function() {=0A=
    this.updateChoices(this.options.selector(this));=0A=
  },=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=
=0A=
        for (var i =3D 0; i < instance.options.array.length &&  =0A=
          ret.length < instance.options.choices ; i++) { =0A=
=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=
=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=
=0A=
            foundPos =3D instance.options.ignoreCase ? =0A=
              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + =
1) : =0A=
              elem.indexOf(entry, foundPos + 1);=0A=
=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=
=0A=
// AJAX in-place editor=0A=
//=0A=
// see documentation on =
http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor=0A=
=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=
=0A=
Ajax.InPlaceEditor =3D Class.create();=0A=
Ajax.InPlaceEditor.defaultHighlightColor =3D "#FFFF99";=0A=
Ajax.InPlaceEditor.prototype =3D {=0A=
  initialize: function(element, url, options) {=0A=
    this.url =3D url;=0A=
    this.element =3D $(element);=0A=
=0A=
    this.options =3D Object.extend({=0A=
      paramName: "value",=0A=
      okButton: true,=0A=
      okText: "ok",=0A=
      cancelLink: true,=0A=
      cancelText: "cancel",=0A=
      savingText: "Saving...",=0A=
      clickToEditText: "Click to edit",=0A=
      okText: "ok",=0A=
      rows: 1,=0A=
      onComplete: function(transport, element) {=0A=
        new Effect.Highlight(element, {startcolor: =
this.options.highlightcolor});=0A=
      },=0A=
      onFailure: function(transport) {=0A=
        alert("Error communicating with the server: " + =
transport.responseText.stripTags());=0A=
      },=0A=
      callback: function(form) {=0A=
        return Form.serialize(form);=0A=
      },=0A=
      handleLineBreaks: true,=0A=
      loadingText: 'Loading...',=0A=
      savingClassName: 'inplaceeditor-saving',=0A=
      loadingClassName: 'inplaceeditor-loading',=0A=
      formClassName: 'inplaceeditor-form',=0A=
      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,=0A=
      highlightendcolor: "#FFFFFF",=0A=
      externalControl: null,=0A=
      submitOnBlur: false,=0A=
      ajaxOptions: {},=0A=
      evalScripts: false=0A=
    }, options || {});=0A=
=0A=
    if(!this.options.formId && this.element.id) {=0A=
      this.options.formId =3D this.element.id + "-inplaceeditor";=0A=
      if ($(this.options.formId)) {=0A=
        // there's already a form with that name, don't specify an id=0A=
        this.options.formId =3D null;=0A=
      }=0A=
    }=0A=
    =0A=
    if (this.options.externalControl) {=0A=
      this.options.externalControl =3D $(this.options.externalControl);=0A=
    }=0A=
    =0A=
    this.originalBackground =3D Element.getStyle(this.element, =
'background-color');=0A=
    if (!this.originalBackground) {=0A=
      this.originalBackground =3D "transparent";=0A=
    }=0A=
    =0A=
    this.element.title =3D this.options.clickToEditText;=0A=
    =0A=
    this.onclickListener =3D =
this.enterEditMode.bindAsEventListener(this);=0A=
    this.mouseoverListener =3D this.enterHover.bindAsEventListener(this);=0A=
    this.mouseoutListener =3D this.leaveHover.bindAsEventListener(this);=0A=
    Event.observe(this.element, 'click', this.onclickListener);=0A=
    Event.observe(this.element, 'mouseover', this.mouseoverListener);=0A=
    Event.observe(this.element, 'mouseout', this.mouseoutListener);=0A=
    if (this.options.externalControl) {=0A=
      Event.observe(this.options.externalControl, 'click', =
this.onclickListener);=0A=
      Event.observe(this.options.externalControl, 'mouseover', =
this.mouseoverListener);=0A=
      Event.observe(this.options.externalControl, 'mouseout', =
this.mouseoutListener);=0A=
    }=0A=
  },=0A=
  enterEditMode: function(evt) {=0A=
    if (this.saving) return;=0A=
    if (this.editing) return;=0A=
    this.editing =3D true;=0A=
    this.onEnterEditMode();=0A=
    if (this.options.externalControl) {=0A=
      Element.hide(this.options.externalControl);=0A=
    }=0A=
    Element.hide(this.element);=0A=
    this.createForm();=0A=
    this.element.parentNode.insertBefore(this.form, this.element);=0A=
    if (!this.options.loadTextURL) =
Field.scrollFreeActivate(this.editField);=0A=
    // stop the event to avoid a page refresh in Safari=0A=
    if (evt) {=0A=
      Event.stop(evt);=0A=
    }=0A=
    return false;=0A=
  },=0A=
  createForm: function() {=0A=
    this.form =3D document.createElement("form");=0A=
    this.form.id =3D this.options.formId;=0A=
    Element.addClassName(this.form, this.options.formClassName)=0A=
    this.form.onsubmit =3D this.onSubmit.bind(this);=0A=
=0A=
    this.createEditField();=0A=
=0A=
    if (this.options.textarea) {=0A=
      var br =3D document.createElement("br");=0A=
      this.form.appendChild(br);=0A=
    }=0A=
=0A=
    if (this.options.okButton) {=0A=
      okButton =3D document.createElement("input");=0A=
      okButton.type =3D "submit";=0A=
      okButton.value =3D this.options.okText;=0A=
      okButton.className =3D 'editor_ok_button';=0A=
      this.form.appendChild(okButton);=0A=
    }=0A=
=0A=
    if (this.options.cancelLink) {=0A=
      cancelLink =3D document.createElement("a");=0A=
      cancelLink.href =3D "#";=0A=
      =
cancelLink.appendChild(document.createTextNode(this.options.cancelText));=0A=
      cancelLink.onclick =3D this.onclickCancel.bind(this);=0A=
      cancelLink.className =3D 'editor_cancel';      =0A=
      this.form.appendChild(cancelLink);=0A=
    }=0A=
  },=0A=
  hasHTMLLineBreaks: function(string) {=0A=
    if (!this.options.handleLineBreaks) return false;=0A=
    return string.match(/<br/i) || string.match(/<p>/i);=0A=
  },=0A=
  convertHTMLLineBreaks: function(string) {=0A=
    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, =
"\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");=0A=
  },=0A=
  createEditField: function() {=0A=
    var text;=0A=
    if(this.options.loadTextURL) {=0A=
      text =3D this.options.loadingText;=0A=
    } else {=0A=
      text =3D this.getText();=0A=
    }=0A=
=0A=
    var obj =3D this;=0A=
    =0A=
    if (this.options.rows =3D=3D 1 && !this.hasHTMLLineBreaks(text)) {=0A=
      this.options.textarea =3D false;=0A=
      var textField =3D document.createElement("input");=0A=
      textField.obj =3D this;=0A=
      textField.type =3D "text";=0A=
      textField.name =3D this.options.paramName;=0A=
      textField.value =3D text;=0A=
      textField.style.backgroundColor =3D this.options.highlightcolor;=0A=
      textField.className =3D 'editor_field';=0A=
      var size =3D this.options.size || this.options.cols || 0;=0A=
      if (size !=3D 0) textField.size =3D size;=0A=
      if (this.options.submitOnBlur)=0A=
        textField.onblur =3D this.onSubmit.bind(this);=0A=
      this.editField =3D textField;=0A=
    } else {=0A=
      this.options.textarea =3D true;=0A=
      var textArea =3D document.createElement("textarea");=0A=
      textArea.obj =3D this;=0A=
      textArea.name =3D this.options.paramName;=0A=
      textArea.value =3D this.convertHTMLLineBreaks(text);=0A=
      textArea.rows =3D this.options.rows;=0A=
      textArea.cols =3D this.options.cols || 40;=0A=
      textArea.className =3D 'editor_field';      =0A=
      if (this.options.submitOnBlur)=0A=
        textArea.onblur =3D this.onSubmit.bind(this);=0A=
      this.editField =3D textArea;=0A=
    }=0A=
    =0A=
    if(this.options.loadTextURL) {=0A=
      this.loadExternalText();=0A=
    }=0A=
    this.form.appendChild(this.editField);=0A=
  },=0A=
  getText: function() {=0A=
    return this.element.innerHTML;=0A=
  },=0A=
  loadExternalText: function() {=0A=
    Element.addClassName(this.form, this.options.loadingClassName);=0A=
    this.editField.disabled =3D true;=0A=
    new Ajax.Request(=0A=
      this.options.loadTextURL,=0A=
      Object.extend({=0A=
        asynchronous: true,=0A=
        onComplete: this.onLoadedExternalText.bind(this)=0A=
      }, this.options.ajaxOptions)=0A=
    );=0A=
  },=0A=
  onLoadedExternalText: function(transport) {=0A=
    Element.removeClassName(this.form, this.options.loadingClassName);=0A=
    this.editField.disabled =3D false;=0A=
    this.editField.value =3D transport.responseText.stripTags();=0A=
    Field.scrollFreeActivate(this.editField);=0A=
  },=0A=
  onclickCancel: function() {=0A=
    this.onComplete();=0A=
    this.leaveEditMode();=0A=
    return false;=0A=
  },=0A=
  onFailure: function(transport) {=0A=
    this.options.onFailure(transport);=0A=
    if (this.oldInnerHTML) {=0A=
      this.element.innerHTML =3D this.oldInnerHTML;=0A=
      this.oldInnerHTML =3D null;=0A=
    }=0A=
    return false;=0A=
  },=0A=
  onSubmit: function() {=0A=
    // onLoading resets these so we need to save them away for the Ajax =
call=0A=
    var form =3D this.form;=0A=
    var value =3D this.editField.value;=0A=
    =0A=
    // do this first, sometimes the ajax call returns before we get a =
chance to switch on Saving...=0A=
    // which means this will actually switch on Saving... *after* we've =
left edit mode causing Saving...=0A=
    // to be displayed indefinitely=0A=
    this.onLoading();=0A=
    =0A=
    if (this.options.evalScripts) {=0A=
      new Ajax.Request(=0A=
        this.url, Object.extend({=0A=
          parameters: this.options.callback(form, value),=0A=
          onComplete: this.onComplete.bind(this),=0A=
          onFailure: this.onFailure.bind(this),=0A=
          asynchronous:true, =0A=
          evalScripts:true=0A=
        }, this.options.ajaxOptions));=0A=
    } else  {=0A=
      new Ajax.Updater(=0A=
        { success: this.element,=0A=
          // don't update on failure (this could be an option)=0A=
          failure: null }, =0A=
        this.url, Object.extend({=0A=
          parameters: this.options.callback(form, value),=0A=
          onComplete: this.onComplete.bind(this),=0A=
          onFailure: this.onFailure.bind(this)=0A=
        }, this.options.ajaxOptions));=0A=
    }=0A=
    // stop the event to avoid a page refresh in Safari=0A=
    if (arguments.length > 1) {=0A=
      Event.stop(arguments[0]);=0A=
    }=0A=
    return false;=0A=
  },=0A=
  onLoading: function() {=0A=
    this.saving =3D true;=0A=
    this.removeForm();=0A=
    this.leaveHover();=0A=
    this.showSaving();=0A=
  },=0A=
  showSaving: function() {=0A=
    this.oldInnerHTML =3D this.element.innerHTML;=0A=
    this.element.innerHTML =3D this.options.savingText;=0A=
    Element.addClassName(this.element, this.options.savingClassName);=0A=
    this.element.style.backgroundColor =3D this.originalBackground;=0A=
    Element.show(this.element);=0A=
  },=0A=
  removeForm: function() {=0A=
    if(this.form) {=0A=
      if (this.form.parentNode) Element.remove(this.form);=0A=
      this.form =3D null;=0A=
    }=0A=
  },=0A=
  enterHover: function() {=0A=
    if (this.saving) return;=0A=
    this.element.style.backgroundColor =3D this.options.highlightcolor;=0A=
    if (this.effect) {=0A=
      this.effect.cancel();=0A=
    }=0A=
    Element.addClassName(this.element, this.options.hoverClassName)=0A=
  },=0A=
  leaveHover: function() {=0A=
    if (this.options.backgroundColor) {=0A=
      this.element.style.backgroundColor =3D this.oldBackground;=0A=
    }=0A=
    Element.removeClassName(this.element, this.options.hoverClassName)=0A=
    if (this.saving) return;=0A=
    this.effect =3D new Effect.Highlight(this.element, {=0A=
      startcolor: this.options.highlightcolor,=0A=
      endcolor: this.options.highlightendcolor,=0A=
      restorecolor: this.originalBackground=0A=
    });=0A=
  },=0A=
  leaveEditMode: function() {=0A=
    Element.removeClassName(this.element, this.options.savingClassName);=0A=
    this.removeForm();=0A=
    this.leaveHover();=0A=
    this.element.style.backgroundColor =3D this.originalBackground;=0A=
    Element.show(this.element);=0A=
    if (this.options.externalControl) {=0A=
      Element.show(this.options.externalControl);=0A=
    }=0A=
    this.editing =3D false;=0A=
    this.saving =3D false;=0A=
    this.oldInnerHTML =3D null;=0A=
    this.onLeaveEditMode();=0A=
  },=0A=
  onComplete: function(transport) {=0A=
    this.leaveEditMode();=0A=
    this.options.onComplete.bind(this)(transport, this.element);=0A=
  },=0A=
  onEnterEditMode: function() {},=0A=
  onLeaveEditMode: function() {},=0A=
  dispose: function() {=0A=
    if (this.oldInnerHTML) {=0A=
      this.element.innerHTML =3D this.oldInnerHTML;=0A=
    }=0A=
    this.leaveEditMode();=0A=
    Event.stopObserving(this.element, 'click', this.onclickListener);=0A=
    Event.stopObserving(this.element, 'mouseover', =
this.mouseoverListener);=0A=
    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);=0A=
    if (this.options.externalControl) {=0A=
      Event.stopObserving(this.options.externalControl, 'click', =
this.onclickListener);=0A=
      Event.stopObserving(this.options.externalControl, 'mouseover', =
this.mouseoverListener);=0A=
      Event.stopObserving(this.options.externalControl, 'mouseout', =
this.mouseoutListener);=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
Ajax.InPlaceCollectionEditor =3D Class.create();=0A=
Object.extend(Ajax.InPlaceCollectionEditor.prototype, =
Ajax.InPlaceEditor.prototype);=0A=
Object.extend(Ajax.InPlaceCollectionEditor.prototype, {=0A=
  createEditField: function() {=0A=
    if (!this.cached_selectTag) {=0A=
      var selectTag =3D document.createElement("select");=0A=
      var collection =3D this.options.collection || [];=0A=
      var optionTag;=0A=
      collection.each(function(e,i) {=0A=
        optionTag =3D document.createElement("option");=0A=
        optionTag.value =3D (e instanceof Array) ? e[0] : e;=0A=
        if((typeof this.options.value =3D=3D 'undefined') && =0A=
          ((e instanceof Array) ? this.element.innerHTML =3D=3D e[1] : e =
=3D=3D optionTag.value)) optionTag.selected =3D true;=0A=
        if(this.options.value=3D=3DoptionTag.value) optionTag.selected =
=3D true;=0A=
        optionTag.appendChild(document.createTextNode((e instanceof =
Array) ? e[1] : e));=0A=
        selectTag.appendChild(optionTag);=0A=
      }.bind(this));=0A=
      this.cached_selectTag =3D selectTag;=0A=
    }=0A=
=0A=
    this.editField =3D this.cached_selectTag;=0A=
    if(this.options.loadTextURL) this.loadExternalText();=0A=
    this.form.appendChild(this.editField);=0A=
    this.options.callback =3D function(form, value) {=0A=
      return "value=3D" + encodeURIComponent(value);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
// Delayed observer, like Form.Element.Observer, =0A=
// but waits for delay after last key input=0A=
// Ideal for live-search fields=0A=
=0A=
Form.Element.DelayedObserver =3D Class.create();=0A=
Form.Element.DelayedObserver.prototype =3D {=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=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/application.js?1248796221

var EC2 =3D {=0A=
  endInplaceEdit: function(id, invite) {=0A=
    new Effect.Highlight(id, {startcolor: =
Ajax.InPlaceEditor.defaultHighlightColor});=0A=
    if ($(id).innerHTML.trim()=3D=3D'')=0A=
      $(id).innerHTML=3D'<em>' + invite + '</em>'=0A=
  },=0A=
  =0A=
  _onLoad: function() {=0A=
    this.ajaxResponders();=0A=
    // this.enableLoginToggle();=0A=
    this.activateToggles();=0A=
    // this.setupSidebarMenus();=0A=
    // this.formAutofocus();=0A=
    if (EC2.onLoad)=0A=
      EC2.onLoad()=0A=
  },=0A=
=0A=
  formAutofocus: function() {=0A=
    if (frm =3D $$("form.autofocus")[0])=0A=
      Form.focusFirstElement(frm)=0A=
  },=0A=
  =0A=
  activateToggles: function() {=0A=
    $$('span.trigger').each(function(e) {=0A=
      if (id =3D e.id.match('trg-toggle_(.*)')) {=0A=
        e.onclick =3D function() {=0A=
          id =3D this.id.match('trg-toggle_(.*)')[1]=0A=
          Element.toggle(id)=0A=
          if (Element.visible(id)) {=0A=
            this.rel=3Dthis.innerHTML;=0A=
            // this.innerHTML =3D '[X]'=0A=
            try {Form.focusFirstElement(id)}=0A=
            catch(e) {}=0A=
          } else {=0A=
            this.innerHTML =3D this.rel=0A=
          }=0A=
        }=0A=
      }=0A=
    })=0A=
  },=0A=
  =0A=
  setupSidebarMenus: function() {=0A=
    var csm =3D this.cookie.read('csm')=0A=
    =0A=
    Element.cleanWhitespace($('mnu-master'))=0A=
    =0A=
    var nodes =3D $('mnu-master').childNodes;=0A=
=0A=
    // Qualsiasi 'trigger' nel submenu deve chiudere il submenu aperto=0A=
    for (var i=3D0; i < nodes.length; i++) {=0A=
      link =3D nodes[i].firstChild=0A=
      if (link && Element.hasClassName(link, 'trigger')) {=0A=
        Event.observe(link, 'click', function() {=0A=
          EC2.cookie.erase('csm')=0A=
        })=0A=
      }=0A=
    }=0A=
    =0A=
    // Chiudiamo tutti i submenu eccetto quello corrente=0A=
    if (csm) {=0A=
      for (var i=3D0; i < nodes.length; i++) {=0A=
        link =3D nodes[i].firstChild=0A=
        if (link && Element.hasClassName(link, 'submenu_trigger')) {=0A=
          Element.cleanWhitespace(nodes[i])=0A=
          if (link.id =3D=3D csm) {=0A=
            Element.addClassName(link, 'on')=0A=
            Element.toggle(link.nextSibling)=0A=
            break;=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
    =0A=
    // Prendiamo tutti gli open_submenu e ci attiviamo sopra un onclick=0A=
    // document.getElementByClassName potrebbe essere troppo lento=0A=
    for (var i=3D0; i < nodes.length; i++) {=0A=
      link =3D nodes[i].firstChild=0A=
      if (link && Element.hasClassName(link, 'submenu_trigger')) {=0A=
        Element.cleanWhitespace(nodes[i])=0A=
        link.onclick =3D function() {=0A=
          // Prendiamo il relativo submenu=0A=
          if (this.nextSibling && =0A=
              Element.hasClassName(this.nextSibling, 'menu')) {=0A=
            Element.toggle(this.nextSibling)=0A=
            if (Element.visible(this.nextSibling)) {=0A=
              EC2.cookie.write('csm', this.id)=0A=
              Element.addClassName(this, 'on')=0A=
            }=0A=
            else {=0A=
              EC2.cookie.erase('csm')=0A=
              Element.removeClassName(this, 'on')=0A=
            }=0A=
          }=0A=
          return false=0A=
        }=0A=
      }=0A=
    }=0A=
    =0A=
  },=0A=
  =0A=
  enableLoginToggle: function() {=0A=
    t =3D $("trg-login_trigger")=0A=
    if (t) {=0A=
      Event.observe(t, 'click', function(e) {=0A=
        if (!e) =0A=
          e =3D window.event=0A=
        f =3D $("con-login_form")   =0A=
        if (f) {=0A=
          if (Element.visible(f)) {=0A=
            Effect.SlideUp(f, {duration: 0.1, afterFinish: function() {=0A=
              Element.removeClassName($("trg-login_trigger"), 'on')=0A=
            }})=0A=
          } else {=0A=
            Effect.SlideDown(f, {duration: 0.1, afterFinish: function() {=0A=
              Form.focusFirstElement('frm-login_form')=0A=
              Element.addClassName($("trg-login_trigger"), 'on')=0A=
            }})=0A=
          }=0A=
        }=0A=
        Event.stop(e)=0A=
        return false;=0A=
      }, false)=0A=
    }=0A=
  },=0A=
  =0A=
  ajaxResponders: function() {=0A=
=0A=
    Ajax.Responders.register({=0A=
      onCreate: function(){=0A=
        Element.show('system_working');=0A=
      },=0A=
    =0A=
      onComplete: function() {=0A=
        if(Ajax.activeRequestCount =3D=3D 0){=0A=
          Element.hide('system_working');=0A=
        }=0A=
      }=0A=
    });=0A=
=0A=
  },=0A=
  =0A=
  /**=0A=
   * Provides cookie management methods=0A=
   */=0A=
  cookie: {=0A=
    /**=0A=
     * Set a cookie=0A=
     * @method write=0A=
     * @param {String} Name of the cookie=0A=
     * @param {String} Value for the cookie=0A=
     * @param {String} Number of days for it to expire (optional)=0A=
     */=0A=
    write: function(name,value,days) {=0A=
      if (days) {=0A=
        var date =3D new Date();=0A=
        date.setTime(date.getTime()+(days*24*60*60*1000));=0A=
        var expires =3D "; expires=3D"+date.toGMTString();=0A=
      }=0A=
      else var expires =3D "";=0A=
      document.cookie =3D name+"=3D"+value+expires+"; path=3D/";=0A=
    },=0A=
    /**=0A=
     * Read a cookie=0A=
     * @method read=0A=
     * @param {String} Name of the cookie=0A=
     * @return {String} the actual value of the cookie=0A=
     */=0A=
    read: function(name) {=0A=
      var nameEQ =3D name + "=3D";=0A=
      var ca =3D document.cookie.split(';');=0A=
      for(var i=3D0;i < ca.length;i++) {=0A=
        var c =3D ca[i];=0A=
        while (c.charAt(0)=3D=3D' ') c =3D c.substring(1,c.length);=0A=
        if (c.indexOf(nameEQ) =3D=3D 0) return =
c.substring(nameEQ.length,c.length);=0A=
      }=0A=
      return null;=0A=
    },=0A=
    /**=0A=
     * Erase a cookie=0A=
     * @method erase=0A=
     * @param {String} Name of the cookie=0A=
     */=0A=
    erase: function(name) {=0A=
      EC2.cookie.write(name,"",-1);=0A=
    }    =0A=
  }=0A=
  =0A=
}=0A=
=0A=
String.prototype.trim =3D function() {=0A=
  return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"");=0A=
};=0A=
=0A=
Event.observe(window, 'load', EC2._onLoad.bind(EC2), false)=0A=
=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/controls_ext.js?1248796221

// http://d.hatena.ne.jp/amachang/20060105=0A=
Object.extend(Autocompleter.Base.prototype, {=0A=
=0A=
	//	for Opera=0A=
	___pressReturn : false,=0A=
=0A=
	//	for Opera & Japanese=0A=
	___grandBaseInitialize: Autocompleter.Base.prototype.baseInitialize,=0A=
=0A=
	//	for Opera & Japanese=0A=
	baseInitialize: function() {=0A=
=0A=
		this.___grandBaseInitialize.apply(this, $A(arguments));=0A=
=0A=
		new Form.Element.Observer(=0A=
							this.element, 0.01, this.___onChange.bind(this));=0A=
=0A=
		//	for Opera=0A=
		if(this.element.form) {=0A=
			Event.observe(this.element.form, 'submit', =0A=
								this.___onSubmit.bindAsEventListener(this));=0A=
		}=0A=
	},=0A=
=0A=
	//	for Opera=0A=
	___disableReturnSubmit: function() {=0A=
		this.___pressReturn =3D true;=0A=
	},=0A=
=0A=
	//	for Opera=0A=
	___enableReturnSubmit: function() {=0A=
		this.___pressReturn =3D false;=0A=
	},=0A=
=0A=
	//	for Opera=0A=
	___onSubmit: function(event) {=0A=
		if(this.___pressReturn) {=0A=
			Event.stop(event);=0A=
			this.___enableReturnSubmit();=0A=
		}=0A=
	},=0A=
	=0A=
	//	for Japanese=0A=
	onKeyPress: function(event) {=0A=
		if(this.active) {=0A=
			switch(event.keyCode) {=0A=
			=0A=
				case Event.KEY_RETURN:=0A=
					//	for Opera=0A=
					this.___disableReturnSubmit();=0A=
					setTimeout(this.___enableReturnSubmit.bind(this), 1);=0A=
				=0A=
				case Event.KEY_TAB:=0A=
					this.selectEntry();=0A=
					Event.stop(event);=0A=
=0A=
				case Event.KEY_ESC:=0A=
					this.hide();=0A=
					this.active =3D false;=0A=
					Event.stop(event);=0A=
					return;=0A=
=0A=
				case Event.KEY_LEFT:=0A=
				case Event.KEY_RIGHT:=0A=
					return;=0A=
=0A=
				case Event.KEY_UP:=0A=
					this.markPrevious();=0A=
					this.render();=0A=
					if(navigator.appVersion.indexOf('AppleWebKit')>0) {=0A=
						Event.stop(event);=0A=
					}=0A=
					return;=0A=
=0A=
				case Event.KEY_DOWN:=0A=
					this.markNext();=0A=
					this.render();=0A=
					if(navigator.appVersion.indexOf('AppleWebKit')>0) {=0A=
						Event.stop(event);=0A=
					}=0A=
					return;=0A=
			}=0A=
		}=0A=
		else {=0A=
			if(	event.keyCode =3D=3D Event.KEY_DOWN ||=0A=
				event.keyCode =3D=3D Event.KEY_UP) {=0A=
				=0A=
				this.changed =3D true;=0A=
				this.hasFocus =3D true;=0A=
=0A=
				if(this.observer) {=0A=
					clearTimeout(this.observer);=0A=
				}=0A=
				this.observer =3D =0A=
					setTimeout(this.onObserverEvent.bind(this),=0A=
												this.options.frequency*1000);=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	//	forJapanese=0A=
	___onChange: function() {=0A=
		this.changed =3D true;=0A=
		this.hasFocus =3D true;=0A=
=0A=
		if(this.observer) {=0A=
			clearTimeout(this.observer);=0A=
		}=0A=
		this.observer =3D =0A=
			setTimeout(this.onObserverEvent.bind(this), =0A=
												this.options.frequency*1000);=0A=
	}=0A=
});=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://europaconcorsi.com/javascripts/graft.js?1248796221

// graft() function=0A=
// Originally by Sean M. Burke from interglacial.com=0A=
// Closure support added by Maciek Adwent=0A=
function graft (parent, t, doc) {=0A=
  // Usage: graft( somenode, [ "I like ", ['em',=0A=
  //               { 'class':"stuff" },"stuff"], " oboy!"] )=0A=
  doc =3D (doc || parent.ownerDocument || document);=0A=
=0A=
  var e;=0A=
=0A=
  if(t =3D=3D undefined) {=0A=
    throw complaining( "Can't graft an undefined value");=0A=
  } else if(t.constructor =3D=3D String) {=0A=
    e =3D doc.createTextNode( t );=0A=
  } else if(t.length =3D=3D 0) {=0A=
    e =3D doc.createElement( "span" );=0A=
    e.setAttribute( "class", "fromEmptyLOL" );=0A=
  } else {=0A=
      for(var i =3D 0; i < t.length; i++) {=0A=
        if( i =3D=3D 0 && t[i].constructor =3D=3D String ) {=0A=
          var snared;=0A=
          snared =3D t[i].match( /^([a-z][a-z0-9]*)\.([^\s\.]+)$/i );=0A=
          if( snared ) {=0A=
            e =3D doc.createElement(   snared[1] );=0A=
            e.setAttribute( 'class', snared[2] );=0A=
            continue;=0A=
          }=0A=
          snared =3D t[i].match( /^([a-z][a-z0-9]*)$/i );=0A=
          if( snared ) {=0A=
            e =3D doc.createElement( snared[1] );  // but no class=0A=
            continue;=0A=
          }=0A=
=0A=
          // Otherwise:=0A=
          e =3D doc.createElement( "span" );=0A=
          e.setAttribute( "class", "namelessFromLOL" );=0A=
        }=0A=
=0A=
        if( t[i] =3D=3D undefined ) {=0A=
          throw complaining("Can't graft an undefined value in a list!");=0A=
        } else if( t[i].constructor =3D=3D String || t[i].constructor =
=3D=3D Array ) {=0A=
          graft( e, t[i], doc );=0A=
        } else if(  t[i].constructor =3D=3D Number ) {=0A=
          graft( e, t[i].toString(), doc );=0A=
        } else if(  t[i].constructor =3D=3D Object ) {=0A=
          // hash's properties =3D> element's attributes=0A=
          for(var k in t[i]) {=0A=
            // support for attaching closures to DOM objects=0A=
            if(typeof(t[i][k])=3D=3D'function'){=0A=
                e[k] =3D t[i][k];=0A=
            } else {=0A=
              if (k =3D=3D "className") =0A=
                e.className =3D t[i][k];=0A=
              else=0A=
                e.setAttribute( k, t[i][k] );=0A=
            }=0A=
          }=0A=
        } else {=0A=
          throw complaining( "Object " + t[i] +=0A=
              " is inscrutable as an graft arglet." );=0A=
        }=0A=
    }=0A=
  }=0A=
=0A=
  parent.appendChild( e );=0A=
  return e; // return the topmost created node=0A=
}=0A=
=0A=
function complaining (s) { alert(s); return new Error(s); }=0A=
=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://partner.googleadservices.com/gampad/google_service.js

(function(){=0A=
var =
d=3Dnull,f=3Dfalse,g=3Dundefined,h=3Dwindow,j=3Ddocument,l=3D"length",m=3D=
"GA_jstiming",n=3D"join";function =
o(a){this.t=3D{};this.tick=3Dfunction(b,c,e){e=3De?e:(new =
Date).getTime();this.t[b]=3D[e,c]};this.tick("start",d,a)}var p=3Dnew =
o;h.GA_jstiming=3D{Timer:o,load:p};if(h[m]){h[m].c=3D{};h[m].f=3D1;functi=
on q(a,b,c){var e=3Da.t[b];if(!e)return =
g;e=3Da.t[b][0];if(c!=3Dg)a=3Dc;else a=3Da.t.start[0];return =
e-a}h[m].report=3Dfunction(a,b,c){var e=3D"";if(a.e)e+=3D"&"+a.e;var =
k=3Da.t,G=3Dk.start,z=3D[],s=3D[];for(var i in =
k)if(!(i=3D=3D"start"))if(!(i.indexOf("_")=3D=3D0)){var =
t=3Dk[i][1];if(t)k[t]&&s.push(i+"."+q(a,i,k[t][0]));else =
G&&z.push(i+"."+q(a,i))}delete k.start;if(b)for(var A in =
b)e+=3D"&"+A+"=3D"+b[A];a=3D[c?c:"http://csi.gstatic.com/csi","?v=3D3","&=
s=3D"+(h[m].sn?h[m].sn:"gam")+"&action=3D",a.name,s[l]?=0A=
"&it=3D"+s[n](",")+e:e,"&rt=3D",z[n](",")][n]("");b=3Dnew Image;var =
B=3Dh[m].f++;h[m].c[B]=3Db;b.onload=3Db.onerror=3Dfunction(){delete =
h[m].c[B]};b.src=3Da;b=3Dd;return a}};function =
r(a){return!!a&&(a.indexOf("?google_debug")>0||a.indexOf("&google_debug")=
>0)}r(j.URL);var =
u=3Dthis,v=3Dfunction(a,b,c){a=3Da.split(".");c=3Dc||u;!(a[0]in =
c)&&c.execScript&&c.execScript("var "+a[0]);for(var =
e;a[l]&&(e=3Da.shift());)if(!a[l]&&b!=3D=3Dg)c[e]=3Db;else =
c=3Dc[e]?c[e]:(c[e]=3D{})};Math.floor(Math.random()*2147483648).toString(=
36);var w=3Dfunction(a,b,c){v(a,b,c)};function =
x(a,b){a=3DparseFloat(a);return isNaN(a)||a>1||a<0?b:a}function =
y(a,b){if(a=3D=3D"true")return true;if(a=3D=3D"false")return f;return =
b}function C(a,b){var c=3D/^([\w-]+\.)+[\w-]{2,}(\:[0-9]+)?$/;return =
c.test(a)?a:b};var =
D=3D"pagead2.googlesyndication.com",E=3D"googleads.g.doubleclick.net",F=3D=
"pubads.g.doubleclick.net",H=3D"securepubads.g.doubleclick.net",I=3D"part=
ner.googleadservices.com";C("googleads.g.doubleclick.net",E);C("pagead2.g=
ooglesyndication.com",D);var =
J=3DC("pubads.g.doubleclick.net",F),K=3DC("partner.googleadservices.com",=
I),L=3DC("securepubads.g.doubleclick.net",H);y("false",f);y("false",f);y(=
"false",f);var M=3Dy("false",f);function N(a){return =
O("adsense",a)}w("GS_googleAddAdSenseService",N);function =
P(){Q()}w("GS_googleEnableAllServices",P);function =
R(){h.a=3D{}}w("GS_googleResetAllServices",R);function S(){var =
a=3D"adsense";return =
T(a)}w("GS_googleGetIdsForAdSenseService",S);function U(a){return =
V(a)}w("GS_googleFindService",U);function =
W(a){this.g=3Da;this.b=3D[]}W.prototype.toString=3Dfunction(){for(var =
a=3D"["+this.g+" ids: =
",b=3D0;b<this.b[l];b++){if(b>0)a+=3D",";a+=3Dthis.b[b]}a+=3D"]";return =
a};=0A=
var Z=3Dfunction(a){if(a=3D=3D"adsense")return new X;return new =
Y},O=3Dfunction(a,b){if(!(b&&typeof b=3D=3D"string"&&b[l]>0))return =
d;if(a=3D=3Dd)return d;var =
c=3Dh.a[a];if(c=3D=3Dd){c=3DZ(a);h.a[a]=3Dc}$(c,b);return =
c},$=3Dfunction(a,b){for(var =
c=3D0;c<a.b[l];c++)if(b=3D=3Da.b[c])return;a.b[a.b[l]]=3Db},Q=3Dfunction(=
){for(var a in h.a){var b=3Dh.a[a];typeof =
b=3D=3D"function"||b.enable()}},V=3Dfunction(a){return =
a=3Da=3D=3Dd?d:h.a[a]},T=3Dfunction(a){a=3Da=3D=3Dd?d:h.a[a];return =
a=3D=3Dd?"":a.b[n]()};function =
Y(){this.superclass=3DW;this.superclass("unknown")}=0A=
Y.prototype=3Dnew =
W("unknown");Y.prototype.enable=3Dfunction(){};function =
X(){this.superclass=3DW;this.superclass("adsense");this.d=3Df}X.prototype=
=3Dnew W("adsense");=0A=
var =
aa=3Dfunction(a,b,c,e){if(b.google_new_gam_domain_checked!=3D1){a=3DMath.=
random();if(a<e){e=3D"http://"+J+"/gampad/test_gam_domain.js";a=3D"script=
";c.write("<"+a+' =
src=3D"'+e+'"></'+a+">");b.google_new_gam_domain_checked=3D1}}},ba=3Dfunc=
tion(a){if(r(a))return"google_ads_dbg.js";return"google_ads.js"},ca=3Dfun=
ction(a){var b=3D"http://"+K;if(M)b=3D"https://"+L;var =
c=3D"";J=3D=3DF||(c=3D"?prodhost=3D"+J);return b+"/gampad/"+a+c};=0A=
X.prototype.enable=3Dfunction(){if(!this.d){var =
a=3Dca(ba(j.URL));M||aa(this,h,j,x("1",0));var =
b=3D"script";j.write("<"+b+' =
src=3D"'+a+'"><\/script>');this.d=3Dtrue;if(h[m]&&h[m].Timer){h[m].load.n=
ame=3D"load";h[m].load.tick("start")}}};h.a||(h.a=3D{});=0A=
})()=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://pagead2.googlesyndication.com/pagead/show_ads.js

(function(){=0A=
var g=3Dtrue,h=3Dnull,j=3Dfalse,aa=3D(new =
Date).getTime(),k=3Dfunction(a){var b=3D(new =
Date).getTime()-aa;b=3D"&dtd=3D"+(b<1000?b:"M");return a+b};var =
l=3Dthis,ba=3Dfunction(a,b,c){a=3Da.split(".");c=3Dc||l;!(a[0]in =
c)&&c.execScript&&c.execScript("var "+a[0]);for(var =
d;a.length&&(d=3Da.shift());)if(!a.length&&b!=3D=3Dundefined)c[d]=3Db;els=
e c=3Dc[d]?c[d]:(c[d]=3D{})},n=3Dfunction(a){var b=3Dtypeof =
a;if(b=3D=3D"object")if(a){if(a instanceof Array||!(a instanceof =
Object)&&Object.prototype.toString.call(a)=3D=3D"[object Array]"||typeof =
a.length=3D=3D"number"&&typeof a.splice!=3D"undefined"&&typeof =
a.propertyIsEnumerable!=3D"undefined"&&!a.propertyIsEnumerable("splice"))=
return"array";=0A=
if(!(a instanceof =
Object)&&(Object.prototype.toString.call(a)=3D=3D"[object =
Function]"||typeof a.call!=3D"undefined"&&typeof =
a.propertyIsEnumerable!=3D"undefined"&&!a.propertyIsEnumerable("call")))r=
eturn"function"}else return"null";else if(b=3D=3D"function"&&typeof =
a.call=3D=3D"undefined")return"object";return b},o=3Dfunction(a){return =
n(a)=3D=3D"array"},ca=3Dfunction(a){var b=3Dn(a);return =
b=3D=3D"array"||b=3D=3D"object"&&typeof =
a.length=3D=3D"number"},p=3Dfunction(a){return typeof =
a=3D=3D"string"},da=3Dfunction(a){a=3Dn(a);return a=3D=3D"object"||=0A=
a=3D=3D"array"||a=3D=3D"function"};Math.floor(Math.random()*2147483648).t=
oString(36);=0A=
var ea=3Dfunction(a){var =
b=3Dn(a);if(b=3D=3D"object"||b=3D=3D"array"){if(a.clone)return =
a.clone.call(a);b=3Db=3D=3D"array"?[]:{};for(var c in =
a)b[c]=3Dea(a[c]);return b}return a},fa=3Dfunction(a,b){var =
c=3Da.v;if(arguments.length>2){var =
d=3DArray.prototype.slice.call(arguments,2);c&&d.unshift.apply(d,c);c=3Dd=
}b=3Da.z||b;a=3Da.w||a;var e=3Db||l;d=3Dc?function(){var =
f=3DArray.prototype.slice.call(arguments);f.unshift.apply(f,c);return =
a.apply(e,f)}:function(){return =
a.apply(e,arguments)};d.v=3Dc;d.z=3Db;d.w=3Da;return =
d},ga=3DDate.now||function(){return(new Date).getTime()},=0A=
q=3Dfunction(a,b,c){ba(a,b,c)};function r(a,b){a=3DparseFloat(a);return =
isNaN(a)||a>1||a<0?b:a}function s(a,b){if(a=3D=3D"true")return =
g;if(a=3D=3D"false")return j;return b}function u(a,b){var =
c=3D/^([\w-]+\.)+[\w-]{2,}(\:[0-9]+)?$/;return c.test(a)?a:b};var =
ha=3D"pagead2.googlesyndication.com",ia=3D"googleads.g.doubleclick.net",j=
a=3D"pubads.g.doubleclick.net",ka=3D"securepubads.g.doubleclick.net",la=3D=
"partner.googleadservices.com",v=3Du("pagead2.googlesyndication.com",ha),=
ma=3Du("googleads.g.doubleclick.net",ia),na=3Du("pagead2.googlesyndicatio=
n.com",ha);u("pubads.g.doubleclick.net",ja);u("partner.googleadservices.c=
om",la);u("securepubads.g.doubleclick.net",ka);function w(a){return =
typeof =
encodeURIComponent=3D=3D"function"?encodeURIComponent(a):escape(a)}functi=
on oa(a,b,c){var =
d=3Ddocument.createElement("script");d.type=3D"text/javascript";if(b)d.on=
load=3Db;if(c)d.id=3Dc;d.src=3Da;var =
e=3Ddocument.getElementsByTagName("head")[0];if(!e)return =
j;window.setTimeout(function(){e.appendChild(d)},0);return g}function =
pa(a,b){a.google_image_requests||(a.google_image_requests=3D[]);var =
c=3Dnew Image;c.src=3Db;a.google_image_requests.push(c)}=0A=
function qa(a){if(a in ra)return ra[a];return =
ra[a]=3Dnavigator.userAgent.toLowerCase().indexOf(a)!=3D-1}var ra=3D{};=0A=
function sa(){if(navigator.plugins&&navigator.mimeTypes.length){var =
a=3Dnavigator.plugins["Shockwave Flash"];if(a&&a.description)return =
a.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s)+r/,".")}else =
if(navigator.userAgent&&navigator.userAgent.indexOf("Windows =
CE")>=3D0){a=3D3;for(var b=3D1;b;)try{b=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash."+(a+1));a++}catch(c){b=3Dh}=
return a.toString()}else if(qa("msie")&&!window.opera){b=3Dh;try{b=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(d){a=3D=0A=
0;try{b=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");a=3D6;b.AllowScriptAcces=
s=3D"always"}catch(e){if(a=3D=3D6)return a.toString()}try{b=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(f){}}if(b){a=3Db.Get=
Variable("$version").split(" ")[1];return =
a.replace(/,/g,".")}}return"0"}function x(a){var =
b=3Da.google_ad_format;if(b)return b.indexOf("_0ads")>0;return =
a.google_ad_output!=3D"html"&&a.google_num_radlinks>0}function =
y(a){return!!a&&a.indexOf("_sdo")!=3D-1}=0A=
function z(a,b){var =
c=3DMath.random();if(c<b){b=3DMath.floor(c/b*a.length);return =
a[b]}return""}var ta=3Dfunction(a){a.u_tz=3D-(new =
Date).getTimezoneOffset();a.u_his=3Dwindow.history.length;a.u_java=3Dnavi=
gator.javaEnabled();if(window.screen){a.u_h=3Dwindow.screen.height;a.u_w=3D=
window.screen.width;a.u_ah=3Dwindow.screen.availHeight;a.u_aw=3Dwindow.sc=
reen.availWidth;a.u_cd=3Dwindow.screen.colorDepth}if(navigator.plugins)a.=
u_nplug=3Dnavigator.plugins.length;if(navigator.mimeTypes)a.u_nmime=3Dnav=
igator.mimeTypes.length};var =
ua=3D{google_ad_channel:"channel",google_ad_host:"host",google_ad_host_ch=
annel:"h_ch",google_ad_host_tier_id:"ht_id",google_ad_section:"region",go=
ogle_ad_type:"ad_type",google_adtest:"adtest",google_allow_expandable_ads=
:"ea",google_alternate_ad_url:"alternate_ad_url",google_alternate_color:"=
alt_color",google_bid:"bid",google_city:"gcs",google_color_bg:"color_bg",=
google_color_border:"color_border",google_color_line:"color_line",google_=
color_link:"color_link",google_color_text:"color_text",google_color_url:"=
color_url",=0A=
google_contents:"contents",google_country:"gl",google_cust_age:"cust_age"=
,google_cust_ch:"cust_ch",google_cust_gender:"cust_gender",google_cust_id=
:"cust_id",google_cust_interests:"cust_interests",google_cust_job:"cust_j=
ob",google_cust_l:"cust_l",google_cust_lh:"cust_lh",google_cust_u_url:"cu=
st_u_url",google_disable_video_autoplay:"disable_video_autoplay",google_e=
d:"ed",google_encoding:"oe",google_feedback:"feedback_link",google_flash_=
version:"flash",google_font_face:"f",google_font_size:"fs",google_hints:"=
hints",=0A=
google_kw:"kw",google_kw_type:"kw_type",google_language:"hl",google_page_=
url:"url",google_referrer_url:"ref",google_region:"gr",google_reuse_color=
s:"reuse_colors",google_safe:"adsafe",google_tag_info:"gut",google_target=
ing:"targeting",google_ui_features:"ui",google_ui_version:"uiv",google_vi=
deo_doc_id:"video_doc_id",google_video_product_type:"video_product_type"}=
,va=3D{google_ad_client:"client",google_ad_format:"format",google_ad_outp=
ut:"output",google_ad_callback:"callback",google_ad_height:"h",google_ad_=
override:"google_ad_override",=0A=
google_ad_slot:"slotname",google_ad_width:"w",google_ctr_threshold:"ctr_t=
",google_image_size:"image_size",google_last_modified_time:"lmt",google_m=
ax_num_ads:"num_ads",google_max_radlink_len:"max_radlink_len",google_num_=
radlinks:"num_radlinks",google_num_radlinks_per_unit:"num_radlinks_per_un=
it",google_only_ads_with_video:"only_ads_with_video",google_page_location=
:"loc",google_rl_dest_url:"rl_dest_url",google_rl_filtering:"rl_filtering=
",google_rl_mode:"rl_mode",google_rt:"rt",google_skip:"skip"},wa=3D=0A=
{google_only_pyv_ads:"pyv",google_with_pyv_ads:"withpyv"};function =
xa(a,b){try{return a.top.document.URL=3D=3Db.URL}catch(c){}return =
j}function =
ya(a,b,c,d){c=3Dc||a.google_ad_width;d=3Dd||a.google_ad_height;if(xa(a,b)=
)return j;var e=3Db.documentElement;if(c&&d){var =
f=3D1,i=3D1;if(a.innerHeight){f=3Da.innerWidth;i=3Da.innerHeight}else =
if(e&&e.clientHeight){f=3De.clientWidth;i=3De.clientHeight}else =
if(b.body){f=3Db.body.clientWidth;i=3Db.body.clientHeight}if(i>2*d||f>2*c=
)return j}return g}function za(a,b){for(var c in b)a["google_"+c]=3Db[c]}=0A=
function Aa(a,b){if(!b)return a.URL;return a.referrer}function =
Ba(a,b){if(!b&&a.google_referrer_url=3D=3Dh)return"0";else =
if(b&&a.google_referrer_url=3D=3Dh)return"1";else =
if(!b&&a.google_referrer_url!=3Dh)return"2";else =
if(b&&a.google_referrer_url!=3Dh)return"3";return"4"}function =
Ca(a,b,c,d){a.page_url=3DAa(c,d);a.page_location=3Dh}function =
Da(a,b,c,d){a.page_url=3Db.google_page_url;a.page_location=3DAa(c,d)||"EM=
PTY"}=0A=
function Ea(a,b){var =
c=3D{},d=3Dya(a,b,a.google_ad_width,a.google_ad_height);c.iframing=3DBa(a=
,d);a.google_page_url?Da(c,a,b,d):Ca(c,a,b,d);c.last_modified_time=3Db.UR=
L=3D=3Dc.page_url?Date.parse(b.lastModified)/1000:h;c.referrer_url=3Dd?a.=
google_referrer_url:a.google_page_url&&a.google_referrer_url?a.google_ref=
errer_url:b.referrer;return c}function Fa(a){var =
b=3D{},c=3Da.URL.substring(a.URL.lastIndexOf("http"));b.iframing=3Dh;b.pa=
ge_url=3Dc;b.page_location=3Da.URL;b.last_modified_time=3Dh;b.referrer_ur=
l=3Dc;return b}=0A=
function Ga(a,b){b=3DHa(a,b);za(a,b)}function Ha(a,b){return =
a=3Da.google_page_url=3D=3Dh&&Ia[b.domain]?Fa(b):Ea(a,b)}var =
Ia=3D{};Ia["ad.yieldmanager.com"]=3Dg;var =
Ja=3Ddocument,Ka=3Ds("false",j),La=3Ds("false",j),Ma=3Ds("false",j);s("fa=
lse",j);var C=3Dwindow;var =
Na=3Dfunction(a,b,c){b=3Dfa(b,l,a);a=3Dwindow.onerror;window.onerror=3Db;=
try{c()}catch(d){c=3Dd.toString();var =
e=3D"";if(d.fileName)e=3Dd.fileName;var =
f=3D-1;if(d.lineNumber)f=3Dd.lineNumber;b=3Db(c,e,f);if(!b)throw =
d;}window.onerror=3Da};q("google_protectAndRun",Na);=0A=
var Pa=3Dfunction(a,b,c,d){if(Math.random()<0.01){var =
e=3DJa;a=3D["http://",v,"/pagead/gen_204","?id=3Djserror","&jscb=3D",Ka?1=
:0,"&jscd=3D",La?1:0,"&context=3D",w(a),"&msg=3D",w(b),"&file=3D",w(c),"&=
line=3D",w(d.toString()),"&url=3D",w(e.URL.substring(0,512)),"&ref=3D",w(=
e.referrer.substring(0,512))];a.push(Oa());pa(C,a.join(""))}return!Ma};q(=
"google_handleError",Pa);=0A=
var Ra=3Dfunction(a){Qa|=3Da},Qa=3D0,Oa=3Dfunction(){var =
a=3D["&client=3D",w(C.google_ad_client),"&format=3D",w(C.google_ad_format=
),"&slotname=3D",w(C.google_ad_slot),"&output=3D",w(C.google_ad_output),"=
&ad_type=3D",w(C.google_ad_type)];return a.join("")};var =
D=3D"",Ua=3Dfunction(){if(window.google_ad_frameborder=3D=3Dh)window.goog=
le_ad_frameborder=3D0;if(window.google_ad_output=3D=3Dh)window.google_ad_=
output=3D"html";if(y(window.google_ad_format)){var =
a=3Dwindow.google_ad_format.match(/^(\d+)x(\d+)_.*/);if(a){window.google_=
ad_width=3DparseInt(a[1],10);window.google_ad_height=3DparseInt(a[2],10);=
window.google_ad_output=3D"html"}}window.google_ad_format=3DSa(window.goo=
gle_ad_format,window.google_ad_output,window.google_ad_width,window.googl=
e_ad_height,window.google_ad_slot,=0A=
!!window.google_override_format);D=3Dwindow.google_ad_client||"";window.g=
oogle_ad_client=3DTa(window.google_ad_format,window.google_ad_client);Ga(=
window,document);if(window.google_num_slots_by_channel=3D=3Dh)window.goog=
le_num_slots_by_channel=3D{};if(window.google_viewed_host_channels=3D=3Dh=
)window.google_viewed_host_channels=3D{};if(window.google_num_slots_by_cl=
ient=3D=3Dh)window.google_num_slots_by_client=3D{};if(window.google_prev_=
ad_formats_by_region=3D=3Dh)window.google_prev_ad_formats_by_region=3D{};=
if(window.google_prev_ad_slotnames_by_region=3D=3D=0A=
h)window.google_prev_ad_slotnames_by_region=3D{};if(window.google_correla=
tor=3D=3Dh)window.google_correlator=3D(new =
Date).getTime();if(window.google_adslot_loaded=3D=3Dh)window.google_adslo=
t_loaded=3D{};if(window.google_adContentsBySlot=3D=3Dh)window.google_adCo=
ntentsBySlot=3D{};if(window.google_flash_version=3D=3Dh)window.google_fla=
sh_version=3Dsa();if(window.google_new_domain_checked=3D=3Dh)window.googl=
e_new_domain_checked=3D0;if(window.google_new_domain_enabled=3D=3Dh)windo=
w.google_new_domain_enabled=3D0;if(!window.google_num_ad_slots)window.goo=
gle_num_ad_slots=3D=0A=
0;if(!window.google_num_0ad_slots)window.google_num_0ad_slots=3D0;if(!win=
dow.google_num_sdo_slots)window.google_num_sdo_slots=3D0;window.google_ad=
_section=3Dwindow.google_ad_section||window.google_ad_region||"";window.g=
oogle_country=3Dwindow.google_country||window.google_gl||"";a=3D(new =
Date).getTime();if(o(window.google_color_bg))window.google_color_bg=3DE(w=
indow.google_color_bg,a);if(o(window.google_color_text))window.google_col=
or_text=3DE(window.google_color_text,a);if(o(window.google_color_link))wi=
ndow.google_color_link=3D=0A=
E(window.google_color_link,a);if(o(window.google_color_url))window.google=
_color_url=3DE(window.google_color_url,a);if(o(window.google_color_border=
))window.google_color_border=3DE(window.google_color_border,a);if(o(windo=
w.google_color_line))window.google_color_line=3DE(window.google_color_lin=
e,a)},Va=3Dfunction(a){var b;for(b in ua)a[b]=3Dh;for(b in =
va)a[b]=3Dh;for(b in =
wa)a[b]=3Dh;a.google_container_id=3Dh;a.google_eids=3Dh;a.google_ad_regio=
n=3Dh;a.google_gl=3Dh},E=3Dfunction(a,b){Ra(2);return =
a[b%a.length]},Ta=3Dfunction(a,=0A=
b){if(!b)return"";b=3Db.toLowerCase();return =
b=3Dy(a)?Wa(b):Xa(b)},Xa=3Dfunction(a){if(a&&a.substring(0,3)!=3D"ca-")a=3D=
"ca-"+a;return =
a},Wa=3Dfunction(a){if(a&&a.substring(0,9)!=3D"dist-aff-")a=3D"dist-aff-"=
+a;return =
a},Sa=3Dfunction(a,b,c,d,e,f){if(!a&&b=3D=3D"html")a=3Dc+"x"+d;return =
a=3DYa(a,e,f)?a.toLowerCase():""},Ya=3Dfunction(a,b,c){if(!a)return =
j;if(!b)return g;return c};var F=3Ddocument,G=3Dnavigator,H=3Dwindow;=0A=
function Za(){var a=3DF.cookie,b=3DMath.round((new =
Date).getTime()/1000),c=3DH.google_analytics_domain_name;c=3Dtypeof =
c=3D=3D"undefined"?$a("auto"):$a(c);var =
d=3Da.indexOf("__utma=3D"+c+".")>-1,e=3Da.indexOf("__utmb=3D"+c)>-1,f=3Da=
.indexOf("__utmc=3D"+c)>-1,i=3D{},m=3D!!H&&!!H.gaGlobal;if(d){a=3Da.split=
("__utma=3D"+c+".")[1].split(";")[0].split(".");i.sid=3De&&f?a[3]+"":m&&H=
.gaGlobal.sid?H.gaGlobal.sid:b+"";i.vid=3Da[0]+"."+a[1];i.from_cookie=3Dg=
}else{i.sid=3Dm&&H.gaGlobal.sid?H.gaGlobal.sid:b+"";i.vid=3Dm&&H.gaGlobal=
.vid?H.gaGlobal.vid:=0A=
(Math.round(Math.random()*2147483647)^ab()&2147483647)+"."+b;i.from_cooki=
e=3Dj}i.dh=3Dc;i.hid=3Dm&&H.gaGlobal.hid?H.gaGlobal.hid:Math.round(Math.r=
andom()*2147483647);return H.gaGlobal=3Di}=0A=
function ab(){var =
a=3DF.cookie?F.cookie:"",b=3DH.history.length,c,d=3D[G.appName,G.version,=
G.language?G.language:G.browserLanguage,G.platform,G.userAgent,G.javaEnab=
led()?1:0].join("");if(H.screen)d+=3DH.screen.width+"x"+H.screen.height+H=
.screen.colorDepth;else =
if(H.java){c=3Djava.awt.Toolkit.getDefaultToolkit().getScreenSize();d+=3D=
c.screen.width+"x"+c.screen.height}d+=3Da;d+=3DF.referrer?F.referrer:"";f=
or(a=3Dd.length;b>0;)d+=3Db--^a++;return bb(d)}=0A=
function bb(a){var =
b=3D1,c=3D0,d;if(!(a=3D=3Dundefined||a=3D=3D"")){b=3D0;for(d=3Da.length-1=
;d>=3D0;d--){c=3Da.charCodeAt(d);b=3D(b<<6&268435455)+c+(c<<14);c=3Db&266=
338304;b=3Dc!=3D0?b^c>>21:b}}return b}function =
$a(a){if(!a||a=3D=3D""||a=3D=3D"none")return =
1;if("auto"=3D=3Da){a=3DF.domain;if("www."=3D=3Da.substring(0,4))a=3Da.su=
bstring(4,a.length)}return bb(a.toLowerCase())};var =
cb=3D{google:1,googlegroups:1,gmail:1,googlemail:1,googleimages:1,googlep=
rint:1};function =
db(a){a=3Da.google_page_location||a.google_page_url;if(!a)return =
j;a=3Da.toString();if(a.indexOf("http://")=3D=3D0)a=3Da.substring(7,a.len=
gth);else =
if(a.indexOf("https://")=3D=3D0)a=3Da.substring(8,a.length);var =
b=3Da.indexOf("/");if(b=3D=3D-1)b=3Da.length;a=3Da.substring(0,b);a=3Da.s=
plit(".");b=3Dj;if(a.length>=3D3)b=3Da[a.length-3]in =
cb;if(a.length>=3D2)b=3Db||a[a.length-2]in cb;return b}=0A=
function eb(a,b,c){if(db(a)){a.google_new_domain_checked=3D1;return =
j}if(a.google_new_domain_checked=3D=3D0){var =
d=3DMath.random();if(d<=3Dc){c=3D"http://"+ma+"/pagead/test_domain.js";d=3D=
"script";b.write("<"+d+' =
src=3D"'+c+'"></'+d+">");a.google_new_domain_checked=3D1;return =
g}}return j}function =
fb(a){if(!db(a)&&a.google_new_domain_enabled=3D=3D1)return"http://"+ma;re=
turn"http://"+na};document.URL&&(document.URL.indexOf("?google_debug")>0|=
|document.URL.indexOf("&google_debug")>0);var gb=3Dfunction(a){return =
a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},mb=3Dfunction(a,b){if(b)return =
a.replace(hb,"&amp;").replace(ib,"&lt;").replace(jb,"&gt;").replace(kb,"&=
quot;");else{if(!lb.test(a))return =
a;if(a.indexOf("&")!=3D-1)a=3Da.replace(hb,"&amp;");if(a.indexOf("<")!=3D=
-1)a=3Da.replace(ib,"&lt;");if(a.indexOf(">")!=3D-1)a=3Da.replace(jb,"&gt=
;");if(a.indexOf('"')!=3D-1)a=3Da.replace(kb,"&quot;");return =
a}},hb=3D/&/g,ib=3D/</g,jb=3D/>/g,kb=3D/\"/g,lb=3D/[&<>\"]/,pb=3Dfunction=
(a){if(I(a,"&"))return"document"in l&&!I(a,"<")?=0A=
nb(a):ob(a);return a},nb=3Dfunction(a){var =
b=3Dl.document.createElement("a");b.innerHTML=3Da;b.normalize&&b.normaliz=
e();a=3Db.firstChild.nodeValue;b.innerHTML=3D"";return =
a},ob=3Dfunction(a){return =
a.replace(/&([^;]+);/g,function(b,c){switch(c){case "amp":return"&";case =
"lt":return"<";case "gt":return">";case =
"quot":return'"';default:if(c.charAt(0)=3D=3D"#"){c=3DNumber("0"+c.substr=
(1));if(!isNaN(c))return String.fromCharCode(c)}return =
b}})},qb=3Dfunction(a,b){for(var c=3Db.length,d=3D0;d<c;d++){var =
e=3Dc=3D=3D1?b:b.charAt(d);=0A=
if(a.charAt(0)=3D=3De&&a.charAt(a.length-1)=3D=3De)return =
a.substring(1,a.length-1)}return a},I=3Dfunction(a,b){return =
a.indexOf(b)!=3D-1},sb=3Dfunction(a,b){var =
c=3D0;a=3Dgb(String(a)).split(".");b=3Dgb(String(b)).split(".");for(var =
d=3DMath.max(a.length,b.length),e=3D0;c=3D=3D0&&e<d;e++){var =
f=3Da[e]||"",i=3Db[e]||"",m=3Dnew RegExp("(\\d*)(\\D*)","g"),t=3Dnew =
RegExp("(\\d*)(\\D*)","g");do{var =
A=3Dm.exec(f)||["","",""],B=3Dt.exec(i)||["","",""];if(A[0].length=3D=3D0=
&&B[0].length=3D=3D0)break;c=3DA[1].length=3D=3D0?0:parseInt(A[1],10);var=
 Zb=3DB[1].length=3D=3D=0A=
0?0:parseInt(B[1],10);c=3Drb(c,Zb)||rb(A[2].length=3D=3D0,B[2].length=3D=3D=
0)||rb(A[2],B[2])}while(c=3D=3D0)}return =
c},rb=3Dfunction(a,b){if(a<b)return-1;else if(a>b)return 1;return =
0};ga();var =
J=3Dfunction(a){this.u=3Da;this.i=3D[];this.p=3Dthis.h=3D0;this.d=3D[];th=
is.n=3Dj;this.A=3D""};J.prototype.s=3Dfunction(a,b){var =
c=3Dthis.u[b],d=3Dthis.i;this.u[b]=3Dfunction(e){if(e&&e.length>0){var =
f=3De.length>1?e[1].url:h;d.push([a,pb(e[0].url),f])}c(e)}};J.prototype.r=
=3Dfunction(){this.h++};J.prototype.o=3Dfunction(){if(!this.n){oa("http:/=
/"+v+"/pagead/osd.js");this.n=3Dg}};=0A=
J.prototype.j=3Dfunction(a){if(this.h>0)for(var =
b=3Ddocument.getElementsByTagName("iframe"),c=3D0;c<b.length;c++)b.item(c=
).name=3D=3D"google_ads_frame"&&a(b.item(c),b.item(c).src)};=0A=
J.prototype.k=3Dfunction(a){var b=3Dthis.i;if(b.length>0)for(var =
c=3Ddocument.getElementsByTagName("a"),d=3Dfunction(A,B){return =
A.innerHTML.indexOf(B)>0},e=3D0;e<c.length;e++)for(var =
f=3D0;f<b.length;f++)if(c.item(e).href=3D=3Db[f][1]){var =
i=3Dc.item(e).parentNode;if(b[f][2])for(var =
m=3Di,t=3D0;t<4;t++){if(d(m,b[f][2])){i=3Dm;break}m=3Dm.parentNode}a(i,b[=
f][0]);b.splice(f,1);break}};J.prototype.e=3Dfunction(a){this.k(a);this.j=
(a)};J.prototype.b=3Dfunction(a){this.p=3Da};J.prototype.g=3Dfunction(){r=
eturn this.p};=0A=
J.prototype.t=3Dfunction(a){this.A=3Da};J.prototype.f=3Dfunction(){return=
 =
this.i.length+this.h};J.prototype.c=3Dfunction(a){this.d=3Da};J.prototype=
.q=3Dfunction(a,b){if(this.d.length>0){for(var =
c=3D0;c<this.d.length;c++)if(this.d[c]=3D=3Da)if(a=3D=3D"js")this.s(b,"go=
ogle_ad_request_done");else a=3D=3D"html"&&this.r();this.o()}};var =
tb=3Dfunction(){window.__google_ad_urls||(window.__google_ad_urls=3Dnew =
J(window));return =
window.__google_ad_urls};q("Goog_AdSense_getAdAdapterInstance",tb);q("Goo=
g_AdSense_OsdAdapter",J);=0A=
q("Goog_AdSense_OsdAdapter.prototype.numBlocks",J.prototype.f);q("Goog_Ad=
Sense_OsdAdapter.prototype.findBlocks",J.prototype.e);q("Goog_AdSense_Osd=
Adapter.prototype.getOsdMode",J.prototype.g);var =
ub=3Dfunction(a,b,c){if(a.forEach)a.forEach(b,c);else =
if(Array.forEach)Array.forEach(a,b,c);else for(var =
d=3Da.length,e=3Dp(a)?a.split(""):a,f=3D0;f<d;f++)f in =
e&&b.call(c,e[f],f,a)},vb=3Dfunction(a){if(o(a))return =
a.concat();else{for(var =
b=3D[],c=3D0,d=3Da.length;c<d;c++)b[c]=3Da[c];return b}};var =
K=3Dfunction(a,b){this.x=3Da!=3D=3Dundefined?a:0;this.y=3Db!=3D=3Dundefin=
ed?b:0};K.prototype.clone=3Dfunction(){return new =
K(this.x,this.y)};K.prototype.toString=3Dfunction(){return"("+this.x+", =
"+this.y+")"};var =
L=3Dfunction(a,b){this.width=3Da;this.height=3Db};L.prototype.clone=3Dfun=
ction(){return new =
L(this.width,this.height)};L.prototype.toString=3Dfunction(){return"("+th=
is.width+" x =
"+this.height+")"};L.prototype.ceil=3Dfunction(){this.width=3DMath.ceil(t=
his.width);this.height=3DMath.ceil(this.height);return =
this};L.prototype.floor=3Dfunction(){this.width=3DMath.floor(this.width);=
this.height=3DMath.floor(this.height);return this};=0A=
L.prototype.round=3Dfunction(){this.width=3DMath.round(this.width);this.h=
eight=3DMath.round(this.height);return =
this};L.prototype.scale=3Dfunction(a){this.width*=3Da;this.height*=3Da;re=
turn this};var wb=3Dfunction(a,b,c){for(var d in =
a)b.call(c,a[d],d,a)};var =
M,xb,N,yb,zb,Ab,Bb,Cb,Db,Eb,Fb=3Dfunction(){return =
l.navigator?l.navigator.userAgent:h},O=3Dfunction(){return =
l.navigator},Gb=3Dfunction(){Ab=3Dzb=3Dyb=3DN=3Dxb=3DM=3Dj;var =
a;if(a=3DFb()){var =
b=3DO();M=3Da.indexOf("Opera")=3D=3D0;xb=3D!M&&a.indexOf("MSIE")!=3D-1;yb=
=3D(N=3D!M&&a.indexOf("WebKit")!=3D-1)&&a.indexOf("Mobile")!=3D-1;Ab=3D(z=
b=3D!M&&!N&&b.product=3D=3D"Gecko")&&b.vendor=3D=3D"Camino"}};Gb();=0A=
var P=3DM,Q=3Dxb,Hb=3Dzb,R=3DN,Ib=3Dyb,Jb=3Dfunction(){var =
a=3DO();return =
a&&a.platform||""},Kb=3DJb(),Lb=3Dfunction(){Bb=3DI(Kb,"Mac");Cb=3DI(Kb,"=
Win");Db=3DI(Kb,"Linux");Eb=3D!!O()&&I(O().appVersion||"","X11")};Lb();=0A=
var Mb=3DBb,Nb=3DCb,Ob=3DDb,Pb=3Dfunction(){var =
a=3D"",b;if(P&&l.opera){a=3Dl.opera.version;a=3Dtypeof =
a=3D=3D"function"?a():a}else{if(Hb)b=3D/rv\:([^\);]+)(\)|;)/;else =
if(Q)b=3D/MSIE\s+([^\);]+)(\)|;)/;else =
if(R)b=3D/WebKit\/(\S+)/;if(b)a=3D(a=3Db.exec(Fb()))?a[1]:""}return =
a},Qb=3DPb(),Rb=3D{},S=3Dfunction(a){return =
Rb[a]||(Rb[a]=3Dsb(Qb,a)>=3D0)};var T;var Sb=3Dfunction(a){return =
p(a)?document.getElementById(a):a},Tb=3DSb,Vb=3Dfunction(a,b){wb(b,functi=
on(c,d){if(d=3D=3D"style")a.style.cssText=3Dc;else =
if(d=3D=3D"class")a.className=3Dc;else =
if(d=3D=3D"for")a.htmlFor=3Dc;else if(d in =
Ub)a.setAttribute(Ub[d],c);else =
a[d]=3Dc})},Ub=3D{cellpadding:"cellPadding",cellspacing:"cellSpacing",col=
span:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"w=
idth",usemap:"useMap",frameborder:"frameBorder",type:"type"},Wb=3Dfunctio=
n(a){var b=3Da.document;if(R&&!S("500")&&!Ib){if(typeof a.innerHeight=3D=3D=0A=
"undefined")a=3Dwindow;b=3Da.innerHeight;var =
c=3Da.document.documentElement.scrollHeight;if(a=3D=3Da.top)if(c<b)b-=3D1=
5;return new =
L(a.innerWidth,b)}a=3Db.compatMode=3D=3D"CSS1Compat"&&(!P||P&&S("9.50"))?=
b.documentElement:b.body;return new =
L(a.clientWidth,a.clientHeight)},Xb=3Dfunction(a){a=3D!R&&a.compatMode=3D=
=3D"CSS1Compat"?a.documentElement:a.body;return new =
K(a.scrollLeft,a.scrollTop)},$b=3Dfunction(){return =
Yb(document,arguments)},Yb=3Dfunction(a,b){var =
c=3Db[0],d=3Db[1];if(Q&&d&&(d.name||d.type)){c=3D["<",c];d.name&&c.push('=
 name=3D"',=0A=
mb(d.name),'"');if(d.type){c.push(' =
type=3D"',mb(d.type),'"');d=3Dea(d);delete =
d.type}c.push(">");c=3Dc.join("")}var =
e=3Da.createElement(c);if(d)if(p(d))e.className=3Dd;else =
Vb(e,d);if(b.length>2){function =
f(i){if(i)e.appendChild(p(i)?a.createTextNode(i):i)}for(d=3D2;d<b.length;=
d++){c=3Db[d];ca(c)&&!(da(c)&&c.nodeType>0)?ub(ac(c)?vb(c):c,f):f(c)}}ret=
urn e},bc=3Dfunction(a,b){a.appendChild(b)},cc=3Dfunction(a){return =
a&&a.parentNode?a.parentNode.removeChild(a):h},dc=3Dfunction(a,b){var =
c=3Db.parentNode;c&&c.replaceChild(a,=0A=
b)},ec=3DR&&S("522"),fc=3Dfunction(a,b){if(typeof =
a.contains!=3D"undefined"&&!ec&&b.nodeType=3D=3D1)return =
a=3D=3Db||a.contains(b);if(typeof =
a.compareDocumentPosition!=3D"undefined")return =
a=3D=3Db||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=3Db;)b=3Db.=
parentNode;return b=3D=3Da},U=3Dfunction(a){return =
a.nodeType=3D=3D9?a:a.ownerDocument||a.document},ac=3Dfunction(a){if(a&&t=
ypeof a.length=3D=3D"number")if(da(a))return typeof =
a.item=3D=3D"function"||typeof a.item=3D=3D"string";else =
if(n(a)=3D=3D"function")return typeof a.item=3D=3D"function";return j},=0A=
V=3Dfunction(a){this.a=3Da||l.document||document};V.prototype.createEleme=
nt=3Dfunction(a){return =
this.a.createElement(a)};V.prototype.createTextNode=3Dfunction(a){return =
this.a.createTextNode(a)};V.prototype.m=3Dfunction(){return =
this.a.compatMode=3D=3D"CSS1Compat"};V.prototype.l=3Dfunction(){return =
Xb(this.a)};V.prototype.appendChild=3Dbc;V.prototype.removeNode=3Dcc;V.pr=
ototype.replaceNode=3Ddc;V.prototype.contains=3Dfc;var =
gc,hc,ic,jc,kc,lc,mc=3Dfunction(){lc=3Dkc=3Djc=3Dic=3Dhc=3Dgc=3Dj;var =
a=3DFb();if(a)if(a.indexOf("Firefox")!=3D-1)gc=3Dg;else =
if(a.indexOf("Camino")!=3D-1)hc=3Dg;else =
if(a.indexOf("iPhone")!=3D-1||a.indexOf("iPod")!=3D-1)ic=3Dg;else =
if(a.indexOf("Android")!=3D-1)jc=3Dg;else =
if(a.indexOf("Chrome")!=3D-1)kc=3Dg;else =
if(a.indexOf("Safari")!=3D-1)lc=3Dg};mc();var nc=3Dfunction(a,b){var =
c=3DU(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(a=3Dc.defaul=
tView.getComputedStyle(a,""))return a[b];return =
h},W=3Dfunction(a,b){return =
nc(a,b)||(a.currentStyle?a.currentStyle[b]:h)||a.style[b]},oc=3Dfunction(=
a){a=3Da?a.nodeType=3D=3D9?a:U(a):document;if(Q&&!(a?new =
V(U(a)):T||(T=3Dnew V)).m())return a.body;return =
a.documentElement},pc=3Dfunction(a){var =
b=3Da.getBoundingClientRect();if(Q){a=3Da.ownerDocument;b.left-=3Da.docum=
entElement.clientLeft+a.body.clientLeft;b.top-=3Da.documentElement.client=
Top+=0A=
a.body.clientTop}return b},qc=3Dfunction(a){if(Q)return =
a.offsetParent;var =
b=3DU(a),c=3DW(a,"position"),d=3Dc=3D=3D"fixed"||c=3D=3D"absolute";for(a=3D=
a.parentNode;a&&a!=3Db;a=3Da.parentNode){c=3DW(a,"position");d=3Dd&&c=3D=3D=
"static"&&a!=3Db.documentElement&&a!=3Db.body;if(!d&&(a.scrollWidth>a.cli=
entWidth||a.scrollHeight>a.clientHeight||c=3D=3D"fixed"||c=3D=3D"absolute=
"))return a}return h},rc=3Dfunction(a){var =
b,c=3DU(a),d=3DW(a,"position"),e=3DHb&&c.getBoxObjectFor&&!a.getBoundingC=
lientRect&&d=3D=3D"absolute"&&(b=3Dc.getBoxObjectFor(a))&&(b.screenX<0||=0A=
b.screenY<0),f=3Dnew K(0,0),i=3Doc(c);if(a=3D=3Di)return =
f;if(a.getBoundingClientRect){b=3Dpc(a);a=3D(c?new V(U(c)):T||(T=3Dnew =
V)).l();f.x=3Db.left+a.x;f.y=3Db.top+a.y}else =
if(c.getBoxObjectFor&&!e){b=3Dc.getBoxObjectFor(a);a=3Dc.getBoxObjectFor(=
i);f.x=3Db.screenX-a.screenX;f.y=3Db.screenY-a.screenY}else{b=3Da;do{f.x+=
=3Db.offsetLeft;f.y+=3Db.offsetTop;if(b!=3Da){f.x+=3Db.clientLeft||0;f.y+=
=3Db.clientTop||0}if(R&&W(b,"position")=3D=3D"fixed"){f.x+=3Dc.body.scrol=
lLeft;f.y+=3Dc.body.scrollTop;break}b=3Db.offsetParent}while(b&&b!=3Da);i=
f(P||R&&d=3D=3D"absolute")f.y-=3D=0A=
c.body.offsetTop;for(b=3Da;(b=3Dqc(b))&&b!=3Dc.body&&b!=3Di;){f.x-=3Db.sc=
rollLeft;if(!P||b.tagName!=3D"TR")f.y-=3Db.scrollTop}}return =
f},sc=3Dfunction(a,b,c,d){if(/^\d+px?$/.test(b))return =
parseInt(b,10);else{var =
e=3Da.style[c],f=3Da.runtimeStyle[c];a.runtimeStyle[c]=3Da.currentStyle[c=
];a.style[c]=3Db;b=3Da.style[d];a.style[c]=3De;a.runtimeStyle[c]=3Df;retu=
rn b}},tc=3Dfunction(a){var =
b=3DU(a),c=3D"";if(b.createTextRange){c=3Db.body.createTextRange();c.move=
ToElementText(a);c=3Dc.queryCommandValue("FontName")}if(!c){c=3DW(a,"font=
Family");if(P&&=0A=
Ob)c=3Dc.replace(/ =
\[[^\]]*\]/,"")}a=3Dc.split(",");if(a.length>1)c=3Da[0];return =
qb(c,"\"'")},uc=3Dfunction(a){return(a=3Da.match(/[^\d]+$/))&&a[0]||h},vc=
=3D{cm:1,"in":1,mm:1,pc:1,pt:1},wc=3D{em:1,ex:1},xc=3Dfunction(a){var =
b=3DW(a,"fontSize"),c=3Duc(b);if(b&&"px"=3D=3Dc)return =
parseInt(b,10);if(Q)if(c in vc)return sc(a,b,"left","pixelLeft");else =
if(a.parentNode&&a.parentNode.nodeType=3D=3D1&&c in =
wc){a=3Da.parentNode;c=3DW(a,"fontSize");return =
sc(a,b=3D=3Dc?"1em":b,"left","pixelLeft")}c=3D$b("span",{style:"visibilit=
y:hidden;position:absolute;line-height:0;padding:0;margin:0;border:0;heig=
ht:1em;"});=0A=
bc(a,c);b=3Dc.offsetHeight;cc(c);return b};var X=3D{};function =
yc(a){if(a=3D=3D1)return g;return!X[a]}function =
Y(a,b){if(a)if(b=3D=3D1)if(X[b])X[b]+=3D","+a;else X[b]=3Da;else =
X[b]=3Da}function zc(){var a=3D[];for(var b in X)a.push(X[b]);return =
a.join(",")}function Ac(a,b){if(a&&a instanceof Array)for(var =
c=3D0;c<a.length;c++)a[c]&&typeof a[c]=3D=3D"string"&&Y(a[c],b)}var =
Z=3Dj;=0A=
function Bc(a,b){var =
c=3D"script";Z=3DCc(a,b);if(!Z)a.google_allow_expandable_ads=3Dj;var =
d=3D!Dc();Z&&d&&b.write("<"+c+' =
src=3D"http://'+v+'/pagead/expansion_embed.js"></'+c+">");a=3Deb(a,b,r("1=
",0.01));(d=3Dd||a)&&qa("msie")&&!window.opera?b.write("<"+c+' =
src=3D"http://'+v+'/pagead/render_ads.js"></'+c+">"):b.write("<"+c+'>goog=
le_protectAndRun("ads_core.google_render_ad", google_handleError, =
google_render_ad);</'+c+">")}function $(a){return a!=3Dh?'"'+a+'"':'""'}=0A=
function Ec(a){var b=3D"google_unique_id";if(a[b])++a[b];else =
a[b]=3D1;return a[b]}var Fc=3Dfunction(a,b){var =
c=3Db.slice(-1);c=3Dc=3D=3D"?"||c=3D=3D"#"?"":"&";b=3D[b];for(var d in =
a){var e=3Da[d];if(e||e=3D=3D=3D0||e=3D=3D=3Dj){if(typeof =
e=3D=3D"boolean")e=3De?1:0;b.push(c,d,"=3D",w(e));c=3D"&"}}return =
b.join("")};function Gc(){var =
a=3DQ&&S("6"),b=3DHb&&S("1.8.1"),c=3DR&&S("525");if(Nb&&(a||b||c))return =
g;else if(Mb&&(c||b))return g;else if(Ob&&b)return g;return j}=0A=
function Dc(){return(typeof =
ExpandableAdSlotFactory=3D=3D"function"||typeof =
ExpandableAdSlotFactory=3D=3D"object")&&typeof =
ExpandableAdSlotFactory.createIframe=3D=3D"function"}function =
Cc(a,b){if(a.google_allow_expandable_ads=3D=3D=3Dj||!b.body||a.google_ad_=
output!=3D"html"||ya(a,b)||!Hc(a)||isNaN(a.google_ad_height)||isNaN(a.goo=
gle_ad_width)||!Gc())return j;return g}function Hc(a){var =
b=3Da.google_ad_format;if(y(b))return =
j;if(x(a)&&!(b=3D=3D"468x15_0ads_al"))return j;return g}=0A=
function Ic(){var =
a;if(C.google_ad_output=3D=3D"html"&&!(x(C)||y(C.google_ad_format))&&yc(0=
)){a=3D["6083035","6083034"];a=3Dz(a,r("0",0));Y(a,0)}return =
a=3D=3D"6083035"}function =
Jc(a,b){if((a.google_unique_id||0)=3D=3D0&&a.google_ad_output=3D=3D"html"=
&&document.body&&typeof =
b.body.getBoundingClientRect=3D=3D"function")return =
z(["36812001","36812002"],r("0.01",0));return""}=0A=
function Kc(a,b){var =
c=3D"";if(a.google_num_ad_slots=3D=3D0){if(!(x(a)||y(a.google_ad_format))=
)if(b=3D=3D"html")c=3Dz(["36815001","36815002"],r("0.006",0));else =
if(b=3D=3D"js")c=3Dz(["36815003","36815004"],r("0.006",0));if(c=3D=3D""&&=
(b=3D=3D"html"||b=3D=3D"js"))c=3Dz(["36813005","36813006"],r("0.008",0))}=
return c}=0A=
function Lc(a,b){b.t(a);switch(a){case =
"36815004":b.b(1);b.c(["js"]);break;case =
"36815002":b.b(1);b.c(["html"]);break;case =
"36813006":b.b(0);b.c(["html","js"]);break}}function =
Mc(a){if(a.body)try{return Wb(window)}catch(b){return new =
L(-12245933,-12245933)}else return new L(-1,-1)}=0A=
function Nc(a,b,c,d){var =
e=3DEc(a);c=3DFc({ifi:e},c);c=3Dc.substring(0,1992);c=3Dc.replace(/%\w?$/=
,"");var =
f=3D"script";if((a.google_ad_output=3D=3D"js"||a.google_ad_output=3D=3D"j=
son_html")&&(a.google_ad_request_done||a.google_radlink_request_done))b.w=
rite("<"+f+' language=3D"JavaScript1.1" =
src=3D'+$(k(c))+"></"+f+">");else =
if(a.google_ad_output=3D=3D"html")if(Z&&Dc()){b=3Da.google_container_id||=
d||h;a["google_expandable_ad_slot"+e]=3DExpandableAdSlotFactory.createIfr=
ame("google_ads_frame"+e,k(c),a.google_ad_width,a.google_ad_height,=0A=
b)}else{c=3D'<iframe name=3D"google_ads_frame" =
width=3D'+$(a.google_ad_width)+" height=3D"+$(a.google_ad_height)+" =
frameborder=3D"+$(a.google_ad_frameborder)+" src=3D"+$(k(c))+' =
marginwidth=3D"0" marginheight=3D"0" vspace=3D"0" hspace=3D"0" =
allowtransparency=3D"true" =
scrolling=3D"no"></iframe>';a.google_container_id?Oc(a.google_container_i=
d,b,c):b.write(c)}}function Pc(a){Va(a)}function Qc(a,b){if(!Rc())return =
j;var =
c=3DIc();a=3DSc(a,b);c=3Dfb(window)+Tc(a.google_ad_format,c);window.googl=
e_ad_url=3DFc(a,c);return g}=0A=
var Wc=3Dfunction(a){a.dt=3Daa;var =
b=3Dwindow.google_prev_ad_formats_by_region,c=3Dwindow.google_ad_section,=
d=3Dwindow.google_ad_format,e=3Dwindow.google_ad_slot;if(b[c])if(!y(d)){a=
.prev_fmts=3Db[c];if(window.google_num_slots_by_client.length>1)a.slot=3D=
window.google_num_slots_by_client[D]}var =
f=3Dwindow.google_prev_ad_slotnames_by_region;if(f[c])a.prev_slotnames=3D=
f[c].toLowerCase();if(d){if(!y(d))if(b[c])b[c]+=3D","+d;else =
b[c]=3Dd}else if(e)if(f[c])f[c]+=3D","+e;else =
f[c]=3De;a.correlator=3Dwindow.google_correlator;if(window.google_new_dom=
ain_checked=3D=3D=0A=
1&&window.google_new_domain_enabled=3D=3D0)a.dblk=3D1;if(window.google_ad=
_channel){b=3Dwindow.google_num_slots_by_channel;c=3D"";d=3Dwindow.google=
_ad_channel.split(Uc);for(e=3D0;e<d.length;e++){f=3Dd[e];if(b[f])c+=3Df+"=
+";else =
b[f]=3D1}a.pv_ch=3Dc}if(window.google_ad_host_channel){b=3DVc(window.goog=
le_ad_host_channel,window.google_viewed_host_channels);a.pv_h_ch=3Db}if(K=
a)a.jscb=3D1;if(La)a.jscd=3D1;a.frm=3Dwindow.google_iframing;b=3DZa();a.g=
a_vid=3Db.vid;a.ga_sid=3Db.sid;a.ga_hid=3Db.hid;a.ga_fc=3Db.from_cookie;a=
.ga_wpids=3Dwindow.google_analytics_uacct},=0A=
Xc=3Dfunction(a,b,c){var d;if(b)if(typeof =
a.getBoundingClientRect=3D=3D"function"){a=3Da.getBoundingClientRect();d=3D=
{x:a.left,y:a.top}}else{d=3D{};d.x=3D"-252738";d.y=3D"-252738"}else =
try{d=3Drc(a)}catch(e){d=3D{};d.x=3D"-252738";d.y=3D"-252738"}if(d){c.adx=
=3Dd.x;c.ady=3Dd.y}},Yc=3Dfunction(a){var =
b=3DMc(document);if(b){a.biw=3Db.width;a.bih=3Db.height}};=0A=
function Vc(a,b){var c=3Da.split("|");a=3D-1;for(var =
d=3D[],e=3D0;e<c.length;e++){var =
f=3Dc[e].split(Uc);b[e]||(b[e]=3D{});for(var =
i=3D"",m=3D0;m<f.length;m++){var =
t=3Df[m];if(!(t=3D=3D""))if(b[e][t])i+=3D"+"+t;else =
b[e][t]=3D1}i=3Di.slice(1);d[e]=3Di;if(i!=3D"")a=3De}b=3D"";if(a>-1){for(=
e=3D0;e<a;e++)b+=3Dd[e]+"|";b+=3Dd[a]}return b}=0A=
function Zc(){var =
a=3Dtb(),b=3Dwindow.google_enable_osd,c=3D"";if(b=3D=3D=3Dg){c=3D"3681300=
6";Lc(c,a)}else =
if(b!=3D=3Dj&&yc(0)){c=3Dz(["68120011","68120021","68120031","68120041"],=
r("0",0));if(c=3D=3D""){c=3DJc(window,document);if(c=3D=3D""){c=3DKc(wind=
ow,window.google_ad_output);c!=3D""&&Lc(c,a)}}}Y(c,0);var d=3Dj;var =
e=3Db=3Dj;switch(c){case "68120031":e=3Dg;case "68120021":b=3Dg;case =
"68120041":d=3Dg;break;case =
"36812002":if(!window.google_atf_included){window.google_atf_included=3Dg=
;oa("http://"+v+"/pagead/atf.js")}break}var f;=0A=
if(d){var =
i=3D"google_temp_span";f=3Dwindow.google_container_id&&Tb(window.google_c=
ontainer_id)||Tb(i);if(!f&&!window.google_container_id){document.write("<=
span =
id=3D"+i+"></span>");f=3DTb(i)}}c=3Dj;c=3Db?Qc(f,e):Qc();f&&f.id=3D=3Di&&=
cc(f);if(c){a.q(window.google_ad_output,window.google_ad_url);Nc(window,d=
ocument,window.google_ad_url);Pc(window)}}var $c=3Dfunction(a){var =
b;for(b in va)a[va[b]]=3Dwindow[b];for(b in =
ua)a[ua[b]]=3Dwindow[b];for(b in =
wa)a[wa[b]]=3Dwindow[b]},ad=3Dfunction(a){Ac(window.google_eids,1);a.eid=3D=
zc()};=0A=
function bd(a,b,c,d){a=3DPa(a,b,c,d);Bc(window,document);return =
a}function cd(){Ua()}function dd(a){var =
b=3D{};a=3Da.split("?");a=3Da[a.length-1].split("&");for(var =
c=3D0;c<a.length;c++){var =
d=3Da[c].split("=3D");if(d[0])try{b[d[0].toLowerCase()]=3Dd.length>1?wind=
ow.decodeURIComponent?decodeURIComponent(d[1].replace(/\+/g," =
")):unescape(d[1]):""}catch(e){}}return b}function ed(){var =
a=3Dwindow,b=3Ddd(document.URL);if(b.google_ad_override){a.google_ad_over=
ride=3Db.google_ad_override;a.google_adtest=3D"on"}}=0A=
function =
Oc(a,b,c){if(a)if((a=3Db.getElementById(a))&&c&&c.length!=3D""){a.style.v=
isibility=3D"visible";a.innerHTML=3Dc}}=0A=
var Tc=3Dfunction(a,b){return =
a=3Dy(a)?"/pagead/sdo?":b?"/pagead/render_iframe_ads.html#":"/pagead/ads?=
"},fd=3Dfunction(a,b){b.dff=3Dtc(a);b.dfs=3Dxc(a)},Rc=3Dfunction(){var =
a=3Dwindow.google_prev_ad_formats_by_region,b=3Dwindow.google_prev_ad_slo=
tnames_by_region,c=3Dwindow.google_ad_section;if(y(window.google_ad_forma=
t)){window.google_num_sdo_slots+=3D1;if(window.google_num_sdo_slots>4)ret=
urn j}else =
if(x(window)){window.google_num_0ad_slots+=3D1;if(window.google_num_0ad_s=
lots>3)return j}else{window.google_num_ad_slots+=3D=0A=
1;if(window.google_num_slots_to_rotate){Ra(1);a[c]=3Dh;b[c]=3Dh;if(window=
.google_num_slot_to_show=3D=3Dh)window.google_num_slot_to_show=3D(new =
Date).getTime()%window.google_num_slots_to_rotate+1;if(window.google_num_=
slot_to_show!=3Dwindow.google_num_ad_slots)return j}else =
if(window.google_num_ad_slots>6&&c=3D=3D"")return =
j}a=3Dwindow.google_num_slots_by_client;if(a[D])a[D]+=3D1;else{a[D]=3D1;a=
.length+=3D1}return g},Sc=3Dfunction(a,b){var =
c=3D{};$c(c);Wc(c);ta(c);if(a){fd(a,c);Xc(a,!!b,c)}Yc(c);ad(c);c.fu=3DQa;=
return c},Uc=3D/[+, ]/;=0A=
window.google_render_ad=3DZc;var =
gd=3D["30143070","30143071","30143075"],hd=3Dtypeof =
window.postMessage=3D=3D"function"||typeof =
window.postMessage=3D=3D"object"||typeof =
document.postMessage=3D=3D"function",jd=3Dfunction(a,b){typeof =
A1_googleCreateSlot=3D=3D"function"?A1_googleCreateSlot(a.google_ad_clien=
t):id(a,b)},ld=3Dfunction(){if(!kd())return j;return =
g},md=3Dfunction(a){if(y(a.google_ad_format))return j;var =
b=3Da.google_ad_output;if(b&&b!=3D"html")return =
j;a=3Da.google_ad_client;if(typeof =
a!=3D"string"||a.substring(0,4)!=3D"pub-"&&a.substring(0,7)!=3D"ca-pub-")=
return j;=0A=
return g},od=3Dfunction(a){if(typeof =
a.google_a1_eid=3D=3D"string")return a.google_a1_eid;var =
b=3Dr("0.001",0);a.google_a1_eid=3Dnd(gd,b);return =
a.google_a1_eid},id=3Dfunction(a,b){if(!a.google_included_a1_script){var =
c=3D"script",d=3D"/pagead/show_ads_sra3.js?v\x3d1";b.write("<"+c+' =
src=3D"http://'+v+d+'"></'+c+">");a.google_included_a1_script=3Dg}},kd=3D=
function(){if(Q&&S("8"))return j;return hd||!R},nd=3Dfunction(a,b){var =
c=3DMath.random();if(c<b){b=3DMath.floor(c/b*a.length);return =
a[b]}return""};function =
pd(){ed();Na("show_ads.google_init_globals",bd,cd);Bc(window,document)}fu=
nction qd(){if(!ld(window)||!md(window))pd();else =
if(Ma&&window.google_use_a1=3D=3D=3Dg)jd(window,document);else{var =
a=3Dod(window);if(a){Y(a,0);window.google_allow_expandable_ads=3Dj}!a||a=3D=
=3D"30143070"?pd():jd(window,document)}}Na("show_ads.main",Pa,qd);=0A=
})()=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://feeds.feedburner.com/archiwatch?format=sigpro&openLinks=new&displayDate=true&dateFormat=d/M&nItems=4&displayTitle=false

document.write('<div class=3D"feedburnerFeedBlock" =
id=3D"archiwatchv4l5cco258cm7dc2dmouaivm2k">');=0A=
document.write('<ul>');=0A=
document.write('<li><span class=3D"headline"><a =
href=3D"http://www.archiwatch.it/2009/08/22/politica-e-ricostruzione.html=
" target=3D"_blank" >Politica e ricostruzione \u2026</a></span>');=0A=
document.write('<p class=3D"date">22/8</p>');=0A=
document.write('</li>');=0A=
document.write('<li><span class=3D"headline"><a =
href=3D"http://www.archiwatch.it/2009/08/13/il-sogno-di-una-casa-di-un-la=
voro-di-una-famiglia.html" target=3D"_blank" >Il sogno di una casa =
\u2026 di un lavoro \u2026 di una famiglia \u2026</a></span>');=0A=
document.write('<p class=3D"date">13/8</p>');=0A=
document.write('</li>');=0A=
document.write('<li><span class=3D"headline"><a =
href=3D"http://www.archiwatch.it/2009/08/04/ceci-nest-pas-une-eglise.html=
" target=3D"_blank" >Ceci n\u2019est pas une eglise \u2026</a></span>');=0A=
document.write('<p class=3D"date">4/8</p>');=0A=
document.write('</li>');=0A=
document.write('<li><span class=3D"headline"><a =
href=3D"http://www.archiwatch.it/2009/08/04/a-marziale-desiderio-capomast=
ro.html" target=3D"_blank" >A Marziale Desiderio \u2026 capomastro =
\u2026</a></span>');=0A=
document.write('<p class=3D"date">4/8</p>');=0A=
document.write('</li>');=0A=
document.write('</ul>');=0A=
document.write(' <div id=3D"creditfooter"><a =
href=3D"http://www.feedburner.com" target=3D"_blank"><img =
src=3D"http://www.feedburner.com/fb/images/buzzboost-pwrd.gif" =
alt=3D"Headlines by FeedBurner" style=3D"border:0"/></a></div>');=0A=
document.write('</div>');=0A=

------=_NextPart_000_003E_01CA2691.AC4F9310--

