From: "Saved by Windows Internet Explorer 7"
Subject: 
Date: Fri, 11 Jul 2008 23:00:08 -0400
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01C8E3A9.DD946FD0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C8E3A9.DD946FD0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.villagevoice.com/content/printVersion/166552

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<STYLE>.PrintBody .ContentPrint {
	FONT-FAMILY: georgia,serif
}
.ContentPrint H1 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.ContentPrint H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; font-wieght: normal
}
.ContentPrint H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 16px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.ContentPrint H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: =
12px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; PADDING-TOP: 0px
}
.ContentPrint H5 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: =
10px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
.ContentPrint H6 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: =
9px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; PADDING-TOP: 0px
}
.ContentPrint .ContentSidebar {
	BORDER-RIGHT: #666 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #666 1px =
solid; PADDING-LEFT: 10px; FLOAT: left; PADDING-BOTTOM: 10px; MARGIN: =
10px 10px 10px 0px; BORDER-LEFT: #666 1px solid; WIDTH: 150px; =
PADDING-TOP: 10px; BORDER-BOTTOM: #666 1px solid
}
.ContentPrint .ContentSidebar UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.ContentPrint .ContentSidebar LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.ContentPrint .ContentSidebar IMG {
	BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium =
none; BORDER-BOTTOM: medium none
}
.ContentSidebar H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: =
12px; PADDING-BOTTOM: 0px; MARGIN: 10px 0px 0px; PADDING-TOP: 0px
}
.ContentSidebar A {
	FONT-SIZE: 12px
}
</STYLE>

<META content=3D"MSHTML 6.00.6000.16681" name=3DGENERATOR></HEAD>
<BODY onload=3D"javascript: window.print();">
<DIV class=3DContentPrint>
<H1>Letters</H1>
<H2></H2>
<H3></H3>
<H4>published: September 25, 2001</H4><FONT face=3D"georgia, times, =
arial"=20
color=3D#b33315 size=3D+1><B>OVERDRAWN</B></FONT>=20
<STYLE>.PrintBody .ContentPrint {
	FONT-SIZE: 14px; MARGIN: 10px; LINE-HEIGHT: 20px
}
.PrintBody .ContentPrint .ContentSidebar {
	FONT-SIZE: 12px; LINE-HEIGHT: 16px
}
.PrintBody .ContentPrint H1 {
	MARGIN: 10px 0px
}
.PrintBody .ContentPrint H2 {
	MARGIN: 10px 0px
}
</STYLE>

<SCRIPT language=3DJavaScript>=0A=
        <!--=0A=
        //configuration=0A=
=0A=
        OAS_url =3D 'http://oascentral.villagevoice.com/';=0A=
        OAS_sitepage =3D 'www.villagevoice.com/specials/content';=0A=
        OAS_listpos =3D 'Top,Middle';=0A=
=0A=
        OAS_query =3D '';=0A=
        OAS_target =3D '_top';=0A=
        //end of configuration=0A=
        //-->=0A=
        </SCRIPT>
<!-- e/LoadJS -->
<SCRIPT language=3Djavascript =
src=3D"http://www.villagevoice.com/load/js/js.js"=20
type=3Dtext/javascript></SCRIPT>
<!-- End e/LoadJS -->
<DIV class=3DTopBanner>
<DIV class=3DAds id=3DTop>
<SCRIPT language=3DJavaScript>=0A=
        <!--=0A=
        OAS_AD('Top');=0A=
        //-->=0A=
    </SCRIPT>
</DIV></DIV>
<DIV class=3DMiddleAd style=3D"FLOAT: right">
<DIV class=3DAds id=3DMiddle>
<SCRIPT language=3DJavaScript>=0A=
        <!--=0A=
        OAS_AD('Middle');=0A=
        //-->=0A=
    </SCRIPT>
</DIV></DIV>
<DIV class=3DPrintBody>Alisa Solomon may be a bit too pessimistic about =
the likely=20
effect of the World Trade Center attacks on U.S. attitudes toward the=20
Arab-Israeli conflict ["<A=20
href=3D"http://www.villagevoice.com/issues/0138/solomon.php">Fuel for =
the=20
Fire</A>," September 25]. I share Solomon's distaste for Israel's =
methods, but I=20
don't agree that they will inevitably become more palatable to the =
American=20
public as we grapple with our own terrorist problem.=20
<P>It may appear to some people that we have taken a hit in part because =
of our=20
support of Israel's behavior in the occupied territories, and it would =
be a=20
grave error for Israel's leaders to behave as if they have just been =
written a=20
blank check.=20
<P align=3Dright><B>Matthew Greenfield</B> <BR>Brooklyn=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>SURREAL=20
WORLD</B></FONT>=20
<P>Thanks for Richard Goldstein's article "<A=20
href=3D"http://www.villagevoice.com/issues/0138/goldstein.php">That's=20
Entertainment!</A>" [September 25]. It encapsulates what many of us felt =
but=20
could not quite formulate while watching the disaster on TV. As I watch =
the=20
preparations for war becoming more and more insane, I cannot help but be =

relieved that there are a few calls for reason amidst the madness. Long =
live=20
the<I> Voice</I> of sanity.=20
<P align=3Dright><B>Sarah Enany </B><BR>Cairo, Egypt=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>APOCALYPSE=20
NOW</B></FONT>=20
<P>Re Richard Goldstein's "That's Entertainment!": When I saw the World =
Trade=20
Center towers fall, I also thought not only of <I>Independence Day</I>, =
but=20
<I>Mars Attacks!</I>, which was released a few months later. Both films =
used=20
special effects to "destroy" nearly every famed landmark on earth. =
Neither film=20
offers any worthwhile critical basis for the virtual apocalypses they=20
engineered. Rather, they (along with countless other Hollywood =
extravaganzas)=20
are pure spectacle: cinema and computer technology reveling in its own=20
narcissism. When those once unbelievable images were made real on =
September 11,=20
I couldn't help but think that the attacks were comments on America's =
own=20
decadence. It seemed that the terrorists, striking from a tradition in =
which=20
filmic images are profane, were saying to us: If this is all you can =
think to do=20
with your wealth and fabulous technology=97create images of your own=20
annihilation=97then we will show you the real thing.=20
<P align=3Dright><B>Hugh Siegel</B> <BR>Manhattan=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>PERSONAL=20
EFFECTS</B></FONT>=20
<P>I have just read "<A=20
href=3D"http://www.villagevoice.com/issues/0138/gonnerman.php">City of =
Ghosts</A>"=20
[September 25] by Tom Robbins and Jennifer Gonnerman. Although I wish =
that=20
circumstances had never required such an article to be written, it was =
an=20
extremely well-done piece that really helped me, a non-New Yorker, =
understand=20
more of the personal side of the tragedy. In all of the television news =
and=20
endless replaying of the attacks, it is all too easy to forget the =
smaller=20
things, that the victims were real people just like us=97they read =
books, they ate=20
doughnuts, they had families and friends. My thoughts and prayers are =
with you=20
all.=20
<P align=3Dright><B>Matthew Reames </B><BR>Roanoke, Virginia=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>CIVIL=20
WAR</B></FONT>=20
<P>Nat Hentoff's piece about a possible return to McCarthyism was right =
on the=20
money ["<A =
href=3D"http://www.villagevoice.com/issues/0138/hentoff.php">Liberty Is=20
a Fragile Thing</A>," September 25]. But I would add that the loss of =
freedom=20
comes not only from the government, but from the everyday actions of =
people.=20
I've already heard stories of people refusing to eat at Afghan =
restaurants and I=20
worry about my Pakistani and Afghani friends, especially the ones that =
were born=20
and grew up in this country. Bigotry doesn't concern itself with details =
like=20
that. I do hope the Left can put together a united front against =
government=20
intrusion and public ignorance. I certainly plan on being on the front =
lines of=20
that war to protect our civil liberties and First Amendment rights.=20
<P align=3Dright><B>Leslie Anderson</B> <BR>Mamaroneck, New York=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>COME=20
TOGETHER</B></FONT>=20
<P>"<A href=3D"http://www.villagevoice.com/issues/0138/ridgeway.php">The =
New World=20
Order</A>" [September 25] by James Ridgeway and Camelia E. Fard was an =
amazing=20
article. I would normally consider myself the antithesis of a typical<I> =
Village=20
Voice</I> reader, but the article's points on what could await us in =
central=20
Asia were dead-on. Not only was the piece well-written, but it seems =
that this=20
tragedy is drawing Americans from <I>all</I> sides of the political =
spectrum=20
together.=20
<P align=3Dright><B>Jan Doernte </B><BR>Berlin, Germany=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>TOWER DE=20
FORCE</B></FONT>=20
<P>The photo by Andr=E9 Souroujon on the September 25 cover of the =
<I>Voice</I> is=20
absolutely superb. I found it haunting and appropriate.=20
<P align=3Dright><B>Barry Flannery</B> <BR>Stuart, Florida=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>BRIGHT LIGHTS,=20
BIG CITY</B></FONT>=20
<P>During the year that I have been living and studying in Manhattan, I =
have=20
made many a negative comment about New Yorkers; their rudeness, their=20
individualism, their selfishness. Since Tuesday, September 11, 8:45 =
a.m., I have=20
taken them all back.=20
<P>I saw immense dignity in the stunned eyes of thousands of people as =
they fled=20
downtown Manhattan. I saw them walk with outstanding discipline, so that =
what=20
could have been a fatal stampede turned out to be a remarkably quiet =
procession=20
that stretched out for miles. I saw pure humanity pour out into the =
streets as=20
strangers handed out glasses of fresh water to those whose throats had =
been=20
parched by the smoke. I will always remember the man who stood a few =
blocks away=20
from the demolished World Trade Center bearing a sign that said, "Free =
Hugs."=20
<P>As a foreigner, the first thing you notice when arriving in the city =
is that=20
everything about New Yorkers is enormous: their buildings, their cars, =
their=20
portions at the restaurants. . . . I did not know until last week that =
their=20
hearts are enormous too. I shall never look at my fellow commuters the =
same way.=20

<P align=3Dright><B>Marie Martin</B> <BR>Manhattan=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>CURRENT=20
AFFAIR</B></FONT>=20
<P>In his article "<A=20
href=3D"http://villagevoice.com/issues/0137/hentoff.php">WBAI =3D =
Anti-Free-Speech=20
Radio</A>" [September 18], Nat Hentoff repeats the incorrect assertion =
of public=20
broadcasting newspaper<I> Current</I> that public relations firm =
Westhill=20
Partners worked for tobacco company Brown &amp; Williamson during its =
dispute=20
with whistle-blower Jeffrey Wigand.=20
<P>Brown &amp; Williamson has never been a client of or in any way =
associated=20
with Westhill Partners. In fact, Westhill Partners was not even founded =
until=20
1998, well after Mr. Wigand's allegations against Big Tobacco became =
public.=20
<P>John Scanlon, who joined Westhill in October 2000 and worked with us =
until=20
his death in May 2001, did work for a time as a consultant to Brown =
&amp;=20
Williamson several years before joining Westhill. To imply, however, =
that we=20
were involved in any way with the campaign to cast aspersions against =
Mr. Wigand=20
is wholly incorrect.=20
<P><I>Current</I> has acknowledged its error. Mr. Hentoff should do the =
same.=20
<P align=3Dright><B>Edward J. Reilly </B><BR>Founder, President &amp; =
CEO=20
<BR>Westhill Partners=20
<P><I>Nat Hentoff replies:</I> Current<I> did not acknowledge its error =
until=20
September 14, and my column appeared on September 12. I join</I> =
Current<I> in=20
correcting the record.</I>=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>PUCKER=20
UP</B></FONT>=20
<P>Bravo to Lynn Yaeger and her assault on the vacuous, self-important, =
and=20
totally worthless fashion media ["<A=20
href=3D"http://villagevoice.com/issues/0136/yaeger.php">Lifestyles of =
the Rich and=20
Heinous</A>," September 11]. I worked as a photo retoucher at Cond=E9 =
Nast for=20
over a year and was also nauseated by this self-perpetuating sham. I =
toiled in a=20
windowless sub-basement below Times Square, airbrushing away pimples, =
lines,=20
pores, and arm hair. The trade secret is to reduce most of the crow's =
feet, eye=20
bags and laugh lines without completely removing them so as to fool the =
reader=20
into believing it's a natural look. One issue had the gall to place a =
headline=20
reading "Lasers, Liposuction, and Lifts: Has Beauty Become Too =
Artificial?"=20
right next to a picture of an actress I spent days Photoshopping into a =
replica=20
of plastic perfection!=20
<P>If any readers out there ever wonder how these starlets continue to =
look so=20
good as the years take their toll on the rest of us, the truth is they =
don't.=20
Teams of retouchers are kept running around the clock so fashion mags =
can keep=20
foisting this dishonesty on the public. The most hideous aspect of this =
whole=20
charade is that the women who helm these publications would be =
considered=20
irrelevant by the very standards they promote. How much do they get paid =
for=20
diminishing themselves and real women? I have no idea, but in the smoke =
and=20
mirrors world of fashion, integrity is not an accessory these assholes =
will be=20
promoting anytime soon.=20
<P align=3Dright><B>Stephen Pierce</B> <BR>Hackensack, New Jersey=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315=20
size=3D+1><B>REELING</B></FONT>=20
<P>Michael Atkinson's odd put-down of Pauline Kael's writing and =
supposed=20
influence in "<A =
href=3D"http://villagevoice.com/issues/0137/atkinson.php">As the=20
Lights Go Down</A>" [September 18] is as hyperinflated in tone and =
agenda as he=20
thinks Kael's own work is. He posits her as virtually unassailable, or =
in any=20
event unassailed (he must be ignorant of Andrew Sarris's and Renata =
Adler's=20
widely circulated attacks on everything from Kael's prose style to the =
tiniest=20
aspects of her taste). Then he attempts to topple her on the issues of, =
well,=20
her style and taste. But those of us who found her work so affecting =
respond as=20
much to its passion and wit as to her means of expressing them in a =
given piece.=20
For all its flaws, Kael's collected writing will remain essential =
reading for=20
lovers of film, both in these lean cinematic times and in whatever =
others lie=20
ahead. It will remain so because she demonstrated that independent =
thought can=20
be the means to great pleasure, be it in analyzing a movie, another =
artwork, a=20
politician, or a life. As she once said, "We read critics for the =
perceptions,=20
for what they tell us that we didn't fully grasp when we saw the work. =
The=20
judgments we can usually make for ourselves."=20
<P align=3Dright><B>Barrett Whitener</B> <BR>Washington, D.C.=20
<P><I>Michael Atkinson replies: That Kael had vocal detractors wasn't =
the=20
question; it's how few there were, amid the din of praise. As for her =
"style and=20
taste," since when are these not challengeable issues for a critic? =
(Both, for=20
Kael, had serious limitations.) A paragon of "independent thought," =
perhaps, but=20
hardly the nation's most serious and searching critic.</I>=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>FOOD FOR=20
THOUGHT</B></FONT>=20
<P>For some inexplicable reason, each fall Cynthia Cotts grows obsessed =
about my=20
dining habits [<A =
href=3D"http://villagevoice.com/issues/0137/cotts.php">Press=20
Clips</A>, September 18]. In an October 2000 column about my =
depredations as an=20
editor, she criticized me for being late to a dinner party. This week, =
at a=20
moment when surely she ought to be concerned with stories of much =
greater world=20
significance, she's alarmed that I opted out of a local awards dinner. =
Must be=20
some New York thing, I guess. I just hope she never finds out that I =
usually=20
microwave an Uncle Ben's Rice Bowl when I'm at home, or else she'd =
really=20
disapprove.=20
<P>As to the departure of our former political columnist, Jonetta Rose =
Barras, I=20
can only say that I've never accepted a resignation as quickly as I did =
hers.=20
The two of us never could agree on the appropriate level of =
small-mindedness,=20
wrongheadedness, and unfairness that belonged in her column. But if =
she's as=20
talented as Cotts makes her out to be, then surely we can expect the<I> =
Village=20
Voice</I> to quickly hire Barras as a Washington correspondent, the =
better to=20
keep tabs on me and <I>Washington City Paper</I>.=20
<P align=3Dright><B>Howard Witt</B> <BR>Editor <BR><I>Washington City =
Paper </I>
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315 =
size=3D+1><B>CHAKA=20
CON</B></FONT>=20
<P>Re Richard Goldstein's "<A=20
href=3D"http://villagevoice.com/issues/0137/goldstein.php">Jay and =
Silent Bob=20
Strike Backlash</A>" [September 18]: Lighten up. Yes, homosexuals are a=20
persecuted minority. Yes, they are the butt of many jokes in cinema. =
Kevin Smith=20
does indeed make jokes at the expense of said group. But within the same =
movie=20
are jokes about blacks (Chris Rock's character is named Chaka), law =
officers,=20
women, and many more I will not bother to mention.=20
<P>A comedy by definition makes fun of people for the purpose of a =
joke=97an easy=20
laugh. If you look at Smith's track record you will see that he is one =
of the=20
few directors out there who does show respect to homosexuals. His film=20
<I>Chasing Amy</I> is a fine example. Jason Lee's awakening to his =
sexuality is=20
a minor but important event in that film. Additionally, Smith's<I> Green =

Arrow</I> comic book (published by DC Comics) has a gay character who is =

portrayed as just another guy. His sexual preference is not a major =
issue, and=20
is rarely mentioned. A comprehensive look at Smith's work clearly shows =
that he=20
is not hateful toward any group.=20
<P align=3Dright><B>Gene Hoyle</B> <BR>Greenville, South Carolina=20
<P><I>Richard Goldstein replies: Anyone who sees </I>Jay and Silent Bob =
Strike=20
Back<I> can attest to its obsession with homosexuality. As for =
</I>Chasing=20
Amy<I>, any film that features a woman whose lesbianism stems from a =
traumatic=20
relationship with a guy=97and who ends up with a guy=97is not =
pro</I>-<I>gay. It's a=20
straight man's dyke film.</I>=20
<P>
<HR align=3Dcenter width=3D150 noShade SIZE=3D1>

<P><FONT face=3D"georgia, times, arial" color=3D#b33315=20
size=3D+1><B>CORRECTIONS</B></FONT>=20
<P>=95 In last week's article "For Whom the Bell Tolls," on the missing =
and dead=20
in the World Trade Center attacks, John Hynes was mistakenly listed =
among those=20
unaccounted for. The missing person is his brother, Thomas Hynes. The =
<I>Voice=20
</I>regrets the error.=20
<P>=95 The September 18 <I>Voice </I>cover photo, "The Bastards," was =
miscredited.=20
The photo was taken by Todd Rengel.</P></DIV></DIV><!-- NA () - =
192.168.62.215 - [0.1514] --></BODY></HTML>

------=_NextPart_000_0000_01C8E3A9.DD946FD0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.villagevoice.com/load/js/js.js

/* --- Start prototype.js --- */=0A=
=0A=
/*  Prototype JavaScript framework, version 1.6.0=0A=
 *  (c) 2005-2007 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://www.prototypejs.org/=0A=
 *=0A=
 =
*------------------------------------------------------------------------=
--*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.6.0',=0A=
=0A=
  Browser: {=0A=
    IE:     !!(window.attachEvent && !window.opera),=0A=
    Opera:  !!window.opera,=0A=
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,=0A=
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && =
navigator.userAgent.indexOf('KHTML') =3D=3D -1,=0A=
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)=0A=
  },=0A=
=0A=
  BrowserFeatures: {=0A=
    XPath: !!document.evaluate,=0A=
    ElementExtensions: !!window.HTMLElement,=0A=
    SpecificElementExtensions:=0A=
      document.createElement('div').__proto__ &&=0A=
      document.createElement('div').__proto__ !=3D=3D=0A=
        document.createElement('form').__proto__=0A=
  },=0A=
=0A=
  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',=0A=
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,=0A=
=0A=
  emptyFunction: function() { },=0A=
  K: function(x) { return x }=0A=
};=0A=
=0A=
if (Prototype.Browser.MobileSafari)=0A=
  Prototype.BrowserFeatures.SpecificElementExtensions =3D false;=0A=
=0A=
if (Prototype.Browser.WebKit)=0A=
  Prototype.BrowserFeatures.XPath =3D false;=0A=
=0A=
/* Based on Alex Arnell's inheritance implementation. */=0A=
var Class =3D {=0A=
  create: function() {=0A=
    var parent =3D null, properties =3D $A(arguments);=0A=
    if (Object.isFunction(properties[0]))=0A=
      parent =3D properties.shift();=0A=
=0A=
    function klass() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
=0A=
    Object.extend(klass, Class.Methods);=0A=
    klass.superclass =3D parent;=0A=
    klass.subclasses =3D [];=0A=
=0A=
    if (parent) {=0A=
      var subclass =3D function() { };=0A=
      subclass.prototype =3D parent.prototype;=0A=
      klass.prototype =3D new subclass;=0A=
      parent.subclasses.push(klass);=0A=
    }=0A=
=0A=
    for (var i =3D 0; i < properties.length; i++)=0A=
      klass.addMethods(properties[i]);=0A=
=0A=
    if (!klass.prototype.initialize)=0A=
      klass.prototype.initialize =3D Prototype.emptyFunction;=0A=
=0A=
    klass.prototype.constructor =3D klass;=0A=
=0A=
    return klass;=0A=
  }=0A=
};=0A=
=0A=
Class.Methods =3D {=0A=
  addMethods: function(source) {=0A=
    var ancestor   =3D this.superclass && this.superclass.prototype;=0A=
    var properties =3D Object.keys(source);=0A=
=0A=
    if (!Object.keys({ toString: true }).length)=0A=
      properties.push("toString", "valueOf");=0A=
=0A=
    for (var i =3D 0, length =3D properties.length; i < length; i++) {=0A=
      var property =3D properties[i], value =3D source[property];=0A=
      if (ancestor && Object.isFunction(value) &&=0A=
          value.argumentNames().first() =3D=3D "$super") {=0A=
        var method =3D value, value =3D Object.extend((function(m) {=0A=
          return function() { return ancestor[m].apply(this, arguments) =
};=0A=
        })(property).wrap(method), {=0A=
          valueOf:  function() { return method },=0A=
          toString: function() { return method.toString() }=0A=
        });=0A=
      }=0A=
      this.prototype[property] =3D value;=0A=
    }=0A=
=0A=
    return this;=0A=
  }=0A=
};=0A=
=0A=
var Abstract =3D { };=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
  for (var property in source)=0A=
    destination[property] =3D source[property];=0A=
  return destination;=0A=
};=0A=
=0A=
Object.extend(Object, {=0A=
  inspect: function(object) {=0A=
    try {=0A=
      if (object =3D=3D=3D undefined) return 'undefined';=0A=
      if (object =3D=3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : object.toString();=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  },=0A=
=0A=
  toJSON: function(object) {=0A=
    var type =3D typeof object;=0A=
    switch (type) {=0A=
      case 'undefined':=0A=
      case 'function':=0A=
      case 'unknown': return;=0A=
      case 'boolean': return object.toString();=0A=
    }=0A=
=0A=
    if (object =3D=3D=3D null) return 'null';=0A=
    if (object.toJSON) return object.toJSON();=0A=
    if (Object.isElement(object)) return;=0A=
=0A=
    var results =3D [];=0A=
    for (var property in object) {=0A=
      var value =3D Object.toJSON(object[property]);=0A=
      if (value !=3D=3D undefined)=0A=
        results.push(property.toJSON() + ': ' + value);=0A=
    }=0A=
=0A=
    return '{' + results.join(', ') + '}';=0A=
  },=0A=
=0A=
  toQueryString: function(object) {=0A=
    return $H(object).toQueryString();=0A=
  },=0A=
=0A=
  toHTML: function(object) {=0A=
    return object && object.toHTML ? object.toHTML() : =
String.interpret(object);=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=
  isElement: function(object) {=0A=
    return object && object.nodeType =3D=3D 1;=0A=
  },=0A=
=0A=
  isArray: function(object) {=0A=
    return object && object.constructor =3D=3D=3D Array;=0A=
  },=0A=
=0A=
  isHash: function(object) {=0A=
    return object instanceof Hash;=0A=
  },=0A=
=0A=
  isFunction: function(object) {=0A=
    return typeof object =3D=3D "function";=0A=
  },=0A=
=0A=
  isString: function(object) {=0A=
    return typeof object =3D=3D "string";=0A=
  },=0A=
=0A=
  isNumber: function(object) {=0A=
    return typeof object =3D=3D "number";=0A=
  },=0A=
=0A=
  isUndefined: function(object) {=0A=
    return typeof object =3D=3D "undefined";=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Function.prototype, {=0A=
  argumentNames: function() {=0A=
    var names =3D =
this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").inv=
oke("strip");=0A=
    return names.length =3D=3D 1 && !names[0] ? [] : names;=0A=
  },=0A=
=0A=
  bind: function() {=0A=
    if (arguments.length < 2 && arguments[0] =3D=3D=3D undefined) return =
this;=0A=
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();=0A=
    return function() {=0A=
      return __method.apply(object, args.concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  bindAsEventListener: function() {=0A=
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();=0A=
    return function(event) {=0A=
      return __method.apply(object, [event || =
window.event].concat(args));=0A=
    }=0A=
  },=0A=
=0A=
  curry: function() {=0A=
    if (!arguments.length) return this;=0A=
    var __method =3D this, args =3D $A(arguments);=0A=
    return function() {=0A=
      return __method.apply(this, args.concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  delay: function() {=0A=
    var __method =3D this, args =3D $A(arguments), timeout =3D =
args.shift() * 1000;=0A=
    return window.setTimeout(function() {=0A=
      return __method.apply(__method, args);=0A=
    }, timeout);=0A=
  },=0A=
=0A=
  wrap: function(wrapper) {=0A=
    var __method =3D this;=0A=
    return function() {=0A=
      return wrapper.apply(this, =
[__method.bind(this)].concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=0A=
  methodize: function() {=0A=
    if (this._methodized) return this._methodized;=0A=
    var __method =3D this;=0A=
    return this._methodized =3D function() {=0A=
      return __method.apply(null, [this].concat($A(arguments)));=0A=
    };=0A=
  }=0A=
});=0A=
=0A=
Function.prototype.defer =3D Function.prototype.delay.curry(0.01);=0A=
=0A=
Date.prototype.toJSON =3D function() {=0A=
  return '"' + this.getUTCFullYear() + '-' +=0A=
    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +=0A=
    this.getUTCDate().toPaddedString(2) + 'T' +=0A=
    this.getUTCHours().toPaddedString(2) + ':' +=0A=
    this.getUTCMinutes().toPaddedString(2) + ':' +=0A=
    this.getUTCSeconds().toPaddedString(2) + 'Z"';=0A=
};=0A=
=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=
RegExp.prototype.match =3D RegExp.prototype.test;=0A=
=0A=
RegExp.escape =3D function(str) {=0A=
  return String(str).replace(/([.*+?^=3D!:${}()|[\]\/\\])/g, '\\$1');=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create({=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  execute: function() {=0A=
    this.callback(this);=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.execute();=0A=
      } finally {=0A=
        this.currentlyExecuting =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
});=0A=
Object.extend(String, {=0A=
  interpret: function(value) {=0A=
    return value =3D=3D null ? '' : String(value);=0A=
  },=0A=
  specialChar: {=0A=
    '\b': '\\b',=0A=
    '\t': '\\t',=0A=
    '\n': '\\n',=0A=
    '\f': '\\f',=0A=
    '\r': '\\r',=0A=
    '\\': '\\\\'=0A=
  }=0A=
});=0A=
=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 String(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 : =
String(this);=0A=
  },=0A=
=0A=
  strip: function() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  },=0A=
=0A=
  stripTags: function() {=0A=
    return this.replace(/<\/?[^>]+>/gi, '');=0A=
  },=0A=
=0A=
  stripScripts: function() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  },=0A=
=0A=
  extractScripts: function() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A=
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  },=0A=
=0A=
  evalScripts: function() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  },=0A=
=0A=
  escapeHTML: function() {=0A=
    var self =3D arguments.callee;=0A=
    self.text.data =3D this;=0A=
    return self.div.innerHTML;=0A=
  },=0A=
=0A=
  unescapeHTML: function() {=0A=
    var div =3D new Element('div');=0A=
    div.innerHTML =3D this.stripTags();=0A=
    return div.childNodes[0] ? (div.childNodes.length > 1 ?=0A=
      $A(div.childNodes).inject('', function(memo, node) { return =
memo+node.nodeValue }) :=0A=
      div.childNodes[0].nodeValue) : '';=0A=
  },=0A=
=0A=
  toQueryParams: function(separator) {=0A=
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
    if (!match) return { };=0A=
=0A=
    return match[1].split(separator || '&').inject({ }, function(hash, =
pair) {=0A=
      if ((pair =3D pair.split('=3D'))[0]) {=0A=
        var key =3D decodeURIComponent(pair.shift());=0A=
        var value =3D pair.length > 1 ? pair.join('=3D') : pair[0];=0A=
        if (value !=3D undefined) value =3D decodeURIComponent(value);=0A=
=0A=
        if (key in hash) {=0A=
          if (!Object.isArray(hash[key])) hash[key] =3D [hash[key]];=0A=
          hash[key].push(value);=0A=
        }=0A=
        else hash[key] =3D value;=0A=
      }=0A=
      return hash;=0A=
    });=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.split('');=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this.slice(0, this.length - 1) +=0A=
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
  },=0A=
=0A=
  times: function(count) {=0A=
    return count < 1 ? '' : new Array(count + 1).join(this);=0A=
  },=0A=
=0A=
  camelize: function() {=0A=
    var parts =3D this.split('-'), len =3D parts.length;=0A=
    if (len =3D=3D 1) return parts[0];=0A=
=0A=
    var camelized =3D this.charAt(0) =3D=3D '-'=0A=
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A=
      : parts[0];=0A=
=0A=
    for (var i =3D 1; i < len; i++)=0A=
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);=0A=
=0A=
    return camelized;=0A=
  },=0A=
=0A=
  capitalize: function() {=0A=
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();=0A=
  },=0A=
=0A=
  underscore: function() {=0A=
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();=0A=
  },=0A=
=0A=
  dasherize: function() {=0A=
    return this.gsub(/_/,'-');=0A=
  },=0A=
=0A=
  inspect: function(useDoubleQuotes) {=0A=
    var escapedString =3D this.gsub(/[\x00-\x1f\\]/, function(match) {=0A=
      var character =3D String.specialChar[match[0]];=0A=
      return character ? character : '\\u00' + =
match[0].charCodeAt().toPaddedString(2, 16);=0A=
    });=0A=
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') =
+ '"';=0A=
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return this.inspect(true);=0A=
  },=0A=
=0A=
  unfilterJSON: function(filter) {=0A=
    return this.sub(filter || Prototype.JSONFilter, '#{1}');=0A=
  },=0A=
=0A=
  isJSON: function() {=0A=
    var str =3D this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');=0A=
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);=0A=
  },=0A=
=0A=
  evalJSON: function(sanitize) {=0A=
    var json =3D this.unfilterJSON();=0A=
    try {=0A=
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');=0A=
    } catch (e) { }=0A=
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());=0A=
  },=0A=
=0A=
  include: function(pattern) {=0A=
    return this.indexOf(pattern) > -1;=0A=
  },=0A=
=0A=
  startsWith: function(pattern) {=0A=
    return this.indexOf(pattern) =3D=3D=3D 0;=0A=
  },=0A=
=0A=
  endsWith: function(pattern) {=0A=
    var d =3D this.length - pattern.length;=0A=
    return d >=3D 0 && this.lastIndexOf(pattern) =3D=3D=3D d;=0A=
  },=0A=
=0A=
  empty: function() {=0A=
    return this =3D=3D '';=0A=
  },=0A=
=0A=
  blank: function() {=0A=
    return /^\s*$/.test(this);=0A=
  },=0A=
=0A=
  interpolate: function(object, pattern) {=0A=
    return new Template(this, pattern).evaluate(object);=0A=
  }=0A=
});=0A=
=0A=
if (Prototype.Browser.WebKit || Prototype.Browser.IE) =
Object.extend(String.prototype, {=0A=
  escapeHTML: function() {=0A=
    return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');=0A=
  },=0A=
  unescapeHTML: function() {=0A=
    return =
this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');=0A=
  }=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
  if (Object.isFunction(replacement)) return replacement;=0A=
  var template =3D new Template(replacement);=0A=
  return function(match) { return template.evaluate(match) };=0A=
};=0A=
=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
=0A=
Object.extend(String.prototype.escapeHTML, {=0A=
  div:  document.createElement('div'),=0A=
  text: document.createTextNode('')=0A=
});=0A=
=0A=
with (String.prototype.escapeHTML) div.appendChild(text);=0A=
=0A=
var Template =3D Class.create({=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    if (Object.isFunction(object.toTemplateReplacements))=0A=
      object =3D object.toTemplateReplacements();=0A=
=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      if (object =3D=3D null) return '';=0A=
=0A=
      var before =3D match[1] || '';=0A=
      if (before =3D=3D '\\') return match[2];=0A=
=0A=
      var ctx =3D object, expr =3D match[3];=0A=
      var pattern =3D /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match =
=3D pattern.exec(expr);=0A=
      if (match =3D=3D null) return before;=0A=
=0A=
      while (match !=3D null) {=0A=
        var comp =3D match[1].startsWith('[') ? match[2].gsub('\\\\]', =
']') : match[1];=0A=
        ctx =3D ctx[comp];=0A=
        if (null =3D=3D ctx || '' =3D=3D match[3]) break;=0A=
        expr =3D expr.substring('[' =3D=3D match[3] ? match[1].length : =
match[0].length);=0A=
        match =3D pattern.exec(expr);=0A=
      }=0A=
=0A=
      return before + String.interpret(ctx);=0A=
    }.bind(this));=0A=
  }=0A=
});=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
=0A=
var $break =3D { };=0A=
=0A=
var Enumerable =3D {=0A=
  each: function(iterator, context) {=0A=
    var index =3D 0;=0A=
    iterator =3D iterator.bind(context);=0A=
    try {=0A=
      this._each(function(value) {=0A=
        iterator(value, index++);=0A=
      });=0A=
    } catch (e) {=0A=
      if (e !=3D $break) throw e;=0A=
    }=0A=
    return this;=0A=
  },=0A=
=0A=
  eachSlice: function(number, iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var index =3D -number, slices =3D [], array =3D this.toArray();=0A=
    while ((index +=3D number) < array.length)=0A=
      slices.push(array.slice(index, index+number));=0A=
    return slices.collect(iterator, context);=0A=
  },=0A=
=0A=
  all: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result =3D true;=0A=
    this.each(function(value, index) {=0A=
      result =3D result && !!iterator(value, index);=0A=
      if (!result) throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  any: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result =3D false;=0A=
    this.each(function(value, index) {=0A=
      if (result =3D !!iterator(value, index))=0A=
        throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  collect: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push(iterator(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  detect: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index)) {=0A=
        result =3D value;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  findAll: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  grep: function(filter, iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var results =3D [];=0A=
=0A=
    if (Object.isString(filter))=0A=
      filter =3D new RegExp(filter);=0A=
=0A=
    this.each(function(value, index) {=0A=
      if (filter.match(value))=0A=
        results.push(iterator(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  include: function(object) {=0A=
    if (Object.isFunction(this.indexOf))=0A=
      if (this.indexOf(object) !=3D -1) return true;=0A=
=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, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    this.each(function(value, index) {=0A=
      memo =3D iterator(memo, value, index);=0A=
    });=0A=
    return memo;=0A=
  },=0A=
=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, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D iterator(value, index);=0A=
      if (result =3D=3D undefined || value >=3D result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  min: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D iterator(value, index);=0A=
      if (result =3D=3D undefined || value < result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  partition: function(iterator, context) {=0A=
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;=0A=
    var trues =3D [], falses =3D [];=0A=
    this.each(function(value, index) {=0A=
      (iterator(value, index) ?=0A=
        trues : falses).push(value);=0A=
    });=0A=
    return [trues, falses];=0A=
  },=0A=
=0A=
  pluck: function(property) {=0A=
    var results =3D [];=0A=
    this.each(function(value) {=0A=
      results.push(value[property]);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  reject: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (!iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  sortBy: function(iterator, context) {=0A=
    iterator =3D iterator.bind(context);=0A=
    return this.map(function(value, index) {=0A=
      return {value: value, criteria: iterator(value, index)};=0A=
    }).sort(function(left, right) {=0A=
      var a =3D left.criteria, b =3D right.criteria;=0A=
      return a < b ? -1 : a > b ? 1 : 0;=0A=
    }).pluck('value');=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.map();=0A=
  },=0A=
=0A=
  zip: function() {=0A=
    var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
    if (Object.isFunction(args.last()))=0A=
      iterator =3D args.pop();=0A=
=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=
  filter:  Enumerable.findAll,=0A=
  member:  Enumerable.include,=0A=
  entries: Enumerable.toArray,=0A=
  every:   Enumerable.all,=0A=
  some:    Enumerable.any=0A=
});=0A=
function $A(iterable) {=0A=
  if (!iterable) return [];=0A=
  if (iterable.toArray) return iterable.toArray();=0A=
  var length =3D iterable.length, results =3D new Array(length);=0A=
  while (length--) results[length] =3D iterable[length];=0A=
  return results;=0A=
}=0A=
=0A=
if (Prototype.Browser.WebKit) {=0A=
  function $A(iterable) {=0A=
    if (!iterable) return [];=0A=
    if (!(Object.isFunction(iterable) && iterable =3D=3D '[object =
NodeList]') &&=0A=
        iterable.toArray) return iterable.toArray();=0A=
    var length =3D iterable.length, results =3D new Array(length);=0A=
    while (length--) results[length] =3D iterable[length];=0A=
    return results;=0A=
  }=0A=
}=0A=
=0A=
Array.from =3D $A;=0A=
=0A=
Object.extend(Array.prototype, Enumerable);=0A=
=0A=
if (!Array.prototype._reverse) 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(Object.isArray(value) ?=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=
  reverse: function(inline) {=0A=
    return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
  },=0A=
=0A=
  reduce: function() {=0A=
    return this.length > 1 ? this : this[0];=0A=
  },=0A=
=0A=
  uniq: function(sorted) {=0A=
    return this.inject([], function(array, value, index) {=0A=
      if (0 =3D=3D index || (sorted ? array.last() !=3D value : =
!array.include(value)))=0A=
        array.push(value);=0A=
      return array;=0A=
    });=0A=
  },=0A=
=0A=
  intersect: function(array) {=0A=
    return this.uniq().findAll(function(item) {=0A=
      return array.detect(function(value) { return item =3D=3D=3D value =
});=0A=
    });=0A=
  },=0A=
=0A=
  clone: function() {=0A=
    return [].concat(this);=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    var results =3D [];=0A=
    this.each(function(object) {=0A=
      var value =3D Object.toJSON(object);=0A=
      if (value !=3D=3D undefined) results.push(value);=0A=
    });=0A=
    return '[' + results.join(', ') + ']';=0A=
  }=0A=
});=0A=
=0A=
// use native browser JS 1.6 implementation if available=0A=
if (Object.isFunction(Array.prototype.forEach))=0A=
  Array.prototype._each =3D Array.prototype.forEach;=0A=
=0A=
if (!Array.prototype.indexOf) Array.prototype.indexOf =3D function(item, =
i) {=0A=
  i || (i =3D 0);=0A=
  var length =3D this.length;=0A=
  if (i < 0) i =3D length + i;=0A=
  for (; i < length; i++)=0A=
    if (this[i] =3D=3D=3D item) return i;=0A=
  return -1;=0A=
};=0A=
=0A=
if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf =3D =
function(item, i) {=0A=
  i =3D isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;=0A=
  var n =3D this.slice(0, i).reverse().indexOf(item);=0A=
  return (n < 0) ? n : i - n - 1;=0A=
};=0A=
=0A=
Array.prototype.toArray =3D Array.prototype.clone;=0A=
=0A=
function $w(string) {=0A=
  if (!Object.isString(string)) return [];=0A=
  string =3D string.strip();=0A=
  return string ? string.split(/\s+/) : [];=0A=
}=0A=
=0A=
if (Prototype.Browser.Opera){=0A=
  Array.prototype.concat =3D function() {=0A=
    var array =3D [];=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      if (Object.isArray(arguments[i])) {=0A=
        for (var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)=0A=
          array.push(arguments[i][j]);=0A=
      } else {=0A=
        array.push(arguments[i]);=0A=
      }=0A=
    }=0A=
    return array;=0A=
  };=0A=
}=0A=
Object.extend(Number.prototype, {=0A=
  toColorPart: function() {=0A=
    return this.toPaddedString(2, 16);=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this + 1;=0A=
  },=0A=
=0A=
  times: function(iterator) {=0A=
    $R(0, this, true).each(iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  toPaddedString: function(length, radix) {=0A=
    var string =3D this.toString(radix || 10);=0A=
    return '0'.times(length - string.length) + string;=0A=
  },=0A=
=0A=
  toJSON: function() {=0A=
    return isFinite(this) ? this.toString() : 'null';=0A=
  }=0A=
});=0A=
=0A=
$w('abs round ceil floor').each(function(method){=0A=
  Number.prototype[method] =3D Math[method].methodize();=0A=
});=0A=
function $H(object) {=0A=
  return new Hash(object);=0A=
};=0A=
=0A=
var Hash =3D Class.create(Enumerable, (function() {=0A=
  if (function() {=0A=
    var i =3D 0, Test =3D function(value) { this.key =3D value };=0A=
    Test.prototype.key =3D 'foo';=0A=
    for (var property in new Test('bar')) i++;=0A=
    return i > 1;=0A=
  }()) {=0A=
    function each(iterator) {=0A=
      var cache =3D [];=0A=
      for (var key in this._object) {=0A=
        var value =3D this._object[key];=0A=
        if (cache.include(key)) continue;=0A=
        cache.push(key);=0A=
        var pair =3D [key, value];=0A=
        pair.key =3D key;=0A=
        pair.value =3D value;=0A=
        iterator(pair);=0A=
      }=0A=
    }=0A=
  } else {=0A=
    function each(iterator) {=0A=
      for (var key in this._object) {=0A=
        var value =3D this._object[key], pair =3D [key, value];=0A=
        pair.key =3D key;=0A=
        pair.value =3D value;=0A=
        iterator(pair);=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  function toQueryPair(key, value) {=0A=
    if (Object.isUndefined(value)) return key;=0A=
    return key + '=3D' + encodeURIComponent(String.interpret(value));=0A=
  }=0A=
=0A=
  return {=0A=
    initialize: function(object) {=0A=
      this._object =3D Object.isHash(object) ? object.toObject() : =
Object.clone(object);=0A=
    },=0A=
=0A=
    _each: each,=0A=
=0A=
    set: function(key, value) {=0A=
      return this._object[key] =3D value;=0A=
    },=0A=
=0A=
    get: function(key) {=0A=
      return this._object[key];=0A=
    },=0A=
=0A=
    unset: function(key) {=0A=
      var value =3D this._object[key];=0A=
      delete this._object[key];=0A=
      return value;=0A=
    },=0A=
=0A=
    toObject: function() {=0A=
      return Object.clone(this._object);=0A=
    },=0A=
=0A=
    keys: function() {=0A=
      return this.pluck('key');=0A=
    },=0A=
=0A=
    values: function() {=0A=
      return this.pluck('value');=0A=
    },=0A=
=0A=
    index: function(value) {=0A=
      var match =3D this.detect(function(pair) {=0A=
        return pair.value =3D=3D=3D value;=0A=
      });=0A=
      return match && match.key;=0A=
    },=0A=
=0A=
    merge: function(object) {=0A=
      return this.clone().update(object);=0A=
    },=0A=
=0A=
    update: function(object) {=0A=
      return new Hash(object).inject(this, function(result, pair) {=0A=
        result.set(pair.key, pair.value);=0A=
        return result;=0A=
      });=0A=
    },=0A=
=0A=
    toQueryString: function() {=0A=
      return this.map(function(pair) {=0A=
        var key =3D encodeURIComponent(pair.key), values =3D pair.value;=0A=
=0A=
        if (values && typeof values =3D=3D 'object') {=0A=
          if (Object.isArray(values))=0A=
            return values.map(toQueryPair.curry(key)).join('&');=0A=
        }=0A=
        return toQueryPair(key, values);=0A=
      }).join('&');=0A=
    },=0A=
=0A=
    inspect: function() {=0A=
      return '#<Hash:{' + this.map(function(pair) {=0A=
        return pair.map(Object.inspect).join(': ');=0A=
      }).join(', ') + '}>';=0A=
    },=0A=
=0A=
    toJSON: function() {=0A=
      return Object.toJSON(this.toObject());=0A=
    },=0A=
=0A=
    clone: function() {=0A=
      return new Hash(this);=0A=
    }=0A=
  }=0A=
})());=0A=
=0A=
Hash.prototype.toTemplateReplacements =3D Hash.prototype.toObject;=0A=
Hash.from =3D $H;=0A=
var ObjectRange =3D Class.create(Enumerable, {=0A=
  initialize: function(start, end, exclusive) {=0A=
    this.start =3D start;=0A=
    this.end =3D end;=0A=
    this.exclusive =3D exclusive;=0A=
  },=0A=
=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 (Object.isFunction(responder[callback])) {=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() { Ajax.activeRequestCount++ },=0A=
  onComplete: function() { Ajax.activeRequestCount-- }=0A=
});=0A=
=0A=
Ajax.Base =3D Class.create({=0A=
  initialize: function(options) {=0A=
    this.options =3D {=0A=
      method:       'post',=0A=
      asynchronous: true,=0A=
      contentType:  'application/x-www-form-urlencoded',=0A=
      encoding:     'UTF-8',=0A=
      parameters:   '',=0A=
      evalJSON:     true,=0A=
      evalJS:       true=0A=
    };=0A=
    Object.extend(this.options, options || { });=0A=
=0A=
    this.options.method =3D this.options.method.toLowerCase();=0A=
    if (Object.isString(this.options.parameters))=0A=
      this.options.parameters =3D =
this.options.parameters.toQueryParams();=0A=
  }=0A=
});=0A=
=0A=
Ajax.Request =3D Class.create(Ajax.Base, {=0A=
  _complete: false,=0A=
=0A=
  initialize: function($super, url, options) {=0A=
    $super(options);=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  request: function(url) {=0A=
    this.url =3D url;=0A=
    this.method =3D this.options.method;=0A=
    var params =3D Object.clone(this.options.parameters);=0A=
=0A=
    if (!['get', 'post'].include(this.method)) {=0A=
      // simulate other verbs over post=0A=
      params['_method'] =3D this.method;=0A=
      this.method =3D 'post';=0A=
    }=0A=
=0A=
    this.parameters =3D params;=0A=
=0A=
    if (params =3D Object.toQueryString(params)) {=0A=
      // when GET, append parameters to URL=0A=
      if (this.method =3D=3D 'get')=0A=
        this.url +=3D (this.url.include('?') ? '&' : '?') + params;=0A=
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
        params +=3D '&_=3D';=0A=
    }=0A=
=0A=
    try {=0A=
      var response =3D new Ajax.Response(this);=0A=
      if (this.options.onCreate) this.options.onCreate(response);=0A=
      Ajax.Responders.dispatch('onCreate', this, response);=0A=
=0A=
      this.transport.open(this.method.toUpperCase(), this.url,=0A=
        this.options.asynchronous);=0A=
=0A=
      if (this.options.asynchronous) =
this.respondToReadyState.bind(this).defer(1);=0A=
=0A=
      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
      this.setRequestHeaders();=0A=
=0A=
      this.body =3D this.method =3D=3D 'post' ? (this.options.postBody =
|| params) : null;=0A=
      this.transport.send(this.body);=0A=
=0A=
      /* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
      if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
        this.onStateChange();=0A=
=0A=
    }=0A=
    catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  onStateChange: function() {=0A=
    var readyState =3D this.transport.readyState;=0A=
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A=
      this.respondToReadyState(this.transport.readyState);=0A=
  },=0A=
=0A=
  setRequestHeaders: function() {=0A=
    var headers =3D {=0A=
      'X-Requested-With': 'XMLHttpRequest',=0A=
      'X-Prototype-Version': Prototype.Version,=0A=
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'=0A=
    };=0A=
=0A=
    if (this.method =3D=3D 'post') {=0A=
      headers['Content-type'] =3D this.options.contentType +=0A=
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');=0A=
=0A=
      /* Force "Connection: close" for older Mozilla browsers to work=0A=
       * around a bug where XMLHttpRequest sends an incorrect=0A=
       * Content-length header. See Mozilla Bugzilla #246651.=0A=
       */=0A=
      if (this.transport.overrideMimeType &&=0A=
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)=0A=
            headers['Connection'] =3D 'close';=0A=
    }=0A=
=0A=
    // user-defined headers=0A=
    if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
      var extras =3D this.options.requestHeaders;=0A=
=0A=
      if (Object.isFunction(extras.push))=0A=
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A=
          headers[extras[i]] =3D extras[i+1];=0A=
      else=0A=
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });=0A=
    }=0A=
=0A=
    for (var name in headers)=0A=
      this.transport.setRequestHeader(name, headers[name]);=0A=
  },=0A=
=0A=
  success: function() {=0A=
    var status =3D this.getStatus();=0A=
    return !status || (status >=3D 200 && status < 300);=0A=
  },=0A=
=0A=
  getStatus: function() {=0A=
    try {=0A=
      return this.transport.status || 0;=0A=
    } catch (e) { return 0 }=0A=
  },=0A=
=0A=
  respondToReadyState: function(readyState) {=0A=
    var state =3D Ajax.Request.Events[readyState], response =3D new =
Ajax.Response(this);=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      try {=0A=
        this._complete =3D true;=0A=
        (this.options['on' + response.status]=0A=
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
         || Prototype.emptyFunction)(response, response.headerJSON);=0A=
      } catch (e) {=0A=
        this.dispatchException(e);=0A=
      }=0A=
=0A=
      var contentType =3D response.getHeader('Content-type');=0A=
      if (this.options.evalJS =3D=3D 'force'=0A=
          || (this.options.evalJS && contentType=0A=
          && =
contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s=
*$/i)))=0A=
        this.evalResponse();=0A=
    }=0A=
=0A=
    try {=0A=
      (this.options['on' + state] || Prototype.emptyFunction)(response, =
response.headerJSON);=0A=
      Ajax.Responders.dispatch('on' + state, this, response, =
response.headerJSON);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
=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=
  evalResponse: function() {=0A=
    try {=0A=
      return eval((this.transport.responseText || '').unfilterJSON());=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  dispatchException: function(exception) {=0A=
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
    Ajax.Responders.dispatch('onException', this, exception);=0A=
  }=0A=
});=0A=
=0A=
Ajax.Request.Events =3D=0A=
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Response =3D Class.create({=0A=
  initialize: function(request){=0A=
    this.request =3D request;=0A=
    var transport  =3D this.transport  =3D request.transport,=0A=
        readyState =3D this.readyState =3D transport.readyState;=0A=
=0A=
    if((readyState > 2 && !Prototype.Browser.IE) || readyState =3D=3D 4) =
{=0A=
      this.status       =3D this.getStatus();=0A=
      this.statusText   =3D this.getStatusText();=0A=
      this.responseText =3D String.interpret(transport.responseText);=0A=
      this.headerJSON   =3D this._getHeaderJSON();=0A=
    }=0A=
=0A=
    if(readyState =3D=3D 4) {=0A=
      var xml =3D transport.responseXML;=0A=
      this.responseXML  =3D xml =3D=3D=3D undefined ? null : xml;=0A=
      this.responseJSON =3D this._getResponseJSON();=0A=
    }=0A=
  },=0A=
=0A=
  status:      0,=0A=
  statusText: '',=0A=
=0A=
  getStatus: Ajax.Request.prototype.getStatus,=0A=
=0A=
  getStatusText: function() {=0A=
    try {=0A=
      return this.transport.statusText || '';=0A=
    } catch (e) { return '' }=0A=
  },=0A=
=0A=
  getHeader: Ajax.Request.prototype.getHeader,=0A=
=0A=
  getAllHeaders: function() {=0A=
    try {=0A=
      return this.getAllResponseHeaders();=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  getResponseHeader: function(name) {=0A=
    return this.transport.getResponseHeader(name);=0A=
  },=0A=
=0A=
  getAllResponseHeaders: function() {=0A=
    return this.transport.getAllResponseHeaders();=0A=
  },=0A=
=0A=
  _getHeaderJSON: function() {=0A=
    var json =3D this.getHeader('X-JSON');=0A=
    if (!json) return null;=0A=
    json =3D decodeURIComponent(escape(json));=0A=
    try {=0A=
      return json.evalJSON(this.request.options.sanitizeJSON);=0A=
    } catch (e) {=0A=
      this.request.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  _getResponseJSON: function() {=0A=
    var options =3D this.request.options;=0A=
    if (!options.evalJSON || (options.evalJSON !=3D 'force' &&=0A=
      !(this.getHeader('Content-type') || =
'').include('application/json')))=0A=
        return null;=0A=
    try {=0A=
      return this.transport.responseText.evalJSON(options.sanitizeJSON);=0A=
    } catch (e) {=0A=
      this.request.dispatchException(e);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create(Ajax.Request, {=0A=
  initialize: function($super, container, url, options) {=0A=
    this.container =3D {=0A=
      success: (container.success || container),=0A=
      failure: (container.failure || (container.success ? null : =
container))=0A=
    };=0A=
=0A=
    options =3D options || { };=0A=
    var onComplete =3D options.onComplete;=0A=
    options.onComplete =3D (function(response, param) {=0A=
      this.updateContent(response.responseText);=0A=
      if (Object.isFunction(onComplete)) onComplete(response, param);=0A=
    }).bind(this);=0A=
=0A=
    $super(url, options);=0A=
  },=0A=
=0A=
  updateContent: function(responseText) {=0A=
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'],=0A=
        options =3D this.options;=0A=
=0A=
    if (!options.evalScripts) responseText =3D =
responseText.stripScripts();=0A=
=0A=
    if (receiver =3D $(receiver)) {=0A=
      if (options.insertion) {=0A=
        if (Object.isString(options.insertion)) {=0A=
          var insertion =3D { }; insertion[options.insertion] =3D =
responseText;=0A=
          receiver.insert(insertion);=0A=
        }=0A=
        else options.insertion(receiver, responseText);=0A=
      }=0A=
      else receiver.update(responseText);=0A=
    }=0A=
=0A=
    if (this.success()) {=0A=
      if (this.onComplete) this.onComplete.bind(this).defer();=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create(Ajax.Base, {=0A=
  initialize: function($super, container, url, options) {=0A=
    $super(options);=0A=
    this.onComplete =3D this.options.onComplete;=0A=
=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(response) {=0A=
    if (this.options.decay) {=0A=
      this.decay =3D (response.responseText =3D=3D this.lastText ?=0A=
        this.decay * this.options.decay : 1);=0A=
=0A=
      this.lastText =3D response.responseText;=0A=
    }=0A=
    this.timer =3D this.onTimerEvent.bind(this).delay(this.decay * =
this.frequency);=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 (Object.isString(element))=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(Element.extend(query.snapshotItem(i)));=0A=
    return results;=0A=
  };=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Node) var Node =3D { };=0A=
=0A=
if (!Node.ELEMENT_NODE) {=0A=
  // DOM level 2 ECMAScript Language Binding=0A=
  Object.extend(Node, {=0A=
    ELEMENT_NODE: 1,=0A=
    ATTRIBUTE_NODE: 2,=0A=
    TEXT_NODE: 3,=0A=
    CDATA_SECTION_NODE: 4,=0A=
    ENTITY_REFERENCE_NODE: 5,=0A=
    ENTITY_NODE: 6,=0A=
    PROCESSING_INSTRUCTION_NODE: 7,=0A=
    COMMENT_NODE: 8,=0A=
    DOCUMENT_NODE: 9,=0A=
    DOCUMENT_TYPE_NODE: 10,=0A=
    DOCUMENT_FRAGMENT_NODE: 11,=0A=
    NOTATION_NODE: 12=0A=
  });=0A=
}=0A=
=0A=
(function() {=0A=
  var element =3D this.Element;=0A=
  this.Element =3D function(tagName, attributes) {=0A=
    attributes =3D attributes || { };=0A=
    tagName =3D tagName.toLowerCase();=0A=
    var cache =3D Element.cache;=0A=
    if (Prototype.Browser.IE && attributes.name) {=0A=
      tagName =3D '<' + tagName + ' name=3D"' + attributes.name + '">';=0A=
      delete attributes.name;=0A=
      return Element.writeAttribute(document.createElement(tagName), =
attributes);=0A=
    }=0A=
    if (!cache[tagName]) cache[tagName] =3D =
Element.extend(document.createElement(tagName));=0A=
    return Element.writeAttribute(cache[tagName].cloneNode(false), =
attributes);=0A=
  };=0A=
  Object.extend(this.Element, element || { });=0A=
}).call(window);=0A=
=0A=
Element.cache =3D { };=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, content) {=0A=
    element =3D $(element);=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) return =
element.update().insert(content);=0A=
    content =3D Object.toHTML(content);=0A=
    element.innerHTML =3D content.stripScripts();=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  },=0A=
=0A=
  replace: function(element, content) {=0A=
    element =3D $(element);=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    else if (!Object.isElement(content)) {=0A=
      content =3D Object.toHTML(content);=0A=
      var range =3D element.ownerDocument.createRange();=0A=
      range.selectNode(element);=0A=
      content.evalScripts.bind(content).defer();=0A=
      content =3D range.createContextualFragment(content.stripScripts());=0A=
    }=0A=
    element.parentNode.replaceChild(content, element);=0A=
    return element;=0A=
  },=0A=
=0A=
  insert: function(element, insertions) {=0A=
    element =3D $(element);=0A=
=0A=
    if (Object.isString(insertions) || Object.isNumber(insertions) ||=0A=
        Object.isElement(insertions) || (insertions && =
(insertions.toElement || insertions.toHTML)))=0A=
          insertions =3D {bottom:insertions};=0A=
=0A=
    var content, t, range;=0A=
=0A=
    for (position in insertions) {=0A=
      content  =3D insertions[position];=0A=
      position =3D position.toLowerCase();=0A=
      t =3D Element._insertionTranslations[position];=0A=
=0A=
      if (content && content.toElement) content =3D content.toElement();=0A=
      if (Object.isElement(content)) {=0A=
        t.insert(element, content);=0A=
        continue;=0A=
      }=0A=
=0A=
      content =3D Object.toHTML(content);=0A=
=0A=
      range =3D element.ownerDocument.createRange();=0A=
      t.initializeRange(element, range);=0A=
      t.insert(element, =
range.createContextualFragment(content.stripScripts()));=0A=
=0A=
      content.evalScripts.bind(content).defer();=0A=
    }=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  wrap: function(element, wrapper, attributes) {=0A=
    element =3D $(element);=0A=
    if (Object.isElement(wrapper))=0A=
      $(wrapper).writeAttribute(attributes || { });=0A=
    else if (Object.isString(wrapper)) wrapper =3D new Element(wrapper, =
attributes);=0A=
    else wrapper =3D new Element('div', wrapper);=0A=
    if (element.parentNode)=0A=
      element.parentNode.replaceChild(wrapper, element);=0A=
    wrapper.appendChild(element);=0A=
    return wrapper;=0A=
  },=0A=
=0A=
  inspect: function(element) {=0A=
    element =3D $(element);=0A=
    var result =3D '<' + element.tagName.toLowerCase();=0A=
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A=
      var property =3D pair.first(), attribute =3D pair.last();=0A=
      var value =3D (element[property] || '').toString();=0A=
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);=0A=
    });=0A=
    return result + '>';=0A=
  },=0A=
=0A=
  recursivelyCollect: function(element, property) {=0A=
    element =3D $(element);=0A=
    var elements =3D [];=0A=
    while (element =3D element[property])=0A=
      if (element.nodeType =3D=3D 1)=0A=
        elements.push(Element.extend(element));=0A=
    return elements;=0A=
  },=0A=
=0A=
  ancestors: function(element) {=0A=
    return $(element).recursivelyCollect('parentNode');=0A=
  },=0A=
=0A=
  descendants: function(element) {=0A=
    return $A($(element).getElementsByTagName('*')).each(Element.extend);=0A=
  },=0A=
=0A=
  firstDescendant: function(element) {=0A=
    element =3D $(element).firstChild;=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    return $(element);=0A=
  },=0A=
=0A=
  immediateDescendants: function(element) {=0A=
    if (!(element =3D $(element).firstChild)) return [];=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    if (element) return [element].concat($(element).nextSiblings());=0A=
    return [];=0A=
  },=0A=
=0A=
  previousSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('previousSibling');=0A=
  },=0A=
=0A=
  nextSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('nextSibling');=0A=
  },=0A=
=0A=
  siblings: function(element) {=0A=
    element =3D $(element);=0A=
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());=0A=
  },=0A=
=0A=
  match: function(element, selector) {=0A=
    if (Object.isString(selector))=0A=
      selector =3D new Selector(selector);=0A=
    return selector.match($(element));=0A=
  },=0A=
=0A=
  up: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return $(element.parentNode);=0A=
    var ancestors =3D element.ancestors();=0A=
    return expression ? Selector.findElement(ancestors, expression, =
index) :=0A=
      ancestors[index || 0];=0A=
  },=0A=
=0A=
  down: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return element.firstDescendant();=0A=
    var descendants =3D element.descendants();=0A=
    return expression ? Selector.findElement(descendants, expression, =
index) :=0A=
      descendants[index || 0];=0A=
  },=0A=
=0A=
  previous: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.previousElementSibling(element));=0A=
    var previousSiblings =3D element.previousSiblings();=0A=
    return expression ? Selector.findElement(previousSiblings, =
expression, index) :=0A=
      previousSiblings[index || 0];=0A=
  },=0A=
=0A=
  next: function(element, expression, index) {=0A=
    element =3D $(element);=0A=
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.nextElementSibling(element));=0A=
    var nextSiblings =3D element.nextSiblings();=0A=
    return expression ? Selector.findElement(nextSiblings, expression, =
index) :=0A=
      nextSiblings[index || 0];=0A=
  },=0A=
=0A=
  select: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element, args);=0A=
  },=0A=
=0A=
  adjacent: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element.parentNode, =
args).without(element);=0A=
  },=0A=
=0A=
  identify: function(element) {=0A=
    element =3D $(element);=0A=
    var id =3D element.readAttribute('id'), self =3D arguments.callee;=0A=
    if (id) return id;=0A=
    do { id =3D 'anonymous_element_' + self.counter++ } while ($(id));=0A=
    element.writeAttribute('id', id);=0A=
    return id;=0A=
  },=0A=
=0A=
  readAttribute: function(element, name) {=0A=
    element =3D $(element);=0A=
    if (Prototype.Browser.IE) {=0A=
      var t =3D Element._attributeTranslations.read;=0A=
      if (t.values[name]) return t.values[name](element, name);=0A=
      if (t.names[name]) name =3D t.names[name];=0A=
      if (name.include(':')) {=0A=
        return (!element.attributes || !element.attributes[name]) ? null =
:=0A=
         element.attributes[name].value;=0A=
      }=0A=
    }=0A=
    return element.getAttribute(name);=0A=
  },=0A=
=0A=
  writeAttribute: function(element, name, value) {=0A=
    element =3D $(element);=0A=
    var attributes =3D { }, t =3D Element._attributeTranslations.write;=0A=
=0A=
    if (typeof name =3D=3D 'object') attributes =3D name;=0A=
    else attributes[name] =3D value =3D=3D=3D undefined ? true : value;=0A=
=0A=
    for (var attr in attributes) {=0A=
      var name =3D t.names[attr] || attr, value =3D attributes[attr];=0A=
      if (t.values[attr]) name =3D t.values[attr](element, value);=0A=
      if (value =3D=3D=3D false || value =3D=3D=3D null)=0A=
        element.removeAttribute(name);=0A=
      else if (value =3D=3D=3D true)=0A=
        element.setAttribute(name, name);=0A=
      else element.setAttribute(name, value);=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  getHeight: function(element) {=0A=
    return $(element).getDimensions().height;=0A=
  },=0A=
=0A=
  getWidth: function(element) {=0A=
    return $(element).getDimensions().width;=0A=
  },=0A=
=0A=
  classNames: function(element) {=0A=
    return new Element.ClassNames(element);=0A=
  },=0A=
=0A=
  hasClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var elementClassName =3D element.className;=0A=
    return (elementClassName.length > 0 && (elementClassName =3D=3D =
className ||=0A=
      new RegExp("(^|\\s)" + className + =
"(\\s|$)").test(elementClassName)));=0A=
  },=0A=
=0A=
  addClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    if (!element.hasClassName(className))=0A=
      element.className +=3D (element.className ? ' ' : '') + className;=0A=
    return element;=0A=
  },=0A=
=0A=
  removeClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    element.className =3D element.className.replace(=0A=
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();=0A=
    return element;=0A=
  },=0A=
=0A=
  toggleClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    return element[element.hasClassName(className) ?=0A=
      'removeClassName' : 'addClassName'](className);=0A=
  },=0A=
=0A=
  // removes whitespace-only text node children=0A=
  cleanWhitespace: function(element) {=0A=
    element =3D $(element);=0A=
    var node =3D element.firstChild;=0A=
    while (node) {=0A=
      var nextNode =3D node.nextSibling;=0A=
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A=
        element.removeChild(node);=0A=
      node =3D nextNode;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  empty: function(element) {=0A=
    return $(element).innerHTML.blank();=0A=
  },=0A=
=0A=
  descendantOf: function(element, ancestor) {=0A=
    element =3D $(element), ancestor =3D $(ancestor);=0A=
=0A=
    if (element.compareDocumentPosition)=0A=
      return (element.compareDocumentPosition(ancestor) & 8) =3D=3D=3D 8;=0A=
=0A=
    if (element.sourceIndex && !Prototype.Browser.Opera) {=0A=
      var e =3D element.sourceIndex, a =3D ancestor.sourceIndex,=0A=
       nextAncestor =3D ancestor.nextSibling;=0A=
      if (!nextAncestor) {=0A=
        do { ancestor =3D ancestor.parentNode; }=0A=
        while (!(nextAncestor =3D ancestor.nextSibling) && =
ancestor.parentNode);=0A=
      }=0A=
      if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);=0A=
    }=0A=
=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 element.cumulativeOffset();=0A=
    window.scrollTo(pos[0], pos[1]);=0A=
    return element;=0A=
  },=0A=
=0A=
  getStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D style =3D=3D 'float' ? 'cssFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value) {=0A=
      var css =3D document.defaultView.getComputedStyle(element, null);=0A=
      value =3D css ? css[style] : null;=0A=
    }=0A=
    if (style =3D=3D 'opacity') return value ? parseFloat(value) : 1.0;=0A=
    return value =3D=3D 'auto' ? null : value;=0A=
  },=0A=
=0A=
  getOpacity: function(element) {=0A=
    return $(element).getStyle('opacity');=0A=
  },=0A=
=0A=
  setStyle: function(element, styles) {=0A=
    element =3D $(element);=0A=
    var elementStyle =3D element.style, match;=0A=
    if (Object.isString(styles)) {=0A=
      element.style.cssText +=3D ';' + styles;=0A=
      return styles.include('opacity') ?=0A=
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : =
element;=0A=
    }=0A=
    for (var property in styles)=0A=
      if (property =3D=3D 'opacity') =
element.setOpacity(styles[property]);=0A=
      else=0A=
        elementStyle[(property =3D=3D 'float' || property =3D=3D =
'cssFloat') ?=0A=
          (elementStyle.styleFloat =3D=3D=3D undefined ? 'cssFloat' : =
'styleFloat') :=0A=
            property] =3D styles[property];=0A=
=0A=
    return element;=0A=
  },=0A=
=0A=
  setOpacity: function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  },=0A=
=0A=
  getDimensions: function(element) {=0A=
    element =3D $(element);=0A=
    var display =3D $(element).getStyle('display');=0A=
    if (display !=3D 'none' && display !=3D null) // Safari bug=0A=
      return {width: element.offsetWidth, height: element.offsetHeight};=0A=
=0A=
    // All *Width and *Height properties give 0 on elements with display =
none,=0A=
    // so enable the element temporarily=0A=
    var els =3D element.style;=0A=
    var originalVisibility =3D els.visibility;=0A=
    var originalPosition =3D els.position;=0A=
    var originalDisplay =3D els.display;=0A=
    els.visibility =3D 'hidden';=0A=
    els.position =3D 'absolute';=0A=
    els.display =3D 'block';=0A=
    var originalWidth =3D element.clientWidth;=0A=
    var originalHeight =3D element.clientHeight;=0A=
    els.display =3D originalDisplay;=0A=
    els.position =3D originalPosition;=0A=
    els.visibility =3D originalVisibility;=0A=
    return {width: originalWidth, height: originalHeight};=0A=
  },=0A=
=0A=
  makePositioned: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Element.getStyle(element, 'position');=0A=
    if (pos =3D=3D 'static' || !pos) {=0A=
      element._madePositioned =3D true;=0A=
      element.style.position =3D 'relative';=0A=
      // Opera returns the offset relative to the positioning context, =
when an=0A=
      // element is position relative but top and left have not been =
defined=0A=
      if (window.opera) {=0A=
        element.style.top =3D 0;=0A=
        element.style.left =3D 0;=0A=
      }=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  undoPositioned: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._madePositioned) {=0A=
      element._madePositioned =3D undefined;=0A=
      element.style.position =3D=0A=
        element.style.top =3D=0A=
        element.style.left =3D=0A=
        element.style.bottom =3D=0A=
        element.style.right =3D '';=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  makeClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._overflow) return element;=0A=
    element._overflow =3D Element.getStyle(element, 'overflow') || =
'auto';=0A=
    if (element._overflow !=3D=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=
  cumulativeOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=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 Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  absolutize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.getStyle('position') =3D=3D 'absolute') return;=0A=
    // Position.prepare(); // To be done manually by Scripty when it =
needs it.=0A=
=0A=
    var offsets =3D element.positionedOffset();=0A=
    var top     =3D offsets[1];=0A=
    var left    =3D offsets[0];=0A=
    var width   =3D element.clientWidth;=0A=
    var height  =3D element.clientHeight;=0A=
=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=
    return element;=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.getStyle('position') =3D=3D 'relative') return;=0A=
    // Position.prepare(); // To be done manually by Scripty when it =
needs it.=0A=
=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=
    return element;=0A=
  },=0A=
=0A=
  cumulativeScrollOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.scrollTop  || 0;=0A=
      valueL +=3D element.scrollLeft || 0;=0A=
      element =3D element.parentNode;=0A=
    } while (element);=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  getOffsetParent: 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=
  viewportOffset: function(forElement) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
=0A=
    var element =3D forElement;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
=0A=
      // Safari fix=0A=
      if (element.offsetParent =3D=3D document.body &&=0A=
        Element.getStyle(element, 'position') =3D=3D 'absolute') break;=0A=
=0A=
    } while (element =3D element.offsetParent);=0A=
=0A=
    element =3D forElement;=0A=
    do {=0A=
      if (!Prototype.Browser.Opera || element.tagName =3D=3D 'BODY') {=0A=
        valueT -=3D element.scrollTop  || 0;=0A=
        valueL -=3D element.scrollLeft || 0;=0A=
      }=0A=
    } while (element =3D element.parentNode);=0A=
=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  },=0A=
=0A=
  clonePosition: function(element, source) {=0A=
    var options =3D Object.extend({=0A=
      setLeft:    true,=0A=
      setTop:     true,=0A=
      setWidth:   true,=0A=
      setHeight:  true,=0A=
      offsetTop:  0,=0A=
      offsetLeft: 0=0A=
    }, arguments[2] || { });=0A=
=0A=
    // find page position of source=0A=
    source =3D $(source);=0A=
    var p =3D source.viewportOffset();=0A=
=0A=
    // find coordinate system to use=0A=
    element =3D $(element);=0A=
    var delta =3D [0, 0];=0A=
    var parent =3D null;=0A=
    // delta [0,0] will do fine with position: fixed elements,=0A=
    // position:absolute needs offsetParent deltas=0A=
    if (Element.getStyle(element, 'position') =3D=3D 'absolute') {=0A=
      parent =3D element.getOffsetParent();=0A=
      delta =3D parent.viewportOffset();=0A=
    }=0A=
=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)   element.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
    if (options.setTop)    element.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
    if (options.setWidth)  element.style.width =3D source.offsetWidth + =
'px';=0A=
    if (options.setHeight) element.style.height =3D source.offsetHeight =
+ 'px';=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Element.Methods.identify.counter =3D 1;=0A=
=0A=
Object.extend(Element.Methods, {=0A=
  getElementsBySelector: Element.Methods.select,=0A=
  childElements: Element.Methods.immediateDescendants=0A=
});=0A=
=0A=
Element._attributeTranslations =3D {=0A=
  write: {=0A=
    names: {=0A=
      className: 'class',=0A=
      htmlFor:   'for'=0A=
    },=0A=
    values: { }=0A=
  }=0A=
};=0A=
=0A=
=0A=
if (!document.createRange || Prototype.Browser.Opera) {=0A=
  Element.Methods.insert =3D function(element, insertions) {=0A=
    element =3D $(element);=0A=
=0A=
    if (Object.isString(insertions) || Object.isNumber(insertions) ||=0A=
        Object.isElement(insertions) || (insertions && =
(insertions.toElement || insertions.toHTML)))=0A=
          insertions =3D { bottom: insertions };=0A=
=0A=
    var t =3D Element._insertionTranslations, content, position, pos, =
tagName;=0A=
=0A=
    for (position in insertions) {=0A=
      content  =3D insertions[position];=0A=
      position =3D position.toLowerCase();=0A=
      pos      =3D t[position];=0A=
=0A=
      if (content && content.toElement) content =3D content.toElement();=0A=
      if (Object.isElement(content)) {=0A=
        pos.insert(element, content);=0A=
        continue;=0A=
      }=0A=
=0A=
      content =3D Object.toHTML(content);=0A=
      tagName =3D ((position =3D=3D 'before' || position =3D=3D 'after')=0A=
        ? element.parentNode : element).tagName.toUpperCase();=0A=
=0A=
      if (t.tags[tagName]) {=0A=
        var fragments =3D =
Element._getContentFromAnonymousElement(tagName, content.stripScripts());=0A=
        if (position =3D=3D 'top' || position =3D=3D 'after') =
fragments.reverse();=0A=
        fragments.each(pos.insert.curry(element));=0A=
      }=0A=
      else element.insertAdjacentHTML(pos.adjacency, =
content.stripScripts());=0A=
=0A=
      content.evalScripts.bind(content).defer();=0A=
    }=0A=
=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
if (Prototype.Browser.Opera) {=0A=
  Element.Methods._getStyle =3D Element.Methods.getStyle;=0A=
  Element.Methods.getStyle =3D function(element, style) {=0A=
    switch(style) {=0A=
      case 'left':=0A=
      case 'top':=0A=
      case 'right':=0A=
      case 'bottom':=0A=
        if (Element._getStyle(element, 'position') =3D=3D 'static') =
return null;=0A=
      default: return Element._getStyle(element, style);=0A=
    }=0A=
  };=0A=
  Element.Methods._readAttribute =3D Element.Methods.readAttribute;=0A=
  Element.Methods.readAttribute =3D function(element, attribute) {=0A=
    if (attribute =3D=3D 'title') return element.title;=0A=
    return Element._readAttribute(element, attribute);=0A=
  };=0A=
}=0A=
=0A=
else if (Prototype.Browser.IE) {=0A=
  $w('positionedOffset getOffsetParent =
viewportOffset').each(function(method) {=0A=
    Element.Methods[method] =3D Element.Methods[method].wrap(=0A=
      function(proceed, element) {=0A=
        element =3D $(element);=0A=
        var position =3D element.getStyle('position');=0A=
        if (position !=3D 'static') return proceed(element);=0A=
        element.setStyle({ position: 'relative' });=0A=
        var value =3D proceed(element);=0A=
        element.setStyle({ position: position });=0A=
        return value;=0A=
      }=0A=
    );=0A=
  });=0A=
=0A=
  Element.Methods.getStyle =3D function(element, style) {=0A=
    element =3D $(element);=0A=
    style =3D (style =3D=3D 'float' || style =3D=3D 'cssFloat') ? =
'styleFloat' : style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value && element.currentStyle) value =3D =
element.currentStyle[style];=0A=
=0A=
    if (style =3D=3D 'opacity') {=0A=
      if (value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))=0A=
        if (value[1]) return parseFloat(value[1]) / 100;=0A=
      return 1.0;=0A=
    }=0A=
=0A=
    if (value =3D=3D 'auto') {=0A=
      if ((style =3D=3D 'width' || style =3D=3D 'height') && =
(element.getStyle('display') !=3D 'none'))=0A=
        return element['offset' + style.capitalize()] + 'px';=0A=
      return null;=0A=
    }=0A=
    return value;=0A=
  };=0A=
=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    function stripAlpha(filter){=0A=
      return filter.replace(/alpha\([^\)]*\)/gi,'');=0A=
    }=0A=
    element =3D $(element);=0A=
    var currentStyle =3D element.currentStyle;=0A=
    if ((currentStyle && !currentStyle.hasLayout) ||=0A=
      (!currentStyle && element.style.zoom =3D=3D 'normal'))=0A=
        element.style.zoom =3D 1;=0A=
=0A=
    var filter =3D element.getStyle('filter'), style =3D element.style;=0A=
    if (value =3D=3D 1 || value =3D=3D=3D '') {=0A=
      (filter =3D stripAlpha(filter)) ?=0A=
        style.filter =3D filter : style.removeAttribute('filter');=0A=
      return element;=0A=
    } else if (value < 0.00001) value =3D 0;=0A=
    style.filter =3D stripAlpha(filter) +=0A=
      'alpha(opacity=3D' + (value * 100) + ')';=0A=
    return element;=0A=
  };=0A=
=0A=
  Element._attributeTranslations =3D {=0A=
    read: {=0A=
      names: {=0A=
        'class': 'className',=0A=
        'for':   'htmlFor'=0A=
      },=0A=
      values: {=0A=
        _getAttr: function(element, attribute) {=0A=
          return element.getAttribute(attribute, 2);=0A=
        },=0A=
        _getAttrNode: function(element, attribute) {=0A=
          var node =3D element.getAttributeNode(attribute);=0A=
          return node ? node.value : "";=0A=
        },=0A=
        _getEv: function(element, attribute) {=0A=
          var attribute =3D element.getAttribute(attribute);=0A=
          return attribute ? attribute.toString().slice(23, -2) : null;=0A=
        },=0A=
        _flag: function(element, attribute) {=0A=
          return $(element).hasAttribute(attribute) ? attribute : null;=0A=
        },=0A=
        style: function(element) {=0A=
          return element.style.cssText.toLowerCase();=0A=
        },=0A=
        title: function(element) {=0A=
          return element.title;=0A=
        }=0A=
      }=0A=
    }=0A=
  };=0A=
=0A=
  Element._attributeTranslations.write =3D {=0A=
    names: Object.clone(Element._attributeTranslations.read.names),=0A=
    values: {=0A=
      checked: function(element, value) {=0A=
        element.checked =3D !!value;=0A=
      },=0A=
=0A=
      style: function(element, value) {=0A=
        element.style.cssText =3D value ? value : '';=0A=
      }=0A=
    }=0A=
  };=0A=
=0A=
  Element._attributeTranslations.has =3D {};=0A=
=0A=
  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +=0A=
      'encType maxLength readOnly longDesc').each(function(attr) {=0A=
    Element._attributeTranslations.write.names[attr.toLowerCase()] =3D =
attr;=0A=
    Element._attributeTranslations.has[attr.toLowerCase()] =3D attr;=0A=
  });=0A=
=0A=
  (function(v) {=0A=
    Object.extend(v, {=0A=
      href:        v._getAttr,=0A=
      src:         v._getAttr,=0A=
      type:        v._getAttr,=0A=
      action:      v._getAttrNode,=0A=
      disabled:    v._flag,=0A=
      checked:     v._flag,=0A=
      readonly:    v._flag,=0A=
      multiple:    v._flag,=0A=
      onload:      v._getEv,=0A=
      onunload:    v._getEv,=0A=
      onclick:     v._getEv,=0A=
      ondblclick:  v._getEv,=0A=
      onmousedown: v._getEv,=0A=
      onmouseup:   v._getEv,=0A=
      onmouseover: v._getEv,=0A=
      onmousemove: v._getEv,=0A=
      onmouseout:  v._getEv,=0A=
      onfocus:     v._getEv,=0A=
      onblur:      v._getEv,=0A=
      onkeypress:  v._getEv,=0A=
      onkeydown:   v._getEv,=0A=
      onkeyup:     v._getEv,=0A=
      onsubmit:    v._getEv,=0A=
      onreset:     v._getEv,=0A=
      onselect:    v._getEv,=0A=
      onchange:    v._getEv=0A=
    });=0A=
  })(Element._attributeTranslations.read.values);=0A=
}=0A=
=0A=
else if (Prototype.Browser.Gecko && =
/rv:1\.8\.0/.test(navigator.userAgent)) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1) ? 0.999999 :=0A=
      (value =3D=3D=3D '') ? '' : (value < 0.00001) ? 0 : value;=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
else if (Prototype.Browser.WebKit) {=0A=
  Element.Methods.setOpacity =3D function(element, value) {=0A=
    element =3D $(element);=0A=
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :=0A=
      (value < 0.00001) ? 0 : value;=0A=
=0A=
    if (value =3D=3D 1)=0A=
      if(element.tagName =3D=3D 'IMG' && element.width) {=0A=
        element.width++; element.width--;=0A=
      } else try {=0A=
        var n =3D document.createTextNode(' ');=0A=
        element.appendChild(n);=0A=
        element.removeChild(n);=0A=
      } catch (e) { }=0A=
=0A=
    return element;=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=
  Element.Methods.cumulativeOffset =3D function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
=0A=
    return Element._returnOffset(valueL, valueT);=0A=
  };=0A=
}=0A=
=0A=
if (Prototype.Browser.IE || Prototype.Browser.Opera) {=0A=
  // IE and Opera are missing .innerHTML support for TABLE-related and =
SELECT elements=0A=
  Element.Methods.update =3D function(element, content) {=0A=
    element =3D $(element);=0A=
=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) return =
element.update().insert(content);=0A=
=0A=
    content =3D Object.toHTML(content);=0A=
    var tagName =3D element.tagName.toUpperCase();=0A=
=0A=
    if (tagName in Element._insertionTranslations.tags) {=0A=
      $A(element.childNodes).each(function(node) { =
element.removeChild(node) });=0A=
      Element._getContentFromAnonymousElement(tagName, =
content.stripScripts())=0A=
        .each(function(node) { element.appendChild(node) });=0A=
    }=0A=
    else element.innerHTML =3D content.stripScripts();=0A=
=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
if (document.createElement('div').outerHTML) {=0A=
  Element.Methods.replace =3D function(element, content) {=0A=
    element =3D $(element);=0A=
=0A=
    if (content && content.toElement) content =3D content.toElement();=0A=
    if (Object.isElement(content)) {=0A=
      element.parentNode.replaceChild(content, element);=0A=
      return element;=0A=
    }=0A=
=0A=
    content =3D Object.toHTML(content);=0A=
    var parent =3D element.parentNode, tagName =3D =
parent.tagName.toUpperCase();=0A=
=0A=
    if (Element._insertionTranslations.tags[tagName]) {=0A=
      var nextSibling =3D element.next();=0A=
      var fragments =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());=0A=
      parent.removeChild(element);=0A=
      if (nextSibling)=0A=
        fragments.each(function(node) { parent.insertBefore(node, =
nextSibling) });=0A=
      else=0A=
        fragments.each(function(node) { parent.appendChild(node) });=0A=
    }=0A=
    else element.outerHTML =3D content.stripScripts();=0A=
=0A=
    content.evalScripts.bind(content).defer();=0A=
    return element;=0A=
  };=0A=
}=0A=
=0A=
Element._returnOffset =3D function(l, t) {=0A=
  var result =3D [l, t];=0A=
  result.left =3D l;=0A=
  result.top =3D t;=0A=
  return result;=0A=
};=0A=
=0A=
Element._getContentFromAnonymousElement =3D function(tagName, html) {=0A=
  var div =3D new Element('div'), t =3D =
Element._insertionTranslations.tags[tagName];=0A=
  div.innerHTML =3D t[0] + html + t[1];=0A=
  t[2].times(function() { div =3D div.firstChild });=0A=
  return $A(div.childNodes);=0A=
};=0A=
=0A=
Element._insertionTranslations =3D {=0A=
  before: {=0A=
    adjacency: 'beforeBegin',=0A=
    insert: function(element, node) {=0A=
      element.parentNode.insertBefore(node, element);=0A=
    },=0A=
    initializeRange: function(element, range) {=0A=
      range.setStartBefore(element);=0A=
    }=0A=
  },=0A=
  top: {=0A=
    adjacency: 'afterBegin',=0A=
    insert: function(element, node) {=0A=
      element.insertBefore(node, element.firstChild);=0A=
    },=0A=
    initializeRange: function(element, range) {=0A=
      range.selectNodeContents(element);=0A=
      range.collapse(true);=0A=
    }=0A=
  },=0A=
  bottom: {=0A=
    adjacency: 'beforeEnd',=0A=
    insert: function(element, node) {=0A=
      element.appendChild(node);=0A=
    }=0A=
  },=0A=
  after: {=0A=
    adjacency: 'afterEnd',=0A=
    insert: function(element, node) {=0A=
      element.parentNode.insertBefore(node, element.nextSibling);=0A=
    },=0A=
    initializeRange: function(element, range) {=0A=
      range.setStartAfter(element);=0A=
    }=0A=
  },=0A=
  tags: {=0A=
    TABLE:  ['<table>',                '</table>',                   1],=0A=
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],=0A=
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],=0A=
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],=0A=
    SELECT: ['<select>',               '</select>',                  1]=0A=
  }=0A=
};=0A=
=0A=
(function() {=0A=
  this.bottom.initializeRange =3D this.top.initializeRange;=0A=
  Object.extend(this.tags, {=0A=
    THEAD: this.tags.TBODY,=0A=
    TFOOT: this.tags.TBODY,=0A=
    TH:    this.tags.TD=0A=
  });=0A=
}).call(Element._insertionTranslations);=0A=
=0A=
Element.Methods.Simulated =3D {=0A=
  hasAttribute: function(element, attribute) {=0A=
    attribute =3D Element._attributeTranslations.has[attribute] || =
attribute;=0A=
    var node =3D $(element).getAttributeNode(attribute);=0A=
    return node && node.specified;=0A=
  }=0A=
};=0A=
=0A=
Element.Methods.ByTag =3D { };=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
if (!Prototype.BrowserFeatures.ElementExtensions &&=0A=
    document.createElement('div').__proto__) {=0A=
  window.HTMLElement =3D { };=0A=
  window.HTMLElement.prototype =3D =
document.createElement('div').__proto__;=0A=
  Prototype.BrowserFeatures.ElementExtensions =3D true;=0A=
}=0A=
=0A=
Element.extend =3D (function() {=0A=
  if (Prototype.BrowserFeatures.SpecificElementExtensions)=0A=
    return Prototype.K;=0A=
=0A=
  var Methods =3D { }, ByTag =3D Element.Methods.ByTag;=0A=
=0A=
  var extend =3D Object.extend(function(element) {=0A=
    if (!element || element._extendedByPrototype ||=0A=
        element.nodeType !=3D 1 || element =3D=3D window) return element;=0A=
=0A=
    var methods =3D Object.clone(Methods),=0A=
      tagName =3D element.tagName, property, value;=0A=
=0A=
    // extend methods for specific tags=0A=
    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);=0A=
=0A=
    for (property in methods) {=0A=
      value =3D methods[property];=0A=
      if (Object.isFunction(value) && !(property in element))=0A=
        element[property] =3D value.methodize();=0A=
    }=0A=
=0A=
    element._extendedByPrototype =3D Prototype.emptyFunction;=0A=
    return element;=0A=
=0A=
  }, {=0A=
    refresh: function() {=0A=
      // extend methods for all tags (Safari doesn't need this)=0A=
      if (!Prototype.BrowserFeatures.ElementExtensions) {=0A=
        Object.extend(Methods, Element.Methods);=0A=
        Object.extend(Methods, Element.Methods.Simulated);=0A=
      }=0A=
    }=0A=
  });=0A=
=0A=
  extend.refresh();=0A=
  return extend;=0A=
})();=0A=
=0A=
Element.hasAttribute =3D function(element, attribute) {=0A=
  if (element.hasAttribute) return element.hasAttribute(attribute);=0A=
  return Element.Methods.Simulated.hasAttribute(element, attribute);=0A=
};=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
  var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;=0A=
=0A=
  if (!methods) {=0A=
    Object.extend(Form, Form.Methods);=0A=
    Object.extend(Form.Element, Form.Element.Methods);=0A=
    Object.extend(Element.Methods.ByTag, {=0A=
      "FORM":     Object.clone(Form.Methods),=0A=
      "INPUT":    Object.clone(Form.Element.Methods),=0A=
      "SELECT":   Object.clone(Form.Element.Methods),=0A=
      "TEXTAREA": Object.clone(Form.Element.Methods)=0A=
    });=0A=
  }=0A=
=0A=
  if (arguments.length =3D=3D 2) {=0A=
    var tagName =3D methods;=0A=
    methods =3D arguments[1];=0A=
  }=0A=
=0A=
  if (!tagName) Object.extend(Element.Methods, methods || { });=0A=
  else {=0A=
    if (Object.isArray(tagName)) tagName.each(extend);=0A=
    else extend(tagName);=0A=
  }=0A=
=0A=
  function extend(tagName) {=0A=
    tagName =3D tagName.toUpperCase();=0A=
    if (!Element.Methods.ByTag[tagName])=0A=
      Element.Methods.ByTag[tagName] =3D { };=0A=
    Object.extend(Element.Methods.ByTag[tagName], methods);=0A=
  }=0A=
=0A=
  function copy(methods, destination, onlyIfAbsent) {=0A=
    onlyIfAbsent =3D onlyIfAbsent || false;=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (!Object.isFunction(value)) continue;=0A=
      if (!onlyIfAbsent || !(property in destination))=0A=
        destination[property] =3D value.methodize();=0A=
    }=0A=
  }=0A=
=0A=
  function findDOMClass(tagName) {=0A=
    var klass;=0A=
    var trans =3D {=0A=
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",=0A=
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": =
"DList",=0A=
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": =
"Heading",=0A=
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",=0A=
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", =
"CAPTION":=0A=
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":=0A=
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", =
"TR":=0A=
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":=0A=
      "FrameSet", "IFRAME": "IFrame"=0A=
    };=0A=
    if (trans[tagName]) klass =3D 'HTML' + trans[tagName] + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
    klass =3D 'HTML' + tagName.capitalize() + 'Element';=0A=
    if (window[klass]) return window[klass];=0A=
=0A=
    window[klass] =3D { };=0A=
    window[klass].prototype =3D =
document.createElement(tagName).__proto__;=0A=
    return window[klass];=0A=
  }=0A=
=0A=
  if (F.ElementExtensions) {=0A=
    copy(Element.Methods, HTMLElement.prototype);=0A=
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A=
  }=0A=
=0A=
  if (F.SpecificElementExtensions) {=0A=
    for (var tag in Element.Methods.ByTag) {=0A=
      var klass =3D findDOMClass(tag);=0A=
      if (Object.isUndefined(klass)) continue;=0A=
      copy(T[tag], klass.prototype);=0A=
    }=0A=
  }=0A=
=0A=
  Object.extend(Element, Element.Methods);=0A=
  delete Element.ByTag;=0A=
=0A=
  if (Element.extend.refresh) Element.extend.refresh();=0A=
  Element.cache =3D { };=0A=
};=0A=
=0A=
document.viewport =3D {=0A=
  getDimensions: function() {=0A=
    var dimensions =3D { };=0A=
    $w('width height').each(function(d) {=0A=
      var D =3D d.capitalize();=0A=
      dimensions[d] =3D self['inner' + D] ||=0A=
       (document.documentElement['client' + D] || document.body['client' =
+ D]);=0A=
    });=0A=
    return dimensions;=0A=
  },=0A=
=0A=
  getWidth: function() {=0A=
    return this.getDimensions().width;=0A=
  },=0A=
=0A=
  getHeight: function() {=0A=
    return this.getDimensions().height;=0A=
  },=0A=
=0A=
  getScrollOffsets: function() {=0A=
    return Element._returnOffset(=0A=
      window.pageXOffset || document.documentElement.scrollLeft || =
document.body.scrollLeft,=0A=
      window.pageYOffset || document.documentElement.scrollTop || =
document.body.scrollTop);=0A=
  }=0A=
};=0A=
/* Portions of the Selector class are derived from Jack Slocum=E2=80=99s =
DomQuery,=0A=
 * part of YUI-Ext version 0.40, distributed under the terms of an =
MIT-style=0A=
 * license.  Please see http://www.yui-ext.com/ for more information. */=0A=
=0A=
var Selector =3D Class.create({=0A=
  initialize: function(expression) {=0A=
    this.expression =3D expression.strip();=0A=
    this.compileMatcher();=0A=
  },=0A=
=0A=
  compileMatcher: function() {=0A=
    // Selectors with namespaced attributes can't use the XPath version=0A=
    if (Prototype.BrowserFeatures.XPath && =
!(/(\[[\w-]*?:|:checked)/).test(this.expression))=0A=
      return this.compileXPathMatcher();=0A=
=0A=
    var e =3D this.expression, ps =3D Selector.patterns, h =3D =
Selector.handlers,=0A=
        c =3D Selector.criteria, le, p, m;=0A=
=0A=
    if (Selector._cache[e]) {=0A=
      this.matcher =3D Selector._cache[e];=0A=
      return;=0A=
    }=0A=
=0A=
    this.matcher =3D ["this.matcher =3D function(root) {",=0A=
                    "var r =3D root, h =3D Selector.handlers, c =3D =
false, n;"];=0A=
=0A=
    while (e && le !=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        p =3D ps[i];=0A=
        if (m =3D e.match(p)) {=0A=
          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :=0A=
    	      new Template(c[i]).evaluate(m));=0A=
          e =3D e.replace(m[0], '');=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    this.matcher.push("return h.unique(n);\n}");=0A=
    eval(this.matcher.join('\n'));=0A=
    Selector._cache[this.expression] =3D this.matcher;=0A=
  },=0A=
=0A=
  compileXPathMatcher: function() {=0A=
    var e =3D this.expression, ps =3D Selector.patterns,=0A=
        x =3D Selector.xpath, le, m;=0A=
=0A=
    if (Selector._cache[e]) {=0A=
      this.xpath =3D Selector._cache[e]; return;=0A=
    }=0A=
=0A=
    this.matcher =3D ['.//*'];=0A=
    while (e && le !=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        if (m =3D e.match(ps[i])) {=0A=
          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :=0A=
            new Template(x[i]).evaluate(m));=0A=
          e =3D e.replace(m[0], '');=0A=
          break;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    this.xpath =3D this.matcher.join('');=0A=
    Selector._cache[this.expression] =3D this.xpath;=0A=
  },=0A=
=0A=
  findElements: function(root) {=0A=
    root =3D root || document;=0A=
    if (this.xpath) return document._getElementsByXPath(this.xpath, =
root);=0A=
    return this.matcher(root);=0A=
  },=0A=
=0A=
  match: function(element) {=0A=
    this.tokens =3D [];=0A=
=0A=
    var e =3D this.expression, ps =3D Selector.patterns, as =3D =
Selector.assertions;=0A=
    var le, p, m;=0A=
=0A=
    while (e && le !=3D=3D e && (/\S/).test(e)) {=0A=
      le =3D e;=0A=
      for (var i in ps) {=0A=
        p =3D ps[i];=0A=
        if (m =3D e.match(p)) {=0A=
          // use the Selector.assertions methods unless the selector=0A=
          // is too complex.=0A=
          if (as[i]) {=0A=
            this.tokens.push([i, Object.clone(m)]);=0A=
            e =3D e.replace(m[0], '');=0A=
          } else {=0A=
            // reluctantly do a document-wide search=0A=
            // and look for a match in the array=0A=
            return this.findElements(document).include(element);=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    var match =3D true, name, matches;=0A=
    for (var i =3D 0, token; token =3D this.tokens[i]; i++) {=0A=
      name =3D token[0], matches =3D token[1];=0A=
      if (!Selector.assertions[name](element, matches)) {=0A=
        match =3D false; break;=0A=
      }=0A=
    }=0A=
=0A=
    return match;=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return this.expression;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return "#<Selector:" + this.expression.inspect() + ">";=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Selector, {=0A=
  _cache: { },=0A=
=0A=
  xpath: {=0A=
    descendant:   "//*",=0A=
    child:        "/*",=0A=
    adjacent:     "/following-sibling::*[1]",=0A=
    laterSibling: '/following-sibling::*',=0A=
    tagName:      function(m) {=0A=
      if (m[1] =3D=3D '*') return '';=0A=
      return "[local-name()=3D'" + m[1].toLowerCase() +=0A=
             "' or local-name()=3D'" + m[1].toUpperCase() + "']";=0A=
    },=0A=
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",=0A=
    id:           "[@id=3D'#{1}']",=0A=
    attrPresence: "[@#{1}]",=0A=
    attr: function(m) {=0A=
      m[3] =3D m[5] || m[6];=0A=
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);=0A=
    },=0A=
    pseudo: function(m) {=0A=
      var h =3D Selector.xpath.pseudos[m[1]];=0A=
      if (!h) return '';=0A=
      if (Object.isFunction(h)) return h(m);=0A=
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);=0A=
    },=0A=
    operators: {=0A=
      '=3D':  "[@#{1}=3D'#{3}']",=0A=
      '!=3D': "[@#{1}!=3D'#{3}']",=0A=
      '^=3D': "[starts-with(@#{1}, '#{3}')]",=0A=
      '$=3D': "[substring(@#{1}, (string-length(@#{1}) - =
string-length('#{3}') + 1))=3D'#{3}']",=0A=
      '*=3D': "[contains(@#{1}, '#{3}')]",=0A=
      '~=3D': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",=0A=
      '|=3D': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"=0A=
    },=0A=
    pseudos: {=0A=
      'first-child': '[not(preceding-sibling::*)]',=0A=
      'last-child':  '[not(following-sibling::*)]',=0A=
      'only-child':  '[not(preceding-sibling::* or =
following-sibling::*)]',=0A=
      'empty':       "[count(*) =3D 0 and (count(text()) =3D 0 or =
translate(text(), ' \t\r\n', '') =3D '')]",=0A=
      'checked':     "[@checked]",=0A=
      'disabled':    "[@disabled]",=0A=
      'enabled':     "[not(@disabled)]",=0A=
      'not': function(m) {=0A=
        var e =3D m[6], p =3D Selector.patterns,=0A=
            x =3D Selector.xpath, le, m, v;=0A=
=0A=
        var exclusion =3D [];=0A=
        while (e && le !=3D e && (/\S/).test(e)) {=0A=
          le =3D e;=0A=
          for (var i in p) {=0A=
            if (m =3D e.match(p[i])) {=0A=
              v =3D Object.isFunction(x[i]) ? x[i](m) : new =
Template(x[i]).evaluate(m);=0A=
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");=0A=
              e =3D e.replace(m[0], '');=0A=
              break;=0A=
            }=0A=
          }=0A=
        }=0A=
        return "[not(" + exclusion.join(" and ") + ")]";=0A=
      },=0A=
      'nth-child':      function(m) {=0A=
        return =
Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);=0A=
      },=0A=
      'nth-last-child': function(m) {=0A=
        return =
Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);=0A=
      },=0A=
      'nth-of-type':    function(m) {=0A=
        return Selector.xpath.pseudos.nth("position() ", m);=0A=
      },=0A=
      'nth-last-of-type': function(m) {=0A=
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", =
m);=0A=
      },=0A=
      'first-of-type':  function(m) {=0A=
        m[6] =3D "1"; return Selector.xpath.pseudos['nth-of-type'](m);=0A=
      },=0A=
      'last-of-type':   function(m) {=0A=
        m[6] =3D "1"; return =
Selector.xpath.pseudos['nth-last-of-type'](m);=0A=
      },=0A=
      'only-of-type':   function(m) {=0A=
        var p =3D Selector.xpath.pseudos; return p['first-of-type'](m) + =
p['last-of-type'](m);=0A=
      },=0A=
      nth: function(fragment, m) {=0A=
        var mm, formula =3D m[6], predicate;=0A=
        if (formula =3D=3D 'even') formula =3D '2n+0';=0A=
        if (formula =3D=3D 'odd')  formula =3D '2n+1';=0A=
        if (mm =3D formula.match(/^(\d+)$/)) // digit only=0A=
          return '[' + fragment + "=3D " + mm[1] + ']';=0A=
        if (mm =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b=0A=
          if (mm[1] =3D=3D "-") mm[1] =3D -1;=0A=
          var a =3D mm[1] ? Number(mm[1]) : 1;=0A=
          var b =3D mm[2] ? Number(mm[2]) : 0;=0A=
          predicate =3D "[((#{fragment} - #{b}) mod #{a} =3D 0) and " +=0A=
          "((#{fragment} - #{b}) div #{a} >=3D 0)]";=0A=
          return new Template(predicate).evaluate({=0A=
            fragment: fragment, a: a, b: b });=0A=
        }=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  criteria: {=0A=
    tagName:      'n =3D h.tagName(n, r, "#{1}", c);   c =3D false;',=0A=
    className:    'n =3D h.className(n, r, "#{1}", c); c =3D false;',=0A=
    id:           'n =3D h.id(n, r, "#{1}", c);        c =3D false;',=0A=
    attrPresence: 'n =3D h.attrPresence(n, r, "#{1}"); c =3D false;',=0A=
    attr: function(m) {=0A=
      m[3] =3D (m[5] || m[6]);=0A=
      return new Template('n =3D h.attr(n, r, "#{1}", "#{3}", "#{2}"); c =
=3D false;').evaluate(m);=0A=
    },=0A=
    pseudo: function(m) {=0A=
      if (m[6]) m[6] =3D m[6].replace(/"/g, '\\"');=0A=
      return new Template('n =3D h.pseudo(n, "#{1}", "#{6}", r, c); c =
=3D false;').evaluate(m);=0A=
    },=0A=
    descendant:   'c =3D "descendant";',=0A=
    child:        'c =3D "child";',=0A=
    adjacent:     'c =3D "adjacent";',=0A=
    laterSibling: 'c =3D "laterSibling";'=0A=
  },=0A=
=0A=
  patterns: {=0A=
    // combinators must be listed first=0A=
    // (and descendant needs to be last combinator)=0A=
    laterSibling: /^\s*~\s*/,=0A=
    child:        /^\s*>\s*/,=0A=
    adjacent:     /^\s*\+\s*/,=0A=
    descendant:   /^\s/,=0A=
=0A=
    // selectors follow=0A=
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,=0A=
    id:           /^#([\w\-\*]+)(\b|$)/,=0A=
    className:    /^\.([\w\-\*]+)(\b|$)/,=0A=
    pseudo:       =
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis=
)abled|not)(\((.*?)\))?(\b|$|(?=3D\s)|(?=3D:))/,=0A=
    attrPresence: /^\[([\w]+)\]/,=0A=
    attr:         =
/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\4]*?)\4|([^'"][^=
\]]*?)))?\]/=0A=
  },=0A=
=0A=
  // for Selector.match and Element#match=0A=
  assertions: {=0A=
    tagName: function(element, matches) {=0A=
      return matches[1].toUpperCase() =3D=3D =
element.tagName.toUpperCase();=0A=
    },=0A=
=0A=
    className: function(element, matches) {=0A=
      return Element.hasClassName(element, matches[1]);=0A=
    },=0A=
=0A=
    id: function(element, matches) {=0A=
      return element.id =3D=3D=3D matches[1];=0A=
    },=0A=
=0A=
    attrPresence: function(element, matches) {=0A=
      return Element.hasAttribute(element, matches[1]);=0A=
    },=0A=
=0A=
    attr: function(element, matches) {=0A=
      var nodeValue =3D Element.readAttribute(element, matches[1]);=0A=
      return Selector.operators[matches[2]](nodeValue, matches[3]);=0A=
    }=0A=
  },=0A=
=0A=
  handlers: {=0A=
    // UTILITY FUNCTIONS=0A=
    // joins two collections=0A=
    concat: function(a, b) {=0A=
      for (var i =3D 0, node; node =3D b[i]; i++)=0A=
        a.push(node);=0A=
      return a;=0A=
    },=0A=
=0A=
    // marks an array of nodes for counting=0A=
    mark: function(nodes) {=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node._counted =3D true;=0A=
      return nodes;=0A=
    },=0A=
=0A=
    unmark: function(nodes) {=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        node._counted =3D undefined;=0A=
      return nodes;=0A=
    },=0A=
=0A=
    // mark each child node with its position (for nth calls)=0A=
    // "ofType" flag indicates whether we're indexing for nth-of-type=0A=
    // rather than nth-child=0A=
    index: function(parentNode, reverse, ofType) {=0A=
      parentNode._counted =3D true;=0A=
      if (reverse) {=0A=
        for (var nodes =3D parentNode.childNodes, i =3D nodes.length - =
1, j =3D 1; i >=3D 0; i--) {=0A=
          var node =3D nodes[i];=0A=
          if (node.nodeType =3D=3D 1 && (!ofType || node._counted)) =
node.nodeIndex =3D j++;=0A=
        }=0A=
      } else {=0A=
        for (var i =3D 0, j =3D 1, nodes =3D parentNode.childNodes; node =
=3D nodes[i]; i++)=0A=
          if (node.nodeType =3D=3D 1 && (!ofType || node._counted)) =
node.nodeIndex =3D j++;=0A=
      }=0A=
    },=0A=
=0A=
    // filters out duplicates and extends all nodes=0A=
    unique: function(nodes) {=0A=
      if (nodes.length =3D=3D 0) return nodes;=0A=
      var results =3D [], n;=0A=
      for (var i =3D 0, l =3D nodes.length; i < l; i++)=0A=
        if (!(n =3D nodes[i])._counted) {=0A=
          n._counted =3D true;=0A=
          results.push(Element.extend(n));=0A=
        }=0A=
      return Selector.handlers.unmark(results);=0A=
    },=0A=
=0A=
    // COMBINATOR FUNCTIONS=0A=
    descendant: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        h.concat(results, node.getElementsByTagName('*'));=0A=
      return results;=0A=
    },=0A=
=0A=
    child: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        for (var j =3D 0, children =3D [], child; child =3D =
node.childNodes[j]; j++)=0A=
          if (child.nodeType =3D=3D 1 && child.tagName !=3D '!') =
results.push(child);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    adjacent: function(nodes) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        var next =3D this.nextElementSibling(node);=0A=
        if (next) results.push(next);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    laterSibling: function(nodes) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        h.concat(results, Element.nextSiblings(node));=0A=
      return results;=0A=
    },=0A=
=0A=
    nextElementSibling: function(node) {=0A=
      while (node =3D node.nextSibling)=0A=
	      if (node.nodeType =3D=3D 1) return node;=0A=
      return null;=0A=
    },=0A=
=0A=
    previousElementSibling: function(node) {=0A=
      while (node =3D node.previousSibling)=0A=
        if (node.nodeType =3D=3D 1) return node;=0A=
      return null;=0A=
    },=0A=
=0A=
    // TOKEN FUNCTIONS=0A=
    tagName: function(nodes, root, tagName, combinator) {=0A=
      tagName =3D tagName.toUpperCase();=0A=
      var results =3D [], h =3D Selector.handlers;=0A=
      if (nodes) {=0A=
        if (combinator) {=0A=
          // fastlane for ordinary descendant combinators=0A=
          if (combinator =3D=3D "descendant") {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              h.concat(results, node.getElementsByTagName(tagName));=0A=
            return results;=0A=
          } else nodes =3D this[combinator](nodes);=0A=
          if (tagName =3D=3D "*") return nodes;=0A=
        }=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.tagName.toUpperCase() =3D=3D tagName) =
results.push(node);=0A=
        return results;=0A=
      } else return root.getElementsByTagName(tagName);=0A=
    },=0A=
=0A=
    id: function(nodes, root, id, combinator) {=0A=
      var targetNode =3D $(id), h =3D Selector.handlers;=0A=
      if (!targetNode) return [];=0A=
      if (!nodes && root =3D=3D document) return [targetNode];=0A=
      if (nodes) {=0A=
        if (combinator) {=0A=
          if (combinator =3D=3D 'child') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (targetNode.parentNode =3D=3D node) return [targetNode];=0A=
          } else if (combinator =3D=3D 'descendant') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (Element.descendantOf(targetNode, node)) return =
[targetNode];=0A=
          } else if (combinator =3D=3D 'adjacent') {=0A=
            for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
              if (Selector.handlers.previousElementSibling(targetNode) =
=3D=3D node)=0A=
                return [targetNode];=0A=
          } else nodes =3D h[combinator](nodes);=0A=
        }=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node =3D=3D targetNode) return [targetNode];=0A=
        return [];=0A=
      }=0A=
      return (targetNode && Element.descendantOf(targetNode, root)) ? =
[targetNode] : [];=0A=
    },=0A=
=0A=
    className: function(nodes, root, className, combinator) {=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      return Selector.handlers.byClassName(nodes, root, className);=0A=
    },=0A=
=0A=
    byClassName: function(nodes, root, className) {=0A=
      if (!nodes) nodes =3D Selector.handlers.descendant([root]);=0A=
      var needle =3D ' ' + className + ' ';=0A=
      for (var i =3D 0, results =3D [], node, nodeClassName; node =3D =
nodes[i]; i++) {=0A=
        nodeClassName =3D node.className;=0A=
        if (nodeClassName.length =3D=3D 0) continue;=0A=
        if (nodeClassName =3D=3D className || (' ' + nodeClassName + ' =
').include(needle))=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    attrPresence: function(nodes, root, attr) {=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      var results =3D [];=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
        if (Element.hasAttribute(node, attr)) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    attr: function(nodes, root, attr, value, operator) {=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      var handler =3D Selector.operators[operator], results =3D [];=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A=
        var nodeValue =3D Element.readAttribute(node, attr);=0A=
        if (nodeValue =3D=3D=3D null) continue;=0A=
        if (handler(nodeValue, value)) results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    pseudo: function(nodes, name, value, root, combinator) {=0A=
      if (nodes && combinator) nodes =3D this[combinator](nodes);=0A=
      if (!nodes) nodes =3D root.getElementsByTagName("*");=0A=
      return Selector.pseudos[name](nodes, value, root);=0A=
    }=0A=
  },=0A=
=0A=
  pseudos: {=0A=
    'first-child': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        if (Selector.handlers.previousElementSibling(node)) continue;=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
    'last-child': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        if (Selector.handlers.nextElementSibling(node)) continue;=0A=
          results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
    'only-child': function(nodes, value, root) {=0A=
      var h =3D Selector.handlers;=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!h.previousElementSibling(node) && =
!h.nextElementSibling(node))=0A=
          results.push(node);=0A=
      return results;=0A=
    },=0A=
    'nth-child':        function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root);=0A=
    },=0A=
    'nth-last-child':   function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, true);=0A=
    },=0A=
    'nth-of-type':      function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, false, true);=0A=
    },=0A=
    'nth-last-of-type': function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, formula, root, true, true);=0A=
    },=0A=
    'first-of-type':    function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, "1", root, false, true);=0A=
    },=0A=
    'last-of-type':     function(nodes, formula, root) {=0A=
      return Selector.pseudos.nth(nodes, "1", root, true, true);=0A=
    },=0A=
    'only-of-type':     function(nodes, formula, root) {=0A=
      var p =3D Selector.pseudos;=0A=
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), =
formula, root);=0A=
    },=0A=
=0A=
    // handles the an+b logic=0A=
    getIndices: function(a, b, total) {=0A=
      if (a =3D=3D 0) return b > 0 ? [b] : [];=0A=
      return $R(1, total).inject([], function(memo, i) {=0A=
        if (0 =3D=3D (i - b) % a && (i - b) / a >=3D 0) memo.push(i);=0A=
        return memo;=0A=
      });=0A=
    },=0A=
=0A=
    // handles nth(-last)-child, nth(-last)-of-type, and =
(first|last)-of-type=0A=
    nth: function(nodes, formula, root, reverse, ofType) {=0A=
      if (nodes.length =3D=3D 0) return [];=0A=
      if (formula =3D=3D 'even') formula =3D '2n+0';=0A=
      if (formula =3D=3D 'odd')  formula =3D '2n+1';=0A=
      var h =3D Selector.handlers, results =3D [], indexed =3D [], m;=0A=
      h.mark(nodes);=0A=
      for (var i =3D 0, node; node =3D nodes[i]; i++) {=0A=
        if (!node.parentNode._counted) {=0A=
          h.index(node.parentNode, reverse, ofType);=0A=
          indexed.push(node.parentNode);=0A=
        }=0A=
      }=0A=
      if (formula.match(/^\d+$/)) { // just a number=0A=
        formula =3D Number(formula);=0A=
        for (var i =3D 0, node; node =3D nodes[i]; i++)=0A=
          if (node.nodeIndex =3D=3D formula) results.push(node);=0A=
      } else if (m =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // =
an+b=0A=
        if (m[1] =3D=3D "-") m[1] =3D -1;=0A=
        var a =3D m[1] ? Number(m[1]) : 1;=0A=
        var b =3D m[2] ? Number(m[2]) : 0;=0A=
        var indices =3D Selector.pseudos.getIndices(a, b, nodes.length);=0A=
        for (var i =3D 0, node, l =3D indices.length; node =3D nodes[i]; =
i++) {=0A=
          for (var j =3D 0; j < l; j++)=0A=
            if (node.nodeIndex =3D=3D indices[j]) results.push(node);=0A=
        }=0A=
      }=0A=
      h.unmark(nodes);=0A=
      h.unmark(indexed);=0A=
      return results;=0A=
    },=0A=
=0A=
    'empty': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {=0A=
        // IE treats comments as element nodes=0A=
        if (node.tagName =3D=3D '!' || (node.firstChild && =
!node.innerHTML.match(/^\s*$/))) continue;=0A=
        results.push(node);=0A=
      }=0A=
      return results;=0A=
    },=0A=
=0A=
    'not': function(nodes, selector, root) {=0A=
      var h =3D Selector.handlers, selectorType, m;=0A=
      var exclusions =3D new Selector(selector).findElements(root);=0A=
      h.mark(exclusions);=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!node._counted) results.push(node);=0A=
      h.unmark(exclusions);=0A=
      return results;=0A=
    },=0A=
=0A=
    'enabled': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (!node.disabled) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    'disabled': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (node.disabled) results.push(node);=0A=
      return results;=0A=
    },=0A=
=0A=
    'checked': function(nodes, value, root) {=0A=
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)=0A=
        if (node.checked) results.push(node);=0A=
      return results;=0A=
    }=0A=
  },=0A=
=0A=
  operators: {=0A=
    '=3D':  function(nv, v) { return nv =3D=3D v; },=0A=
    '!=3D': function(nv, v) { return nv !=3D v; },=0A=
    '^=3D': function(nv, v) { return nv.startsWith(v); },=0A=
    '$=3D': function(nv, v) { return nv.endsWith(v); },=0A=
    '*=3D': function(nv, v) { return nv.include(v); },=0A=
    '~=3D': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + =
' '); },=0A=
    '|=3D': function(nv, v) { return ('-' + nv.toUpperCase() + =
'-').include('-' + v.toUpperCase() + '-'); }=0A=
  },=0A=
=0A=
  matchElements: function(elements, expression) {=0A=
    var matches =3D new Selector(expression).findElements(), h =3D =
Selector.handlers;=0A=
    h.mark(matches);=0A=
    for (var i =3D 0, results =3D [], element; element =3D elements[i]; =
i++)=0A=
      if (element._counted) results.push(element);=0A=
    h.unmark(matches);=0A=
    return results;=0A=
  },=0A=
=0A=
  findElement: function(elements, expression, index) {=0A=
    if (Object.isNumber(expression)) {=0A=
      index =3D expression; expression =3D false;=0A=
    }=0A=
    return Selector.matchElements(elements, expression || '*')[index || =
0];=0A=
  },=0A=
=0A=
  findChildElements: function(element, expressions) {=0A=
    var exprs =3D expressions.join(','), expressions =3D [];=0A=
    exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {=0A=
      expressions.push(m[1].strip());=0A=
    });=0A=
    var results =3D [], h =3D Selector.handlers;=0A=
    for (var i =3D 0, l =3D expressions.length, selector; i < l; i++) {=0A=
      selector =3D new Selector(expressions[i].strip());=0A=
      h.concat(results, selector.findElements(element));=0A=
    }=0A=
    return (l > 1) ? h.unique(results) : results;=0A=
  }=0A=
});=0A=
=0A=
function $$() {=0A=
  return Selector.findChildElements(document, $A(arguments));=0A=
}=0A=
var Form =3D {=0A=
  reset: function(form) {=0A=
    $(form).reset();=0A=
    return form;=0A=
  },=0A=
=0A=
  serializeElements: function(elements, options) {=0A=
    if (typeof options !=3D 'object') options =3D { hash: !!options };=0A=
    else if (options.hash =3D=3D=3D undefined) options.hash =3D true;=0A=
    var key, value, submitted =3D false, submit =3D options.submit;=0A=
=0A=
    var data =3D elements.inject({ }, function(result, element) {=0A=
      if (!element.disabled && element.name) {=0A=
        key =3D element.name; value =3D $(element).getValue();=0A=
        if (value !=3D null && (element.type !=3D 'submit' || =
(!submitted &&=0A=
            submit !=3D=3D false && (!submit || key =3D=3D submit) && =
(submitted =3D true)))) {=0A=
          if (key in result) {=0A=
            // a key is already present; construct an array of values=0A=
            if (!Object.isArray(result[key])) result[key] =3D =
[result[key]];=0A=
            result[key].push(value);=0A=
          }=0A=
          else result[key] =3D value;=0A=
        }=0A=
      }=0A=
      return result;=0A=
    });=0A=
=0A=
    return options.hash ? data : Object.toQueryString(data);=0A=
  }=0A=
};=0A=
=0A=
Form.Methods =3D {=0A=
  serialize: function(form, options) {=0A=
    return Form.serializeElements(Form.getElements(form), options);=0A=
  },=0A=
=0A=
  getElements: function(form) {=0A=
    return $A($(form).getElementsByTagName('*')).inject([],=0A=
      function(elements, child) {=0A=
        if (Form.Element.Serializers[child.tagName.toLowerCase()])=0A=
          elements.push(Element.extend(child));=0A=
        return elements;=0A=
      }=0A=
    );=0A=
  },=0A=
=0A=
  getInputs: function(form, typeName, name) {=0A=
    form =3D $(form);=0A=
    var inputs =3D form.getElementsByTagName('input');=0A=
=0A=
    if (!typeName && !name) return $A(inputs).map(Element.extend);=0A=
=0A=
    for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i =
< length; i++) {=0A=
      var input =3D inputs[i];=0A=
      if ((typeName && input.type !=3D typeName) || (name && input.name =
!=3D name))=0A=
        continue;=0A=
      matchingInputs.push(Element.extend(input));=0A=
    }=0A=
=0A=
    return matchingInputs;=0A=
  },=0A=
=0A=
  disable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('disable');=0A=
    return form;=0A=
  },=0A=
=0A=
  enable: function(form) {=0A=
    form =3D $(form);=0A=
    Form.getElements(form).invoke('enable');=0A=
    return form;=0A=
  },=0A=
=0A=
  findFirstElement: function(form) {=0A=
    var elements =3D $(form).getElements().findAll(function(element) {=0A=
      return 'hidden' !=3D element.type && !element.disabled;=0A=
    });=0A=
    var firstByIndex =3D elements.findAll(function(element) {=0A=
      return element.hasAttribute('tabIndex') && element.tabIndex >=3D 0;=0A=
    }).sortBy(function(element) { return element.tabIndex }).first();=0A=
=0A=
    return firstByIndex ? firstByIndex : elements.find(function(element) =
{=0A=
      return ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
    });=0A=
  },=0A=
=0A=
  focusFirstElement: function(form) {=0A=
    form =3D $(form);=0A=
    form.findFirstElement().activate();=0A=
    return form;=0A=
  },=0A=
=0A=
  request: function(form, options) {=0A=
    form =3D $(form), options =3D Object.clone(options || { });=0A=
=0A=
    var params =3D options.parameters, action =3D =
form.readAttribute('action') || '';=0A=
    if (action.blank()) action =3D window.location.href;=0A=
    options.parameters =3D form.serialize(true);=0A=
=0A=
    if (params) {=0A=
      if (Object.isString(params)) params =3D params.toQueryParams();=0A=
      Object.extend(options.parameters, params);=0A=
    }=0A=
=0A=
    if (form.hasAttribute('method') && !options.method)=0A=
      options.method =3D form.method;=0A=
=0A=
    return new Ajax.Request(action, options);=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element =3D {=0A=
  focus: function(element) {=0A=
    $(element).focus();=0A=
    return element;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    $(element).select();=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Form.Element.Methods =3D {=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element.disabled && element.name) {=0A=
      var value =3D element.getValue();=0A=
      if (value !=3D undefined) {=0A=
        var pair =3D { };=0A=
        pair[element.name] =3D value;=0A=
        return Object.toQueryString(pair);=0A=
      }=0A=
    }=0A=
    return '';=0A=
  },=0A=
=0A=
  getValue: function(element) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    return Form.Element.Serializers[method](element);=0A=
  },=0A=
=0A=
  setValue: function(element, value) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    Form.Element.Serializers[method](element, value);=0A=
    return element;=0A=
  },=0A=
=0A=
  clear: function(element) {=0A=
    $(element).value =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  present: function(element) {=0A=
    return $(element).value !=3D '';=0A=
  },=0A=
=0A=
  activate: function(element) {=0A=
    element =3D $(element);=0A=
    try {=0A=
      element.focus();=0A=
      if (element.select && (element.tagName.toLowerCase() !=3D 'input' =
||=0A=
          !['button', 'reset', 'submit'].include(element.type)))=0A=
        element.select();=0A=
    } catch (e) { }=0A=
    return element;=0A=
  },=0A=
=0A=
  disable: function(element) {=0A=
    element =3D $(element);=0A=
    element.blur();=0A=
    element.disabled =3D true;=0A=
    return element;=0A=
  },=0A=
=0A=
  enable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D false;=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Field =3D Form.Element;=0A=
var $F =3D Form.Element.Methods.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D {=0A=
  input: function(element, value) {=0A=
    switch (element.type.toLowerCase()) {=0A=
      case 'checkbox':=0A=
      case 'radio':=0A=
        return Form.Element.Serializers.inputSelector(element, value);=0A=
      default:=0A=
        return Form.Element.Serializers.textarea(element, value);=0A=
    }=0A=
  },=0A=
=0A=
  inputSelector: function(element, value) {=0A=
    if (value =3D=3D=3D undefined) return element.checked ? =
element.value : null;=0A=
    else element.checked =3D !!value;=0A=
  },=0A=
=0A=
  textarea: function(element, value) {=0A=
    if (value =3D=3D=3D undefined) return element.value;=0A=
    else element.value =3D value;=0A=
  },=0A=
=0A=
  select: function(element, index) {=0A=
    if (index =3D=3D=3D undefined)=0A=
      return this[element.type =3D=3D 'select-one' ?=0A=
        'selectOne' : 'selectMany'](element);=0A=
    else {=0A=
      var opt, value, single =3D !Object.isArray(index);=0A=
      for (var i =3D 0, length =3D element.length; i < length; i++) {=0A=
        opt =3D element.options[i];=0A=
        value =3D this.optionValue(opt);=0A=
        if (single) {=0A=
          if (value =3D=3D index) {=0A=
            opt.selected =3D true;=0A=
            return;=0A=
          }=0A=
        }=0A=
        else opt.selected =3D index.include(value);=0A=
      }=0A=
    }=0A=
  },=0A=
=0A=
  selectOne: function(element) {=0A=
    var index =3D element.selectedIndex;=0A=
    return index >=3D 0 ? this.optionValue(element.options[index]) : =
null;=0A=
  },=0A=
=0A=
  selectMany: function(element) {=0A=
    var values, length =3D element.length;=0A=
    if (!length) return null;=0A=
=0A=
    for (var i =3D 0, values =3D []; i < length; i++) {=0A=
      var opt =3D element.options[i];=0A=
      if (opt.selected) values.push(this.optionValue(opt));=0A=
    }=0A=
    return values;=0A=
  },=0A=
=0A=
  optionValue: function(opt) {=0A=
    // extend element because hasAttribute may not be native=0A=
    return Element.extend(opt).hasAttribute('value') ? opt.value : =
opt.text;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.TimedObserver =3D Class.create(PeriodicalExecuter, {=0A=
  initialize: function($super, element, frequency, callback) {=0A=
    $super(callback, frequency);=0A=
    this.element   =3D $(element);=0A=
    this.lastValue =3D this.getValue();=0A=
  },=0A=
=0A=
  execute: function() {=0A=
    var value =3D this.getValue();=0A=
    if (Object.isString(this.lastValue) && Object.isString(value) ?=0A=
        this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value)) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Form.Element.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.Observer =3D Class.create(Abstract.TimedObserver, {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D Class.create({=0A=
  initialize: function(element, callback) {=0A=
    this.element  =3D $(element);=0A=
    this.callback =3D callback;=0A=
=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, 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(Abstract.EventObserver, {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create(Abstract.EventObserver, {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
if (!window.Event) var Event =3D { };=0A=
=0A=
Object.extend(Event, {=0A=
  KEY_BACKSPACE: 8,=0A=
  KEY_TAB:       9,=0A=
  KEY_RETURN:   13,=0A=
  KEY_ESC:      27,=0A=
  KEY_LEFT:     37,=0A=
  KEY_UP:       38,=0A=
  KEY_RIGHT:    39,=0A=
  KEY_DOWN:     40,=0A=
  KEY_DELETE:   46,=0A=
  KEY_HOME:     36,=0A=
  KEY_END:      35,=0A=
  KEY_PAGEUP:   33,=0A=
  KEY_PAGEDOWN: 34,=0A=
  KEY_INSERT:   45,=0A=
=0A=
  cache: { },=0A=
=0A=
  relatedTarget: function(event) {=0A=
    var element;=0A=
    switch(event.type) {=0A=
      case 'mouseover': element =3D event.fromElement; break;=0A=
      case 'mouseout':  element =3D event.toElement;   break;=0A=
      default: return null;=0A=
    }=0A=
    return Element.extend(element);=0A=
  }=0A=
});=0A=
=0A=
Event.Methods =3D (function() {=0A=
  var isButton;=0A=
=0A=
  if (Prototype.Browser.IE) {=0A=
    var buttonMap =3D { 0: 1, 1: 4, 2: 2 };=0A=
    isButton =3D function(event, code) {=0A=
      return event.button =3D=3D buttonMap[code];=0A=
    };=0A=
=0A=
  } else if (Prototype.Browser.WebKit) {=0A=
    isButton =3D function(event, code) {=0A=
      switch (code) {=0A=
        case 0: return event.which =3D=3D 1 && !event.metaKey;=0A=
        case 1: return event.which =3D=3D 1 && event.metaKey;=0A=
        default: return false;=0A=
      }=0A=
    };=0A=
=0A=
  } else {=0A=
    isButton =3D function(event, code) {=0A=
      return event.which ? (event.which =3D=3D=3D code + 1) : =
(event.button =3D=3D=3D code);=0A=
    };=0A=
  }=0A=
=0A=
  return {=0A=
    isLeftClick:   function(event) { return isButton(event, 0) },=0A=
    isMiddleClick: function(event) { return isButton(event, 1) },=0A=
    isRightClick:  function(event) { return isButton(event, 2) },=0A=
=0A=
    element: function(event) {=0A=
      var node =3D Event.extend(event).target;=0A=
      return Element.extend(node.nodeType =3D=3D Node.TEXT_NODE ? =
node.parentNode : node);=0A=
    },=0A=
=0A=
    findElement: function(event, expression) {=0A=
      var element =3D Event.element(event);=0A=
      return element.match(expression) ? element : =
element.up(expression);=0A=
    },=0A=
=0A=
    pointer: function(event) {=0A=
      return {=0A=
        x: event.pageX || (event.clientX +=0A=
          (document.documentElement.scrollLeft || =
document.body.scrollLeft)),=0A=
        y: event.pageY || (event.clientY +=0A=
          (document.documentElement.scrollTop || =
document.body.scrollTop))=0A=
      };=0A=
    },=0A=
=0A=
    pointerX: function(event) { return Event.pointer(event).x },=0A=
    pointerY: function(event) { return Event.pointer(event).y },=0A=
=0A=
    stop: function(event) {=0A=
      Event.extend(event);=0A=
      event.preventDefault();=0A=
      event.stopPropagation();=0A=
      event.stopped =3D true;=0A=
    }=0A=
  };=0A=
})();=0A=
=0A=
Event.extend =3D (function() {=0A=
  var methods =3D Object.keys(Event.Methods).inject({ }, function(m, =
name) {=0A=
    m[name] =3D Event.Methods[name].methodize();=0A=
    return m;=0A=
  });=0A=
=0A=
  if (Prototype.Browser.IE) {=0A=
    Object.extend(methods, {=0A=
      stopPropagation: function() { this.cancelBubble =3D true },=0A=
      preventDefault:  function() { this.returnValue =3D false },=0A=
      inspect: function() { return "[object Event]" }=0A=
    });=0A=
=0A=
    return function(event) {=0A=
      if (!event) return false;=0A=
      if (event._extendedByPrototype) return event;=0A=
=0A=
      event._extendedByPrototype =3D Prototype.emptyFunction;=0A=
      var pointer =3D Event.pointer(event);=0A=
      Object.extend(event, {=0A=
        target: event.srcElement,=0A=
        relatedTarget: Event.relatedTarget(event),=0A=
        pageX:  pointer.x,=0A=
        pageY:  pointer.y=0A=
      });=0A=
      return Object.extend(event, methods);=0A=
    };=0A=
=0A=
  } else {=0A=
    Event.prototype =3D Event.prototype || =
document.createEvent("HTMLEvents").__proto__;=0A=
    Object.extend(Event.prototype, methods);=0A=
    return Prototype.K;=0A=
  }=0A=
})();=0A=
=0A=
Object.extend(Event, (function() {=0A=
  var cache =3D Event.cache;=0A=
=0A=
  function getEventID(element) {=0A=
    if (element._eventID) return element._eventID;=0A=
    arguments.callee.id =3D arguments.callee.id || 1;=0A=
    return element._eventID =3D ++arguments.callee.id;=0A=
  }=0A=
=0A=
  function getDOMEventName(eventName) {=0A=
    if (eventName && eventName.include(':')) return "dataavailable";=0A=
    return eventName;=0A=
  }=0A=
=0A=
  function getCacheForID(id) {=0A=
    return cache[id] =3D cache[id] || { };=0A=
  }=0A=
=0A=
  function getWrappersForEventName(id, eventName) {=0A=
    var c =3D getCacheForID(id);=0A=
    return c[eventName] =3D c[eventName] || [];=0A=
  }=0A=
=0A=
  function createWrapper(element, eventName, handler) {=0A=
    var id =3D getEventID(element);=0A=
    var c =3D getWrappersForEventName(id, eventName);=0A=
    if (c.pluck("handler").include(handler)) return false;=0A=
=0A=
    var wrapper =3D function(event) {=0A=
      if (!Event || !Event.extend ||=0A=
        (event.eventName && event.eventName !=3D eventName))=0A=
          return false;=0A=
=0A=
      Event.extend(event);=0A=
      handler.call(element, event)=0A=
    };=0A=
=0A=
    wrapper.handler =3D handler;=0A=
    c.push(wrapper);=0A=
    return wrapper;=0A=
  }=0A=
=0A=
  function findWrapper(id, eventName, handler) {=0A=
    var c =3D getWrappersForEventName(id, eventName);=0A=
    return c.find(function(wrapper) { return wrapper.handler =3D=3D =
handler });=0A=
  }=0A=
=0A=
  function destroyWrapper(id, eventName, handler) {=0A=
    var c =3D getCacheForID(id);=0A=
    if (!c[eventName]) return false;=0A=
    c[eventName] =3D c[eventName].without(findWrapper(id, eventName, =
handler));=0A=
  }=0A=
=0A=
  function destroyCache() {=0A=
    for (var id in cache)=0A=
      for (var eventName in cache[id])=0A=
        cache[id][eventName] =3D null;=0A=
  }=0A=
=0A=
  if (window.attachEvent) {=0A=
    window.attachEvent("onunload", destroyCache);=0A=
  }=0A=
=0A=
  return {=0A=
    observe: function(element, eventName, handler) {=0A=
      element =3D $(element);=0A=
      var name =3D getDOMEventName(eventName);=0A=
=0A=
      var wrapper =3D createWrapper(element, eventName, handler);=0A=
      if (!wrapper) return element;=0A=
=0A=
      if (element.addEventListener) {=0A=
        element.addEventListener(name, wrapper, false);=0A=
      } else {=0A=
        element.attachEvent("on" + name, wrapper);=0A=
      }=0A=
=0A=
      return element;=0A=
    },=0A=
=0A=
    stopObserving: function(element, eventName, handler) {=0A=
      element =3D $(element);=0A=
      var id =3D getEventID(element), name =3D =
getDOMEventName(eventName);=0A=
=0A=
      if (!handler && eventName) {=0A=
        getWrappersForEventName(id, eventName).each(function(wrapper) {=0A=
          element.stopObserving(eventName, wrapper.handler);=0A=
        });=0A=
        return element;=0A=
=0A=
      } else if (!eventName) {=0A=
        Object.keys(getCacheForID(id)).each(function(eventName) {=0A=
          element.stopObserving(eventName);=0A=
        });=0A=
        return element;=0A=
      }=0A=
=0A=
      var wrapper =3D findWrapper(id, eventName, handler);=0A=
      if (!wrapper) return element;=0A=
=0A=
      if (element.removeEventListener) {=0A=
        element.removeEventListener(name, wrapper, false);=0A=
      } else {=0A=
        element.detachEvent("on" + name, wrapper);=0A=
      }=0A=
=0A=
      destroyWrapper(id, eventName, handler);=0A=
=0A=
      return element;=0A=
    },=0A=
=0A=
    fire: function(element, eventName, memo) {=0A=
      element =3D $(element);=0A=
      if (element =3D=3D document && document.createEvent && =
!element.dispatchEvent)=0A=
        element =3D document.documentElement;=0A=
=0A=
      if (document.createEvent) {=0A=
        var event =3D document.createEvent("HTMLEvents");=0A=
        event.initEvent("dataavailable", true, true);=0A=
      } else {=0A=
        var event =3D document.createEventObject();=0A=
        event.eventType =3D "ondataavailable";=0A=
      }=0A=
=0A=
      event.eventName =3D eventName;=0A=
      event.memo =3D memo || { };=0A=
=0A=
      if (document.createEvent) {=0A=
        element.dispatchEvent(event);=0A=
      } else {=0A=
        element.fireEvent(event.eventType, event);=0A=
      }=0A=
=0A=
      return event;=0A=
    }=0A=
  };=0A=
})());=0A=
=0A=
Object.extend(Event, Event.Methods);=0A=
=0A=
Element.addMethods({=0A=
  fire:          Event.fire,=0A=
  observe:       Event.observe,=0A=
  stopObserving: Event.stopObserving=0A=
});=0A=
=0A=
Object.extend(document, {=0A=
  fire:          Element.Methods.fire.methodize(),=0A=
  observe:       Element.Methods.observe.methodize(),=0A=
  stopObserving: Element.Methods.stopObserving.methodize()=0A=
});=0A=
=0A=
(function() {=0A=
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,=0A=
     Matthias Miller, Dean Edwards and John Resig. */=0A=
=0A=
  var timer, fired =3D false;=0A=
=0A=
  function fireContentLoadedEvent() {=0A=
    if (fired) return;=0A=
    if (timer) window.clearInterval(timer);=0A=
    document.fire("dom:loaded");=0A=
    fired =3D true;=0A=
  }=0A=
=0A=
  if (document.addEventListener) {=0A=
    if (Prototype.Browser.WebKit) {=0A=
      timer =3D window.setInterval(function() {=0A=
        if (/loaded|complete/.test(document.readyState))=0A=
          fireContentLoadedEvent();=0A=
      }, 0);=0A=
=0A=
      Event.observe(window, "load", fireContentLoadedEvent);=0A=
=0A=
    } else {=0A=
      document.addEventListener("DOMContentLoaded",=0A=
        fireContentLoadedEvent, false);=0A=
    }=0A=
=0A=
  } else {=0A=
    document.write("<script id=3D__onDOMContentLoaded defer =
src=3D//:><\/script>");=0A=
    $("__onDOMContentLoaded").onreadystatechange =3D function() {=0A=
      if (this.readyState =3D=3D "complete") {=0A=
        this.onreadystatechange =3D null;=0A=
        fireContentLoadedEvent();=0A=
      }=0A=
    };=0A=
  }=0A=
})();=0A=
/*------------------------------- DEPRECATED =
-------------------------------*/=0A=
=0A=
Hash.toQueryString =3D Object.toQueryString;=0A=
=0A=
var Toggle =3D { display: Element.toggle };=0A=
=0A=
Element.Methods.childOf =3D Element.Methods.descendantOf;=0A=
=0A=
var Insertion =3D {=0A=
  Before: function(element, content) {=0A=
    return Element.insert(element, {before:content});=0A=
  },=0A=
=0A=
  Top: function(element, content) {=0A=
    return Element.insert(element, {top:content});=0A=
  },=0A=
=0A=
  Bottom: function(element, content) {=0A=
    return Element.insert(element, {bottom:content});=0A=
  },=0A=
=0A=
  After: function(element, content) {=0A=
    return Element.insert(element, {after:content});=0A=
  }=0A=
};=0A=
=0A=
var $continue =3D new Error('"throw $continue" is deprecated, use =
"return" instead');=0A=
=0A=
// This should be moved to script.aculo.us; notice the deprecated methods=0A=
// further below, that map to the newer Element methods.=0A=
var Position =3D {=0A=
  // set to true if needed, warning: firefox performance problems=0A=
  // NOT neeeded for page scrolling, only if draggable contained in=0A=
  // scrollable elements=0A=
  includeScrollOffsets: false,=0A=
=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=
  // caches x/y coordinate pair to use with overlap=0A=
  within: function(element, x, y) {=0A=
    if (this.includeScrollOffsets)=0A=
      return this.withinIncludingScrolloffsets(element, x, y);=0A=
    this.xcomp =3D x;=0A=
    this.ycomp =3D y;=0A=
    this.offset =3D Element.cumulativeOffset(element);=0A=
=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 Element.cumulativeScrollOffset(element);=0A=
=0A=
    this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
    this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
    this.offset =3D Element.cumulativeOffset(element);=0A=
=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=
  // Deprecation layer -- use newer Element methods now (1.5.2).=0A=
=0A=
  cumulativeOffset: Element.Methods.cumulativeOffset,=0A=
=0A=
  positionedOffset: Element.Methods.positionedOffset,=0A=
=0A=
  absolutize: function(element) {=0A=
    Position.prepare();=0A=
    return Element.absolutize(element);=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    Position.prepare();=0A=
    return Element.relativize(element);=0A=
  },=0A=
=0A=
  realOffset: Element.Methods.cumulativeScrollOffset,=0A=
=0A=
  offsetParent: Element.Methods.getOffsetParent,=0A=
=0A=
  page: Element.Methods.viewportOffset,=0A=
=0A=
  clone: function(source, target, options) {=0A=
    options =3D options || { };=0A=
    return Element.clonePosition(target, source, options);=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!document.getElementsByClassName) document.getElementsByClassName =
=3D function(instanceMethods){=0A=
  function iter(name) {=0A=
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' =
" + name + " ')]";=0A=
  }=0A=
=0A=
  instanceMethods.getElementsByClassName =3D =
Prototype.BrowserFeatures.XPath ?=0A=
  function(element, className) {=0A=
    className =3D className.toString().strip();=0A=
    var cond =3D /\s/.test(className) ? $w(className).map(iter).join('') =
: iter(className);=0A=
    return cond ? document._getElementsByXPath('.//*' + cond, element) : =
[];=0A=
  } : function(element, className) {=0A=
    className =3D className.toString().strip();=0A=
    var elements =3D [], classNames =3D (/\s/.test(className) ? =
$w(className) : null);=0A=
    if (!classNames && !className) return elements;=0A=
=0A=
    var nodes =3D $(element).getElementsByTagName('*');=0A=
    className =3D ' ' + className + ' ';=0A=
=0A=
    for (var i =3D 0, child, cn; child =3D nodes[i]; i++) {=0A=
      if (child.className && (cn =3D ' ' + child.className + ' ') && =
(cn.include(className) ||=0A=
          (classNames && classNames.all(function(name) {=0A=
            return !name.toString().blank() && cn.include(' ' + name + ' =
');=0A=
          }))))=0A=
        elements.push(Element.extend(child));=0A=
    }=0A=
    return elements;=0A=
  };=0A=
=0A=
  return function(className, parentElement) {=0A=
    return $(parentElement || =
document.body).getElementsByClassName(className);=0A=
  };=0A=
}(Element.Methods);=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=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.addMethods();=0A=
=0A=
/* --- End prototype.js --- */=0A=
/* --- Start scriptaculous.js --- */=0A=
=0A=
// script.aculo.us scriptaculous.js v1.8.0, Tue Nov 06 15:01:40 +0300 =
2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// =0A=
// Permission is hereby granted, free of charge, to any person obtaining=0A=
// a copy of this software and associated documentation files (the=0A=
// "Software"), to deal in the Software without restriction, including=0A=
// without limitation the rights to use, copy, modify, merge, publish,=0A=
// distribute, sublicense, and/or sell copies of the Software, and to=0A=
// permit persons to whom the Software is furnished to do so, subject to=0A=
// the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be=0A=
// included in all copies or substantial portions of the Software.=0A=
//=0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A=
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A=
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A=
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A=
//=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
var Scriptaculous =3D {=0A=
  Version: '1.8.0',=0A=
  require: function(libraryName) {=0A=
    // inserting via DOM fails in Safari 2.0, so brute force approach=0A=
    document.write('<script type=3D"text/javascript" =
src=3D"'+libraryName+'"><\/script>');=0A=
  },=0A=
  REQUIRED_PROTOTYPE: '1.6.0',=0A=
  load: function() {=0A=
    function convertVersionString(versionString){=0A=
      var r =3D versionString.split('.');=0A=
      return parseInt(r[0])*100000 + parseInt(r[1])*1000 + =
parseInt(r[2]);=0A=
    }=0A=
 =0A=
    if((typeof Prototype=3D=3D'undefined') || =0A=
       (typeof Element =3D=3D 'undefined') || =0A=
       (typeof Element.Methods=3D=3D'undefined') ||=0A=
       (convertVersionString(Prototype.Version) < =0A=
        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))=0A=
       throw("script.aculo.us requires the Prototype JavaScript =
framework >=3D " +=0A=
        Scriptaculous.REQUIRED_PROTOTYPE);=0A=
    =0A=
    $A(document.getElementsByTagName("script")).findAll( function(s) {=0A=
      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))=0A=
    }).each( function(s) {=0A=
      var path =3D s.src.replace(/scriptaculous\.js(\?.*)?$/,'');=0A=
      var includes =3D s.src.match(/\?.*load=3D([a-z,]*)/);=0A=
      (includes ? includes[1] : =
'builder,effects,dragdrop,controls,slider,sound').split(',').each(=0A=
       function(include) { Scriptaculous.require(path+include+'.js') });=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
Scriptaculous.load();=0A=
=0A=
/* --- End scriptaculous.js --- */=0A=
/* --- Start effects.js --- */=0A=
=0A=
// script.aculo.us effects.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// Contributors:=0A=
//  Justin Palmer (http://encytemedia.com/)=0A=
//  Mark Pilgrim (http://diveintomark.org/)=0A=
//  Martin Bialasinki=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: =
http://script.aculo.us/ =0A=
=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 (Prototype.Browser.WebKit) window.scrollBy(0,0);=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=
var Effect =3D {=0A=
  _elementDoesNotExistError: {=0A=
    name: 'ElementDoesNotExistError',=0A=
    message: 'The specified DOM element does not exist, but is required =
for this effect to operate'=0A=
  },=0A=
  Transitions: {=0A=
    linear: Prototype.K,=0A=
    sinoidal: function(pos) {=0A=
      return (-Math.cos(pos*Math.PI)/2) + 0.5;=0A=
    },=0A=
    reverse: function(pos) {=0A=
      return 1-pos;=0A=
    },=0A=
    flicker: function(pos) {=0A=
      var pos =3D ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;=0A=
      return pos > 1 ? 1 : pos;=0A=
    },=0A=
    wobble: function(pos) {=0A=
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;=0A=
    },=0A=
    pulse: function(pos, pulses) { =0A=
      pulses =3D pulses || 5; =0A=
      return (=0A=
        ((pos % (1/pulses)) * pulses).round() =3D=3D 0 ? =0A=
              ((pos * pulses * 2) - (pos * pulses * 2).floor()) : =0A=
          1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())=0A=
        );=0A=
    },=0A=
    spring: function(pos) { =0A=
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); =0A=
    },=0A=
    none: function(pos) {=0A=
      return 0;=0A=
    },=0A=
    full: function(pos) {=0A=
      return 1;=0A=
    }=0A=
  },=0A=
  DefaultOptions: {=0A=
    duration:   1.0,   // seconds=0A=
    fps:        100,   // 100=3D assume 66fps max.=0A=
    sync:       false, // true for combining=0A=
    from:       0.0,=0A=
    to:         1.0,=0A=
    delay:      0.0,=0A=
    queue:      'parallel'=0A=
  },=0A=
  tagifyText: function(element) {=0A=
    var tagifyStyle =3D 'position:relative';=0A=
    if (Prototype.Browser.IE) tagifyStyle +=3D ';zoom:1';=0A=
    =0A=
    element =3D $(element);=0A=
    $A(element.childNodes).each( function(child) {=0A=
      if (child.nodeType=3D=3D3) {=0A=
        child.nodeValue.toArray().each( function(character) {=0A=
          element.insertBefore(=0A=
            new Element('span', {style: tagifyStyle}).update(=0A=
              character =3D=3D ' ' ? String.fromCharCode(160) : =
character), =0A=
              child);=0A=
        });=0A=
        Element.remove(child);=0A=
      }=0A=
    });=0A=
  },=0A=
  multiple: function(element, effect) {=0A=
    var elements;=0A=
    if (((typeof element =3D=3D 'object') || =0A=
        Object.isFunction(element)) && =0A=
       (element.length))=0A=
      elements =3D element;=0A=
    else=0A=
      elements =3D $(element).childNodes;=0A=
      =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=
Effect.DefaultOptions.transition =3D Effect.Transitions.sinoidal;=0A=
=0A=
/* ------------- core effects ------------- */=0A=
=0A=
Effect.ScopedQueue =3D Class.create(Enumerable, {=0A=
  initialize: function() {=0A=
    this.effects  =3D [];=0A=
    this.interval =3D null;    =0A=
  },=0A=
  _each: function(iterator) {=0A=
    this.effects._each(iterator);=0A=
  },=0A=
  add: function(effect) {=0A=
    var timestamp =3D new Date().getTime();=0A=
    =0A=
    var position =3D Object.isString(effect.options.queue) ? =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), 15);=0A=
  },=0A=
  remove: function(effect) {=0A=
    this.effects =3D this.effects.reject(function(e) { return =
e=3D=3Deffect });=0A=
    if (this.effects.length =3D=3D 0) {=0A=
      clearInterval(this.interval);=0A=
      this.interval =3D null;=0A=
    }=0A=
  },=0A=
  loop: function() {=0A=
    var timePos =3D new Date().getTime();=0A=
    for(var i=3D0, len=3Dthis.effects.length;i<len;i++) =0A=
      this.effects[i] && this.effects[i].loop(timePos);=0A=
  }=0A=
});=0A=
=0A=
Effect.Queues =3D {=0A=
  instances: $H(),=0A=
  get: function(queueName) {=0A=
    if (!Object.isString(queueName)) return queueName;=0A=
    =0A=
    return this.instances.get(queueName) ||=0A=
      this.instances.set(queueName, new Effect.ScopedQueue());=0A=
  }=0A=
};=0A=
Effect.Queue =3D Effect.Queues.get('global');=0A=
=0A=
Effect.Base =3D Class.create({=0A=
  position: null,=0A=
  start: function(options) {=0A=
    function codeForEvent(options,eventName){=0A=
      return (=0A=
        (options[eventName+'Internal'] ? =
'this.options.'+eventName+'Internal(this);' : '') +=0A=
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')=0A=
      );=0A=
    }=0A=
    if (options && options.transition =3D=3D=3D false) =
options.transition =3D Effect.Transitions.linear;=0A=
    this.options      =3D Object.extend(Object.extend({ =
},Effect.DefaultOptions), options || { });=0A=
    this.currentFrame =3D 0;=0A=
    this.state        =3D 'idle';=0A=
    this.startOn      =3D this.options.delay*1000;=0A=
    this.finishOn     =3D this.startOn+(this.options.duration*1000);=0A=
    this.fromToDelta  =3D this.options.to-this.options.from;=0A=
    this.totalTime    =3D this.finishOn-this.startOn;=0A=
    this.totalFrames  =3D this.options.fps*this.options.duration;=0A=
    =0A=
    eval('this.render =3D function(pos){ '+=0A=
      'if (this.state=3D=3D"idle"){this.state=3D"running";'+=0A=
      codeForEvent(this.options,'beforeSetup')+=0A=
      (this.setup ? 'this.setup();':'')+ =0A=
      codeForEvent(this.options,'afterSetup')+=0A=
      '};if (this.state=3D=3D"running"){'+=0A=
      =
'pos=3Dthis.options.transition(pos)*'+this.fromToDelta+'+'+this.options.f=
rom+';'+=0A=
      'this.position=3Dpos;'+=0A=
      codeForEvent(this.options,'beforeUpdate')+=0A=
      (this.update ? 'this.update(pos);':'')+=0A=
      codeForEvent(this.options,'afterUpdate')+=0A=
      '}}');=0A=
    =0A=
    this.event('beforeStart');=0A=
    if (!this.options.sync)=0A=
      Effect.Queues.get(Object.isString(this.options.queue) ? =0A=
        'global' : this.options.queue.scope).add(this);=0A=
  },=0A=
  loop: function(timePos) {=0A=
    if (timePos >=3D this.startOn) {=0A=
      if (timePos >=3D this.finishOn) {=0A=
        this.render(1.0);=0A=
        this.cancel();=0A=
        this.event('beforeFinish');=0A=
        if (this.finish) this.finish(); =0A=
        this.event('afterFinish');=0A=
        return;  =0A=
      }=0A=
      var pos   =3D (timePos - this.startOn) / this.totalTime,=0A=
          frame =3D (pos * this.totalFrames).round();=0A=
      if (frame > this.currentFrame) {=0A=
        this.render(pos);=0A=
        this.currentFrame =3D frame;=0A=
      }=0A=
    }=0A=
  },=0A=
  cancel: function() {=0A=
    if (!this.options.sync)=0A=
      Effect.Queues.get(Object.isString(this.options.queue) ? =0A=
        'global' : this.options.queue.scope).remove(this);=0A=
    this.state =3D 'finished';=0A=
  },=0A=
  event: function(eventName) {=0A=
    if (this.options[eventName + 'Internal']) this.options[eventName + =
'Internal'](this);=0A=
    if (this.options[eventName]) this.options[eventName](this);=0A=
  },=0A=
  inspect: function() {=0A=
    var data =3D $H();=0A=
    for(property in this)=0A=
      if (!Object.isFunction(this[property])) data.set(property, =
this[property]);=0A=
    return '#<Effect:' + data.inspect() + ',options:' + =
$H(this.options).inspect() + '>';=0A=
  }=0A=
});=0A=
=0A=
Effect.Parallel =3D Class.create(Effect.Base, {=0A=
  initialize: function(effects) {=0A=
    this.effects =3D effects || [];=0A=
    this.start(arguments[1]);=0A=
  },=0A=
  update: function(position) {=0A=
    this.effects.invoke('render', position);=0A=
  },=0A=
  finish: function(position) {=0A=
    this.effects.each( function(effect) {=0A=
      effect.render(1.0);=0A=
      effect.cancel();=0A=
      effect.event('beforeFinish');=0A=
      if (effect.finish) effect.finish(position);=0A=
      effect.event('afterFinish');=0A=
    });=0A=
  }=0A=
});=0A=
=0A=
Effect.Tween =3D Class.create(Effect.Base, {=0A=
  initialize: function(object, from, to) {=0A=
    object =3D Object.isString(object) ? $(object) : object;=0A=
    var args =3D $A(arguments), method =3D args.last(), =0A=
      options =3D args.length =3D=3D 5 ? args[3] : null;=0A=
    this.method =3D Object.isFunction(method) ? method.bind(object) :=0A=
      Object.isFunction(object[method]) ? object[method].bind(object) : =0A=
      function(value) { object[method] =3D value };=0A=
    this.start(Object.extend({ from: from, to: to }, options || { }));=0A=
  },=0A=
  update: function(position) {=0A=
    this.method(position);=0A=
  }=0A=
});=0A=
=0A=
Effect.Event =3D Class.create(Effect.Base, {=0A=
  initialize: function() {=0A=
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));=0A=
  },=0A=
  update: Prototype.emptyFunction=0A=
});=0A=
=0A=
Effect.Opacity =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    // make this work on IE on elements without 'layout'=0A=
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))=0A=
      this.element.setStyle({zoom: 1});=0A=
    var options =3D Object.extend({=0A=
      from: this.element.getOpacity() || 0.0,=0A=
      to:   1.0=0A=
    }, arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setOpacity(position);=0A=
  }=0A=
});=0A=
=0A=
Effect.Move =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      x:    0,=0A=
      y:    0,=0A=
      mode: 'relative'=0A=
    }, arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    this.element.makePositioned();=0A=
    this.originalLeft =3D parseFloat(this.element.getStyle('left') || =
'0');=0A=
    this.originalTop  =3D parseFloat(this.element.getStyle('top')  || =
'0');=0A=
    if (this.options.mode =3D=3D 'absolute') {=0A=
      this.options.x =3D this.options.x - this.originalLeft;=0A=
      this.options.y =3D this.options.y - this.originalTop;=0A=
    }=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setStyle({=0A=
      left: (this.options.x  * position + this.originalLeft).round() + =
'px',=0A=
      top:  (this.options.y  * position + this.originalTop).round()  + =
'px'=0A=
    });=0A=
  }=0A=
});=0A=
=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(Effect.Base, {=0A=
  initialize: function(element, percent) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      scaleX: true,=0A=
      scaleY: true,=0A=
      scaleContent: true,=0A=
      scaleFromCenter: false,=0A=
      scaleMode: 'box',        // 'box' or 'contents' or { } with =
provided values=0A=
      scaleFrom: 100.0,=0A=
      scaleTo:   percent=0A=
    }, arguments[2] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    this.restoreAfterFinish =3D this.options.restoreAfterFinish || false;=0A=
    this.elementPositioning =3D this.element.getStyle('position');=0A=
    =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 width.round() + 'px';=0A=
    if (this.options.scaleY) d.height =3D height.round() + 'px';=0A=
    if (this.options.scaleFromCenter) {=0A=
      var topd  =3D (height - this.dims[0])/2;=0A=
      var leftd =3D (width  - this.dims[1])/2;=0A=
      if (this.elementPositioning =3D=3D 'absolute') {=0A=
        if (this.options.scaleY) d.top =3D this.originalTop-topd + 'px';=0A=
        if (this.options.scaleX) d.left =3D this.originalLeft-leftd + =
'px';=0A=
      } else {=0A=
        if (this.options.scaleY) d.top =3D -topd + 'px';=0A=
        if (this.options.scaleX) d.left =3D -leftd + 'px';=0A=
      }=0A=
    }=0A=
    this.element.setStyle(d);=0A=
  }=0A=
});=0A=
=0A=
Effect.Highlight =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({ startcolor: '#ffff99' }, =
arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    // Prevent executing on elements not in the layout flow=0A=
    if (this.element.getStyle('display')=3D=3D'none') { this.cancel(); =
return; }=0A=
    // Disable background image during the effect=0A=
    this.oldStyle =3D { };=0A=
    if (!this.options.keepBackgroundImage) {=0A=
      this.oldStyle.backgroundImage =3D =
this.element.getStyle('background-image');=0A=
      this.element.setStyle({backgroundImage: 'none'});=0A=
    }=0A=
    if (!this.options.endcolor)=0A=
      this.options.endcolor =3D =
this.element.getStyle('background-color').parseColor('#ffffff');=0A=
    if (!this.options.restorecolor)=0A=
      this.options.restorecolor =3D =
this.element.getStyle('background-color');=0A=
    // init color calculations=0A=
    this._base  =3D $R(0,2).map(function(i){ return =
parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));=0A=
    this._delta =3D $R(0,2).map(function(i){ return =
parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] =
}.bind(this));=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setStyle({backgroundColor: =
$R(0,2).inject('#',function(m,v,i){=0A=
      return =
m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); =
}.bind(this)) });=0A=
  },=0A=
  finish: function() {=0A=
    this.element.setStyle(Object.extend(this.oldStyle, {=0A=
      backgroundColor: this.options.restorecolor=0A=
    }));=0A=
  }=0A=
});=0A=
=0A=
Effect.ScrollTo =3D function(element) {=0A=
  var options =3D arguments[1] || { },=0A=
    scrollOffsets =3D document.viewport.getScrollOffsets(),=0A=
    elementOffsets =3D $(element).cumulativeOffset(),=0A=
    max =3D (window.height || document.body.scrollHeight) - =
document.viewport.getHeight();  =0A=
=0A=
  if (options.offset) elementOffsets[1] +=3D options.offset;=0A=
=0A=
  return new Effect.Tween(null,=0A=
    scrollOffsets.top,=0A=
    elementOffsets[1] > max ? max : elementOffsets[1],=0A=
    options,=0A=
    function(p){ scrollTo(scrollOffsets.left, p.round()) }=0A=
  );=0A=
};=0A=
=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=
    }=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 options =3D Object.extend({=0A=
    distance: 20,=0A=
    duration: 0.5=0A=
  }, arguments[1] || {});=0A=
  var distance =3D parseFloat(options.distance);=0A=
  var split =3D parseFloat(options.duration) / 10.0;=0A=
  var oldStyle =3D {=0A=
    top: element.getStyle('top'),=0A=
    left: element.getStyle('left') };=0A=
    return new Effect.Move(element,=0A=
      { x:  distance, y: 0, duration: split, afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance, y: 0, duration: split, afterFinishInternal: =
function(effect) {=0A=
        effect.element.undoPositioned().setStyle(oldStyle);=0A=
  }}) }}) }}) }}) }}) }});=0A=
};=0A=
=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=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, window.opera ? 0 : 1,=0A=
   Object.extend({ scaleContent: false, =0A=
    scaleX: false, =0A=
    scaleMode: 'box',=0A=
    scaleFrom: 100,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makePositioned();=0A=
      effect.element.down().makePositioned();=0A=
      if (window.opera) effect.element.setStyle({top: ''});=0A=
      effect.element.makeClipping().show();=0A=
    },  =0A=
    afterUpdateInternal: function(effect) {=0A=
      effect.element.down().setStyle({bottom:=0A=
        (effect.dims[0] - effect.element.clientHeight) + 'px' });=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.hide().undoClipping().undoPositioned();=0A=
      effect.element.down().undoPositioned().setStyle({bottom: =
oldInnerBottom});=0A=
    }=0A=
   }, arguments[1] || { })=0A=
  );=0A=
};=0A=
=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(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      style: { }=0A=
    }, arguments[1] || { });=0A=
    =0A=
    if (!Object.isString(options.style)) this.style =3D =
$H(options.style);=0A=
    else {=0A=
      if (options.style.include(':'))=0A=
        this.style =3D options.style.parseStyle();=0A=
      else {=0A=
        this.element.addClassName(options.style);=0A=
        this.style =3D $H(this.element.getStyles());=0A=
        this.element.removeClassName(options.style);=0A=
        var css =3D this.element.getStyles();=0A=
        this.style =3D this.style.reject(function(style) {=0A=
          return style.value =3D=3D css[style.key];=0A=
        });=0A=
        options.afterFinishInternal =3D function(effect) {=0A=
          effect.element.addClassName(effect.options.style);=0A=
          effect.transforms.each(function(transform) {=0A=
            effect.element.style[transform.style] =3D '';=0A=
          });=0A=
        }=0A=
      }=0A=
    }=0A=
    this.start(options);=0A=
  },=0A=
  =0A=
  setup: function(){=0A=
    function parseColor(color){=0A=
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) =
color =3D '#ffffff';=0A=
      color =3D color.parseColor();=0A=
      return $R(0,2).map(function(i){=0A=
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) =0A=
      });=0A=
    }=0A=
    this.transforms =3D this.style.map(function(pair){=0A=
      var property =3D pair[0], value =3D pair[1], unit =3D null;=0A=
=0A=
      if (value.parseColor('#zzzzzz') !=3D '#zzzzzz') {=0A=
        value =3D value.parseColor();=0A=
        unit  =3D 'color';=0A=
      } else if (property =3D=3D 'opacity') {=0A=
        value =3D parseFloat(value);=0A=
        if (Prototype.Browser.IE && =
(!this.element.currentStyle.hasLayout))=0A=
          this.element.setStyle({zoom: 1});=0A=
      } else if (Element.CSS_LENGTH.test(value)) {=0A=
          var components =3D value.match(/^([\+\-]?[0-9\.]+)(.*)$/);=0A=
          value =3D parseFloat(components[1]);=0A=
          unit =3D (components.length =3D=3D 3) ? components[2] : null;=0A=
      }=0A=
=0A=
      var originalValue =3D this.element.getStyle(property);=0A=
      return { =0A=
        style: property.camelize(), =0A=
        originalValue: unit=3D=3D'color' ? parseColor(originalValue) : =
parseFloat(originalValue || 0), =0A=
        targetValue: unit=3D=3D'color' ? parseColor(value) : value,=0A=
        unit: unit=0A=
      };=0A=
    }.bind(this)).reject(function(transform){=0A=
      return (=0A=
        (transform.originalValue =3D=3D transform.targetValue) ||=0A=
        (=0A=
          transform.unit !=3D 'color' &&=0A=
          (isNaN(transform.originalValue) || =
isNaN(transform.targetValue))=0A=
        )=0A=
      )=0A=
    });=0A=
  },=0A=
  update: function(position) {=0A=
    var style =3D { }, transform, i =3D this.transforms.length;=0A=
    while(i--)=0A=
      style[(transform =3D this.transforms[i]).style] =3D =0A=
        transform.unit=3D=3D'color' ? '#'+=0A=
          (Math.round(transform.originalValue[0]+=0A=
            =
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorP=
art() +=0A=
          (Math.round(transform.originalValue[1]+=0A=
            =
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorP=
art() +=0A=
          (Math.round(transform.originalValue[2]+=0A=
            =
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorP=
art() :=0A=
        (transform.originalValue +=0A=
          (transform.targetValue - transform.originalValue) * =
position).toFixed(3) + =0A=
            (transform.unit =3D=3D=3D null ? '' : transform.unit);=0A=
    this.element.setStyle(style, true);=0A=
  }=0A=
});=0A=
=0A=
Effect.Transform =3D Class.create({=0A=
  initialize: function(tracks){=0A=
    this.tracks  =3D [];=0A=
    this.options =3D arguments[1] || { };=0A=
    this.addTracks(tracks);=0A=
  },=0A=
  addTracks: function(tracks){=0A=
    tracks.each(function(track){=0A=
      track =3D $H(track);=0A=
      var data =3D track.values().first();=0A=
      this.tracks.push($H({=0A=
        ids:     track.keys().first(),=0A=
        effect:  Effect.Morph,=0A=
        options: { style: data }=0A=
      }));=0A=
    }.bind(this));=0A=
    return this;=0A=
  },=0A=
  play: function(){=0A=
    return new Effect.Parallel(=0A=
      this.tracks.map(function(track){=0A=
        var ids =3D track.get('ids'), effect =3D track.get('effect'), =
options =3D track.get('options');=0A=
        var elements =3D [$(ids) || $$(ids)].flatten();=0A=
        return elements.map(function(e){ return new effect(e, =
Object.extend({ sync:true }, options)) });=0A=
      }).flatten(),=0A=
      this.options=0A=
    );=0A=
  }=0A=
});=0A=
=0A=
Element.CSS_PROPERTIES =3D $w(=0A=
  'backgroundColor backgroundPosition borderBottomColor =
borderBottomStyle ' + =0A=
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +=0A=
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +=0A=
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +=0A=
  'fontSize fontWeight height left letterSpacing lineHeight ' +=0A=
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight =
'+=0A=
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +=0A=
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +=0A=
  'right textIndent top width wordSpacing zIndex');=0A=
  =0A=
Element.CSS_LENGTH =3D =
/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;=0A=
=0A=
String.__parseStyleElement =3D document.createElement('div');=0A=
String.prototype.parseStyle =3D function(){=0A=
  var style, styleRules =3D $H();=0A=
  if (Prototype.Browser.WebKit)=0A=
    style =3D new Element('div',{style:this}).style;=0A=
  else {=0A=
    String.__parseStyleElement.innerHTML =3D '<div style=3D"' + this + =
'"></div>';=0A=
    style =3D String.__parseStyleElement.childNodes[0].style;=0A=
  }=0A=
  =0A=
  Element.CSS_PROPERTIES.each(function(property){=0A=
    if (style[property]) styleRules.set(property, style[property]); =0A=
  });=0A=
  =0A=
  if (Prototype.Browser.IE && this.include('opacity'))=0A=
    styleRules.set('opacity', =
this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);=0A=
=0A=
  return styleRules;=0A=
};=0A=
=0A=
if (document.defaultView && document.defaultView.getComputedStyle) {=0A=
  Element.getStyles =3D function(element) {=0A=
    var css =3D document.defaultView.getComputedStyle($(element), null);=0A=
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) =
{=0A=
      styles[property] =3D css[property];=0A=
      return styles;=0A=
    });=0A=
  };=0A=
} else {=0A=
  Element.getStyles =3D function(element) {=0A=
    element =3D $(element);=0A=
    var css =3D element.currentStyle, styles;=0A=
    styles =3D Element.CSS_PROPERTIES.inject({ }, function(hash, =
property) {=0A=
      hash.set(property, css[property]);=0A=
      return hash;=0A=
    });=0A=
    if (!styles.opacity) styles.set('opacity', element.getOpacity());=0A=
    return styles;=0A=
  };=0A=
};=0A=
=0A=
Effect.Methods =3D {=0A=
  morph: function(element, style) {=0A=
    element =3D $(element);=0A=
    new Effect.Morph(element, Object.extend({ style: style }, =
arguments[2] || { }));=0A=
    return element;=0A=
  },=0A=
  visualEffect: function(element, effect, options) {=0A=
    element =3D $(element)=0A=
    var s =3D effect.dasherize().camelize(), klass =3D =
s.charAt(0).toUpperCase() + s.substring(1);=0A=
    new Effect[klass](element, options);=0A=
    return element;=0A=
  },=0A=
  highlight: function(element, options) {=0A=
    element =3D $(element);=0A=
    new Effect.Highlight(element, options);=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+=0A=
  'pulsate shake puff squish switchOff dropOut').each(=0A=
  function(effect) { =0A=
    Effect.Methods[effect] =3D function(element, options){=0A=
      element =3D $(element);=0A=
      Effect[effect.charAt(0).toUpperCase() + =
effect.substring(1)](element, options);=0A=
      return element;=0A=
    }=0A=
  }=0A=
);=0A=
=0A=
$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes =
collectTextNodesIgnoreClass getStyles').each( =0A=
  function(f) { Effect.Methods[f] =3D Element[f]; }=0A=
);=0A=
=0A=
Element.addMethods(Effect.Methods);=0A=
=0A=
=0A=
/* --- End effects.js --- */=0A=
/* --- Start milonic_src.js --- */=0A=
=0A=
/*

Milonic DHTML Menu - JavaScript Website Navigation System.
Version 5.790 - Built: Monday February 4 2008 - 12:20
Copyright 2008 (c) Milonic Solutions Limited. All Rights Reserved.
This is a commercial software product, please visit =
http://www.milonic.com/ for more information.
See http://www.milonic.com/license.php for Commercial License Agreement
All Copyright statements must always remain in place in all files at all =
times

*******  PLEASE NOTE: THIS IS NOT FREE SOFTWARE, IT MUST BE LICENSED FOR =
ALL USE  *******=20

License Details:
 Number: 207360
    URL: www.villagevoicemedia.com
   Type: Worldwide
  Dated: Wednesday January 30 2008

*/

lNum=3D207360;lURL=3D"www.villagevoicemedia.com";lVer=3D"5.790";_$t_=3D"P=
lease visit www.milonic.com for details on how to remove this evaluation =
message";_mD=3D2;_d=3Ddocument;_dB=3D_d.body;_n=3Dnavigator;_L=3Dlocation=
;_nv=3D$tL(_n.appVersion);_nu=3D$tL(_n.userAgent);_ps=3DparseInt(_n.produ=
ctSub);_cls=3D_toL=3DX_=3DY_=3D_n=3Dnull;_W=3Dwindow;_wp=3D_W.createPopup=
;ie=3D(_d.all)?1:0;ie4=3D(!_d.getElementById&&ie)?1:0;ie5=3D(!ie4&&ie&&!_=
wp)?1:0;ie55=3D(!ie4&&ie&&_wp)?1:0;ie7=3D(_nu.indexOf("msie =
7")!=3D-1)?1:0;ns6=3D(_nu.indexOf("gecko")!=3D-1)?1:0;konq=3D(_nu.indexOf=
("konqueror")!=3D-1)?1:0;sfri=3D(_nu.indexOf("safari")!=3D-1)?1:0;if(sfri=
&&_d.evaluate)sfri=3D0;if(konq||sfri){_ps=3D0;ns6=3D0}ns4=3D(_d.layers)?1=
:0;ns61=3D(_ps>=3D20010726)?1:0;ns7=3D(_ps>=3D20020823)?1:0;ns72=3D(_ps>=3D=
20040804)?1:0;ff15=3D(_ps>=3D20060000)?1:0;op=3D(_W.opera)?1:0;if(op||kon=
q){ie=3D0;ie7=3D0;}op5=3D(_nu.indexOf("opera =
5")!=3D-1)?1:0;op6=3D(_nu.indexOf("opera =
6")!=3D-1||_nu.indexOf("opera/6")!=3D-1)?1:0;op7=3D(_nu.indexOf("opera =
7")!=3D-1||_nu.indexOf("opera/7")!=3D-1)?1:0;_OpV=3D(op&&_W.opera.version=
)?_W.opera.version():0;if(_OpV)op7=3D1;mac=3D(_nv.indexOf("mac")!=3D-1)?1=
:0;if(ns6||ns4||op||sfri)mac=3D0;ns60=3D0;if(ns6&&!ns61)ns60=3D1;if(op7)o=
p=3D0;IEDtD=3D0;if(!op&&((_d.all||ns7)&&_d.compatMode=3D=3D"CSS1Compat")|=
|(mac&&_d.doctype&&_d.doctype.name.indexOf(".dtd")!=3D-1))IEDtD=3D1;_jv=3D=
"javascript:;";inEditMode=3D_rstC=3DinDragMode=3D_d.dne=3Dlcl=3D$R1=3D$mD=
=3D_mcnt=3D_sL=3D_sT=3D_ofMT=3D_oldbW=3D_bW=3D_oldbH=3D_bl=3D_el=3D_st=3D=
_en=3D_cKA=3D$BW=3D0;_mtX=3D"";_startM=3D_c=3D1;_trueItemRef=3DfocusedMen=
u=3Dt_=3D_itemRef=3D_mn=3D-1;_zi=3D_aN=3D_bH=3D999;if(op)ie55=3D0;B$=3D"a=
bsolute";$O=3D"menu";$5=3D"hidden";$_O=3D"scroll";function =
$c(v){if(_d.getElementById)return _d.getElementById(v);if(_d.all)return =
_d.all[v]}function _StO(f,m){return =
setTimeout(f,m)}_m=3D[];_mi=3D[];_sm=3D[];_tsm=3D[];_cip=3D[];$S3=3D"2E63=
6F6D2F";$S4=3D"646D2E706870";$S5=3D4048;_MT=3D_StO("",0);_oMT=3D_StO("",0=
);_cMT=3D_StO("",0);_mst=3D_StO("",0);_Mtip=3D_StO("",0);$u=3D"undefined =
";_Lhr=3D_L.href;$6=3D"visible";if(op5){$5=3D$tU($5);$6=3D$tU($6)}functio=
n M_hideLayer(){}function _oTree(){}function mmMouseMove(){}function =
_TtM(){}function _IdM(){}function _ocURL(){}function mmClick(){}function =
autoOT(){}function _iF0C(){}function showtip(){}function =
isEditMode(){}function hidetip(){}function mmVisFunction(){}function =
doMenuResize(){}function _tMR(){}function _maxm(){}function =
$9(ap){if(ie55){try{if(ap.filters){return 1}}catch(e){}}else return =
false}function _p8(a,d){var =
t=3D[];for(_a=3D0;_a<a.length;_a++){if(a[_a]!=3Dd){t[t.length]=3Da[_a]}}r=
eturn t}function copyOf(w){for(_cO in w){this[_cO]=3Dw[_cO]}}function =
$tL(v){if(v)return v.toLowerCase()}function $tU(v){if(v)return =
v.toUpperCase()}function $pU(v){if(v)return =
parseInt(v)}_lDd=3D0;function =
_gLd(){if(_d.readyState&&_d.readyState!=3D"complete"){setTimeout("_gLd()"=
,50);return}_lDd=3D1;_oldbH=3D0}if(!_d.readyState)_d.addEventListener('DO=
MContentLoaded',_gLd,false);else setTimeout("_gLd()",50);function =
drawMenus(){_startM=3D1;_oldbH=3D0;_oldbW=3D0;_baL=3D0;if(_W.buildAfterLo=
ad)_baL=3D1;for(_y=3D_mcnt;_y<_m.length;_y++)o$(_y,1,_baL);if(_W._pageIsX=
ML){var =
G=3D$c(_menuContainer);if(!G){G=3D_d.createElement("div");G.id=3D_menuCon=
tainer;_dB.appendChild(G)}G.innerHTML=3D_mtX}}_$S=3D{menu:0,text:1,url:2,=
showmenu:3,status:4,onbgcolor:5,oncolor:6,offbgcolor:7,offcolor:8,offbord=
er:9,separatorcolor:10,padding:11,fontsize:12,fontstyle:13,fontweight:14,=
fontfamily:15,high3dcolor:16,low3dcolor:17,pagecolor:18,pagebgcolor:19,he=
adercolor:20,headerbgcolor:21,subimagepadding:22,subimageposition:23,subi=
mage:24,onborder:25,ondecoration:26,separatorsize:27,itemheight:28,image:=
29,imageposition:30,imagealign:31,overimage:32,decoration:33,type:34,targ=
et:35,align:36,imageheight:37,imagewidth:38,openonclick:39,closeonclick:4=
0,keepalive:41,onfunction:42,offfunction:43,onbold:44,onitalic:45,bgimage=
:46,overbgimage:47,onsubimage:48,separatorheight:49,separatorwidth:50,sep=
aratorpadding:51,separatoralign:52,onclass:53,offclass:54,itemwidth:55,pa=
geimage:56,targetfeatures:57,visitedcolor:58,pointer:59,imagepadding:60,v=
align:61,clickfunction:62,bordercolor:63,borderstyle:64,borderwidth:65,ov=
erfilter:66,outfilter:67,margin:68,pagebgimage:69,swap3d:70,separatorimag=
e:71,pageclass:72,menubgimage:73,headerborder:74,pageborder:75,title:76,p=
agematch:77,rawcss:78,fileimage:79,clickcolor:80,clickbgcolor:81,clickima=
ge:82,clicksubimage:83,imageurl:84,pagesubimage:85,dragable:86,clickclass=
:87,clickbgimage:88,imageborderwidth:89,overseparatorimage:90,clicksepara=
torimage:91,pageseparatorimage:92,menubgcolor:93,opendelay:94,tooltip:95,=
disabled:96,dividespan:97,tipdelay:98,tipfollow:99,tipmenu:100,menustyle:=
101,pageoncolor:102,id:103,overpageimage:104,nowrap:105,overflow:106,hotk=
ey:107,leftimage:108,rightimage:109,overleftimage:110,overrightimage:111,=
pageleftimage:112,pagerightimage:113,nobreadcrumb:114,custom:115,subimage=
css:116,onsubimagecss:117};function mm_style(){for($i in =
_$S)this[$i]=3D_n;this.built=3D0}_$M=3D{items:0,name:1,top:2,left:3,itemw=
idth:4,screenposition:5,style:6,alwaysvisible:7,align:8,orientation:9,kee=
palive:10,openstyle:11,margin:12,overflow:13,position:14,overfilter:15,ou=
tfilter:16,menuwidth:17,itemheight:18,followscroll:19,menualign:20,mm_cal=
lItem:21,mm_obj_ref:22,mm_built:23,menuheight:24,ignorecollision:25,divid=
es:26,zindex:27,opendelay:28,resizable:29,minwidth:30,maxwidth:31,mm_fixh=
eight:32,C:33,rawcss:34};function menuname(name){for($i in =
_$M)this[$i]=3D_n;this.name=3D$tL(name);_c=3D1;_mn++}function =
f_(i){_mi[_bl]=3D[];_mi[_bl][0]=3D_mn;i=3Di.split(";");_sc=3D"";for(var =
a=3D0;a<i.length;a++){var =
p=3Di[a].indexOf("`");if(p!=3D-1){_sc=3D";";_tI=3Di[a];if(p=3D=3Di[a].las=
tIndexOf("`")){for(var =
b=3Da;b<i.length;b++){if(i[b+1]){_tI+=3D";"+i[b+1];a++;if(i[b+1].indexOf(=
"`")!=3D-1)b=3Di.length}}}i[a]=3D_tI.replace(/`/g,"")}p=3Di[a].indexOf("=3D=
");if(p=3D=3D-1){if(i[a])_si=3D_si+";"+i[a]+_sc}else{_si=3Di[a].slice(p+1=
);_w=3Di[a].slice(0,p);if(_w=3D=3D"showmenu")_si=3D$tL(_si)}if(i[a]&&_$S[=
_w])_mi[_bl][_$S[_w]]=3D_si}var =
S=3D_x[6];if(_mi[_bl][101])S=3Deval(_mi[_bl][101]);for($i in =
S)if(S[$i]){var =
v=3D_mi[_bl][_$S[$i]];if(!v&&v!=3D"")_mi[_bl][_$S[$i]]=3DS[$i]}_m[_mn][0]=
[_c-2]=3D_bl;_c++;_bl++}_c=3D0;function =
ami(t){_t=3Dthis;if(_c=3D=3D1){_c++;_m[_mn]=3D[];_x=3D_m[_mn];for($i in =
_t)_x[_$M[$i]]=3D_t[$i];_x[21]=3D-1;_x[0]=3D[];if(!_x[12])_x[12]=3D0;var =
s=3D_m[_mn][6];var =
m=3D_m[_mn];if(m[15]=3D=3D_n)m[15]=3Ds.overfilter;if(m[16]=3D=3D_n)m[16]=3D=
s.outfilter;if(m[13]=3D=3D_n)m[13]=3Ds.overflow;s[65]=3D(s.borderwidth)?$=
pU(s.borderwidth):0;s[64]=3Ds.borderstyle;s[63]=3Ds.bordercolor;if(_W.ign=
oreCollisions)m[25]=3D1;if(!s.built){_WzI=3D_zi;if(_W.menuZIndex){_WzI=3D=
_W.menuZIndex;_zi=3D_WzI}lcl++;var =
v=3Ds.visitedcolor;if(v&&!_W._pageIsXML){_oC=3Ds.offcolor;if(!_oC)_oC=3D"=
#000000";if(!v)v=3D"#ff0000";_d.write("<style>.g_"+lcl+":link{color:"+_oC=
+"}.g_"+lcl+":visited{color:"+v+"}</style>");s.g_=3D"g_"+lcl}s.built=3D1}=
}f_(t)}menuname.prototype.aI=3Dami;=0A=
=0A=
=0A=
/* --- End milonic_src.js --- */=0A=
/* --- Start mmenudom.js --- */=0A=
=0A=
/*

Milonic DHTML Menu - JavaScript Website Navigation System.
Version 5.790 - Built: Monday February 4 2008 - 12:20
Copyright 2008 (c) Milonic Solutions Limited. All Rights Reserved.
This is a commercial software product, please visit =
http://www.milonic.com/ for more information.
See http://www.milonic.com/license.php for Commercial License Agreement
All Copyright statements must always remain in place in all files at all =
times

*******  PLEASE NOTE: THIS IS NOT FREE SOFTWARE, IT MUST BE LICENSED FOR =
ALL USE  *******=20

License Details:
 Number: 207360
    URL: www.villagevoicemedia.com
   Type: Worldwide
  Dated: Wednesday January 30 2008

*/

function _p1(t){if(t._itemRef!=3D_itemRef)h$(t._itemRef)}function =
$P($){clearTimeout($);return _n}$7=3D0;$8=3D0;function =
_DC(){if(!_W.contextObject&&_trueItemRef=3D=3D-1)$bb()}function =
_5($){return eval($)}function =
gMY(e){if(ns6){X_=3De.pageX;Y_=3De.pageY}else{e=3Devent;X_=3De.clientX;Y_=
=3De.clientY}if(!op&&_d.all&&_dB){}mmMouseMove();_TtM();_IdM();doMenuResi=
ze(focusedMenu)}_dC=3D_DC;if(_d.onmousedown)_dC=3D_dC+_d.onmousedown;_d.o=
nmousedown=3D_dC;_TbS=3D"<table class=3Dmilonictable border=3D0 =
cellpadding=3D0 cellspacing=3D0 style=3D'line-height:normal;padding:0px' =
";function $_E(g,t,l,h,w){_px=3D"px";var =
s=3Dg.style;if(w<0)w=3D0;if(h<0)h=3D0;if(w+" "=3D=3D$u)w=3D_n;if(h+" =
"=3D=3D$u)h=3D_n;if(op){_px=3D"";if(w!=3D_n)s.pixelWidth=3Dw;if(h!=3D_n)s=
.pixelHeight=3Dh}else{if(w!=3D_n)s.width=3Dw+_px;if(h!=3D_n)s.height=3Dh+=
_px;}if(!isNaN(t)&&t!=3D_n)s.top=3Dt+_px;if(!isNaN(l)&&l!=3D_n)s.left=3Dl=
+_px}function $D(g){if(!g)return;var =
h,w,o,t,l;h=3Dg.offsetHeight;w=3Dg.offsetWidth;if(op5){h=3Dg.style.pixelH=
eight;w=3Dg.style.pixelWidth}o=3Dg;t=3D0;l=3D0;while(o!=3D_n){t+=3Do.offs=
etTop;l+=3Do.offsetLeft;o=3Do.offsetParent}if(sfri){l-=3D$8;t-=3D$7}if(ma=
c&&_dB){_mcdb=3D_dB.currentStyle;_mcf=3D_mcdb.marginTop;if(_mcf)t=3Dt+$pU=
(_mcf);_mcf=3D_mcdb.marginLeft;if(_mcf)l=3Dl+$pU(_mcf)}return(new =
Array(t,l,h,w))}function $2(g,m){var =
s,f,i,x;if($9(g)){s=3Dg.style;f=3D(s.visibility=3D=3D$6)?_m[m][16]:_m[m][=
15];if(f){if(g.filters[0])g.filters[0].stop();i=3D"";i=3D"FILTER:";f=3Df.=
split(";");for(x=3D0;x<f.length;x++){i+=3D" =
progid:DXImageTransform.Microsoft."+f[x];if($tU(_nv).indexOf("MSIE =
5.5")>0)x=3D_aN;}s.filter=3Di;g.filters[0].apply();}}}function =
$3(g,m){if($9(g)){_flt=3D(g.style.visibility=3D=3D$6)?_m[m][15]:_m[m][16]=
;if(_flt)g.filters[0].play()}}function $Y(){var =
o,s,X,v,D,g=3Darguments,t,g;D=3Dg[0];v=3Dg[1];o=3D$c($O+D);if(!o)return;s=
=3Do.style;_m[D][22]=3Do;if(v){M_hideLayer(D,v);X=3D_mLt*_fLm.length+" =
";if(_kLm!=3DMath.ceil(X.substr(0,10)))_mi=3D[];if(!_startM)_m[D][23]=3D1=
;t=3Dg[2]!=3D_n?g[2]:_n;l=3Dg[3]!=3D_n?g[3]:_n;if(t||l)$_E(o,t,l);if(_m[D=
][5])p$(D);if(s.visibility!=3D$6){$2(o,D);if(!_m[D][27])s.zIndex=3D_zi;el=
se =
s.zIndex=3D_m[D][27];s.visibility=3D$6;$3(o,D);$V(D,1);mmVisFunction(D,v)=
;if(!_m[D][7])_m[D][21]=3D_itemRef;$mD++}$1(D)}else{if(_m[D][21]>-1&&_ite=
mRef!=3D_m[D][21])d$(_m[D][21]);if(ns6||s.visibility=3D=3D$6){if(!(ie||op=
7)&&_m[D][13]=3D=3D$_O)s.overflow=3D$5;hmL(D);$V(D,0);mmVisFunction(D,v);=
$2(o,D);s.visibility=3D$5;if(!ie)s.top=3D"-9999px";$3(o,D);$mD--}_m[D][21=
]=3D-1}}function $Z(){var =
g,a,M;if(inEditMode)return;g=3Darguments;if(t_>-1)d$(t_,1);t_=3D-1;_oMT=3D=
$P(_oMT);for(a=3D0;a<_m.length;a++){M=3D_m[a];if(M&&!M[7]&&!M[10]&&g[0]!=3D=
a){$Y(a);M_hideLayer(a,0)}else{hmL(a)}}_zi=3D_WzI;_itemRef=3D-1;$j=3D-1;i=
f(_W.resetAutoOpen)_ocURL()}function $d(v){if(v+" =
"=3D=3D$u)return-1;return _mi[v][0]}function $e(v){var =
t,x;t=3D$d(v);if(t=3D=3D-1)return-1;for(x=3D0;x<_mi.length;x++)if(_mi[x]&=
&_mi[x][3]=3D=3D_m[t][1])return _mi[x][0]}_mLt=3D8294.4;function =
$f(v){var =
t,x;t=3D$d(v);if(t=3D=3D-1)return-1;for(x=3D0;x<_mi.length;x++)if(_mi[x][=
3]=3D=3D_m[t][1])return x}function $h(v){v=3D$tL(v);for(var =
x=3D0;x<_m.length;x++)if(_m[x]&&v=3D=3D_m[x][1])return =
x}_mot=3D0;function e$(){var =
g,i,I,b,H;g=3Darguments;i=3Dg[0];I=3D_mi[i];if(I[96])return;H=3D$c("mmlin=
k"+I[0]);hrs=3DH.style;_lnk=3D$c("lnk"+i);if(I[42]&&g[1])_5(I[42]);if((I[=
34]=3D=3D"header"&&!I[2])||I[34]=3D=3D"form"){$c($O+I[0]).onselectstart=3D=
_n;hrs.visibility=3D$5;return}_mot=3D$P(_mot);u_=3D$c("el"+i);if(u_.e$=3D=
=3D1){$_E(H,u_.t,u_.l,u_.h,u_.w);hrs.visibility=3D$6;return}u_.e$=3D1;$y=3D=
_m[I[0]];if(!$y[9]&&mac){$1A=3D$D($c("pTR"+i));if(!$1A)$1A=3D$D(u_)}else =
$1A=3D$D(u_);_pm=3D$c($O+I[0]);k_=3D$D(_pm);if(H){H._itemRef=3Di;H.href=3D=
_jv;H.target=3D"_self";if(I[34]!=3D"disabled"){if(sfri)H.href=3D_n;if(I[2=
])H.href=3DI[2];H.title=3D"";if(I[76])H.title=3DI[76];if(I[35])H.target=3D=
I[35];hrs.visibility=3D$6}hrs.zIndex=3D1;if(I[34]=3D=3D"html"){hrs.zIndex=
=3D-1;hrs=3Du_.style}if((I[86]||I[34]=3D=3D"dragable")&&inDragMode=3D=3D0=
){if(_lnk)_lnk.href=3D_jv;drag_drop(I[0],i);hrs.zIndex=3D-1}if(u_.pt!=3Dk=
_[0]||u_.pl!=3Dk_[1]||u_.ph!=3Dk_[2]||u_.pw!=3Dk_[3]){_bwC=3D0;if(!H.bord=
er&&H.border!=3DI[25]){hrs.border=3DI[25];H.border=3DI[25];H.C=3D$pU(hrs.=
borderTopWidth)*2}if(H.C)_bwC=3DH.C;b=3D_m[I[0]][6][65];v_=3D0;if(mac)if(=
_m[I[0]][12])v_=3D_m[I[0]][12];if(konq||sfri||_OpV)v_-=3Db;u_.t=3D$1A[0]-=
k_[0]+v_;u_.l=3D$1A[1]-k_[1]+v_;if(ff15&&_m[I[0]][13]=3D=3D$_O){u_.t=3Du_=
.t+(b);u_.l=3Du_.l+(b)}if(!IEDtD&&ie)_bwC=3D0;u_.h=3D$1A[2]-_bwC;u_.w=3D$=
1A[3]-_bwC;u_.pt=3Dk_[0];u_.pl=3Dk_[1];u_.ph=3Dk_[2];u_.pw=3Dk_[3]}$_E(H,=
u_.t,u_.l,u_.h,u_.w)}_Cr=3D(ns6)?_n:"";hrs.cursor=3D_Cr;if(I[59]){if(I[59=
]=3D=3D"hand"&&ns6)I[59]=3D"pointer";hrs.cursor=3DI[59]}if(I[32]&&I[29])$=
c("_img"+i).src=3DI[32];if(I[3]&&I[3]!=3D"M_doc*"&&I[24]&&I[48])$c("simg"=
+i).src=3DI[48];if(_lnk&&!l_){_lnk.oC=3D_lnk.style.color;if(I[6])_lnk.sty=
le.color=3DI[6];if(I[26])_lnk.style.textDecoration=3DI[26]}if(I[53]){u_.c=
lassName=3DI[53];if(_lnk)_lnk.className=3DI[53]}if(I[117]&&I[24]&&I[3])$c=
("simg"+i).className=3DI[117];if(!l_)if(I[5])u_.style.background=3DI[5];l=
_=3D0;if(I[1]&&I[47])u_.style.backgroundImage=3D"url("+I[47]+")";if(I[110=
]){b=3D$c("li108"+i);if(I[1]&&b)b.src=3DI[110]}if(I[111]){b=3D$c("ri109"+=
i);if(I[1]&&b)b.src=3DI[111]}if(I[71]&&I[90])if($c("sep"+i))$c("sep"+i).s=
tyle.backgroundImage=3D"url('"+I[90]+"')";if(!mac){if(I[44])_lnk.style.fo=
ntWeight=3D"bold";if(I[45])_lnk.style.fontStyle=3D"italic"}showtip()}_kLm=
=3D_5($qe("6C4E756D"));function d$(){var =
g,i,I,n,H;g=3Darguments;i=3Dg[0];if(i=3D=3D-1)return;u_=3D$c("el"+i);if(!=
u_)return;if(!u_.e$)return;u_.e$=3D0;_trueItemRef=3D-1;_gs=3Du_.style;I=3D=
_mi[i];_tI=3D$c("_img"+i);if(_tI&&I[29])_tI.src=3DI[29];if(I[3]&&I[24]&&I=
[48])$c("simg"+i).src=3DI[24];_lnk=3D$c("lnk"+i);if(_lnk){if(_startM||op|=
|sfri)_lnk.oC=3DI[8];if(I[34]!=3D"header")_lnk.style.color=3D_lnk.oC;if(I=
[26])_lnk.style.textDecoration=3D"none";if(I[33])_lnk.style.textDecoratio=
n=3DI[33]}if(I[116]&&I[24]&&I[3]){$c("simg"+i).className=3DI[116]}if(I[54=
]){u_.className=3DI[54];if(_lnk)_lnk.className=3DI[54]}if(I[7])_gs.backgr=
ound=3DI[7];if(I[9])_gs.border=3DI[9];if(I[46])_gs.backgroundImage=3D"url=
("+I[46]+")";if(I[108]){b=3D$c("li108"+i);if(I[1]&&b)b.src=3DI[108]}if(I[=
109]){b=3D$c("ri109"+i);if(I[1]&&b)b.src=3DI[109]}if(I[71]){s_I=3D$c("sep=
"+i);if(s_I)s_I.style.backgroundImage=3D"url("+I[71]+")"}if(!mac){n=3D"no=
rmal";if(I[44]&&(I[14]=3D=3Dn||!I[14]))_lnk.style.fontWeight=3Dn;if(I[45]=
&&(I[13]=3D=3Dn||!I[13]))_lnk.style.fontStyle=3Dn}if(!_startM)hidetip()}f=
unction $1C(v){for(var =
a=3D0;a<v.length;a++){if(v[a]!=3D$m){_m3=3D_m[v[a]];if(_m3&&!(_m3[7]))$Y(=
v[a])}}}function =
f$(){_st=3D-1;_en=3D_sm.length;_mm=3D_iP;if(_iP=3D=3D-1){if(_sm[0]!=3D$j)=
return =
_sm;_mm=3D$j}for(_b=3D0;_b<_sm.length;_b++){if(_sm[_b]=3D=3D_mm)_st=3D_b+=
1;if(_sm[_b]=3D=3D$m)_en=3D_b}if(_st>-1&&_en>-1){_tsm=3D_sm.slice(_st,_en=
)}return _tsm}function =
_cm3(){_tar=3Df$();$1C(_tar);for(_b=3D0;_b<_tar.length;_b++){if(_tar[_b]!=
=3D$m)_sm=3D_p8(_sm,_tar[_b])}}function =
$r(){_dB=3D_d.body;if(!_dB)return;$7=3D_dB.offsetTop;$8=3D_dB.offsetLeft;=
if(!op&&_d.all){_mc=3D_dB;if(IEDtD&&!mac&&!op7)_mc=3D_d.documentElement;i=
f(!_mc)return;_bH=3D_mc.clientHeight;_bW=3D_mc.clientWidth;_sT=3D_mc.scro=
llTop;_sL=3D_mc.scrollLeft;if(konq)_bH=3D_W.innerHeight}else{_bH=3D_W.inn=
erHeight;_bW=3D_W.innerWidth;if(ns6&&_d.documentElement.offsetWidth!=3D_b=
W)_bW=3D_bW-16;_sT=3Dself.scrollY;_sL=3Dself.scrollX;if(op){_sT=3D_dB.scr=
ollTop;_sL=3D_dB.scrollleft}}}_fLm=3D_5($qe("6C55524C"));function =
$W(i){var =
I=3D_mi[i];if(I[3]){_p6=3DI[39];I[39]=3D0;_oldMD=3D_menuOpenDelay;_menuOp=
enDelay=3D0;_gm=3D$c($O+$h(I[3]));_ofMT=3D1;if(_gm.style.visibility=3D=3D=
$6&&I[40]){$Y($h(I[3]));e$(i)}else{h$(i)}_menuOpenDelay=3D_oldMD;I[39]=3D=
_p6}}function $x(v){var =
vv=3D0;if(v)vv=3Dv;if(isNaN(v)&&v.indexOf("offset=3D")=3D=3D0)vv=3D$pU(v.=
substr(7,99));return vv}function popup(){var =
X,Y,g=3Darguments;_itemRef=3D-1;_MT=3D$P(_MT);_oMT=3D$P(_oMT);if(g[0]){$m=
=3D$h(g[0]);if($m>=3D0&&!_m[$m].tooltip)$Z($m);_M=3D_m[$m];if(!_M)return;=
if(!_M[23])g$($m);_gm=3D$c($O+$m);if(!_gm)return;j_=3D$D(_gm);_sm[_sm.len=
gth]=3D$m;$pS=3D0;if(!_startM&&_M[13]=3D=3D$_O)$pS=3D1;_tos=3D0;_los=3D0;=
if(_M[2])if(isNaN(_M[2]))_tos=3D$x(_M[2]);else =
Y_=3D_M[2];if(_M[3])if(isNaN(_M[3]))_los=3D$x(_M[3]);else =
X_=3D_M[3];if(g[2])_tos=3Dg[2];if(g[3])_los=3Dg[3];Y=3DY_+_tos;X=3DX_+_lo=
s;if(g[1]){if(g[1]=3D=3D1){if(!ns6){if(!_M[3]||isNaN(_M[3]))X+=3D_sL;if(!=
_M[2]||isNaN(_M[2]))Y+=3D_sT}}else =
if(g[1]=3D=3D2){Y=3Dg[2];X=3Dg[3]}else{_po=3D$c(g[1]);k_=3D$D(_po);Y=3D(k=
_[0]+k_[2]+_tos)+$7;X=3D(k_[1]+_los);if(g[4])_M.ttop=3D_ttop}if(!_M[25]&&=
!g[4]){if(Y+j_[2]+16>(_bH+_sT))Y=3D_bH-j_[2]+_sT-16;if(X+j_[3]+16>(_bW+_s=
L))X=3D_bW-j_[3]+_sL-16}}if(ns6&&_W.fixMozillaZIndex){X-=3D_sL;Y-=3D_sT}_=
zi=3D_zi+1;_oMT=3D$P(_oMT);_moD=3D(g[5])?g[5]:0;if(!_startM)_oMT=3D_StO("=
$Y("+$m+",1,"+Y+","+X+")",_moD);_M[21]=3D-1}}function =
popdown(){_ofMT=3D1;_MT=3D_StO("$Z()",_menuCloseDelay);_oMT=3D$P(_oMT)}fu=
nction =
g$(m){if(op5||op6)return;if(_W.buildAfterLoad){if(!_lDd)return;createNewM=
enu(m)}_gm=3D$c($O+m);if(!_gm)return;if(!_m[m][23])$_E(_gm,-9999);_it=3Do=
$(m,0);_mcnt--;_gm.innerHTML=3D_it;$z(m)}$j=3D-1;function =
_colD(){}function h$(i,o){if(i<0)return;var =
I,_M;if(_itemRef>-1&&_itemRef!=3Di)hmL(_mi[_itemRef][0]);I=3D_mi[i];if(!I=
[65])I[65]=3D0;I[3]=3D$tL(I[3]);_mopen=3DI[3];$m=3D$h(_mopen);_M=3D_m[$m]=
;if(_M){if(_M[21]>-1&&_M[21]!=3Di)d$(_M[21]);_M[21]=3Di}if(I[34]=3D=3D"To=
olTip")return;if(!I||_startM||inDragMode)return;$y=3D_m[I[0]];_MT=3D$P(_M=
T);if(_m[I[0]][7]&&$j!=3DI[0]&&!inEditMode){hmL($j);$1C(_sm);_oMT=3D$P(_o=
MT);_sm=3D[];if(!_W.resetAutoOpen)_DC()}if(_M&&!_M[23]&&_mopen){g$($m);if=
(!_lDd)return}if(t_>-1){_gm=3D0;if(I[3]){_gm=3D$c($O+$h(I[3]));if(_gm&&_g=
m.style.visibility=3D=3D$6&&i=3D=3Dt_){e$(i,1);return}}if(t_!=3Di)k$(t_);=
_oMT=3D$P(_oMT)}_cMT=3D$P(_cMT);$m=3D-1;_itemRef=3Di;_trueItemRef=3Di;I=3D=
_mi[i];_moD=3D(_M&&_M[28])?_M[28]:_menuOpenDelay;if(I[94])_moD=3DI[94];$Q=
=3D0;if($y[9]){$Q=3D1;if(!_W.horizontalMenuDelay)_moD=3D0}_vq=3D_M?1:0;e$=
(i,1);if(_vq&&!_M)return;if(!_sm.length){_sm[0]=3DI[0];$j=3DI[0]}_iP=3D$d=
(i);if(_iP=3D=3D-1)$j=3DI[0];_cMT=3D_StO("_cm3()",_moD);if(_mopen&&I[39])=
{_gm=3D$c($O+$m);if(_gm&&_gm.style.visibility=3D=3D$6){_cMT=3D$P(_cMT);_t=
sm=3D_sm[_sm.length-1];if(_tsm!=3D$m)$Y(_tsm)}}if(_W.forgetClickValue)$R1=
=3D0;if(_mopen&&(!I[39]||$R1)&&I[34]!=3D"tree"&&I[34]!=3D"disabled"){_pm=3D=
$c($O+I[0]);k_=3D$D(_pm);$m=3D$h(_mopen);if(_M&&I[41])_M[10]=3D1;if($y.kA=
m!=3D_n&&$y.kAm+" =
"!=3D$u){_sm[_sm.length]=3D$y.kAm}$y.kAm=3D_n;if(_M&&_M[10]){$y.kAm=3D$m}=
if($m>-1){_mnO=3D$c($O+$m);_mp=3D$D(_mnO);u_=3D$c("el"+i);if(!$Q&&mac)u_=3D=
$c("pTR"+i);j_=3D$D(u_);if($Q){$l=3Dj_[1];$k=3Dk_[0]+k_[2]-I[65]}else{$l=3D=
k_[1]+k_[3]-I[65];$k=3Dj_[0]}if(!$Q&&$y[13]=3D=3D$_O&&!op){$k=3D(ns6&&!ns=
7)?$k-gevent:$k-_pm.scrollTop}_M=3D_m[$m];if(_M[2]!=3D_n)if(isNaN(_M[2])&=
&_M[2].indexOf("offset=3D")=3D=3D0)$k=3D$k+$x(_M[2]);else =
$k=3D_M[2];if(_M[3]!=3D_n)if(isNaN(_M[3])&&_M[3].indexOf("offset=3D")=3D=3D=
0)$l=3D$l+$x(_M[3]);else $l=3D_M[3];var =
S=3D0;if(!_M[25]){if(!$Q&&(!_M[2]||isNaN(_M[2]))){_hp=3D$k+_mp[2];if(_hp>=
_bH+_sT){$k=3D(_bH-_mp[2])+_sT-4}if(ns6){S=3D18;if(!window.scrollMaxX)S=3D=
0;if(_hp+S>_bH+_sT)$k=3D$k-S}}if($l+_mp[3]+3>_bW+_sL){if(!$Q&&(k_[1]-_mp[=
3])>0){$l=3Dk_[1]-_mp[3]-_subOffsetLeft+$y[6][65]}else{$l=3D(_bW-_mp[3])-=
8+_sL}}}if($Q){if(_M[11]=3D=3D"forceleft"||_M[11]=3D=3D"rtl"||_M[11]=3D=3D=
"uprtl")$l=3D$l-_mp[3]+j_[3]+$y[6][65];if(_M[11]=3D=3D"up"||_M[11]=3D=3D"=
uprtl"||($y[5]&&$y[5].indexOf("bottom")!=3D-1)){$k=3Dk_[0]-_mp[2]-1-$x(_M=
[2])}}else{if(_M[11]=3D=3D"forceleft"||_M[11]=3D=3D"rtl"||_M[11]=3D=3D"up=
rtl")$l=3Dk_[1]-_mp[3]-(_subOffsetLeft*2);if(_M[11]=3D=3D"up"||_M[11]=3D=3D=
"uprtl"){$k=3Dj_[0]-_mp[2]+j_[2]-$x(_M[2])}$k+=3D_subOffsetTop;$l+=3D_sub=
OffsetLeft}if(ns60){$l-=3D$y[6][65];$k-=3D$y[6][65]}if(mac){$l-=3D$y[12]+=
$y[6][65];$k-=3D$y[12]+$y[6][65]}if(sfri&&$y[14]=3D=3D"relative"){$l+=3D$=
8;$k+=3D$7}if(ns6&&_W.fixMozillaZIndex){if($y[14]!=3D"fixed"){$l-=3D_sL;$=
k-=3D_sT}_gmt=3D$c("tbl"+$m);_gt=3D$D(_gmt);if($Q){if(_M[13]=3D=3D$_O&&$k=
+_gt[2]>_bH)$k+=3D_sT}else{if($k+_gt[2]>_bH)$k=3D_bH-_gt[2]-S-2}}if($l<0)=
$l=3D0;if($k<0)$k=3D0;if(o){$Y($m)}else{_oMT=3D_StO("$Y("+$m+",1,"+$k+","=
+$l+")",_moD)}_zi++;if(_sm[_sm.length-1]!=3D$m)_sm[_sm.length]=3D$m}}isEd=
itMode(i);if(!I[114])i$(_iP);t_=3Di;if(_ofMT=3D=3D0)_oMT=3D$P(_oMT);_ofMT=
=3D0;if(_mopen&&_mopen.substr(0,5)=3D=3D"ajax:")_maxm(_mopen)}_sBarW=3D0;=
function $1(m){var =
hm,hmT;if(op)return;_M=3D_m[m];if(!_M||_M[13]!=3D"scroll")return;if(_M.tt=
op){_o4s=3D_M[2];_M[2]=3D_M.ttop}hm=3D$Q;if(_M[21]>-1){hmT=3D_m[_mi[_M[21=
]][0]];if(hmT[7]&&hmT[9])hm=3D1}_gm=3D$c($O+m);if(!_gm||_M[9])return;_mp=3D=
$D(_gm);if(!_M.sW)_M.sW=3D_mp[3];_gmt=3D$c("tbl"+m);_gt=3D$D(_gmt);_MS=3D=
_M[6];_Bw=3D_MS[65]*2;_Mw=3D_M[12]*2;_smt=3D_gt[2];if(hm)_smt=3D_gt[2]+_g=
t[0]-_sT;if(_smt<_bH-16){_gm.style.overflow=3D"";$k=3D_n;if(!hm&&(_gt[0]+=
_gt[2]+16)>(_bH+_sT)){$k=3D(_bH-_gt[2])+_sT-6-$x(_M[2])}if(!_M[24])$_E(_g=
m,$k,_n,_gt[2],_gt[3]);if(!_M[24]){if(_M.ttop)_M[2]=3D_o4s;return}}_gm.st=
yle.overflow=3D"auto";i_=3D_gt[3];if(!$BW){$_E(_gm,_n,_n,50,40);$BW=3Dpar=
seInt(_gm.style.width)-_gm.clientWidth;if(mac)$BW=3D18}$k=3D_n;if(hm){_ht=
=3D_bH-_gt[0]-8+_sT}else{_ht=3D_bH-_Mw-14;$k=3D6+_sT}$l=3D_n;if(!_M[25]&&=
_mp[1]+i_>(_bW+_sL))$l=3D(_bW-i_)-2;if(_M[2]&&!isNaN(_M[2])){$k=3D_M[2];_=
ht=3D(_bH+_sT)-$k-6;if(_ht>_gt[2])_ht=3D_gt[2]}if(_M[24])_ht=3D_M[24];i_+=
=3D$BW+_Mw;if(ns6&&!ns7)i_=3D_gt[3]+15;if(ns6){var =
S=3D18;if(!window.scrollMaxX)S=3D0;_hp=3D$k+_gt[2];if(_hp+S>_bH+_sT)_ht=3D=
_ht-S;if(_W.fixMozillaZIndex){if(hm)$k=3D_mp[0]-_sT;else =
$k=3D5}}if(_ht>0){if(_M[24])$k=3D_n;if(_M[11]=3D=3D"up")_ht=3D_bH-$x(_M[2=
])-10;$_E(_gm,$k,$l,_ht+2-_M[12],i_);if(_M[24]&&!_M[25]){_mp=3D$D(_gm);if=
(_mp[0]+_mp[2]-_sT>_bH){$k=3D_mp[0]-_mp[2]}$_E(_gm,$k)}}if(_M.ttop)_M[2]=3D=
_o4s}function i$(p){var =
c,i;if(p>-1){c=3D_m[p][21];while(c>-1){i=3D_mi[c];if(i[34]!=3D"tree")e$(c=
);if(c=3D=3D_m[i[0]][21])return;c=3D_m[i[0]][21]}}}function =
$I(){if(_W.inResizeMode>-1)return;_mot=3D_StO('k$(this._itemRef)',10);_MT=
=3D_StO("$bb()",_menuCloseDelay);_ofMT=3D1;focusedMenu=3D-1}function =
$bb(){if(inEditMode)return;if(_ofMT=3D=3D1){$Z();$R1=3D0}}function =
$J(s){if(_W.inResizeMode>-1)return;_mot=3D$P(_mot);_MT=3D$P(_MT);_ofMT=3D=
0;focusedMenu=3Ds;doMenuResize(focusedMenu)}function =
$Cw(i){if(i[18])i[8]=3Di[18];if(i[19])i[7]=3Di[19];if(i[56])i[29]=3Di[56]=
;if(i[69])i[46]=3Di[69];if(i[85]&&i[3])i[24]=3Di[85];if(i[72])i[54]=3Di[7=
2];if(i[75])i[9]=3Di[75];if(i[92])i[71]=3Di[92];if(i[102])i[6]=3Di[102];i=
f(i[104])i[32]=3Di[104];if(i[112])i[108]=3Di[112];if(i[113])i[109]=3Di[11=
3];i.cpage=3D1}function =
$q(i){_hrF=3D_L.pathname+_L.search+_L.hash;_hx=3D_Lhr.split("/");_fNm=3D"=
/"+_hx[_hx.length-1];var =
I,t,p,u,x;I=3D_mi[i];t=3D0;if(I[77]){p=3DI[77].split(",");for(x=3D0;x<p.l=
ength;x++)if(_hrF.indexOf(p[x])>-1)t=3D1}if(I[2]){u=3DI[2];if(_hrF=3D=3Du=
||_hrF=3D=3Du+"/"||u=3D=3D_Lhr||u+"/"=3D=3D_Lhr||_fNm=3D=3D"/"+u)t=3D1}if=
(t=3D=3D1){$Cw(I);_cip[_cip.length]=3Di}}function _cA(_N,_O,i){var =
I,g;I=3D_mi[i];if(I[_N]){_tmp=3DI[_N];I[_N]=3DI[_O];I[_O]=3D_tmp}else =
return;g=3D$c("el"+i);g.e$=3D1;if(_N=3D=3D81&&I[7]){g.style.background=3D=
I[7];l_=3D1}if(_N=3D=3D80&&I[8]&&I[1]){$c("lnk"+i).oC=3DI[8];$c("lnk"+i).=
style.color=3DI[8];l_=3D1}if(_N=3D=3D87&&I[54]){g.className=3DI[54]}if(_N=
=3D=3D88&&I[46]){g.style.backgroundImage=3D"url("+I[88]+")";d$(i)}if(_N=3D=
=3D91&&I[71]){$c("sep"+i).style.backgroundImage=3D"url("+I[91]+")"}_gm=3D=
$c("simg"+i);if(_gm&&_N=3D=3D83&&I[24]&&I[3])_gm.src=3DI[24];_gm=3D$c("_i=
mg"+i);if(_gm&&_N=3D=3D82&&I[29])_gm.src=3DI[29]}function =
_caA(i){_cA(80,8,i);_cA(81,7,i);_cA(82,29,i);_cA(83,24,i);_cA(87,54,i);_c=
A(88,46,i);_cA(91,71,i)}function sCM(m,f){var =
a,M,i,I;for(a=3D0;a<_m[m][0].length;a++){i=3D_m[m][0][a];I=3D_mi[i];if(I[=
3]){M=3D$h(I[3]);if(M){_m[M][7]=3D0;eval(f);sCM(M,f)}}}}l_=3D0;function =
$K(i){var =
I,t,M,a;I=3D_mi[i];M=3D_m[I[0]];if(!_W.resetAutoOpen&&!I[34]&&!I[41]&&(I[=
2]||I[40]))$Z();if(M[11]=3D=3D"tab"){t=3D$h(I[3]);sCM(I[0],"$Y(M)");if(t)=
{if(M.Tm&&M.Tm!=3Dt){_m[M.Tm][7]=3D0;$Y(M.Tm);$c("el"+M.Ti).e$=3D1;_caA(M=
.Ti);d$(M.Ti)}if(M.Tm!=3Dt)_caA(i);M.Tm=3Dt;M.Ti=3Di;if(M.Tm)_m[M.Tm][7]=3D=
1}}else{_caA(i)}if(I[34]=3D=3D"tree")_oTree();if(I[62]){h$(i);_5(I[62])}m=
mClick();if(I[2]&&I[57]){_ww=3Dopen(I[2],I[35],I[57]);_ww.focus();return =
false}if(I[2]){if(I[34]=3D=3D"html")_Lhr=3DI[2];if($c("mmlink"+I[0]).tagN=
ame=3D=3D"DIV")_L.href=3DI[2]}$R1=3D0;if(I[39]){$R1=3D1;$W(i)}if(I[115]=3D=
=3D"retFalse")return false}function $t(I,_gli,M){if(!I[1])return =
"";_Ltxt=3DI[1];_TiH=3D((I[34]=3D=3D"header"||I[34]=3D=3D"form"||I[34]=3D=
=3D"dragable"||I[86]||!I[2])?1:0);_ofc=3D(I[8]?"color:"+I[8]:"");if(!_TiH=
&&I[58]&&!I.cpage)_ofc=3D"";_fsize=3D(I[12]?";font-Size:"+I[12]:"");_fsty=
le=3D(I[13]?";font-Style:"+I[13]:";font-Style:normal");_fweight=3D(I[14]?=
";font-Weight:"+I[14]:";font-Weight:normal");_ffam=3D(I[15]?";font-Family=
:"+I[15]:"");_tdec=3D(I[33]?";text-Decoration:"+I[33]:";text-Decoration:n=
one;");_disb=3D(I[34]=3D=3D"disabled"?"disabled":"");_clss=3D"";if(I[54])=
{_clss=3D" =
class=3D'"+I[54]+"'";if(!I[33])_tdec=3D"";if(!I[13])_fstyle=3D"";if(!I[14=
])_fweight=3D""}else if(I[58]){_clss=3D" =
class=3D'"+_m[_mi[_gli][0]][6].g_+"'"}m_ee=3D" ";if(!_TiH)m_ee=3D" =
onclick=3D\"return $K("+_gli+")\" =
";_rawC=3D(I[78]?";"+I[78]:"");$1B=3D"";if(M[8])$1B+=3D";text-align:"+M[8=
];else =
if(I[36])$1B+=3D";text-align:"+I[36];_HREF=3D_jv;if(I[2])_HREF=3DI[2];if(=
I[105]=3D=3D"on")_Ltxt=3DI[1].replace(_5("//g"),"&nbsp;");m_e=3D"a =
";if(I[34]=3D=3D"form"||I[34]=3D=3D"header"||I[34]=3D=3D"html")m_e=3D"div=
 ";_link=3D'<'+m_e+_p5+m_ee+' name=3DmM1 onfocus=3D_iF0C('+_gli+') =
href=3D"'+_HREF+'" '+_disb+_clss+' id=3Dlnk'+_gli+' =
style=3D"border:none;background:transparent;display:block;'+_ofc+_ffam+_f=
weight+_fstyle+_fsize+_tdec+$1B+_rawC+'">'+_Ltxt+'</'+m_e+'>';return =
_link}function =
hmL(_mn){_hm=3D$c("mmlink"+_mn);if(_hm)_hm.style.visibility=3D$5}function=
 k$(i){var =
I=3D_mi[i];if(!I)return;_oMT=3D$P(_oMT);if(i>-1)hmL(I[0]);d$(i,1);o_IR=3D=
_itemRef;_itemRef=3Di;if(I&&I[43])_5(I[43]);_itemRef=3Do_IR}function =
_p2(M,t){t.style.width=3D"auto";var =
m=3D_m[M];if(m[13]!=3D$_O){$z(M);if(m[5])p$(M)}m.Q=3D_StO("$1("+M+")",500=
)}function m$(i,_Tel){var =
I,_M,A,a,S;_it=3D"";_el=3D_Tel;I=3D_mi[_el];$m=3DI[0];_M=3D_m[$m];if(_M[1=
1]=3D=3D"tab")I[39]=3D1;$q(_el);if(I[34]=3D=3D"header"){if(I[20])I[8]=3DI=
[20];if(I[21])I[7]=3DI[21];if(I[74])I[9]=3DI[74]}_ofb=3D(I[46]?"backgroun=
d-image:url("+I[46]+");":"");if(!_ofb)_ofb=3D(I[7]?"background:"+I[7]+";"=
:"");$n=3D" onmouseover=3Dh$("+_Tel+") =
";_link=3D$t(I,_el,_M);$o=3D"";if(_M[18])$o=3D"height:"+$pX(_M[18]);if(I[=
28])$o=3D"height:"+$pX(I[28]);_clss=3D"";if(I[54])_clss=3D" =
class=3D'"+I[54]+"' =
";if($Q){if(i=3D=3D0)_it+=3D"<tr>";if(I[50])I[27]=3DI[50]}else{if(I[49])I=
[27]=3DI[49];if(_M[26]&&!I[97]){if(i=3D=3D0||(_M[26]=3D=3D_rwC)){_it+=3D"=
<tr id=3DpTR"+_el+">";_rwC=3D0}_rwC++}else{_it+=3D"<tr =
id=3DpTR"+_el+">"}}_subC=3D0;if(I[3]&&I[24])_subC=3D1;_timg=3D"";_bimg=3D=
"";if(I[34]=3D=3D"tree"){if(I[3]){if(!I[30])I[30]=3D" =
top"}else{if(I[79]){_subC=3D1;I[24]=3DI[79];I[3]=3D"M_doc*"}}}if(I[29]){_=
imalgn=3D"";if(I[31])_imalgn=3D" =
align=3D"+I[31];_imvalgn=3D"";if(I[30])_imvalgn=3D" =
valign=3D"+I[30];_imcspan=3D"";if(_subC&&_imalgn&&I[31]!=3D"left")_imcspa=
n=3D" =
colspan=3D2";_Iwid=3D(I[38])?"width:"+I[38]+"px;":"width:0;";_Ihgt=3D(I[3=
7])?"height:"+I[37]+"px;":"";_impad=3D(I[60])?" =
style=3D'padding:"+$pX(I[60])+"'":"";_alt=3D(I[76])?" =
alt=3D'"+I[76]+"'":"";_timg=3D"<td id=3D_imgO"+_el+" =
"+_imcspan+_imvalgn+_imalgn+_impad+">"+(I[84]?"<a =
href=3D'"+I[84]+"'>":"")+"<img onload=3D_p2("+$m+",this) =
border=3D"+(I[89]?I[89]:0)+" style=3D'display:block;"+_Iwid+_Ihgt+"' =
"+_alt+" id=3D_img"+_el+" =
src=3D'"+I[29]+"'>"+(I[84]?'</a>':'')+"</td>";if(I[30]=3D=3D"top")_timg+=3D=
"</tr><tr>";if(I[30]=3D=3D"right"){_bimg=3D_timg;_timg=3D""}if(I[30]=3D=3D=
"bottom"){_bimg=3D"<tr>"+_timg+"</tr>";_timg=3D""}}$1B=3D(I[11]?";padding=
:"+$pX(I[11]):"");if(!I[1])$1B=3D"";_algn=3D"";if(_M[8])_algn+=3D" =
align=3D"+_M[8];if(I[61])_algn+=3D" =
valign=3D"+I[61];_offbrd=3D"";if(I[9])_offbrd=3D"border:"+I[9]+";";_nw=3D=
" nowrap =
";if(I[105]=3D=3D"off")_nw=3D"";_iw=3D"";if(!$Q&&_M[17])_iw=3D_M[17];if(_=
M[4])_iw=3D_M[4];if(I[55])_iw=3DI[55];if(I[55]!=3D_M[6].itemwidth)_iw=3DI=
[55];if($Q&&isNaN(_iw)&&_iw.indexOf("%")>-1)_iw=3DMath.ceil(100/_M[0].len=
gth)+"%";if(_M[31])_nw=3D"";if(_iw){_nw=3D"";_iw=3D" =
width=3D"+_iw}if(I[97]){_iw+=3D" =
colspan=3D"+I[97];_rwC=3D_M[26]}if(I[108]){_subC=3D1}if(_subC||I[29]){x_=3D=
"";w_=3D"";b_=3D"";d_=3D"";if(I[3]&&I[24]){A=3D0;if(IEDtD&&(_M[11]=3D=3D"=
rtl"||_M[11]=3D=3D"uprtl"))A=3D1;var C=3DI[116]?" =
class=3D"+I[116]:"";_img=3D"<img id=3Dsimg"+_el+" =
onload=3D_p2("+$m+",this) src=3D'"+I[24]+"'"+C+" =
style=3D'width:0px;'>";a_P=3D"";if(I[22])a_P=3D";padding:"+$pX(I[22]);_im=
ps=3D"width=3D1";if(I[23]){_iA=3D"width=3D1";_ivA=3D"";_imP=3DI[23].split=
(" =
");for(a=3D0;a<_imP.length;a++){if(_imP[a]=3D=3D"left")A=3D1;if(_imP[a]=3D=
=3D"right")A=3D0;if(_imP[a]=3D=3D"top"||_imP[a]=3D=3D"bottom"||_imP[a]=3D=
=3D"middle"){_ivA=3D"valign=3D"+_imP[a];if(_imP[a]=3D=3D"bottom")A=3D0}if=
(_imP[a]=3D=3D"center"){b_=3D"<tr>";d_=3D"</tr>";_iA=3D"align=3Dcenter =
width=3D100%"}}_imps=3D_iA+" "+_ivA}_its=3Db_+"<td "+_imps+" =
style=3D'font-size:1px"+a_P+";'>";_ite=3D"</td>"+d_;if(A){x_=3D_its+_img+=
_ite}else{w_=3D_its+_img+_ite}}_it+=3D"<td "+_iw+" =
id=3Del"+_el+$n+_clss+" =
style=3D'padding:0px;"+_offbrd+_ofb+$o+";'>";_pw=3D" width=3D100% =
";if(_W.noSubImageSpacing)_pw=3D"";_it+=3D_TbS+_pw+" height=3D100% =
id=3DMTbl"+_el+">";_it+=3D"<tr =
id=3Dtd"+_el+">";if(I[108])_it+=3D"<td><img id=3Dli108"+_el+" =
src=3D"+I[108]+"></td>";_it+=3Dx_;_it+=3D_timg;if(_link)_it+=3D"<td =
"+_pw+_nw+_algn+" =
style=3D'"+$1B+";'>"+_link+"</td>";_it+=3D_bimg;_it+=3Dw_;if(I[109])_it+=3D=
"<td><img id=3Dri109"+_el+" =
src=3D"+I[109]+"></td>";_it+=3D"</tr>";_it+=3D"</table>";_it+=3D"</td>"}e=
lse{if(_link)_it+=3D"<td "+_iw+_clss+_nw+" id=3Del"+_el+$n+_algn+" =
style=3D'"+$1B+_offbrd+$o+_ofb+";'>"+_link+"</td>"}S=3D"";if((_M[0][i]!=3D=
_M[0][_M[0].length-1])&&I[27]>0){c$=3D"";if(!I[10])I[10]=3DI[8];_sbg=3D";=
background:"+I[10];if(I[71])_sbg=3D";background-image:url("+I[71]+");";if=
($Q){if(I[49]){_sepA=3D"middle";if(I[52])_sepA=3DI[52];S=3D"";if(I[51])S=3D=
"style=3Dpadding:"+$pX(I[51]);_it+=3D"<td id=3Dsep"+_el+" nowrap "+S+" =
valign=3D"+_sepA+" align=3Dleft width=3D1px><div =
style=3D'font-size:1px;width:"+$pX(I[27])+";height:"+$pX(I[49])+";"+c$+_s=
bg+";'></div></td>"}else{if(I[16]&&I[17]){_bwid=3DI[27]/2;if(_bwid<1)_bwi=
d=3D1;q_=3D_bwid+"px solid =
";c$+=3D"border-right:"+q_+I[16]+";";c$+=3D"border-left:"+q_+I[17]+";";c$=
=3D"";_iT=3D_TbS+"><td></td></table>";if(ns6||ns7)_iT=3D"";_it+=3D"<td =
style=3D'empty-cells:show;"+c$+";'>"+_iT+"</td>"}else{if(I[51])S=3D"<td =
nowrap width=3D"+$pX(I[51])+"></td>";_it+=3DS+"<td id=3Dsep"+_el+" =
style=3D'padding:0px;width:"+$pX(I[27])+c$+_sbg+";'>"+_TbS+" =
width=3D"+I[27]+"><td =
style=3D'padding:0px;'></td></table></td>"+S}}}else{if(I[16]&&I[17]){_bwi=
d=3DI[27]/2;if(_bwid<1)_bwid=3D1;q_=3D_bwid+"px solid =
";c$=3D"border-bottom:"+q_+I[16]+";";c$+=3D"border-top:"+q_+I[17]+";";if(=
mac||ns6||sfri||konq||IEDtD||op)I[27]=3D0}if(I[51])S=3D"<tr><td =
height=3D"+I[51]+"></td></tr>";_sepW=3D"100%";if(I[50])_sepW=3DI[50];_sep=
A=3D"center";if(I[52])_sepA=3DI[52];if(!mac)_sbg+=3D";overflow:hidden";_i=
t+=3D"</tr>"+S+"<tr><td style=3Dpadding:0px; id=3Dsep"+_el+" =
align=3D"+_sepA+"><div =
style=3D'"+_sbg+";"+c$+"width:"+$pX(_sepW)+";padding:0px;height:"+$pX(I[2=
7])+"font-size:1px;'></div></td></tr>"+S+""}}if(I[34]=3D=3D"tree"){if(ie&=
&!mac){_it+=3D"<tr id=3DOtI"+_el+" =
style=3D'display:none;'><td></td></tr>"}else{_it+=3D"<tr><td =
style=3D'height:0px;' valign=3Dtop id=3DOtI"+_el+"></td></tr>"}}return =
_it}function $z(U){var =
M=3D_m[U];_gm=3D$c($O+U);if(_gm){_gmt=3D$c("tbl"+U);if(_gmt){$S=3D_gm.sty=
le;$T=3D_gmt.offsetWidth;if((M[14]=3D=3D"relative"))if(!M[17])$S.width=3D=
$T+"px";if(mac){s_=3D(M[12]*2+M[6][65]*2);_MacA=3D$D(_gmt);if(_MacA[2]=3D=
=3D0&&_MacA[3]=3D=3D0){_StO("$z("+U+")",200);return}if(IEDtD)s_=3D0;$S.ov=
erflow=3D$5;$S.height=3D$pX(_MacA[2]+s_);$S.width=3D$pX(_MacA[3]+s_)}if(M=
[31]>0)if($T>M[31])$_E(_gm,_n,_n,_n,M[31])}}}gevent=3D0;function =
_p3(evt,$m){if(evt.target.tagName=3D=3D"TD"){_egm=3D$c($O+$m);gevent=3Dev=
t.layerY-(evt.pageY-$7)+_egm.offsetTop}}function $pX(){var =
g,x,p;g=3Darguments;x=3Dg[1]?"":";";p=3D(!isNaN(g[0]))?g[0]+=3D"px"+x:g[0=
]+x;return p}function _eMD(d){_it=3Dd.split(":");return =
_it[1].replace(/;/g,"")}function createNewMenu(y){var =
M,o,b;_startM=3D0;M=3D_m[y];o=3D_d.createElement("div");o.id=3D"menu"+y;o=
.onmouseout=3Dnew Function("$I()");o.onmouseover=3Dnew =
Function("$J("+y+")");o.onselectstart=3Dnew Function("return =
_f");if(_dB.appendChild){_dB.appendChild(o);o$(y,0);o.className=3D_cls;n=3D=
o.style;if(M[17])n.width=3DM[17]+"px";if(M[24])n.height=3DM[24]+"px";if(_=
ofb)n.background=3D_eMD(_ofb);if(p_)n.border=3D_eMD(p_);o.style.zindex=3D=
999;o.style.visibility=3D_visi;if(n_)n.position=3D_eMD(n_);if($k)n.top=3D=
_eMD($k);if($l)n.left=3D_eMD($l);if(_bgimg)n.backgroundImage=3D_eMD(_bgim=
g);if(_mbgc)n.background=3D_eMD(_mbgc);M[23]=3D0}}_fSz=3D"'>";function =
o$(){var =
g,_M,bw,L,b,B,A;g=3Darguments;$m=3Dg[0];B=3Dg[1];_mcnt++;_M=3D_m[$m];_mt=3D=
"";if(!_M)return;L=3D_M[0].length;A=3Dg[2];if(A&&_M[7]=3D=3D_n){for(b=3D0=
;b<L;b++)$q(_M[0][b]);return}if(_W.noTabIndex)_p5=3D" tabindex=3D-1 =
";else =
_p5=3D"";_MS=3D_M[6];y_=3D"";$k=3D"";$l=3D"";if(_M[7]=3D=3D0)_M[7]=3D_n;i=
f((!_M[14])&&(!_M[7]))$k=3D"top:-"+$pX(_aN);if(_M[2]!=3D_n)if(!isNaN(_M[2=
]))$k=3D"top:"+$pX(_M[2]);if(_M[3]!=3D_n)if(!isNaN(_M[3]))$l=3D"left:"+$p=
X(_M[3]);$o_=3D"";if(_M[18])$o_=3D_M[18];if(_M[24])$o_=3D_M[24];if(_M[9]=3D=
=3D"horizontal"||_M[9]=3D=3D1){_M[9]=3D1;$Q=3D1}else{_M[9]=3D0;$Q=3D0}if(=
$o_)$o_=3D" =
height=3D"+$o_;_ofb=3D"";if(_MS.offbgcolor)_ofb=3D"background:"+_MS.offbg=
color;p_=3D"";q_=3D"";bw=3D"";if(_MS[65]){_brdsty=3D_MS[64]?_MS[64]:"soli=
d";_brdcol=3D_MS.offcolor?_MS.offcolor:"";if(_MS[63])_brdcol=3D_MS[63];if=
(_MS[65]||_MS[65]=3D=3D0)bw=3D_MS[65];q_=3Dbw+"px "+_brdsty+" =
";p_=3D"border:"+q_+_brdcol+";"}_Mh3=3D_MS.high3dcolor;_Ml3=3D_MS.low3dco=
lor;if(_Mh3&&_Ml3){_h3d=3D_Mh3;_l3d=3D_Ml3;if(_MS.swap3d){_h3d=3D_Ml3;_l3=
d=3D_Mh3}q_=3Dbw+"px solid =
";p_=3D"border-bottom:"+q_+_h3d+";";p_+=3D"border-right:"+q_+_h3d+";";p_+=
=3D"border-top:"+q_+_l3d+";";p_+=3D"border-left:"+q_+_l3d+";"}_ns6ev=3D""=
;if(_M[13]=3D=3D$_O&&ns6&&!ns7)_ns6ev=3D"onmousemove=3D'_p3(event,"+$m+")=
'";_bgimg=3D_MS.menubgimage?";background-image:url("+_MS.menubgimage+");"=
:"";if(!_M[14]&&!_M[7]&&_W.fixMozillaZIndex&&ns6)_M[14]=3D"fixed";n_=3DB$=
;if(_M[14]){n_=3D_M[14];if(_M[14]=3D=3D"relative"){$k=3D"";$l=3D""}if(_M[=
14]=3D=3D"fixed"&&!ns6)n_=3DB$}$1B=3D"padding:0px;";if(_M[12])$1B=3D";pad=
ding:"+$pX(_M[12]);_cls=3D"mmenu";if(_MS.offclass)_cls=3D_MS.offclass;if(=
n_)n_=3D"position:"+n_;_visi=3D$5;_mbgc=3D"";if(B=3D=3D1){_hght=3D"";if(_=
M[17])_hght=3D";width:"+$pX(_M[17]);if(_M[24])_hght+=3D";height:"+$pX(_M[=
24]);if(_MS.menubgcolor)_mbgc=3D";background-color:"+_MS.menubgcolor;if(_=
M[11]=3D=3D"rtl")$1B+=3D"align:right;";_mali=3D_M[20]?";text-align:"+_M[2=
0]:"";_rcss=3D_M[34]?_M[34]:"";_mt+=3D"<div class=3Dmmenucontainer =
onmouseout=3D$I() onmouseover=3D$J("+$m+") onselectstart=3D'return 0' =
"+_ns6ev+" id=3Dmenu"+$m+" =
style=3D'"+_rcss+$1B+_ofb+";"+p_+_hght+"z-index:999;visibility:"+_visi+";=
"+n_+";"+$k+";"+$l+_bgimg+_mbgc+_mali+"'>"}if(_M[7]||!_startM||(op5||op6)=
||_W.buildAllMenus){_M[23]=3D1;if(!(mac)&&ie)_fSz=3D"font-size:999px;'>&n=
bsp;";_rwC=3D0;if($Q){if(_M[26]>1)_rwC=3DMath.ceil(_M[0].length/_M[26]);_=
rwT=3D_rwC}else{if(_M[4])y_=3D_M[4];if(_M[6].itemwidth)y_=3D_M[6].itemwid=
th}_mali=3D"";if(_M[20])_mali=3D" align=3D"+_M[20];if(y_)y_=3D" =
width=3D"+y_;if(!_M[32])y_+=3D" "+$o_;_mt+=3D_TbS+y_+" =
id=3Dtbl"+$m+_mali+">";for(b=3D0;b<_M[0].length;b++){_mt+=3Dm$(b,_M[0][b]=
);_el++;if($Q&&_rwC>1){if(b+1=3D=3D_rwT){_mt+=3D"</tr><tr>";_rwT=3D_rwT+_=
rwC}}}if(mac&&!$Q)_mt+=3D"<tr><td =
id=3Dbtm"+$m+"></td></tr>";_mt+=3D"</table>"+" =
";m_e=3D(_M[6].type=3D=3D"div"||(ns61&&_M[6].type=3D=3D"tree")?"div":"a")=
;m_e+=3D_p5;_mt+=3D"<"+m_e+" name=3DmM1 id=3Dmmlink"+$m+" href=3D# =
onclick=3D'return $K(this._itemRef)' =
onmouseover=3D'_p1(this);_mot=3D$P(_mot)' =
style=3D'outline:none;line-height:normal;background:transparent;text-deco=
ration:none;height:1px;width:1px;overflow:hidden;position:"+B$+";"+_fSz+"=
</"+m_e+">"}else{if(B=3D=3D1)for(b=3D0;b<L;b++){$q(_el);_el++}}if(B=3D=3D=
1)_mt+=3D"</div>";if(B=3D=3D1){if(_W._pageIsXML)_mtX+=3D_mt;else =
_d.write(_mt)}else return =
_mt;if(_M[7]){_M[22]=3D$c($O+$m)}if(_M[19]){_M[19]=3D_M[19].toString();_f=
s=3D_M[19].split(",");if(!_fs[1])_fs[1]=3D50;if(!_fs[2])_fs[2]=3D2;_M[19]=
=3D_fs[0];$X($m,_fs[1],_fs[2])}if($m=3D=3D_m.length-1||(A&&_M[7])){_mst=3D=
_StO("$N()",50);$p()}}$S2=3D"6D696C6F6E6963";function =
$p(){if(!_W.disablePagePath){if(_cip.length>0){for(_c=3D0;_c<_cip.length;=
_c++){_ci=3D_cip[_c];_mni=3D$f(_ci);if(_mni=3D=3D-1)_mni=3D_ci;if(_mni+" =
"!=3D$u){while(_mni!=3D-1){var =
I=3D_mi[_mni];$Cw(I);_gi=3D$c("el"+_mni);if(_gi)_gi.e$=3D1;d$(_mni);_omni=
=3D_mni;_mni=3D$f(_mni);if(_mni=3D=3D_omni||_mni+" =
"=3D=3D$u)_mni=3D-1}}}}}}function _p4(V,n){var =
S,m;S=3D[];if(isNaN(V[n])&&V[n].indexOf("offset=3D")=3D=3D0){S[0]=3DV[n].=
substr(7,99);m=3DS[0].indexOf(";minimum=3D");if(m>-1){S[1]=3DS[0].substr(=
m+9,99);S[0]=3DS[0].substr(0,m)}V[n]=3D_n}return S}function p$(m){var =
M=3D_m[m];if(M[5]){_gm=3D$c($O+m);if(!_gm)return;j_=3D$D(_gm);_LoM=3D0;if=
(!_gm.leftOffset){_oSA=3D_p4(M,3);_gm.leftOffset=3D_oSA[0];_gm._LoM=3D_oS=
A[1]}_lft=3D_n;if(!M[3]){if(M[5].indexOf("left")!=3D-1)_lft=3D0;if(M[5].i=
ndexOf("center")!=3D-1)_lft=3D(_bW/2)-(j_[3]/2);if(M[5].indexOf("right")!=
=3D-1)_lft=3D(_bW-j_[3]);if(_gm.leftOffset)_lft=3D_lft+$pU(_gm.leftOffset=
)}_ToM=3D0;if(!_gm.topOffset){_oSA=3D_p4(M,2);_gm.topOffset=3D_oSA[0];_gm=
._ToM=3D_oSA[1]}m_=3D_n;if(!M[2]>=3D0){m_=3D_n;if(M[5].indexOf("top")!=3D=
-1)m_=3D0;if(M[5].indexOf("middle")!=3D-1)m_=3D(_bH/2)-(j_[2]/2);if(M[5].=
indexOf("bottom")!=3D-1)m_=3D_bH-j_[2];if(_gm.topOffset)m_=3Dm_+$pU(_gm.t=
opOffset)}if(_lft<0)_lft=3D0;if(_lft<_gm._LoM)_lft=3D_gm._LoM;if(m_)m_=3D=
$pU(m_);if(_lft)_lft=3D$pU(_lft);$_E(_gm,m_,_lft);if(M[19])M[19]=3Dm_;if(=
M[7])$V(m,1);_gm.m_=3Dm_}}function =
$X(m,c,r){if(!_startM&&!inDragMode){var =
M=3D_m[m];_fogm=3DM[22];h_=3D$D(_fogm);_tt=3D(_sT>M[2]-M[19])?_sT-(_sT-M[=
19]):M[2]-_sT;if(h_&&h_[0]-_sT!=3D_tt){diff=3D_sT+_tt;_rcor=3D(diff-h_[0]=
<1)?r:-r;_fv=3D$pU((diff-_rcor-h_[0])/r);if(r=3D=3D1)_fv=3D$pU((diff-h_[0=
]));if(_fv!=3D0)diff=3Dh_[0]+_fv;$_E(_fogm,diff);if(h_.m_)M[19]=3Dh_.m_;i=
f(ie55){_fogm=3D$c("ifM"+m);if(_fogm)$_E(_fogm,diff)}}}_fS=3D_StO("$X('"+=
m+"',"+c+","+r+")",c)}function $qe(s){var =
x,q,a;x=3Ds.split("");q=3D"";for(a=3D0;a<s.length;a++){q+=3D"%"+x[a]+x[a+=
1];a++}return unescape(q)}$S1=3D"687474703A2F2F7777772E";function =
$N(){var =
a;$r();if(_bH!=3D_oldbH||_bW!=3D_oldbW){_tMR();for(a=3D0;a<_m.length;a++)=
{if(_m[a]&&_m[a][7]){$Y(a,1);$z(a)}}}if(_oldbH=3D=3D0){_oldbH=3D_bH;if(!_=
W.disableMouseMove)_d.onmousemove=3DgMY}if(_startM){$mD=3D0;$J(-1);_ofMT=3D=
1}_startM=3D0;_oldbH=3D_bH;_oldbW=3D_bW;_mst=3D_StO("$N()",70)}getMenuByI=
tem=3D$d;getParentMenuByItem=3D$e;getParentItemByItem=3D$f;_drawMenu=3Do$=
;BDMenu=3Dg$;gmobj=3D$c;menuDisplay=3D$Y;gpos=3D$D;spos=3D$_E;_fixMenu=3D=
$z;getMenuByName=3D$h;itemOn=3De$;itemOff=3Dd$;_popi=3Dh$;clickAction=3D$=
K;_setPosition=3Dp$;closeAllMenus=3D$Z;function $V($m,_on){var =
_M,F,f,p,g,S;_M=3D_m[$m];if(ns6||_M.treemenu||_M[14]=3D=3D"relative"||_W.=
_CFix||!_M[22])return;if(ie55){if(_on){if(_M[7])F=3D"iFM"+$m;else =
F=3D"iF"+$mD;if(_M.ifr)f=3D_M.ifr;else =
f=3D$c(F);if(!f){if(!_lDd)return;f=3D_d.createElement("iframe");S=3Df.sty=
le;f.src=3D"javascript:false";f.id=3DF;S.filter=3D"Alpha(Opacity=3D0)";S.=
position=3DB$;S.className=3D"mmenu";if(_dB.appendChild)_dB.appendChild(f)=
}p=3D$D(_M[22]);S=3Df.style;$_E(f,p[0],p[1],p[2],p[3]);S.visibility=3D$6;=
S.zIndex=3D_M[22].style.zIndex-2;_M.ifr=3Df}else{g=3D$c("iF"+($mD-1));if(=
g){$_E(g,-9999);g.style.visibility=3D$5;_M.ifr=3D_n}}}}=0A=
=0A=
=0A=
/* --- End mmenudom.js --- */=0A=
/* --- Start listmenus.js --- */=0A=
=0A=
/*
   Milonic DHTML Menu HTML Unordered List Based Module version 2.3 - =
January 24 2008
   This module is only compatible with the Milonic DHTML Menu version =
5.7 or higher

   Copyright 2008 (c) Milonic Solutions Limited. All Rights Reserved.
   This is a commercial software product, please visit =
http://www.milonic.com/ for more information.
  =20
   The object of this module is to enable data entered as a HTML =
un-ordered list to be used inside menus.
   Data for menu items is taken from HTML Lists and used for menus. =
Styles are created as normal DHTML Menus and referenced as a CSS =
classname.
*/

_lpss=3D0
_y3=3Dnew Array();
function buildListMenu(_mnu,_sty,_prps)
{=09
	_lpss++
	if(_lpss=3D=3D1)
	{
		_y5=3D0;
		_y1=3D0;
		for(_a=3D0;_a<_d.links.length;_a++){
		_y4=3D_d.links[_a];
			pE=3D_y4.parentNode;
			if(pE.tagName=3D=3D"LI"){
				while(pE){
					if(pE.tagName=3D=3D"UL"){
						if(!pE.menuId)
						{
							pE.menuId=3D"mmenu"+_y5;
							if(pE.id=3D=3D_mnu)pE.style.display=3D"none"
							_y3[_y5]=3Dnew Array();
							=
if(_y1)_y3[_y1][_y3[_y1].length-1]+=3D";showmenu=3Dlistmenu"+_y5+";";
							if(pE.className)_y3[_y5].mS=3DpE.className

							if(pE.parentNode.tagName!=3D"LI")
							{
								_y3[_y5].mM=3D1
								msMenu=3DpE.id
							}
							_y3[_y5].msMenu=3DmsMenu						=09
							_y5++;
						}
						break;
					}
					pE=3DpE.parentNode;
				}
				if(pE)
				{
					_y1=3DpE.menuId.substr(5,3);
					if(sfri||ie)txt=3D_y4.innerHTML;else txt=3D_y4.text;
					_y3[_y1][_y3[_y1].length]=3D"text=3D"+txt.replace(/\"/g,"\\'")+";"
					_y7=3D""
				=09
					if(_y4.title)_y7=3D"title=3D"+_y4.title+";"
					if(_y4.target)_y7+=3D"target=3D"+_y4.target+";"
					=
if(_y4.href.substr(_y4.href.length-1,1)!=3D"#")_y3[_y1][_y3[_y1].length-1=
]+=3D"url=3D"+_y4+";"+_y7
				=09
				=09
				}
			}
		}
	}
	_y6=3D"";
	for(_a=3D0;_a<_y3.length;_a++){
		if(_y3[_a].msMenu=3D=3D_mnu)
		{
			_mN=3D"listmenu"+_a
			if(_y3[_a].mM)_mN=3D_mnu
			_y6+=3D"with(milonic=3Dnew menuname('"+_mN+"')){"
			if(_y3[_a].mS)_y6+=3D"style=3D"+_y3[_a].mS+";";else =
_y6+=3D"style=3D"+_sty+";";
			if(_y3[_a].mM)_y6+=3D_prps;
			=
for(_b=3D0;_b<_y3[_a].length;_b++){_y6+=3D"aI(\""+_y3[_a][_b].replace(/\"=
/g,"'")+";\");\n"}
			_y6+=3D"}"
		}
	}
	_d.write("<script>"+_y6.replace(/\n/g,"")+"drawMenus();<\/script>")
}=0A=
=0A=
/* --- End listmenus.js --- */=0A=
/* --- Start MenuStyle.js --- */=0A=
=0A=
fixMozillaZIndex=3Dtrue; //Fixes Z-Index problem  with Mozilla browsers =
but causes odd scrolling problem, toggle to see if it helps=0A=
_menuCloseDelay=3D500;=0A=
_menuOpenDelay=3D150;=0A=
_subOffsetTop=3D0;=0A=
_subOffsetLeft=3D-2;=0A=
=0A=
with(Menu=3Dnew mm_style()){=0A=
  alwaysvisible  =3D 1;=0A=
  menuwidth      =3D "100%";=0A=
  menuheight     =3D "23px";=0A=
  align          =3D "left";=0A=
  styleid        =3D 1;=0A=
  bgimage        =3D "";=0A=
  fontfamily     =3D "Verdana,Arial,Helvetica,sans-serif";=0A=
  fontsize       =3D "12px";=0A=
  fontstyle      =3D "normal";=0A=
  fontweight     =3D "none";=0A=
  itemheight     =3D "18px";=0A=
  padding        =3D "3px 0px 3px 0px";=0A=
  offcolor       =3D "#FFFFFF";=0A=
  onbgcolor      =3D "none";=0A=
  oncolor        =3D "#FFFFFF";=0A=
  outfilter      =3D "fade(duration=3D0)";=0A=
  overbgimage    =3D "";=0A=
  overfilter     =3D "Fade(duration=3D0);Alpha(opacity=3D100);";=0A=
  separatorimage =3D "";=0A=
  separatorsize  =3D "";=0A=
  rawcss         =3D "width:80px; =
padding-left:3px;padding-right:0px;white-space:nowrap;";=0A=
};=0A=
=0A=
with(SubMenu=3Dnew mm_style()){=0A=
  menuwidth      =3D "100%";=0A=
  align          =3D "left";=0A=
  bordercolor    =3D "none";=0A=
  borderstyle    =3D "none";=0A=
  borderwidth    =3D "";=0A=
  fontfamily     =3D "Arial,Helvetica,sans-serif";=0A=
  fontsize       =3D "12px";=0A=
  fontstyle      =3D "normal";=0A=
  fontweight     =3D "none";=0A=
  itemheight     =3D "14px";=0A=
  keepalive      =3D "true";=0A=
  offbgcolor     =3D "#838FB4";=0A=
  offcolor       =3D "#ffffff";=0A=
  onbgcolor      =3D "#838FB4";=0A=
  oncolor        =3D "#ffffff";=0A=
  ondecoration   =3D "underline";=0A=
  outfilter      =3D "fade(duration=3D0)";=0A=
  overfilter     =3D "fade(duration=3D0);Alpha(opacity=3D95);";=0A=
  padding        =3D "4px 0px 4px 4px";=0A=
  rawcss         =3D "width: 178px;white-space:nowrap;";=0A=
  separatorcolor =3D "";=0A=
  separatorsize  =3D "";=0A=
};=0A=
=0A=
=0A=
=0A=
/* --- End MenuStyle.js --- */=0A=
/* --- Start VVDOM.js --- */=0A=
=0A=
/*=0A=
 *  VVDOM.js - DOM Compatibility scripts between IE/Firefox/etc=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 */=0A=
=0A=
function VVDOM() {=0A=
=0A=
}=0A=
=0A=
//-----------------------------------------------------------------------=
------=0A=
/**=0A=
 * VVMLoadManager class, should not instantiate instances of this, use =
the=0A=
 * instance instantiated below (loadMgr)=0A=
 */=0A=
//-----------------------------------------------------------------------=
------=0A=
function LoadManager()=0A=
{=0A=
    this.loadEvents =3D new Array();=0A=
    this.unLoadEvents =3D new Array();=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /**=0A=
     * Process load chain=0A=
     */=0A=
    this.processLoad =3D function()=0A=
    {=0A=
        for(i =3D 0; i < this.loadEvents.length; i++)=0A=
        {=0A=
            eval(this.loadEvents[i]);=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /**=0A=
     * Process unload chain=0A=
     */=0A=
    this.processUnload =3D function()=0A=
    {=0A=
        for(i =3D 0; i < this.unLoadEvents.length; i++)=0A=
        {=0A=
            eval(this.unLoadEvents[i]);=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /**=0A=
     * Add an event to the load chain=0A=
     *=0A=
     * @param string event - event to add, this will be eval'd in =
processLoad=0A=
     */=0A=
    this.addLoadEvent =3D function(event)=0A=
    {=0A=
        this.loadEvents.push(event);=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /**=0A=
     * Add an event to the unload chain=0A=
     *=0A=
     * @param string event - event to add, this will be eval'd in =
processLoad=0A=
     */=0A=
    this.addUnloadEvent =3D function(event)=0A=
    {=0A=
        this.unLoadEvents.push(event);=0A=
    }=0A=
}=0A=
loadMgr =3D new LoadManager();=0A=
//-----------------------------------------------------------------------=
------=0A=
=0A=
/* --- End VVDOM.js --- */=0A=
/* --- Start /home/httpd/app_frame/webroot/js/slider.js --- */=0A=
=0A=
// script.aculo.us slider.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007=0A=
=0A=
// Copyright (c) 2005-2007 Marty Haught, Thomas Fuchs =0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
if (!Control) var Control =3D { };=0A=
=0A=
// options:=0A=
//  axis: 'vertical', or 'horizontal' (default)=0A=
//=0A=
// callbacks:=0A=
//  onChange(value)=0A=
//  onSlide(value)=0A=
Control.Slider =3D Class.create({=0A=
  initialize: function(handle, track, options) {=0A=
    var slider =3D this;=0A=
    =0A=
    if (Object.isArray(handle)) {=0A=
      this.handles =3D handle.collect( function(e) { return $(e) });=0A=
    } else {=0A=
      this.handles =3D [$(handle)];=0A=
    }=0A=
    =0A=
    this.track   =3D $(track);=0A=
    this.options =3D options || { };=0A=
=0A=
    this.axis      =3D this.options.axis || 'horizontal';=0A=
    this.increment =3D this.options.increment || 1;=0A=
    this.step      =3D parseInt(this.options.step || '1');=0A=
    this.range     =3D this.options.range || $R(0,1);=0A=
    =0A=
    this.value     =3D 0; // assure backwards compat=0A=
    this.values    =3D this.handles.map( function() { return 0 });=0A=
    this.spans     =3D this.options.spans ? =
this.options.spans.map(function(s){ return $(s) }) : false;=0A=
    this.options.startSpan =3D $(this.options.startSpan || null);=0A=
    this.options.endSpan   =3D $(this.options.endSpan || null);=0A=
=0A=
    this.restricted =3D this.options.restricted || false;=0A=
=0A=
    this.maximum   =3D this.options.maximum || this.range.end;=0A=
    this.minimum   =3D this.options.minimum || this.range.start;=0A=
=0A=
    // Will be used to align the handle onto the track, if necessary=0A=
    this.alignX =3D parseInt(this.options.alignX || '0');=0A=
    this.alignY =3D parseInt(this.options.alignY || '0');=0A=
    =0A=
    this.trackLength =3D this.maximumOffset() - this.minimumOffset();=0A=
=0A=
    this.handleLength =3D this.isVertical() ? =0A=
      (this.handles[0].offsetHeight !=3D 0 ? =0A=
        this.handles[0].offsetHeight : =
this.handles[0].style.height.replace(/px$/,"")) : =0A=
      (this.handles[0].offsetWidth !=3D 0 ? this.handles[0].offsetWidth =
: =0A=
        this.handles[0].style.width.replace(/px$/,""));=0A=
=0A=
    this.active   =3D false;=0A=
    this.dragging =3D false;=0A=
    this.disabled =3D false;=0A=
=0A=
    if (this.options.disabled) this.setDisabled();=0A=
=0A=
    // Allowed values array=0A=
    this.allowedValues =3D this.options.values ? =
this.options.values.sortBy(Prototype.K) : false;=0A=
    if (this.allowedValues) {=0A=
      this.minimum =3D this.allowedValues.min();=0A=
      this.maximum =3D this.allowedValues.max();=0A=
    }=0A=
=0A=
    this.eventMouseDown =3D this.startDrag.bindAsEventListener(this);=0A=
    this.eventMouseUp   =3D this.endDrag.bindAsEventListener(this);=0A=
    this.eventMouseMove =3D this.update.bindAsEventListener(this);=0A=
=0A=
    // Initialize handles in reverse (make sure first handle is active)=0A=
    this.handles.each( function(h,i) {=0A=
      i =3D slider.handles.length-1-i;=0A=
      slider.setValue(parseFloat(=0A=
        (Object.isArray(slider.options.sliderValue) ? =0A=
          slider.options.sliderValue[i] : slider.options.sliderValue) || =0A=
         slider.range.start), i);=0A=
      h.makePositioned().observe("mousedown", slider.eventMouseDown);=0A=
    });=0A=
    =0A=
    this.track.observe("mousedown", this.eventMouseDown);=0A=
    document.observe("mouseup", this.eventMouseUp);=0A=
    document.observe("mousemove", this.eventMouseMove);=0A=
    =0A=
    this.initialized =3D true;=0A=
  },=0A=
  dispose: function() {=0A=
    var slider =3D this;    =0A=
    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);=0A=
    Event.stopObserving(document, "mouseup", this.eventMouseUp);=0A=
    Event.stopObserving(document, "mousemove", this.eventMouseMove);=0A=
    this.handles.each( function(h) {=0A=
      Event.stopObserving(h, "mousedown", slider.eventMouseDown);=0A=
    });=0A=
  },=0A=
  setDisabled: function(){=0A=
    this.disabled =3D true;=0A=
  },=0A=
  setEnabled: function(){=0A=
    this.disabled =3D false;=0A=
  },  =0A=
  getNearestValue: function(value){=0A=
    if (this.allowedValues){=0A=
      if (value >=3D this.allowedValues.max()) =
return(this.allowedValues.max());=0A=
      if (value <=3D this.allowedValues.min()) =
return(this.allowedValues.min());=0A=
      =0A=
      var offset =3D Math.abs(this.allowedValues[0] - value);=0A=
      var newValue =3D this.allowedValues[0];=0A=
      this.allowedValues.each( function(v) {=0A=
        var currentOffset =3D Math.abs(v - value);=0A=
        if (currentOffset <=3D offset){=0A=
          newValue =3D v;=0A=
          offset =3D currentOffset;=0A=
        } =0A=
      });=0A=
      return newValue;=0A=
    }=0A=
    if (value > this.range.end) return this.range.end;=0A=
    if (value < this.range.start) return this.range.start;=0A=
    return value;=0A=
  },=0A=
  setValue: function(sliderValue, handleIdx){=0A=
    if (!this.active) {=0A=
      this.activeHandleIdx =3D handleIdx || 0;=0A=
      this.activeHandle    =3D this.handles[this.activeHandleIdx];=0A=
      this.updateStyles();=0A=
    }=0A=
    handleIdx =3D handleIdx || this.activeHandleIdx || 0;=0A=
    if (this.initialized && this.restricted) {=0A=
      if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))=0A=
        sliderValue =3D this.values[handleIdx-1];=0A=
      if ((handleIdx < (this.handles.length-1)) && =
(sliderValue>this.values[handleIdx+1]))=0A=
        sliderValue =3D this.values[handleIdx+1];=0A=
    }=0A=
    sliderValue =3D this.getNearestValue(sliderValue);=0A=
    this.values[handleIdx] =3D sliderValue;=0A=
    this.value =3D this.values[0]; // assure backwards compat=0A=
    =0A=
    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
=3D =0A=
      this.translateToPx(sliderValue);=0A=
    =0A=
    this.drawSpans();=0A=
    if (!this.dragging || !this.event) this.updateFinished();=0A=
  },=0A=
  setValueBy: function(delta, handleIdx) {=0A=
    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + =
delta, =0A=
      handleIdx || this.activeHandleIdx || 0);=0A=
  },=0A=
  translateToPx: function(value) {=0A=
    return Math.round(=0A=
      =
((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) =
* =0A=
      (value - this.range.start)) + "px";=0A=
  },=0A=
  translateToValue: function(offset) {=0A=
    return ((offset/(this.trackLength-this.handleLength) * =0A=
      (this.range.end-this.range.start)) + this.range.start);=0A=
  },=0A=
  getRange: function(range) {=0A=
    var v =3D this.values.sortBy(Prototype.K); =0A=
    range =3D range || 0;=0A=
    return $R(v[range],v[range+1]);=0A=
  },=0A=
  minimumOffset: function(){=0A=
    return(this.isVertical() ? this.alignY : this.alignX);=0A=
  },=0A=
  maximumOffset: function(){=0A=
    return(this.isVertical() ? =0A=
      (this.track.offsetHeight !=3D 0 ? this.track.offsetHeight :=0A=
        this.track.style.height.replace(/px$/,"")) - this.alignY : =0A=
      (this.track.offsetWidth !=3D 0 ? this.track.offsetWidth : =0A=
        this.track.style.width.replace(/px$/,"")) - this.alignX);=0A=
  },  =0A=
  isVertical:  function(){=0A=
    return (this.axis =3D=3D 'vertical');=0A=
  },=0A=
  drawSpans: function() {=0A=
    var slider =3D this;=0A=
    if (this.spans)=0A=
      $R(0, this.spans.length-1).each(function(r) { =
slider.setSpan(slider.spans[r], slider.getRange(r)) });=0A=
    if (this.options.startSpan)=0A=
      this.setSpan(this.options.startSpan,=0A=
        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value =
));=0A=
    if (this.options.endSpan)=0A=
      this.setSpan(this.options.endSpan, =0A=
        $R(this.values.length>1 ? =
this.getRange(this.spans.length-1).max() : this.value, this.maximum));=0A=
  },=0A=
  setSpan: function(span, range) {=0A=
    if (this.isVertical()) {=0A=
      span.style.top =3D this.translateToPx(range.start);=0A=
      span.style.height =3D this.translateToPx(range.end - range.start + =
this.range.start);=0A=
    } else {=0A=
      span.style.left =3D this.translateToPx(range.start);=0A=
      span.style.width =3D this.translateToPx(range.end - range.start + =
this.range.start);=0A=
    }=0A=
  },=0A=
  updateStyles: function() {=0A=
    this.handles.each( function(h){ Element.removeClassName(h, =
'selected') });=0A=
    Element.addClassName(this.activeHandle, 'selected');=0A=
  },=0A=
  startDrag: function(event) {=0A=
    if (Event.isLeftClick(event)) {=0A=
      if (!this.disabled){=0A=
        this.active =3D true;=0A=
        =0A=
        var handle =3D Event.element(event);=0A=
        var pointer  =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
        var track =3D handle;=0A=
        if (track=3D=3Dthis.track) {=0A=
          var offsets  =3D Position.cumulativeOffset(this.track); =0A=
          this.event =3D event;=0A=
          this.setValue(this.translateToValue( =0A=
           (this.isVertical() ? pointer[1]-offsets[1] : =
pointer[0]-offsets[0])-(this.handleLength/2)=0A=
          ));=0A=
          var offsets  =3D Position.cumulativeOffset(this.activeHandle);=0A=
          this.offsetX =3D (pointer[0] - offsets[0]);=0A=
          this.offsetY =3D (pointer[1] - offsets[1]);=0A=
        } else {=0A=
          // find the handle (prevents issues with Safari)=0A=
          while((this.handles.indexOf(handle) =3D=3D -1) && =
handle.parentNode) =0A=
            handle =3D handle.parentNode;=0A=
            =0A=
          if (this.handles.indexOf(handle)!=3D-1) {=0A=
            this.activeHandle    =3D handle;=0A=
            this.activeHandleIdx =3D =
this.handles.indexOf(this.activeHandle);=0A=
            this.updateStyles();=0A=
            =0A=
            var offsets  =3D =
Position.cumulativeOffset(this.activeHandle);=0A=
            this.offsetX =3D (pointer[0] - offsets[0]);=0A=
            this.offsetY =3D (pointer[1] - offsets[1]);=0A=
          }=0A=
        }=0A=
      }=0A=
      Event.stop(event);=0A=
    }=0A=
  },=0A=
  update: function(event) {=0A=
   if (this.active) {=0A=
      if (!this.dragging) this.dragging =3D true;=0A=
      this.draw(event);=0A=
      if (Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
      Event.stop(event);=0A=
   }=0A=
  },=0A=
  draw: function(event) {=0A=
    var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
    var offsets =3D Position.cumulativeOffset(this.track);=0A=
    pointer[0] -=3D this.offsetX + offsets[0];=0A=
    pointer[1] -=3D this.offsetY + offsets[1];=0A=
    this.event =3D event;=0A=
    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] =
: pointer[0] ));=0A=
    if (this.initialized && this.options.onSlide)=0A=
      this.options.onSlide(this.values.length>1 ? this.values : =
this.value, this);=0A=
  },=0A=
  endDrag: function(event) {=0A=
    if (this.active && this.dragging) {=0A=
      this.finishDrag(event, true);=0A=
      Event.stop(event);=0A=
    }=0A=
    this.active =3D false;=0A=
    this.dragging =3D false;=0A=
  },  =0A=
  finishDrag: function(event, success) {=0A=
    this.active =3D false;=0A=
    this.dragging =3D false;=0A=
    this.updateFinished();=0A=
  },=0A=
  updateFinished: function() {=0A=
    if (this.initialized && this.options.onChange) =0A=
      this.options.onChange(this.values.length>1 ? this.values : =
this.value, this);=0A=
    this.event =3D null;=0A=
  }=0A=
});=0A=
=0A=
=0A=
/* --- End /home/httpd/app_frame/webroot/js/slider.js --- */=0A=
/* --- Start /home/httpd/app_frame/webroot/js/dragdrop.js --- */=0A=
=0A=
// script.aculo.us dragdrop.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2007 Sammi Williams =
(http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
if(Object.isUndefined(Effect))=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(Object.isArray(containment)) {=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 drop, affected =3D [];=0A=
    =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=
=0A=
    if(this.last_active && this.last_active !=3D drop) =
this.deactivate(this.last_active);=0A=
    if (drop) {=0A=
      Position.within(drop.element, point[0], point[1]);=0A=
      if(drop.onHover)=0A=
        drop.onHover(element, drop.element, =
Position.overlap(drop.overlap, drop.element));=0A=
      =0A=
      if (drop !=3D this.last_active) 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=
        return true; =0A=
      }=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=
  initialize: function(element) {=0A=
    var defaults =3D {=0A=
      handle: false,=0A=
      reverteffect: function(element, top_offset, left_offset) {=0A=
        var dur =3D =
Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;=0A=
        new Effect.Move(element, { x: -left_offset, y: -top_offset, =
duration: dur,=0A=
          queue: {scope:'_draggable', position:'end'}=0A=
        });=0A=
      },=0A=
      endeffect: function(element) {=0A=
        var toOpacity =3D Object.isNumber(element._opacity) ? =
element._opacity : 1.0;=0A=
        new Effect.Opacity(element, {duration:0.2, from:0.7, =
to:toOpacity, =0A=
          queue: {scope:'_draggable', position:'end'},=0A=
          afterFinish: function(){ =0A=
            Draggable._dragging[element] =3D false =0A=
          }=0A=
        }); =0A=
      },=0A=
      zindex: 1000,=0A=
      revert: false,=0A=
      quiet: false,=0A=
      scroll: false,=0A=
      scrollSensitivity: 20,=0A=
      scrollSpeed: 15,=0A=
      snap: false,  // false, or xy or [x,y] or function(x,y){ return =
[x,y] }=0A=
      delay: 0=0A=
    };=0A=
    =0A=
    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))=0A=
      Object.extend(defaults, {=0A=
        starteffect: function(element) {=0A=
          element._opacity =3D Element.getOpacity(element);=0A=
          Draggable._dragging[element] =3D true;=0A=
          new Effect.Opacity(element, {duration:0.2, =
from:element._opacity, to:0.7}); =0A=
        }=0A=
      });=0A=
    =0A=
    var options =3D Object.extend(defaults, arguments[1] || { });=0A=
=0A=
    this.element =3D $(element);=0A=
    =0A=
    if(options.handle && Object.isString(options.handle))=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.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(!Object.isUndefined(Draggable._dragging[this.element]) &&=0A=
      Draggable._dragging[this.element]) return;=0A=
    if(Event.isLeftClick(event)) {    =0A=
      // abort on form elements, fixes a Firefox issue=0A=
      var src =3D Event.element(event);=0A=
      if((tag_name =3D src.tagName.toUpperCase()) && (=0A=
        tag_name=3D=3D'INPUT' ||=0A=
        tag_name=3D=3D'SELECT' ||=0A=
        tag_name=3D=3D'OPTION' ||=0A=
        tag_name=3D=3D'BUTTON' ||=0A=
        tag_name=3D=3D'TEXTAREA')) return;=0A=
        =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=
    if(!this.delta)=0A=
      this.delta =3D this.currentDelta();=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=
      this.element._originallyAbsolute =3D =
(this.element.getStyle('position') =3D=3D 'absolute');=0A=
      if (!this.element._originallyAbsolute)=0A=
        Position.absolutize(this.element);=0A=
      this.element.parentNode.insertBefore(this._clone, this.element);=0A=
    }=0A=
    =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=
    =0A=
    if(!this.options.quiet){=0A=
      Position.prepare();=0A=
      Droppables.show(pointer, this.element);=0A=
    }=0A=
    =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(Prototype.Browser.WebKit) 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.quiet){=0A=
      Position.prepare();=0A=
      var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
      Droppables.show(pointer, this.element);=0A=
    }=0A=
=0A=
    if(this.options.ghosting) {=0A=
      if (!this.element._originallyAbsolute)=0A=
        Position.relativize(this.element);=0A=
      delete this.element._originallyAbsolute;=0A=
      Element.remove(this._clone);=0A=
      this._clone =3D null;=0A=
    }=0A=
=0A=
    var dropped =3D false; =0A=
    if(success) { =0A=
      dropped =3D Droppables.fire(event, this.element); =0A=
      if (!dropped) dropped =3D false; =0A=
    }=0A=
    if(dropped && this.options.onDropped) =
this.options.onDropped(this.element);=0A=
    Draggables.notify('onEnd', this, event);=0A=
=0A=
    var revert =3D this.options.revert;=0A=
    if(revert && Object.isFunction(revert)) revert =3D =
revert(this.element);=0A=
    =0A=
    var d =3D this.currentDelta();=0A=
    if(revert && this.options.reverteffect) {=0A=
      if (dropped =3D=3D 0 || revert !=3D 'failure')=0A=
        this.options.reverteffect(this.element,=0A=
          d[1]-this.delta[1], d[0]-this.delta[0]);=0A=
    } else {=0A=
      this.delta =3D d;=0A=
    }=0A=
=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(Object.isFunction(this.options.snap)) {=0A=
        p =3D this.options.snap(p[0],p[1],this);=0A=
      } else {=0A=
      if(Object.isArray(this.options.snap)) {=0A=
        p =3D p.map( function(v, i) {=0A=
          return (v/this.options.snap[i]).round()*this.options.snap[i] =
}.bind(this))=0A=
      } else {=0A=
        p =3D p.map( function(v) {=0A=
          return (v/this.options.snap).round()*this.options.snap =
}.bind(this))=0A=
      }=0A=
    }}=0A=
    =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=
Draggable._dragging =3D { };=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var SortableObserver =3D Class.create({=0A=
  initialize: function(element, observer) {=0A=
    this.element   =3D $(element);=0A=
    this.observer  =3D observer;=0A=
    this.lastValue =3D Sortable.serialize(this.element);=0A=
  },=0A=
  =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.toUpperCase() !=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=
      quiet:       false, =0A=
      scroll:      false,=0A=
      scrollSensitivity: 20,=0A=
      scrollSpeed: 15,=0A=
      format:      this.SERIALIZE_RULE,=0A=
      =0A=
      // these take arrays of elements or ids and can be =0A=
      // used for better initialization performance=0A=
      elements:    false,=0A=
      handles:     false,=0A=
      =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=
      quiet:       options.quiet,=0A=
      scroll:      options.scroll,=0A=
      scrollSpeed: options.scrollSpeed,=0A=
      scrollSensitivity: options.scrollSensitivity,=0A=
      delay:       options.delay,=0A=
      ghosting:    options.ghosting,=0A=
      constraint:  options.constraint,=0A=
      handle:      options.handle };=0A=
=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=
    (options.elements || this.findElements(element, options) || =
[]).each( function(e,i) {=0A=
      var handle =3D options.handles ? $(options.handles[i]) :=0A=
        (options.handle ? $(e).select('.' + options.handle)[0] : e); =0A=
      options.draggables.push(=0A=
        new Draggable(e, Object.extend(options_for_draggable, { handle: =
handle })));=0A=
      Droppables.add(e, options_for_droppable);=0A=
      if(options.tree) e.treeNode =3D element;=0A=
      options.droppables.push(e);      =0A=
    });=0A=
    =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=
=0A=
=0A=
/* --- End /home/httpd/app_frame/webroot/js/dragdrop.js --- */=0A=
/* --- Start /home/httpd/app_frame/webroot/js/unittest.js --- */=0A=
=0A=
// script.aculo.us unittest.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)=0A=
//           (c) 2005-2007 Michael Schuerig =
(http://www.schuerig.de/michael/)=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=
// experimental, Firefox-only=0A=
Event.simulateMouse =3D function(element, eventName) {=0A=
  var options =3D Object.extend({=0A=
    pointerX: 0,=0A=
    pointerY: 0,=0A=
    buttons:  0,=0A=
    ctrlKey:  false,=0A=
    altKey:   false,=0A=
    shiftKey: false,=0A=
    metaKey:  false=0A=
  }, arguments[2] || {});=0A=
  var oEvent =3D document.createEvent("MouseEvents");=0A=
  oEvent.initMouseEvent(eventName, true, true, document.defaultView, =0A=
    options.buttons, options.pointerX, options.pointerY, =
options.pointerX, options.pointerY, =0A=
    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, =
0, $(element));=0A=
  =0A=
  if(this.mark) Element.remove(this.mark);=0A=
  this.mark =3D document.createElement('div');=0A=
  this.mark.appendChild(document.createTextNode(" "));=0A=
  document.body.appendChild(this.mark);=0A=
  this.mark.style.position =3D 'absolute';=0A=
  this.mark.style.top =3D options.pointerY + "px";=0A=
  this.mark.style.left =3D options.pointerX + "px";=0A=
  this.mark.style.width =3D "5px";=0A=
  this.mark.style.height =3D "5px;";=0A=
  this.mark.style.borderTop =3D "1px solid red;"=0A=
  this.mark.style.borderLeft =3D "1px solid red;"=0A=
  =0A=
  if(this.step)=0A=
    alert('['+new Date().getTime().toString()+'] =
'+eventName+'/'+Test.Unit.inspect(options));=0A=
  =0A=
  $(element).dispatchEvent(oEvent);=0A=
};=0A=
=0A=
// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", =
this doesn't work in 1.0.6 or DP2.=0A=
// You need to downgrade to 1.0.4 for now to get this working=0A=
// See https://bugzilla.mozilla.org/show_bug.cgi?id=3D289940 for the fix =
that fixed too much=0A=
Event.simulateKey =3D function(element, eventName) {=0A=
  var options =3D Object.extend({=0A=
    ctrlKey: false,=0A=
    altKey: false,=0A=
    shiftKey: false,=0A=
    metaKey: false,=0A=
    keyCode: 0,=0A=
    charCode: 0=0A=
  }, arguments[2] || {});=0A=
=0A=
  var oEvent =3D document.createEvent("KeyEvents");=0A=
  oEvent.initKeyEvent(eventName, true, true, window, =0A=
    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,=0A=
    options.keyCode, options.charCode );=0A=
  $(element).dispatchEvent(oEvent);=0A=
};=0A=
=0A=
Event.simulateKeys =3D function(element, command) {=0A=
  for(var i=3D0; i<command.length; i++) {=0A=
    =
Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});=0A=
  }=0A=
};=0A=
=0A=
var Test =3D {}=0A=
Test.Unit =3D {};=0A=
=0A=
// security exception workaround=0A=
Test.Unit.inspect =3D Object.inspect;=0A=
=0A=
Test.Unit.Logger =3D Class.create();=0A=
Test.Unit.Logger.prototype =3D {=0A=
  initialize: function(log) {=0A=
    this.log =3D $(log);=0A=
    if (this.log) {=0A=
      this._createLogTable();=0A=
    }=0A=
  },=0A=
  start: function(testName) {=0A=
    if (!this.log) return;=0A=
    this.testName =3D testName;=0A=
    this.lastLogLine =3D document.createElement('tr');=0A=
    this.statusCell =3D document.createElement('td');=0A=
    this.nameCell =3D document.createElement('td');=0A=
    this.nameCell.className =3D "nameCell";=0A=
    this.nameCell.appendChild(document.createTextNode(testName));=0A=
    this.messageCell =3D document.createElement('td');=0A=
    this.lastLogLine.appendChild(this.statusCell);=0A=
    this.lastLogLine.appendChild(this.nameCell);=0A=
    this.lastLogLine.appendChild(this.messageCell);=0A=
    this.loglines.appendChild(this.lastLogLine);=0A=
  },=0A=
  finish: function(status, summary) {=0A=
    if (!this.log) return;=0A=
    this.lastLogLine.className =3D status;=0A=
    this.statusCell.innerHTML =3D status;=0A=
    this.messageCell.innerHTML =3D this._toHTML(summary);=0A=
    this.addLinksToResults();=0A=
  },=0A=
  message: function(message) {=0A=
    if (!this.log) return;=0A=
    this.messageCell.innerHTML =3D this._toHTML(message);=0A=
  },=0A=
  summary: function(summary) {=0A=
    if (!this.log) return;=0A=
    this.logsummary.innerHTML =3D this._toHTML(summary);=0A=
  },=0A=
  _createLogTable: function() {=0A=
    this.log.innerHTML =3D=0A=
    '<div id=3D"logsummary"></div>' +=0A=
    '<table id=3D"logtable">' +=0A=
    =
'<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +=0A=
    '<tbody id=3D"loglines"></tbody>' +=0A=
    '</table>';=0A=
    this.logsummary =3D $('logsummary')=0A=
    this.loglines =3D $('loglines');=0A=
  },=0A=
  _toHTML: function(txt) {=0A=
    return txt.escapeHTML().replace(/\n/g,"<br/>");=0A=
  },=0A=
  addLinksToResults: function(){ =0A=
    $$("tr.failed .nameCell").each( function(td){ // todo: limit to =
children of this.log=0A=
      td.title =3D "Run only this test"=0A=
      Event.observe(td, 'click', function(){ window.location.search =3D =
"?tests=3D" + td.innerHTML;});=0A=
    });=0A=
    $$("tr.passed .nameCell").each( function(td){ // todo: limit to =
children of this.log=0A=
      td.title =3D "Run all tests"=0A=
      Event.observe(td, 'click', function(){ window.location.search =3D =
"";});=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
Test.Unit.Runner =3D Class.create();=0A=
Test.Unit.Runner.prototype =3D {=0A=
  initialize: function(testcases) {=0A=
    this.options =3D Object.extend({=0A=
      testLog: 'testlog'=0A=
    }, arguments[1] || {});=0A=
    this.options.resultsURL =3D this.parseResultsURLQueryParameter();=0A=
    this.options.tests      =3D this.parseTestsQueryParameter();=0A=
    if (this.options.testLog) {=0A=
      this.options.testLog =3D $(this.options.testLog) || null;=0A=
    }=0A=
    if(this.options.tests) {=0A=
      this.tests =3D [];=0A=
      for(var i =3D 0; i < this.options.tests.length; i++) {=0A=
        if(/^test/.test(this.options.tests[i])) {=0A=
          this.tests.push(new Test.Unit.Testcase(this.options.tests[i], =
testcases[this.options.tests[i]], testcases["setup"], =
testcases["teardown"]));=0A=
        }=0A=
      }=0A=
    } else {=0A=
      if (this.options.test) {=0A=
        this.tests =3D [new Test.Unit.Testcase(this.options.test, =
testcases[this.options.test], testcases["setup"], =
testcases["teardown"])];=0A=
      } else {=0A=
        this.tests =3D [];=0A=
        for(var testcase in testcases) {=0A=
          if(/^test/.test(testcase)) {=0A=
            this.tests.push(=0A=
               new Test.Unit.Testcase(=0A=
                 this.options.context ? ' -> ' + =
this.options.titles[testcase] : testcase, =0A=
                 testcases[testcase], testcases["setup"], =
testcases["teardown"]=0A=
               ));=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
    this.currentTest =3D 0;=0A=
    this.logger =3D new Test.Unit.Logger(this.options.testLog);=0A=
    setTimeout(this.runTests.bind(this), 1000);=0A=
  },=0A=
  parseResultsURLQueryParameter: function() {=0A=
    return window.location.search.parseQuery()["resultsURL"];=0A=
  },=0A=
  parseTestsQueryParameter: function(){=0A=
    if (window.location.search.parseQuery()["tests"]){=0A=
        return window.location.search.parseQuery()["tests"].split(',');=0A=
    };=0A=
  },=0A=
  // Returns:=0A=
  //  "ERROR" if there was an error,=0A=
  //  "FAILURE" if there was a failure, or=0A=
  //  "SUCCESS" if there was neither=0A=
  getResult: function() {=0A=
    var hasFailure =3D false;=0A=
    for(var i=3D0;i<this.tests.length;i++) {=0A=
      if (this.tests[i].errors > 0) {=0A=
        return "ERROR";=0A=
      }=0A=
      if (this.tests[i].failures > 0) {=0A=
        hasFailure =3D true;=0A=
      }=0A=
    }=0A=
    if (hasFailure) {=0A=
      return "FAILURE";=0A=
    } else {=0A=
      return "SUCCESS";=0A=
    }=0A=
  },=0A=
  postResults: function() {=0A=
    if (this.options.resultsURL) {=0A=
      new Ajax.Request(this.options.resultsURL, =0A=
        { method: 'get', parameters: 'result=3D' + this.getResult(), =
asynchronous: false });=0A=
    }=0A=
  },=0A=
  runTests: function() {=0A=
    var test =3D this.tests[this.currentTest];=0A=
    if (!test) {=0A=
      // finished!=0A=
      this.postResults();=0A=
      this.logger.summary(this.summary());=0A=
      return;=0A=
    }=0A=
    if(!test.isWaiting) {=0A=
      this.logger.start(test.name);=0A=
    }=0A=
    test.run();=0A=
    if(test.isWaiting) {=0A=
      this.logger.message("Waiting for " + test.timeToWait + "ms");=0A=
      setTimeout(this.runTests.bind(this), test.timeToWait || 1000);=0A=
    } else {=0A=
      this.logger.finish(test.status(), test.summary());=0A=
      this.currentTest++;=0A=
      // tail recursive, hopefully the browser will skip the stackframe=0A=
      this.runTests();=0A=
    }=0A=
  },=0A=
  summary: function() {=0A=
    var assertions =3D 0;=0A=
    var failures =3D 0;=0A=
    var errors =3D 0;=0A=
    var messages =3D [];=0A=
    for(var i=3D0;i<this.tests.length;i++) {=0A=
      assertions +=3D   this.tests[i].assertions;=0A=
      failures   +=3D   this.tests[i].failures;=0A=
      errors     +=3D   this.tests[i].errors;=0A=
    }=0A=
    return (=0A=
      (this.options.context ? this.options.context + ': ': '') + =0A=
      this.tests.length + " tests, " + =0A=
      assertions + " assertions, " + =0A=
      failures   + " failures, " +=0A=
      errors     + " errors");=0A=
  }=0A=
}=0A=
=0A=
Test.Unit.Assertions =3D Class.create();=0A=
Test.Unit.Assertions.prototype =3D {=0A=
  initialize: function() {=0A=
    this.assertions =3D 0;=0A=
    this.failures   =3D 0;=0A=
    this.errors     =3D 0;=0A=
    this.messages   =3D [];=0A=
  },=0A=
  summary: function() {=0A=
    return (=0A=
      this.assertions + " assertions, " + =0A=
      this.failures   + " failures, " +=0A=
      this.errors     + " errors" + "\n" +=0A=
      this.messages.join("\n"));=0A=
  },=0A=
  pass: function() {=0A=
    this.assertions++;=0A=
  },=0A=
  fail: function(message) {=0A=
    this.failures++;=0A=
    this.messages.push("Failure: " + message);=0A=
  },=0A=
  info: function(message) {=0A=
    this.messages.push("Info: " + message);=0A=
  },=0A=
  error: function(error) {=0A=
    this.errors++;=0A=
    this.messages.push(error.name + ": "+ error.message + "(" + =
Test.Unit.inspect(error) +")");=0A=
  },=0A=
  status: function() {=0A=
    if (this.failures > 0) return 'failed';=0A=
    if (this.errors > 0) return 'error';=0A=
    return 'passed';=0A=
  },=0A=
  assert: function(expression) {=0A=
    var message =3D arguments[1] || 'assert: got "' + =
Test.Unit.inspect(expression) + '"';=0A=
    try { expression ? this.pass() : =0A=
      this.fail(message); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertEqual: function(expected, actual) {=0A=
    var message =3D arguments[2] || "assertEqual";=0A=
    try { (expected =3D=3D actual) ? this.pass() :=0A=
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + =0A=
        '", actual "' + Test.Unit.inspect(actual) + '"'); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertInspect: function(expected, actual) {=0A=
    var message =3D arguments[2] || "assertInspect";=0A=
    try { (expected =3D=3D actual.inspect()) ? this.pass() :=0A=
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + =0A=
        '", actual "' + Test.Unit.inspect(actual) + '"'); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertEnumEqual: function(expected, actual) {=0A=
    var message =3D arguments[2] || "assertEnumEqual";=0A=
    try { $A(expected).length =3D=3D $A(actual).length && =0A=
      expected.zip(actual).all(function(pair) { return pair[0] =3D=3D =
pair[1] }) ?=0A=
        this.pass() : this.fail(message + ': expected ' + =
Test.Unit.inspect(expected) + =0A=
          ', actual ' + Test.Unit.inspect(actual)); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertNotEqual: function(expected, actual) {=0A=
    var message =3D arguments[2] || "assertNotEqual";=0A=
    try { (expected !=3D actual) ? this.pass() : =0A=
      this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertIdentical: function(expected, actual) { =0A=
    var message =3D arguments[2] || "assertIdentical"; =0A=
    try { (expected =3D=3D=3D actual) ? this.pass() : =0A=
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + =
 =0A=
        '", actual "' + Test.Unit.inspect(actual) + '"'); } =0A=
    catch(e) { this.error(e); } =0A=
  },=0A=
  assertNotIdentical: function(expected, actual) { =0A=
    var message =3D arguments[2] || "assertNotIdentical"; =0A=
    try { !(expected =3D=3D=3D actual) ? this.pass() : =0A=
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + =
 =0A=
        '", actual "' + Test.Unit.inspect(actual) + '"'); } =0A=
    catch(e) { this.error(e); } =0A=
  },=0A=
  assertNull: function(obj) {=0A=
    var message =3D arguments[1] || 'assertNull'=0A=
    try { (obj=3D=3Dnull) ? this.pass() : =0A=
      this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertMatch: function(expected, actual) {=0A=
    var message =3D arguments[2] || 'assertMatch';=0A=
    var regex =3D new RegExp(expected);=0A=
    try { (regex.exec(actual)) ? this.pass() :=0A=
      this.fail(message + ' : regex: "' +  Test.Unit.inspect(expected) + =
' did not match: ' + Test.Unit.inspect(actual) + '"'); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertHidden: function(element) {=0A=
    var message =3D arguments[1] || 'assertHidden';=0A=
    this.assertEqual("none", element.style.display, message);=0A=
  },=0A=
  assertNotNull: function(object) {=0A=
    var message =3D arguments[1] || 'assertNotNull';=0A=
    this.assert(object !=3D null, message);=0A=
  },=0A=
  assertType: function(expected, actual) {=0A=
    var message =3D arguments[2] || 'assertType';=0A=
    try { =0A=
      (actual.constructor =3D=3D expected) ? this.pass() : =0A=
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + =
 =0A=
        '", actual "' + (actual.constructor) + '"'); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertNotOfType: function(expected, actual) {=0A=
    var message =3D arguments[2] || 'assertNotOfType';=0A=
    try { =0A=
      (actual.constructor !=3D expected) ? this.pass() : =0A=
      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + =
 =0A=
        '", actual "' + (actual.constructor) + '"'); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertInstanceOf: function(expected, actual) {=0A=
    var message =3D arguments[2] || 'assertInstanceOf';=0A=
    try { =0A=
      (actual instanceof expected) ? this.pass() : =0A=
      this.fail(message + ": object was not an instance of the expected =
type"); }=0A=
    catch(e) { this.error(e); } =0A=
  },=0A=
  assertNotInstanceOf: function(expected, actual) {=0A=
    var message =3D arguments[2] || 'assertNotInstanceOf';=0A=
    try { =0A=
      !(actual instanceof expected) ? this.pass() : =0A=
      this.fail(message + ": object was an instance of the not expected =
type"); }=0A=
    catch(e) { this.error(e); } =0A=
  },=0A=
  assertRespondsTo: function(method, obj) {=0A=
    var message =3D arguments[2] || 'assertRespondsTo';=0A=
    try {=0A=
      (obj[method] && typeof obj[method] =3D=3D 'function') ? =
this.pass() : =0A=
      this.fail(message + ": object doesn't respond to [" + method + =
"]"); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertReturnsTrue: function(method, obj) {=0A=
    var message =3D arguments[2] || 'assertReturnsTrue';=0A=
    try {=0A=
      var m =3D obj[method];=0A=
      if(!m) m =3D =
obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];=0A=
      m() ? this.pass() : =0A=
      this.fail(message + ": method returned false"); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertReturnsFalse: function(method, obj) {=0A=
    var message =3D arguments[2] || 'assertReturnsFalse';=0A=
    try {=0A=
      var m =3D obj[method];=0A=
      if(!m) m =3D =
obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];=0A=
      !m() ? this.pass() : =0A=
      this.fail(message + ": method returned true"); }=0A=
    catch(e) { this.error(e); }=0A=
  },=0A=
  assertRaise: function(exceptionName, method) {=0A=
    var message =3D arguments[2] || 'assertRaise';=0A=
    try { =0A=
      method();=0A=
      this.fail(message + ": exception expected but none was raised"); }=0A=
    catch(e) {=0A=
      ((exceptionName =3D=3D null) || (e.name=3D=3DexceptionName)) ? =
this.pass() : this.error(e); =0A=
    }=0A=
  },=0A=
  assertElementsMatch: function() {=0A=
    var expressions =3D $A(arguments), elements =3D =
$A(expressions.shift());=0A=
    if (elements.length !=3D expressions.length) {=0A=
      this.fail('assertElementsMatch: size mismatch: ' + elements.length =
+ ' elements, ' + expressions.length + ' expressions');=0A=
      return false;=0A=
    }=0A=
    elements.zip(expressions).all(function(pair, index) {=0A=
      var element =3D $(pair.first()), expression =3D pair.last();=0A=
      if (element.match(expression)) return true;=0A=
      this.fail('assertElementsMatch: (in index ' + index + ') expected =
' + expression.inspect() + ' but got ' + element.inspect());=0A=
    }.bind(this)) && this.pass();=0A=
  },=0A=
  assertElementMatches: function(element, expression) {=0A=
    this.assertElementsMatch([element], expression);=0A=
  },=0A=
  benchmark: function(operation, iterations) {=0A=
    var startAt =3D new Date();=0A=
    (iterations || 1).times(operation);=0A=
    var timeTaken =3D ((new Date())-startAt);=0A=
    this.info((arguments[2] || 'Operation') + ' finished ' + =0A=
       iterations + ' iterations in ' + (timeTaken/1000)+'s' );=0A=
    return timeTaken;=0A=
  },=0A=
  _isVisible: function(element) {=0A=
    element =3D $(element);=0A=
    if(!element.parentNode) return true;=0A=
    this.assertNotNull(element);=0A=
    if(element.style && Element.getStyle(element, 'display') =3D=3D =
'none')=0A=
      return false;=0A=
    =0A=
    return this._isVisible(element.parentNode);=0A=
  },=0A=
  assertNotVisible: function(element) {=0A=
    this.assert(!this._isVisible(element), Test.Unit.inspect(element) + =
" was not hidden and didn't have a hidden parent either. " + ("" || =
arguments[1]));=0A=
  },=0A=
  assertVisible: function(element) {=0A=
    this.assert(this._isVisible(element), Test.Unit.inspect(element) + " =
was not visible. " + ("" || arguments[1]));=0A=
  },=0A=
  benchmark: function(operation, iterations) {=0A=
    var startAt =3D new Date();=0A=
    (iterations || 1).times(operation);=0A=
    var timeTaken =3D ((new Date())-startAt);=0A=
    this.info((arguments[2] || 'Operation') + ' finished ' + =0A=
       iterations + ' iterations in ' + (timeTaken/1000)+'s' );=0A=
    return timeTaken;=0A=
  }=0A=
}=0A=
=0A=
Test.Unit.Testcase =3D Class.create();=0A=
Object.extend(Object.extend(Test.Unit.Testcase.prototype, =
Test.Unit.Assertions.prototype), {=0A=
  initialize: function(name, test, setup, teardown) {=0A=
    Test.Unit.Assertions.prototype.initialize.bind(this)();=0A=
    this.name           =3D name;=0A=
    =0A=
    if(typeof test =3D=3D 'string') {=0A=
      test =3D test.gsub(/(\.should[^\(]+\()/,'#{0}this,');=0A=
      test =3D test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');=0A=
      this.test =3D function() {=0A=
        eval('with(this){'+test+'}');=0A=
      }=0A=
    } else {=0A=
      this.test =3D test || function() {};=0A=
    }=0A=
    =0A=
    this.setup          =3D setup || function() {};=0A=
    this.teardown       =3D teardown || function() {};=0A=
    this.isWaiting      =3D false;=0A=
    this.timeToWait     =3D 1000;=0A=
  },=0A=
  wait: function(time, nextPart) {=0A=
    this.isWaiting =3D true;=0A=
    this.test =3D nextPart;=0A=
    this.timeToWait =3D time;=0A=
  },=0A=
  run: function() {=0A=
    try {=0A=
      try {=0A=
        if (!this.isWaiting) this.setup.bind(this)();=0A=
        this.isWaiting =3D false;=0A=
        this.test.bind(this)();=0A=
      } finally {=0A=
        if(!this.isWaiting) {=0A=
          this.teardown.bind(this)();=0A=
        }=0A=
      }=0A=
    }=0A=
    catch(e) { this.error(e); }=0A=
  }=0A=
});=0A=
=0A=
// *EXPERIMENTAL* BDD-style testing to please non-technical folk=0A=
// This draws many ideas from RSpec http://rspec.rubyforge.org/=0A=
=0A=
Test.setupBDDExtensionMethods =3D function(){=0A=
  var METHODMAP =3D {=0A=
    shouldEqual:     'assertEqual',=0A=
    shouldNotEqual:  'assertNotEqual',=0A=
    shouldEqualEnum: 'assertEnumEqual',=0A=
    shouldBeA:       'assertType',=0A=
    shouldNotBeA:    'assertNotOfType',=0A=
    shouldBeAn:      'assertType',=0A=
    shouldNotBeAn:   'assertNotOfType',=0A=
    shouldBeNull:    'assertNull',=0A=
    shouldNotBeNull: 'assertNotNull',=0A=
    =0A=
    shouldBe:        'assertReturnsTrue',=0A=
    shouldNotBe:     'assertReturnsFalse',=0A=
    shouldRespondTo: 'assertRespondsTo'=0A=
  };=0A=
  var makeAssertion =3D function(assertion, args, object) { =0A=
   	this[assertion].apply(this,(args || []).concat([object]));=0A=
  }=0A=
  =0A=
  Test.BDDMethods =3D {};   =0A=
  $H(METHODMAP).each(function(pair) { =0A=
    Test.BDDMethods[pair.key] =3D function() { =0A=
       var args =3D $A(arguments); =0A=
       var scope =3D args.shift(); =0A=
       makeAssertion.apply(scope, [pair.value, args, this]); }; =0A=
  });=0A=
  =0A=
  [Array.prototype, String.prototype, Number.prototype, =
Boolean.prototype].each(=0A=
    function(p){ Object.extend(p, Test.BDDMethods) }=0A=
  );=0A=
}=0A=
=0A=
Test.context =3D function(name, spec, log){=0A=
  Test.setupBDDExtensionMethods();=0A=
  =0A=
  var compiledSpec =3D {};=0A=
  var titles =3D {};=0A=
  for(specName in spec) {=0A=
    switch(specName){=0A=
      case "setup":=0A=
      case "teardown":=0A=
        compiledSpec[specName] =3D spec[specName];=0A=
        break;=0A=
      default:=0A=
        var testName =3D 'test'+specName.gsub(/\s+/,'-').camelize();=0A=
        var body =3D spec[specName].toString().split('\n').slice(1);=0A=
        if(/^\{/.test(body[0])) body =3D body.slice(1);=0A=
        body.pop();=0A=
        body =3D body.map(function(statement){ =0A=
          return statement.strip()=0A=
        });=0A=
        compiledSpec[testName] =3D body.join('\n');=0A=
        titles[testName] =3D specName;=0A=
    }=0A=
  }=0A=
  new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || =
'testlog', context: name });=0A=
};=0A=
=0A=
/* --- End /home/httpd/app_frame/webroot/js/unittest.js --- */=0A=
/* --- Start /home/httpd/app_frame/webroot/js/controls.js --- */=0A=
=0A=
// script.aculo.us controls.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2007 Ivan Krstic =
(http://blogs.law.harvard.edu/ivan)=0A=
//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)=0A=
// Contributors:=0A=
//  Richard Livsey=0A=
//  Rahul Bhargava=0A=
//  Rob Wills=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=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 Class.create({=0A=
  baseInitialize: function(element, update, options) {=0A=
    element          =3D $(element)=0A=
    this.element     =3D element; =0A=
    this.update      =3D $(update);  =0A=
    this.hasFocus    =3D false; =0A=
    this.changed     =3D false; =0A=
    this.active      =3D false; =0A=
    this.index       =3D 0;     =0A=
    this.entryCount  =3D 0;=0A=
    this.oldElementValue =3D this.element.value;=0A=
=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=
        Effect.Appear(update,{duration:0.15});=0A=
      };=0A=
    this.options.onHide =3D this.options.onHide || =0A=
      function(element, update){ new Effect.Fade(update,{duration:0.15}) =
};=0A=
=0A=
    if(typeof(this.options.tokens) =3D=3D 'string') =0A=
      this.options.tokens =3D new Array(this.options.tokens);=0A=
    // Force carriage returns as token delimiters anyway=0A=
    if (!this.options.tokens.include('\n'))=0A=
      this.options.tokens.push('\n');=0A=
=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=
      (Prototype.Browser.IE) &&=0A=
      (Element.getStyle(this.update, 'position')=3D=3D'absolute')) {=0A=
      new Insertion.After(this.update, =0A=
       '<iframe id=3D"' + this.update.id + '_iefix" '+=0A=
       =
'style=3D"display:none;position:absolute;filter:progid:DXImageTransform.M=
icrosoft.Alpha(opacity=3D0);" ' +=0A=
       'src=3D"javascript:false;" frameborder=3D"0" =
scrolling=3D"no"></iframe>');=0A=
      this.iefix =3D $(this.update.id+'_iefix');=0A=
    }=0A=
    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);=0A=
  },=0A=
  =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(Prototype.Browser.WebKit) Event.stop(event);=0A=
         return;=0A=
       case Event.KEY_DOWN:=0A=
         this.markNext();=0A=
         this.render();=0A=
         if(Prototype.Browser.WebKit) Event.stop(event);=0A=
         return;=0A=
      }=0A=
     else =0A=
       if(event.keyCode=3D=3DEvent.KEY_TAB || =
event.keyCode=3D=3DEvent.KEY_RETURN || =0A=
         (Prototype.Browser.WebKit > 0 && event.keyCode =3D=3D 0)) =
return;=0A=
=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=
      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 $(selectedElement).select('.' + this.options.select) =
|| [];=0A=
      if(nodes.length>0) value =3D Element.collectTextNodes(nodes[0], =
this.options.select);=0A=
    } else=0A=
      value =3D Element.collectTextNodesIgnoreClass(selectedElement, =
'informal');=0A=
    =0A=
    var bounds =3D this.getTokenBounds();=0A=
    if (bounds[0] !=3D -1) {=0A=
      var newValue =3D this.element.value.substr(0, bounds[0]);=0A=
      var whitespace =3D =
this.element.value.substr(bounds[0]).match(/^\s+/);=0A=
      if (whitespace)=0A=
        newValue +=3D whitespace[0];=0A=
      this.element.value =3D newValue + value + =
this.element.value.substr(bounds[1]);=0A=
    } else {=0A=
      this.element.value =3D value;=0A=
    }=0A=
    this.oldElementValue =3D this.element.value;=0A=
    this.element.focus();=0A=
    =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=
    this.tokenBounds =3D null;=0A=
    if(this.getToken().length>=3Dthis.options.minChars) {=0A=
      this.getUpdatedChoices();=0A=
    } else {=0A=
      this.active =3D false;=0A=
      this.hide();=0A=
    }=0A=
    this.oldElementValue =3D this.element.value;=0A=
  },=0A=
=0A=
  getToken: function() {=0A=
    var bounds =3D this.getTokenBounds();=0A=
    return this.element.value.substring(bounds[0], bounds[1]).strip();=0A=
  },=0A=
=0A=
  getTokenBounds: function() {=0A=
    if (null !=3D this.tokenBounds) return this.tokenBounds;=0A=
    var value =3D this.element.value;=0A=
    if (value.strip().empty()) return [-1, 0];=0A=
    var diff =3D arguments.callee.getFirstDifferencePos(value, =
this.oldElementValue);=0A=
    var offset =3D (diff =3D=3D this.oldElementValue.length ? 1 : 0);=0A=
    var prevTokenPos =3D -1, nextTokenPos =3D value.length;=0A=
    var tp;=0A=
    for (var index =3D 0, l =3D this.options.tokens.length; index < l; =
++index) {=0A=
      tp =3D value.lastIndexOf(this.options.tokens[index], diff + offset =
- 1);=0A=
      if (tp > prevTokenPos) prevTokenPos =3D tp;=0A=
      tp =3D value.indexOf(this.options.tokens[index], diff + offset);=0A=
      if (-1 !=3D tp && tp < nextTokenPos) nextTokenPos =3D tp;=0A=
    }=0A=
    return (this.tokenBounds =3D [prevTokenPos + 1, nextTokenPos]);=0A=
  }=0A=
});=0A=
=0A=
Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos =3D =
function(newS, oldS) {=0A=
  var boundary =3D Math.min(newS.length, oldS.length);=0A=
  for (var index =3D 0; index < boundary; ++index)=0A=
    if (newS[index] !=3D oldS[index])=0A=
      return index;=0A=
  return boundary;=0A=
};=0A=
=0A=
Ajax.Autocompleter =3D Class.create(Autocompleter.Base, {=0A=
  initialize: function(element, update, url, options) {=0A=
    this.baseInitialize(element, update, options);=0A=
    this.options.asynchronous  =3D true;=0A=
    this.options.onComplete    =3D this.onComplete.bind(this);=0A=
    this.options.defaultParams =3D this.options.parameters || null;=0A=
    this.url                   =3D url;=0A=
  },=0A=
=0A=
  getUpdatedChoices: function() {=0A=
    this.startIndicator();=0A=
    =0A=
    var 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=
// 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(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 and collection editor=0A=
// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April =
2007).=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=
  initialize: function(element, url, options) {=0A=
    this.url =3D url;=0A=
    this.element =3D element =3D $(element);=0A=
    this.prepareOptions();=0A=
    this._controls =3D { };=0A=
    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION =
LAYER!!!=0A=
    Object.extend(this.options, options || { });=0A=
    if (!this.options.formId && this.element.id) {=0A=
      this.options.formId =3D this.element.id + '-inplaceeditor';=0A=
      if ($(this.options.formId))=0A=
        this.options.formId =3D '';=0A=
    }=0A=
    if (this.options.externalControl)=0A=
      this.options.externalControl =3D $(this.options.externalControl);=0A=
    if (!this.options.externalControl)=0A=
      this.options.externalControlOnly =3D false;=0A=
    this._originalBackground =3D =
this.element.getStyle('background-color') || 'transparent';=0A=
    this.element.title =3D this.options.clickToEditText;=0A=
    this._boundCancelHandler =3D this.handleFormCancellation.bind(this);=0A=
    this._boundComplete =3D (this.options.onComplete || =
Prototype.emptyFunction).bind(this);=0A=
    this._boundFailureHandler =3D this.handleAJAXFailure.bind(this);=0A=
    this._boundSubmitHandler =3D this.handleFormSubmission.bind(this);=0A=
    this._boundWrapperHandler =3D this.wrapUp.bind(this);=0A=
    this.registerListeners();=0A=
  },=0A=
  checkForEscapeOrReturn: function(e) {=0A=
    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;=0A=
    if (Event.KEY_ESC =3D=3D e.keyCode)=0A=
      this.handleFormCancellation(e);=0A=
    else if (Event.KEY_RETURN =3D=3D e.keyCode)=0A=
      this.handleFormSubmission(e);=0A=
  },=0A=
  createControl: function(mode, handler, extraClasses) {=0A=
    var control =3D this.options[mode + 'Control'];=0A=
    var text =3D this.options[mode + 'Text'];=0A=
    if ('button' =3D=3D control) {=0A=
      var btn =3D document.createElement('input');=0A=
      btn.type =3D 'submit';=0A=
      btn.value =3D text;=0A=
      btn.className =3D 'editor_' + mode + '_button';=0A=
      if ('cancel' =3D=3D mode)=0A=
        btn.onclick =3D this._boundCancelHandler;=0A=
      this._form.appendChild(btn);=0A=
      this._controls[mode] =3D btn;=0A=
    } else if ('link' =3D=3D control) {=0A=
      var link =3D document.createElement('a');=0A=
      link.href =3D '#';=0A=
      link.appendChild(document.createTextNode(text));=0A=
      link.onclick =3D 'cancel' =3D=3D mode ? this._boundCancelHandler : =
this._boundSubmitHandler;=0A=
      link.className =3D 'editor_' + mode + '_link';=0A=
      if (extraClasses)=0A=
        link.className +=3D ' ' + extraClasses;=0A=
      this._form.appendChild(link);=0A=
      this._controls[mode] =3D link;=0A=
    }=0A=
  },=0A=
  createEditField: function() {=0A=
    var text =3D (this.options.loadTextURL ? this.options.loadingText : =
this.getText());=0A=
    var fld;=0A=
    if (1 >=3D this.options.rows && !/\r|\n/.test(this.getText())) {=0A=
      fld =3D document.createElement('input');=0A=
      fld.type =3D 'text';=0A=
      var size =3D this.options.size || this.options.cols || 0;=0A=
      if (0 < size) fld.size =3D size;=0A=
    } else {=0A=
      fld =3D document.createElement('textarea');=0A=
      fld.rows =3D (1 >=3D this.options.rows ? this.options.autoRows : =
this.options.rows);=0A=
      fld.cols =3D this.options.cols || 40;=0A=
    }=0A=
    fld.name =3D this.options.paramName;=0A=
    fld.value =3D text; // No HTML breaks conversion anymore=0A=
    fld.className =3D 'editor_field';=0A=
    if (this.options.submitOnBlur)=0A=
      fld.onblur =3D this._boundSubmitHandler;=0A=
    this._controls.editor =3D fld;=0A=
    if (this.options.loadTextURL)=0A=
      this.loadExternalText();=0A=
    this._form.appendChild(this._controls.editor);=0A=
  },=0A=
  createForm: function() {=0A=
    var ipe =3D this;=0A=
    function addText(mode, condition) {=0A=
      var text =3D ipe.options['text' + mode + 'Controls'];=0A=
      if (!text || condition =3D=3D=3D false) return;=0A=
      ipe._form.appendChild(document.createTextNode(text));=0A=
    };=0A=
    this._form =3D $(document.createElement('form'));=0A=
    this._form.id =3D this.options.formId;=0A=
    this._form.addClassName(this.options.formClassName);=0A=
    this._form.onsubmit =3D this._boundSubmitHandler;=0A=
    this.createEditField();=0A=
    if ('textarea' =3D=3D this._controls.editor.tagName.toLowerCase())=0A=
      this._form.appendChild(document.createElement('br'));=0A=
    if (this.options.onFormCustomization)=0A=
      this.options.onFormCustomization(this, this._form);=0A=
    addText('Before', this.options.okControl || =
this.options.cancelControl);=0A=
    this.createControl('ok', this._boundSubmitHandler);=0A=
    addText('Between', this.options.okControl && =
this.options.cancelControl);=0A=
    this.createControl('cancel', this._boundCancelHandler, =
'editor_cancel');=0A=
    addText('After', this.options.okControl || =
this.options.cancelControl);=0A=
  },=0A=
  destroy: function() {=0A=
    if (this._oldInnerHTML)=0A=
      this.element.innerHTML =3D this._oldInnerHTML;=0A=
    this.leaveEditMode();=0A=
    this.unregisterListeners();=0A=
  },=0A=
  enterEditMode: function(e) {=0A=
    if (this._saving || this._editing) return;=0A=
    this._editing =3D true;=0A=
    this.triggerCallback('onEnterEditMode');=0A=
    if (this.options.externalControl)=0A=
      this.options.externalControl.hide();=0A=
    this.element.hide();=0A=
    this.createForm();=0A=
    this.element.parentNode.insertBefore(this._form, this.element);=0A=
    if (!this.options.loadTextURL)=0A=
      this.postProcessEditField();=0A=
    if (e) Event.stop(e);=0A=
  },=0A=
  enterHover: function(e) {=0A=
    if (this.options.hoverClassName)=0A=
      this.element.addClassName(this.options.hoverClassName);=0A=
    if (this._saving) return;=0A=
    this.triggerCallback('onEnterHover');=0A=
  },=0A=
  getText: function() {=0A=
    return this.element.innerHTML;=0A=
  },=0A=
  handleAJAXFailure: function(transport) {=0A=
    this.triggerCallback('onFailure', transport);=0A=
    if (this._oldInnerHTML) {=0A=
      this.element.innerHTML =3D this._oldInnerHTML;=0A=
      this._oldInnerHTML =3D null;=0A=
    }=0A=
  },=0A=
  handleFormCancellation: function(e) {=0A=
    this.wrapUp();=0A=
    if (e) Event.stop(e);=0A=
  },=0A=
  handleFormSubmission: function(e) {=0A=
    var form =3D this._form;=0A=
    var value =3D $F(this._controls.editor);=0A=
    this.prepareSubmission();=0A=
    var params =3D this.options.callback(form, value) || '';=0A=
    if (Object.isString(params))=0A=
      params =3D params.toQueryParams();=0A=
    params.editorId =3D this.element.id;=0A=
    if (this.options.htmlResponse) {=0A=
      var options =3D Object.extend({ evalScripts: true }, =
this.options.ajaxOptions);=0A=
      Object.extend(options, {=0A=
        parameters: params,=0A=
        onComplete: this._boundWrapperHandler,=0A=
        onFailure: this._boundFailureHandler=0A=
      });=0A=
      new Ajax.Updater({ success: this.element }, this.url, options);=0A=
    } else {=0A=
      var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
      Object.extend(options, {=0A=
        parameters: params,=0A=
        onComplete: this._boundWrapperHandler,=0A=
        onFailure: this._boundFailureHandler=0A=
      });=0A=
      new Ajax.Request(this.url, options);=0A=
    }=0A=
    if (e) Event.stop(e);=0A=
  },=0A=
  leaveEditMode: function() {=0A=
    this.element.removeClassName(this.options.savingClassName);=0A=
    this.removeForm();=0A=
    this.leaveHover();=0A=
    this.element.style.backgroundColor =3D this._originalBackground;=0A=
    this.element.show();=0A=
    if (this.options.externalControl)=0A=
      this.options.externalControl.show();=0A=
    this._saving =3D false;=0A=
    this._editing =3D false;=0A=
    this._oldInnerHTML =3D null;=0A=
    this.triggerCallback('onLeaveEditMode');=0A=
  },=0A=
  leaveHover: function(e) {=0A=
    if (this.options.hoverClassName)=0A=
      this.element.removeClassName(this.options.hoverClassName);=0A=
    if (this._saving) return;=0A=
    this.triggerCallback('onLeaveHover');=0A=
  },=0A=
  loadExternalText: function() {=0A=
    this._form.addClassName(this.options.loadingClassName);=0A=
    this._controls.editor.disabled =3D true;=0A=
    var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
    Object.extend(options, {=0A=
      parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
      onComplete: Prototype.emptyFunction,=0A=
      onSuccess: function(transport) {=0A=
        this._form.removeClassName(this.options.loadingClassName);=0A=
        var text =3D transport.responseText;=0A=
        if (this.options.stripLoadedTextTags)=0A=
          text =3D text.stripTags();=0A=
        this._controls.editor.value =3D text;=0A=
        this._controls.editor.disabled =3D false;=0A=
        this.postProcessEditField();=0A=
      }.bind(this),=0A=
      onFailure: this._boundFailureHandler=0A=
    });=0A=
    new Ajax.Request(this.options.loadTextURL, options);=0A=
  },=0A=
  postProcessEditField: function() {=0A=
    var fpc =3D this.options.fieldPostCreation;=0A=
    if (fpc)=0A=
      $(this._controls.editor)['focus' =3D=3D fpc ? 'focus' : =
'activate']();=0A=
  },=0A=
  prepareOptions: function() {=0A=
    this.options =3D Object.clone(Ajax.InPlaceEditor.DefaultOptions);=0A=
    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);=0A=
    [this._extraDefaultOptions].flatten().compact().each(function(defs) {=0A=
      Object.extend(this.options, defs);=0A=
    }.bind(this));=0A=
  },=0A=
  prepareSubmission: function() {=0A=
    this._saving =3D true;=0A=
    this.removeForm();=0A=
    this.leaveHover();=0A=
    this.showSaving();=0A=
  },=0A=
  registerListeners: function() {=0A=
    this._listeners =3D { };=0A=
    var listener;=0A=
    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {=0A=
      listener =3D this[pair.value].bind(this);=0A=
      this._listeners[pair.key] =3D listener;=0A=
      if (!this.options.externalControlOnly)=0A=
        this.element.observe(pair.key, listener);=0A=
      if (this.options.externalControl)=0A=
        this.options.externalControl.observe(pair.key, listener);=0A=
    }.bind(this));=0A=
  },=0A=
  removeForm: function() {=0A=
    if (!this._form) return;=0A=
    this._form.remove();=0A=
    this._form =3D null;=0A=
    this._controls =3D { };=0A=
  },=0A=
  showSaving: function() {=0A=
    this._oldInnerHTML =3D this.element.innerHTML;=0A=
    this.element.innerHTML =3D this.options.savingText;=0A=
    this.element.addClassName(this.options.savingClassName);=0A=
    this.element.style.backgroundColor =3D this._originalBackground;=0A=
    this.element.show();=0A=
  },=0A=
  triggerCallback: function(cbName, arg) {=0A=
    if ('function' =3D=3D typeof this.options[cbName]) {=0A=
      this.options[cbName](this, arg);=0A=
    }=0A=
  },=0A=
  unregisterListeners: function() {=0A=
    $H(this._listeners).each(function(pair) {=0A=
      if (!this.options.externalControlOnly)=0A=
        this.element.stopObserving(pair.key, pair.value);=0A=
      if (this.options.externalControl)=0A=
        this.options.externalControl.stopObserving(pair.key, pair.value);=0A=
    }.bind(this));=0A=
  },=0A=
  wrapUp: function(transport) {=0A=
    this.leaveEditMode();=0A=
    // Can't use triggerCallback due to backward compatibility: requires=0A=
    // binding + direct element=0A=
    this._boundComplete(transport, this.element);=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Ajax.InPlaceEditor.prototype, {=0A=
  dispose: Ajax.InPlaceEditor.prototype.destroy=0A=
});=0A=
=0A=
Ajax.InPlaceCollectionEditor =3D Class.create(Ajax.InPlaceEditor, {=0A=
  initialize: function($super, element, url, options) {=0A=
    this._extraDefaultOptions =3D =
Ajax.InPlaceCollectionEditor.DefaultOptions;=0A=
    $super(element, url, options);=0A=
  },=0A=
=0A=
  createEditField: function() {=0A=
    var list =3D document.createElement('select');=0A=
    list.name =3D this.options.paramName;=0A=
    list.size =3D 1;=0A=
    this._controls.editor =3D list;=0A=
    this._collection =3D this.options.collection || [];=0A=
    if (this.options.loadCollectionURL)=0A=
      this.loadCollection();=0A=
    else=0A=
      this.checkForExternalText();=0A=
    this._form.appendChild(this._controls.editor);=0A=
  },=0A=
=0A=
  loadCollection: function() {=0A=
    this._form.addClassName(this.options.loadingClassName);=0A=
    this.showLoadingText(this.options.loadingCollectionText);=0A=
    var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
    Object.extend(options, {=0A=
      parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
      onComplete: Prototype.emptyFunction,=0A=
      onSuccess: function(transport) {=0A=
        var js =3D transport.responseText.strip();=0A=
        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check=0A=
          throw 'Server returned an invalid collection representation.';=0A=
        this._collection =3D eval(js);=0A=
        this.checkForExternalText();=0A=
      }.bind(this),=0A=
      onFailure: this.onFailure=0A=
    });=0A=
    new Ajax.Request(this.options.loadCollectionURL, options);=0A=
  },=0A=
=0A=
  showLoadingText: function(text) {=0A=
    this._controls.editor.disabled =3D true;=0A=
    var tempOption =3D this._controls.editor.firstChild;=0A=
    if (!tempOption) {=0A=
      tempOption =3D document.createElement('option');=0A=
      tempOption.value =3D '';=0A=
      this._controls.editor.appendChild(tempOption);=0A=
      tempOption.selected =3D true;=0A=
    }=0A=
    tempOption.update((text || '').stripScripts().stripTags());=0A=
  },=0A=
=0A=
  checkForExternalText: function() {=0A=
    this._text =3D this.getText();=0A=
    if (this.options.loadTextURL)=0A=
      this.loadExternalText();=0A=
    else=0A=
      this.buildOptionList();=0A=
  },=0A=
=0A=
  loadExternalText: function() {=0A=
    this.showLoadingText(this.options.loadingText);=0A=
    var options =3D Object.extend({ method: 'get' }, =
this.options.ajaxOptions);=0A=
    Object.extend(options, {=0A=
      parameters: 'editorId=3D' + encodeURIComponent(this.element.id),=0A=
      onComplete: Prototype.emptyFunction,=0A=
      onSuccess: function(transport) {=0A=
        this._text =3D transport.responseText.strip();=0A=
        this.buildOptionList();=0A=
      }.bind(this),=0A=
      onFailure: this.onFailure=0A=
    });=0A=
    new Ajax.Request(this.options.loadTextURL, options);=0A=
  },=0A=
=0A=
  buildOptionList: function() {=0A=
    this._form.removeClassName(this.options.loadingClassName);=0A=
    this._collection =3D this._collection.map(function(entry) {=0A=
      return 2 =3D=3D=3D entry.length ? entry : [entry, entry].flatten();=0A=
    });=0A=
    var marker =3D ('value' in this.options) ? this.options.value : =
this._text;=0A=
    var textFound =3D this._collection.any(function(entry) {=0A=
      return entry[0] =3D=3D marker;=0A=
    }.bind(this));=0A=
    this._controls.editor.update('');=0A=
    var option;=0A=
    this._collection.each(function(entry, index) {=0A=
      option =3D document.createElement('option');=0A=
      option.value =3D entry[0];=0A=
      option.selected =3D textFound ? entry[0] =3D=3D marker : 0 =3D=3D =
index;=0A=
      option.appendChild(document.createTextNode(entry[1]));=0A=
      this._controls.editor.appendChild(option);=0A=
    }.bind(this));=0A=
    this._controls.editor.disabled =3D false;=0A=
    Field.scrollFreeActivate(this._controls.editor);=0A=
  }=0A=
});=0A=
=0A=
//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****=0A=
//**** This only  exists for a while,  in order to  let ****=0A=
//**** users adapt to  the new API.  Read up on the new ****=0A=
//**** API and convert your code to it ASAP!            ****=0A=
=0A=
Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions =3D =
function(options) {=0A=
  if (!options) return;=0A=
  function fallback(name, expr) {=0A=
    if (name in options || expr =3D=3D=3D undefined) return;=0A=
    options[name] =3D expr;=0A=
  };=0A=
  fallback('cancelControl', (options.cancelLink ? 'link' : =
(options.cancelButton ? 'button' :=0A=
    options.cancelLink =3D=3D options.cancelButton =3D=3D false ? false =
: undefined)));=0A=
  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? =
'button' :=0A=
    options.okLink =3D=3D options.okButton =3D=3D false ? false : =
undefined)));=0A=
  fallback('highlightColor', options.highlightcolor);=0A=
  fallback('highlightEndColor', options.highlightendcolor);=0A=
};=0A=
=0A=
Object.extend(Ajax.InPlaceEditor, {=0A=
  DefaultOptions: {=0A=
    ajaxOptions: { },=0A=
    autoRows: 3,                                // Use when multi-line =
w/ rows =3D=3D 1=0A=
    cancelControl: 'link',                      // 'link'|'button'|false=0A=
    cancelText: 'cancel',=0A=
    clickToEditText: 'Click to edit',=0A=
    externalControl: null,                      // id|elt=0A=
    externalControlOnly: false,=0A=
    fieldPostCreation: 'activate',              // =
'activate'|'focus'|false=0A=
    formClassName: 'inplaceeditor-form',=0A=
    formId: null,                               // id|elt=0A=
    highlightColor: '#ffff99',=0A=
    highlightEndColor: '#ffffff',=0A=
    hoverClassName: '',=0A=
    htmlResponse: true,=0A=
    loadingClassName: 'inplaceeditor-loading',=0A=
    loadingText: 'Loading...',=0A=
    okControl: 'button',                        // 'link'|'button'|false=0A=
    okText: 'ok',=0A=
    paramName: 'value',=0A=
    rows: 1,                                    // If 1 and multi-line, =
uses autoRows=0A=
    savingClassName: 'inplaceeditor-saving',=0A=
    savingText: 'Saving...',=0A=
    size: 0,=0A=
    stripLoadedTextTags: false,=0A=
    submitOnBlur: false,=0A=
    textAfterControls: '',=0A=
    textBeforeControls: '',=0A=
    textBetweenControls: ''=0A=
  },=0A=
  DefaultCallbacks: {=0A=
    callback: function(form) {=0A=
      return Form.serialize(form);=0A=
    },=0A=
    onComplete: function(transport, element) {=0A=
      // For backward compatibility, this one is bound to the IPE, and =
passes=0A=
      // the element directly.  It was too often customized, so we don't =
break it.=0A=
      new Effect.Highlight(element, {=0A=
        startcolor: this.options.highlightColor, keepBackgroundImage: =
true });=0A=
    },=0A=
    onEnterEditMode: null,=0A=
    onEnterHover: function(ipe) {=0A=
      ipe.element.style.backgroundColor =3D ipe.options.highlightColor;=0A=
      if (ipe._effect)=0A=
        ipe._effect.cancel();=0A=
    },=0A=
    onFailure: function(transport, ipe) {=0A=
      alert('Error communication with the server: ' + =
transport.responseText.stripTags());=0A=
    },=0A=
    onFormCustomization: null, // Takes the IPE and its generated form, =
after editor, before controls.=0A=
    onLeaveEditMode: null,=0A=
    onLeaveHover: function(ipe) {=0A=
      ipe._effect =3D new Effect.Highlight(ipe.element, {=0A=
        startcolor: ipe.options.highlightColor, endcolor: =
ipe.options.highlightEndColor,=0A=
        restorecolor: ipe._originalBackground, keepBackgroundImage: true=0A=
      });=0A=
    }=0A=
  },=0A=
  Listeners: {=0A=
    click: 'enterEditMode',=0A=
    keydown: 'checkForEscapeOrReturn',=0A=
    mouseover: 'enterHover',=0A=
    mouseout: 'leaveHover'=0A=
  }=0A=
});=0A=
=0A=
Ajax.InPlaceCollectionEditor.DefaultOptions =3D {=0A=
  loadingCollectionText: 'Loading options...'=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=
  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=
=0A=
=0A=
/* --- End /home/httpd/app_frame/webroot/js/controls.js --- */=0A=
/* --- Start /home/httpd/app_frame/webroot/js/builder.js --- */=0A=
=0A=
// script.aculo.us builder.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//=0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
var Builder =3D {=0A=
  NODEMAP: {=0A=
    AREA: 'map',=0A=
    CAPTION: 'table',=0A=
    COL: 'table',=0A=
    COLGROUP: 'table',=0A=
    LEGEND: 'fieldset',=0A=
    OPTGROUP: 'select',=0A=
    OPTION: 'select',=0A=
    PARAM: 'object',=0A=
    TBODY: 'table',=0A=
    TD: 'table',=0A=
    TFOOT: 'table',=0A=
    TH: 'table',=0A=
    THEAD: 'table',=0A=
    TR: 'table'=0A=
  },=0A=
  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently =
broken,=0A=
  //       due to a Firefox bug=0A=
  node: function(elementName) {=0A=
    elementName =3D elementName.toUpperCase();=0A=
    =0A=
    // try innerHTML approach=0A=
    var parentTag =3D this.NODEMAP[elementName] || 'div';=0A=
    var parentElement =3D document.createElement(parentTag);=0A=
    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707=0A=
      parentElement.innerHTML =3D "<" + elementName + "></" + =
elementName + ">";=0A=
    } catch(e) {}=0A=
    var element =3D parentElement.firstChild || null;=0A=
      =0A=
    // see if browser added wrapping tags=0A=
    if(element && (element.tagName.toUpperCase() !=3D elementName))=0A=
      element =3D element.getElementsByTagName(elementName)[0];=0A=
    =0A=
    // fallback to createElement approach=0A=
    if(!element) element =3D document.createElement(elementName);=0A=
    =0A=
    // abort if nothing could be created=0A=
    if(!element) return;=0A=
=0A=
    // attributes (or text)=0A=
    if(arguments[1])=0A=
      if(this._isStringOrNumber(arguments[1]) ||=0A=
        (arguments[1] instanceof Array) ||=0A=
        arguments[1].tagName) {=0A=
          this._children(element, arguments[1]);=0A=
        } else {=0A=
          var attrs =3D this._attributes(arguments[1]);=0A=
          if(attrs.length) {=0A=
            try { // prevent IE "feature": =
http://dev.rubyonrails.org/ticket/2707=0A=
              parentElement.innerHTML =3D "<" +elementName + " " +=0A=
                attrs + "></" + elementName + ">";=0A=
            } catch(e) {}=0A=
            element =3D parentElement.firstChild || null;=0A=
            // workaround firefox 1.0.X bug=0A=
            if(!element) {=0A=
              element =3D document.createElement(elementName);=0A=
              for(attr in arguments[1]) =0A=
                element[attr =3D=3D 'class' ? 'className' : attr] =3D =
arguments[1][attr];=0A=
            }=0A=
            if(element.tagName.toUpperCase() !=3D elementName)=0A=
              element =3D =
parentElement.getElementsByTagName(elementName)[0];=0A=
          }=0A=
        } =0A=
=0A=
    // text, or array of children=0A=
    if(arguments[2])=0A=
      this._children(element, arguments[2]);=0A=
=0A=
     return element;=0A=
  },=0A=
  _text: function(text) {=0A=
     return document.createTextNode(text);=0A=
  },=0A=
=0A=
  ATTR_MAP: {=0A=
    'className': 'class',=0A=
    'htmlFor': 'for'=0A=
  },=0A=
=0A=
  _attributes: function(attributes) {=0A=
    var attrs =3D [];=0A=
    for(attribute in attributes)=0A=
      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] =
: attribute) +=0A=
          '=3D"' + =
attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');=0A=
    return attrs.join(" ");=0A=
  },=0A=
  _children: function(element, children) {=0A=
    if(children.tagName) {=0A=
      element.appendChild(children);=0A=
      return;=0A=
    }=0A=
    if(typeof children=3D=3D'object') { // array can hold nodes and text=0A=
      children.flatten().each( function(e) {=0A=
        if(typeof e=3D=3D'object')=0A=
          element.appendChild(e)=0A=
        else=0A=
          if(Builder._isStringOrNumber(e))=0A=
            element.appendChild(Builder._text(e));=0A=
      });=0A=
    } else=0A=
      if(Builder._isStringOrNumber(children))=0A=
        element.appendChild(Builder._text(children));=0A=
  },=0A=
  _isStringOrNumber: function(param) {=0A=
    return(typeof param=3D=3D'string' || typeof param=3D=3D'number');=0A=
  },=0A=
  build: function(html) {=0A=
    var element =3D this.node('div');=0A=
    $(element).update(html.strip());=0A=
    return element.down();=0A=
  },=0A=
  dump: function(scope) { =0A=
    if(typeof scope !=3D 'object' && typeof scope !=3D 'function') scope =
=3D window; //global scope =0A=
  =0A=
    var tags =3D ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT =
BDO BIG BLOCKQUOTE BODY " +=0A=
      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR =
DIV DL DT EM FIELDSET " +=0A=
      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME =
IMG INPUT INS ISINDEX "+=0A=
      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT =
OL OPTGROUP OPTION P "+=0A=
      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE =
SUB SUP TABLE TBODY TD "+=0A=
      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);=0A=
  =0A=
    tags.each( function(tag){ =0A=
      scope[tag] =3D function() { =0A=
        return Builder.node.apply(Builder, [tag].concat($A(arguments))); =
 =0A=
      } =0A=
    });=0A=
  }=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/app_frame/webroot/js/builder.js --- */=0A=
/* --- Start /home/httpd/app_frame/webroot/js/sound.js --- */=0A=
=0A=
// script.aculo.us sound.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//=0A=
// Based on code created by Jules Gravinese (http://www.webveteran.com/)=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=
Sound =3D {=0A=
  tracks: {},=0A=
  _enabled: true,=0A=
  template:=0A=
    new Template('<embed style=3D"height:0" id=3D"sound_#{track}_#{id}" =
src=3D"#{url}" loop=3D"false" autostart=3D"true" hidden=3D"true"/>'),=0A=
  enable: function(){=0A=
    Sound._enabled =3D true;=0A=
  },=0A=
  disable: function(){=0A=
    Sound._enabled =3D false;=0A=
  },=0A=
  play: function(url){=0A=
    if(!Sound._enabled) return;=0A=
    var options =3D Object.extend({=0A=
      track: 'global', url: url, replace: false=0A=
    }, arguments[1] || {});=0A=
    =0A=
    if(options.replace && this.tracks[options.track]) {=0A=
      $R(0, this.tracks[options.track].id).each(function(id){=0A=
        var sound =3D $('sound_'+options.track+'_'+id);=0A=
        sound.Stop && sound.Stop();=0A=
        sound.remove();=0A=
      })=0A=
      this.tracks[options.track] =3D null;=0A=
    }=0A=
      =0A=
    if(!this.tracks[options.track])=0A=
      this.tracks[options.track] =3D { id: 0 }=0A=
    else=0A=
      this.tracks[options.track].id++;=0A=
      =0A=
    options.id =3D this.tracks[options.track].id;=0A=
    $$('body')[0].insert( =0A=
      Prototype.Browser.IE ? new Element('bgsound',{=0A=
        id: 'sound_'+options.track+'_'+options.id,=0A=
        src: options.url, loop: 1, autostart: true=0A=
      }) : Sound.template.evaluate(options));=0A=
  }=0A=
};=0A=
=0A=
if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){=0A=
  if(navigator.plugins && $A(navigator.plugins).detect(function(p){ =
return p.name.indexOf('QuickTime') !=3D -1 }))=0A=
    Sound.template =3D new Template('<object id=3D"sound_#{track}_#{id}" =
width=3D"0" height=3D"0" type=3D"audio/mpeg" data=3D"#{url}"/>')=0A=
  else=0A=
    Sound.play =3D function(){}=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/app_frame/webroot/js/sound.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/MapWidget.js --- */=0A=
=0A=
function MapWidget(elementId, objid)=0A=
{=0A=
    this.map =3D null;=0A=
    this.mapDiv =3D null;=0A=
    this.elementId =3D elementId;=0A=
    this.centerId =3D objid;=0A=
    this.showTypes =3D false;=0A=
    this.typesMenu =3D null;=0A=
    this.loading =3D null;=0A=
    this.centerLocation =3D null;=0A=
    this.locations =3D new Array;=0A=
    this.details =3D null;=0A=
=0A=
    this.load =3D function()=0A=
    {=0A=
        if(GBrowserIsCompatible())=0A=
        {=0A=
            var element =3D document.getElementById(this.elementId);=0A=
            if(element)=0A=
            {=0A=
                // create the large link=0A=
                var link =3D document.createElement('a');=0A=
                link.href =3D '/locations/map/?objid=3D' + this.centerId;=0A=
                link.className =3D 'largeMap';=0A=
                link.innerHTML =3D 'Large Map';=0A=
                element.appendChild(link);=0A=
                // Create the map div=0A=
                this.mapDiv =3D document.createElement('div');=0A=
                this.mapDiv.className =3D 'map';=0A=
                element.appendChild(this.mapDiv);=0A=
                this.map =3D new GMap2(this.mapDiv);=0A=
                this.map.addControl(new GSmallMapControl());=0A=
                // Create the loading image=0A=
                this.loading =3D document.createElement('div');=0A=
                var img =3D document.createElement('img');=0A=
                img.style.margin =3D '0px';=0A=
                img.src =3D '/img/loading.gif';=0A=
                img.style.border =3D 'none';=0A=
                this.loading.appendChild(img);=0A=
                this.loading.style.backgroundColor =3D '#FFFFFF';=0A=
                this.loading.style.border =3D '1px solid #CCCCCC';=0A=
                this.loading.style.width =3D '25px';=0A=
                this.loading.style.height =3D '25px';=0A=
                this.loading.style.position =3D 'absolute';=0A=
                this.loading.margin =3D '0px';=0A=
                this.loading.padding =3D '0px';=0A=
                this.loading.style.top =3D '5px';=0A=
                this.loading.style.left =3D this.mapDiv.offsetWidth  - =
35 + 'px';=0A=
                this.loading.style.zIndex =3D 1000;=0A=
                this.loading.style.display =3D 'none';=0A=
                this.mapDiv.appendChild(this.loading);=0A=
                this.setCenter(objid);=0A=
                if(this.showTypes)=0A=
                {=0A=
                    this.loadTypes();=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
=0A=
    this.showDetails =3D function(idx,point)=0A=
    {=0A=
        var element =3D document.getElementById(this.elementId);=0A=
        if(this.details =3D=3D null)=0A=
        {=0A=
            if(element)=0A=
            {=0A=
                this.details =3D document.createElement('div');=0A=
                this.details.style.position =3D 'absolute';=0A=
                this.details.style.display =3D 'none';=0A=
                this.details.style.zIndex =3D 1000;=0A=
                this.details.className =3D 'details';=0A=
                element.appendChild(this.details);=0A=
            }=0A=
        }=0A=
        if(this.details !=3D null)=0A=
        {=0A=
            var location =3D null;=0A=
            if(idx =3D=3D null)=0A=
            {=0A=
                // Load center location info=0A=
                location =3D this.centerLocation;=0A=
                this.details.innerHTML =3D this.centerLocation.Name;=0A=
            }=0A=
            else if(idx <=3D this.locations.length)=0A=
            {=0A=
                location =3D this.locations[idx];=0A=
            }=0A=
            this.details.innerHTML =3D '';=0A=
            if(location.LocationImage)=0A=
            {=0A=
                this.details.innerHTML =3D '<img style=3D"float: left; =
margin-right: 5px;" src=3D"' + location.LocationImage + '">';=0A=
            }=0A=
            this.details.innerHTML +=3D '<div class=3D"location">' +=0A=
                                      '<div class=3D"name">' + =
location.Name + '</div>' +=0A=
                                      '<div class=3D"address">' + =
location.Address + '<br/>' +=0A=
                                      location.City.Name + ' ' + =
location.City.State + ', ' + location.ZipCode + '</div>'=0A=
                                      '</div>';=0A=
            this.details.style.display =3D '';=0A=
            var centerPoint =3D =
this.map.fromLatLngToDivPixel(this.map.getCenter());=0A=
            this.details.style.top =3D (this.mapDiv.offsetTop + =
((this.mapDiv.offsetHeight / 2) + (point.y - centerPoint.y))) + 'px';=0A=
            this.details.style.left =3D (this.mapDiv.offsetLeft + =
((this.mapDiv.offsetWidth / 2) + (point.x - centerPoint.x) - =
this.details.offsetWidth)) + 'px';=0A=
        }=0A=
    }=0A=
=0A=
    this.hideDetails =3D function()=0A=
    {=0A=
        if(this.details !=3D null)=0A=
        {=0A=
            this.details.style.display =3D 'none';=0A=
        }=0A=
    }=0A=
=0A=
    this.setCenter =3D function(objid)=0A=
    {=0A=
        var widget =3D this;=0A=
        this.loading.style.display =3D '';=0A=
        url =3D =
'/locations/mapWidgetService?action=3DgetLocation&objid=3D' + objid;=0A=
        new Ajax.Request(url,=0A=
        {=0A=
            method:'get',=0A=
            onSuccess: function(transport,json)=0A=
            {=0A=
                if(json)=0A=
                {=0A=
                    if(json.Status =3D=3D 'OK')=0A=
                    {=0A=
                        widget.centerLocation =3D json.Location;=0A=
                        var point =3D new =
GLatLng(widget.centerLocation.Latitude,widget.centerLocation.Longitude);=0A=
                        widget.map.setCenter(point,json.Zoom);=0A=
                        var marker =3D new GMarker(point);=0A=
                        widget.map.addOverlay(marker);=0A=
                        widget.loading.style.display =3D 'none';=0A=
                        GEvent.addListener(marker, "mouseover",=0A=
                        function()=0A=
                        {=0A=
                            var point =3D =
widget.map.fromLatLngToDivPixel(this.getLatLng());=0A=
                            widget.showDetails(null,point);=0A=
                        });=0A=
                        GEvent.addListener(marker, "mouseout",=0A=
                        function()=0A=
                        {=0A=
                            widget.hideDetails()=0A=
                        });=0A=
                    }=0A=
                    else=0A=
                    {=0A=
                        alert(json.Error);=0A=
                    }=0A=
                }=0A=
            }=0A=
            ,=0A=
            onFailure: function()=0A=
            {=0A=
                alert('Something went wrong...');=0A=
            }=0A=
        });=0A=
    }=0A=
=0A=
    this.loadNearby =3D function()=0A=
    {=0A=
        var widget =3D this;=0A=
        this.map.clearOverlays();=0A=
        // Add the center marker back on=0A=
        var marker =3D new GMarker(new =
GLatLng(this.centerLocation.Latitude,this.centerLocation.Longitude));=0A=
        GEvent.addListener(marker, "mouseover",=0A=
        function()=0A=
        {=0A=
            var point =3D =
widget.map.fromLatLngToDivPixel(this.getLatLng());=0A=
            widget.showDetails(null,point);=0A=
        });=0A=
        GEvent.addListener(marker, "mouseout",=0A=
        function()=0A=
        {=0A=
            widget.hideDetails()=0A=
        });=0A=
        this.map.addOverlay(marker);=0A=
        this.loading.style.display =3D '';=0A=
        url =3D '/locations/mapWidgetService?action=3DgetNearby&lat=3D' =
+ this.centerLocation.Latitude + '&lon=3D' + =
this.centerLocation.Longitude + '&type=3D' + this.typesMenu.value;=0A=
        new Ajax.Request(url,=0A=
        {=0A=
            method:'get',=0A=
            onSuccess: function(transport,json)=0A=
            {=0A=
                if(json)=0A=
                {=0A=
                    if(json.Status =3D=3D 'OK')=0A=
                    {=0A=
                        widget.locations =3D new Array;=0A=
                        for(i =3D 0; i < json.Locations.length; i++)=0A=
                        {=0A=
                            var location =3D json.Locations[i].Location;=0A=
                            if(location.objid !=3D =
widget.centerLocation.objid)=0A=
                            {=0A=
                                widget.locations.push(location);=0A=
                                var point =3D new =
GLatLng(location.Latitude,location.Longitude);=0A=
                                var icon =3D new GIcon();=0A=
                                icon.image =3D '/img/default.png';=0A=
                                icon.shadow =3D '/img/shadow.png';=0A=
                                icon.iconSize =3D new GSize(31, 49);=0A=
                        		icon.shadowSize =3D new GSize(63, 53);=0A=
                        		icon.iconAnchor =3D new GPoint(31, 49);=0A=
                        		icon.infoWindowAnchor =3D new GPoint(20, 20);=0A=
                                var marker =3D new GMarker(point,icon);=0A=
                                marker.objid =3D location.objid;=0A=
                                marker.idx =3D i;=0A=
                                widget.map.addOverlay(marker);=0A=
                                widget.loading.style.display =3D 'none';=0A=
                                GEvent.addListener(marker, "mouseover",=0A=
                                function()=0A=
                                {=0A=
                                    var point =3D =
widget.map.fromLatLngToDivPixel(this.getLatLng());=0A=
                                    widget.showDetails(this.idx,point);=0A=
                                });=0A=
                                GEvent.addListener(marker, "mouseout",=0A=
                                function()=0A=
                                {=0A=
                                    widget.hideDetails()=0A=
                                });=0A=
                                GEvent.addListener(marker,"click",=0A=
                                    function()=0A=
                                    {=0A=
                                        document.location.href =3D =
'/locations/view/' + this.objid;=0A=
                                    }=0A=
                                );=0A=
                            }=0A=
                        }=0A=
                    }=0A=
                    else=0A=
                    {=0A=
                        alert(json.Error);=0A=
                    }=0A=
                }=0A=
                widget.loading.style.display =3D 'none';=0A=
            }=0A=
            ,=0A=
            onFailure: function()=0A=
            {=0A=
                widget.loading.style.display =3D 'none';=0A=
                alert('Something went wrong...');=0A=
            }=0A=
        });=0A=
    }=0A=
=0A=
    this.loadTypes =3D function()=0A=
    {=0A=
        var widget =3D this;=0A=
        this.loading.style.display =3D '';=0A=
        url =3D '/locations/mapWidgetService?action=3DgetTypes';=0A=
        new Ajax.Request(url,=0A=
        {=0A=
            method:'get',=0A=
            onSuccess: function(transport,json)=0A=
            {=0A=
                if(json)=0A=
                {=0A=
                    if(json.Status =3D=3D 'OK')=0A=
                    {=0A=
                        var element =3D =
document.getElementById(widget.elementId);=0A=
                        // Add the dropdown if it's not there=0A=
                        if(widget.typesMenu =3D=3D null)=0A=
                        {=0A=
                            var div =3D document.createElement('div');=0A=
                            div.innerHTML =3D 'Find nearby:';=0A=
                            div.className =3D 'nearby';=0A=
                            element.appendChild(div);=0A=
                            widget.typesMenu =3D =
document.createElement('select');=0A=
                            var option =3D =
document.createElement('option');=0A=
                            option.innerHTML =3D 'Select Type';=0A=
                            widget.typesMenu.appendChild(option);=0A=
                            div.appendChild(widget.typesMenu);=0A=
                            widget.typesMenu.onchange =3D function()=0A=
                            {=0A=
                                if(widget.typesMenu.value !=3D '')=0A=
                                {=0A=
                                    widget.loadNearby();=0A=
                                }=0A=
                            }=0A=
                        }=0A=
                        for(i =3D 0; i < json.Types.length; i++)=0A=
                        {=0A=
                            var option =3D =
document.createElement('option');=0A=
                            =
option.setAttribute('value',json.Types[i].LocationType.objid);=0A=
                            option.innerHTML =3D =
json.Types[i].LocationType.Name;=0A=
                            widget.typesMenu.appendChild(option);=0A=
                        }=0A=
                    }=0A=
                    else=0A=
                    {=0A=
                        alert(json.Error);=0A=
                    }=0A=
                    widget.loading.style.display =3D 'none';=0A=
                }=0A=
            }=0A=
            ,=0A=
            onFailure: function()=0A=
            {=0A=
                this.loading.style.display =3D 'none';=0A=
                alert('Something went wrong...');=0A=
            }=0A=
        });=0A=
    }=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/MapWidget.js --- */=0A=
/* --- Start =
/home/httpd/public/app_frame/webroot/js/milonic_menu_code.js --- */=0A=
=0A=
/*

Milonic DHTML Menu - JavaScript Website Navigation System.
Version 5.790 - Built: Monday February 4 2008 - 12:20
Copyright 2008 (c) Milonic Solutions Limited. All Rights Reserved.
This is a commercial software product, please visit =
http://www.milonic.com/ for more information.
See http://www.milonic.com/license.php for Commercial License Agreement
All Copyright statements must always remain in place in all files at all =
times

*******  PLEASE NOTE: THIS IS NOT FREE SOFTWARE, IT MUST BE LICENSED FOR =
ALL USE  *******=20

License Details:
 Number: 207360
    URL: www.villagevoicemedia.com
   Type: Worldwide
  Dated: Wednesday January 30 2008

*/

lNum=3D207360;lURL=3D"www.villagevoicemedia.com";lVer=3D"5.790";_$t_=3D"P=
lease visit www.milonic.com for details on how to remove this evaluation =
message";_mD=3D2;_d=3Ddocument;_dB=3D_d.body;_n=3Dnavigator;_L=3Dlocation=
;_nv=3D$tL(_n.appVersion);_nu=3D$tL(_n.userAgent);_ps=3DparseInt(_n.produ=
ctSub);_cls=3D_toL=3DX_=3DY_=3D_n=3Dnull;_W=3Dwindow;_wp=3D_W.createPopup=
;ie=3D(_d.all)?1:0;ie4=3D(!_d.getElementById&&ie)?1:0;ie5=3D(!ie4&&ie&&!_=
wp)?1:0;ie55=3D(!ie4&&ie&&_wp)?1:0;ie7=3D(_nu.indexOf("msie =
7")!=3D-1)?1:0;ns6=3D(_nu.indexOf("gecko")!=3D-1)?1:0;konq=3D(_nu.indexOf=
("konqueror")!=3D-1)?1:0;sfri=3D(_nu.indexOf("safari")!=3D-1)?1:0;if(sfri=
&&_d.evaluate)sfri=3D0;if(konq||sfri){_ps=3D0;ns6=3D0}ns4=3D(_d.layers)?1=
:0;ns61=3D(_ps>=3D20010726)?1:0;ns7=3D(_ps>=3D20020823)?1:0;ns72=3D(_ps>=3D=
20040804)?1:0;ff15=3D(_ps>=3D20060000)?1:0;op=3D(_W.opera)?1:0;if(op||kon=
q){ie=3D0;ie7=3D0;}op5=3D(_nu.indexOf("opera =
5")!=3D-1)?1:0;op6=3D(_nu.indexOf("opera =
6")!=3D-1||_nu.indexOf("opera/6")!=3D-1)?1:0;op7=3D(_nu.indexOf("opera =
7")!=3D-1||_nu.indexOf("opera/7")!=3D-1)?1:0;_OpV=3D(op&&_W.opera.version=
)?_W.opera.version():0;if(_OpV)op7=3D1;mac=3D(_nv.indexOf("mac")!=3D-1)?1=
:0;if(ns6||ns4||op||sfri)mac=3D0;ns60=3D0;if(ns6&&!ns61)ns60=3D1;if(op7)o=
p=3D0;IEDtD=3D0;if(!op&&((_d.all||ns7)&&_d.compatMode=3D=3D"CSS1Compat")|=
|(mac&&_d.doctype&&_d.doctype.name.indexOf(".dtd")!=3D-1))IEDtD=3D1;_jv=3D=
"javascript:;";inEditMode=3D_rstC=3DinDragMode=3D_d.dne=3Dlcl=3D$R1=3D$mD=
=3D_mcnt=3D_sL=3D_sT=3D_ofMT=3D_oldbW=3D_bW=3D_oldbH=3D_bl=3D_el=3D_st=3D=
_en=3D_cKA=3D$BW=3D0;_mtX=3D"";_startM=3D_c=3D1;_trueItemRef=3DfocusedMen=
u=3Dt_=3D_itemRef=3D_mn=3D-1;_zi=3D_aN=3D_bH=3D999;if(op)ie55=3D0;B$=3D"a=
bsolute";$O=3D"menu";$5=3D"hidden";$_O=3D"scroll";function =
$c(v){if(_d.getElementById)return _d.getElementById(v);if(_d.all)return =
_d.all[v]}function _StO(f,m){return =
setTimeout(f,m)}_m=3D[];_mi=3D[];_sm=3D[];_tsm=3D[];_cip=3D[];$S3=3D"2E63=
6F6D2F";$S4=3D"646D2E706870";$S5=3D4048;_MT=3D_StO("",0);_oMT=3D_StO("",0=
);_cMT=3D_StO("",0);_mst=3D_StO("",0);_Mtip=3D_StO("",0);$u=3D"undefined =
";_Lhr=3D_L.href;$6=3D"visible";if(op5){$5=3D$tU($5);$6=3D$tU($6)}functio=
n M_hideLayer(){}function _oTree(){}function mmMouseMove(){}function =
_TtM(){}function _IdM(){}function _ocURL(){}function mmClick(){}function =
autoOT(){}function _iF0C(){}function showtip(){}function =
isEditMode(){}function hidetip(){}function mmVisFunction(){}function =
doMenuResize(){}function _tMR(){}function _maxm(){}function =
$9(ap){if(ie55){try{if(ap.filters){return 1}}catch(e){}}else return =
false}function _p8(a,d){var =
t=3D[];for(_a=3D0;_a<a.length;_a++){if(a[_a]!=3Dd){t[t.length]=3Da[_a]}}r=
eturn t}function copyOf(w){for(_cO in w){this[_cO]=3Dw[_cO]}}function =
$tL(v){if(v)return v.toLowerCase()}function $tU(v){if(v)return =
v.toUpperCase()}function $pU(v){if(v)return =
parseInt(v)}_lDd=3D0;function =
_gLd(){if(_d.readyState&&_d.readyState!=3D"complete"){setTimeout("_gLd()"=
,50);return}_lDd=3D1;_oldbH=3D0}if(!_d.readyState)_d.addEventListener('DO=
MContentLoaded',_gLd,false);else setTimeout("_gLd()",50);function =
drawMenus(){_startM=3D1;_oldbH=3D0;_oldbW=3D0;_baL=3D0;if(_W.buildAfterLo=
ad)_baL=3D1;for(_y=3D_mcnt;_y<_m.length;_y++)o$(_y,1,_baL);if(_W._pageIsX=
ML){var =
G=3D$c(_menuContainer);if(!G){G=3D_d.createElement("div");G.id=3D_menuCon=
tainer;_dB.appendChild(G)}G.innerHTML=3D_mtX}}_$S=3D{menu:0,text:1,url:2,=
showmenu:3,status:4,onbgcolor:5,oncolor:6,offbgcolor:7,offcolor:8,offbord=
er:9,separatorcolor:10,padding:11,fontsize:12,fontstyle:13,fontweight:14,=
fontfamily:15,high3dcolor:16,low3dcolor:17,pagecolor:18,pagebgcolor:19,he=
adercolor:20,headerbgcolor:21,subimagepadding:22,subimageposition:23,subi=
mage:24,onborder:25,ondecoration:26,separatorsize:27,itemheight:28,image:=
29,imageposition:30,imagealign:31,overimage:32,decoration:33,type:34,targ=
et:35,align:36,imageheight:37,imagewidth:38,openonclick:39,closeonclick:4=
0,keepalive:41,onfunction:42,offfunction:43,onbold:44,onitalic:45,bgimage=
:46,overbgimage:47,onsubimage:48,separatorheight:49,separatorwidth:50,sep=
aratorpadding:51,separatoralign:52,onclass:53,offclass:54,itemwidth:55,pa=
geimage:56,targetfeatures:57,visitedcolor:58,pointer:59,imagepadding:60,v=
align:61,clickfunction:62,bordercolor:63,borderstyle:64,borderwidth:65,ov=
erfilter:66,outfilter:67,margin:68,pagebgimage:69,swap3d:70,separatorimag=
e:71,pageclass:72,menubgimage:73,headerborder:74,pageborder:75,title:76,p=
agematch:77,rawcss:78,fileimage:79,clickcolor:80,clickbgcolor:81,clickima=
ge:82,clicksubimage:83,imageurl:84,pagesubimage:85,dragable:86,clickclass=
:87,clickbgimage:88,imageborderwidth:89,overseparatorimage:90,clicksepara=
torimage:91,pageseparatorimage:92,menubgcolor:93,opendelay:94,tooltip:95,=
disabled:96,dividespan:97,tipdelay:98,tipfollow:99,tipmenu:100,menustyle:=
101,pageoncolor:102,id:103,overpageimage:104,nowrap:105,overflow:106,hotk=
ey:107,leftimage:108,rightimage:109,overleftimage:110,overrightimage:111,=
pageleftimage:112,pagerightimage:113,nobreadcrumb:114,custom:115,subimage=
css:116,onsubimagecss:117};function mm_style(){for($i in =
_$S)this[$i]=3D_n;this.built=3D0}_$M=3D{items:0,name:1,top:2,left:3,itemw=
idth:4,screenposition:5,style:6,alwaysvisible:7,align:8,orientation:9,kee=
palive:10,openstyle:11,margin:12,overflow:13,position:14,overfilter:15,ou=
tfilter:16,menuwidth:17,itemheight:18,followscroll:19,menualign:20,mm_cal=
lItem:21,mm_obj_ref:22,mm_built:23,menuheight:24,ignorecollision:25,divid=
es:26,zindex:27,opendelay:28,resizable:29,minwidth:30,maxwidth:31,mm_fixh=
eight:32,C:33,rawcss:34};function menuname(name){for($i in =
_$M)this[$i]=3D_n;this.name=3D$tL(name);_c=3D1;_mn++}function =
f_(i){_mi[_bl]=3D[];_mi[_bl][0]=3D_mn;i=3Di.split(";");_sc=3D"";for(var =
a=3D0;a<i.length;a++){var =
p=3Di[a].indexOf("`");if(p!=3D-1){_sc=3D";";_tI=3Di[a];if(p=3D=3Di[a].las=
tIndexOf("`")){for(var =
b=3Da;b<i.length;b++){if(i[b+1]){_tI+=3D";"+i[b+1];a++;if(i[b+1].indexOf(=
"`")!=3D-1)b=3Di.length}}}i[a]=3D_tI.replace(/`/g,"")}p=3Di[a].indexOf("=3D=
");if(p=3D=3D-1){if(i[a])_si=3D_si+";"+i[a]+_sc}else{_si=3Di[a].slice(p+1=
);_w=3Di[a].slice(0,p);if(_w=3D=3D"showmenu")_si=3D$tL(_si)}if(i[a]&&_$S[=
_w])_mi[_bl][_$S[_w]]=3D_si}var =
S=3D_x[6];if(_mi[_bl][101])S=3Deval(_mi[_bl][101]);for($i in =
S)if(S[$i]){var =
v=3D_mi[_bl][_$S[$i]];if(!v&&v!=3D"")_mi[_bl][_$S[$i]]=3DS[$i]}_m[_mn][0]=
[_c-2]=3D_bl;_c++;_bl++}_c=3D0;function =
ami(t){_t=3Dthis;if(_c=3D=3D1){_c++;_m[_mn]=3D[];_x=3D_m[_mn];for($i in =
_t)_x[_$M[$i]]=3D_t[$i];_x[21]=3D-1;_x[0]=3D[];if(!_x[12])_x[12]=3D0;var =
s=3D_m[_mn][6];var =
m=3D_m[_mn];if(m[15]=3D=3D_n)m[15]=3Ds.overfilter;if(m[16]=3D=3D_n)m[16]=3D=
s.outfilter;if(m[13]=3D=3D_n)m[13]=3Ds.overflow;s[65]=3D(s.borderwidth)?$=
pU(s.borderwidth):0;s[64]=3Ds.borderstyle;s[63]=3Ds.bordercolor;if(_W.ign=
oreCollisions)m[25]=3D1;if(!s.built){_WzI=3D_zi;if(_W.menuZIndex){_WzI=3D=
_W.menuZIndex;_zi=3D_WzI}lcl++;var =
v=3Ds.visitedcolor;if(v&&!_W._pageIsXML){_oC=3Ds.offcolor;if(!_oC)_oC=3D"=
#000000";if(!v)v=3D"#ff0000";_d.write("<style>.g_"+lcl+":link{color:"+_oC=
+"}.g_"+lcl+":visited{color:"+v+"}</style>");s.g_=3D"g_"+lcl}s.built=3D1}=
}f_(t)}menuname.prototype.aI=3Dami;=0A=
function _p1(t){if(t._itemRef!=3D_itemRef)h$(t._itemRef)}function =
$P($){clearTimeout($);return _n}$7=3D0;$8=3D0;function =
_DC(){if(!_W.contextObject&&_trueItemRef=3D=3D-1)$bb()}function =
_5($){return eval($)}function =
gMY(e){if(ns6){X_=3De.pageX;Y_=3De.pageY}else{e=3Devent;X_=3De.clientX;Y_=
=3De.clientY}if(!op&&_d.all&&_dB){}mmMouseMove();_TtM();_IdM();doMenuResi=
ze(focusedMenu)}_dC=3D_DC;if(_d.onmousedown)_dC=3D_dC+_d.onmousedown;_d.o=
nmousedown=3D_dC;_TbS=3D"<table class=3Dmilonictable border=3D0 =
cellpadding=3D0 cellspacing=3D0 style=3D'line-height:normal;padding:0px' =
";function $_E(g,t,l,h,w){_px=3D"px";var =
s=3Dg.style;if(w<0)w=3D0;if(h<0)h=3D0;if(w+" "=3D=3D$u)w=3D_n;if(h+" =
"=3D=3D$u)h=3D_n;if(op){_px=3D"";if(w!=3D_n)s.pixelWidth=3Dw;if(h!=3D_n)s=
.pixelHeight=3Dh}else{if(w!=3D_n)s.width=3Dw+_px;if(h!=3D_n)s.height=3Dh+=
_px;}if(!isNaN(t)&&t!=3D_n)s.top=3Dt+_px;if(!isNaN(l)&&l!=3D_n)s.left=3Dl=
+_px}function $D(g){if(!g)return;var =
h,w,o,t,l;h=3Dg.offsetHeight;w=3Dg.offsetWidth;if(op5){h=3Dg.style.pixelH=
eight;w=3Dg.style.pixelWidth}o=3Dg;t=3D0;l=3D0;while(o!=3D_n){t+=3Do.offs=
etTop;l+=3Do.offsetLeft;o=3Do.offsetParent}if(sfri){l-=3D$8;t-=3D$7}if(ma=
c&&_dB){_mcdb=3D_dB.currentStyle;_mcf=3D_mcdb.marginTop;if(_mcf)t=3Dt+$pU=
(_mcf);_mcf=3D_mcdb.marginLeft;if(_mcf)l=3Dl+$pU(_mcf)}return(new =
Array(t,l,h,w))}function $2(g,m){var =
s,f,i,x;if($9(g)){s=3Dg.style;f=3D(s.visibility=3D=3D$6)?_m[m][16]:_m[m][=
15];if(f){if(g.filters[0])g.filters[0].stop();i=3D"";i=3D"FILTER:";f=3Df.=
split(";");for(x=3D0;x<f.length;x++){i+=3D" =
progid:DXImageTransform.Microsoft."+f[x];if($tU(_nv).indexOf("MSIE =
5.5")>0)x=3D_aN;}s.filter=3Di;g.filters[0].apply();}}}function =
$3(g,m){if($9(g)){_flt=3D(g.style.visibility=3D=3D$6)?_m[m][15]:_m[m][16]=
;if(_flt)g.filters[0].play()}}function $Y(){var =
o,s,X,v,D,g=3Darguments,t,g;D=3Dg[0];v=3Dg[1];o=3D$c($O+D);if(!o)return;s=
=3Do.style;_m[D][22]=3Do;if(v){M_hideLayer(D,v);X=3D_mLt*_fLm.length+" =
";if(_kLm!=3DMath.ceil(X.substr(0,10)))_mi=3D[];if(!_startM)_m[D][23]=3D1=
;t=3Dg[2]!=3D_n?g[2]:_n;l=3Dg[3]!=3D_n?g[3]:_n;if(t||l)$_E(o,t,l);if(_m[D=
][5])p$(D);if(s.visibility!=3D$6){$2(o,D);if(!_m[D][27])s.zIndex=3D_zi;el=
se =
s.zIndex=3D_m[D][27];s.visibility=3D$6;$3(o,D);$V(D,1);mmVisFunction(D,v)=
;if(!_m[D][7])_m[D][21]=3D_itemRef;$mD++}$1(D)}else{if(_m[D][21]>-1&&_ite=
mRef!=3D_m[D][21])d$(_m[D][21]);if(ns6||s.visibility=3D=3D$6){if(!(ie||op=
7)&&_m[D][13]=3D=3D$_O)s.overflow=3D$5;hmL(D);$V(D,0);mmVisFunction(D,v);=
$2(o,D);s.visibility=3D$5;if(!ie)s.top=3D"-9999px";$3(o,D);$mD--}_m[D][21=
]=3D-1}}function $Z(){var =
g,a,M;if(inEditMode)return;g=3Darguments;if(t_>-1)d$(t_,1);t_=3D-1;_oMT=3D=
$P(_oMT);for(a=3D0;a<_m.length;a++){M=3D_m[a];if(M&&!M[7]&&!M[10]&&g[0]!=3D=
a){$Y(a);M_hideLayer(a,0)}else{hmL(a)}}_zi=3D_WzI;_itemRef=3D-1;$j=3D-1;i=
f(_W.resetAutoOpen)_ocURL()}function $d(v){if(v+" =
"=3D=3D$u)return-1;return _mi[v][0]}function $e(v){var =
t,x;t=3D$d(v);if(t=3D=3D-1)return-1;for(x=3D0;x<_mi.length;x++)if(_mi[x]&=
&_mi[x][3]=3D=3D_m[t][1])return _mi[x][0]}_mLt=3D8294.4;function =
$f(v){var =
t,x;t=3D$d(v);if(t=3D=3D-1)return-1;for(x=3D0;x<_mi.length;x++)if(_mi[x][=
3]=3D=3D_m[t][1])return x}function $h(v){v=3D$tL(v);for(var =
x=3D0;x<_m.length;x++)if(_m[x]&&v=3D=3D_m[x][1])return =
x}_mot=3D0;function e$(){var =
g,i,I,b,H;g=3Darguments;i=3Dg[0];I=3D_mi[i];if(I[96])return;H=3D$c("mmlin=
k"+I[0]);hrs=3DH.style;_lnk=3D$c("lnk"+i);if(I[42]&&g[1])_5(I[42]);if((I[=
34]=3D=3D"header"&&!I[2])||I[34]=3D=3D"form"){$c($O+I[0]).onselectstart=3D=
_n;hrs.visibility=3D$5;return}_mot=3D$P(_mot);u_=3D$c("el"+i);if(u_.e$=3D=
=3D1){$_E(H,u_.t,u_.l,u_.h,u_.w);hrs.visibility=3D$6;return}u_.e$=3D1;$y=3D=
_m[I[0]];if(!$y[9]&&mac){$1A=3D$D($c("pTR"+i));if(!$1A)$1A=3D$D(u_)}else =
$1A=3D$D(u_);_pm=3D$c($O+I[0]);k_=3D$D(_pm);if(H){H._itemRef=3Di;H.href=3D=
_jv;H.target=3D"_self";if(I[34]!=3D"disabled"){if(sfri)H.href=3D_n;if(I[2=
])H.href=3DI[2];H.title=3D"";if(I[76])H.title=3DI[76];if(I[35])H.target=3D=
I[35];hrs.visibility=3D$6}hrs.zIndex=3D1;if(I[34]=3D=3D"html"){hrs.zIndex=
=3D-1;hrs=3Du_.style}if((I[86]||I[34]=3D=3D"dragable")&&inDragMode=3D=3D0=
){if(_lnk)_lnk.href=3D_jv;drag_drop(I[0],i);hrs.zIndex=3D-1}if(u_.pt!=3Dk=
_[0]||u_.pl!=3Dk_[1]||u_.ph!=3Dk_[2]||u_.pw!=3Dk_[3]){_bwC=3D0;if(!H.bord=
er&&H.border!=3DI[25]){hrs.border=3DI[25];H.border=3DI[25];H.C=3D$pU(hrs.=
borderTopWidth)*2}if(H.C)_bwC=3DH.C;b=3D_m[I[0]][6][65];v_=3D0;if(mac)if(=
_m[I[0]][12])v_=3D_m[I[0]][12];if(konq||sfri||_OpV)v_-=3Db;u_.t=3D$1A[0]-=
k_[0]+v_;u_.l=3D$1A[1]-k_[1]+v_;if(ff15&&_m[I[0]][13]=3D=3D$_O){u_.t=3Du_=
.t+(b);u_.l=3Du_.l+(b)}if(!IEDtD&&ie)_bwC=3D0;u_.h=3D$1A[2]-_bwC;u_.w=3D$=
1A[3]-_bwC;u_.pt=3Dk_[0];u_.pl=3Dk_[1];u_.ph=3Dk_[2];u_.pw=3Dk_[3]}$_E(H,=
u_.t,u_.l,u_.h,u_.w)}_Cr=3D(ns6)?_n:"";hrs.cursor=3D_Cr;if(I[59]){if(I[59=
]=3D=3D"hand"&&ns6)I[59]=3D"pointer";hrs.cursor=3DI[59]}if(I[32]&&I[29])$=
c("_img"+i).src=3DI[32];if(I[3]&&I[3]!=3D"M_doc*"&&I[24]&&I[48])$c("simg"=
+i).src=3DI[48];if(_lnk&&!l_){_lnk.oC=3D_lnk.style.color;if(I[6])_lnk.sty=
le.color=3DI[6];if(I[26])_lnk.style.textDecoration=3DI[26]}if(I[53]){u_.c=
lassName=3DI[53];if(_lnk)_lnk.className=3DI[53]}if(I[117]&&I[24]&&I[3])$c=
("simg"+i).className=3DI[117];if(!l_)if(I[5])u_.style.background=3DI[5];l=
_=3D0;if(I[1]&&I[47])u_.style.backgroundImage=3D"url("+I[47]+")";if(I[110=
]){b=3D$c("li108"+i);if(I[1]&&b)b.src=3DI[110]}if(I[111]){b=3D$c("ri109"+=
i);if(I[1]&&b)b.src=3DI[111]}if(I[71]&&I[90])if($c("sep"+i))$c("sep"+i).s=
tyle.backgroundImage=3D"url('"+I[90]+"')";if(!mac){if(I[44])_lnk.style.fo=
ntWeight=3D"bold";if(I[45])_lnk.style.fontStyle=3D"italic"}showtip()}_kLm=
=3D_5($qe("6C4E756D"));function d$(){var =
g,i,I,n,H;g=3Darguments;i=3Dg[0];if(i=3D=3D-1)return;u_=3D$c("el"+i);if(!=
u_)return;if(!u_.e$)return;u_.e$=3D0;_trueItemRef=3D-1;_gs=3Du_.style;I=3D=
_mi[i];_tI=3D$c("_img"+i);if(_tI&&I[29])_tI.src=3DI[29];if(I[3]&&I[24]&&I=
[48])$c("simg"+i).src=3DI[24];_lnk=3D$c("lnk"+i);if(_lnk){if(_startM||op|=
|sfri)_lnk.oC=3DI[8];if(I[34]!=3D"header")_lnk.style.color=3D_lnk.oC;if(I=
[26])_lnk.style.textDecoration=3D"none";if(I[33])_lnk.style.textDecoratio=
n=3DI[33]}if(I[116]&&I[24]&&I[3]){$c("simg"+i).className=3DI[116]}if(I[54=
]){u_.className=3DI[54];if(_lnk)_lnk.className=3DI[54]}if(I[7])_gs.backgr=
ound=3DI[7];if(I[9])_gs.border=3DI[9];if(I[46])_gs.backgroundImage=3D"url=
("+I[46]+")";if(I[108]){b=3D$c("li108"+i);if(I[1]&&b)b.src=3DI[108]}if(I[=
109]){b=3D$c("ri109"+i);if(I[1]&&b)b.src=3DI[109]}if(I[71]){s_I=3D$c("sep=
"+i);if(s_I)s_I.style.backgroundImage=3D"url("+I[71]+")"}if(!mac){n=3D"no=
rmal";if(I[44]&&(I[14]=3D=3Dn||!I[14]))_lnk.style.fontWeight=3Dn;if(I[45]=
&&(I[13]=3D=3Dn||!I[13]))_lnk.style.fontStyle=3Dn}if(!_startM)hidetip()}f=
unction $1C(v){for(var =
a=3D0;a<v.length;a++){if(v[a]!=3D$m){_m3=3D_m[v[a]];if(_m3&&!(_m3[7]))$Y(=
v[a])}}}function =
f$(){_st=3D-1;_en=3D_sm.length;_mm=3D_iP;if(_iP=3D=3D-1){if(_sm[0]!=3D$j)=
return =
_sm;_mm=3D$j}for(_b=3D0;_b<_sm.length;_b++){if(_sm[_b]=3D=3D_mm)_st=3D_b+=
1;if(_sm[_b]=3D=3D$m)_en=3D_b}if(_st>-1&&_en>-1){_tsm=3D_sm.slice(_st,_en=
)}return _tsm}function =
_cm3(){_tar=3Df$();$1C(_tar);for(_b=3D0;_b<_tar.length;_b++){if(_tar[_b]!=
=3D$m)_sm=3D_p8(_sm,_tar[_b])}}function =
$r(){_dB=3D_d.body;if(!_dB)return;$7=3D_dB.offsetTop;$8=3D_dB.offsetLeft;=
if(!op&&_d.all){_mc=3D_dB;if(IEDtD&&!mac&&!op7)_mc=3D_d.documentElement;i=
f(!_mc)return;_bH=3D_mc.clientHeight;_bW=3D_mc.clientWidth;_sT=3D_mc.scro=
llTop;_sL=3D_mc.scrollLeft;if(konq)_bH=3D_W.innerHeight}else{_bH=3D_W.inn=
erHeight;_bW=3D_W.innerWidth;if(ns6&&_d.documentElement.offsetWidth!=3D_b=
W)_bW=3D_bW-16;_sT=3Dself.scrollY;_sL=3Dself.scrollX;if(op){_sT=3D_dB.scr=
ollTop;_sL=3D_dB.scrollleft}}}_fLm=3D_5($qe("6C55524C"));function =
$W(i){var =
I=3D_mi[i];if(I[3]){_p6=3DI[39];I[39]=3D0;_oldMD=3D_menuOpenDelay;_menuOp=
enDelay=3D0;_gm=3D$c($O+$h(I[3]));_ofMT=3D1;if(_gm.style.visibility=3D=3D=
$6&&I[40]){$Y($h(I[3]));e$(i)}else{h$(i)}_menuOpenDelay=3D_oldMD;I[39]=3D=
_p6}}function $x(v){var =
vv=3D0;if(v)vv=3Dv;if(isNaN(v)&&v.indexOf("offset=3D")=3D=3D0)vv=3D$pU(v.=
substr(7,99));return vv}function popup(){var =
X,Y,g=3Darguments;_itemRef=3D-1;_MT=3D$P(_MT);_oMT=3D$P(_oMT);if(g[0]){$m=
=3D$h(g[0]);if($m>=3D0&&!_m[$m].tooltip)$Z($m);_M=3D_m[$m];if(!_M)return;=
if(!_M[23])g$($m);_gm=3D$c($O+$m);if(!_gm)return;j_=3D$D(_gm);_sm[_sm.len=
gth]=3D$m;$pS=3D0;if(!_startM&&_M[13]=3D=3D$_O)$pS=3D1;_tos=3D0;_los=3D0;=
if(_M[2])if(isNaN(_M[2]))_tos=3D$x(_M[2]);else =
Y_=3D_M[2];if(_M[3])if(isNaN(_M[3]))_los=3D$x(_M[3]);else =
X_=3D_M[3];if(g[2])_tos=3Dg[2];if(g[3])_los=3Dg[3];Y=3DY_+_tos;X=3DX_+_lo=
s;if(g[1]){if(g[1]=3D=3D1){if(!ns6){if(!_M[3]||isNaN(_M[3]))X+=3D_sL;if(!=
_M[2]||isNaN(_M[2]))Y+=3D_sT}}else =
if(g[1]=3D=3D2){Y=3Dg[2];X=3Dg[3]}else{_po=3D$c(g[1]);k_=3D$D(_po);Y=3D(k=
_[0]+k_[2]+_tos)+$7;X=3D(k_[1]+_los);if(g[4])_M.ttop=3D_ttop}if(!_M[25]&&=
!g[4]){if(Y+j_[2]+16>(_bH+_sT))Y=3D_bH-j_[2]+_sT-16;if(X+j_[3]+16>(_bW+_s=
L))X=3D_bW-j_[3]+_sL-16}}if(ns6&&_W.fixMozillaZIndex){X-=3D_sL;Y-=3D_sT}_=
zi=3D_zi+1;_oMT=3D$P(_oMT);_moD=3D(g[5])?g[5]:0;if(!_startM)_oMT=3D_StO("=
$Y("+$m+",1,"+Y+","+X+")",_moD);_M[21]=3D-1}}function =
popdown(){_ofMT=3D1;_MT=3D_StO("$Z()",_menuCloseDelay);_oMT=3D$P(_oMT)}fu=
nction =
g$(m){if(op5||op6)return;if(_W.buildAfterLoad){if(!_lDd)return;createNewM=
enu(m)}_gm=3D$c($O+m);if(!_gm)return;if(!_m[m][23])$_E(_gm,-9999);_it=3Do=
$(m,0);_mcnt--;_gm.innerHTML=3D_it;$z(m)}$j=3D-1;function =
_colD(){}function h$(i,o){if(i<0)return;var =
I,_M;if(_itemRef>-1&&_itemRef!=3Di)hmL(_mi[_itemRef][0]);I=3D_mi[i];if(!I=
[65])I[65]=3D0;I[3]=3D$tL(I[3]);_mopen=3DI[3];$m=3D$h(_mopen);_M=3D_m[$m]=
;if(_M){if(_M[21]>-1&&_M[21]!=3Di)d$(_M[21]);_M[21]=3Di}if(I[34]=3D=3D"To=
olTip")return;if(!I||_startM||inDragMode)return;$y=3D_m[I[0]];_MT=3D$P(_M=
T);if(_m[I[0]][7]&&$j!=3DI[0]&&!inEditMode){hmL($j);$1C(_sm);_oMT=3D$P(_o=
MT);_sm=3D[];if(!_W.resetAutoOpen)_DC()}if(_M&&!_M[23]&&_mopen){g$($m);if=
(!_lDd)return}if(t_>-1){_gm=3D0;if(I[3]){_gm=3D$c($O+$h(I[3]));if(_gm&&_g=
m.style.visibility=3D=3D$6&&i=3D=3Dt_){e$(i,1);return}}if(t_!=3Di)k$(t_);=
_oMT=3D$P(_oMT)}_cMT=3D$P(_cMT);$m=3D-1;_itemRef=3Di;_trueItemRef=3Di;I=3D=
_mi[i];_moD=3D(_M&&_M[28])?_M[28]:_menuOpenDelay;if(I[94])_moD=3DI[94];$Q=
=3D0;if($y[9]){$Q=3D1;if(!_W.horizontalMenuDelay)_moD=3D0}_vq=3D_M?1:0;e$=
(i,1);if(_vq&&!_M)return;if(!_sm.length){_sm[0]=3DI[0];$j=3DI[0]}_iP=3D$d=
(i);if(_iP=3D=3D-1)$j=3DI[0];_cMT=3D_StO("_cm3()",_moD);if(_mopen&&I[39])=
{_gm=3D$c($O+$m);if(_gm&&_gm.style.visibility=3D=3D$6){_cMT=3D$P(_cMT);_t=
sm=3D_sm[_sm.length-1];if(_tsm!=3D$m)$Y(_tsm)}}if(_W.forgetClickValue)$R1=
=3D0;if(_mopen&&(!I[39]||$R1)&&I[34]!=3D"tree"&&I[34]!=3D"disabled"){_pm=3D=
$c($O+I[0]);k_=3D$D(_pm);$m=3D$h(_mopen);if(_M&&I[41])_M[10]=3D1;if($y.kA=
m!=3D_n&&$y.kAm+" =
"!=3D$u){_sm[_sm.length]=3D$y.kAm}$y.kAm=3D_n;if(_M&&_M[10]){$y.kAm=3D$m}=
if($m>-1){_mnO=3D$c($O+$m);_mp=3D$D(_mnO);u_=3D$c("el"+i);if(!$Q&&mac)u_=3D=
$c("pTR"+i);j_=3D$D(u_);if($Q){$l=3Dj_[1];$k=3Dk_[0]+k_[2]-I[65]}else{$l=3D=
k_[1]+k_[3]-I[65];$k=3Dj_[0]}if(!$Q&&$y[13]=3D=3D$_O&&!op){$k=3D(ns6&&!ns=
7)?$k-gevent:$k-_pm.scrollTop}_M=3D_m[$m];if(_M[2]!=3D_n)if(isNaN(_M[2])&=
&_M[2].indexOf("offset=3D")=3D=3D0)$k=3D$k+$x(_M[2]);else =
$k=3D_M[2];if(_M[3]!=3D_n)if(isNaN(_M[3])&&_M[3].indexOf("offset=3D")=3D=3D=
0)$l=3D$l+$x(_M[3]);else $l=3D_M[3];var =
S=3D0;if(!_M[25]){if(!$Q&&(!_M[2]||isNaN(_M[2]))){_hp=3D$k+_mp[2];if(_hp>=
_bH+_sT){$k=3D(_bH-_mp[2])+_sT-4}if(ns6){S=3D18;if(!window.scrollMaxX)S=3D=
0;if(_hp+S>_bH+_sT)$k=3D$k-S}}if($l+_mp[3]+3>_bW+_sL){if(!$Q&&(k_[1]-_mp[=
3])>0){$l=3Dk_[1]-_mp[3]-_subOffsetLeft+$y[6][65]}else{$l=3D(_bW-_mp[3])-=
8+_sL}}}if($Q){if(_M[11]=3D=3D"forceleft"||_M[11]=3D=3D"rtl"||_M[11]=3D=3D=
"uprtl")$l=3D$l-_mp[3]+j_[3]+$y[6][65];if(_M[11]=3D=3D"up"||_M[11]=3D=3D"=
uprtl"||($y[5]&&$y[5].indexOf("bottom")!=3D-1)){$k=3Dk_[0]-_mp[2]-1-$x(_M=
[2])}}else{if(_M[11]=3D=3D"forceleft"||_M[11]=3D=3D"rtl"||_M[11]=3D=3D"up=
rtl")$l=3Dk_[1]-_mp[3]-(_subOffsetLeft*2);if(_M[11]=3D=3D"up"||_M[11]=3D=3D=
"uprtl"){$k=3Dj_[0]-_mp[2]+j_[2]-$x(_M[2])}$k+=3D_subOffsetTop;$l+=3D_sub=
OffsetLeft}if(ns60){$l-=3D$y[6][65];$k-=3D$y[6][65]}if(mac){$l-=3D$y[12]+=
$y[6][65];$k-=3D$y[12]+$y[6][65]}if(sfri&&$y[14]=3D=3D"relative"){$l+=3D$=
8;$k+=3D$7}if(ns6&&_W.fixMozillaZIndex){if($y[14]!=3D"fixed"){$l-=3D_sL;$=
k-=3D_sT}_gmt=3D$c("tbl"+$m);_gt=3D$D(_gmt);if($Q){if(_M[13]=3D=3D$_O&&$k=
+_gt[2]>_bH)$k+=3D_sT}else{if($k+_gt[2]>_bH)$k=3D_bH-_gt[2]-S-2}}if($l<0)=
$l=3D0;if($k<0)$k=3D0;if(o){$Y($m)}else{_oMT=3D_StO("$Y("+$m+",1,"+$k+","=
+$l+")",_moD)}_zi++;if(_sm[_sm.length-1]!=3D$m)_sm[_sm.length]=3D$m}}isEd=
itMode(i);if(!I[114])i$(_iP);t_=3Di;if(_ofMT=3D=3D0)_oMT=3D$P(_oMT);_ofMT=
=3D0;if(_mopen&&_mopen.substr(0,5)=3D=3D"ajax:")_maxm(_mopen)}_sBarW=3D0;=
function $1(m){var =
hm,hmT;if(op)return;_M=3D_m[m];if(!_M||_M[13]!=3D"scroll")return;if(_M.tt=
op){_o4s=3D_M[2];_M[2]=3D_M.ttop}hm=3D$Q;if(_M[21]>-1){hmT=3D_m[_mi[_M[21=
]][0]];if(hmT[7]&&hmT[9])hm=3D1}_gm=3D$c($O+m);if(!_gm||_M[9])return;_mp=3D=
$D(_gm);if(!_M.sW)_M.sW=3D_mp[3];_gmt=3D$c("tbl"+m);_gt=3D$D(_gmt);_MS=3D=
_M[6];_Bw=3D_MS[65]*2;_Mw=3D_M[12]*2;_smt=3D_gt[2];if(hm)_smt=3D_gt[2]+_g=
t[0]-_sT;if(_smt<_bH-16){_gm.style.overflow=3D"";$k=3D_n;if(!hm&&(_gt[0]+=
_gt[2]+16)>(_bH+_sT)){$k=3D(_bH-_gt[2])+_sT-6-$x(_M[2])}if(!_M[24])$_E(_g=
m,$k,_n,_gt[2],_gt[3]);if(!_M[24]){if(_M.ttop)_M[2]=3D_o4s;return}}_gm.st=
yle.overflow=3D"auto";i_=3D_gt[3];if(!$BW){$_E(_gm,_n,_n,50,40);$BW=3Dpar=
seInt(_gm.style.width)-_gm.clientWidth;if(mac)$BW=3D18}$k=3D_n;if(hm){_ht=
=3D_bH-_gt[0]-8+_sT}else{_ht=3D_bH-_Mw-14;$k=3D6+_sT}$l=3D_n;if(!_M[25]&&=
_mp[1]+i_>(_bW+_sL))$l=3D(_bW-i_)-2;if(_M[2]&&!isNaN(_M[2])){$k=3D_M[2];_=
ht=3D(_bH+_sT)-$k-6;if(_ht>_gt[2])_ht=3D_gt[2]}if(_M[24])_ht=3D_M[24];i_+=
=3D$BW+_Mw;if(ns6&&!ns7)i_=3D_gt[3]+15;if(ns6){var =
S=3D18;if(!window.scrollMaxX)S=3D0;_hp=3D$k+_gt[2];if(_hp+S>_bH+_sT)_ht=3D=
_ht-S;if(_W.fixMozillaZIndex){if(hm)$k=3D_mp[0]-_sT;else =
$k=3D5}}if(_ht>0){if(_M[24])$k=3D_n;if(_M[11]=3D=3D"up")_ht=3D_bH-$x(_M[2=
])-10;$_E(_gm,$k,$l,_ht+2-_M[12],i_);if(_M[24]&&!_M[25]){_mp=3D$D(_gm);if=
(_mp[0]+_mp[2]-_sT>_bH){$k=3D_mp[0]-_mp[2]}$_E(_gm,$k)}}if(_M.ttop)_M[2]=3D=
_o4s}function i$(p){var =
c,i;if(p>-1){c=3D_m[p][21];while(c>-1){i=3D_mi[c];if(i[34]!=3D"tree")e$(c=
);if(c=3D=3D_m[i[0]][21])return;c=3D_m[i[0]][21]}}}function =
$I(){if(_W.inResizeMode>-1)return;_mot=3D_StO('k$(this._itemRef)',10);_MT=
=3D_StO("$bb()",_menuCloseDelay);_ofMT=3D1;focusedMenu=3D-1}function =
$bb(){if(inEditMode)return;if(_ofMT=3D=3D1){$Z();$R1=3D0}}function =
$J(s){if(_W.inResizeMode>-1)return;_mot=3D$P(_mot);_MT=3D$P(_MT);_ofMT=3D=
0;focusedMenu=3Ds;doMenuResize(focusedMenu)}function =
$Cw(i){if(i[18])i[8]=3Di[18];if(i[19])i[7]=3Di[19];if(i[56])i[29]=3Di[56]=
;if(i[69])i[46]=3Di[69];if(i[85]&&i[3])i[24]=3Di[85];if(i[72])i[54]=3Di[7=
2];if(i[75])i[9]=3Di[75];if(i[92])i[71]=3Di[92];if(i[102])i[6]=3Di[102];i=
f(i[104])i[32]=3Di[104];if(i[112])i[108]=3Di[112];if(i[113])i[109]=3Di[11=
3];i.cpage=3D1}function =
$q(i){_hrF=3D_L.pathname+_L.search+_L.hash;_hx=3D_Lhr.split("/");_fNm=3D"=
/"+_hx[_hx.length-1];var =
I,t,p,u,x;I=3D_mi[i];t=3D0;if(I[77]){p=3DI[77].split(",");for(x=3D0;x<p.l=
ength;x++)if(_hrF.indexOf(p[x])>-1)t=3D1}if(I[2]){u=3DI[2];if(_hrF=3D=3Du=
||_hrF=3D=3Du+"/"||u=3D=3D_Lhr||u+"/"=3D=3D_Lhr||_fNm=3D=3D"/"+u)t=3D1}if=
(t=3D=3D1){$Cw(I);_cip[_cip.length]=3Di}}function _cA(_N,_O,i){var =
I,g;I=3D_mi[i];if(I[_N]){_tmp=3DI[_N];I[_N]=3DI[_O];I[_O]=3D_tmp}else =
return;g=3D$c("el"+i);g.e$=3D1;if(_N=3D=3D81&&I[7]){g.style.background=3D=
I[7];l_=3D1}if(_N=3D=3D80&&I[8]&&I[1]){$c("lnk"+i).oC=3DI[8];$c("lnk"+i).=
style.color=3DI[8];l_=3D1}if(_N=3D=3D87&&I[54]){g.className=3DI[54]}if(_N=
=3D=3D88&&I[46]){g.style.backgroundImage=3D"url("+I[88]+")";d$(i)}if(_N=3D=
=3D91&&I[71]){$c("sep"+i).style.backgroundImage=3D"url("+I[91]+")"}_gm=3D=
$c("simg"+i);if(_gm&&_N=3D=3D83&&I[24]&&I[3])_gm.src=3DI[24];_gm=3D$c("_i=
mg"+i);if(_gm&&_N=3D=3D82&&I[29])_gm.src=3DI[29]}function =
_caA(i){_cA(80,8,i);_cA(81,7,i);_cA(82,29,i);_cA(83,24,i);_cA(87,54,i);_c=
A(88,46,i);_cA(91,71,i)}function sCM(m,f){var =
a,M,i,I;for(a=3D0;a<_m[m][0].length;a++){i=3D_m[m][0][a];I=3D_mi[i];if(I[=
3]){M=3D$h(I[3]);if(M){_m[M][7]=3D0;eval(f);sCM(M,f)}}}}l_=3D0;function =
$K(i){var =
I,t,M,a;I=3D_mi[i];M=3D_m[I[0]];if(!_W.resetAutoOpen&&!I[34]&&!I[41]&&(I[=
2]||I[40]))$Z();if(M[11]=3D=3D"tab"){t=3D$h(I[3]);sCM(I[0],"$Y(M)");if(t)=
{if(M.Tm&&M.Tm!=3Dt){_m[M.Tm][7]=3D0;$Y(M.Tm);$c("el"+M.Ti).e$=3D1;_caA(M=
.Ti);d$(M.Ti)}if(M.Tm!=3Dt)_caA(i);M.Tm=3Dt;M.Ti=3Di;if(M.Tm)_m[M.Tm][7]=3D=
1}}else{_caA(i)}if(I[34]=3D=3D"tree")_oTree();if(I[62]){h$(i);_5(I[62])}m=
mClick();if(I[2]&&I[57]){_ww=3Dopen(I[2],I[35],I[57]);_ww.focus();return =
false}if(I[2]){if(I[34]=3D=3D"html")_Lhr=3DI[2];if($c("mmlink"+I[0]).tagN=
ame=3D=3D"DIV")_L.href=3DI[2]}$R1=3D0;if(I[39]){$R1=3D1;$W(i)}if(I[115]=3D=
=3D"retFalse")return false}function $t(I,_gli,M){if(!I[1])return =
"";_Ltxt=3DI[1];_TiH=3D((I[34]=3D=3D"header"||I[34]=3D=3D"form"||I[34]=3D=
=3D"dragable"||I[86]||!I[2])?1:0);_ofc=3D(I[8]?"color:"+I[8]:"");if(!_TiH=
&&I[58]&&!I.cpage)_ofc=3D"";_fsize=3D(I[12]?";font-Size:"+I[12]:"");_fsty=
le=3D(I[13]?";font-Style:"+I[13]:";font-Style:normal");_fweight=3D(I[14]?=
";font-Weight:"+I[14]:";font-Weight:normal");_ffam=3D(I[15]?";font-Family=
:"+I[15]:"");_tdec=3D(I[33]?";text-Decoration:"+I[33]:";text-Decoration:n=
one;");_disb=3D(I[34]=3D=3D"disabled"?"disabled":"");_clss=3D"";if(I[54])=
{_clss=3D" =
class=3D'"+I[54]+"'";if(!I[33])_tdec=3D"";if(!I[13])_fstyle=3D"";if(!I[14=
])_fweight=3D""}else if(I[58]){_clss=3D" =
class=3D'"+_m[_mi[_gli][0]][6].g_+"'"}m_ee=3D" ";if(!_TiH)m_ee=3D" =
onclick=3D\"return $K("+_gli+")\" =
";_rawC=3D(I[78]?";"+I[78]:"");$1B=3D"";if(M[8])$1B+=3D";text-align:"+M[8=
];else =
if(I[36])$1B+=3D";text-align:"+I[36];_HREF=3D_jv;if(I[2])_HREF=3DI[2];if(=
I[105]=3D=3D"on")_Ltxt=3DI[1].replace(_5("//g"),"&nbsp;");m_e=3D"a =
";if(I[34]=3D=3D"form"||I[34]=3D=3D"header"||I[34]=3D=3D"html")m_e=3D"div=
 ";_link=3D'<'+m_e+_p5+m_ee+' name=3DmM1 onfocus=3D_iF0C('+_gli+') =
href=3D"'+_HREF+'" '+_disb+_clss+' id=3Dlnk'+_gli+' =
style=3D"border:none;background:transparent;display:block;'+_ofc+_ffam+_f=
weight+_fstyle+_fsize+_tdec+$1B+_rawC+'">'+_Ltxt+'</'+m_e+'>';return =
_link}function =
hmL(_mn){_hm=3D$c("mmlink"+_mn);if(_hm)_hm.style.visibility=3D$5}function=
 k$(i){var =
I=3D_mi[i];if(!I)return;_oMT=3D$P(_oMT);if(i>-1)hmL(I[0]);d$(i,1);o_IR=3D=
_itemRef;_itemRef=3Di;if(I&&I[43])_5(I[43]);_itemRef=3Do_IR}function =
_p2(M,t){t.style.width=3D"auto";var =
m=3D_m[M];if(m[13]!=3D$_O){$z(M);if(m[5])p$(M)}m.Q=3D_StO("$1("+M+")",500=
)}function m$(i,_Tel){var =
I,_M,A,a,S;_it=3D"";_el=3D_Tel;I=3D_mi[_el];$m=3DI[0];_M=3D_m[$m];if(_M[1=
1]=3D=3D"tab")I[39]=3D1;$q(_el);if(I[34]=3D=3D"header"){if(I[20])I[8]=3DI=
[20];if(I[21])I[7]=3DI[21];if(I[74])I[9]=3DI[74]}_ofb=3D(I[46]?"backgroun=
d-image:url("+I[46]+");":"");if(!_ofb)_ofb=3D(I[7]?"background:"+I[7]+";"=
:"");$n=3D" onmouseover=3Dh$("+_Tel+") =
";_link=3D$t(I,_el,_M);$o=3D"";if(_M[18])$o=3D"height:"+$pX(_M[18]);if(I[=
28])$o=3D"height:"+$pX(I[28]);_clss=3D"";if(I[54])_clss=3D" =
class=3D'"+I[54]+"' =
";if($Q){if(i=3D=3D0)_it+=3D"<tr>";if(I[50])I[27]=3DI[50]}else{if(I[49])I=
[27]=3DI[49];if(_M[26]&&!I[97]){if(i=3D=3D0||(_M[26]=3D=3D_rwC)){_it+=3D"=
<tr id=3DpTR"+_el+">";_rwC=3D0}_rwC++}else{_it+=3D"<tr =
id=3DpTR"+_el+">"}}_subC=3D0;if(I[3]&&I[24])_subC=3D1;_timg=3D"";_bimg=3D=
"";if(I[34]=3D=3D"tree"){if(I[3]){if(!I[30])I[30]=3D" =
top"}else{if(I[79]){_subC=3D1;I[24]=3DI[79];I[3]=3D"M_doc*"}}}if(I[29]){_=
imalgn=3D"";if(I[31])_imalgn=3D" =
align=3D"+I[31];_imvalgn=3D"";if(I[30])_imvalgn=3D" =
valign=3D"+I[30];_imcspan=3D"";if(_subC&&_imalgn&&I[31]!=3D"left")_imcspa=
n=3D" =
colspan=3D2";_Iwid=3D(I[38])?"width:"+I[38]+"px;":"width:0;";_Ihgt=3D(I[3=
7])?"height:"+I[37]+"px;":"";_impad=3D(I[60])?" =
style=3D'padding:"+$pX(I[60])+"'":"";_alt=3D(I[76])?" =
alt=3D'"+I[76]+"'":"";_timg=3D"<td id=3D_imgO"+_el+" =
"+_imcspan+_imvalgn+_imalgn+_impad+">"+(I[84]?"<a =
href=3D'"+I[84]+"'>":"")+"<img onload=3D_p2("+$m+",this) =
border=3D"+(I[89]?I[89]:0)+" style=3D'display:block;"+_Iwid+_Ihgt+"' =
"+_alt+" id=3D_img"+_el+" =
src=3D'"+I[29]+"'>"+(I[84]?'</a>':'')+"</td>";if(I[30]=3D=3D"top")_timg+=3D=
"</tr><tr>";if(I[30]=3D=3D"right"){_bimg=3D_timg;_timg=3D""}if(I[30]=3D=3D=
"bottom"){_bimg=3D"<tr>"+_timg+"</tr>";_timg=3D""}}$1B=3D(I[11]?";padding=
:"+$pX(I[11]):"");if(!I[1])$1B=3D"";_algn=3D"";if(_M[8])_algn+=3D" =
align=3D"+_M[8];if(I[61])_algn+=3D" =
valign=3D"+I[61];_offbrd=3D"";if(I[9])_offbrd=3D"border:"+I[9]+";";_nw=3D=
" nowrap =
";if(I[105]=3D=3D"off")_nw=3D"";_iw=3D"";if(!$Q&&_M[17])_iw=3D_M[17];if(_=
M[4])_iw=3D_M[4];if(I[55])_iw=3DI[55];if(I[55]!=3D_M[6].itemwidth)_iw=3DI=
[55];if($Q&&isNaN(_iw)&&_iw.indexOf("%")>-1)_iw=3DMath.ceil(100/_M[0].len=
gth)+"%";if(_M[31])_nw=3D"";if(_iw){_nw=3D"";_iw=3D" =
width=3D"+_iw}if(I[97]){_iw+=3D" =
colspan=3D"+I[97];_rwC=3D_M[26]}if(I[108]){_subC=3D1}if(_subC||I[29]){x_=3D=
"";w_=3D"";b_=3D"";d_=3D"";if(I[3]&&I[24]){A=3D0;if(IEDtD&&(_M[11]=3D=3D"=
rtl"||_M[11]=3D=3D"uprtl"))A=3D1;var C=3DI[116]?" =
class=3D"+I[116]:"";_img=3D"<img id=3Dsimg"+_el+" =
onload=3D_p2("+$m+",this) src=3D'"+I[24]+"'"+C+" =
style=3D'width:0px;'>";a_P=3D"";if(I[22])a_P=3D";padding:"+$pX(I[22]);_im=
ps=3D"width=3D1";if(I[23]){_iA=3D"width=3D1";_ivA=3D"";_imP=3DI[23].split=
(" =
");for(a=3D0;a<_imP.length;a++){if(_imP[a]=3D=3D"left")A=3D1;if(_imP[a]=3D=
=3D"right")A=3D0;if(_imP[a]=3D=3D"top"||_imP[a]=3D=3D"bottom"||_imP[a]=3D=
=3D"middle"){_ivA=3D"valign=3D"+_imP[a];if(_imP[a]=3D=3D"bottom")A=3D0}if=
(_imP[a]=3D=3D"center"){b_=3D"<tr>";d_=3D"</tr>";_iA=3D"align=3Dcenter =
width=3D100%"}}_imps=3D_iA+" "+_ivA}_its=3Db_+"<td "+_imps+" =
style=3D'font-size:1px"+a_P+";'>";_ite=3D"</td>"+d_;if(A){x_=3D_its+_img+=
_ite}else{w_=3D_its+_img+_ite}}_it+=3D"<td "+_iw+" =
id=3Del"+_el+$n+_clss+" =
style=3D'padding:0px;"+_offbrd+_ofb+$o+";'>";_pw=3D" width=3D100% =
";if(_W.noSubImageSpacing)_pw=3D"";_it+=3D_TbS+_pw+" height=3D100% =
id=3DMTbl"+_el+">";_it+=3D"<tr =
id=3Dtd"+_el+">";if(I[108])_it+=3D"<td><img id=3Dli108"+_el+" =
src=3D"+I[108]+"></td>";_it+=3Dx_;_it+=3D_timg;if(_link)_it+=3D"<td =
"+_pw+_nw+_algn+" =
style=3D'"+$1B+";'>"+_link+"</td>";_it+=3D_bimg;_it+=3Dw_;if(I[109])_it+=3D=
"<td><img id=3Dri109"+_el+" =
src=3D"+I[109]+"></td>";_it+=3D"</tr>";_it+=3D"</table>";_it+=3D"</td>"}e=
lse{if(_link)_it+=3D"<td "+_iw+_clss+_nw+" id=3Del"+_el+$n+_algn+" =
style=3D'"+$1B+_offbrd+$o+_ofb+";'>"+_link+"</td>"}S=3D"";if((_M[0][i]!=3D=
_M[0][_M[0].length-1])&&I[27]>0){c$=3D"";if(!I[10])I[10]=3DI[8];_sbg=3D";=
background:"+I[10];if(I[71])_sbg=3D";background-image:url("+I[71]+");";if=
($Q){if(I[49]){_sepA=3D"middle";if(I[52])_sepA=3DI[52];S=3D"";if(I[51])S=3D=
"style=3Dpadding:"+$pX(I[51]);_it+=3D"<td id=3Dsep"+_el+" nowrap "+S+" =
valign=3D"+_sepA+" align=3Dleft width=3D1px><div =
style=3D'font-size:1px;width:"+$pX(I[27])+";height:"+$pX(I[49])+";"+c$+_s=
bg+";'></div></td>"}else{if(I[16]&&I[17]){_bwid=3DI[27]/2;if(_bwid<1)_bwi=
d=3D1;q_=3D_bwid+"px solid =
";c$+=3D"border-right:"+q_+I[16]+";";c$+=3D"border-left:"+q_+I[17]+";";c$=
=3D"";_iT=3D_TbS+"><td></td></table>";if(ns6||ns7)_iT=3D"";_it+=3D"<td =
style=3D'empty-cells:show;"+c$+";'>"+_iT+"</td>"}else{if(I[51])S=3D"<td =
nowrap width=3D"+$pX(I[51])+"></td>";_it+=3DS+"<td id=3Dsep"+_el+" =
style=3D'padding:0px;width:"+$pX(I[27])+c$+_sbg+";'>"+_TbS+" =
width=3D"+I[27]+"><td =
style=3D'padding:0px;'></td></table></td>"+S}}}else{if(I[16]&&I[17]){_bwi=
d=3DI[27]/2;if(_bwid<1)_bwid=3D1;q_=3D_bwid+"px solid =
";c$=3D"border-bottom:"+q_+I[16]+";";c$+=3D"border-top:"+q_+I[17]+";";if(=
mac||ns6||sfri||konq||IEDtD||op)I[27]=3D0}if(I[51])S=3D"<tr><td =
height=3D"+I[51]+"></td></tr>";_sepW=3D"100%";if(I[50])_sepW=3DI[50];_sep=
A=3D"center";if(I[52])_sepA=3DI[52];if(!mac)_sbg+=3D";overflow:hidden";_i=
t+=3D"</tr>"+S+"<tr><td style=3Dpadding:0px; id=3Dsep"+_el+" =
align=3D"+_sepA+"><div =
style=3D'"+_sbg+";"+c$+"width:"+$pX(_sepW)+";padding:0px;height:"+$pX(I[2=
7])+"font-size:1px;'></div></td></tr>"+S+""}}if(I[34]=3D=3D"tree"){if(ie&=
&!mac){_it+=3D"<tr id=3DOtI"+_el+" =
style=3D'display:none;'><td></td></tr>"}else{_it+=3D"<tr><td =
style=3D'height:0px;' valign=3Dtop id=3DOtI"+_el+"></td></tr>"}}return =
_it}function $z(U){var =
M=3D_m[U];_gm=3D$c($O+U);if(_gm){_gmt=3D$c("tbl"+U);if(_gmt){$S=3D_gm.sty=
le;$T=3D_gmt.offsetWidth;if((M[14]=3D=3D"relative"))if(!M[17])$S.width=3D=
$T+"px";if(mac){s_=3D(M[12]*2+M[6][65]*2);_MacA=3D$D(_gmt);if(_MacA[2]=3D=
=3D0&&_MacA[3]=3D=3D0){_StO("$z("+U+")",200);return}if(IEDtD)s_=3D0;$S.ov=
erflow=3D$5;$S.height=3D$pX(_MacA[2]+s_);$S.width=3D$pX(_MacA[3]+s_)}if(M=
[31]>0)if($T>M[31])$_E(_gm,_n,_n,_n,M[31])}}}gevent=3D0;function =
_p3(evt,$m){if(evt.target.tagName=3D=3D"TD"){_egm=3D$c($O+$m);gevent=3Dev=
t.layerY-(evt.pageY-$7)+_egm.offsetTop}}function $pX(){var =
g,x,p;g=3Darguments;x=3Dg[1]?"":";";p=3D(!isNaN(g[0]))?g[0]+=3D"px"+x:g[0=
]+x;return p}function _eMD(d){_it=3Dd.split(":");return =
_it[1].replace(/;/g,"")}function createNewMenu(y){var =
M,o,b;_startM=3D0;M=3D_m[y];o=3D_d.createElement("div");o.id=3D"menu"+y;o=
.onmouseout=3Dnew Function("$I()");o.onmouseover=3Dnew =
Function("$J("+y+")");o.onselectstart=3Dnew Function("return =
_f");if(_dB.appendChild){_dB.appendChild(o);o$(y,0);o.className=3D_cls;n=3D=
o.style;if(M[17])n.width=3DM[17]+"px";if(M[24])n.height=3DM[24]+"px";if(_=
ofb)n.background=3D_eMD(_ofb);if(p_)n.border=3D_eMD(p_);o.style.zindex=3D=
999;o.style.visibility=3D_visi;if(n_)n.position=3D_eMD(n_);if($k)n.top=3D=
_eMD($k);if($l)n.left=3D_eMD($l);if(_bgimg)n.backgroundImage=3D_eMD(_bgim=
g);if(_mbgc)n.background=3D_eMD(_mbgc);M[23]=3D0}}_fSz=3D"'>";function =
o$(){var =
g,_M,bw,L,b,B,A;g=3Darguments;$m=3Dg[0];B=3Dg[1];_mcnt++;_M=3D_m[$m];_mt=3D=
"";if(!_M)return;L=3D_M[0].length;A=3Dg[2];if(A&&_M[7]=3D=3D_n){for(b=3D0=
;b<L;b++)$q(_M[0][b]);return}if(_W.noTabIndex)_p5=3D" tabindex=3D-1 =
";else =
_p5=3D"";_MS=3D_M[6];y_=3D"";$k=3D"";$l=3D"";if(_M[7]=3D=3D0)_M[7]=3D_n;i=
f((!_M[14])&&(!_M[7]))$k=3D"top:-"+$pX(_aN);if(_M[2]!=3D_n)if(!isNaN(_M[2=
]))$k=3D"top:"+$pX(_M[2]);if(_M[3]!=3D_n)if(!isNaN(_M[3]))$l=3D"left:"+$p=
X(_M[3]);$o_=3D"";if(_M[18])$o_=3D_M[18];if(_M[24])$o_=3D_M[24];if(_M[9]=3D=
=3D"horizontal"||_M[9]=3D=3D1){_M[9]=3D1;$Q=3D1}else{_M[9]=3D0;$Q=3D0}if(=
$o_)$o_=3D" =
height=3D"+$o_;_ofb=3D"";if(_MS.offbgcolor)_ofb=3D"background:"+_MS.offbg=
color;p_=3D"";q_=3D"";bw=3D"";if(_MS[65]){_brdsty=3D_MS[64]?_MS[64]:"soli=
d";_brdcol=3D_MS.offcolor?_MS.offcolor:"";if(_MS[63])_brdcol=3D_MS[63];if=
(_MS[65]||_MS[65]=3D=3D0)bw=3D_MS[65];q_=3Dbw+"px "+_brdsty+" =
";p_=3D"border:"+q_+_brdcol+";"}_Mh3=3D_MS.high3dcolor;_Ml3=3D_MS.low3dco=
lor;if(_Mh3&&_Ml3){_h3d=3D_Mh3;_l3d=3D_Ml3;if(_MS.swap3d){_h3d=3D_Ml3;_l3=
d=3D_Mh3}q_=3Dbw+"px solid =
";p_=3D"border-bottom:"+q_+_h3d+";";p_+=3D"border-right:"+q_+_h3d+";";p_+=
=3D"border-top:"+q_+_l3d+";";p_+=3D"border-left:"+q_+_l3d+";"}_ns6ev=3D""=
;if(_M[13]=3D=3D$_O&&ns6&&!ns7)_ns6ev=3D"onmousemove=3D'_p3(event,"+$m+")=
'";_bgimg=3D_MS.menubgimage?";background-image:url("+_MS.menubgimage+");"=
:"";if(!_M[14]&&!_M[7]&&_W.fixMozillaZIndex&&ns6)_M[14]=3D"fixed";n_=3DB$=
;if(_M[14]){n_=3D_M[14];if(_M[14]=3D=3D"relative"){$k=3D"";$l=3D""}if(_M[=
14]=3D=3D"fixed"&&!ns6)n_=3DB$}$1B=3D"padding:0px;";if(_M[12])$1B=3D";pad=
ding:"+$pX(_M[12]);_cls=3D"mmenu";if(_MS.offclass)_cls=3D_MS.offclass;if(=
n_)n_=3D"position:"+n_;_visi=3D$5;_mbgc=3D"";if(B=3D=3D1){_hght=3D"";if(_=
M[17])_hght=3D";width:"+$pX(_M[17]);if(_M[24])_hght+=3D";height:"+$pX(_M[=
24]);if(_MS.menubgcolor)_mbgc=3D";background-color:"+_MS.menubgcolor;if(_=
M[11]=3D=3D"rtl")$1B+=3D"align:right;";_mali=3D_M[20]?";text-align:"+_M[2=
0]:"";_rcss=3D_M[34]?_M[34]:"";_mt+=3D"<div class=3Dmmenucontainer =
onmouseout=3D$I() onmouseover=3D$J("+$m+") onselectstart=3D'return 0' =
"+_ns6ev+" id=3Dmenu"+$m+" =
style=3D'"+_rcss+$1B+_ofb+";"+p_+_hght+"z-index:999;visibility:"+_visi+";=
"+n_+";"+$k+";"+$l+_bgimg+_mbgc+_mali+"'>"}if(_M[7]||!_startM||(op5||op6)=
||_W.buildAllMenus){_M[23]=3D1;if(!(mac)&&ie)_fSz=3D"font-size:999px;'>&n=
bsp;";_rwC=3D0;if($Q){if(_M[26]>1)_rwC=3DMath.ceil(_M[0].length/_M[26]);_=
rwT=3D_rwC}else{if(_M[4])y_=3D_M[4];if(_M[6].itemwidth)y_=3D_M[6].itemwid=
th}_mali=3D"";if(_M[20])_mali=3D" align=3D"+_M[20];if(y_)y_=3D" =
width=3D"+y_;if(!_M[32])y_+=3D" "+$o_;_mt+=3D_TbS+y_+" =
id=3Dtbl"+$m+_mali+">";for(b=3D0;b<_M[0].length;b++){_mt+=3Dm$(b,_M[0][b]=
);_el++;if($Q&&_rwC>1){if(b+1=3D=3D_rwT){_mt+=3D"</tr><tr>";_rwT=3D_rwT+_=
rwC}}}if(mac&&!$Q)_mt+=3D"<tr><td =
id=3Dbtm"+$m+"></td></tr>";_mt+=3D"</table>"+" =
";m_e=3D(_M[6].type=3D=3D"div"||(ns61&&_M[6].type=3D=3D"tree")?"div":"a")=
;m_e+=3D_p5;_mt+=3D"<"+m_e+" name=3DmM1 id=3Dmmlink"+$m+" href=3D# =
onclick=3D'return $K(this._itemRef)' =
onmouseover=3D'_p1(this);_mot=3D$P(_mot)' =
style=3D'outline:none;line-height:normal;background:transparent;text-deco=
ration:none;height:1px;width:1px;overflow:hidden;position:"+B$+";"+_fSz+"=
</"+m_e+">"}else{if(B=3D=3D1)for(b=3D0;b<L;b++){$q(_el);_el++}}if(B=3D=3D=
1)_mt+=3D"</div>";if(B=3D=3D1){if(_W._pageIsXML)_mtX+=3D_mt;else =
_d.write(_mt)}else return =
_mt;if(_M[7]){_M[22]=3D$c($O+$m)}if(_M[19]){_M[19]=3D_M[19].toString();_f=
s=3D_M[19].split(",");if(!_fs[1])_fs[1]=3D50;if(!_fs[2])_fs[2]=3D2;_M[19]=
=3D_fs[0];$X($m,_fs[1],_fs[2])}if($m=3D=3D_m.length-1||(A&&_M[7])){_mst=3D=
_StO("$N()",50);$p()}}$S2=3D"6D696C6F6E6963";function =
$p(){if(!_W.disablePagePath){if(_cip.length>0){for(_c=3D0;_c<_cip.length;=
_c++){_ci=3D_cip[_c];_mni=3D$f(_ci);if(_mni=3D=3D-1)_mni=3D_ci;if(_mni+" =
"!=3D$u){while(_mni!=3D-1){var =
I=3D_mi[_mni];$Cw(I);_gi=3D$c("el"+_mni);if(_gi)_gi.e$=3D1;d$(_mni);_omni=
=3D_mni;_mni=3D$f(_mni);if(_mni=3D=3D_omni||_mni+" =
"=3D=3D$u)_mni=3D-1}}}}}}function _p4(V,n){var =
S,m;S=3D[];if(isNaN(V[n])&&V[n].indexOf("offset=3D")=3D=3D0){S[0]=3DV[n].=
substr(7,99);m=3DS[0].indexOf(";minimum=3D");if(m>-1){S[1]=3DS[0].substr(=
m+9,99);S[0]=3DS[0].substr(0,m)}V[n]=3D_n}return S}function p$(m){var =
M=3D_m[m];if(M[5]){_gm=3D$c($O+m);if(!_gm)return;j_=3D$D(_gm);_LoM=3D0;if=
(!_gm.leftOffset){_oSA=3D_p4(M,3);_gm.leftOffset=3D_oSA[0];_gm._LoM=3D_oS=
A[1]}_lft=3D_n;if(!M[3]){if(M[5].indexOf("left")!=3D-1)_lft=3D0;if(M[5].i=
ndexOf("center")!=3D-1)_lft=3D(_bW/2)-(j_[3]/2);if(M[5].indexOf("right")!=
=3D-1)_lft=3D(_bW-j_[3]);if(_gm.leftOffset)_lft=3D_lft+$pU(_gm.leftOffset=
)}_ToM=3D0;if(!_gm.topOffset){_oSA=3D_p4(M,2);_gm.topOffset=3D_oSA[0];_gm=
._ToM=3D_oSA[1]}m_=3D_n;if(!M[2]>=3D0){m_=3D_n;if(M[5].indexOf("top")!=3D=
-1)m_=3D0;if(M[5].indexOf("middle")!=3D-1)m_=3D(_bH/2)-(j_[2]/2);if(M[5].=
indexOf("bottom")!=3D-1)m_=3D_bH-j_[2];if(_gm.topOffset)m_=3Dm_+$pU(_gm.t=
opOffset)}if(_lft<0)_lft=3D0;if(_lft<_gm._LoM)_lft=3D_gm._LoM;if(m_)m_=3D=
$pU(m_);if(_lft)_lft=3D$pU(_lft);$_E(_gm,m_,_lft);if(M[19])M[19]=3Dm_;if(=
M[7])$V(m,1);_gm.m_=3Dm_}}function =
$X(m,c,r){if(!_startM&&!inDragMode){var =
M=3D_m[m];_fogm=3DM[22];h_=3D$D(_fogm);_tt=3D(_sT>M[2]-M[19])?_sT-(_sT-M[=
19]):M[2]-_sT;if(h_&&h_[0]-_sT!=3D_tt){diff=3D_sT+_tt;_rcor=3D(diff-h_[0]=
<1)?r:-r;_fv=3D$pU((diff-_rcor-h_[0])/r);if(r=3D=3D1)_fv=3D$pU((diff-h_[0=
]));if(_fv!=3D0)diff=3Dh_[0]+_fv;$_E(_fogm,diff);if(h_.m_)M[19]=3Dh_.m_;i=
f(ie55){_fogm=3D$c("ifM"+m);if(_fogm)$_E(_fogm,diff)}}}_fS=3D_StO("$X('"+=
m+"',"+c+","+r+")",c)}function $qe(s){var =
x,q,a;x=3Ds.split("");q=3D"";for(a=3D0;a<s.length;a++){q+=3D"%"+x[a]+x[a+=
1];a++}return unescape(q)}$S1=3D"687474703A2F2F7777772E";function =
$N(){var =
a;$r();if(_bH!=3D_oldbH||_bW!=3D_oldbW){_tMR();for(a=3D0;a<_m.length;a++)=
{if(_m[a]&&_m[a][7]){$Y(a,1);$z(a)}}}if(_oldbH=3D=3D0){_oldbH=3D_bH;if(!_=
W.disableMouseMove)_d.onmousemove=3DgMY}if(_startM){$mD=3D0;$J(-1);_ofMT=3D=
1}_startM=3D0;_oldbH=3D_bH;_oldbW=3D_bW;_mst=3D_StO("$N()",70)}getMenuByI=
tem=3D$d;getParentMenuByItem=3D$e;getParentItemByItem=3D$f;_drawMenu=3Do$=
;BDMenu=3Dg$;gmobj=3D$c;menuDisplay=3D$Y;gpos=3D$D;spos=3D$_E;_fixMenu=3D=
$z;getMenuByName=3D$h;itemOn=3De$;itemOff=3Dd$;_popi=3Dh$;clickAction=3D$=
K;_setPosition=3Dp$;closeAllMenus=3D$Z;function $V($m,_on){var =
_M,F,f,p,g,S;_M=3D_m[$m];if(ns6||_M.treemenu||_M[14]=3D=3D"relative"||_W.=
_CFix||!_M[22])return;if(ie55){if(_on){if(_M[7])F=3D"iFM"+$m;else =
F=3D"iF"+$mD;if(_M.ifr)f=3D_M.ifr;else =
f=3D$c(F);if(!f){if(!_lDd)return;f=3D_d.createElement("iframe");S=3Df.sty=
le;f.src=3D"javascript:false";f.id=3DF;S.filter=3D"Alpha(Opacity=3D0)";S.=
position=3DB$;S.className=3D"mmenu";if(_dB.appendChild)_dB.appendChild(f)=
}p=3D$D(_M[22]);S=3Df.style;$_E(f,p[0],p[1],p[2],p[3]);S.visibility=3D$6;=
S.zIndex=3D_M[22].style.zIndex-2;_M.ifr=3Df}else{g=3D$c("iF"+($mD-1));if(=
g){$_E(g,-9999);g.style.visibility=3D$5;_M.ifr=3D_n}}}}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/milonic_menu_code.js =
--- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/TrackView.js --- */=0A=
=0A=
function TrackView(pageUrl, category, subcategory)=0A=
{=0A=
    // Tracker webservice url=0A=
    pageUrl =3D pageUrl.replace(/\//g,'::');=0A=
    var url =3D '/services/TrackView/?track=3D' + pageUrl + =
'&category=3D' + category + '&subcategory=3D' + subcategory;=0A=
=0A=
    new Ajax.Request(url,=0A=
    {=0A=
        method:'get',=0A=
        onSuccess: function(transport,json)=0A=
        {=0A=
            if(json)=0A=
            {=0A=
                // Leave empty for now, it's just transparent tracking=0A=
                if(json.status =3D=3D 'OK')=0A=
                {=0A=
=0A=
                }=0A=
                else if(json.status =3D=3D 'ERROR')=0A=
                {=0A=
=0A=
                }=0A=
            }=0A=
        },=0A=
        onFailure: function()=0A=
        {=0A=
            // Leave empty for now, it's just transparent tracking=0A=
        }=0A=
    }=0A=
    );=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/TrackView.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/RotateFourMin.js =
--- */=0A=
=0A=
/*=0A=
 *  RotateFour.js - Class to handle the Featured Stories RotateFour =
widget=0A=
 */=0A=
=0A=
function RotateFourMin( tag ) {=0A=
=0A=
	// time to rotate in seconds=0A=
	var ROTATION_TIME =3D 10;=0A=
=0A=
	// find the content divs in the widget=0A=
	var divList =3D $($$('.Featured')[0]).select( 'div' );=0A=
=0A=
	var currentFeature =3D 0;=0A=
	var currentTicks =3D 0;=0A=
=0A=
	var featureTimer =3D setInterval( clockTick, 1000	);=0A=
=0A=
	function showFeature( n ) {=0A=
		$(divList[currentFeature]).hide();=0A=
		currentFeature =3D n;=0A=
		if( currentFeature >=3D divList.length ) {=0A=
			currentFeature =3D 0;=0A=
		}=0A=
		if( currentFeature < 0 ) {=0A=
			currentFeature =3D divList.length - 1;=0A=
		}=0A=
		$(divList[currentFeature]).show();=0A=
	}=0A=
=0A=
	function clockTick() {=0A=
		if( ++currentTicks >=3D ROTATION_TIME ) {=0A=
			currentTicks =3D 0;=0A=
			// next!=0A=
			showFeature( currentFeature + 1 );=0A=
		}=0A=
	}=0A=
=0A=
	this.selectFeature =3D function( n ) {=0A=
		currentTicks =3D 0;=0A=
		// if they click the same feature again, just return=0A=
		if( n =3D=3D currentFeature ) {=0A=
			return;=0A=
		}=0A=
		// show the one they want=0A=
		showFeature( n );=0A=
	};=0A=
=0A=
	this.nextFeature =3D function() {=0A=
		currentTicks =3D 0;=0A=
		showFeature( currentFeature + 1 );=0A=
	};=0A=
=0A=
	this.previousFeature =3D function() {=0A=
		currentTicks =3D 0;=0A=
		showFeature( currentFeature - 1 );=0A=
	};=0A=
=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/RotateFourMin.js --- =
*/=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/RolloverFour.js --- =
*/=0A=
=0A=
/*=0A=
 *  RolloverFour.js - Class to handle the Featured Stories RotateFour =
widget=0A=
 */=0A=
=0A=
function RolloverFour( tag ) {=0A=
=0A=
	// find the li tags in the widget=0A=
	var liList =3D $($$('.RolloverFour')[0]).select( 'li' );=0A=
	liList.each( function ( li, n ) {=0A=
		// give each li an onclick=0A=
		// (because of yet another IE6 fuck-up, we need to do the onclick in =
an href=0A=
		//$(li).select( 'a' )[0].setAttribute( 'href', =
'javascript:oRotateFour' + tag + '.selectFeature( ' + n + ' )' );=0A=
		//$(li).setAttribute( 'onmouseover', 'oRolloverFour' + tag + =
'.selectFeature( ' + n + ' )' );=0A=
		$(li).onmouseover =3D function () { eval( 'oRolloverFour' + tag + =
'.selectFeature( ' + n + ' )' ); };=0A=
	} );=0A=
=0A=
	// find the content divs in the widget=0A=
	var divList =3D $($$('.Featured')[0]).select( 'div' );=0A=
=0A=
	var currentFeature =3D 0;=0A=
=0A=
	function showFeature( n ) {=0A=
		$(divList[currentFeature]).hide();=0A=
		$(liList[currentFeature].select( 'div' )[0]).setAttribute( 'class', '' =
);=0A=
		currentFeature =3D n >=3D liList.length ? 0 : n;=0A=
		$(liList[currentFeature].select( 'div' )[0]).setAttribute( 'class', =
'Selected' );=0A=
		$(divList[currentFeature]).show();=0A=
	}=0A=
=0A=
	this.selectFeature =3D function( n ) {=0A=
		currentTicks =3D 0;=0A=
		// if they click the same feature again, just return=0A=
		if( n =3D=3D currentFeature ) {=0A=
			return;=0A=
		}=0A=
		// show the one they want=0A=
		showFeature( n );=0A=
	};=0A=
=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/RolloverFour.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/oas.js --- */=0A=
=0A=
OAS_version =3D 10;=0A=
OAS_rn =3D '001234567890';=0A=
OAS_rns =3D '1234567890';=0A=
OAS_rn =3D new String (Math.random());=0A=
OAS_rns =3D OAS_rn.substring (2, 11);=0A=
=0A=
function OAS_NORMAL(pos) {=0A=
  document.write('<A HREF=3D"' + OAS_url + 'click_nx.ads/' + =
OAS_sitepage + '/1' + OAS_rns + '@' + OAS_listpos + '!' + pos + '?' + =
OAS_query + '" TARGET=3D' + OAS_target + '>');=0A=
  document.write('<IMG SRC=3D"' + OAS_url + 'adstream_nx.ads/' + =
OAS_sitepage + '/1' + OAS_rns + '@' + OAS_listpos + '!' + pos + '?' + =
OAS_query + '" BORDER=3D0></A>');=0A=
}=0A=
=0A=
OAS_version =3D 11;=0A=
if ((navigator.userAgent.indexOf('Mozilla/3') !=3D -1) || =
(navigator.userAgent.indexOf('Mozilla/4.0 WebTV') !=3D -1))=0A=
  OAS_version =3D 10;=0A=
if (OAS_version >=3D 11)=0A=
  document.write('<SCR' + 'IPT LANGUAGE=3DJavaScript1.1 SRC=3D"' + =
OAS_url + 'adstream_mjx.ads/' + OAS_sitepage + '/1' + OAS_rns + '@' + =
OAS_listpos + '?' + OAS_query + '"><\/SCRIPT>');//-->=0A=
=0A=
function OAS_AD(pos) {=0A=
if (OAS_version >=3D 11)=0A=
//  if(false)=0A=
    OAS_RICH(pos);=0A=
  else=0A=
    OAS_NORMAL(pos);=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/oas.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/VVVisual.js --- */=0A=
=0A=
/*=0A=
 *  VVVisual.js - Effects that are visible to the user=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 */=0A=
=0A=
function VVVisual() {=0A=
=0A=
}=0A=
//-----------------------------------------------------------------------=
------=0A=
/*=0A=
 * PhotoRotator class=0A=
 */=0A=
//-----------------------------------------------------------------------=
------=0A=
function PhotoRotator(parentId)=0A=
{=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    * Class methods=0A=
    */=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Add a photo to the list of photos to rotate=0A=
    **=0A=
    ** @param photo - url of photo=0A=
    ** @return void=0A=
    */=0A=
    this.addPhoto =3D function(photo)=0A=
    {=0A=
        var div =3D document.createElement('div');=0A=
        var img =3D document.createElement('img');=0A=
        img.className =3D 'PhotoRotatorImage';=0A=
        img.src =3D photo;=0A=
        if(this.index !=3D this.photos.length)=0A=
        {=0A=
            div.style.display =3D 'none';=0A=
        }=0A=
        div.appendChild(img);=0A=
        this.parentElement.appendChild(div);=0A=
        this.photos.push(div);=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Set the interval between photos=0A=
    **=0A=
    ** @param interval - interval between photos in seconds=0A=
    ** @return void=0A=
    */=0A=
    this.setInterval =3D function(interval)=0A=
    {=0A=
        if(interval)=0A=
        {=0A=
            this.intervalTime =3D interval;=0A=
        }=0A=
        if(this.interval)=0A=
        {=0A=
            clearInterval(this.interval);=0A=
            this.interval =3D setInterval(this.next,this.intervalTime * =
1000);=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Toggle play/pause mode=0A=
    **=0A=
    ** @return void=0A=
    */=0A=
    this.playPause =3D function()=0A=
    {=0A=
        if(this.interval)=0A=
        {=0A=
            this.pause();=0A=
        }=0A=
        else=0A=
        {=0A=
            this.play();=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Start rotating=0A=
    **=0A=
    ** @return void=0A=
    */=0A=
    this.play =3D function()=0A=
    {=0A=
        if(this.interval =3D=3D null)=0A=
        {=0A=
            var rotatorRefPlay =3D this;=0A=
            this.interval =3D setInterval(function()=0A=
                                        {=0A=
                                            rotatorRefPlay.next();=0A=
                                        }=0A=
                                        ,this.intervalTime * 1000);=0A=
            this.controls.src =3D '/img/play_controls.gif';=0A=
            this.showControls();=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Stop rotating=0A=
    **=0A=
    ** @return void=0A=
    */=0A=
    this.pause =3D function()=0A=
    {=0A=
        if(this.interval)=0A=
        {=0A=
            clearInterval(this.interval);=0A=
            this.interval =3D null;=0A=
            this.controls.src =3D '/img/play_controls_paused.gif';=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Show the next photo=0A=
    **=0A=
    ** @return void=0A=
    */=0A=
    this.next =3D function()=0A=
    {=0A=
        this.index++;=0A=
        if(this.index >=3D this.photos.length)=0A=
        {=0A=
            this.index =3D 0;=0A=
        }=0A=
        if(this.photos.length > 0)=0A=
        {=0A=
            var i =3D null;=0A=
            for(i =3D 0; i < this.photos.length; i++)=0A=
            {=0A=
                //this.photos[i].hide();=0A=
                this.photos[i].style.display =3D 'none';=0A=
            }=0A=
            if(this.transitionType !=3D '')=0A=
            {=0A=
                this.hideControls();=0A=
                new =
Effect.toggle(this.photos[this.index],this.transitionType,this.transition=
Options);=0A=
                var rotatorRefNext =3D this;=0A=
                setTimeout(function()=0A=
                           {=0A=
                                rotatorRefNext.showControls();=0A=
                           }=0A=
                           , this.transitionOptions.duration * 1000);=0A=
            }=0A=
            else=0A=
            {=0A=
                //this.photos[this.index].show();=0A=
                this.photos[this.index].style.display =3D '';=0A=
            }=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Show the previous photo=0A=
    **=0A=
    ** @return void=0A=
    */=0A=
    this.previous =3D function()=0A=
    {=0A=
        this.index--;=0A=
        if(this.index < 0)=0A=
        {=0A=
            this.index =3D this.photos.length - 1;=0A=
        }=0A=
        if(this.photos.length > 0)=0A=
        {=0A=
            var i =3D null;=0A=
            for(i =3D 0; i < this.photos.length; i++)=0A=
            {=0A=
                //this.photos[i].hide();=0A=
                this.photos[i].style.display =3D 'none';=0A=
            }=0A=
            if(this.transitionType !=3D '')=0A=
            {=0A=
                this.hideControls();=0A=
                new =
Effect.toggle(this.photos[this.index],this.transitionType,this.transition=
Options);=0A=
                var rotatorRefPrev =3D this;=0A=
                setTimeout(function()=0A=
                           {=0A=
                                rotatorRefPrev.showControls();=0A=
                           }=0A=
                           , this.transitionOptions.duration * 1000);=0A=
            }=0A=
            else=0A=
            {=0A=
                //this.photos[this.index].show();=0A=
                this.photos[this.index].style.display =3D '';=0A=
            }=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Set the type of transition to use=0A=
    **=0A=
    ** @param type - type of transition, possible values: =
'','appear','slide','blind'=0A=
    ** @return void=0A=
    */=0A=
    this.setTransitionType =3D function(type)=0A=
    {=0A=
        switch(type.toLowerCase())=0A=
        {=0A=
            case 'appear':=0A=
                this.transitionType =3D 'appear';=0A=
                break;=0A=
            case 'slide':=0A=
                this.transitionType =3D 'slide';=0A=
                break;=0A=
            case 'blind':=0A=
                this.transitionType =3D 'blind';=0A=
                break;=0A=
        };=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Set the duration of the transition=0A=
    **=0A=
    ** @param duration - duration of transition in seconds=0A=
    ** @return void=0A=
    */=0A=
    this.setTransitionDuration =3D function(duration)=0A=
    {=0A=
        this.transitionOptions.duration =3D duration;=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Show the controls=0A=
    **=0A=
    ** @return void=0A=
    */=0A=
    this.showControls =3D function()=0A=
    {=0A=
        this.controls.style.left =3D (this.parentElement.offsetWidth - =
40) + 'px';=0A=
        this.controls.style.top =3D (this.parentElement.offsetHeight - =
5) + 'px';=0A=
        this.controls.style.visibility =3D 'visible';=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Hide the controls=0A=
    **=0A=
    ** @return void=0A=
    */=0A=
    this.hideControls =3D function()=0A=
    {=0A=
        this.controls.style.visibility =3D 'hidden';=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    * Class constructor code=0A=
    */=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    // Get the element to attach to=0A=
    this.parentElement =3D document.getElementById(parentId);=0A=
    var rotatorRef =3D this;=0A=
    // Create the controls=0A=
    this.controls =3D document.createElement('img');=0A=
    this.controls.className =3D 'PhotoRotatorControls';=0A=
    this.controls.src =3D '/img/play_controls.gif';=0A=
    this.controls.border =3D 0;=0A=
    //z-index: 1; position: relative; margin-left: -40px; margin-bottom: =
5px;=0A=
    this.controls.style.zIndex =3D 100;=0A=
    this.controls.style.position =3D 'relative';=0A=
    this.controls.style.left =3D (this.parentElement.offsetWidth - 40) + =
'px';=0A=
    //alert(this.controls.style.left);=0A=
    this.controls.style.top =3D (this.parentElement.offsetHeight - 5) + =
'px';=0A=
    //alert(this.controls.style.top);=0A=
    this.controls.useMap =3D '#playControlsMap';=0A=
    this.parentElement.appendChild(this.controls);=0A=
    // Create the image map for the controls=0A=
    if(navigator.appName =3D=3D 'Microsoft Internet Explorer')=0A=
    {=0A=
        // This is STUPID but only thing that works in IE, otherwise IE =
wasn't 'linking' the map properly=0A=
        this.controlMap =3D document.createElement("<map =
name=3D\"playControlsMap\">");=0A=
    }=0A=
    else=0A=
    {=0A=
        this.controlMap =3D document.createElement('map');=0A=
        this.controlMap.name =3D 'playControlsMap';=0A=
    }=0A=
    this.controlMapAreas =3D new Array();=0A=
    this.controlMapAreas[0] =3D document.createElement('area');=0A=
    this.controlMapAreas[0].onclick =3D function(){rotatorRef.pause(); =
rotatorRef.previous();}=0A=
    this.controlMapAreas[0].coords =3D '0,0,8,13';=0A=
    this.controlMapAreas[0].shape =3D 'rect';=0A=
    this.controlMap.appendChild(this.controlMapAreas[0]);=0A=
    this.controlMapAreas[1] =3D document.createElement('area');=0A=
    this.controlMapAreas[1].onclick =3D =
function(){rotatorRef.playPause();}=0A=
    this.controlMapAreas[1].coords =3D '11,0,23,13';=0A=
    this.controlMapAreas[1].shape =3D 'rect';=0A=
    this.controlMap.appendChild(this.controlMapAreas[1]);=0A=
    this.controlMapAreas[2] =3D document.createElement('area');=0A=
    this.controlMapAreas[2].onclick =3D function(){rotatorRef.pause(); =
rotatorRef.next();}=0A=
    this.controlMapAreas[2].coords =3D '26,0,34,13';=0A=
    this.controlMapAreas[2].shape =3D 'rect';=0A=
    this.controlMap.appendChild(this.controlMapAreas[2]);=0A=
    this.parentElement.appendChild(this.controlMap);=0A=
    // Array of photos to rotate=0A=
    this.photos =3D new Array();=0A=
    // Default time for interval=0A=
    this.intervalTime =3D 3;=0A=
    this.interval =3D null;=0A=
    this.index =3D 0;=0A=
    this.transitionType =3D 'appear';=0A=
    this.transitionOptions =3D new Object;=0A=
    this.transitionOptions.duration =3D 2;=0A=
}=0A=
//-----------------------------------------------------------------------=
------=0A=
/*=0A=
 * Tab control class=0A=
 */=0A=
//-----------------------------------------------------------------------=
------=0A=
function TabSet(parentId)=0A=
{=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Constructor code=0A=
    */=0A=
    this.tabs =3D new Array();=0A=
    this.parentElement =3D document.getElementById(parentId);=0A=
    this.tabSet =3D document.createElement('ul');=0A=
    this.tabSet.className =3D 'tabs';=0A=
    this.parentElement.appendChild(this.tabSet);=0A=
    this.activeIndex =3D null;=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Add a tab to the tabset=0A=
    **=0A=
    ** @param tabName - Name of tab=0A=
    ** @param contentId - Id of element to show/hide on click of tab=0A=
    ** @param active - Make this tab active immediately=0A=
    */=0A=
    this.addTab =3D function(tabName, contentId, active)=0A=
    {=0A=
        var tab =3D document.createElement('li');=0A=
        tab.innerHTML =3D tabName;=0A=
        tab.contentBodyElementId =3D contentId;=0A=
        tab.tabSet =3D this;=0A=
        tab.index =3D this.tabs.length;=0A=
        tab.classExtra =3D contentId;=0A=
        this.tabSet.appendChild(tab);=0A=
        this.tabs.push(tab);=0A=
        if(active)=0A=
        {=0A=
            tab.className =3D 'tab active ' + tab.classExtra;=0A=
        }=0A=
        else=0A=
        {=0A=
            tab.className =3D 'tab inactive ' + tab.classExtra;=0A=
        }=0A=
        tab.onclick =3D function()=0A=
        {=0A=
            var tabSet =3D tab.tabSet;=0A=
            for(i =3D 0; i < tabSet.tabs.length; i++)=0A=
            {=0A=
=0A=
                var contentBody =3D =
document.getElementById(tabSet.tabs[i].contentBodyElementId);=0A=
                if(tab !=3D tabSet.tabs[i])=0A=
                {=0A=
                    tabSet.tabs[i].className =3D 'tab inactive ' + =
tabSet.tabs[i].classExtra;=0A=
                    //contentBody.hide();=0A=
                    contentBody.style.display =3D 'none';=0A=
                }=0A=
                else=0A=
                {=0A=
                    tabSet.tabs[i].className =3D 'tab active ' + =
tabSet.tabs[i].classExtra;=0A=
                    //contentBody.show();=0A=
                    contentBody.style.display =3D '';=0A=
                }=0A=
            }=0A=
            if(tabSet.activeIndex !=3D null)=0A=
            {=0A=
                tabSet.orderTabs(tab.index);=0A=
            }=0A=
        }=0A=
    }=0A=
=0A=
    this.activateTab =3D function(tabName)=0A=
    {=0A=
        var index =3D 0;=0A=
        for(i =3D 0; i < this.tabs.length; i++)=0A=
        {=0A=
            var contentBody =3D =
document.getElementById(this.tabs[i].contentBodyElementId);=0A=
            if(this.tabs[i].innerHTML =3D=3D tabName)=0A=
            {=0A=
                this.tabs[i].className =3D 'tab active ' + =
this.tabs[i].classExtra;=0A=
                contentBody.style.display =3D '';=0A=
                index =3D i;=0A=
            }=0A=
            else=0A=
            {=0A=
                this.tabs[i].className =3D 'tab inactive '  + =
this.tabs[i].classExtra;=0A=
                contentBody.style.display =3D 'none';=0A=
            }=0A=
=0A=
        }=0A=
        if(this.activeIndex !=3D null)=0A=
        {=0A=
            this.orderTabs(index);=0A=
        }=0A=
    }=0A=
=0A=
    this.setActiveIndex =3D function(activeIndex)=0A=
    {=0A=
        this.activeIndex =3D activeIndex;=0A=
        var index =3D 0;=0A=
        for(i =3D 0; i < this.tabs.length; i++)=0A=
        {=0A=
            if(this.tabs[i].className =3D=3D 'tab active ' + =
this.tabs[i].classExtra)=0A=
            {=0A=
                index =3D i;=0A=
                break;=0A=
            }=0A=
        }=0A=
        this.orderTabs(index);=0A=
    }=0A=
=0A=
    this.orderTabs =3D function(startIndex)=0A=
    {=0A=
        if(this.activeIndex !=3D null)=0A=
        {=0A=
            for(i =3D 0; i < this.tabs.length; i++)=0A=
            {=0A=
                this.tabSet.removeChild(this.tabs[i]);=0A=
            }=0A=
            var index =3D this.activeIndex + startIndex >=3D =
this.tabs.length ? this.activeIndex + startIndex - this.tabs.length : =
this.activeIndex + startIndex;=0A=
            for(i =3D 0; i < this.tabs.length; i++)=0A=
            {=0A=
                this.tabSet.appendChild(this.tabs[index]);=0A=
                index =3D index + 1 >=3D this.tabs.length ? 0 : index + =
1;=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=
//-----------------------------------------------------------------------=
------=0A=
/*=0A=
*   Calendar widget class=0A=
*/=0A=
//-----------------------------------------------------------------------=
------=0A=
function Calendar(parentId)=0A=
{=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** Constructor code=0A=
    */=0A=
    this.parentElement =3D document.getElementById(parentId);=0A=
    this.allowPastClick =3D true;=0A=
    this.showClose =3D false;=0A=
    var today =3D new Date();=0A=
    this.month =3D today.getMonth();=0A=
    this.year =3D today.getFullYear();=0A=
    this.monthNamesLong =3D new =
Array('January','February','March','April','May','June','July','August','=
September','October','November','December');=0A=
    this.monthNamesShort =3D new =
Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Oct','Sep','Nov','=
Dec');=0A=
    this.weekDayNamesLong =3D new =
Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');=0A=
    this.weekDayNamesShort =3D new Array('S','M','T','W','T','F','S');=0A=
=0A=
    // create the table used to represent the calander (9 rows x 7 =
columns : 1 column in first row 3 columns in second row)=0A=
    this.table =3D document.createElement('table');=0A=
    this.table.className =3D 'popupCalendar';=0A=
    this.table.border =3D 0;=0A=
    this.table.cellSpacing =3D 0;=0A=
    this.table.cellPadding =3D 0;=0A=
    for(i =3D 0; i < 9; i++)=0A=
    {=0A=
        var row =3D this.table.insertRow(-1);=0A=
        if(i =3D=3D 0)=0A=
        {=0A=
            var cell =3D row.insertCell(-1);=0A=
            cell.colSpan =3D '7';=0A=
            cell.style.textAlign =3D 'center';=0A=
            cell.className =3D 'year';=0A=
        }=0A=
        else if(i =3D=3D 1)=0A=
        {=0A=
            var cell =3D row.insertCell(-1);=0A=
            var self =3D this;=0A=
            cell.innerHTML =3D "&lt;&lt;";=0A=
            cell.className =3D "prevnext";=0A=
            cell.onclick =3D function()=0A=
            {=0A=
                self.prevMonth();=0A=
            }=0A=
            cell.style.cursor =3D 'pointer';=0A=
            cell.style.textAlign =3D 'center';=0A=
            cell =3D row.insertCell(-1);=0A=
            cell.colSpan =3D '5';=0A=
            cell.innerHTML =3D "";=0A=
            cell.style.textAlign =3D 'center';=0A=
            cell =3D row.insertCell(-1);=0A=
            cell.innerHTML =3D "&gt;&gt;";=0A=
            cell.className =3D "prevnext";=0A=
            cell.onclick =3D function()=0A=
            {=0A=
                self.nextMonth();=0A=
            }=0A=
            cell.style.cursor =3D 'pointer';=0A=
            cell.style.textAlign =3D 'center';=0A=
=0A=
        }=0A=
        else=0A=
        {=0A=
            for(j =3D 0; j < 7; j++)=0A=
            {=0A=
                var cell =3D row.insertCell(-1);=0A=
                cell.style.textAlign =3D 'center';=0A=
                if(i =3D=3D 2)=0A=
                {=0A=
                    cell.innerHTML =3D this.weekDayNamesShort[j];=0A=
                    cell.className =3D 'weekday';=0A=
                    cell.dayOfWeek =3D j;=0A=
                    cell.onclick =3D function()=0A=
                    {=0A=
                        self.clickDay(this.dayOfWeek);=0A=
                    }=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
    =
this.parentElement.insertBefore(this.table,this.parentElement.firstChild)=
;=0A=
=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** allow/disallow clicking on 'past' dates=0A=
    **=0A=
    ** @param boolean value=0A=
    */=0A=
    this.allowPastDates =3D function(value)=0A=
    {=0A=
        this.allowPastClick =3D value;=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** set the current month=0A=
    **=0A=
    ** @param integer month=0A=
    */=0A=
    this.setMonth =3D function(month)=0A=
    {=0A=
        if(month >=3D 1 && month <=3D 12)=0A=
        {=0A=
            this.month =3D month - 1;=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** show the close button=0A=
    */=0A=
    this.allowClose =3D function(value)=0A=
    {=0A=
        this.showClose =3D value;=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** set the current year=0A=
    **=0A=
    ** @param integer year=0A=
    */=0A=
    this.setYear =3D function(year)=0A=
    {=0A=
        if(year.length =3D=3D 4 && !isNaN(year))=0A=
        {=0A=
            this.year =3D year;=0A=
        }=0A=
        else if(year.length =3D=3D 2 && !isNaN(year))=0A=
        {=0A=
            this.year =3D '20' + year;=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** increment the month=0A=
    **=0A=
    */=0A=
    this.nextMonth =3D function()=0A=
    {=0A=
        if(this.month =3D=3D 11)=0A=
        {=0A=
            this.month =3D 0;=0A=
            this.year++;=0A=
        }=0A=
        else=0A=
        {=0A=
            this.month++;=0A=
        }=0A=
        this.load();=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** decrement the month=0A=
    **=0A=
    */=0A=
    this.prevMonth =3D function()=0A=
    {=0A=
        if(this.month =3D=3D 0)=0A=
        {=0A=
            this.month =3D 11;=0A=
            this.year--;=0A=
        }=0A=
        else=0A=
        {=0A=
            this.month--;=0A=
        }=0A=
        this.load();=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** called when a date is clicked, if onDateClick is set that will be =
called=0A=
    **=0A=
    */=0A=
    this.clickDate =3D function(day)=0A=
    {=0A=
        var date =3D new Date;=0A=
        date.setDate(day);=0A=
        date.setMonth(this.month);=0A=
        date.setFullYear(this.year);=0A=
        if(this.onDateClick)=0A=
        {=0A=
            this.onDateClick(date);=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** called when a week day is clicked, if onDayClick is set that will =
be called=0A=
    **=0A=
    */=0A=
    this.clickDay =3D function(day)=0A=
    {=0A=
        if(this.onDayClick)=0A=
        {=0A=
            this.onDayClick(day);=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** hide the calendar=0A=
    **=0A=
    */=0A=
    this.hide =3D function()=0A=
    {=0A=
        this.parentElement.style.display =3D 'none';=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** show the calendar=0A=
    **=0A=
    */=0A=
    this.show =3D function()=0A=
    {=0A=
        this.parentElement.style.display =3D '';=0A=
        this.load();=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** toggle visible state of calendar=0A=
    **=0A=
    */=0A=
    this.toggle =3D function()=0A=
    {=0A=
        if(this.isVisible())=0A=
        {=0A=
            this.hide();=0A=
        }=0A=
        else=0A=
        {=0A=
            this.show();=0A=
        }=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** check if calendar is visibile=0A=
    **=0A=
    */=0A=
    this.isVisible =3D function()=0A=
    {=0A=
        return this.parentElement.style.display !=3D 'none';=0A=
    }=0A=
    =
//-----------------------------------------------------------------------=
--=0A=
    /*=0A=
    ** load/initialize the calendar (code that generates the table for =
the month)=0A=
    **=0A=
    */=0A=
    this.load =3D function()=0A=
    {=0A=
        var today =3D new Date();=0A=
        today.setHours(0);=0A=
        today.setMinutes(0);=0A=
        today.setSeconds(0);=0A=
        today.setMilliseconds(0);=0A=
        var date =3D new Date(this.monthNamesLong[this.month] + ' 1 ' + =
this.year);=0A=
        var dayOfWeek =3D date.getDay();=0A=
        var self =3D this;=0A=
        var k =3D 1;=0A=
        this.table.rows[0].cells[0].innerHTML =3D date.getFullYear();=0A=
        this.table.rows[0].cells[0].onclick =3D function()=0A=
        {=0A=
            this.innerHTML =3D '';=0A=
            var text =3D document.createElement('input');=0A=
            this.onclick =3D null;=0A=
            text.type =3D 'text';=0A=
            text.value =3D self.year;=0A=
            text.size =3D 4;=0A=
            text.maxLength =3D 4;=0A=
            this.appendChild(text);=0A=
            text.focus();=0A=
            text.onkeypress =3D function(key)=0A=
            {=0A=
                if(!key)=0A=
                {=0A=
                    key =3D window.event;=0A=
                }=0A=
                if(key.keyCode =3D=3D 13 && this.value.length =3D=3D 4)=0A=
                {=0A=
                    if(!isNaN(this.value))=0A=
                    {=0A=
                        self.year =3D this.value;=0A=
                    }=0A=
                    this.parentNode.removeChild(this);=0A=
                    self.load();=0A=
                }=0A=
            }=0A=
            text.onblur =3D function()=0A=
            {=0A=
                this.parentNode.removeChild(this);=0A=
                self.load();=0A=
            }=0A=
        }=0A=
        if(this.showClose)=0A=
        {=0A=
            var close =3D document.createElement('img');=0A=
            close.src =3D '/img/close-grey.gif';=0A=
            close.alt =3D 'close';=0A=
            close.title =3D 'close';=0A=
            close.style.position =3D 'absolute';=0A=
            close.style.top =3D '2px';=0A=
            close.style.left =3D this.table.offsetWidth - 17 + 'px';=0A=
            close.style.width =3D 15 + 'px';=0A=
            close.style.height =3D 15 + 'px';=0A=
            close.onclick =3D function()=0A=
            {=0A=
                self.hide();=0A=
            }=0A=
            this.table.rows[0].cells[0].appendChild(close);=0A=
        }=0A=
        this.table.rows[1].cells[1].innerHTML =3D =
this.monthNamesLong[date.getMonth()];=0A=
        this.table.rows[1].cells[1].onclick =3D function()=0A=
        {=0A=
            this.onclick =3D null;=0A=
            this.innerHTML =3D "";=0A=
            var dropdown =3D document.createElement('select');=0A=
            for(i =3D 0; i < 12; i++)=0A=
            {=0A=
                var option =3D document.createElement('option');=0A=
                option.value =3D i;=0A=
                option.innerHTML =3D self.monthNamesLong[i];=0A=
                if(navigator.appName =3D=3D "Microsoft Internet =
Explorer")=0A=
                {=0A=
                    dropdown.appendChild(option); // IE only=0A=
                }=0A=
                else=0A=
                {=0A=
                    dropdown.add(option,null); // standards compliant=0A=
                }=0A=
                if(i =3D=3D self.month)=0A=
                {=0A=
                    dropdown.selectedIndex =3D i;=0A=
                }=0A=
            }=0A=
            dropdown.onchange =3D function()=0A=
            {=0A=
                this.parentNode.removeChild(this);=0A=
                self.month =3D this.value;=0A=
                self.load();=0A=
            }=0A=
            dropdown.onblur =3D function()=0A=
            {=0A=
                this.parentNode.removeChild(this);=0A=
                self.load();=0A=
            }=0A=
            this.appendChild(dropdown);=0A=
            dropdown.focus();=0A=
        }=0A=
        for(i =3D 3; i < 9; i++)=0A=
        {=0A=
            for(j =3D 0; j < 7; j++)=0A=
            {=0A=
                date.setDate(k);=0A=
                if((i =3D=3D 3 && j >=3D dayOfWeek) || (i !=3D 3 && =
date.getDate() =3D=3D k && date.getMonth() =3D=3D this.month))=0A=
                {=0A=
                    this.table.rows[i].cells[j].innerHTML =3D k;=0A=
                    this.table.rows[i].cells[j].className =3D 'past';=0A=
                    this.table.rows[i].cells[j].dayOfMonth =3D k;=0A=
                    if(this.allowPastClick || date >=3D today)=0A=
                    {=0A=
                        if(date.getTime() =3D=3D today.getTime())=0A=
                        {=0A=
                            this.table.rows[i].cells[j].className =3D =
'today';=0A=
                        }=0A=
                        else=0A=
                        {=0A=
                            this.table.rows[i].cells[j].className =3D '';=0A=
                        }=0A=
                        this.table.rows[i].cells[j].onclick =3D =
function()=0A=
                        {=0A=
                            self.clickDate(this.dayOfMonth);=0A=
                        }=0A=
                    }=0A=
                    else=0A=
                    {=0A=
                        this.table.rows[i].cells[j].onclick =3D null;=0A=
                    }=0A=
                    k++;=0A=
                }=0A=
                else=0A=
                {=0A=
                    this.table.rows[i].cells[j].innerHTML =3D "";=0A=
                    this.table.rows[i].cells[j].className =3D 'empty';=0A=
                    this.table.rows[i].cells[j].onclick =3D null;=0A=
                    this.table.rows[i].cells[j].dayOfMonth =3D null;=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=
//-----------------------------------------------------------------------=
------=0A=
//-----------------------------------------------------------------------=
------=0A=
function KeywordHighlighter(contentBodyId, className)=0A=
{=0A=
    this.highlightClass =3D className;=0A=
    this.contentBodyId =3D contentBodyId;=0A=
=0A=
    this.highlight =3D function(keywordsArray)=0A=
    {=0A=
        var bodyDiv =3D null;=0A=
        if(this.contentBodyId)=0A=
        {=0A=
            bodyDiv =3D document.getElementById(this.contentBodyId);=0A=
        }=0A=
        else=0A=
        {=0A=
            bodyDiv =3D document.body;=0A=
        }=0A=
        for(i =3D 0; i < keywordsArray.length; i++)=0A=
        {=0A=
            if(keywordsArray[i].length > 1)=0A=
            {=0A=
                this.walkReplace(bodyDiv.firstChild,keywordsArray[i]);=0A=
            }=0A=
        }=0A=
    }=0A=
=0A=
    this.highlightReferer =3D function()=0A=
    {=0A=
        var referrer =3D unescape(document.referrer);=0A=
        var idx =3D referrer.indexOf('keywords=3D');=0A=
        if(idx >=3D 0)=0A=
        {=0A=
            var keywords =3D null;=0A=
            var endIdx =3D referrer.indexOf('&',idx);=0A=
            if(endIdx >=3D 0)=0A=
            {=0A=
                keywords =3D referrer.substr(idx + 9,endIdx - idx - 9);=0A=
            }=0A=
            else=0A=
            {=0A=
                keywords =3D referrer.substr(idx + 9);=0A=
            }=0A=
            // Strip off surrounding quotes=0A=
            if(keywords.indexOf('"') =3D=3D 0 && =
keywords.lastIndexOf('"') =3D=3D keywords.length - 1)=0A=
            {=0A=
                keywords =3D keywords.substr(1,keywords.length - 2);=0A=
            }=0A=
            var keywordsArray =3D keywords.split("+");=0A=
            this.highlight(keywordsArray);=0A=
        }=0A=
    }=0A=
=0A=
    this.walkReplace =3D function(node,search)=0A=
    {=0A=
        var k =3D 0;=0A=
        while(node && k < 1000)=0A=
        {=0A=
            if(node.childNodes.length > 0)=0A=
            {=0A=
                this.walkReplace(node.firstChild,search);=0A=
            }=0A=
            else=0A=
            {=0A=
                var regex =3D  new RegExp('\\b' + search + '\\b', 'gi');=0A=
                if(node.nodeType =3D=3D 3)=0A=
                {=0A=
                    var match =3D regex.exec(node.data);=0A=
                    if(match)=0A=
                    {=0A=
                        var val =3D match[0];=0A=
                        var k =3D '';=0A=
                        var node2 =3D node.splitText(match.index);=0A=
                        var node3 =3D node2.splitText(val.length);=0A=
                        var span =3D =
node.ownerDocument.createElement('SPAN');=0A=
                        node.parentNode.replaceChild(span, node2);=0A=
                        span.className =3D this.highlightClass;=0A=
                        span.appendChild(node2);=0A=
                        node =3D span;=0A=
                    }=0A=
                }=0A=
            }=0A=
            node =3D node.nextSibling;=0A=
            k++;=0A=
        }=0A=
    }=0A=
}=0A=
//-----------------------------------------------------------------------=
------=0A=
function locationMap(elementId,centerLatitude,centerLongitude,zoom)=0A=
{=0A=
    this.mapElementId =3D elementId;=0A=
    this.resultsElementId =3D null;=0A=
    this.map =3D null;=0A=
    this.showPages =3D 5;=0A=
    if(GBrowserIsCompatible())=0A=
    {=0A=
        this.map =3D new =
GMap2(document.getElementById(this.mapElementId));=0A=
        this.map.addControl(new GSmallMapControl());=0A=
        this.map.addControl(new GOverviewMapControl());=0A=
        if(centerLatitude && centerLongitude)=0A=
        {=0A=
            this.map.setCenter(new =
GLatLng(centerLatitude,centerLongitude),zoom);=0A=
        }=0A=
    }=0A=
=0A=
    this.createPages =3D function(total,pageSize,currentPage,params)=0A=
    {=0A=
        if(this.resultsElementId)=0A=
        {=0A=
            var resultsDiv =3D =
document.getElementById(this.resultsElementId);=0A=
            if(resultsDiv)=0A=
            {=0A=
                var pagesDiv =3D document.createElement('div');=0A=
                var totalDiv =3D document.createElement('div');=0A=
                totalDiv.className =3D '';=0A=
                pagesDiv.className =3D 'pagination';=0A=
                resultsDiv.appendChild(totalDiv);=0A=
                resultsDiv.appendChild(pagesDiv);=0A=
                var start =3D ((currentPage - 1) * pageSize) + 1;=0A=
                var end =3D start + pageSize > total ? total : =
currentPage * pageSize;=0A=
                totalDiv.innerHTML =3D start + '-' + end + ' of ' + =
total + ' results';=0A=
                var paramString =3D "";=0A=
                for(property in params)=0A=
                {=0A=
                    if(property !=3D 'page')=0A=
                    {=0A=
                        if(paramString !=3D "")=0A=
                        {=0A=
                            paramString +=3D "&";=0A=
                        }=0A=
                        paramString +=3D property + "=3D" + =
params[property];=0A=
                    }=0A=
                }=0A=
                var pages =3D Math.round(total / pageSize);=0A=
                var page =3D 1;=0A=
                if(currentPage !=3D 1)=0A=
                {=0A=
                    if(currentPage - 2 >=3D 1)=0A=
                    {=0A=
                        page =3D currentPage - 2;=0A=
                    }=0A=
                    else=0A=
                    {=0A=
                        page =3D 1;=0A=
                    }=0A=
                    if(page + this.showPages > pages)=0A=
                    {=0A=
                        page =3D pages - this.showPages;=0A=
                    }=0A=
                }=0A=
                if(currentPage > 1)=0A=
                {=0A=
                    var pageSpan =3D document.createElement('span');=0A=
                    pageSpan.className =3D 'page';=0A=
                    pageSpan.innerHTML =3D "<a href=3D'?" + paramString =
+ "&page=3D1'>&lt;&lt;</a>";=0A=
                    pagesDiv.appendChild(pageSpan);=0A=
                    var pageSpan =3D document.createElement('span');=0A=
                    pageSpan.className =3D 'page';=0A=
                    pageSpan.innerHTML =3D "<a href=3D'?" + paramString =
+ "&page=3D" + (currentPage - 1) + "'>&lt;</a>";=0A=
                    pagesDiv.appendChild(pageSpan);=0A=
                }=0A=
                for(i =3D 0; i < this.showPages; i++)=0A=
                {=0A=
                    if(page >=3D pages)=0A=
                    {=0A=
                        break;=0A=
                    }=0A=
                    var pageSpan =3D document.createElement('span');=0A=
                    pageSpan.className =3D 'page';=0A=
                    if(page =3D=3D currentPage)=0A=
                    {=0A=
                        pageSpan.innerHTML =3D '[' + page + ']';=0A=
                    }=0A=
                    else=0A=
                    {=0A=
                        pageSpan.innerHTML =3D "<a href=3D'?" + =
paramString + "&page=3D" + page + "'>" + page + "</a>";=0A=
                    }=0A=
                    pagesDiv.appendChild(pageSpan);=0A=
                    page++;=0A=
                }=0A=
                if(currentPage < pages)=0A=
                {=0A=
                    var pageSpan =3D document.createElement('span');=0A=
                    pageSpan.className =3D 'page';=0A=
                    pageSpan.innerHTML =3D "<a href=3D'?" + paramString =
+ "&page=3D" + (currentPage + 1) + "'>&gt;</a>";=0A=
                    pagesDiv.appendChild(pageSpan);=0A=
                    var pageSpan =3D document.createElement('span');=0A=
                    pageSpan.className =3D 'page';=0A=
                    pageSpan.innerHTML =3D "<a href=3D'?" + paramString =
+ "&page=3D" + pages + "'>&gt;&gt;</a>";=0A=
                    pagesDiv.appendChild(pageSpan);=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
=0A=
    /*=0A=
    ** Send an ajax request for locations=0A=
    */=0A=
    this.sendRequest =3D function(url)=0A=
    {=0A=
        var mapObject =3D this;=0A=
        new Ajax.Request(url,=0A=
        {=0A=
            method:'get',=0A=
            onSuccess: function(transport,json)=0A=
            {=0A=
                if(json)=0A=
                {=0A=
                    if(json.status =3D=3D 'OK')=0A=
                    {=0A=
                        =
mapObject.createPages(json.result.total,json.result.pageSize,json.params.=
page,json.params);=0A=
                        for(i =3D 0; i < json.result.locations.length; =
i++)=0A=
                        {=0A=
                            var location =3D json.result.locations[i];=0A=
                            =
mapObject.addLocation(location.Location.Latitude,=0A=
                                            location.Location.Longitude,=0A=
                                            location.Location.Name,=0A=
                                            '/locations/view/' + =
location.Location.objid,=0A=
                                            =
location.Location.LocationImage,=0A=
                                            location.Location.Address,=0A=
                                            location.Location.City.Name,=0A=
                                            location.Location.City.State,=0A=
                                            location.Location.ZipCode,=0A=
                                            location.Location.Phone,=0A=
                                            location.Location.Awards);=0A=
                        }=0A=
                    }=0A=
                    else=0A=
                    {=0A=
                        alert(json.message);=0A=
                    }=0A=
                }=0A=
            }=0A=
            ,=0A=
            onFailure: function()=0A=
            {=0A=
                alert('Something went wrong...');=0A=
            }=0A=
        }=0A=
    );=0A=
    }=0A=
=0A=
    /*=0A=
    ** Set the element for a result list to be written into=0A=
    **=0A=
    ** @param string elementId - id of the element=0A=
    */=0A=
    this.setResultsElement =3D function(elementId)=0A=
    {=0A=
        this.resultsElementId =3D elementId;=0A=
    }=0A=
=0A=
    /*=0A=
    ** Add a location marker to the map=0A=
    **=0A=
    ** @param float latitude - Latitude of marker=0A=
    ** @param float longitude - Longitude of marker=0A=
    ** @param string name - Name of location=0A=
    ** @param string link - Href source of link for name=0A=
    ** @param string image - src of image for location=0A=
    ** @param string address - address of the location=0A=
    ** @param string city - city of the location=0A=
    ** @param string state - state of the location=0A=
    ** @param string zip - zipcode of the location=0A=
    ** @return void=0A=
    */=0A=
    this.addLocation =3D function(latitude, longitude, name, link, =
image, address, city, state, zip, phone, awards)=0A=
    {=0A=
        var point =3D new GLatLng(latitude, longitude);=0A=
        var marker =3D new GMarker(point);=0A=
        marker.html =3D "";=0A=
        if(image)=0A=
        {=0A=
            marker.html +=3D "<img style=3D'float: left; margin-bottom: =
5px;' src=3D'" + image + "' class=3D'locationImage'>";=0A=
            marker.html +=3D "<div class=3D'locationDetails' =
style=3D'margin-bottom: 5px; margin-left: 80px;'>";=0A=
        }=0A=
        else=0A=
        {=0A=
            marker.html +=3D "<div class=3D'locationDetails' =
style=3D'margin-bottom: 5px;'>";=0A=
        }=0A=
        if(awards)=0A=
        {=0A=
            marker.html +=3D "<div class=3D'awards'>";=0A=
            for(j =3D 0; j < awards.length; j++)=0A=
            {=0A=
                var award =3D awards[j].BestOfAward;=0A=
                marker.html +=3D "<a href=3D'/bestOf/award/" + =
award.Year.Year + "/" + award.objid + "'>" + award.Award + "</a> (" + =
award.Year.Year + ")<br/>";=0A=
            }=0A=
            marker.html +=3D "</div>";=0A=
        }=0A=
        marker.html +=3D "<div class=3D'locationName'><a href=3D'" + =
link + "'>" + name + "</a></div>" +=0A=
                       "<div class=3D'locationAddress'>" + address + =
"</div>" +=0A=
                       "<div class=3D'locationCityStateZip'>" + city + =
", " + state + " " + zip + "</div>";=0A=
=0A=
        if(phone)=0A=
        {=0A=
            marker.html +=3D "<div class=3D'locationPhone'>" + phone + =
"</div>";=0A=
        }=0A=
        marker.html +=3D "</div><div style=3D'clear: both;'></div>";=0A=
        GEvent.addListener(marker,"click",function()=0A=
        {=0A=
            this.openInfoWindowHtml(this.html);=0A=
        });=0A=
        this.map.addOverlay(marker);=0A=
        if(this.resultsElementId)=0A=
        {=0A=
            var results =3D =
document.getElementById(this.resultsElementId);=0A=
            var result =3D document.createElement('div');=0A=
            result.className =3D 'result';=0A=
            result.innerHTML =3D "<div class=3D'locationName'><a =
href=3D'" + link + "'>" + name + "</a></div>" +=0A=
                               "<div class=3D'locationAddress'>" + =
address + "</div>";=0A=
            result.marker =3D marker;=0A=
            var map =3D this.map;=0A=
            result.onmouseover =3D function()=0A=
            {=0A=
                this.className =3D 'result hover';=0A=
                var infoWindow =3D map.getInfoWindow();=0A=
                if(infoWindow.getPoint() !=3D this.marker.getPoint())=0A=
                {=0A=
                    this.marker.openInfoWindow(this.marker.html);=0A=
                }=0A=
            }=0A=
            result.onmouseout =3D function()=0A=
            {=0A=
                this.className =3D 'result';=0A=
            }=0A=
            results.appendChild(result);=0A=
        }=0A=
    }=0A=
}=0A=
//-----------------------------------------------------------------------=
------=0A=
function List(elementId, name, collapseSize)=0A=
{=0A=
    this.expand =3D function()=0A=
    {=0A=
        for(i =3D 0; i < this.listElement.childNodes.length; i++)=0A=
        {=0A=
            var item =3D this.listElement.childNodes[i];=0A=
            if(item.nodeName =3D=3D 'LI')=0A=
            {=0A=
                item.style.display =3D '';=0A=
            }=0A=
        }=0A=
        if(this.listLink)=0A=
        {=0A=
            this.listLink.innerHTML =3D 'Less ' + this.listName;=0A=
            var listRef =3D this;=0A=
            this.listLink.onclick =3D function()=0A=
            {=0A=
                listRef.collapse(listRef.collapseSize);=0A=
            }=0A=
        }=0A=
    }=0A=
=0A=
    this.collapse =3D function(count)=0A=
    {=0A=
        var j =3D 0;=0A=
        for(i =3D 0; i < this.listElement.childNodes.length; i++)=0A=
        {=0A=
            var item =3D this.listElement.childNodes[i];=0A=
            if(item.nodeName =3D=3D 'LI')=0A=
            {=0A=
                if(j++ >=3D count)=0A=
                {=0A=
                    item.style.display =3D 'none';=0A=
                }=0A=
            }=0A=
        }=0A=
        if(this.listLink)=0A=
        {=0A=
            this.listLink.innerHTML =3D 'More ' + this.listName;=0A=
            var listRef =3D this;=0A=
            this.listLink.onclick =3D function()=0A=
            {=0A=
                listRef.expand();=0A=
            }=0A=
        }=0A=
    }=0A=
    /**=0A=
     *=0A=
     */=0A=
    this.listElement =3D document.getElementById(elementId);=0A=
    if(this.listElement)=0A=
    {=0A=
        if(name)=0A=
        {=0A=
            this.listName =3D name;=0A=
            this.listLink =3D document.createElement('a');=0A=
            this.listLink.className =3D 'more';=0A=
            this.listElement.appendChild(this.listLink);=0A=
        }=0A=
        else=0A=
        {=0A=
            this.listName =3D null;=0A=
            this.listLink =3D null;=0A=
        }=0A=
        this.collapseSize =3D collapseSize;=0A=
        this.collapse(collapseSize);=0A=
    }=0A=
}=0A=
//-----------------------------------------------------------------------=
------=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/VVVisual.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/VVCookie.js --- */=0A=
=0A=
/*=0A=
 *  VVCookie.js - Cookie related functions=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 */=0A=
=0A=
function VVCookie() {=0A=
=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/VVCookie.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/VVDate.js --- */=0A=
=0A=
/*=0A=
 *  VVDate.js - Date and Time manipulation functions=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 */=0A=
=0A=
function VVDate() {=0A=
=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/VVDate.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/VVOAS.js --- */=0A=
=0A=
/*=0A=
 *  VVOAS.js - OAS Ad insertion script=0A=
 *=0A=
 *  Wrapper for OAS ad emission logic=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 *=0A=
 */=0A=
=0A=
function VVOAS() {=0A=
=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/VVOAS.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/VVFlash.js --- */=0A=
=0A=
/*=0A=
 *  VVFlash.js - Flash specific functions=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 */=0A=
=0A=
function VVFlash() {=0A=
=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/VVFlash.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/swfobject.js --- */=0A=
=0A=
/**=0A=
 * SWFObject v1.4.3: Flash Player detection and embed - =
http://blog.deconcept.com/swfobject/=0A=
 *=0A=
 * SWFObject is (c) 2006 Geoff Stearns and is released under the MIT =
License:=0A=
 * http://www.opensource.org/licenses/mit-license.php=0A=
 *=0A=
 * **SWFObject is the SWF embed script formerly known as FlashObject. =
The name was changed for=0A=
 *   legal reasons.=0A=
 */=0A=
if(typeof deconcept =3D=3D "undefined") var deconcept =3D new Object();=0A=
if(typeof deconcept.util =3D=3D "undefined") deconcept.util =3D new =
Object();=0A=
if(typeof deconcept.SWFObjectUtil =3D=3D "undefined") =
deconcept.SWFObjectUtil =3D new Object();=0A=
deconcept.SWFObject =3D function(swf, id, w, h, ver, c, =
useExpressInstall, quality, xiRedirectUrl, redirectUrl, detectKey){=0A=
	if (!document.getElementById) { return; }=0A=
	this.DETECT_KEY =3D detectKey ? detectKey : 'detectflash';=0A=
	this.skipDetect =3D deconcept.util.getRequestParameter(this.DETECT_KEY);=0A=
	this.params =3D new Object();=0A=
	this.variables =3D new Object();=0A=
	this.attributes =3D new Array();=0A=
	if(swf) { this.setAttribute('swf', swf); }=0A=
	if(id) { this.setAttribute('id', id); }=0A=
	if(w) { this.setAttribute('width', w); }=0A=
	if(h) { this.setAttribute('height', h); }=0A=
	if(ver) { this.setAttribute('version', new =
deconcept.PlayerVersion(ver.toString().split("."))); }=0A=
	this.installedVer =3D deconcept.SWFObjectUtil.getPlayerVersion();=0A=
	if(c) { this.addParam('bgcolor', c); }=0A=
	var q =3D quality ? quality : 'high';=0A=
	this.addParam('quality', q);=0A=
	this.setAttribute('useExpressInstall', useExpressInstall);=0A=
	this.setAttribute('doExpressInstall', false);=0A=
	var xir =3D (xiRedirectUrl) ? xiRedirectUrl : window.location;=0A=
	this.setAttribute('xiRedirectUrl', xir);=0A=
	this.setAttribute('redirectUrl', '');=0A=
	if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); }=0A=
}=0A=
deconcept.SWFObject.prototype =3D {=0A=
	setAttribute: function(name, value){=0A=
		this.attributes[name] =3D value;=0A=
	},=0A=
	getAttribute: function(name){=0A=
		return this.attributes[name];=0A=
	},=0A=
	addParam: function(name, value){=0A=
		this.params[name] =3D value;=0A=
	},=0A=
	getParams: function(){=0A=
		return this.params;=0A=
	},=0A=
	addVariable: function(name, value){=0A=
		this.variables[name] =3D value;=0A=
	},=0A=
	getVariable: function(name){=0A=
		return this.variables[name];=0A=
	},=0A=
	getVariables: function(){=0A=
		return this.variables;=0A=
	},=0A=
	getVariablePairs: function(){=0A=
		var variablePairs =3D new Array();=0A=
		var key;=0A=
		var variables =3D this.getVariables();=0A=
		for(key in variables){=0A=
			variablePairs.push(key +"=3D"+ variables[key]);=0A=
		}=0A=
		return variablePairs;=0A=
	},=0A=
	getSWFHTML: function() {=0A=
		var swfNode =3D "";=0A=
		if (navigator.plugins && navigator.mimeTypes && =
navigator.mimeTypes.length) { // netscape plugin architecture=0A=
			if (this.getAttribute("doExpressInstall")) { =
this.addVariable("MMplayerType", "PlugIn"); }=0A=
			swfNode =3D '<embed type=3D"application/x-shockwave-flash" src=3D"'+ =
this.getAttribute('swf') +'" width=3D"'+ this.getAttribute('width') +'" =
height=3D"'+ this.getAttribute('height') +'"';=0A=
			swfNode +=3D ' id=3D"'+ this.getAttribute('id') +'" name=3D"'+ =
this.getAttribute('id') +'" ';=0A=
			var params =3D this.getParams();=0A=
			 for(var key in params){ swfNode +=3D [key] +'=3D"'+ params[key] +'" =
'; }=0A=
			var pairs =3D this.getVariablePairs().join("&");=0A=
			 if (pairs.length > 0){ swfNode +=3D 'flashvars=3D"'+ pairs +'"'; }=0A=
			swfNode +=3D '/>';=0A=
		} else { // PC IE=0A=
			if (this.getAttribute("doExpressInstall")) { =
this.addVariable("MMplayerType", "ActiveX"); }=0A=
			swfNode =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') =
+'">';=0A=
			swfNode +=3D '<param name=3D"movie" value=3D"'+ =
this.getAttribute('swf') +'" />';=0A=
			var params =3D this.getParams();=0A=
			for(var key in params) {=0A=
			 swfNode +=3D '<param name=3D"'+ key +'" value=3D"'+ params[key] +'" =
/>';=0A=
			}=0A=
			var pairs =3D this.getVariablePairs().join("&");=0A=
			if(pairs.length > 0) {swfNode +=3D '<param name=3D"flashvars" =
value=3D"'+ pairs +'" />';}=0A=
			swfNode +=3D "</object>";=0A=
		}=0A=
		return swfNode;=0A=
	},=0A=
	write: function(elementId){=0A=
		if(this.getAttribute('useExpressInstall')) {=0A=
			// check to see if we need to do an express install=0A=
			var expressInstallReqVer =3D new deconcept.PlayerVersion([6,0,65]);=0A=
			if (this.installedVer.versionIsValid(expressInstallReqVer) && =
!this.installedVer.versionIsValid(this.getAttribute('version'))) {=0A=
				this.setAttribute('doExpressInstall', true);=0A=
				this.addVariable("MMredirectURL", =
escape(this.getAttribute('xiRedirectUrl')));=0A=
				document.title =3D document.title.slice(0, 47) + " - Flash Player =
Installation";=0A=
				this.addVariable("MMdoctitle", document.title);=0A=
			}=0A=
		}=0A=
		if(this.skipDetect || this.getAttribute('doExpressInstall') || =
this.installedVer.versionIsValid(this.getAttribute('version'))){=0A=
			var n =3D (typeof elementId =3D=3D 'string') ? =
document.getElementById(elementId) : elementId;=0A=
			n.innerHTML =3D this.getSWFHTML();=0A=
			return true;=0A=
		}else{=0A=
			if(this.getAttribute('redirectUrl') !=3D "") {=0A=
				document.location.replace(this.getAttribute('redirectUrl'));=0A=
			}=0A=
		}=0A=
		return false;=0A=
	}=0A=
}=0A=
=0A=
/* ---- detection functions ---- */=0A=
deconcept.SWFObjectUtil.getPlayerVersion =3D function(){=0A=
	var PlayerVersion =3D new deconcept.PlayerVersion([0,0,0]);=0A=
	if(navigator.plugins && navigator.mimeTypes.length){=0A=
		var x =3D navigator.plugins["Shockwave Flash"];=0A=
		if(x && x.description) {=0A=
			PlayerVersion =3D new =
deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, =
"").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));=0A=
		}=0A=
	}else{=0A=
		// do minor version lookup in IE, but avoid fp6 crashing issues=0A=
		// see =
http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-intern=
et-explorer-flash-6/=0A=
		try{=0A=
			var axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");=0A=
		}catch(e){=0A=
			try {=0A=
				var axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");=0A=
				PlayerVersion =3D new deconcept.PlayerVersion([6,0,21]);=0A=
				axo.AllowScriptAccess =3D "always"; // throws if player version < =
6.0.47 (thanks to Michael Williams @ Adobe for this code)=0A=
			} catch(e) {=0A=
				if (PlayerVersion.major =3D=3D 6) {=0A=
					return PlayerVersion;=0A=
				}=0A=
			}=0A=
			try {=0A=
				axo =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash");=0A=
			} catch(e) {}=0A=
		}=0A=
		if (axo !=3D null) {=0A=
			PlayerVersion =3D new =
deconcept.PlayerVersion(axo.GetVariable("$version").split(" =
")[1].split(","));=0A=
		}=0A=
	}=0A=
	return PlayerVersion;=0A=
}=0A=
deconcept.PlayerVersion =3D function(arrVersion){=0A=
	this.major =3D arrVersion[0] !=3D null ? parseInt(arrVersion[0]) : 0;=0A=
	this.minor =3D arrVersion[1] !=3D null ? parseInt(arrVersion[1]) : 0;=0A=
	this.rev =3D arrVersion[2] !=3D null ? parseInt(arrVersion[2]) : 0;=0A=
}=0A=
deconcept.PlayerVersion.prototype.versionIsValid =3D function(fv){=0A=
	if(this.major < fv.major) return false;=0A=
	if(this.major > fv.major) return true;=0A=
	if(this.minor < fv.minor) return false;=0A=
	if(this.minor > fv.minor) return true;=0A=
	if(this.rev < fv.rev) return false;=0A=
	return true;=0A=
}=0A=
/* ---- get value of query string param ---- */=0A=
deconcept.util =3D {=0A=
	getRequestParameter: function(param) {=0A=
		var q =3D document.location.search || document.location.hash;=0A=
		if(q) {=0A=
			var pairs =3D q.substring(1).split("&");=0A=
			for (var i=3D0; i < pairs.length; i++) {=0A=
				if (pairs[i].substring(0, pairs[i].indexOf("=3D")) =3D=3D param) {=0A=
					return pairs[i].substring((pairs[i].indexOf("=3D")+1));=0A=
				}=0A=
			}=0A=
		}=0A=
		return "";=0A=
	}=0A=
}=0A=
/* fix for video streaming bug */=0A=
deconcept.SWFObjectUtil.cleanupSWFs =3D function() {=0A=
	var objects =3D document.getElementsByTagName("OBJECT");=0A=
	if (objects.length > 0) {=0A=
		__flash_unloadHandler =3D function(){}; // fixes but in fp9=0A=
		__flash_savedUnloadHandler =3D function(){};// fixes but in fp9 see =
http://blog.deconcept.com/=0A=
	}=0A=
	for (var i=3D0; i < objects.length; i++) {=0A=
		objects[i].style.display =3D 'none';=0A=
		for (var x in objects[i]) {=0A=
			if (typeof objects[i][x] =3D=3D 'function') {=0A=
				objects[i][x] =3D function(){};=0A=
			}=0A=
		}=0A=
	}=0A=
}=0A=
if (typeof window.onbeforeunload =3D=3D 'function') {=0A=
	var oldBeforeUnload =3D window.onbeforeunload;=0A=
	window.onbeforeunload =3D function() {=0A=
		deconcept.SWFObjectUtil.cleanupSWFs();=0A=
		oldBeforeUnload();=0A=
	}=0A=
} else {=0A=
	window.onbeforeunload =3D deconcept.SWFObjectUtil.cleanupSWFs;=0A=
=0A=
}=0A=
/* add Array.push if needed (ie5) */=0A=
if (Array.prototype.push =3D=3D null) { Array.prototype.push =3D =
function(item) { this[this.length] =3D item; return this.length; }}=0A=
=0A=
/* add some aliases for ease of use/backwards compatibility */=0A=
=0A=
var getQueryParamValue =3D deconcept.util.getRequestParameter;=0A=
var FlashObject =3D deconcept.SWFObject; // for legacy support=0A=
var SWFObject =3D deconcept.SWFObject;=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/swfobject.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/VVJava.js --- */=0A=
=0A=
/*=0A=
 *  VVJava.js - Java-specific functions (NOT JavaScript)=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 */=0A=
=0A=
function VVJava() {=0A=
=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/VVJava.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/AdIndex.js --- */=0A=
=0A=
/* AdIndex.js */=0A=
function AdIndex(){=0A=
    this.tower =3D function(section, limit){=0A=
        new Ajax.Updater('AdIndexTower', =
'/adIndex/ajaxTower/adIndexSection:' + section + ';adIndexLimit:' + =
limit, { method: 'get' });=0A=
    }=0A=
=0A=
    this.track =3D function(adId){=0A=
        if(window.location.href.indexOf("tower") !=3D -1){=0A=
            var url =3D '/adIndex/track/' + adId + '/tower_impressions';=0A=
        }=0A=
        else{=0A=
            var url =3D '/adIndex/track/' + adId + '/impressions';=0A=
        }=0A=
        new Ajax.Request(url, { method: 'get'});=0A=
    }=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/AdIndex.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/BlurFocusFix.js --- =
*/=0A=
=0A=
/*=0A=
 *  BlurFocusFix.js - Class to make designated text fields do that value =
switcheroo onfocus and onblur=0A=
 *   @author andy=0A=
 */=0A=
=0A=
function BlurFocusFix( classToFind ) {=0A=
=0A=
	var fieldList =3D $$( 'input.' + classToFind );=0A=
	fieldList.each( function ( field, n ) {=0A=
		$(field).setAttribute( 'defaultValue', $(field).value );	=0A=
		$(field).onfocus =3D function () {=0A=
			if( this.value !=3D this.getAttribute( 'defaultValue' ) && =
this.value.length ) {=0A=
				return;=0A=
			}=0A=
			this.value =3D "";=0A=
		};=0A=
		$(field).onblur =3D function () {=0A=
			if( this.value.length =3D=3D 0 ) {=0A=
				// Don't put the value back in anymore... sweet.=0A=
				// this.value =3D this.getAttribute( 'defaultValue' );=0A=
			}=0A=
		};=0A=
	} );=0A=
=0A=
}=0A=
=0A=
loadMgr.addLoadEvent( "var blurFocusFix =3D new BlurFocusFix( =
'BlurFocusFix' )" );=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/BlurFocusFix.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/DropDown.js --- */=0A=
=0A=
function DropDown(className)=0A=
{=0A=
    this.div =3D document.createElement('div');=0A=
    this.span =3D document.createElement('span');=0A=
    this.div.className =3D className;=0A=
    this.ul =3D document.createElement('ul');=0A=
    this.ul.style.display =3D 'none';=0A=
    this.ul.style.position =3D 'absolute';=0A=
    this.ul.onmouseover =3D function()=0A=
    {=0A=
        this.underMouse =3D true;=0A=
    }=0A=
    this.ul.onmouseout =3D function()=0A=
    {=0A=
        this.underMouse =3D false;=0A=
        var ul =3D this;=0A=
        closeUL =3D function()=0A=
        {=0A=
            if(!ul.underMouse)=0A=
            {=0A=
                ul.style.display =3D 'none';=0A=
            }=0A=
        }=0A=
        setTimeout('closeUL()',500);=0A=
    }=0A=
    this.div.appendChild(this.span);=0A=
    this.div.appendChild(this.ul);=0A=
    this.onChange =3D null;=0A=
=0A=
    this.div.onclick =3D function()=0A=
    {=0A=
        var ul =3D this.getElementsByTagName('ul');=0A=
        ul =3D ul[0];=0A=
        if(ul.style.display =3D=3D 'none')=0A=
        {=0A=
            var left =3D this.offsetLeft;=0A=
            var top =3D this.offsetTop;=0A=
            var temp =3D this;=0A=
            while(temp =3D temp.offsetParent)=0A=
            {=0A=
                left +=3D temp.offsetLeft;=0A=
                top +=3D temp.offsetTop;=0A=
            }=0A=
            ul.style.top =3D top + this.offsetHeight + 'px';=0A=
            ul.style.left =3D left + 'px';=0A=
            ul.style.display =3D '';=0A=
        }=0A=
        else=0A=
        {=0A=
            ul.style.display =3D 'none';=0A=
        }=0A=
    }=0A=
=0A=
    this.addItem =3D function(key, value, selected)=0A=
    {=0A=
        var li =3D document.createElement('li');=0A=
        li.innerHTML =3D key;=0A=
        li.itemValue =3D value;=0A=
        var parent =3D this;=0A=
        li.onclick =3D function()=0A=
        {=0A=
            parent.span.innerHTML =3D this.innerHTML;=0A=
            if(parent.onChange)=0A=
            {=0A=
                parent.onChange(this.innerHTML,this.itemValue);=0A=
            }=0A=
        }=0A=
        li.onmouseover =3D function()=0A=
        {=0A=
            this.className =3D 'hover';=0A=
            parent.underMouse =3D true;=0A=
        }=0A=
        li.onmouseout =3D function()=0A=
        {=0A=
            this.className =3D '';=0A=
            parent.underMouse =3D false;=0A=
        }=0A=
        this.ul.appendChild(li);=0A=
        if(selected)=0A=
        {=0A=
            this.selected =3D li;=0A=
            this.span.innerHTML =3D key;=0A=
        }=0A=
    }=0A=
=0A=
    this.render =3D function(parentId)=0A=
    {=0A=
        var parent =3D document.getElementById(parentId);=0A=
        if(parent)=0A=
        {=0A=
            parent.appendChild(this.div);=0A=
            for(i =3D 0; i < this.ul.childNodes.length; i++)=0A=
            {=0A=
                var li =3D this.ul.childNodes[i];=0A=
                if(li.tagName =3D=3D 'LI')=0A=
                {=0A=
                    //li.style.minWidth =3D this.div.offsetWidth + 'px';=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/DropDown.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/VVPopup.js --- */=0A=
=0A=
/*=0A=
 *  VVPopup.js - Popup window functions=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 */=0A=
=0A=
function VVPopup() {=0A=
=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/VVPopup.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/SMS.js --- */=0A=
=0A=
function SMSForm(id,message)=0A=
{=0A=
    this.message =3D message;=0A=
    this.element =3D null;=0A=
    this.visible =3D 0;=0A=
    this.parentId =3D id;=0A=
    this.carriers =3D null;=0A=
    this.number =3D null;=0A=
=0A=
    this.create =3D function()=0A=
    {=0A=
        if(this.parentId)=0A=
        {=0A=
            var parent =3D document.getElementById(this.parentId);=0A=
            var widget =3D this;=0A=
            this.element =3D document.createElement('div');=0A=
            this.element.style.display =3D 'none';=0A=
            this.element.style.position =3D 'absolute';=0A=
            this.element.className =3D 'SMSForm';=0A=
            parent.appendChild(this.element);=0A=
            var div =3D document.createElement('div');=0A=
            div.innerHTML =3D 'Carrier:';=0A=
            this.element.appendChild(div);=0A=
            this.carriers =3D document.createElement('select');=0A=
            this.element.appendChild(this.carriers);=0A=
            var option =3D document.createElement('option');=0A=
            option.value =3D 0;=0A=
            option.innerHTML =3D 'Select Carrier';=0A=
            this.carriers.appendChild(option);=0A=
            div =3D document.createElement('div');=0A=
            div.innerHTML =3D 'Number:';=0A=
            this.element.appendChild(div);=0A=
            this.number =3D document.createElement('input');=0A=
            this.number.type =3D 'text';=0A=
            this.element.appendChild(this.number);=0A=
            var button =3D document.createElement('button');=0A=
            button.innerHTML =3D 'Send';=0A=
            button.onclick =3D function()=0A=
            {=0A=
                widget.send();=0A=
            }=0A=
            this.element.appendChild(button);=0A=
            var close =3D document.createElement('img');=0A=
            close.src =3D '/img/close-grey.gif';=0A=
            close.style.marginLeft =3D '5px';=0A=
            close.style.cursor =3D 'pointer';=0A=
            close.style.position =3D 'absolute';=0A=
            close.style.top =3D '5px';=0A=
            close.style.right =3D '5px';=0A=
            close.onclick =3D function()=0A=
            {=0A=
                widget.hide();=0A=
            }=0A=
            this.element.appendChild(close);=0A=
            this.loadCarriers();=0A=
        }=0A=
    }=0A=
=0A=
    this.show =3D function()=0A=
    {=0A=
        this.visible =3D true;=0A=
        if(this.element =3D=3D null)=0A=
        {=0A=
            this.create();=0A=
        }=0A=
        if(this.element)=0A=
        {=0A=
            this.element.style.display =3D '';=0A=
        }=0A=
    }=0A=
=0A=
    this.hide =3D function()=0A=
    {=0A=
        this.visible =3D false;=0A=
        if(this.element)=0A=
        {=0A=
            this.element.style.display =3D 'none';=0A=
        }=0A=
    }=0A=
=0A=
    this.toggle =3D function()=0A=
    {=0A=
        if(this.visible)=0A=
        {=0A=
            this.hide();=0A=
        }=0A=
        else=0A=
        {=0A=
            this.show();=0A=
        }=0A=
    }=0A=
=0A=
    this.send =3D function()=0A=
    {=0A=
        if(this.carriers.value =3D=3D 0)=0A=
        {=0A=
            alert('Please select a carrier.');=0A=
        }=0A=
        else if(!this.number.value)=0A=
        {=0A=
            alert('Please enter the phone number.');=0A=
        }=0A=
        else=0A=
        {=0A=
            var url =3D '/services/smsSend/?debug:0&carrier=3D' + =
this.carriers.value + '&number=3D' + this.number.value + '&message=3D' + =
this.message;=0A=
            var widget =3D this;=0A=
            new Ajax.Request(url,=0A=
            {=0A=
                method:'get',=0A=
                onSuccess: function(transport,json)=0A=
                {=0A=
                    if(json)=0A=
                    {=0A=
                        if(json.Status =3D=3D 'OK')=0A=
                        {=0A=
                            alert('Message sent');=0A=
                        }=0A=
                        else=0A=
                        {=0A=
                            alert(json.Error);=0A=
                        }=0A=
                    }=0A=
                    widget.hide();=0A=
                }=0A=
                ,=0A=
                onFailure: function()=0A=
                {=0A=
                    alert('Something went wrong...');=0A=
                    widget.hide();=0A=
                }=0A=
            });=0A=
        }=0A=
    }=0A=
=0A=
    this.loadCarriers =3D function()=0A=
    {=0A=
        var widget =3D this;=0A=
        var url =3D '/services/smsGetCarriers?debug:0';=0A=
        new Ajax.Request(url,=0A=
        {=0A=
            method:'get',=0A=
            onSuccess: function(transport,json)=0A=
            {=0A=
                if(json)=0A=
                {=0A=
                    if(json.Status =3D=3D 'OK')=0A=
                    {=0A=
                        if(widget.carriers)=0A=
                        {=0A=
                            for(i =3D 0; i < json.Carriers.length; i++)=0A=
                            {=0A=
                                var carrier =3D json.Carriers[i].Carrier;=0A=
                                var option =3D =
document.createElement('option');=0A=
                                option.value =3D carrier.carrier_id;=0A=
                                option.innerHTML =3D carrier.name;=0A=
                                widget.carriers.appendChild(option);=0A=
                            }=0A=
                        }=0A=
                    }=0A=
                    else=0A=
                    {=0A=
                        alert(json.Error);=0A=
                    }=0A=
                }=0A=
            }=0A=
            ,=0A=
            onFailure: function()=0A=
            {=0A=
                alert('Something went wrong...');=0A=
            }=0A=
        });=0A=
    }=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/SMS.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/Trailer.js --- */=0A=
=0A=
=0A=
var TrailerPopupSingleton =3D (=0A=
	function () {=0A=
		var instance =3D {=0A=
			init: function () {=0A=
				// use prototype to get elements by class name and add the =
appropriate=0A=
				// attributes to it=0A=
				var popUpLinks =3D $$('a.TrailerPopup');=0A=
				for( var l =3D 0; l < popUpLinks.length; l++ ){=0A=
					// because there can be multiple widgets which will attemp to =
instantiate this beast=0A=
					// more than once, this thing won't know which a tags it's touched, =
so just ignore the =0A=
					// ones that already have the "trailerLink" attribute set=0A=
					if( popUpLinks[l].readAttribute( "trailerLink" ) =3D=3D null ) {=0A=
						var link =3D popUpLinks[l].readAttribute( "href" );=0A=
						popUpLinks[l].setAttribute( "trailerLink", link );=0A=
						popUpLinks[l].setAttribute( "href", =
"javascript:trailerPopup.showTrailerPopUp( '" + link + "' )" );=0A=
					}=0A=
				}=0A=
			},=0A=
			wTrailerWindow: -1,=0A=
			showTrailerPopUp: function ( link ) {=0A=
				this.wTrailerWindow =3D window.open(=0A=
					link,=0A=
					"wTrailerViewer",=0A=
					=
"height=3D440,width=3D728,status=3Dno,toolbar=3Dno,menubar=3Dno,resizable=
=3Dyes,status=3Dno"=0A=
				);=0A=
				this.wTrailerWindow.focus();=0A=
			}=0A=
		};=0A=
		return { getInstance: function () { return instance; } }=0A=
	}=0A=
)();=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
/*=0A=
   This file contains functions to generate OBJECT and EMBED tags for =
QuickTime content.=0A=
   These functions assemble the tags from parameters passed to them as =
parameters.=0A=
=0A=
    QT_WriteOBJECT()              - generate HTML tags and insert them =
into the calling document=0A=
    QT_WriteOBJECT_XHTML()        - generate XHTML tags and insert them =
into the calling document=0A=
=0A=
    QT_GenerateOBJECTText()       - generate HTML tags and return them =
as a string=0A=
    QT_GenerateOBJECTText_XHTML() - generate XHTML tags and return them =
as a string=0A=
=0A=
    AC_QuickTimeVersion()         - return the version of this file as a =
floating point number.=0A=
=0A=
   To call one of these functions, pass the url, width, height, and =
required ActiveX=0A=
   control version as parameters 1 through 4, and pass all other =
attributes and=0A=
   parameters that you would otherwise specify for the OBJECT, PARAM, =
and EMBED=0A=
   tags as pairs of parameters:=0A=
=0A=
   <script language=3D"JavaScript" type=3D"text/javascript">=0A=
      QT_WriteOBJECT(srcURL, width, height, activeXVersion,=0A=
         "attributeName1", "attributeValue1",=0A=
         "attributeName1", "attributeValue2",=0A=
         "attributeName1", "attributeValue3",=0A=
         "attributeName1", "attributeValue4",=0A=
         ...=0A=
         "attributeNameN", "attributeValueN"=0A=
      );=0A=
    </script>=0A=
=0A=
   These functions automatically add the "classid", "codebase", and =
"pluginspage" tags to=0A=
   the OBJECT and/or EMBED tags with standard values if they are not =
specified in the=0A=
   parameter list, so you need not supply these tags unless you require =
non-standard values.=0A=
=0A=
   Although the OBJECT and EMBED tags typically have the same attributes =
and parameters, it=0A=
   is sometimes useful to have different values for each.=0A=
   Any attribute name prefixed with "obj#" is added to the OBJECT tag =
only, any attribute=0A=
   name prefixed with "emb#" is added to the EMBED tag only.=0A=
=0A=
   <script language=3D"JavaScript" type=3D"text/javascript">=0A=
      QT_WriteOBJECT('http://www.domain.com/sample.mov', '480', '288', ''=0A=
        , 'emb#bgcolor', '#FFFFFF');=0A=
   </script>=0A=
=0A=
 */=0A=
=0A=
/************** LOCALIZABLE GLOBAL VARIABLES ****************/=0A=
=0A=
var gArgCountErr =3D	'The "%%" function requires an even number of =
arguments.'=0A=
				+	'\nArguments should be in the form "atttributeName", =
"attributeValue", ...';=0A=
=0A=
/******************** END LOCALIZABLE **********************/=0A=
=0A=
var gTagAttrs				=3D null;=0A=
var gQTGeneratorVersion		=3D 0.8;=0A=
=0A=
function AC_QuickTimeVersion()	{ return gQTGeneratorVersion; }=0A=
=0A=
function _QTComplain(callingFcnName, errMsg)=0A=
{=0A=
    errMsg =3D errMsg.replace("%%", callingFcnName);=0A=
	alert(errMsg);=0A=
}=0A=
=0A=
function _QTAddAttribute(prefix, slotName, tagName)=0A=
{=0A=
	var		value;=0A=
=0A=
	value =3D gTagAttrs[prefix + slotName];=0A=
	if ( null =3D=3D value )=0A=
		value =3D gTagAttrs[slotName];=0A=
=0A=
	if ( null !=3D value )=0A=
	{=0A=
		if ( 0 =3D=3D slotName.indexOf(prefix) && (null =3D=3D tagName) )=0A=
			tagName =3D slotName.substring(prefix.length);=0A=
		if ( null =3D=3D tagName )=0A=
			tagName =3D slotName;=0A=
		return tagName + '=3D"' + value + '" ';=0A=
	}=0A=
	else=0A=
		return "";=0A=
}=0A=
=0A=
function _QTAddObjectAttr(slotName, tagName)=0A=
{=0A=
	// don't bother if it is only for the embed tag=0A=
	if ( 0 =3D=3D slotName.indexOf("emb#") )=0A=
		return "";=0A=
=0A=
	if ( 0 =3D=3D slotName.indexOf("obj#") && (null =3D=3D tagName) )=0A=
		tagName =3D slotName.substring(4);=0A=
=0A=
	return _QTAddAttribute("obj#", slotName, tagName);=0A=
}=0A=
=0A=
function _QTAddEmbedAttr(slotName, tagName)=0A=
{=0A=
	// don't bother if it is only for the object tag=0A=
	if ( 0 =3D=3D slotName.indexOf("obj#") )=0A=
		return "";=0A=
=0A=
	if ( 0 =3D=3D slotName.indexOf("emb#") && (null =3D=3D tagName) )=0A=
		tagName =3D slotName.substring(4);=0A=
=0A=
	return _QTAddAttribute("emb#", slotName, tagName);=0A=
}=0A=
=0A=
=0A=
function _QTAddObjectParam(slotName, generateXHTML)=0A=
{=0A=
	var		paramValue;=0A=
	var		paramStr =3D "";=0A=
	var		endTagChar =3D (generateXHTML) ? ' />' : '>';=0A=
=0A=
	if ( -1 =3D=3D slotName.indexOf("emb#") )=0A=
	{=0A=
		// look for the OBJECT-only param first. if there is none, look for a =
generic one=0A=
		paramValue =3D gTagAttrs["obj#" + slotName];=0A=
		if ( null =3D=3D paramValue )=0A=
			paramValue =3D gTagAttrs[slotName];=0A=
=0A=
		if ( 0 =3D=3D slotName.indexOf("obj#") )=0A=
			slotName =3D slotName.substring(4);=0A=
=0A=
		if ( null !=3D paramValue )=0A=
			paramStr =3D '  <param name=3D"' + slotName + '" value=3D"' + =
paramValue + '"' + endTagChar + '\n';=0A=
	}=0A=
=0A=
	return paramStr;=0A=
}=0A=
=0A=
function _QTDeleteTagAttrs()=0A=
{=0A=
	for ( var ndx =3D 0; ndx < arguments.length; ndx++ )=0A=
	{=0A=
		var attrName =3D arguments[ndx];=0A=
		delete gTagAttrs[attrName];=0A=
		delete gTagAttrs["emb#" + attrName];=0A=
		delete gTagAttrs["obj#" + attrName];=0A=
	}=0A=
}=0A=
=0A=
=0A=
=0A=
// generate an embed and object tag, return as a string=0A=
function _QTGenerate(callingFcnName, generateXHTML, args)=0A=
{=0A=
	// is the number of optional arguments even?=0A=
	if ( args.length < 4 || (0 !=3D (args.length % 2)) )=0A=
	{=0A=
		_QTComplain(callingFcnName, gArgCountErr);=0A=
		return "";=0A=
	}=0A=
=0A=
	// allocate an array, fill in the required attributes with fixed place =
params and defaults=0A=
	gTagAttrs =3D new Array();=0A=
	gTagAttrs["src"] =3D args[0];=0A=
	gTagAttrs["width"] =3D args[1];=0A=
	gTagAttrs["height"] =3D args[2];=0A=
	gTagAttrs["classid"] =3D "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";=0A=
	gTagAttrs["pluginspage"] =3D "http://www.apple.com/quicktime/download/";=0A=
=0A=
	// set up codebase attribute with specified or default version before =
parsing args so=0A=
	//  anything passed in will override=0A=
	var activexVers =3D args[3]=0A=
	if ( (null =3D=3D activexVers) || ("" =3D=3D activexVers) )=0A=
		activexVers =3D "6,0,2,0";=0A=
	gTagAttrs["codebase"] =3D =
"http://www.apple.com/qtactivex/qtplugin.cab#version=3D" + activexVers;=0A=
=0A=
	var	attrName,=0A=
		attrValue;=0A=
=0A=
	// add all of the optional attributes to the array=0A=
	for ( var ndx =3D 4; ndx < args.length; ndx +=3D 2)=0A=
	{=0A=
		attrName =3D args[ndx].toLowerCase();=0A=
		attrValue =3D args[ndx + 1];=0A=
=0A=
		// "name" and "id" should have the same value, the former goes in the =
embed and the later goes in=0A=
		//  the object. use one array slot=0A=
		if ( "name" =3D=3D attrName || "id" =3D=3D attrName )=0A=
			gTagAttrs["name"] =3D attrValue;=0A=
=0A=
		else=0A=
			gTagAttrs[attrName] =3D attrValue;=0A=
	}=0A=
=0A=
	// init both tags with the required and "special" attributes=0A=
	var objTag =3D  '<object '=0A=
					+ _QTAddObjectAttr("classid")=0A=
					+ _QTAddObjectAttr("width")=0A=
					+ _QTAddObjectAttr("height")=0A=
					+ _QTAddObjectAttr("codebase")=0A=
					+ _QTAddObjectAttr("name", "id")=0A=
					+ _QTAddObjectAttr("tabindex")=0A=
					+ _QTAddObjectAttr("hspace")=0A=
					+ _QTAddObjectAttr("vspace")=0A=
					+ _QTAddObjectAttr("border")=0A=
					+ _QTAddObjectAttr("align")=0A=
					+ _QTAddObjectAttr("class")=0A=
					+ _QTAddObjectAttr("title")=0A=
					+ _QTAddObjectAttr("accesskey")=0A=
					+ _QTAddObjectAttr("noexternaldata")=0A=
					+ '>\n'=0A=
					+ _QTAddObjectParam("src", generateXHTML);=0A=
	var embedTag =3D '  <embed '=0A=
					+ _QTAddEmbedAttr("src")=0A=
					+ _QTAddEmbedAttr("width")=0A=
					+ _QTAddEmbedAttr("height")=0A=
					+ _QTAddEmbedAttr("pluginspage")=0A=
					+ _QTAddEmbedAttr("name")=0A=
					+ _QTAddEmbedAttr("align")=0A=
					+ _QTAddEmbedAttr("tabindex");=0A=
=0A=
	// delete the attributes/params we have already added=0A=
	=
_QTDeleteTagAttrs("src","width","height","pluginspage","classid","codebas=
e","name","tabindex",=0A=
					=
"hspace","vspace","border","align","noexternaldata","class","title","acce=
sskey");=0A=
=0A=
	// and finally, add all of the remaining attributes to the embed and =
object=0A=
	for ( var attrName in gTagAttrs )=0A=
	{=0A=
		attrValue =3D gTagAttrs[attrName];=0A=
		if ( null !=3D attrValue )=0A=
		{=0A=
			embedTag +=3D _QTAddEmbedAttr(attrName);=0A=
			objTag +=3D _QTAddObjectParam(attrName, generateXHTML);=0A=
		}=0A=
	}=0A=
=0A=
	// end both tags, we're done=0A=
	return objTag + embedTag + '> </em' + 'bed>\n</ob' + 'ject' + '>';=0A=
}=0A=
=0A=
// return the object/embed as a string=0A=
function QT_GenerateOBJECTText()=0A=
{=0A=
	return _QTGenerate("QT_GenerateOBJECTText", false, arguments);=0A=
}=0A=
=0A=
function QT_GenerateOBJECTText_XHTML()=0A=
{=0A=
	return _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments);=0A=
}=0A=
=0A=
function QT_WriteOBJECT()=0A=
{=0A=
	document.writeln(_QTGenerate("QT_WriteOBJECT", false, arguments));=0A=
}=0A=
=0A=
function QT_WriteOBJECT_XHTML()=0A=
{=0A=
	document.writeln(_QTGenerate("QT_WriteOBJECT_XHTML", true, arguments));=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/Trailer.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/Rating.js --- */=0A=
=0A=
function Rating()=0A=
{=0A=
    this.maxRating =3D 5;=0A=
    this.parentElement =3D null;=0A=
    this.list =3D null;=0A=
    this.rating =3D 0;=0A=
    this.empty =3D '/img/star-empty.jpg';=0A=
    this.full =3D '/img/star-full.jpg';=0A=
    this.ratings =3D new Array;=0A=
    this.onChange =3D null;=0A=
    this.displayOnly =3D false;=0A=
=0A=
    this.render =3D function(parentId)=0A=
    {=0A=
        this.parentElement =3D document.getElementById(parentId);=0A=
        if(this.parentElement)=0A=
        {=0A=
            this.list =3D document.createElement('ul');=0A=
            this.list.className =3D 'Rating';=0A=
            var i;=0A=
            for(i =3D 0; i < this.maxRating; i++)=0A=
            {=0A=
                var item =3D document.createElement('li');=0A=
                item.control =3D this;=0A=
                item.rating =3D i + 1;=0A=
                item.image =3D document.createElement('img');=0A=
                item.image.src =3D this.empty;=0A=
                item.image.rating =3D i + 1;=0A=
                item.image.control =3D this;=0A=
                item.image.title =3D (i + 1) + ' star';=0A=
                if(i > 0)=0A=
                {=0A=
                    item.image.title +=3D 's';=0A=
                }=0A=
                item.onmouseover =3D function()=0A=
                {=0A=
                    this.control.hoverRating(this.rating - 1);=0A=
                }=0A=
                item.onmouseout =3D function()=0A=
                {=0A=
                    this.control.hoverRating(this.control.rating - 1);=0A=
                }=0A=
                item.image.onclick =3D function()=0A=
                {=0A=
                    if(!this.control.displayOnly)=0A=
                    {=0A=
                        this.control.rating =3D this.rating;=0A=
                        if(this.control.onChange)=0A=
                        {=0A=
                            this.control.onChange(this.rating);=0A=
                        }=0A=
                    }=0A=
                }=0A=
                item.appendChild(item.image);=0A=
                this.ratings[i] =3D item;=0A=
                this.list.appendChild(item);=0A=
            }=0A=
            this.parentElement.appendChild(this.list);=0A=
        }=0A=
    }=0A=
=0A=
    this.setRating =3D function(rating)=0A=
    {=0A=
        this.rating =3D rating;=0A=
        var i;=0A=
        for(i =3D 0; i < this.maxRating; i++)=0A=
        {=0A=
            if(i <=3D rating - 1)=0A=
            {=0A=
                this.ratings[i].image.src =3D this.full;=0A=
            }=0A=
            else=0A=
            {=0A=
                this.ratings[i].image.src =3D this.empty;=0A=
            }=0A=
        }=0A=
    }=0A=
=0A=
    this.hoverRating =3D function(idx)=0A=
    {=0A=
        if(!this.displayOnly)=0A=
        {=0A=
            var i;=0A=
            for(i =3D 0; i < this.maxRating; i++)=0A=
            {=0A=
                if(i <=3D idx)=0A=
                {=0A=
                    this.ratings[i].image.src =3D this.full;=0A=
                }=0A=
                else=0A=
                {=0A=
                    this.ratings[i].image.src =3D this.empty;=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/Rating.js --- */=0A=
/* --- Start /home/httpd/public/app_frame/webroot/js/VVForm.js --- */=0A=
=0A=
/*=0A=
 *  VVForm.js - Form Manipulation and validation script=0A=
 *=0A=
 *  ************************************************************=0A=
 *  Note: Before adding any new functions into this class=0A=
 *        PLEASE check the prototype and scriptaculous libraries=0A=
 *        for duplicate functionality.=0A=
 *  ************************************************************=0A=
 */=0A=
=0A=
function VVForm() {=0A=
=0A=
}=0A=
=0A=
function clearInput( id, value )=0A=
{=0A=
	if( document.getElementById( id ).value =3D=3D value )=0A=
	{=0A=
		document.getElementById( id ).value=3D'';=0A=
	}=0A=
}=0A=
=0A=
function resetInput( id, value )=0A=
{=0A=
	if( document.getElementById( id ).value =3D=3D "" )=0A=
	{=0A=
        document.getElementById( id ).value=3Dvalue;=0A=
	}=0A=
}=0A=
=0A=
/* --- End /home/httpd/public/app_frame/webroot/js/VVForm.js --- */=0A=
/* --- Start /home/httpd/public/app/nyv/webroot/js/RotateFour.js --- */=0A=
=0A=
function new_image(src)=0A=
{=0A=
	var img =3D new Image();=0A=
	img.src =3D src;=0A=
	return img;=0A=
}=0A=
=0A=
function swap_control_image(type,state)=0A=
{=0A=
	var control_images =3D new Object();=0A=
=0A=
	control_images.prev =3D new Object();=0A=
	control_images.prev.init =3D =
new_image('/img/todays_headlines_prev_init.gif');=0A=
	control_images.prev.over =3D =
new_image('/img/todays_headlines_prev_over.gif');=0A=
=0A=
	control_images.next =3D new Object();=0A=
	control_images.next.init =3D =
new_image('/img/todays_headlines_next_init.gif');=0A=
	control_images.next.over =3D =
new_image('/img/todays_headlines_next_over.gif');=0A=
=0A=
	document.images['todays_headlines_' + type].src =3D =
control_images[type][state].src;=0A=
}=0A=
=0A=
var timer;=0A=
var items;=0A=
var current =3D 0;=0A=
=0A=
function show_previous_item_manually()=0A=
{=0A=
	stop_rotation();=0A=
	show_previous_item();=0A=
}=0A=
=0A=
function show_next_item_manually()=0A=
{=0A=
	stop_rotation();=0A=
	show_next_item();=0A=
}=0A=
=0A=
function show_previous_item()=0A=
{=0A=
	var prev =3D current > 0 ? current - 1 : items.length - 1;=0A=
	items[current].className =3D 'Hidden';=0A=
	items[prev].className =3D 'Visible';=0A=
	current =3D prev;=0A=
}=0A=
=0A=
function show_next_item()=0A=
{=0A=
	var next =3D current < items.length - 1 ? current + 1 : 0;=0A=
	items[current].className =3D 'Hidden';=0A=
	items[next].className =3D 'Visible';=0A=
	current =3D next;=0A=
}=0A=
=0A=
function start_rotation()=0A=
{=0A=
	items =3D $('Featured_Stories').getElementsByTagName('LI');=0A=
	timer =3D setInterval('show_next_item()', 5000);=0A=
}=0A=
=0A=
function stop_rotation()=0A=
{=0A=
	clearInterval(timer);=0A=
}=0A=
=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app/nyv/webroot/js/RotateFour.js --- */=0A=
/* --- Start /home/httpd/public/app/nyv/webroot/js/Slideshow.js --- */=0A=
=0A=
/* Slideshow.js */=0A=
function Slideshow(url, current, next, prev){=0A=
    /* Input */=0A=
    this.url =3D url;=0A=
    this.current =3D current;=0A=
    this.next =3D next;=0A=
    this.prev =3D prev;=0A=
=0A=
    /* Constants */=0A=
    this.timeout =3D null;=0A=
    this.rotateTime =3D 4000;=0A=
    this.windowLocation =3D window.location.href;=0A=
=0A=
	this.play =3D function()=0A=
	{=0A=
		window.location.href=3D this.url + this.next + '?play=3Dtrue';=0A=
	}=0A=
=0A=
    this.continuePlay =3D function(){=0A=
        this.timeout =3D setTimeout('window.location.href=3D"' + =
this.url + this.next + '?play=3Dtrue"', this.rotateTime);=0A=
    }=0A=
    this.pause =3D function(){=0A=
        clearTimeout(this.timeout);=0A=
    }=0A=
=0A=
    if(this.windowLocation.indexOf('play=3Dtrue') !=3D=3D -1){=0A=
        this.continuePlay();=0A=
    }=0A=
}=0A=
=0A=
=0A=
=0A=
var slideshow_state =3D 0;=0A=
function register_slideshow_state(state)=0A=
{=0A=
	slideshow_state =3D state;=0A=
}=0A=
=0A=
var slideshow_control_images =3D new Object();=0A=
=0A=
slideshow_control_images.prev =3D new Object();=0A=
slideshow_control_images.prev.init =3D new Image();=0A=
slideshow_control_images.prev.init.src =3D =
'/img/slideshows/slideshow_controls_prev_init.gif';=0A=
slideshow_control_images.prev.over =3D new Image();=0A=
slideshow_control_images.prev.over.src =3D =
'/img/slideshows/slideshow_controls_prev_over.gif';=0A=
=0A=
slideshow_control_images.play =3D new Object();=0A=
slideshow_control_images.play.init =3D new Image();=0A=
slideshow_control_images.play.init.src =3D =
'/img/slideshows/slideshow_controls_play_init.gif';=0A=
slideshow_control_images.play.over =3D new Image();=0A=
slideshow_control_images.play.over.src =3D =
'/img/slideshows/slideshow_controls_play_over.gif';=0A=
=0A=
slideshow_control_images.next =3D new Object();=0A=
slideshow_control_images.next.init =3D new Image();=0A=
slideshow_control_images.next.init.src =3D =
'/img/slideshows/slideshow_controls_next_init.gif';=0A=
slideshow_control_images.next.over =3D new Image();=0A=
slideshow_control_images.next.over.src =3D =
'/img/slideshows/slideshow_controls_next_over.gif';=0A=
=0A=
slideshow_control_images.pause =3D new Object();=0A=
slideshow_control_images.pause.init =3D new Image();=0A=
slideshow_control_images.pause.init.src =3D =
'/img/slideshows/slideshow_controls_pause_init.gif';=0A=
slideshow_control_images.pause.over =3D new Image();=0A=
slideshow_control_images.pause.over.src =3D =
'/img/slideshows/slideshow_controls_pause_over.gif';=0A=
=0A=
function swap_slideshow_control_image(control,state)=0A=
{=0A=
	switch(control)=0A=
	{=0A=
		case 'play':=0A=
			if (slideshow_state) state =3D 'over';=0A=
			document.images['slideshow_controls_pause'].src =3D =
slideshow_control_images.pause.init.src;=0A=
			break;=0A=
=0A=
		case 'pause':=0A=
			if (!slideshow_state) state =3D 'over';=0A=
			document.images['slideshow_controls_play'].src =3D =
slideshow_control_images.play.init.src;=0A=
			break;=0A=
	}=0A=
	document.images['slideshow_controls_' + control].src =3D =
slideshow_control_images[control][state].src;=0A=
}=0A=
=0A=
=0A=
/* --- End /home/httpd/public/app/nyv/webroot/js/Slideshow.js --- */=0A=
=0A=
=0A=
/* Generated at 2008-07-11 21:59:15 */=0A=
=0A=
/* NA () - 192.168.62.215 - [5.8861] */=0A=

------=_NextPart_000_0000_01C8E3A9.DD946FD0--

