From: "Saved by Windows Internet Explorer 7"
Subject: A Mural Hangs in Limbo - Los Angeles Times
Date: Sun, 17 Aug 2008 12:03:36 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01C90061.47186AA0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6001.18049

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/2001/jun/03/local/me-6023

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML lang=3Den xml:lang=3D"en" =
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>A Mural Hangs in =
Limbo - Los Angeles Times</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META http-equiv=3DDescription=20
content=3D"When artist Judith Hernandez went to West Los Angeles in 1976 =
to&#10;help unite a community torn by gang violence, she never imagined =
that her&#10;mural would be controversial decades later..">
<META http-equiv=3DKeywords=20
content=3D"art, murals, demolition, recreation centers"><LINK =
href=3D"/favicon.ico"=20
type=3Dimage/x-icon rel=3D"shortcut icon"><LINK media=3Dall=20
href=3D"http://articles.latimes.com/stylesheets/main.css?1217444655" =
type=3Dtext/css=20
rel=3Dstylesheet><!--[if lt IE 7]>=0A=
  <link href=3D"/stylesheets/ie.css?1217444655" media=3D"screen" =
rel=3D"stylesheet" type=3D"text/css" />=0A=
  <![endif]--><!--[if gte IE 7]><LINK=20
media=3Dscreen =
href=3D"http://articles.latimes.com/stylesheets/ie7.css?1217444655"=20
type=3Dtext/css rel=3Dstylesheet><![endif]--><LINK id=3Dlargetext =
title=3Dlargetext=20
media=3Dscreen=20
href=3D"http://articles.latimes.com/stylesheets/large-text.css?1217444655=
"=20
type=3Dtext/css rel=3D"alternate stylesheet"><LINK id=3Dmediumtext =
title=3Dmediumtext=20
media=3Dscreen=20
href=3D"http://articles.latimes.com/stylesheets/medium-text.css?121744465=
5"=20
type=3Dtext/css rel=3D"alternate stylesheet"><LINK id=3Dsmalltext =
title=3Dsmalltext=20
media=3Dscreen=20
href=3D"http://articles.latimes.com/stylesheets/small-text.css?1217444655=
"=20
type=3Dtext/css rel=3D"alternate stylesheet"><LINK media=3Dprint=20
href=3D"http://articles.latimes.com/stylesheets/print.css?1217444655"=20
type=3Dtext/css rel=3Dstylesheet>
<SCRIPT =
src=3D"http://topics.latimes.com/javascripts/contextual_links.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://articles.latimes.com/javascripts/prototype.js?1217444655"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://articles.latimes.com/javascripts/effects.js?1217444655"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://articles.latimes.com/javascripts/dragdrop.js?1217444655"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://articles.latimes.com/javascripts/controls.js?1217444655"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://articles.latimes.com/javascripts/application.js?1217444655"=
=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
    var dt =3D new Date();=0A=
    var tm =3D dt.getTime().toString();=0A=
    var ord =3D tm.substring(tm.length-8, tm.length);=0A=
=0A=
    TopicsContextualLinks.link_topics_on_load("article_body", =
"related_topics", 6);=0A=
  </SCRIPT>
<!-- We're reserving the class attribute on the body for future use in=0A=
     helping to define styles for particular types of pages -->
<META content=3D"MSHTML 6.00.6001.18099" name=3DGENERATOR></HEAD>
<BODY class=3Darticle-local id=3Dlatimes_com>
<DIV id=3Dcontainer><!-- Content is placed first in the HTML document =
for SEO purposes=0A=
     and the header (below) is absolutely positioned above it in the =
browser -->
<DIV id=3Dcontent>
<DIV id=3Dbreadcrumbs>You are here: <A =
href=3D"http://www.latimes.com/">LAT Home</A>=20
&gt; <A href=3D"http://articles.latimes.com/">Articles</A> &gt; <A=20
href=3D"http://articles.latimes.com/2001/">2001</A> &gt; <A=20
href=3D"http://articles.latimes.com/2001/jun/">June</A> &gt; <A=20
href=3D"http://articles.latimes.com/2001/jun/03/">03</A> &gt; <A=20
href=3D"http://articles.latimes.com/2001/jun/03/local">California | =
Local</A>=20
</DIV><!-- top shaded canvas edge -->
<DIV class=3Dcanvas_top_left>
<DIV class=3Dcanvas_top_right>
<DIV class=3Dcanvas_top>&nbsp;</DIV></DIV></DIV><!-- side shaded canvas =
edges -->
<DIV class=3Dcanvas_outer>
<DIV class=3Dcanvas_inner><!-- Actual element where the content lives =
-->
<DIV class=3Dcanvas_content><!-- Main Content -->
<DIV id=3Dcontent_main>
<P style=3D"COLOR: green"></P>
<DIV id=3Dcontent_cap>
<H2><SPAN class=3Dlede>Archive for</SPAN> <A=20
href=3D"http://articles.latimes.com/2001/jun/03/">Sunday, June 03,=20
2001</A></H2></DIV>
<H1>A Mural Hangs in&nbsp;Limbo</H1>
<DIV id=3Darticle_content>
<P class=3Dbyline>By <A=20
href=3D"http://articles.latimes.com/writers/noaki-schwartz">Noaki=20
Schwartz</A><BR><A class=3Ddate=20
href=3D"http://articles.latimes.com/2001/jun/03/local">June 03, 2001</A> =
<SPAN=20
class=3Dprint_edition><EM>in print edition B-3</EM></SPAN> </P>
<DIV id=3Darticle_body>
<P>When artist Judith Hernandez went to West Los Angeles in 1976&nbsp;to =
help=20
unite a community torn by gang violence, she never imagined =
that&nbsp;her mural=20
would be controversial decades&nbsp;later.</P>
<P>A debate has erupted over the future of the =
Latino-themed&nbsp;painting that=20
celebrated cooperation between residents and the Sotel&nbsp;gang. =
Although some=20
feel that the colorful depiction of the Virgin of&nbsp;Guadalupe with =
her arms=20
outstretched over gang members is an important piece&nbsp;of history, =
others say=20
it=92s simply a stinging reminder of the&nbsp;community=92s =
darker&nbsp;past.</P>
<P>City officials say that the recreation center on which the =
mural&nbsp;is=20
painted is crumbling and must be renovated, and that there is no =
easy&nbsp;way=20
to save the&nbsp;painting.</P>
<P>For the last year, they have been planning a $2.2-million =
project&nbsp;for=20
Stoner Park that will include two new swimming pools and =
the&nbsp;renovated=20
recreation center. A new artist has been commissioned to =
create&nbsp;metal=20
turtles playing with balls for the pool room, officials said, =
but&nbsp;there are=20
no plans for a new&nbsp;mural.</P>
<P>Residents are divided over the&nbsp;issue.</P>
<P><SPAN class=3Ddquo>=93</SPAN>People here have this attitude like =
=91Gee, wouldn=92t=20
it be&nbsp;really terrible if they destroyed it?=92 But there=92s this =
sense=20
of&nbsp;powerlessness about it,=94 said Janet Canterbury, who has lived =
in the=20
area for two&nbsp;years and jogs past the mural with her beagle=20
every&nbsp;day.</P>
<P>On the other hand, Raymond Cano, a 50-year resident who =
has&nbsp;always=20
opposed the mural, was relieved to hear that what he called =
the&nbsp;=93source of=20
pride for gang members=94 is going to be&nbsp;removed.</P>
<P>Taking their name from the surrounding Sawtelle area, the =
Sotel&nbsp;gang=20
once dominated Stoner Park, spending afternoons hanging out =
and&nbsp;covering=20
any available space with graffiti. It got so bad, =
Hernandez&nbsp;recalled, that=20
the park=92s modest recreation building was covered in spray&nbsp;paint. =
When the=20
menacing letters started to spread to nearby garage doors,&nbsp;city =
officials=20
recruited&nbsp;Hernandez.</P>
<P>Gang members and residents were given a role in coming up =
with&nbsp;the theme=20
of the mural and helping to paint it. In return, the two&nbsp;dozen =
Sotel=20
members agreed to stop spray-painting the area. =93Those who&nbsp;once =
destroyed=20
would help rebuild,=94 said Hernandez, who now lives =
in&nbsp;Chicago.</P>
<P>It wasn=92t easy. Gang members in their khaki pants =
and&nbsp;suspenders=20
contrasted with the more straight-laced adults both in dress=20
and&nbsp;mural&nbsp;proposals.</P>
<P><SPAN class=3Ddquo>=93</SPAN>The kids wanted guns and cops getting =
shot, and the=20
residents&nbsp;wanted sunshine and little international faces,=94 =
Hernandez said.=20
=93They&nbsp;were light-years&nbsp;apart.=94</P>
<P>But an unusual relationship unfolded. And when the&nbsp;controversial =
project=20
was unveiled amid the protests of a few officials who&nbsp;complained =
that it=20
glorified gangs, some community members passionately stood&nbsp;behind =
the=20
teenagers, Hernandez&nbsp;said.</P>
<P>The final artwork was an =93idealized version of who these =
kids&nbsp;were, with=20
the Virgin of Guadalupe surrounding and protecting&nbsp;them.=94</P>
<P>Since then, the area once known as a working-class =
Latino&nbsp;neighborhood=20
has become gentrified. Over the years, the one-story =
Spanish-style&nbsp;homes=20
have been replaced by high-priced condos and luxury&nbsp;apartments.</P>
<P>Stoner Park, the community=92s linchpin, has also changed. On =
any&nbsp;given=20
day there are kids playing basketball next to the Japanese =
gardens,&nbsp;young=20
parents lulling babies in strollers and retired veterans engaging =
in&nbsp;tai=20
chi under the cherry&nbsp;trees.</P>
<P><SPAN class=3Ddquo>=93</SPAN>The mural just sits and looks over all =
of us with=20
this&nbsp;beautiful Mexican spiritual flavor,=94 Canterbury said. =
=93Without it, it=20
will be&nbsp;a completely different experience going to =
the&nbsp;park.=94</P>
<P>The history of the mural has been forgotten by many people,&nbsp;who=20
generally remember something vague about the police and gang =
members&nbsp;when=20
asked about its&nbsp;significance.</P>
<P>Some older residents who lived through the experience, =
however,&nbsp;say it=92s=20
time to let go of the&nbsp;past.</P>
<P><SPAN class=3Ddquo>=93</SPAN>You have to contribute to a community to =
be a=20
member,=94 said&nbsp;one elderly man. =93They didn=92t go to war, go =
through the=20
Depression, or&nbsp;pay taxes. A picture of Cesar Chavez would have=20
been&nbsp;better.=94</P>
<P>Although city officials have tried to save the mural, the =
center=92s&nbsp;new=20
architect says that will be impossible because of the cracked =
stucco&nbsp;it is=20
painted&nbsp;on.</P>
<P>They have held meetings and discussed the expensive prospect&nbsp;of =
removing=20
the mural in blocks, the legal implications of reproducing&nbsp;it and =
the=20
possibility of taking a life-size photograph of the artwork&nbsp;to =
mount inside=20
the new&nbsp;building.</P>
<P>Supporters are running out of&nbsp;time.</P>
<P><SPAN class=3Ddquo>=93</SPAN>We thought the giant-sized poster of the =
mural would=20
be a&nbsp;solution,=94 said Stoner Park recreation coordinator Jason =
Liss, =93but at=20
the very&nbsp;next meeting, the same people were there repeating, =91How =
can we=20
save&nbsp;the mural?=92&nbsp;=94</P></DIV>
<P id=3Dsave_share><STRONG>Save/Share:</STRONG> &nbsp; <A=20
href=3D"http://www.mixx.com/submit/story?page_url=3Dhttp://articles.latim=
es.com/2001/jun/03/local/me-6023&amp;title=3DA+Mural+Hangs+in+Limbo&amp;p=
artner=3DLAT"><IMG=20
title=3DMixx height=3D18 alt=3DMixx=20
src=3D"http://articles.latimes.com/images/external/mixx.gif" =
width=3D17></A> &nbsp;=20
<A=20
href=3D"http://www.google.com/bookmarks/mark?op=3Dadd&amp;bkmk=3Dhttp://a=
rticles.latimes.com/2001/jun/03/local/me-6023&amp;title=3DA+Mural+Hangs+i=
n+Limbo&amp;annotation=3D&amp;labels=3D"><IMG=20
title=3DGoogle height=3D18 alt=3DGoogle=20
src=3D"http://articles.latimes.com/images/external/google.gif" =
width=3D17></A>=20
&nbsp; <A=20
href=3D"http://digg.com/submit?phase=3D2&amp;url=3Dhttp://articles.latime=
s.com/2001/jun/03/local/me-6023&amp;title=3DA+Mural+Hangs+in+Limbo&amp;bo=
dytext=3D"><IMG=20
title=3DDigg alt=3DDigg =
src=3D"http://articles.latimes.com/images/external/digg.gif">=20
</A>&nbsp; <A=20
href=3D"http://del.icio.us/post?v=3D4&amp;noui&amp;jump=3Dclose&amp;url=3D=
http://articles.latimes.com/2001/jun/03/local/me-6023&amp;title=3DA+Mural=
+Hangs+in+Limbo&amp;notes=3D"><IMG=20
title=3Ddel.icio.us height=3D18 alt=3Ddel.icio.us=20
src=3D"http://articles.latimes.com/images/external/delicious.gif" =
width=3D17></A>=20
&nbsp; <A=20
href=3D"http://www.facebook.com/sharer.php?u=3Dhttp://articles.latimes.co=
m/2001/jun/03/local/me-6023&amp;t=3DA+Mural+Hangs+in+Limbo"><IMG=20
title=3DFacebok height=3D18 alt=3DFacebok=20
src=3D"http://articles.latimes.com/images/external/facebook.gif" =
width=3D17></A>=20
&nbsp; <A=20
href=3D"http://myweb.search.yahoo.com/myresults/bookmarklet?ei=3DUTF-8&am=
p;u=3Dhttp://articles.latimes.com/2001/jun/03/local/me-6023&amp;t=3DA+Mur=
al+Hangs+in+Limbo&amp;d=3D"><IMG=20
title=3DYahoo height=3D18 alt=3DYahoo=20
src=3D"http://articles.latimes.com/images/external/yahoo.gif" =
width=3D17></A> &nbsp;=20
<A=20
href=3D"http://reddit.com/submit?url=3Dhttp://articles.latimes.com/2001/j=
un/03/local/me-6023&amp;title=3DA+Mural+Hangs+in+Limbo"><IMG=20
title=3DReddit height=3D18 alt=3DReddit=20
src=3D"http://articles.latimes.com/images/external/reddit.gif" =
width=3D17></A>=20
&nbsp; <A=20
href=3D"http://www.newsvine.com/_wine/save?aff=3Dlatimes&amp;u=3Dhttp://a=
rticles.latimes.com/2001/jun/03/local/me-6023&amp;h=3DA+Mural+Hangs+in+Li=
mbo&amp;e=3D&amp;t1=3D"><IMG=20
title=3DNewsvine height=3D18 alt=3DNewsvine=20
src=3D"http://articles.latimes.com/images/external/newsvine.gif" =
width=3D17></A>=20
</P>
<DIV class=3Drelated_articles>
<H3>Related Articles</H3>
<UL>
  <LI><A=20
  =
href=3D"http://articles.latimes.com/2005/jan/09/entertainment/ca-mural9">=
They=92ve=20
  barely scratched the&nbsp;surface</A> <SPAN class=3Ddate>Jan 09, =
2005</SPAN>=20
  <LI><A =
href=3D"http://articles.latimes.com/1997/sep/16/local/me-32770">Oldest=20
  Firm=92s Murals Bring Past to&nbsp;Life</A> <SPAN class=3Ddate>Sep 16, =
1997</SPAN>=20

  <LI><A =
href=3D"http://articles.latimes.com/2007/nov/22/home/hm-wall22">Sprouting=
=20
  from the concrete </A><SPAN class=3Ddate>Nov 22, 2007</SPAN>=20
  <LI><A=20
  =
href=3D"http://articles.latimes.com/2007/jan/14/entertainment/ca-lray14">=
Hey,=20
  didn=92t Uncle <SPAN class=3Dcaps>L.</SPAN> paint that&nbsp;mural?</A> =
<SPAN=20
  class=3Ddate>Jan 14, 2007</SPAN>=20
  <LI><A =
href=3D"http://articles.latimes.com/2000/jan/02/entertainment/ca-49798">A=
=20
  Story, but No Writing, Is on the&nbsp;Wall</A> <SPAN class=3Ddate>Jan =
02,=20
  2000</SPAN> </LI></UL></DIV>
<DIV class=3Dadditional_links>
<DIV><A href=3D"http://articles.latimes.com/writers/noaki-schwartz">More =
articles=20
by Noaki Schwartz</A></DIV>
<DIV><A href=3D"http://articles.latimes.com/2001/6/3/local">More =
articles from the=20
California | Local section</A></DIV></DIV></DIV>
<P id=3Dpaper_subscription><A=20
href=3D"https://myaccount.latimes.com/l?name=3Dlatcom">California and =
the world. Get=20
the Times from $1.35 a week</A> </P>
<DIV class=3Dadvertisement id=3Dadsense>
<DIV class=3Dad_heading><SPAN><A=20
href=3D"http://articles.latimes.com/2001/jun/03/local/me-6023#">Ads by=20
Google</A></SPAN> </DIV></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
					//<![CDATA[=0A=
					var loc =3D window.location.href+"";=0A=
				=0A=
					// Google Adsense Configuration=0A=
					google_ad_client 		=3D "ca-tribune_news3_html";=0A=
					google_ad_output 		=3D "js";=0A=
					google_ad_channel 		=3D "latimes_articles";=0A=
					google_ad_type 			=3D "text";=0A=
					google_color_line 		=3D "ff0000";=0A=
					google_safe				=3D "high";=0A=
					google_feedback 	    =3D "on";=0A=
					google_max_num_ads 		=3D "5";=0A=
					=0A=
					if (loc.indexOf("latimes.com") < 0) {=0A=
						google_adtest =3D "off";=0A=
					}=0A=
=0A=
					if (loc.indexOf("latimes.com") >=3D 0) {=0A=
						google_page_url 	=3D loc;=0A=
						google_ad_channel 	=3D "latimes_articles";=0A=
					} else {=0A=
						google_ad_channel 	=3D "latimes_section";=0A=
						google_kw 			=3D "plastic surgery";=0A=
						google_kw_type 		=3D "broad";=0A=
						google_page_url 	=3D loc;=0A=
					}=0A=
					=0A=
					google_last_modified_time 	=3D Date.parse(document.lastModified) / =
1000;=0A=
					google_referrer_url 		=3D document.referrer;=0A=
					=0A=
					// Unused=0A=
					//google_skip	=3D "3";=0A=
					=0A=
					// Callback function called by Google=0A=
					var google_ad_request_done =3D function(ads) {=0A=
						var adSenseRenderer =3D new AdSenseRenderer($("adsense"));=0A=
						adSenseRenderer.render(ads);=0A=
					}=0A=
					//]]>=0A=
				</SCRIPT>

<SCRIPT src=3D"http://pagead2.googlesyndication.com/pagead/show_ads.js"=20
type=3Dtext/javascript></SCRIPT>
</DIV><!-- Right rail -->
<DIV class=3Dright_rail id=3Dcontent_sub>
<DIV id=3Demail_and_print><!-- Email, Print, Text Size and Single Page =
links -->
<SCRIPT type=3Dtext/javascript>=0A=
	digg_url =3D 'http://articles.latimes.com/2001/jun/03/local/me-6023';=0A=
	digg_skin =3D 'compact';=0A=
	digg_title =3D "A Mural Hangs in Limbo";=0A=
        digg_topic =3D 'California | Local';=0A=
	</SCRIPT>

<SCRIPT src=3D"http://digg.com/tools/diggthis.js" =
type=3Dtext/javascript></SCRIPT>
| <A onclick=3D"window.open('','newwin','height=3D380,width=3D350')"=20
href=3D"http://topics.latimes.com/mailer/email_this" =
target=3Dnewwin>Email This</A>=20
| <A href=3D"javascript:window.print();">Print This</A> | Text Size: <A=20
id=3Dtext_increase href=3D"javascript:void(0);"><IMG title=3DIncrease =
height=3D9=20
alt=3DIncrease =
src=3D"http://articles.latimes.com/images/btn-text-increase.gif"=20
width=3D9></A> <A id=3Dtext_decrease href=3D"javascript:void(0);"><IMG =
title=3DDecrease=20
height=3D9 alt=3DDecrease=20
src=3D"http://articles.latimes.com/images/btn-text-decrease.gif" =
width=3D9></A>=20
</DIV>
<DIV class=3Dadvertisement>
<DIV class=3Dad_heading><SPAN>Advertisement</SPAN> </DIV>&nbsp;
<SCRIPT language=3DJavaScript type=3Dtext/javascript>=0A=
              //<![CDATA[=0A=
              document.write('<script language=3D"JavaScript" =
src=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=3D=
ur;pos=3D1;dcopt=3Dist;sz=3D300x250;tile=3D1;ord=3D' + ord + '?" =
type=3D"text/javascript"></scr' + 'ipt>');=0A=
              //]]>=0A=
              </SCRIPT>
 <NOSCRIPT><A=20
href=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=
=3Dur;pos=3D1;dcopt=3Dist;sz=3D300x250;tile=3D1;ord=3D87654321?"=20
target=3D_blank><IMG height=3D250 alt=3D""=20
src=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=3D=
ur;pos=3D1;dcopt=3Dist;sz=3D300x250;tile=3D1;ord=3D87654321?"=20
width=3D300 border=3D0></A></NOSCRIPT> </DIV>
<DIV class=3Ddigg_list>
<SCRIPT type=3Dtext/javascript>=0A=
digg_id =3D 'digg-widget-container'; //make this id unique for each =
widget you put on a single page.=0A=
digg_width =3D '336px';=0A=
digg_height =3D '250px';=0A=
digg_theme =3D 'digg-widget-theme3';=0A=
digg_title =3D 'Upcoming stories from the LA Times';=0A=
</SCRIPT>

<SCRIPT src=3D"http://digg.com/tools/widgetjs" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
src=3D"http://digg.com/tools/services?type=3Djavascript&amp;callback=3Ddi=
ggwb&amp;endPoint=3D/stories/upcoming&amp;domain=3Dwww.latimes.com&amp;so=
rt=3Ddigg_count-desc&amp;count=3D10"=20
type=3Dtext/javascript></SCRIPT>
</DIV>
<DIV class=3D"box_striped related_keywords">
<H3>Related Keywords</H3>
<DIV class=3Dcontent>
<UL>
  <LI><A href=3D"http://articles.latimes.com/keyword/art">art</A>=20
  <LI><A href=3D"http://articles.latimes.com/keyword/murals">murals</A>=20
  <LI><A =
href=3D"http://articles.latimes.com/keyword/demolition">demolition</A>=20
  <LI><A=20
  =
href=3D"http://articles.latimes.com/keyword/recreation-centers">recreatio=
n=20
  centers</A> </LI></UL></DIV></DIV>
<DIV class=3Dbox_striped id=3Drelated_topics></DIV><!-- Tabbed "Most *" =
box -->
<DIV class=3Dbox_faded id=3Dmost_tabs>
<UL class=3Dtabs>
  <LI class=3Dselected><A href=3D"javascript:void(0);">Most Viewed</A> =
</LI>
  <LI><A href=3D"javascript:void(0);">Most Emailed</A> </LI></UL>
<DIV class=3Dcontent>
<DIV class=3D"tab_panel selected">
<OL>
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359394958/la-na-campai=
gn8-2008aug08,0,2797540.story">DHL=20
  deal gone sour haunts McCain in Ohio</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359438224/la-fi-techbl=
og8-2008aug08,0,2837557.story">Apple=20
  removes I Am Rich, a $1,000 featureless iPhone application</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359453432/la-me-test8-=
2008aug08,0,1941799.story">College=20
  Board to debut an 8th-grade PSAT exam</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359572760/la-me-eight8=
-2008aug08,0,6002755.story">The=20
  number 8 is more than enough for the Olympics -- and Chinese =
Americans</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359538618/la-me-saintj=
oes8-2008aug08,0,2662884.story">Sisters=20
  of St. Joseph of Orange not siding with healthcare workers union</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359550900/la-oe-stein8=
-2008aug08,0,6625059.column">What's=20
  so bad about foreign oil?</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359645809/la-olympics-=
photos-2008-pg,0,5172818.photogallery">2008=20
  Beijing Games opening ceremony</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359685671/la-na-bodega=
8-2008aug08,0,577260.story">The=20
  New York bodega fights for its life</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359757973/la-sp-olydwy=
re9-2008aug09,0,6100551.column">U.S.=20
  Olympian Lopez Lomong's great escape</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/MostEmailed/~3/359916469/la-me-homesc=
hool9-2008aug09,0,858947.story">Parents=20
  may home-school children without teaching credential, California court =

  says</A> </LI></OL></DIV>
<DIV class=3Dtab_panel>
<OL>
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359813832/la-fi=
-markets9-2008aug09,0,1800461.story">Dow=20
  soars 300 points as oil prices tumble</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359765725/la-na=
-mayor9-2008aug09,0,6878002.story">Detroit=20
  Mayor Kwame Kilpatrick released from jail, but faces new charges</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359813830/la-me=
-crash9-2008aug09,0,7968837.story">Witnesses=20
  say doomed helicopter was struggling from liftoff</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359836607/la-fg=
-chinese9-2008aug09,0,388787.story">China=20
  flocks to TV screens to share Olympic pride</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359765739/la-sp=
-lakers9-2008aug09,0,7995232.story">Lakers=20
  agree to terms with guard Sun Yue, 2007 second-round pick</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359836605/sns-a=
p-odd-cheerleaders-rescued,0,3077288.story">26=20
  teen cheerleaders rescued after cramming into an elevator at the =
University of=20
  Texas</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359917508/la-ig=
w-beijingstyle10-2008aug10,0,7617299.story">The=20
  world's biggest fashion show: Beijing's opening ceremony</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359891932/la-sp=
-usc9-2008aug09,0,2127984.story">Quarterback=20
  Mark Sanchez sustains injury</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359942289/la-me=
-glider9-2008aug09,0,6506386.story">Hang=20
  glider dies in crash landing in Malibu</A>=20
  <LI><A=20
  =
href=3D"http://feeds.latimes.com/~r/latimes/mostviewed/~3/359942288/la-na=
-edwardsmedia9-2008aug09,0,917733.story">Mainstream=20
  media finally jump on Edwards' affair</A> </LI></OL></DIV></DIV></DIV>
<DIV class=3Dadvertisement>
<DIV class=3Dad_heading><SPAN>Advertisement</SPAN> </DIV>&nbsp;
<SCRIPT language=3DJavaScript type=3Dtext/javascript>=0A=
              //<![CDATA[=0A=
              document.write('<script language=3D"JavaScript" =
src=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=3D=
ur;pos=3D2;sz=3D300x250;tile=3D2;ord=3D' + ord + '?" =
type=3D"text/javascript"></scr' + 'ipt>');=0A=
              //]]>=0A=
              </SCRIPT>
 <NOSCRIPT><A=20
href=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=
=3Dur;pos=3D2;sz=3D300x250;tile=3D2;ord=3D87654321?"=20
target=3D_blank><IMG height=3D250 alt=3D""=20
src=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=3D=
ur;pos=3D2;sz=3D300x250;tile=3D2;ord=3D87654321?"=20
width=3D300 border=3D0></A></NOSCRIPT> </DIV></DIV><!-- Clearing DIV to =
make sure the background reaches the bottom of main content and right =
rail -->
<DIV class=3Dclear id=3Dcontent_main_clear></DIV></DIV></DIV></DIV><!-- =
end of side shaded canvas edges --><!-- bottom shaded canvas edge -->
<DIV class=3Dcanvas_bottom_left>
<DIV class=3Dcanvas_bottom_right>
<DIV class=3Dcanvas_bottom>&nbsp;</DIV></DIV></DIV></DIV><!-- End of =
content --><!-- This element is absolutely positioned at the top of the =
page -->
<DIV id=3Dbranding>
<DIV class=3Dcanvas_outer>
<DIV class=3Dcanvas_inner>
<DIV class=3Dcanvas_content><!-- Leaderboard (728x90) ad banner  -->
<DIV class=3Dleaderboard>
<SCRIPT language=3DJavaScript type=3Dtext/javascript>=0A=
              //<![CDATA[=0A=
              document.write('<script language=3D"JavaScript" =
src=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=3D=
ur;pos=3DT;sz=3D728x90;tile=3D3;ord=3D' + ord + '?" =
type=3D"text/javascript"></scr' + 'ipt>');=0A=
              //]]>=0A=
              </SCRIPT>
<NOSCRIPT><A=20
href=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=
=3Dur;pos=3DT;sz=3D728x90;tile=3D3;ord=3D87654321?"=20
target=3D_blank><IMG height=3D90 alt=3D""=20
src=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=3D=
ur;pos=3DT;sz=3D728x90;tile=3D3;ord=3D87654321?"=20
width=3D728 border=3D0></A></NOSCRIPT> </DIV>
<DIV id=3Dnav_tools>&nbsp; <!--=0A=
          Hello Username =0A=
          <a id=3D"nav_profile" href=3D"/profile">Profile</a> =0A=
          <a id=3D"nav_logout" href=3D"/logout">Logout</a> --></DIV>
<DIV id=3Dnav_main>
<DIV id=3Dnav_features><A class=3Dend =
href=3D"http://www.latimes.com/">LAT Home</A> |=20
<A href=3D"http://my.latimes.com/">My LATimes</A> | <A=20
href=3D"http://www.latimes.com/news/printedition/front/?track=3Dleftnav-p=
rintedition">Print=20
Edition</A> | <A=20
href=3D"http://www.latimes.com/about/site/la-about-sitemap,0,2204194.html=
story?coll=3Dla-navigation&amp;track=3Dleftnav-sitemap">All=20
Sections</A> </DIV>
<DIV id=3Dnav_classified><A=20
href=3D"http://www.latimes.com/classified/jobs/?track=3Dtopnav-jobs">Jobs=
</A> | <A=20
href=3D"http://www.latimes.com/classified/cars?track=3Dtopnav-cars">Cars.=
com</A> |=20
<A=20
href=3D"http://www.latimes.com/classified/realestate/?track=3Dtopnav-real=
estate">Real=20
Estate</A> | <A class=3Dend =
href=3D"http://www.latimes.com/classified/">More=20
Classifieds</A> </DIV><BR class=3Dclear></DIV><!-- masthead -->
<DIV id=3Dmasthead>
<H2 id=3Dbranding_logo><A href=3D"http://www.latimes.com/"><IMG =
height=3D29=20
alt=3D"Los Angeles Times"=20
src=3D"http://articles.latimes.com/images/logo-lat-main.gif?1217444655"=20
width=3D223></A></H2>
<H3 id=3Dbranding_section><A =
href=3D"http://www.latimes.com/news/local">California |=20
Local</A></H3></DIV><!-- search box taken from latimes.com -->
<FORM id=3Dsitesearch name=3Dgs =
action=3Dhttp://search.latimes.com/search method=3Dget>
<P id=3Dsearch><INPUT type=3Dhidden value=3D3 name=3Dentqr> <INPUT =
type=3Dhidden=20
value=3Dxml_no_dtd name=3Doutput> <INPUT type=3Dhidden =
value=3Ddate:D:L:d1 name=3Dsort>=20
<INPUT type=3Dhidden value=3Dlatimes name=3Dclient> <INPUT type=3Dhidden =
value=3D1=20
name=3Dud> <INPUT type=3Dhidden value=3DUTF-8 name=3Doe><INPUT =
type=3Dhidden value=3DUTF-8=20
name=3Die> <INPUT type=3Dhidden value=3Dlatimes name=3Dproxystylesheet> =
<INPUT=20
type=3Dhidden value=3Ddefault_collection name=3Dsite> <INPUT =
type=3Dhidden=20
value=3Dthumbnail_small name=3Dgetfields> <INPUT class=3Dsearch_input =
maxLength=3D256=20
size=3D21 name=3Dq> <INPUT class=3Dbtn type=3Dsubmit value=3DSEARCH> =
</P>
<DIV id=3Dsmall_ad>
<SCRIPT language=3DJavaScript type=3Dtext/javascript>=0A=
              //<![CDATA[=0A=
              document.write('<script language=3D"JavaScript" =
src=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=3D=
ur;pos=3D1;sz=3D88x31;tile=3D4;ord=3D' + ord + '?" =
type=3D"text/javascript"></scr' + 'ipt>');=0A=
              //]]>=0A=
              </SCRIPT>
<NOSCRIPT><A=20
href=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=
=3Dur;pos=3D1;sz=3D88x31;tile=3D4;ord=3D87654321?"=20
target=3D_blank><IMG height=3D31 alt=3D""=20
src=3D"http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=3Ds;rg=3D=
ur;pos=3D1;sz=3D88x31;tile=3D4;ord=3D87654321?"=20
width=3D88 border=3D0></A></NOSCRIPT> </DIV></FORM><BR =
class=3Dclear><!-- section nav -->
<DIV id=3Dnav_section>
<DIV class=3Dnav>
<UL>
  <UL>
    <LI class=3Dselected><A =
href=3D"http://articles.latimes.com/local">California |=20
    Local</A> </LI>
    <LI><A href=3D"http://articles.latimes.com/sports">Sports</A> </LI>
    <LI><A href=3D"http://articles.latimes.com/business">Business</A> =
</LI>
    <LI><A =
href=3D"http://articles.latimes.com/entertainment">Entertainment</A>=20
    </LI>
    <LI><A href=3D"http://articles.latimes.com/nation">National</A> =
</LI>
    <LI><A href=3D"http://articles.latimes.com/opinion">Opinion</A> =
</LI>
    <LI><A href=3D"http://articles.latimes.com/world">World</A> </LI>
    <LI><A href=3D"http://articles.latimes.com/news">News</A> </LI>
    <LI><A href=3D"http://articles.latimes.com/home">Home &amp; =
Garden</A> </LI>
    <LI><A href=3D"http://articles.latimes.com/travel">Travel</A> </LI>
    <LI><A href=3D"http://articles.latimes.com/science">Science</A> <!--=0A=
=0A=
	    <li class=3D"selected"><a href=3D"/local">California|Local</a></li>=0A=
	    <li <a href=3D"/nation">National</a></li>=0A=
	    <li <a href=3D"/world">World</a></li>=0A=
	    <li <a href=3D"/sports">Sports</a></li>=0A=
	    <li <a href=3D"/business">Business</a></li>=0A=
	    <li <a href=3D"/entertainment">Entertainment</a></li>=0A=
	    <li <a href=3D"/health">Health</a></li>=0A=
	    <li <a href=3D"/autos">Autos</a></li>=0A=
	    <li ><a href=3D"/food">Food</a></li>=0A=
	    <li <a href=3D"/opinion">Opinion</a></li>=0A=
	    <li <a href=3D"/science">Science</a></li>=0A=
		    <li><a href=3D"/image">Image</a></li>=0A=
		    <li><a href=3D"/home">Home &amp; Garden</a></li>=0A=
	    	<li><a href=3D"/realestate">Real Estate</a></li>=0A=
	    	<li><a href=3D"/travel">Travel</a></li>=0A=
	    	<li><a href=3D"/books">Books</a></li>=0A=
	    	<li><a href=3D"/magazine">Magazine</a></li>=0A=
        --></LI>
    <LI class=3Dlast><A =
href=3D"http://articles.latimes.com/news">More</A>=20
</LI></UL></UL></DIV></DIV></DIV></DIV></DIV><!-- bottom shaded canvas =
edge -->
<DIV class=3Dcanvas_bottom_left>
<DIV class=3Dcanvas_bottom_right>
<DIV class=3Dcanvas_bottom>&nbsp;</DIV></DIV></DIV></DIV><!-- End of =
branding --><!-- Site Info -->
<DIV class=3Dcolumn_3 id=3Dsite_info><!-- top shaded canvas edge -->
<DIV class=3Dcanvas_top_left>
<DIV class=3Dcanvas_top_right>
<DIV class=3Dcanvas_top>&nbsp;</DIV></DIV></DIV>
<DIV class=3Dcanvas_outer>
<DIV class=3Dcanvas_inner>
<DIV class=3Dcanvas_content>
<DIV class=3Dcolumn>
<H4>More on LATimes.com</H4><A=20
href=3D"http://www.latimes.com/news/local/">California/Local News</A> | =
<A=20
href=3D"http://www.latimes.com/business/">Business</A> | <A=20
href=3D"http://www.latimes.com/sports/">Sports</A> | <A=20
href=3D"http://www.latimes.com/news/nationworld/world/">World News</A> | =
<A=20
href=3D"http://www.latimes.com/entertainment/news/">Entertainment</A> | =
<A=20
href=3D"http://www.latimes.com/features/health/">Health</A> | <A=20
href=3D"http://travel.latimes.com/">Travel</A> | <A=20
href=3D"http://www.latimes.com/news/opinion/">Opinion</A> </DIV>
<DIV class=3Dcolumn>
<H4>Classifieds</H4><A =
href=3D"http://www.careerbuilder.com/">CareerBuilder</A> |=20
<A href=3D"http://www.apartments.com/">Apartments.com</A> | <A=20
href=3D"http://www.cars.com/">Cars.com</A> | <A=20
href=3D"http://www.latimes.com/shopping/online/gen3-la-shoplocal-jump,0,4=
863847.htmlstory">Shopping</A>=20
| <A href=3D"http://www.recycler.com/">Recycler</A> | <A=20
href=3D"http://www.latimes.com/classified/jobs/">Jobs</A> | <A=20
href=3D"http://www.latimes.com/pets/">Pets</A> | <A=20
href=3D"http://www.latimes.com/classified/">All Classifieds</A> =
</DIV><BR=20
class=3Dclear>
<DIV id=3Dcopyright>
<DIV>
<H3><IMG height=3D18 alt=3D"Los Angeles Times"=20
src=3D"http://articles.latimes.com/images/logo-lat-gray.gif"=20
width=3D144></H3>Copyright 2008 Los Angeles Times </DIV><SPAN><A=20
href=3D"http://www.latimes.com/services/site/la-privacy,0,3125046.htmlsto=
ry">Privacy=20
Policy</A> | <A=20
href=3D"http://www.latimes.com/services/site/lat-terms,0,6713384.story">T=
erms of=20
Service</A> | <A href=3D"https://advertise.latimes.com/">Advertise</A> | =
<A=20
href=3D"https://myaccount.latimes.com/newSubscriptionZip.do?source=3Dlatw=
eb">Home=20
Delivery</A> | <A=20
href=3D"http://www.latimes.com/services/site/la-permissions-htmlstory,0,6=
817441.htmlstory">Permissions</A>=20
| <A href=3D"http://www.latimes.com/services/site/">Help &amp; =
Services</A> | <A=20
href=3D"http://www.latimes.com/services/site/la-contactus,0,1439615.htmls=
tory">Contact</A>=20
</SPAN></DIV><BR class=3Dclear></DIV></DIV></DIV><!-- bottom shaded =
canvas edge -->
<DIV class=3Dcanvas_bottom_left>
<DIV class=3Dcanvas_bottom_right>
<DIV class=3Dcanvas_bottom>&nbsp;</DIV></DIV></DIV></DIV><!-- end footer =
--></DIV><!-- SiteCatalyst code version: H.14.=0A=
Copyright 1997-2007 Omniture, Inc. More info available at=0A=
http://www.omniture.com -->
<SCRIPT =
src=3D"http://articles.latimes.com/javascripts/s_code.js?1217444655"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT id=3Domniture type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
        s.prop38 =3D "story";=0A=
        s.hier1 =3D "Latimes.com:news:local:articles || =
a-mural-hangs-in-limbo story.";=0A=
        s.hier2 =3D "TI:LA:Latimes.com:news:local:articles || =
a-mural-hangs-in-limbo story.";=0A=
        s.hier3 =3D "news:local:articles";=0A=
        s.eVar20 =3D "Latimes.com:news:local";=0A=
        s.eVar21 =3D "story";=0A=
          s.channel =3D "Latimes.com:news:local";=0A=
        s.server =3D "articles.latimes.com";=0A=
        s.pageName =3D "Latimes.com:news:local:articles: || =
a-mural-hangs-in-limbo story.";=0A=
        s.prop21 =3D "Latimes.com:news:local:articles: || story.";=0A=
        s.prop28 =3D "";=0A=
  =0A=
/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/=0A=
var s_code=3Ds.t();if(s_code)document.write(s_code)//]]></SCRIPT>

<SCRIPT type=3Dtext/javascript><!--=0A=
if(navigator.appVersion.indexOf('MSIE')>=3D0)document.write(unescape('%3C=
')+'\!-'+'-');=0A=
//--></SCRIPT>
<NOSCRIPT><A title=3D"Web Analytics" =
href=3D"http://www.omniture.com/"><IMG height=3D1=20
alt=3D"" src=3D"http://m.trb.com/b/ss/tribprod/1/H.14--NS/0" width=3D1=20
border=3D0></A></NOSCRIPT><!--/DO NOT REMOVE/--> <!-- End SiteCatalyst =
code version: H.14. --><!-- SimplyTabby=0A=
		=0A=
application_revision: tags/20080730@10070=0A=
environment: production=0A=
mongrel_port: 8054=0A=
		=0A=
YOI0DT+f4pcuaxaqVMdqo2esZkxsbZ3EXnf6n3P4mZe/seTLZ20nYm32BkxN=0A=
/BYufiKS2V2fTW8AZj7HfGtw/SVafKnjlPCMV5wpI/zOJmYP3xPYVTYW5Tro=0A=
0V7Dil6MPtlMyp3y699D6WKbtPItYtks5zPWBIFS4gp87nLUN+LL+iS4LiPU=0A=
y2Qu80ctP6MAcTcT8V6ERF7/sHxyk/hO9/Kf9Kl9PJkSV2LKjVFzghsFuUoc=0A=
D5QYixb7pcH5x8A2=0A=
=0A=
	=0A=
--></BODY></HTML>

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/external/mixx.gif

R0lGODlhEQASAMQAAP///6oXH8MoLsMmLcInLcQnMMQnLuRNVv///f7//+RNVMMmL//+/9Y/RsIn
L8MoMNQ/RdVARtQ+R/7+/tU+RakYH6sYIKkYHeVOVeVOV+ZMVNU+Q+NMU+NNVuZMVqwWHyH5BAAA
AAAALAAAAAARABIAAAWuIJAAZGmSCXIy5wRMyVgyTUNFzdZIkQRRJglHozgcMIdO0RgoQRSFwqBA
MBAIjoKgSaIoHIOB46ElCAyLJgOSGRBOKoRAUAE0FA/0S2UKcyEeBQ8qbxMLDAhVagARBwIkCyQG
AAwCBVx2B28AkQADAAhomI2PAAUkpQIDFk54A2cDC3MOBJcoEQoGA1avBQZgDx8lEo5Vta8PWAR1
JQHOARbPARfOJ9bXKNgmKQAhADs=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/external/google.gif

R0lGODlhEQASAMQAAGeaZ+r9/SQ7eLjT/pCoyvb85tj/2Dlej/T//pI5NOf+2Bokif3+/H2N59v7
/k1qo8fU08/b+P7884+cp+j/5sv3+9Tn9fP+9Gh10/v3/tX/4e/1/vTz8P/28rz3vfDr/ywAAAAA
EQASAAAFsiAjjmQ5HkCqrqt4KDBseJpGFVWVuNflEA+B8EEYBCg7xiEQqAgsm41jINQUkocLAqOQ
dDKZiwWC6CQfgYng9mUgmBcJVtMQMDpuMAIhuboqBwcdEhciG3sFfkoOBwIcDD0MEnsIigcODwsM
HAgXHBAfYxdYCBMLAZ0SEQILCxNmIg8ZGwJkmxmhCwQZWEwWCw0OAQ5TupZ7ARitQkIYFHIuNhoO
GgbW1zVJLNsqSSbfIyEAOw==

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/external/digg.gif

R0lGODlhEQASAMQAANDQ0PT09Pj4+MvLy9zc3Ozs7N7e3p6enqioqNjY2NbW1qamppKSkujo6OHh
4ZWVla+vr6KiouPj4+bm5uTk5KSkpNTU1JycnJaWlvz8/P39/Zqamvv7+/7+/pmZmf///ywAAAAA
EQASAAAFx+AnjmQ5dqf2ZR/HneKrZa+LQMjyoGNwXBfVJ9KZXQg8TkSQ6WA6AoSg0PAYWJ8Dp8MJ
OB6QRWFCwCwqoseqYEhsohIH4JLwiDCfAoEwwDM2HoB1IhsacQADGwETCQAECQpqHxoXGAyVOXkN
BA4Xki0fhZMQAhMGDgkHBDEfHQcCrREfFAaPDBMnHhh2HxAZBAgEFh4JMRuTH08XHw4IAAp0IxgC
Ag3HCx8KCBYADBIjuoAPHAcbGBeXG6siASKwH+08NCb0JiEAOw==

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/external/delicious.gif

R0lGODlhEQASAMQAAPr6/icpKrq7txYD+CYhn+fo/eXl4p2gwx8bagYFB9zc29rc1CoR9VlTn/j/
7eDh3tXV1ezy/vz+99LTy0E8ozQtwvLu/x8gHvj/9jw6O0BCPeLh6cDF2/j4+AAAAP///ywAAAAA
EQASAAAFl+AnjmQ5BleApghCtO0lyqIkRQ2l6w0dAB+ABBMhDI7IgCjQAQ4jFeSRofzQAA4HVDqg
zkRYbVTqtX5sQMsYWf5JDLfCelq9ZDIafObA7x98HoGCHB0FhgUWdQmBCY0CDwoLkgtVAYyMAgYP
C5GUSx6LoAkCBQqREwY0F4yNowYbCpsPlYKhArAKEJB1KikpKCorVSbEIyEAOw==

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/external/facebook.gif

R0lGODlhEQASAMQAAGmGt+v7/0tYdf34/0VUmEhghzdXikRYh/r+89fu//X+/+///ztWmjpjj/b5
/z1blD5ZnGd3rj5UkWdxjjpaoff/+jhYkTNakjFahnuAwj9QfURdnF5zoHuFtv7+/v///ywAAAAA
EQASAAAFjeAnjmRpnmghrKxwsBP5WA/EWMehaoREWjSb5MEJGCUbko3BgBAOxsCCQFAym4+DQuGi
kpoS2guBEPCqoybk8VgsyJUpWkRhbC6NRIKsb5LqGwYYDwVkLnY/FgwNDQ8aDh4CBhcXShsMGBgG
Bx4OAg+UJACjoxEZAwMRow2iABmkpwMdqyQttjAoubq5IQA7

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/external/yahoo.gif

R0lGODlhEQASAMQAAP/Kzf3x5GAAAP/+88sXFagpM84TMfz9/xICAv/++v/0///4//z08PX//+v/
///u+fwBBf/S6JkkMv/j67oSEsghG/j3/f/7+/r+//n/+3c+P///7fv////9//7+/v///ywAAAAA
EQASAAAFtuAnjmQ5dlfiMcPWdVnGedclLkmatBYs07bP4NJxOBQL5GswwDREtaJj8UguBw2MKBIB
cCeMjXjD4dREhXRBonmMyeYgokIgCBANg4FQoVQgECIHAHQVDQ4RewKEgCIoAXUVAHoIC5MFCI4X
AwAEfnYLHXoFAiIJFhYXG4CZHQprCBmCBxYHqxB4HQsRAgcMghYDEmsSwwEaGhMJCSIeQgLQ0QEM
CA8DzM0e2tvbJh/c4M7e4yYhADs=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/external/reddit.gif

R0lGODlhEQASAMQAAK6wsmppaPexlsjDwebn5/X/+8uWfv/ozoaFg/Xz7//9/8FwUpSUldPW2P36
9vf39+3t8Oz18v7Gqv/++tDNy6Cdm/v6/Hl3ePj///r/+PL0+d/f3ru9vv39/f/+/////ywAAAAA
EQASAAAFvOAnjmQpZlmhqlh0MRcCdN2HrgWGAVxUIZyP5eMpeiwJACDGgRBIxkrgAqAQNgBEgAGp
iSYBxEEgOUgECUagQZpc0AbDeOHYXBJDj0LBAVg0EB8JBB0UFSN6ChAXAxAMAAwbFBcbHw82KxFa
FRUwlJYnKxgxAwOGAQleRHseGzI6Fg1AeasKFosAGhgFSw0el18TEw9SDhMfCAipRcHCGwEUDhAB
QSKqIg9TAQAB3ZXXHx0PFH19pcAm6SYhADs=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/external/newsvine.gif

R0lGODlhEQASAJEAAP///wBUIv///wAAACH5BAEAAAIALAAAAAARABIAAAI2hI+Zwe2xGJAPnmZg
RS9reXUWFn4eeWZTV4IUeGIjvJo1TX4Ot681v5tZYq4eUYci3oaKJqIAADs=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/btn-text-increase.gif

R0lGODlhCQAJAIABAAB6qv///yH5BAEAAAEALAAAAAAJAAkAAAIRhI+hG7bwoJINIktzjizeUwAA
Ow==

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/btn-text-decrease.gif

R0lGODlhCQAJAIABAAB6qv///yH5BAEAAAEALAAAAAAJAAkAAAIQhI+hG8brXgPzTHllfKiDAgA7

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=s;rg=ur;pos=1;dcopt=ist;sz=300x250;tile=1;ord=87654321?

document.write('<!-- begin ad tag-->\n<script language=3D\"JavaScript\" =
src=3D\"http://a.collective-media.net/adj/cm.latimes/;sz=3D300x250;click0=
=3D;ord=3D3977036?\" =
type=3D\"text/javascript\"><\/script>');document.write('\n<noscript><a =
href=3D\"http://a.collective-media.net/jump/cm.latimes/;sz=3D300x250;clic=
k0=3D;ord=3D3977036?\" target=3D\"_blank\"><img =
src=3D\"http://a.collective-media.net/ad/cm.latimes/;sz=3D300x250;click0=3D=
;ord=3D3977036?\" width=3D\"300\" height=3D\"250\" border=3D\"0\" =
alt=3D\"\"></a></noscript>\n<!-- End ad tag -->');=0A=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=s;rg=ur;pos=2;sz=300x250;tile=2;ord=87654321?

document.write('<iframe =
src=3D\"http://view.atdmt.com/APM/iview/trbnndrv0010000970apm/direct;wi.3=
00;hi.250/01/3977255?click=3Dhttp://ad.doubleclick.net/click%3Bh=3Dv8/371=
f/3/0/%2a/l%3B206160255%3B0-0%3B0%3B12926869%3B4307-300/250%3B23399934/23=
417787/1%3B%3B%7Eokv%3D%3Bptype%3Ds%3Brg%3Dur%3Bpos%3D2%3Bsz%3D300x250%3B=
tile%3D2%3B%7Eaopt%3D6/0/ff/1%3B%7Esscs%3D%3f\" frameborder=3D\"0\" =
scrolling=3D\"no\" marginheight=3D\"0\" marginwidth=3D\"0\" =
topmargin=3D\"0\" leftmargin=3D\"0\" allowtransparency=3D\"true\" =
width=3D\"300\" height=3D\"250\">\n');=0A=
=0A=
document.write('<a =
href=3D"http://ad.doubleclick.net/click%3Bh=3Dv8/371f/3/0/%2a/l%3B2061602=
55%3B0-0%3B0%3B12926869%3B4307-300/250%3B23399934/23417787/1%3B%3B%7Eokv%=
3D%3Bptype%3Ds%3Brg%3Dur%3Bpos%3D2%3Bsz%3D300x250%3Btile%3D2%3B%7Eaopt%3D=
6/0/ff/1%3B%7Esscs%3D%3fhttp://clk.atdmt.com/APM/go/trbnndrv0010000970apm=
/direct;wi.300;hi.250/01/3977255" target=3D"_blank"><img =
src=3D"http://view.atdmt.com/APM/view/trbnndrv0010000970apm/direct;wi.300=
;hi.250/01/3977255"/></a>');=0A=
=0A=
document.write('<noscript><a =
href=3D\"http://ad.doubleclick.net/click%3Bh=3Dv8/371f/3/0/%2a/l%3B206160=
255%3B0-0%3B0%3B12926869%3B4307-300/250%3B23399934/23417787/1%3B%3B%7Eokv=
%3D%3Bptype%3Ds%3Brg%3Dur%3Bpos%3D2%3Bsz%3D300x250%3Btile%3D2%3B%7Eaopt%3=
D6/0/ff/1%3B%7Esscs%3D%3fhttp://clk.atdmt.com/APM/go/trbnndrv0010000970ap=
m/direct;wi.300;hi.250/01/3977255\" target=3D\"_blank\"><img =
border=3D\"0\" =
src=3D\"http://view.atdmt.com/APM/view/trbnndrv0010000970apm/direct;wi.30=
0;hi.250/01/3977255\" /></a></noscript></iframe>');=0A=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=s;rg=ur;pos=T;sz=728x90;tile=3;ord=87654321?

document.write('<a target=3D"_blank" =
href=3D"http://ad.doubleclick.net/click;h=3Dv8/371f/0/0/%2a/w;206684203;0=
-0;0;29062307;3454-728/90;27680012/27697891/1;;~okv=3D;ptype=3Ds;rg=3Dur;=
pos=3DT;sz=3D728x90;tile=3D3;~aopt=3D0/ff/ff/ff;~fdr=3D206766435;0-0;0;12=
926869;3454-728/90;27813635/27831514/1;;~okv=3D;ptype=3Ds;rg=3Dur;pos=3DT=
;sz=3D728x90;tile=3D3;~aopt=3D2/0/ff/1;~sscs=3D%3fhttp://www.encorelasveg=
as.com"><img src=3D"http://m1.2mdn.net/viewad/1832348/encore-728x90.gif" =
border=3D0 alt=3D"Click here to find out more!"></a>');=0A=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/logo-lat-main.gif?1217444655

R0lGODlh3wAdAMQAAAAAAP///2pnaH16e6KgoZiWl4aEhb28vXNxcY+Njfb19ePi4trZ2cfGxrSz
s6uqquzs7NDQ0P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA
ABIALAAAAADfAB0AAAX/YCAGixIwAzMu6ui+cCzDDfE0AWTOfO//wKAQthgajwFFwaBoCJ6E4sOB
PD6ez8JgV+26FASu9+cYYAWGR0R8SojA7DFSYRAsCOczTu5TIBIIWAN8XnRoEIQ8eHlnaQ4OD38k
gQYQRYlGCWgGBA2BZ26YPIh+WIiiQhB1TwiXqCIOjLJnBBGfT0yvPwxYexADdQkHuj1XT8PEPgYF
Zw/EpZyQCauyCBAFzFlxyS/GVCOh3DzUBuI+xgItr57qAQ0FCAYDf08DBKcnDu3mMJoC4QEA8oGA
zwcEBGaeuOIHI9aTfUYguiCgroGZBAwMtIL1jWEfBv4GgfPhqWMMMAMa/yh4FOTAA3TOYKBwRaAS
DwXTFsY4sHGEw3QxyugcUZKggFFv/B0o1ZHlCgR73hAg8BSZ1Fwzrgl04QCBAwgREvgTgG+ri2tY
DAwNECEhFqs+BixYIIhGL5ysIsjgyQquCxS4uPzcBxgNDLSg+qzCsUidU3efYhpC0+RTmCSrEEhc
+cnvCWpQsgnoaDZJ11sCvLpYoMktZSALRLpdiK5enpgjUID+VxBkaiy4B+fWdAv3SjRneo7LIuKT
428/nzyIfcY1mga7Tbqbd8YVBDyomTipNxIGAee1DwVYJEDBgUdRf7wUAdNFg7bAD+SxWVgfagTI
sBfBGXoFINx6WAyYYP8AfKUTwSMHFCTDT6e85dM3DWSUIAvopLBbA+mFUlgCom2B4EMNQGiCAt2J
YBZ7KhRmWADUVCGXCHSR94JwnmBRgAgQYEGFEgS6iEUA6Gx04FhIYtHKgUF88mNzT4TzmIFYqIOF
G3gd6U4zb2ypgFs/whiDaN+YBeWWRj6BRGwuzLZjljgKOYKdIpiJpZs0ArcnUH+KQM0DvDwkRKGj
jSDaJVeuWaWiXrKFZwBs5vgQlC4o+I+LQdEpApsBbcnAVBLyMN8I+kk3p6GfPtHRpAf+BGRqyMTq
ZZBQneCkAwcMUCAPUGpKlYEmObopLJEi+uqjWCZQxE8pEYDRCCwyq6b/p5Qyax0W9/wAjFhiUSOS
T9hOCqunsqJQgGDoHqnuDuzlMe0MmCYkUqPlMhuoCMre+WhXVokmbwsJhXItq9kea9EsCPhg6SwL
Gbtsosiy+tMDKawK6MUZDzcLoJ0e4wI6HHGV77H76uqqvwIAs+5fYzHSJjIHgwyqCE4YENbNM2AM
LriDmoywuStXvLGQcdjq6jYZIRBBvMD6+JeXLDnw7MlWJkt0ahJBprNooXxySs1a6oskVjzLcOML
QepodNkUJ9xUu3w2RPdRMsR2CZMzjPdEQcwRG5AKxmZdd7+tokyDNYlzqaqgDKjDwBS9sBwOdlyk
DUNbMlDjisQsz21x/6SwXD163aVPog7fMrQdOAkWO+AEIoWTe/jWAH3Hr3JsDqjzA7sZ0BUDAl/m
pAnYRRC5CXW1foBYejGwUKoCBHcybruacCA6FOHI+PbctrCANWMSygAiY5U6ES3INgVIOX/+evNP
OyCKPSsOwOtGbAdEjsgZJ/rYprpSnUJ5RQEPS00sDniS9AxgAAVxXcMWgJjUNOAAfhPAAQgQnZY9
yFOo+UevLiGuAzRoSxYpwm6mwZseHKQRXYkKYgokGgAd4GEcVEVaUkQ9DaohD16piQJKQQsoGEWA
rIJAzBS4g221UAZLFNkLyOG0eKllfGcYxsJm4Yt4peZz1aGgF5UkC/9fASGD9eCgA8YyrD99kTp+
siIEGHCLXG0xLSYQWFoukY1o9I8BGzTbnwqAj7Y8wh8A4sF4wIWLGGRwWOPBCnU0Y59PGABRkgBS
NpSDs8CM4DusuAQCpnAeKGyjbyFkBG46qR7MPCEqqbrMJL5on4Tk4iCPYI9JCrAGGYABIgvg5QsO
MKU2rIUr+ftkFGRgjFWCSAxK0In0XoI8J72AeGvBnEwK4ArGJaETRwClLAogkbBAU5j2WWUOuLmT
l52gYTgipy4Q6JEfEIkVy8zBqErThWMeQQEMeMQjGHBKfvizngidTB7s4QA8eAahEI2oRMfQwWoU
dKIYzahGXwCMR8AWQxa/2qhIR6rR+LDlAeDqFklXOoQQAAA7

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://ad.doubleclick.net/adj/trb.latimes/news/local;ptype=s;rg=ur;pos=1;sz=88x31;tile=4;ord=87654321?

document.write('<a target=3D"_blank" =
href=3D"http://ad.doubleclick.net/click;h=3Dv8/371f/0/0/%2a/c;44306;0-0;0=
;12926869;21-88/31;0/0/0;;~okv=3D;ptype=3Ds;rg=3Dur;pos=3D1;sz=3D88x31;ti=
le=3D4;~aopt=3D2/0/ff/1;~sscs=3D%3f"><img =
src=3D"http://m1.2mdn.net/viewad/817-grey.gif" border=3D0 alt=3D"Click =
here to find out more!"></a>');=0A=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://articles.latimes.com/images/logo-lat-gray.gif

R0lGODlhkAASAMQAAJ2dndHR0ampqb29vdbW1qGhoerq6rGxsa2trc3NzeHh4cXFxZqamrW1tdnZ
2e3t7cHBwbm5uaWlpfz8/MrKyvj4+Pb29vPz897e3vLy8ubm5uTk5Nzc3PDw8P////v7+yH5BAAA
AAAALAAAAACQABIAAAX/oOc5nYNw36aIbOu+rTUIFGbBeA5Xn+63ikDCoamwOgbPZfJr4gYHCoDB
EAg2Th3hUKjess7HIfIFtyYQKhWAGAQICMJGMNAwzT8C46AgFAoSAXg5AQwFSYM5GQdUEIkiegIH
XGpUBQ4NVAuPOhEMDh4TCQ9lnCyFDBSmLxUGCAybiR8RBBUWAQcCEhESBxsVFw4YqzgCDAQetzAP
ARcvfRkcRjAfC8YHd6EOGR4GBNksG8gvD6AimQktGQQ9LLcGCistHxrdCA0BAqAE5hnDIgrqVSDg
zEOHWi80cHBxIUAHDCuMOaog6IwDCXsQJUswRcKAdgmHMACAJdkABhEw/0gsU0EKgwHcRNzCuHAC
OhEfCBir6GHDqwIC5LnAAOCAhQYFbhBAtgHjgg8OABTgcPLAAwPGBhTc2KWkB5WGrng4mZRiCwwN
6EwpIAgDgigRBmh8EQBDhi7pPGhoMOXAqz0PPMC5RwXBCgUIgFbp4OHmBr7GDlUYAAAChAbjXHQo
AMDA3QKMl3oIgLHAhgVdBHhi4JERAwRJTAh4JcDCBcoDBqQUwYEKCp4e0jSYoMDY8EyxdFRjUnWa
hVcKjo5cwWhByymq0kTQgDFChZsUXmt41cDByJg4wjdQYgyZ6NFePCxgAGFCeAYBKqwelgmChi4L
9FbAViJUkJVZLISHjf8H4TniiQAYEFAPDhokwEMhBUz4HAPDbGBIEidNtBN861HA1ncMpFOIAIIB
QEFUsGDgwDQuVCdCVSOMs+IN84mIXzdSBXbSAMEVQAAGI9WAQTaZeAecgj3MR2QaahTwFAwJAKUL
Faok88pCG0hVjyeOWGCMinsQsEASNqUInwABLLCCBlOo4YsLE7wSiwKGZOCAjvH16OWPBkgFIgOY
LRCYAnWO1MCEJyXwwZN7MCGlBxUkIMECrwDAmAvfTXJAAxgd0MOGYBoyJn3JnAkfW1+0iaaLBU0w
3gEQTJEXC3kiKsIFAnjqAAkNBcqqmYQaOlYVCIUyR1xUVITUBZm200H/VVG+BMlCGKLHggaxTDBB
IQDUs+EwGny47CbIonnAESgKsuIdjDVUQa+ZseAJACvkiUCOCXhThRGCVvAKMoUWIKS2oTDGDKbG
DDOBAJhFQPEAFCxwUmUWqCdYA3YVIoG3E2wQAQUPBObBA10IAuwxX033ASNXICtIeBJg8IEC1lUn
ykj5GUBBBg0koEEGrwDHW2FXIVCPW8OJzJh2E3RwZskA8DvBgzpzEIAYARjwQLDIINmoGhx04BoC
CGxH50gS0DHXUVNI9c+ycVxkCD9UCMDBAmtFgJdgXbABQQczj7QAARi9tkAHaWQtSbNnnFQFAgtc
gBYDCyVAxQEG7DvA3hxAE2UIBhyNdEAC0knegDQe+DXA4nFSzEQFgBspgsaosfUCBR5RFkELBPRV
QgFWTQA4BDdogJsnOXdDGQKfbgDUCg8ALgASqx8AQATeuiBDnX/s/WsELk6A1VRfIW+AfQBo1dNJ
DXzAQdHeQ7CVDZp9CpDKXzGCBuYSDmfYikATIEACqheTkolAAwGAwAA6YIEECCA5CvCW2FqgAcZo
wFwKAAcMJkAVvxRtbhNamUYMECsFgGQC/MNAEi4gFGLY8Czkw1w+anjDHZSih0AMYoH8coDGUWEA
IhSiEpsQAgA7

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://m.trb.com/b/ss/tribprod/1/H.14--NS/0

R0lGODlhAgACAIAAAP///wAAACH5BAEAAAAALAAAAAACAAIAAAIChFEAOw==

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/stylesheets/main.css?1217444655

HTML {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
BODY {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
DIV {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
SPAN {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
OBJECT {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
IFRAME {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
H1 {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
H2 {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
H3 {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
H4 {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
H5 {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
H6 {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
P {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
BLOCKQUOTE {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
PRE {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
A {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
ABBR {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
ACRONYM {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
ADDRESS {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
CODE {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
DEL {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
DFN {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
EM {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
IMG {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
Q {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
DL {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
DT {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
DD {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
OL {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
UL {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
LI {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
FIELDSET {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
FORM {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
LABEL {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
LEGEND {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
TABLE {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
CAPTION {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
TBODY {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
TFOOT {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
THEAD {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
TR {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
TH {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
TD {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; FONT-SIZE: 100%; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; VERTICAL-ALIGN: baseline; PADDING-TOP: =
0px; FONT-FAMILY: inherit; BORDER-RIGHT-WIDTH: 0px
}
BODY {
	FONT-SIZE: 75%; COLOR: #333; FONT-FAMILY: arial, helvetica, sans-serif
}
H1 {
	FONT-SIZE: 225%
}
A {
	TEXT-DECORATION: none
}
A:link {
	COLOR: #007aaa; TEXT-DECORATION: none
}
A:visited {
	COLOR: #20576b
}
A:hover {
	TEXT-DECORATION: underline
}
A[href=3D''] {
	FONT-WEIGHT: bold; COLOR: red
}
#nav_section A[href=3D''] {
	FONT-WEIGHT: bold; COLOR: red
}
#site_info A[href=3D''] {
	FONT-WEIGHT: bold; COLOR: red
}
EM {
	FONT-STYLE: italic
}
BODY {
	BACKGROUND: url(../images/bg.gif) #e5e6da fixed repeat-x 0px 90px; =
MARGIN: 0px
}
#container {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; MARGIN: 0px =
auto; PADDING-TOP: 1px; POSITION: relative
}
DIV.hidden {
	DISPLAY: none
}
DIV#container {
	WIDTH: 996px
}
.canvas_outer {
	BACKGROUND: url(../images/canvas-shadow-left.png) repeat-y; WIDTH: =
996px
}
.canvas_inner {
	BACKGROUND: url(../images/canvas-shadow-right.png) repeat-y right top; =
WIDTH: 996px
}
.canvas_content {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: white; =
PADDING-BOTTOM: 0px; MARGIN: 0px 8px; PADDING-TOP: 0px
}
.canvas_bottom_left {
	BACKGROUND: url(../images/canvas-shadow-bottom-left.png) no-repeat left =
top
}
.canvas_bottom_right {
	BACKGROUND: url(../images/canvas-shadow-bottom-right.png) no-repeat =
right top
}
.canvas_bottom {
	BACKGROUND: url(../images/canvas-shadow-bottom.png) repeat-x 50% top; =
MARGIN: 0px 8px
}
.canvas_top_left {
	BACKGROUND: url(../images/canvas-shadow-top-left.png) no-repeat left =
bottom
}
.canvas_top_right {
	BACKGROUND: url(../images/canvas-shadow-top-right.png) no-repeat right =
bottom
}
.canvas_top {
	BACKGROUND: url(../images/canvas-shadow-top.png) repeat-x 50% bottom; =
MARGIN: 0px 8px
}
.canvas_bottom {
	FONT-SIZE: 4px
}
.canvas_top {
	FONT-SIZE: 4px
}
#branding {
	LEFT: 1px; WIDTH: 996px; POSITION: absolute; TOP: 0px
}
.leaderboard {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; MARGIN: 0px =
auto; WIDTH: 728px; PADDING-TOP: 5px; TEXT-ALIGN: center
}
.leaderboard IMG {
	VERTICAL-ALIGN: middle
}
#nav_tools {
	PADDING-RIGHT: 8px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 8px; =
FONT-SIZE: 92%; PADDING-BOTTOM: 8px; PADDING-TOP: 8px; POSITION: =
relative; TEXT-ALIGN: right
}
#nav_tools A {
	MARGIN-LEFT: 0.75em
}
#nav_main {
	PADDING-RIGHT: 9px; PADDING-LEFT: 9px; FONT-SIZE: 92%; PADDING-BOTTOM: =
1px; COLOR: #b4b4b4; PADDING-TOP: 1px
}
#nav_main A {
	COLOR: #323232
}
#nav_features {
	FLOAT: left
}
#nav_features A {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#nav_features A.end {
	BORDER-TOP-WIDTH: 0px; PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px
}
#nav_classified {
	FLOAT: right; TEXT-ALIGN: right
}
#nav_classified A {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
#nav_classified A.end {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; BORDER-LEFT-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px
}
#masthead {
	PADDING-RIGHT: 9px; PADDING-LEFT: 9px; FLOAT: left; PADDING-BOTTOM: =
7px; PADDING-TOP: 9px
}
#branding_logo {
	FONT-SIZE: 235%; FLOAT: left; MARGIN: 2px 15px 0px 0px; WIDTH: 225px
}
#branding_section {
	DISPLAY: inline; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: =
235%; BORDER-LEFT: #ccc 1px solid; COLOR: #2286aa
}
#branding_section .beta {
	FONT-WEIGHT: bold; FONT-SIZE: 40%; MARGIN-LEFT: 0.5em; COLOR: #c4c9c9
}
#branding_section A:visited {
	COLOR: #007aaa
}
#sitesearch {
	MARGIN-TOP: 10px; DISPLAY: block; FONT-SIZE: 100%; FLOAT: right; WIDTH: =
475px
}
#sitesearch * {
	DISPLAY: inline; VERTICAL-ALIGN: middle
}
#sitesearch .search_input {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 18px; =
BORDER-LEFT-COLOR: #ccc; BORDER-BOTTOM-COLOR: #ccc; PADDING-BOTTOM: 0px; =
WIDTH: 240px; BORDER-TOP-STYLE: inset; BORDER-TOP-COLOR: #ccc; =
PADDING-TOP: 0px; BORDER-RIGHT-STYLE: inset; BORDER-LEFT-STYLE: inset; =
BORDER-RIGHT-COLOR: #ccc; BORDER-BOTTOM-STYLE: inset
}
#sitesearch .btn {
	BORDER-RIGHT: 0px; PADDING-RIGHT: 10px; BORDER-TOP: 0px; PADDING-LEFT: =
10px; FONT-WEIGHT: bold; FONT-SIZE: 90%; BACKGROUND: =
url(/images/home-searchbtn3-bg.gif) no-repeat left top; PADDING-BOTTOM: =
8px; MARGIN: 0px; TEXT-TRANSFORM: uppercase; BORDER-LEFT: 0px; WIDTH: =
70px; COLOR: #fff; PADDING-TOP: 4px; BORDER-BOTTOM: 0px; TEXT-ALIGN: =
center
}
#sitesearch .btn_image {
=09
}
#small_ad {
	WIDTH: 88px; HEIGHT: 31px
}
#small_ad SCRIPT {
	DISPLAY: none
}
#small_ad IMG {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#nav_section {
	BORDER-TOP-WIDTH: 0px; CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: =
0px; FONT-SIZE: 100%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; TEXT-ALIGN: =
center
}
#nav_section .nav {
	BACKGROUND: url(../images/hrz-nav-bg.gif) repeat-x; FLOAT: left; =
OVERFLOW: hidden; WIDTH: 100%; HEIGHT: 28px
}
#nav_section .nav UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#nav_section .nav LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; BACKGROUND: =
url(../images/hrz-nav-sep.gif) no-repeat right top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#nav_section .nav A {
	PADDING-RIGHT: 16px; DISPLAY: block; PADDING-LEFT: 16px; =
PADDING-BOTTOM: 6px; COLOR: white; PADDING-TOP: 6px
}
#nav_section .nav LI.last {
	WIDTH: 93px
}
#nav_section .nav LI.selected {
	BACKGROUND: url(../images/hrz-nav-bg-sel.gif) repeat-x right top
}
.topic-entertainment #nav_section {
	CLEAR: both; PADDING-RIGHT: 4px; BORDER-TOP: #e5e6da 1px solid; =
PADDING-LEFT: 4px; FONT-SIZE: 120%; PADDING-BOTTOM: 4px; PADDING-TOP: =
4px; HEIGHT: 28px; TEXT-ALIGN: center
}
.topic-entertainment #nav_section .nav {
	DISPLAY: inline
}
#content {
	MARGIN-TOP: 224px
}
#content .canvas_content {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: white; =
PADDING-BOTTOM: 8px; WIDTH: 964px; PADDING-TOP: 8px
}
#content_main {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FLOAT: left; PADDING-BOTTOM: =
8px; MARGIN: 0px; WIDTH: 580px; PADDING-TOP: 8px
}
#content_sub {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: =
0px; MARGIN: 0px; WIDTH: 350px; PADDING-TOP: 0px
}
#content H1 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 5px; COLOR: #545454; PADDING-TOP: 0px
}
#content H2 {
	CLEAR: left; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 180%; =
PADDING-BOTTOM: 0.25em; COLOR: #545454; PADDING-TOP: 0.75em
}
H3 {
	FONT-SIZE: 160%; COLOR: #545454
}
#content H4 {
	FONT-SIZE: 150%
}
#content P {
	LINE-HEIGHT: 140%
}
.topic-entertainment #content {
	MARGIN-TOP: 232px; POSITION: relative
}
#site_info {
	CLEAR: both; MARGIN-BOTTOM: 50px; WIDTH: 996px; POSITION: relative
}
#site_info {
	COLOR: #9a9a9a
}
#site_info A {
	COLOR: #9a9a9a
}
#copyright H3 {
	PADDING-RIGHT: 10px; DISPLAY: inline
}
#copyright IMG {
	VERTICAL-ALIGN: middle
}
#site_info H4 {
	FONT-WEIGHT: bold; FONT-SIZE: 100%; COLOR: #9a9a9a
}
#site_info .canvas_content {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; BACKGROUND: white; =
PADDING-BOTTOM: 18px; LINE-HEIGHT: 140%; PADDING-TOP: 18px
}
.column_3#site_info .column {
	PADDING-RIGHT: 3%; FLOAT: left; PADDING-BOTTOM: 2em; WIDTH: 30%; COLOR: =
#b5b5b5; LINE-HEIGHT: 160%
}
#copyright {
	CLEAR: both; BORDER-TOP: #e5e6da 1px solid; FONT-SIZE: 98%; WIDTH: =
100%; PADDING-TOP: 15px; TEXT-ALIGN: right
}
#copyright DIV {
	FLOAT: left
}
#breadcrumbs {
	PADDING-RIGHT: 17px; PADDING-LEFT: 17px; PADDING-BOTTOM: 2px; =
PADDING-TOP: 2px
}
#email_and_print {
	PADDING-BOTTOM: 7px; MARGIN: 1em 7px; COLOR: #007aaa; TEXT-ALIGN: right
}
#email_and_print IMG {
	VERTICAL-ALIGN: top
}
#content_sub .ad_mrec {
	BORDER-RIGHT: #e6e6da 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#e6e6da 1px solid; PADDING-LEFT: 0px; MARGIN-BOTTOM: 1em; =
PADDING-BOTTOM: 20px; BORDER-LEFT: #e6e6da 1px solid; PADDING-TOP: 20px; =
BORDER-BOTTOM: #e6e6da 1px solid; POSITION: relative; TEXT-ALIGN: center
}
.advertisement {
	BORDER-RIGHT: #e6e6da 1px solid; PADDING-RIGHT: 1.5em; BORDER-TOP: =
#e6e6da 1px solid; PADDING-LEFT: 1.5em; PADDING-BOTTOM: 20px; MARGIN: =
2ex 0px 1em; BORDER-LEFT: #e6e6da 1px solid; PADDING-TOP: 15px; =
BORDER-BOTTOM: #e6e6da 1px solid; POSITION: relative; TEXT-ALIGN: center
}
.advertisement .ad_heading {
	WIDTH: 100%; POSITION: relative; TOP: -2.85ex; TEXT-ALIGN: center
}
.advertisement .ad_heading SPAN {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 80%; PADDING-BOTTOM: =
5px; TEXT-TRANSFORM: uppercase; COLOR: #9e987c; PADDING-TOP: 5px; =
BACKGROUND-COLOR: white
}
.advertisement .ad_heading A {
	FONT-WEIGHT: normal; COLOR: #9e987c
}
#adsense .text-ad-ent {
	FONT-SIZE: 95%; MARGIN: 2ex 0px; TEXT-ALIGN: left
}
.amazon_ad {
	MARGIN: 1.5em auto; WIDTH: 500px
}
.box_striped#feeds {
	PADDING-RIGHT: 9px; PADDING-LEFT: 9px; FONT-SIZE: 95%; PADDING-BOTTOM: =
12px; WIDTH: 332px; PADDING-TOP: 12px
}
#feeds .subscribe {
	PADDING-RIGHT: 10px; FLOAT: left; WIDTH: 80px
}
#feeds .buttons {
	FLOAT: right; WIDTH: 240px; TEXT-ALIGN: left
}
#feeds .outer {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #c1c3b2 1px solid
}
#feeds #btn_mylatimes {
	WIDTH: 103px
}
#feeds #btn_more_rss {
	MARGIN-LEFT: 9px; WIDTH: 125px
}
#feeds .inner {
	BORDER-RIGHT: #e5e6da 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#e5e6da 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; =
BORDER-LEFT: #e5e6da 1px solid; COLOR: #545454; PADDING-TOP: 0px; =
BORDER-BOTTOM: #e5e6da 1px solid; HEIGHT: 16px; BACKGROUND-COLOR: #fff
}
#feeds IMG {
	VERTICAL-ALIGN: middle
}
#feeds IMG.border {
	BORDER-RIGHT: #e5e6da 1px solid
}
#feeds .my_lat {
	FONT-WEIGHT: bold; FONT-SIZE: 110%; COLOR: #3f75af! important; =
LINE-HEIGHT: 100%
}
#feeds .my_lat_color {
	COLOR: #1b4473! important
}
#feeds A {
	COLOR: #545454
}
#feeds A:hover {
	TEXT-DECORATION: none
}
#save_share {
	MARGIN: 1em 0px
}
.box_solid {
	BACKGROUND: #e5e6da; POSITION: relative
}
.box_border {
	BORDER-RIGHT: #e5e6da 3px solid; BORDER-TOP: #e5e6da 3px solid; =
BORDER-LEFT: #e5e6da 3px solid; BORDER-BOTTOM: #e5e6da 3px solid; =
POSITION: relative
}
.box_faded {
	BACKGROUND: url(../images/bg-about-gradient.gif) repeat-x; POSITION: =
relative
}
.box_striped {
	BACKGROUND: url(../images/bg-diag-stripes-tan.gif); POSITION: relative
}
.box_faded {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; MARGIN-BOTTOM: 1em; =
PADDING-BOTTOM: 12px; PADDING-TOP: 8px
}
.box_solid {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; MARGIN-BOTTOM: 1em; =
PADDING-BOTTOM: 12px; PADDING-TOP: 8px
}
.box_striped {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; MARGIN-BOTTOM: 1em; =
PADDING-BOTTOM: 12px; PADDING-TOP: 8px
}
.box_border {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; MARGIN-BOTTOM: 1em; =
PADDING-BOTTOM: 12px; PADDING-TOP: 8px
}
.box_faded .content {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: white; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
.box_solid .content {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: white; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
.box_striped .content {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: white; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
.box_border .content {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: white; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
.box_faded H2 {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
180%! important; PADDING-BOTTOM: 4px! important; MARGIN: 0px; =
PADDING-TOP: 0px! important
}
.box_solid H2 {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
180%! important; PADDING-BOTTOM: 4px! important; MARGIN: 0px; =
PADDING-TOP: 0px! important
}
.box_striped H2 {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
180%! important; PADDING-BOTTOM: 4px! important; MARGIN: 0px; =
PADDING-TOP: 0px! important
}
.box_border H2 {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
180%! important; PADDING-BOTTOM: 4px! important; MARGIN: 0px; =
PADDING-TOP: 0px! important
}
.box_heading {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
180%! important; PADDING-BOTTOM: 4px! important; MARGIN: 0px; =
PADDING-TOP: 0px! important
}
.buttons {
	TEXT-ALIGN: center
}
#content_sub .content {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 15px; =
PADDING-TOP: 10px
}
.clear {
	CLEAR: both; FONT-SIZE: 1px; FLOAT: none; WIDTH: 100%; LINE-HEIGHT: =
1px; HEIGHT: 1px
}
.clear_left {
	CLEAR: left; FONT-SIZE: 1px; FLOAT: none; WIDTH: 100%; LINE-HEIGHT: =
1px; HEIGHT: 1px
}
HR {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
#e5e6da; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; =
COLOR: #e5e6da; BORDER-TOP-STYLE: none; LINE-HEIGHT: 1px; PADDING-TOP: =
0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 0.1em; =
BORDER-BOTTOM-STYLE: none
}
HR.section_divider {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
#e5e6da; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; =
COLOR: #e5e6da; BORDER-TOP-STYLE: none; LINE-HEIGHT: 1px; PADDING-TOP: =
0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 0.1em; =
BORDER-BOTTOM-STYLE: none
}
HR.clear {
	CLEAR: both; BORDER-RIGHT: #e5e6da 1px solid; BORDER-TOP: #e5e6da 1px =
solid; BACKGROUND: white; FLOAT: none; BORDER-LEFT: #e5e6da 1px solid; =
WIDTH: 100%; LINE-HEIGHT: 1px; BORDER-BOTTOM: #e5e6da 1px solid; HEIGHT: =
1px
}
.column {
	FLOAT: left
}
.half LI {
	WIDTH: 50%
}
.half .column {
	WIDTH: 50%
}
.half IMG {
	WIDTH: 120px; HEIGHT: 83px
}
.third LI {
	WIDTH: 33%
}
.third .column {
	WIDTH: 33%
}
.third IMG {
	WIDTH: 80px; HEIGHT: 55px
}
.fifth LI {
	WIDTH: 20%
}
.fifth .column {
	WIDTH: 20%
}
.fifth IMG {
=09
}
.subtext {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 2ex; COLOR: =
#9a9a9a; PADDING-TOP: 3px
}
.small {
	FONT-SIZE: 11px
}
.fleft {
	FLOAT: left
}
.fright {
	FLOAT: right
}
.centered {
	TEXT-ALIGN: center
}
.clear {
	CLEAR: both
}
.raquo_bullet {
	COLOR: #007aaa; TEXT-INDENT: -0.75em; LIST-STYLE-TYPE: none
}
.raquo_bullet LI:unknown {
	content: "=BB "
}
.box_faded#most_tabs {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; PADDING-BOTTOM: 12px; MARGIN: =
0px; PADDING-TOP: 12px
}
#most_tabs .tab_panel {
	DISPLAY: none
}
#most_tabs .selected {
	DISPLAY: block
}
#most_tabs .tabs {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#most_tabs .tabs LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(../images/tab-right.gif) no-repeat right top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 1px; WIDTH: 33%; PADDING-TOP: =
0px; WHITE-SPACE: nowrap
}
#most_tabs .tabs A {
	PADDING-RIGHT: 1px; DISPLAY: block; PADDING-LEFT: 0px; FONT-SIZE: 110%; =
BACKGROUND: url(../images/tab-left.gif) no-repeat left top; =
PADDING-BOTTOM: 6px; MARGIN: 0px; COLOR: #545454; PADDING-TOP: 5px; =
TEXT-ALIGN: center
}
#most_tabs .tabs LI.selected {
	BACKGROUND: url(../images/tab-selected-right.gif) no-repeat right top
}
#most_tabs .tabs LI.selected A {
	FONT-WEIGHT: bold; BACKGROUND: url(../images/tab-selected-left.gif) =
no-repeat left top
}
#most_tabs .content {
	CLEAR: both; BORDER-RIGHT: white 1px solid; PADDING-RIGHT: 12px; =
BORDER-TOP: white 1px solid; PADDING-LEFT: 12px; PADDING-BOTTOM: 12px; =
BORDER-LEFT: white 1px solid; PADDING-TOP: 12px; BORDER-BOTTOM: white =
1px solid
}
#most_tabs .content LI {
	MARGIN: 0.5ex 1.5em 1.5ex
}
#related_topics .content {
	POSITION: relative
}
#related_topics_list {
	WIDTH: 100%; LIST-STYLE-TYPE: none
}
#related_topics_list LI {
	FLOAT: left; PADDING-TOP: 5px; TEXT-ALIGN: center
}
#related_topics_list IMG {
	BORDER-RIGHT: #e5e6da 2px solid; BORDER-TOP: #e5e6da 2px solid; =
BORDER-LEFT: #e5e6da 2px solid; BORDER-BOTTOM: #e5e6da 2px solid
}
.box_solid#article_photo {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; PADDING-BOTTOM: 0px; MARGIN: =
1em 0px 0px; PADDING-TOP: 12px; TEXT-ALIGN: center
}
.box_solid#article_photo P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 95%; PADDING-BOTTOM: =
2px; VERTICAL-ALIGN: bottom; COLOR: #9a9a9a; PADDING-TOP: 2px; =
TEXT-ALIGN: right
}
#article_photo_caption {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; MARGIN: =
0px; PADDING-TOP: 5px; BORDER-BOTTOM: #e5e6da 1px solid
}
#article_photo_caption STRONG {
	TEXT-TRANSFORM: uppercase
}
#article_content {
	MARGIN-BOTTOM: 7px; PADDING-BOTTOM: 12px
}
#article_content H3 {
	MARGIN-TOP: 2ex; FONT-WEIGHT: bold; FONT-SIZE: 100%
}
#article_content HR {
	MARGIN: 1em 0px
}
#article_content .subhead {
	FONT-SIZE: 115%; MARGIN: 1em 0px; COLOR: #666; FONT-STYLE: italic; =
FONT-FAMILY: Georgia, "Times New Roman"
}
.kicker {
	TEXT-TRANSFORM: uppercase; COLOR: #888; LETTER-SPACING: 0.1em
}
#article_body {
	PADDING-TOP: 1ex
}
#article_body P {
	FONT-SIZE: 115%; MARGIN: 2ex 0px
}
#article_body .caps {
	FONT-SIZE: 95%
}
.byline {
	FONT-SIZE: 115%; MARGIN: 2ex 0px 0px
}
.date {
	COLOR: #9a9a9a
}
#corrections {
	BORDER-RIGHT: #e5e6da 1px; BORDER-TOP: #e5e6da 1px solid; =
MARGIN-BOTTOM: 2em; BORDER-LEFT: #e5e6da 1px; BORDER-BOTTOM: #e5e6da 1px =
solid
}
.correction {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; FONT-SIZE: 110%; PADDING-BOTTOM: =
1em; LINE-HEIGHT: 140%; PADDING-TOP: 1em
}
.for_the_record {
	FONT-WEIGHT: bold; FONT-SIZE: 0.95em; TEXT-TRANSFORM: uppercase
}
.correction_note {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; BACKGROUND: =
#fea; PADDING-BOTTOM: 1px; COLOR: #948454; PADDING-TOP: 1px
}
#article_related H4 {
	FONT-WEIGHT: bold; FONT-SIZE: 120%; TEXT-TRANSFORM: uppercase
}
#article_galleries {
	MARGIN-TOP: 2ex; LIST-STYLE-TYPE: none
}
#article_galleries LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
#article_galleries .photo IMG {
	BORDER-RIGHT: #d0d0c4 2px solid; BORDER-TOP: #d0d0c4 2px solid; =
BORDER-LEFT: #d0d0c4 2px solid; BORDER-BOTTOM: #d0d0c4 2px solid
}
#article_galleries .photo P {
	MARGIN-BOTTOM: 0px
}
#article_galleries .photo STRONG {
	TEXT-TRANSFORM: uppercase; COLOR: #ff984d
}
#article_stories {
	FLOAT: left
}
#article_stories UL {
	MARGIN-TOP: 2ex
}
#article_stories LI {
	MARGIN-BOTTOM: 2ex; MARGIN-LEFT: 0.75em
}
.related_articles {
	FONT-SIZE: 115%
}
.additional_links {
	FONT-SIZE: 115%
}
.additional_links {
	MARGIN-TOP: 1em; MARGIN-BOTTOM: 1.5em
}
.additional_links DIV {
	FONT-WEIGHT: bold; MARGIN-BOTTOM: 0.5em
}
.related_articles H3 {
	FONT-SIZE: 110%
}
.related_articles UL {
	MARGIN-TOP: 0.2em; PADDING-LEFT: 1.5em; MARGIN-BOTTOM: 1.5em
}
.related_articles LI {
	MARGIN-BOTTOM: 0.2em
}
.related_articles SPAN {
	FONT-SIZE: 0.9em; MARGIN-LEFT: 0.1em
}
.related_keywords UL {
	FONT-SIZE: 120%; LIST-STYLE-TYPE: none
}
#pagination {
	FLOAT: right; TEXT-ALIGN: right
}
#pagination .single_page {
	MARGIN-LEFT: 1.5em
}
#save_share IMG {
	BORDER-RIGHT: #e5e6da 1px solid; BORDER-TOP: #e5e6da 1px solid; =
VERTICAL-ALIGN: middle; BORDER-LEFT: #e5e6da 1px solid; BORDER-BOTTOM: =
#e5e6da 1px solid
}
#user_comments {
	MARGIN: 7ex 0px 3ex
}
#user_comments H3 {
	FONT-SIZE: 200%
}
#user_comments H4 {
	FONT-WEIGHT: bold; MARGIN: 1.5ex 0px 2.5ex; TEXT-TRANSFORM: uppercase
}
#user_comments LABEL {
	DISPLAY: block; FONT-WEIGHT: bold
}
#user_comments #comment_name {
	DISPLAY: block; WIDTH: 100%
}
#user_comments #comment_box {
	DISPLAY: block; WIDTH: 100%
}
#comment_form {
	FLOAT: left; WIDTH: 45%
}
#comment_form DIV {
	MARGIN-BOTTOM: 2.5ex
}
#comment_form P {
	MARGIN-BOTTOM: 2.5ex
}
P#comments_tos {
	FONT-SIZE: 95%; MARGIN-BOTTOM: 1.5ex
}
#discussion {
	FLOAT: right; WIDTH: 45%
}
#discussion OL {
	LIST-STYLE-POSITION: inside
}
#discussion LI {
	MARGIN-BOTTOM: 2.5ex
}
#discussion .submitted_by {
	COLOR: #9a9a9a
}
#discussion SPAN.submitted_name {
	COLOR: #545454
}
#paper_subscription {
	BORDER-RIGHT: #e5e6da 0px solid; PADDING-RIGHT: 2ex; BORDER-TOP: =
#e5e6da 1px solid; PADDING-LEFT: 2ex; PADDING-BOTTOM: 2ex; MARGIN: 1ex =
0px; BORDER-LEFT: #e5e6da 0px solid; PADDING-TOP: 2ex; BORDER-BOTTOM: =
#e5e6da 1px solid; TEXT-ALIGN: center
}
#small_feature {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; MARGIN-BOTTOM: 6ex; =
PADDING-BOTTOM: 0.5ex; PADDING-TOP: 1ex; BORDER-BOTTOM: #e5e6da 1px =
solid
}
#small_feature .box_solid {
	PADDING-RIGHT: 15px; PADDING-LEFT: 15px; PADDING-BOTTOM: 15px; =
PADDING-TOP: 15px; POSITION: static
}
#small_feature UL {
	PADDING-LEFT: 1em; FLOAT: left; MARGIN-LEFT: 0.5em; BORDER-LEFT: =
#ddded3 1px solid; WIDTH: 49%
}
#small_feature LI {
	MARGIN-LEFT: 1.5em
}
#small_article {
	FLOAT: left; WIDTH: 46%
}
#small_article IMG {
	PADDING-RIGHT: 1em; FLOAT: left
}
#small_article P {
	FLOAT: left; WIDTH: 65%
}
#small_article STRONG A {
	FONT-WEIGHT: bold; COLOR: #ff6701
}
#gallery_main {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FLOAT: left; PADDING-BOTTOM: =
30px; WIDTH: 585px; PADDING-TOP: 7px; POSITION: relative
}
#gallery_sub {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FLOAT: right; PADDING-BOTTOM: =
0px; WIDTH: 345px; PADDING-TOP: 0px; POSITION: relative
}
#inpage_gallery {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 2ex; WIDTH: =
585px; PADDING-TOP: 2ex; TEXT-ALIGN: center
}
#gallery_nav {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; FONT-SIZE: 95%; =
PADDING-BOTTOM: 8px; PADDING-TOP: 8px; BACKGROUND-COLOR: #ecede5
}
#photo_credit {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; FONT-SIZE: 95%; =
PADDING-BOTTOM: 8px; PADDING-TOP: 8px; BACKGROUND-COLOR: #ecede5
}
#prev_photo {
	PADDING-LEFT: 10px; FONT-WEIGHT: bold; BACKGROUND: =
url(../images/prev-inactive.gif) no-repeat left center; FLOAT: left
}
A#prev_photo {
	BACKGROUND: url(../images/prev-active.gif) no-repeat left center
}
#next_photo {
	PADDING-RIGHT: 10px; FONT-WEIGHT: bold; BACKGROUND: =
url(../images/next-inactive.gif) no-repeat right center; FLOAT: right
}
A#next_photo {
	BACKGROUND: url(../images/next-active.gif) no-repeat right center
}
#photo_matte {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(../images/bg-inpage-gallery.gif) center top; PADDING-BOTTOM: 0px; =
MARGIN: 1px 0px; OVERFLOW: hidden; WIDTH: 585px; PADDING-TOP: 0px; =
HEIGHT: 425px
}
#photo_matte * {
	VERTICAL-ALIGN: middle
}
#photo_matte SPAN {
	TEXT-ALIGN: center
}
#inpage_gallery #save_share {
	MARGIN: 5ex 0px
}
#gallery_photo_text {
	MARGIN-TOP: 6.5ex
}
#gallery_photo_text H2 {
	FONT-WEIGHT: bold; FONT-SIZE: 120%
}
#gallery_photo_text P {
	MARGIN: 2.5ex 0px
}
#more_galleries * {
	POSITION: relative
}
#more_galleries H2 {
	FONT-SIZE: 200%; MARGIN-BOTTOM: 0.75ex
}
#more_galleries .content {
	PADDING-RIGHT: 12px; PADDING-LEFT: 12px; BACKGROUND: white; =
PADDING-BOTTOM: 8px; PADDING-TOP: 8px
}
#more_galleries UL {
	FONT-WEIGHT: bold; LIST-STYLE-TYPE: none
}
#more_galleries UL LI {
	PADDING-BOTTOM: 3ex
}
H2.highlight_name {
	MARGIN-BOTTOM: 0.5em
}
H2.highlight_name A {
	COLOR: #a28333
}
A.contextual_link {
	FONT-WEIGHT: bold
}
#archive_home {
	BACKGROUND: url(/images/bg-feature-gradient.gif) repeat-x 50% bottom; =
MARGIN-BOTTOM: 3em
}
.archive_view {
	PADDING-RIGHT: 2%; PADDING-LEFT: 2%; FLOAT: left; PADDING-BOTTOM: 2%; =
WIDTH: 46%; PADDING-TOP: 2%
}
UL.years_list {
	FONT-SIZE: 160%; MARGIN: 1em 0px; LINE-HEIGHT: 130%; LIST-STYLE-TYPE: =
none
}
UL.keywords_list {
	FONT-SIZE: 160%; MARGIN: 1em 0px; LINE-HEIGHT: 130%; LIST-STYLE-TYPE: =
none
}
.monthly_links {
	MARGIN-TOP: -0.2em; FONT-WEIGHT: bold; MARGIN-LEFT: 0.8em; =
LIST-STYLE-TYPE: none
}
.monthly_keyword_links {
	MARGIN-TOP: 0em; MARGIN-LEFT: 0.8em
}
#article_links_404 {
	MARGIN-TOP: 1em; FONT-SIZE: 120%; MARGIN-LEFT: 2.8em
}
H1 .kicker {
	FONT-SIZE: 12px; TEXT-TRANSFORM: uppercase
}
.keywords {
	MARGIN: 2em 0px
}
.keywords UL {
	MARGIN: 0.25em 0px 0.5em 0.5em
}
.keywords LI {
	MARGIN: 0.25em 0px 0px 1.5em
}
.keyword_count {
	PADDING-RIGHT: 0.2em; PADDING-LEFT: 0.2em; PADDING-BOTTOM: 0px; =
MARGIN-RIGHT: 0.4em; PADDING-TOP: 0px
}
A.keyword_link {
	COLOR: #545454
}
#content .kw_5 {
	MARGIN-BOTTOM: 24px
}
#content .kw_6 {
	MARGIN-BOTTOM: 24px
}
#content .kw_7 {
	MARGIN-BOTTOM: 24px
}
#content .kw_8 {
	MARGIN-BOTTOM: 24px
}
#content .kw_9 {
	MARGIN-BOTTOM: 24px
}
#content .kw_10 {
	MARGIN-BOTTOM: 24px
}
#content .kw_11 {
	MARGIN-BOTTOM: 24px
}
#content .kw_11 H3 {
	BORDER-TOP: #343434 3px solid; FONT-SIZE: 32px
}
#content .kw_11 H3 .keyword_count {
	BACKGROUND: #343434; COLOR: white
}
#content .kw_10 H3 {
	BORDER-TOP: #3d3d3d 3px solid; FONT-SIZE: 30px
}
#content .kw_10 H3 .keyword_count {
	BACKGROUND: #3d3d3d; COLOR: white
}
#content .kw_9 H3 {
	BORDER-TOP: #444 2px solid; FONT-SIZE: 28px
}
#content .kw_9 H3 .keyword_count {
	BACKGROUND: #444; COLOR: white
}
#content .kw_8 H3 {
	BORDER-TOP: #4d4d4d 2px solid; FONT-SIZE: 26px
}
#content .kw_8 H3 .keyword_count {
	BACKGROUND: #4d4d4d; COLOR: white
}
#content .kw_7 H3 {
	BORDER-TOP: #545454 2px solid; FONT-SIZE: 24px
}
#content .kw_7 H3 .keyword_count {
	BACKGROUND: #545454; COLOR: white
}
#content .kw_6 H3 {
	BORDER-TOP: #646464 2px solid; FONT-SIZE: 22px
}
#content .kw_6 H3 .keyword_count {
	BACKGROUND: #646464; COLOR: white
}
#content .kw_5 H3 {
	BORDER-TOP: #747474 2px solid; FONT-SIZE: 20px
}
#content .kw_5 H3 .keyword_count {
	BACKGROUND: #747474; COLOR: white
}
#content .kw_4 {
	FLOAT: left; WIDTH: 49%
}
#content .kw_4 H3 {
	BORDER-TOP: #848484 1px solid; FONT-SIZE: 18px
}
#content .kw_4 H3 .keyword_count {
	BACKGROUND: #848484; COLOR: white
}
#content .kw_3 {
	FLOAT: left; WIDTH: 49%
}
#content .kw_3 H3 {
	BORDER-TOP: #949494 1px solid; FONT-SIZE: 16px
}
#content .kw_3 H3 .keyword_count {
	BACKGROUND: #949494; COLOR: white
}
#content .kw_2 {
	FLOAT: left; WIDTH: 49%
}
#content .kw_2 H3 {
	BORDER-TOP: #a4a4a4 1px solid; FONT-SIZE: 14px
}
#content .kw_2 H3 .keyword_count {
	BACKGROUND: #a4a4a4; COLOR: white
}
.newline {
	CLEAR: left; MARGIN-RIGHT: 2%
}
#keyword_articles {
	FONT-SIZE: 14px; MARGIN: 1em 0px 2em
}
#keyword_articles H2 {
	BORDER-TOP: #e6e6da 1px solid; MARGIN-TOP: 0.75em; FONT-SIZE: 18px; =
PADDING-TOP: 0.5em
}
#keyword_articles H2 A {
	COLOR: #545454
}
#keyword_articles UL {
	PADDING-LEFT: 1.5em
}
#keyword_articles UL.short_list {
	PADDING-LEFT: 4px; LIST-STYLE-TYPE: none
}
#keyword_articles UL.short_list LI {
	PADDING-RIGHT: 0px; BORDER-TOP: #545454 1px dotted; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0.5em; PADDING-TOP: 0.5em
}
#keyword_articles LI {
	MARGIN-BOTTOM: 0.25em
}
#keyword_articles .section {
	FONT-SIZE: 0.8em; TEXT-TRANSFORM: uppercase; COLOR: #ff730c
}
#content #keyword_articles .kw_date {
	FONT-SIZE: 12px; COLOR: #999
}
#related {
	FONT-SIZE: 13px; MARGIN-BOTTOM: 3em
}
#tag_cloud {
	MARGIN: 1em 0px 2em
}
#explore_list {
	FONT-SIZE: 14px; MARGIN-BOTTOM: 1.25em; LINE-HEIGHT: 1.5em; =
LIST-STYLE-TYPE: none
}
#keyword_day_nav {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: =
url(/images/bg-header-gradient.gif) repeat-x; PADDING-BOTTOM: 5px; =
MARGIN: 1em 0px 2em; PADDING-TOP: 5px
}
#keyword_day_nav DIV {
	FLOAT: left; WIDTH: 33%
}
#keyword_day_nav .center_link {
	TEXT-ALIGN: center
}
#keyword_day_nav .right_link {
	TEXT-ALIGN: center
}
.group {
	FLOAT: left; MARGIN-LEFT: 5px; WIDTH: 48%
}
.date_link A {
	COLOR: white; TEXT-ALIGN: center
}
#year H3 {
	MARGIN: 0.5em 0px
}
#year .month {
	MARGIN-TOP: 2em; PADDING-BOTTOM: 2em
}
#year A.day_number:hover {
	FONT-WEIGHT: bold; BACKGROUND: #007aaa; COLOR: white; TEXT-DECORATION: =
none
}
#year .day_number {
	PADDING-BOTTOM: 1.5em
}
#year .monthName {
	DISPLAY: none
}
#year .calendar TABLE {
	FLOAT: left; WIDTH: 48%
}
#year .calendar_helper TD {
	HEIGHT: 36px
}
.calendar_helper TH {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: =
11px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; TEXT-ALIGN: right
}
.calendar_helper TD {
	BORDER-TOP: #e6e6da 1px solid; FONT-SIZE: 11px; WIDTH: 14%; TEXT-ALIGN: =
right
}
.calendar_helper TD.otherMonth {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: #eee; =
PADDING-BOTTOM: 2px; COLOR: #999; PADDING-TOP: 2px
}
.calendar_helper .day {
=09
}
.calendar_helper .today {
	FONT-WEIGHT: bold; BACKGROUND: #fffadd
}
#year .popular_articles {
	FLOAT: left; MARGIN-LEFT: 4%; WIDTH: 48%
}
#year .popular_articles OL {
	PADDING-LEFT: 1.5em
}
#year .popular_articles LI {
	MARGIN-TOP: 0.3em
}
.nav_years {
	MARGIN-TOP: 1em; FONT-WEIGHT: bold; MARGIN-BOTTOM: 1em
}
.nav_years .next {
	FLOAT: right
}
#years_bottom {
	MARGIN-BOTTOM: 4em
}
#month .empty_day {
	HEIGHT: 72px
}
.monthly_archive #content_sub {
	DISPLAY: none
}
.monthly_archive #content_main {
	WIDTH: 98%
}
#month .calendar_helper {
	WIDTH: 800px
}
#month .calendar_helper CAPTION {
	VISIBILITY: hidden
}
.article_dot {
	BORDER-RIGHT: white 1px solid; BORDER-TOP: white 1px solid; DISPLAY: =
block; BACKGROUND: #ccc; FLOAT: left; WIDTH: 7px; POSITION: relative; =
HEIGHT: 7px; TEXT-DECORATION: none
}
.article_dot:hover {
	BACKGROUND: #ff0; TEXT-DECORATION: none
}
#month .day_number {
	PADDING-BOTTOM: 5em
}
.article_blocks {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; =
PADDING-TOP: 3px; POSITION: relative
}
.section_blocks:hover .section_title {
	DISPLAY: inline
}
.link_title {
	BORDER-RIGHT: #cdcebe 2px solid; DISPLAY: none; Z-INDEX: 1000; LEFT: =
-50px; BORDER-LEFT: white 1px solid; WIDTH: 200px; BORDER-BOTTOM: =
#cdcebe 2px solid; POSITION: absolute; TOP: 16px; BACKGROUND-COLOR: =
#eeefe7; TEXT-ALIGN: left; TEXT-DECORATION: none
}
.link_title .section {
	BORDER-RIGHT: white 1px solid; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; =
FONT-WEIGHT: bold; BACKGROUND: #dfe0d3; PADDING-BOTTOM: 2px; COLOR: =
#64635f; PADDING-TOP: 2px
}
.link_title .text {
	BORDER-RIGHT: white 1px solid; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; =
FONT-SIZE: 15px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
.link_title .date {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 8px; COLOR: =
#64635f; PADDING-TOP: 0px
}
.article_dot:hover .link_title {
	DISPLAY: block
}
.section_title {
	PADDING-RIGHT: 4px; DISPLAY: none; PADDING-LEFT: 4px; FONT-WEIGHT: =
bold; LEFT: 0px; PADDING-BOTTOM: 2px; COLOR: white; PADDING-TOP: 2px; =
POSITION: absolute; TOP: -14px; TEXT-ALIGN: left
}
.sec_business .section_title {
	BACKGROUND: #060
}
.sec_calendar .section_title {
	BACKGROUND: #639
}
.sec_editorial_pages .section_title {
	BACKGROUND: #990
}
.sec_features .section_title {
	BACKGROUND: #900
}
.sec_metro .section_title {
	BACKGROUND: #199
}
.sec_news .section_title {
	BACKGROUND: #006
}
.sec_sports .section_title {
	BACKGROUND: #d62
}
#month TD:hover {
	BACKGROUND: #ffc; TEXT-DECORATION: none
}
#month TD:hover A {
	TEXT-DECORATION: none
}
#month SPAN.day_number {
	FONT-SIZE: 1.5em
}
#month .day_keywords {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 1em; =
LINE-HEIGHT: 120%; PADDING-TOP: 0px; TEXT-ALIGN: left
}
#month .day_keywords .first {
	COLOR: #a28333
}
#month .day_keywords .not-first {
	COLOR: #007aaa
}
#month .day_keywords DIV {
	MARGIN-TOP: 4px
}
A.green {
	BACKGROUND: green
}
.keyword-0 {
	FONT-SIZE: 150%
}
.keyword-1 {
	FONT-SIZE: 140%
}
.keyword-2 {
	FONT-SIZE: 130%
}
.keyword-3 {
	FONT-SIZE: 120%
}
.keyword-4 {
	FONT-SIZE: 110%
}
.keyword-5 {
	FONT-SIZE: 100%
}
.css1 {
	BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: =
#999 1px solid; LINE-HEIGHT: 1.5em; BORDER-BOTTOM: #999 1px solid
}
.css2 {
	BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: =
#999 1px solid; LINE-HEIGHT: 1.5em; BORDER-BOTTOM: #999 1px solid
}
.css3 {
	BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: =
#999 1px solid; LINE-HEIGHT: 1.5em; BORDER-BOTTOM: #999 1px solid
}
.css4 {
	BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: =
#999 1px solid; LINE-HEIGHT: 1.5em; BORDER-BOTTOM: #999 1px solid
}
.css5 {
	BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: =
#999 1px solid; LINE-HEIGHT: 1.5em; BORDER-BOTTOM: #999 1px solid
}
.css6 {
	BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: =
#999 1px solid; LINE-HEIGHT: 1.5em; BORDER-BOTTOM: #999 1px solid
}
.css1 {
	FONT-SIZE: 100%; BACKGROUND-COLOR: #e5e6da
}
.css2 {
	FONT-SIZE: 110%; BACKGROUND-COLOR: #e5e6cb
}
.css3 {
	FONT-SIZE: 120%; BACKGROUND-COLOR: #e5e6ba
}
.css4 {
	FONT-SIZE: 135%; BACKGROUND-COLOR: #e5e6a9
}
.css5 {
	FONT-SIZE: 150%; BACKGROUND-COLOR: #e5e698
}
.css6 {
	FONT-SIZE: 165%; BACKGROUND-COLOR: #e5e687
}
#lead_articles .article {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1.25em; =
PADDING-TOP: 1.25em; BORDER-BOTTOM: #bbb 1px dotted
}
.article_list_item {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1.25em; =
PADDING-TOP: 1.25em
}
.article_list_item + .article_list_item {
	BORDER-TOP: #bbb 1px dotted
}
#lead_articles .article .info {
	MARGIN-BOTTOM: 0.3em; COLOR: #9999a2
}
.article_list_item .info {
	MARGIN-BOTTOM: 0.3em; COLOR: #9999a2
}
#lead_articles .article .info .section {
	FONT-WEIGHT: bold; COLOR: #ff7300
}
.article_list_item .info .section {
	FONT-WEIGHT: bold; COLOR: #ff7300
}
#lead_articles .article DIV {
	FONT-SIZE: 1.15em; LINE-HEIGHT: 1.3em
}
.article_list_item DIV {
	FONT-SIZE: 1.15em; LINE-HEIGHT: 1.3em
}
#lead_articles .article IMG {
	BORDER-RIGHT: #e5e6da 2px solid; BORDER-TOP: #e5e6da 2px solid; =
BORDER-LEFT: #e5e6da 2px solid; BORDER-BOTTOM: #e5e6da 2px solid
}
.article_list_item IMG {
	BORDER-RIGHT: #e5e6da 2px solid; BORDER-TOP: #e5e6da 2px solid; =
BORDER-LEFT: #e5e6da 2px solid; BORDER-BOTTOM: #e5e6da 2px solid
}
#columnists {
	BACKGROUND: url(/images/bg-diag-stripes-tan.gif); MARGIN-BOTTOM: 2em; =
PADDING-BOTTOM: 1em
}
.columnist {
	CLEAR: both; PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: =
0px; PADDING-TOP: 1em
}
.columnist IMG {
	BORDER-RIGHT: #e5e6da 3px solid; BORDER-TOP: #e5e6da 3px solid; FLOAT: =
left; BORDER-LEFT: #e5e6da 3px solid; MARGIN-RIGHT: 1em; BORDER-BOTTOM: =
#e5e6da 3px solid
}
.columnist_feature {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: white; =
PADDING-BOTTOM: 8px; MARGIN-LEFT: 70px; PADDING-TOP: 8px
}
.columnist H3 A {
	FONT-SIZE: 110%; COLOR: #545454
}
.columnist .info .section {
	FONT-WEIGHT: bold; COLOR: #ff7300
}
.author_column {
	FLOAT: left; WIDTH: 32%; LIST-STYLE-TYPE: none
}
.fresh {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 9px; BACKGROUND: =
#ff0; PADDING-BOTTOM: 1px; COLOR: black; PADDING-TOP: 1px
}
#content H4.article_list_date {
	PADDING-RIGHT: 8px; MARGIN-TOP: 2em; PADDING-LEFT: 8px; FONT-SIZE: =
1.1em; BACKGROUND: #deeeff; PADDING-BOTTOM: 2px; PADDING-TOP: 2px
}
#next_prev_links {
	MARGIN-BOTTOM: 1em
}
#content #digg_widget_container A > H3 {
	FONT-SIZE: 13px
}
#navigation {
	WIDTH: 100%
}
#navigation #link_to_past {
	FLOAT: left
}
#navigation #link_to_future {
	FLOAT: right
}
#navigation #dateline H1 {
	TEXT-ALIGN: center
}
#navigation #sort {
	TEXT-ALIGN: right
}
#sidenav {
	BORDER-RIGHT: #545454 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#545454 1px solid; PADDING-LEFT: 3px; FLOAT: left; PADDING-BOTTOM: 3px; =
BORDER-LEFT: #545454 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #545454 =
1px solid
}
#lead_articles .lead {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 1.3em; BACKGROUND: =
#f5f6ea; PADDING-BOTTOM: 10px; PADDING-TOP: 10px
}
#lead_articles .photo {
	FLOAT: left; WIDTH: 120px; MARGIN-RIGHT: 10px; HEIGHT: 120px
}
#lead_photos {
	PADDING-BOTTOM: 10px
}
#lead_photos .photo {
	FONT-WEIGHT: bold; FONT-SIZE: 1.2em; FLOAT: left; MARGIN-BOTTOM: 5px; =
WIDTH: 285px; COLOR: white; MARGIN-RIGHT: 5px; POSITION: relative; =
HEIGHT: 250px
}
#lead_photos .photo .text {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 1.1em; RIGHT: 0px; =
FILTER: alpha(opacity=3D70); BACKGROUND-IMAGE: url(/images/overlay.png); =
PADDING-BOTTOM: 4px; BOTTOM: 0px; PADDING-TOP: 4px; POSITION: absolute; =
opacity: 0.7
}
#lead_photos .photo .long {
	FONT-SIZE: 1em
}
#lead_photos .photo .short {
	FONT-SIZE: 1.2em
}
#lead_photos .photo:hover .text {
	FILTER: alpha(opacity=3D100); opacity: 1.0
}
#lead_photos .photo .section {
	COLOR: #f90
}
#lead_photos A:hover {
	TEXT-DECORATION: none
}
.section_filter {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #f5f6ea; FLOAT: =
right; PADDING-BOTTOM: 8px; WIDTH: 100px; PADDING-TOP: 8px
}
.section_filter H3 {
	FONT-WEIGHT: bold; FONT-SIZE: 1.1em; MARGIN-BOTTOM: 0.5em
}
.section_filter UL {
	LIST-STYLE-TYPE: none
}
.section_filter LI.selected {
	FONT-WEIGHT: bold
}
#archive_nav {
	MARGIN-TOP: 30px; FONT-SIZE: 1.2em; POSITION: relative
}
#archive_nav H3 {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 13px; BACKGROUND: =
#e5e6da; PADDING-BOTTOM: 4px; TEXT-TRANSFORM: uppercase; PADDING-TOP: =
4px; LETTER-SPACING: 0.1em
}
.archive {
	MARGIN-BOTTOM: 1em; BORDER-LEFT: #e5e6da 1px solid; WIDTH: 60%
}
#content #archive_nav .archive H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: =
1em; PADDING-BOTTOM: 0.25em; PADDING-TOP: 0.5em
}
.by_date {
	FLOAT: left; WIDTH: 30%
}
.archive UL {
	LIST-STYLE-TYPE: none
}
.archive LI A {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: =
2px; PADDING-TOP: 2px
}
.archive LI LI A {
	PADDING-LEFT: 20px
}
.archive LI A:hover {
	BACKGROUND: #e5e6da; TEXT-DECORATION: none
}
.by_writer {
	MARGIN-LEFT: 35%
}
.by_keyword {
	MARGIN-LEFT: 35%
}
.by_keyword {
	BORDER-TOP: #e5e6da 3px solid
}
.archive .all_link A {
	DISPLAY: block; FONT-WEIGHT: bold; FONT-SIZE: 0.9em; TEXT-ALIGN: right
}
#related_keywords_sidebar {
	PADDING-RIGHT: 0px; PADDING-LEFT: 8px; FONT-SIZE: 105%; BACKGROUND: =
white; FLOAT: right; PADDING-BOTTOM: 8px; MARGIN: 0px 0px 6px 6px; =
BORDER-LEFT: #e5e6da 1px solid; WIDTH: 120px; PADDING-TOP: 0px
}
#related_keywords_sidebar UL {
	LIST-STYLE-TYPE: none
}
#related_keywords_sidebar LI {
	MARGIN-TOP: 3px
}
#content_cap H1 {
	FONT-SIZE: 20px; MARGIN-BOTTOM: 0px
}
#content #content_cap H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: =
17px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 20px; PADDING-TOP: 0px
}
#day_view H2 {
	CLEAR: left; PADDING-TOP: 1em
}
.photo_article {
	CLEAR: left; PADDING-TOP: 1em
}
.photo_article .section {
	FONT-WEIGHT: bold; COLOR: #ff730c
}
.important_article .section {
	FONT-WEIGHT: bold; COLOR: #ff730c
}
.photo_article .excerpt {
	FONT-SIZE: 110%
}
.important_article {
	CLEAR: left; MARGIN-TOP: 1em
}
.listed_article {
	CLEAR: left; LIST-STYLE-TYPE: none
}
.section_articles UL {
	CLEAR: left; FONT-SIZE: 13px; MARGIN-LEFT: 15px
}
.section_articles .author {
	FONT-SIZE: 11px; COLOR: #999
}
.section_articles .author A:link {
	FONT-SIZE: 11px; COLOR: #999
}
.section_articles .author A:visited {
	FONT-SIZE: 11px; COLOR: #999
}
#article_count {
	FONT-SIZE: 1.3em; MARGIN-BOTTOM: 1em
}
.archive_day .calendar_helper {
	MARGIN: 0px auto; WIDTH: 300px
}
.archive_day .calendar_helper CAPTION {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; FONT-SIZE: =
15px; BACKGROUND: #2286aa; PADDING-BOTTOM: 3px; COLOR: white; =
PADDING-TOP: 3px
}
.archive_day .calendar_helper .day_number {
	PADDING-RIGHT: 2px; DISPLAY: block; PADDING-LEFT: 2px; FONT-SIZE: 13px; =
PADDING-BOTTOM: 2px; PADDING-TOP: 2px; HEIGHT: 32px
}
.archive_day .calendar_helper .day_number:hover {
	BACKGROUND: #fffadd; TEXT-DECORATION: none
}
.archive_day .selected_day {
	FONT-WEIGHT: bold; BACKGROUND: #2286aa; COLOR: white
}
.archive_day .calendar_helper .selected_day:hover {
	FONT-WEIGHT: bold; BACKGROUND: #2286aa; COLOR: white
}

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/stylesheets/ie7.css?1217444655

#masthead {
	PADDING-RIGHT: 8px; PADDING-LEFT: 9px; PADDING-BOTTOM: 7px; =
PADDING-TOP: 10px
}
#content {
	MARGIN-TOP: 201px
}
.article-entertainment #content {
	MARGIN-TOP: 237px
}
.advertisement .ad_heading {
	TOP: -4ex
}
#adsense .ad_heading {
	TOP: -1.5ex
}
#photo_matte * {
	VERTICAL-ALIGN: baseline
}
#photo_matte SPAN {
	FONT-SIZE: 3100%; LINE-HEIGHT: 425px
}

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
Content-Location: http://articles.latimes.com/stylesheets/large-text.css?1217444655

#article_body P {
	FONT-SIZE: 140%
}
#article_body DIV {
	
}
.byline {
	FONT-SIZE: 115%
}

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
Content-Location: http://articles.latimes.com/stylesheets/medium-text.css?1217444655

#article_body P {
	FONT-SIZE: 125%
}
#article_body DIV {
	
}
.byline {
	FONT-SIZE: 100%
}

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
Content-Location: http://articles.latimes.com/stylesheets/small-text.css?1217444655

#article_body P {
	FONT-SIZE: 110%
}
#article_body DIV {
	
}
.byline {
	FONT-SIZE: 85%
}

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/stylesheets/print.css?1217444655

BODY {
	COLOR: black! important
}
BODY * {
	COLOR: black! important
}
A:hover {
	TEXT-DECORATION: none
}
A[href=3D''] {
	FONT-WEIGHT: normal
}
#nav_section A[href=3D''] {
	FONT-WEIGHT: normal
}
#site_info A[href=3D''] {
	FONT-WEIGHT: normal
}
BODY {
	BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN: 0px
}
DIV#container {
	WIDTH: auto; POSITION: static
}
.canvas_outer {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: auto; =
PADDING-TOP: 0px
}
.canvas_inner {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: auto; =
PADDING-TOP: 0px
}
.canvas_content {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
.canvas_bottom_left {
	DISPLAY: none
}
.canvas_bottom_right {
	DISPLAY: none
}
.canvas_bottom {
	DISPLAY: none
}
.canvas_top_left {
	DISPLAY: none
}
.canvas_top_right {
	DISPLAY: none
}
.canvas_top {
	DISPLAY: none
}
#branding {
	WIDTH: auto; BORDER-BOTTOM: #000 1px solid
}
#nav_tools {
	DISPLAY: none
}
#nav_main {
	DISPLAY: none
}
#sitesearch {
	WIDTH: auto
}
#sitesearch #search {
	DISPLAY: none
}
#nav_section .nav {
	DISPLAY: none! important
}
#content {
	MARGIN-TOP: 160px! important; POSITION: relative
}
#content .canvas_content {
	BACKGROUND: none transparent scroll repeat 0% 0%; WIDTH: auto
}
#content_main {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: =
0px; MARGIN: 0px; WIDTH: auto; PADDING-TOP: 0px
}
#content_sub {
	DISPLAY: none! important
}
#site_info {
	MARGIN-BOTTOM: 0px; WIDTH: auto
}
#site_info .canvas_content {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.column_3#site_info .column {
	DISPLAY: none
}
#copyright {
	BORDER-TOP: black 1px solid
}
#copyright SPAN {
	DISPLAY: none
}
#copyright IMG {
	DISPLAY: none
}
#breadcrumbs {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 1ex; =
PADDING-TOP: 1ex
}
#email_and_print {
	DISPLAY: none
}
.advertisement {
	BORDER-LEFT-COLOR: black; BORDER-BOTTOM-COLOR: black; BORDER-TOP-COLOR: =
black; BORDER-RIGHT-COLOR: black
}
.advertisement .ad_heading SPAN {
	BACKGROUND-COLOR: transparent
}
#adsense {
	DISPLAY: none
}
#feeds {
	DISPLAY: none
}
.box_faded {
	BORDER-RIGHT: #666 2px solid; BORDER-TOP: #666 2px solid; BACKGROUND: =
none transparent scroll repeat 0% 0%; BORDER-LEFT: #666 2px solid; =
BORDER-BOTTOM: #666 2px solid
}
.box_solid {
	BORDER-RIGHT: #666 2px solid; BORDER-TOP: #666 2px solid; BACKGROUND: =
none transparent scroll repeat 0% 0%; BORDER-LEFT: #666 2px solid; =
BORDER-BOTTOM: #666 2px solid
}
.box_striped {
	BORDER-RIGHT: #666 2px solid; BORDER-TOP: #666 2px solid; BACKGROUND: =
none transparent scroll repeat 0% 0%; BORDER-LEFT: #666 2px solid; =
BORDER-BOTTOM: #666 2px solid
}
.box_border {
	BORDER-RIGHT: #666 2px solid; BORDER-TOP: #666 2px solid; BACKGROUND: =
none transparent scroll repeat 0% 0%; BORDER-LEFT: #666 2px solid; =
BORDER-BOTTOM: #666 2px solid
}
.box_faded .content {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.box_solid .content {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.box_striped .content {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.box_border .content {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
HR {
	BACKGROUND: black
}
HR.section_divider {
	BACKGROUND: black
}
HR.clear {
	BORDER-LEFT-COLOR: black; BACKGROUND: none transparent scroll repeat 0% =
0%; BORDER-BOTTOM-COLOR: black; BORDER-TOP-COLOR: black; =
BORDER-RIGHT-COLOR: black
}
.section_filter A {
	DISPLAY: none
}
#article_photo_caption {
	BORDER-BOTTOM: #000 1px solid
}
#article_content {
	BORDER-BOTTOM: #000 1px solid
}
#article_related {
	DISPLAY: none
}
#article_content .section {
	DISPLAY: none
}
#save_share {
	DISPLAY: none
}
#discuss_link {
	DISPLAY: none
}
#discussion .all_comments {
	DISPLAY: none
}
#paper_subscription {
	BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; BORDER-LEFT: =
#000 1px solid; BORDER-BOTTOM: #000 1px solid
}
#small_feature {
	DISPLAY: none
}
#gallery_main {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: =
0px; WIDTH: auto; PADDING-TOP: 0px; POSITION: static; HEIGHT: auto! =
important
}
#gallery_sub {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: =
0px; WIDTH: auto; PADDING-TOP: 0px; POSITION: static
}
#inpage_gallery {
	MARGIN: 2ex 0px; WIDTH: auto
}
#gallery_nav {
	BACKGROUND-COLOR: transparent
}
#photo_credit {
	BACKGROUND-COLOR: transparent
}
#prev_photo {
	DISPLAY: none
}
#next_photo {
	DISPLAY: none
}

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://topics.latimes.com/javascripts/contextual_links.js

var TopicsContextualLinks =3D function() {=0A=
  // Since this is served from topics, we know the index url which works =
as our base=0A=
  var base_url =3D 'http://topics.latimes.com/';=0A=
  var section =3D null;=0A=
=0A=
  var iframe =3D null;=0A=
=0A=
  // where the content we're going to parse resides=0A=
  var content_div =3D null;=0A=
  // where the related topics lives=0A=
  var related_div =3D null;=0A=
  var on_load_function =3D null;=0A=
  var count =3D 6;=0A=
  // passing url so we can cache the results=0A=
  var post_url =3D base_url + "topics/topics_in_text/" + =
window.location.hostname + window.location.pathname;=0A=
  if (post_url.search('.html$') =3D=3D -1) {=0A=
    post_url =3D post_url + ".html"=0A=
  }=0A=
=0A=
=0A=
  // add a couple of useful methods normally added by prototype=0A=
  if (!Array.prototype.each) {=0A=
    Array.prototype.each =3D function(f) {for(var =
i=3D0;i<this.length;i++){f(this[i]);}};=0A=
  }=0A=
=0A=
  function doOnLoad(element, funct) {=0A=
    if (element.addEventListener) {=0A=
      element.addEventListener('load', funct, false);=0A=
    } else {=0A=
      element.attachEvent('onload', funct);=0A=
    }=0A=
  }=0A=
=0A=
  function removeOnLoad(element, funct) {=0A=
    if (element.removeEventListener) {=0A=
      element.removeEventListener('load', funct, false);=0A=
    } else {=0A=
      element.detachEvent('onload', funct);=0A=
    }=0A=
  }=0A=
=0A=
  function loadData() {=0A=
    var topics =3D getData();=0A=
    if (topics.length > 0) {=0A=
      embedLinks(content_div, topics);=0A=
      if (related_div) relatedTopics(related_div, count, topics, false);=0A=
    } else if (related_div) {=0A=
      // no data but need to load popular topics=0A=
      doOnLoad(iframe, function() {=0A=
        var hot_topics =3D getData();=0A=
        relatedTopics(related_div, count, hot_topics, true);=0A=
      });=0A=
      iframe.contentWindow.location.replace(base_url + =
"topics/hot_topics");=0A=
    }=0A=
  }=0A=
=0A=
  function getData() {=0A=
    ret =3D [];=0A=
    data =3D iframe.contentWindow.topics;=0A=
    if (data) {=0A=
      for (var i =3D 0, length =3D data.length; i < length; i++)=0A=
        ret.push(data[i]);=0A=
    }=0A=
    return ret;=0A=
  }=0A=
=0A=
  function iframe_document(iframe) {=0A=
    var iframedoc;=0A=
    if (iframe.contentDocument) {=0A=
      // For NS6=0A=
      iframedoc =3D iframe.contentDocument; =0A=
    } else if (iframe.contentWindow) {=0A=
      // For IE5.5 and IE6=0A=
      iframedoc =3D iframe.contentWindow.document;=0A=
    } else if (iframe.document) {=0A=
      // For IE5=0A=
      iframedoc =3D iframe.document;=0A=
    }=0A=
    return iframedoc;=0A=
  }=0A=
=0A=
  function embedLinks(text_div, topics) {=0A=
    var node =3D text_div;=0A=
    if (node =3D=3D null) return;=0A=
    topics.each(function(topic) {=0A=
      regex =3D "(^|[^\\w])" + topic.name.replace(/ /g, '\\s') + =
"([^\\w]|$)";=0A=
      doEmbedLinks(node, topic, regex);=0A=
    });=0A=
  }=0A=
=0A=
  function doEmbedLinks(node, topic, regex) {=0A=
    if (node.nodeName.toLowerCase() =3D=3D 'a') {=0A=
      // ignore links=0A=
    }=0A=
    else if (node.nodeName =3D=3D "#text") { // text=0A=
      if ((index =3D node.nodeValue.search(regex)) > -1) {=0A=
        // don't want to get first \w character=0A=
        if (node.nodeValue.charAt(index).search(/\s/) =3D=3D 0) index++;=0A=
        node =3D node.splitText(index + =
topic.name.length).previousSibling;=0A=
        node =3D node.splitText(index).previousSibling;=0A=
        nameNode =3D node.nextSibling;=0A=
        linkNode =3D document.createElement("a");=0A=
        linkNode.setAttribute("href", topic.url);=0A=
        linkNode.setAttribute("class", "contextual_link");=0A=
        nameNode.parentNode.replaceChild(linkNode, nameNode);=0A=
        linkNode.appendChild(nameNode);=0A=
        return true;=0A=
      }=0A=
    }=0A=
    else if (node.childNodes) {=0A=
      node =3D node.childNodes[0];=0A=
      while (node) {=0A=
        if (doEmbedLinks(node, topic, regex)) return true;=0A=
        node =3D node.nextSibling;=0A=
        // using nextSibling because the childNode list will grow =0A=
        // from the use of splitText above -- we want to get everything!=0A=
      }=0A=
    }=0A=
    return false;=0A=
  }=0A=
=0A=
  function relatedTopics(div, count, topics, hot) {=0A=
    if (div =3D=3D null) return;=0A=
    if (!count) count =3D 4;=0A=
    var matchesHTML;=0A=
    if (hot) {=0A=
      matchesHTML =3D '<h2>Popular Topics</h2>';=0A=
    } else {=0A=
      matchesHTML =3D '<h2>Related Topics</h2>';=0A=
    }=0A=
    matchesHTML +=3D '<div class=3D"content"><ul =
id=3D"related_topics_list">';=0A=
    if (topics.length < count) count =3D topics.length;=0A=
    for (var i =3D 0; i < count; i++) {=0A=
      matchesHTML +=3D createTopicLink(topics[i]);=0A=
    }=0A=
    matchesHTML +=3D '</ul><div class=3D"clear_left">&nbsp;</div></div>';=0A=
    div.innerHTML =3D matchesHTML;=0A=
    document.getElementById('related_topics_list').className =3D =
getLayoutName(count);=0A=
  }=0A=
=0A=
  function createTopicLink(topic) {=0A=
    var html =3D "<li>";=0A=
    if (topic.photo_url) {=0A=
      html +=3D "<a href=3D'"+topic.url+"'><img =
src=3D'"+topic.photo_url+"' height=3D'75' width=3D'100'/></a><br/>";=0A=
    }=0A=
    // re-replace \s in the name=0A=
    var name =3D topic.name.replace(/\\s/g," ");=0A=
    html +=3D "<a href=3D'"+topic.url+"'>"+name+"</a></li>";				=0A=
    return html;=0A=
  }=0A=
=0A=
  function getLayoutName(elements) {=0A=
     switch (elements) {=0A=
     case 1: result =3D 'half'; break;=0A=
     case 2: result =3D 'half'; break;=0A=
     case 4: result =3D 'half'; break;=0A=
     default: result =3D 'third';=0A=
     }=0A=
     return result;=0A=
  }=0A=
=0A=
  // public methods=0A=
  return {=0A=
    link_topics_on_load: function(text_div, topics_div, count, section) {=0A=
      doOnLoad(window, function() { =
TopicsContextualLinks.topics_links(text_div, topics_div, count, section) =
});=0A=
    },=0A=
=0A=
    topics_links: function(text_div, topics_div, size, topic_section) {=0A=
      section =3D topic_section;=0A=
      count =3D size;=0A=
      content_div =3D document.getElementById(text_div);=0A=
      if (content_div =3D=3D null) return;=0A=
      related_div =3D document.getElementById(topics_div);=0A=
      document.domain =3D "latimes.com";=0A=
      iframe =3D document.createElement("iframe");=0A=
      iframe.id =3D "CLIFrame";=0A=
      iframe.style.visibility =3D "hidden";=0A=
      iframe =3D document.body.appendChild(iframe);=0A=
=0A=
      on_load_function =3D function() {=0A=
        removeOnLoad(iframe, on_load_function);=0A=
        iframedoc =3D iframe_document(iframe);=0A=
=0A=
        if ((iframe.contentWindow.topics.length > 0) || =0A=
            iframe.contentWindow.post) {=0A=
          // data was cached=0A=
          loadData();=0A=
          return;=0A=
        }=0A=
        =0A=
        var form =3D iframedoc.createElement("form");=0A=
        form.action =3D post_url;=0A=
        form.method =3D "POST";=0A=
        var field =3D iframedoc.createElement("input");=0A=
        field.type =3D "text";=0A=
        field.name =3D "text";=0A=
        field.value =3D escape(content_div.innerHTML);=0A=
        field =3D form.appendChild(field);=0A=
        form =3D iframedoc.body.appendChild(form);=0A=
=0A=
        on_load_function =3D function() {=0A=
          removeOnLoad(iframe, on_load_function);=0A=
          loadData();=0A=
        };=0A=
        doOnLoad(iframe, on_load_function);=0A=
=0A=
        form.submit();=0A=
        // doing this here because FF doesn't work otherwise for some =
reason=0A=
        iframe.setAttribute("style", "display:none; visibility:hidden; =
width:0px; height:0px; border:0px;");=0A=
      };=0A=
=0A=
      iframe =3D document.body.appendChild(iframe);=0A=
=0A=
      doOnLoad(iframe, on_load_function);=0A=
=0A=
      iframe.contentWindow.location.replace(post_url);=0A=
    }=0A=
=0A=
  };=0A=
}();=0A=
=0A=
=0A=
=0A=
=0A=
var topics_div;=0A=
var count;=0A=
=0A=
function relatedTopics(text, div, c) {=0A=
  topics_div =3D div;=0A=
  count =3D c;=0A=
}=0A=
=0A=
function embedLinks(text_div) {=0A=
  TopicsContextualLinks.topics_links(text_div, topics_div, count)=0A=
}=0A=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/javascripts/prototype.js?1217444655

/*  Prototype JavaScript framework, version 1.6.0.1=0A=
 *  (c) 2005-2007 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://www.prototypejs.org/=0A=
 *=0A=
 =
*------------------------------------------------------------------------=
--*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.6.0.1',=0A=
=0A=
  Browser: {=0A=
    IE:     !!(window.attachEvent && !window.opera),=0A=
    Opera:  !!window.opera,=0A=
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,=0A=
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && =
navigator.userAgent.indexOf('KHTML') =3D=3D -1,=0A=
    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=
=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.isUndefined(object)) 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 (!Object.isUndefined(value))=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 && Object.isUndefined(arguments[0])) return =
this;=0A=
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();=0A=
    return function() {=0A=
      return __method.apply(object, args.concat($A(arguments)));=0A=
    }=0A=
  },=0A=
=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 Object.isUndefined(count) ? 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 Object.isUndefined(truncation) ? '...' : 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;=0A=
    if (str.blank()) return false;=0A=
    str =3D this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');=0A=
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);=0A=
  },=0A=
=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 /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;=0A=
      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 Object.isUndefined(fillWith) ? null : fillWith;=0A=
    return this.eachSlice(number, function(slice) {=0A=
      while(slice.length < number) slice.push(fillWith);=0A=
      return slice;=0A=
    });=0A=
  },=0A=
=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 null || 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 null || 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 (!Object.isUndefined(value)) 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=
=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: function(iterator) {=0A=
      for (var key in this._object) {=0A=
        var value =3D this._object[key], pair =3D [key, value];=0A=
        pair.key =3D key;=0A=
        pair.value =3D value;=0A=
        iterator(pair);=0A=
      }=0A=
    },=0A=
=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=
=0A=
    if (Object.isString(this.options.parameters))=0A=
      this.options.parameters =3D =
this.options.parameters.toQueryParams();=0A=
    else if (Object.isHash(this.options.parameters))=0A=
      this.options.parameters =3D this.options.parameters.toObject();=0A=
  }=0A=
});=0A=
=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 Object.isUndefined(xml) ? 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=
        this.responseText.blank())=0A=
          return null;=0A=
    try {=0A=
      return this.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 Object.clone(options);=0A=
    var onComplete =3D options.onComplete;=0A=
    options.onComplete =3D (function(response, json) {=0A=
      this.updateContent(response.responseText);=0A=
      if (Object.isFunction(onComplete)) onComplete(response, json);=0A=
    }).bind(this);=0A=
=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=
});=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 $(element).getElementsBySelector("*");=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 Object.isUndefined(value) ? true : value;=0A=
=0A=
    for (var attr in attributes) {=0A=
      name =3D t.names[attr] || attr;=0A=
      value =3D attributes[attr];=0A=
      if (t.values[attr]) name =3D t.values[attr](element, value);=0A=
      if (value =3D=3D=3D false || value =3D=3D=3D null)=0A=
        element.removeAttribute(name);=0A=
      else if (value =3D=3D=3D true)=0A=
        element.setAttribute(name, name);=0A=
      else element.setAttribute(name, value);=0A=
    }=0A=
    return element;=0A=
  },=0A=
=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=
    var originalAncestor =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 originalAncestor) 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=
          (Object.isUndefined(elementStyle.styleFloat) ? '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.wrap(=0A=
    function(proceed, element, style) {=0A=
      switch (style) {=0A=
        case 'left': case 'top': case 'right': case 'bottom':=0A=
          if (proceed(element, 'position') =3D=3D=3D 'static') return =
null;=0A=
        case 'height': case 'width':=0A=
          // returns '0px' for hidden elements; we want it to return null=0A=
          if (!Element.visible(element)) return null;=0A=
=0A=
          // returns the border-box dimensions rather than the =
content-box=0A=
          // dimensions, so we subtract padding and borders from the =
value=0A=
          var dim =3D parseInt(proceed(element, style), 10);=0A=
=0A=
          if (dim !=3D=3D element['offset' + style.capitalize()])=0A=
            return dim + 'px';=0A=
=0A=
          var properties;=0A=
          if (style =3D=3D=3D 'height') {=0A=
            properties =3D ['border-top-width', 'padding-top',=0A=
             'padding-bottom', 'border-bottom-width'];=0A=
          }=0A=
          else {=0A=
            properties =3D ['border-left-width', 'padding-left',=0A=
             'padding-right', 'border-right-width'];=0A=
          }=0A=
          return properties.inject(dim, function(memo, property) {=0A=
            var val =3D proceed(element, property);=0A=
            return val =3D=3D=3D null ? memo : memo - parseInt(val, 10);=0A=
          }) + 'px';=0A=
        default: return proceed(element, style);=0A=
      }=0A=
    }=0A=
  );=0A=
=0A=
  Element.Methods.readAttribute =3D Element.Methods.readAttribute.wrap(=0A=
    function(proceed, element, attribute) {=0A=
      if (attribute =3D=3D=3D 'title') return element.title;=0A=
      return proceed(element, attribute);=0A=
    }=0A=
  );=0A=
}=0A=
=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=
          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 =
Element#cumulativeOffset for=0A=
  // KHTML/WebKit only.=0A=
  Element.Methods.cumulativeOffset =3D function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=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=
    var B =3D Prototype.Browser;=0A=
    $w('width height').each(function(d) {=0A=
      var D =3D d.capitalize();=0A=
      dimensions[d] =3D (B.WebKit && !document.evaluate) ? self['inner' =
+ D] :=0A=
        (B.Opera) ? document.body['client' + D] : =
document.documentElement['client' + D];=0A=
    });=0A=
    return dimensions;=0A=
  },=0A=
=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=
  shouldUseXPath: function() {=0A=
    if (!Prototype.BrowserFeatures.XPath) return false;=0A=
=0A=
    var e =3D this.expression;=0A=
=0A=
    // Safari 3 chokes on :*-of-type and :empty=0A=
    if (Prototype.Browser.WebKit &&=0A=
     (e.include("-of-type") || e.include(":empty")))=0A=
      return false;=0A=
=0A=
    // XPath can't do namespaced attributes, nor can it read=0A=
    // the "checked" property from DOM nodes=0A=
    if ((/(\[[\w-]*?:|:checked)/).test(this.expression))=0A=
      return false;=0A=
=0A=
    return true;=0A=
  },=0A=
=0A=
  compileMatcher: function() {=0A=
    if (this.shouldUseXPath())=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: function(m) {=0A=
      m[1] =3D m[1].toLowerCase();=0A=
      return new Template("[@#{1}]").evaluate(m);=0A=
    },=0A=
    attr: function(m) {=0A=
      m[1] =3D m[1].toLowerCase();=0A=
      m[3] =3D m[5] || m[6];=0A=
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);=0A=
    },=0A=
    pseudo: function(m) {=0A=
      var h =3D Selector.xpath.pseudos[m[1]];=0A=
      if (!h) return '';=0A=
      if (Object.isFunction(h)) return h(m);=0A=
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);=0A=
    },=0A=
    operators: {=0A=
      '=3D':  "[@#{1}=3D'#{3}']",=0A=
      '!=3D': "[@#{1}!=3D'#{3}']",=0A=
      '^=3D': "[starts-with(@#{1}, '#{3}')]",=0A=
      '$=3D': "[substring(@#{1}, (string-length(@#{1}) - =
string-length('#{3}') + 1))=3D'#{3}']",=0A=
      '*=3D': "[contains(@#{1}, '#{3}')]",=0A=
      '~=3D': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",=0A=
      '|=3D': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"=0A=
    },=0A=
    pseudos: {=0A=
      'first-child': '[not(preceding-sibling::*)]',=0A=
      'last-child':  '[not(following-sibling::*)]',=0A=
      'only-child':  '[not(preceding-sibling::* or =
following-sibling::*)]',=0A=
      'empty':       "[count(*) =3D 0 and (count(text()) =3D 0 or =
translate(text(), ' \t\r\n', '') =3D '')]",=0A=
      'checked':     "[@checked]",=0A=
      'disabled':    "[@disabled]",=0A=
      'enabled':     "[not(@disabled)]",=0A=
      'not': function(m) {=0A=
        var e =3D m[6], p =3D Selector.patterns,=0A=
            x =3D Selector.xpath, le, v;=0A=
=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, 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(',');=0A=
    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=
if (Prototype.Browser.IE) {=0A=
  // IE returns comment nodes on getElementsByTagName("*").=0A=
  // Filter them out.=0A=
  Selector.handlers.concat =3D function(a, b) {=0A=
    for (var i =3D 0, node; node =3D b[i]; i++)=0A=
      if (node.tagName !=3D=3D "!") a.push(node);=0A=
    return a;=0A=
  };=0A=
}=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 (Object.isUndefined(options.hash)) 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 (Object.isUndefined(value)) return element.checked ? =
element.value : null;=0A=
    else element.checked =3D !!value;=0A=
  },=0A=
=0A=
  textarea: function(element, value) {=0A=
    if (Object.isUndefined(value)) return element.value;=0A=
    else element.value =3D value;=0A=
  },=0A=
=0A=
  select: function(element, index) {=0A=
    if (Object.isUndefined(index))=0A=
      return this[element.type =3D=3D 'select-one' ?=0A=
        'selectOne' : 'selectMany'](element);=0A=
    else {=0A=
      var opt, value, single =3D !Object.isArray(index);=0A=
      for (var i =3D 0, length =3D element.length; i < length; i++) {=0A=
        opt =3D element.options[i];=0A=
        value =3D this.optionValue(opt);=0A=
        if (single) {=0A=
          if (value =3D=3D index) {=0A=
            opt.selected =3D true;=0A=
            return;=0A=
          }=0A=
        }=0A=
        else opt.selected =3D index.include(value);=0A=
      }=0A=
    }=0A=
  },=0A=
=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=
      if (!expression) return element;=0A=
      var elements =3D [element].concat(element.ancestors());=0A=
      return Selector.findElement(elements, expression, 0);=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.extend(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();
------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/javascripts/effects.js?1217444655

// Copyright (c) 2005-2008 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=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/javascripts/dragdrop.js?1217444655

// Copyright (c) 2005-2008 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=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/javascripts/controls.js?1217444655

// Copyright (c) 2005-2008 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, 'keydown', =
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=
         Event.stop(event);=0A=
         return;=0A=
       case Event.KEY_DOWN:=0A=
         this.markNext();=0A=
         this.render();=0A=
         Event.stop(event);=0A=
         return;=0A=
      }=0A=
     else =0A=
       if(event.keyCode=3D=3DEvent.KEY_TAB || =
event.keyCode=3D=3DEvent.KEY_RETURN || =0A=
         (Prototype.Browser.WebKit > 0 && event.keyCode =3D=3D 0)) =
return;=0A=
=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=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/javascripts/application.js?1217444655

// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag =
:defaults

var Cookies =3D Class.create();
Object.extend(Cookies.prototype, {
	initialize: function() {
		var allCookies =3D document.cookie.split('; ');
	=09
		for (var i =3D 0; i < allCookies.length; i++) {
			var cookiePair =3D allCookies[i].split('=3D');
		=09
			this[cookiePair[0]] =3D cookiePair[1];
		}
	},
=09
	create: function(/* String */ name, /* String */ value, /* integer */ =
days) {
		if (null =3D=3D name)=20
			return;
	=09
		if (null =3D=3D value)=20
			value =3D "";
	=09
		var expires =3D -1;
		if (days) {
			var date =3D new Date();
			date.setTime(date.getTime() + (days * 86400000));
			expires =3D date.toGMTString();
		}
	=09
		var secure =3D "";
		if (new String(window.location).indexOf("https:") >=3D 0)=20
			secure =3D ";secure";
	=09
		document.cookie =3D =
name+"=3D"+value+";expires=3D"+expires+";path=3D/"+secure;
		this[name] =3D value;
	},
=09
	erase: function(/* String */ name) {
		this.create(name);
		this[name] =3D null;
	}
});

var TextStyleSwitcher =3D Class.create();
Object.extend(TextStyleSwitcher.prototype, {
	/* Required */
	increaseIcon: 	null,
	decreaseIcon: 	null,
=09
	/* Optional */
	defaultStyle: 	0,
	currentStyle: 	0,
	styles: 		{},
=09
	limitLower: 	0,
	limitUpper: 	2,
=09
	hideIcons: 		true,
=09
	initialize: function(options) {
		this.styles =3D new Array();
	=09
		for (i in options)=20
			this[i] =3D options[i];
	=09
		if (this.styles.length <=3D 0) {
			var links =3D $A(document.getElementsByTagName("LINK"));
		=09
			while (links.length) {
				var link =3D links.pop();
				if (link.getAttribute("type") =3D=3D "text/css" && =
link.getAttribute("rel").indexOf("alt") >=3D 0)=20
					this.styles.push(link);
			}
		}
	=09
		this.getTextStyleCookie();
	=09
		if (isNaN(this.currentStyle)) {
			this.currentStyle =3D 0;
		}
	=09
		if (this.currentStyle !=3D this.defaultStyle)
			this.setTextStyle();
	=09
		Event.observe(this.increaseIcon, "click", function(evt) {
			if (textStyleSwitcher.limitUpper > textStyleSwitcher.currentStyle) {
				textStyleSwitcher.switchTextStyle(true);
			}
		});
	=09
		Event.observe(this.decreaseIcon, "click", function(evt) {
			if (textStyleSwitcher.limitLower < textStyleSwitcher.currentStyle) {
				textStyleSwitcher.switchTextStyle(false);
			}
		});
	=09
		if (this.hideIcons) {
			if (this.currentStyle >=3D this.limitUpper)=20
				this.showIcon(this.increaseIcon, false);
		=09
			if (this.currentStyle <=3D this.limitLower)=20
				this.showIcon(this.decreaseIcon, false);
		}
	},
=09
	getTextStyleCookie: function() {
		if (null =3D=3D window.cookies)=20
			window.cookies =3D new Cookies();
	=09
		this.currentStyle =3D cookies["textStyle"];
	},
=09
	setTextStyleCookie: function() {
		if (null =3D=3D window.cookies)=20
			window.cookies =3D new Cookies();
	=09
		cookies.create("textStyle", this.currentStyle, 1825);
	=09
		var compatString =3D "smalltext"
		switch (this.currentStyle) {
			case 0: compatString =3D "smalltext"; break;
			case 1: compatString =3D "mediumtext"; break;
			case 2: compatString =3D "largetext"; break;
			default: compatString =3D "smalltext";
		}
		cookies.create("defaultCSS", compatString, 1825);
	},
=09
	switchTextStyle: function(/* boolean */ increase) {
		var showIncrease =3D true;
		var showDecrease =3D true;

		if (increase) {
			this.currentStyle++;
			if (this.currentStyle >=3D this.limitUpper) {
				showIncrease =3D false;
			}
		} else {
			this.currentStyle--;
			if (this.currentStyle <=3D this.limitLower) {
				showDecrease =3D false;
			}
		}
=09
		if (this.hideIcons) {
			this.showIcon(this.increaseIcon, showIncrease);
			this.showIcon(this.decreaseIcon, showDecrease);
		}
=09
		this.setTextStyle();
		this.setTextStyleCookie();
	},
=09
	setTextStyle: function() {
		for (var i =3D 0; i < this.styles.length; i++) {
			var disable =3D true;
			if (i =3D=3D this.currentStyle)=20
				disable =3D false;
		=09
			this.styles[i].disabled =3D disable;
		}
	},
=09
	showIcon: function(/* Element */ link, /* boolean */ show) {
		var state =3D show ? "visible" : "hidden";
		Element.setStyle(link, { visibility: state });
	}
});

var AdSenseRenderer =3D Class.create();
Object.extend(AdSenseRenderer.prototype, {
	container: {},
=09
	initialize: function(/* Element */ container) {
		this.container =3D container;
	},
=09
	render: function(/* Array */ ads) {
		this.container.getElementsByClassName("ad_heading")[0].href =3D =
google_info.feedback_url;
	=09
		for (var i =3D 0; i < ads.length; i++) {
			var ad =3D ads[i];
		=09
			var adDiv =3D document.createElement("DIV");
			adDiv.className =3D "text-ad-ent";
		=09
			var adLink =3D document.createElement("A");
			adLink.className =3D "ad-link-ent";
			adLink.href =3D ad.url;
			adLink.title =3D ad.visible_url;
			Event.observe(adLink, "mouseover", function(evt) {
				window.status =3D Event.element(evt).getAttribute("title");
			});
			Event.observe(adLink, "mouseout", function() {
				window.status =3D "";
			});
		    adLink.innerHTML =3D new String(ad.line1);
			adDiv.appendChild(adLink);
		=09
			adDiv.appendChild(document.createElement("BR"));
		=09
			var text =3D "";
			for (var n =3D 2; ad["line" + n]; n++)=20
				text +=3D ad["line" + n] + " ";
		=09
		    var adText =3D document.createElement("SPAN");
		    adText.innerHTML =3D new String(text);
			adDiv.appendChild(adText);
		=09
			adDiv.appendChild(document.createElement("BR"));
		=09
			var adUrl =3D document.createElement("A");
			adUrl.className =3D "ad-link-ent";
			adUrl.href =3D ad.url;
			adUrl.title =3D ad.visible_url;
			Event.observe(adUrl, "mouseover", function(evt) {
				window.status =3D Event.element(evt).getAttribute("title");
			});
			Event.observe(adUrl, "mouseout", function() {
				window.status =3D "";
			});
			adUrl.appendChild(document.createTextNode(ad.visible_url));
			adDiv.appendChild(adUrl);
		=09
			this.container.appendChild(adDiv);
		}
	}
});


// Onload stuff goes here
Event.observe(window, "load", function() {
	window.textStyleSwitcher =3D new TextStyleSwitcher({
		increaseIcon: $("text_increase"),
		decreaseIcon: $("text_decrease")
	});
=09
	if (null !=3D $("most_tabs")) {
		var tabs =3D =
$A($("most_tabs").getElementsByClassName("tabs")[0].getElementsByTagName(=
"LI")).flatten();
		for (var i =3D 0; i < tabs.length; i++) {
			Event.observe(tabs[i].getElementsByTagName("A")[0], "click", =
function(evt) {
				var tab =3D Event.element(evt).parentNode;
				Element.addClassName(tab, "selected");
				var tabs =3D =
$A(tab.parentNode.getElementsByTagName("LI")).flatten();
				var panels =3D =
$A($("most_tabs").getElementsByClassName("tab_panel")).flatten();
				for (var i =3D 0; i < tabs.length; i++) {
					if (tabs[i] =3D=3D tab)=20
						Element.addClassName(panels[i], "selected");
					else {
						Element.removeClassName(tabs[i], "selected");
						Element.removeClassName(panels[i], "selected");
					}
				}
			});
		}
	}
});



------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://pagead2.googlesyndication.com/pagead/show_ads.js

(function(){=0A=
var g=3Ddocument,l=3Dnavigator,m=3Dwindow;function aa(){var =
a=3Dg.cookie,c=3DMath.round((new =
Date).getTime()/1000),b=3Dm.google_analytics_domain_name,d=3Dtypeof =
b=3D=3D"undefined"?ba("auto"):ba(b),e=3Da.indexOf("__utma=3D"+d+".")>-1,f=
=3Da.indexOf("__utmb=3D"+d)>-1,i=3Da.indexOf("__utmc=3D"+d)>-1,k,j=3D{};i=
f(e){k=3Da.split("__utma=3D"+d+".")[1].split(";")[0].split(".");j.sid=3Df=
&&i?k[3]+"":m&&m.gaGlobal&&m.gaGlobal.sid?m.gaGlobal.sid:c+"";j.vid=3Dk[0=
]+"."+k[1];j.from_cookie=3Dtrue;j.dh=3Dd}else{j.sid=3Dm&&m.gaGlobal&&m.ga=
Global.sid?m.gaGlobal.sid:=0A=
c+"";j.vid=3Dm&&m.gaGlobal&&m.gaGlobal.vid?m.gaGlobal.vid:(ca()^ha())*214=
7483647+"."+c;j.from_cookie=3Dfalse}j.hid=3Dm&&m.gaGlobal&&m.gaGlobal.hid=
?m.gaGlobal.hid:ca();m.gaGlobal=3Dj;return j}function ca(){return =
Math.round(Math.random()*2147483647)}function ha(){var =
a=3Dg.cookie?g.cookie:"",c=3Dm.history.length,b,d,e=3D[l.appName,l.versio=
n,l.language?l.language:l.browserLanguage,l.platform,l.userAgent,l.javaEn=
abled()?1:0].join("");if(m.screen)e+=3Dm.screen.width+"x"+m.screen.height=
+m.screen.colorDepth;else if(m.java){d=3D=0A=
java.awt.Toolkit.getDefaultToolkit().getScreenSize();e+=3Dd.screen.width+=
"x"+d.screen.height}e+=3Da;e+=3Dg.referrer?g.referrer:"";b=3De.length;whi=
le(c>0)e+=3Dc--^b++;return ia(e)}function ia(a){var =
c=3D1,b=3D0,d,e;if(!(a=3D=3Dundefined||a=3D=3D"")){c=3D0;for(d=3Da.length=
-1;d>=3D0;d--){e=3Da.charCodeAt(d);c=3D(c<<6&268435455)+e+(e<<14);b=3Dc&2=
66338304;c=3Db!=3D0?c^b>>21:c}}return c}function =
ba(a){if(!a||a=3D=3D""||a=3D=3D"none")return =
1;if("auto"=3D=3Da){a=3Dg.domain;if("www."=3D=3Da.substring(0,4))a=3Da.su=
bstring(4,a.length)}return ia(a)};var =
s=3D{google_ad_channel:"channel",google_ad_host:"host",google_ad_host_cha=
nnel:"h_ch",google_ad_host_tier_id:"ht_id",google_ad_region:"region",goog=
le_ad_section:"region",google_ad_type:"ad_type",google_adtest:"adtest",go=
ogle_alternate_ad_url:"alternate_ad_url",google_alternate_color:"alt_colo=
r",google_bid:"bid",google_city:"gcs",google_color_bg:"color_bg",google_c=
olor_border:"color_border",google_color_line:"color_line",google_color_li=
nk:"color_link",google_color_text:"color_text",google_color_url:"color_ur=
l",=0A=
google_contents:"contents",google_country:"gl",google_cust_age:"cust_age"=
,google_cust_ch:"cust_ch",google_cust_gender:"cust_gender",google_cust_id=
:"cust_id",google_cust_interests:"cust_interests",google_cust_job:"cust_j=
ob",google_cust_l:"cust_l",google_cust_lh:"cust_lh",google_cust_u_url:"cu=
st_u_url",google_disable_video_autoplay:"disable_video_autoplay",google_e=
d:"ed",google_encoding:"oe",google_feedback:"feedback_link",google_flash_=
version:"flash",google_gl:"gl",google_hints:"hints",google_kw:"kw",=0A=
google_kw_type:"kw_type",google_language:"hl",google_referrer_url:"ref",g=
oogle_region:"gr",google_reuse_colors:"reuse_colors",google_safe:"adsafe"=
,google_targeting:"targeting",google_ui_features:"ui",google_video_doc_id=
:"video_doc_id",google_video_product_type:"video_product_type",google_pag=
e_url:"url"},y=3D{google_ad_format:"format",google_ad_output:"output",goo=
gle_ad_callback:"callback",google_ad_override:"google_ad_override",google=
_ad_slot:"slotname",google_analytics_uacct:"ga_wpids",google_correlator:"=
correlator",=0A=
google_cpa_choice:"cpa_choice",google_ctr_threshold:"ctr_t",google_image_=
size:"image_size",google_last_modified_time:"lmt",google_max_num_ads:"num=
_ads",google_max_radlink_len:"max_radlink_len",google_num_radlinks:"num_r=
adlinks",google_num_radlinks_per_unit:"num_radlinks_per_unit",google_only=
_ads_with_video:"only_ads_with_video",google_page_location:"loc",google_r=
l_dest_url:"rl_dest_url",google_rl_filtering:"rl_filtering",google_rl_mod=
e:"rl_mode",google_rt:"rt",google_skip:"skip"};function =
z(){}z.prototype.n=3Dfunction(){};z.prototype.o=3Dfunction(){};z.prototyp=
e.m=3Dfunction(){};var D=3Dnull;function E(a){D&&D.n(a)}function =
H(a){D&&D.o(a)}function ja(a){D&&D.m(a)}function =
I(){this.b=3Dthis.k();this.e=3Dfalse;if(!this.b){this.e=3Dthis.g();if(!th=
is.e)H("Browser does not allow =
cookies")}}I.prototype.d=3D"__gads=3D";I.prototype.c=3D"GoogleAdServingTe=
st=3D";I.prototype.j=3Dfunction(){return =
this.b};I.prototype.setCookieInfo=3Dfunction(a){this.a=3Da._cookies_[0];i=
f(this.a!=3Dnull){this.b=3Dthis.a._value_;this.l()}};=0A=
I.prototype.i=3Dfunction(a){var c=3D(new Date).valueOf(),b=3Dnew =
Date;b.setTime(c+a);return =
b};I.prototype.h=3Dfunction(a){if(this.b!=3Dnull||!this.e){E("Skipping =
fetch cookie call");return}var =
c=3D"script",b=3Ddocument.domain,d=3D"http://partner.googleadservices.com=
/gampad/cookie.js?callback=3D_GA_googleCookieHelper.setCookieInfo&client=3D=
"+J(a)+"&domain=3D"+J(b);E("Issuing a fetch cookie call with <a =
href=3D'"+d+"'>"+d+"</a>");document.write("<"+c+' =
src=3D"'+d+'"></'+c+">")};I.prototype.g=3Dfunction(){document.cookie=3Dth=
is.c+=0A=
"Good";var a=3Dthis.f(this.c),c=3Da=3D=3D"Good";if(c){var =
b=3Dthis.i(-1);document.cookie=3Dthis.c+"; =
expires=3D"+b.toGMTString()}return c};I.prototype.k=3Dfunction(){var =
a=3Dthis.f(this.d);if(a!=3Dnull)E("Read first party cookie: "+a);else =
H("No first party cookie found");return =
a};I.prototype.f=3Dfunction(a){var =
c=3Ddocument.cookie,b=3Dc.indexOf(a),d=3Dnull;if(b!=3D-1){var =
e=3Db+a.length,f=3Dc.indexOf(";",e);if(f=3D=3D-1)f=3Dc.length;d=3Dc.subst=
ring(e,f)}return =
d};I.prototype.l=3Dfunction(){if(this.a=3D=3Dnull)H("Skipping cookie =
creation: no cookie info");=0A=
else if(this.b=3D=3Dnull)ja("Skipping cookie creation: no cookie =
value");else{var a=3Dnew Date;a.setTime(1000*this.a._expires_);var =
c=3Dthis.a._domain_,b=3Dthis.d+this.b+"; expires=3D"+a.toGMTString()+"; =
path=3D"+this.a._path_+"; domain=3D."+c;document.cookie=3Db;E("Written =
cookie: "+b)}};function =
ka(){if(navigator.plugins&&navigator.mimeTypes.length){var =
a=3Dnavigator.plugins["Shockwave Flash"];if(a&&a.description)return =
a.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s)+r/,".")}else =
if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=3D=0A=
0){var c=3D3,b=3D1;while(b)try{b=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash."+(c+1));c++}catch(d){b=3Dnu=
ll}return c.toString()}else if(la("msie")&&!window.opera){var =
b=3Dnull;try{b=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(d){var =
c=3D0;try{b=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");c=3D6;b.AllowScriptAcces=
s=3D"always"}catch(d){if(c=3D=3D6)return c.toString()}try{b=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(d){}}if(b!=3Dnull){v=
ar c=3Db.GetVariable("$version").split(" ")[1];=0A=
return =
c.replace(/,/g,".")}}return"0"};window.IDICommon=3Dwindow.IDICommon||(fun=
ction(){return{getHash:function(a){var c=3Da.indexOf("#")+1;return =
c?a.substr(c):""},htmlEscape:function(a){return/[&<>\"]/.test(a)?a.replac=
e(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"=
&quot;"):a},makeIframeTag:function(a){var c=3D"<iframe";for(var b in =
a)c+=3D" "+b+'=3D"'+IDICommon.htmlEscape(a[b])+'"';return =
c+"></iframe>"},getIframe:function(a,c){try{return =
a.frames[c]}catch(b){return null}},makeIframeNode:function(a){var =
c=3Ddocument.createElement("iframe");=0A=
for(var b in a)c.setAttribute(b,a[b]);return =
c},appendHiddenIframe:function(a,c){setTimeout(function(){document.body.a=
ppendChild(IDICommon.makeIframeNode({id:a,name:a,src:c,width:0,height:0,f=
rameBorder:0}))},0)},writeHiddenIframe:function(a,c){document.write(IDICo=
mmon.makeIframeTag({id:a,name:a,src:c,width:0,height:0,frameBorder:0}))},=
splitURIComponent:function(a,c){var =
b=3D[],d=3Da.length,e=3D0;while(e<d){var =
f=3Da.substr(e,c),i=3Df.length;if(e+i<d)for(var =
k=3D1;k<3;++k)if(f.charAt(i-k)=3D=3D"%")f=3Df.substr(0,i-=3D=0A=
k);b.push(f);e+=3Di}return =
b},MAX_URL_LENGTH:4095,IDI_DEFAULT_POLLING_INTERVAL:1000}})();window.IDIH=
ost=3Dwindow.IDIHost||(function(){var =
a=3Dwindow.location.href.replace(/([^:\/])\/.*$/,"$1/robots.txt"),c=3D"",=
b=3D{},d=3D{},e=3D{},f=3D{},i=3D{};function k(h,n){for(var t in =
n)h[t]=3Dn[t]}function j(h,n){var t=3Dwindow.frames[h];if(t){var =
w;while(w=3DIDICommon.getIframe(t,h+"_"+b[h])){try{if(w.location.href=3D=3D=
"about:blank")break}catch(u){break}e[h]+=3DIDICommon.getHash(w.location.h=
ref);++b[h]}var =
v=3De[h].split("$"),B=3Dv.length-1;if(B>0){e[h]=3Dv[B];for(var =
C=3D0;C<B;++C)n(decodeURIComponent(v[C]),h)}}}function q(h){return c||=0A=
h.replace(/([^:\/]\/).*$/,"$1ig/idi_relay")}function =
o(h){window.clearInterval(i[h]);i[h]=3D0}function r(h){a=3Dh}function =
p(h){c=3Dh}function =
x(h,n,t){o(h);i[h]=3Dwindow.setInterval(function(){j(h,n)},typeof =
t=3D=3D"object"&&t.pollingInterval||IDICommon.IDI_DEFAULT_POLLING_INTERVA=
L)}function Q(h,n,t){var w;if(typeof =
t=3D=3D"object")w=3Dt.moduleRelayUrl;var u=3Dd[h];if(isNaN(u))throw new =
Error("Invalid module id");else{var v=3Dtypeof =
w=3D=3D"string"?w:q(f[h]),B=3DencodeURIComponent(n)+"$",C=3DIDICommon.MAX=
_URL_LENGTH-1-v.length,=0A=
F=3DIDICommon.splitURIComponent(B,C),R=3DF.length;for(var =
A=3D0;A<R;++A)IDICommon.appendHiddenIframe(h+"_"+(u+A),v+"#"+F[A]);d[h]+=3D=
R}}function S(h,n,t,w,u){var =
v=3D{frameBorder:0,scrolling:"no"},B,C,F,R,A;if(typeof =
u=3D=3D"object"){B=3Du.iframeAttrs;C=3Du.callback;F=3Du.userPrefs;R=3Du.p=
ollingInterval;A=3Du.parentDivId}if(typeof =
B=3D=3D"object")k(v,B);k(v,{id:n,name:n,src:h,width:t,height:w});b[n]=3D0=
;d[n]=3D0;e[n]=3D"";f[n]=3Dh;var T=3D[];if(typeof =
F=3D=3D"object")for(var G in =
F)T.push(encodeURIComponent(G)+"=3D"+encodeURIComponent(F[G]));=0A=
if(typeof =
C=3D=3D"function"){T.push("idi_hr=3D"+encodeURIComponent(a));window.IDIHo=
st.registerListener(n,C,u)}if(T.length){var =
K=3DT.join("&");if(v.src.length+1+K.length>IDICommon.MAX_URL_LENGTH){K+=3D=
"$";var =
da=3Dq(h),ta=3DIDICommon.MAX_URL_LENGTH-1-da.length,ea=3DIDICommon.splitU=
RIComponent(K,ta),fa=3Dea.length;for(var G=3D0;G<fa;++G){var =
X=3Dn+"_"+G,ga=3Dda+"#"+ea[G];if(A){var =
Y=3Ddocument.getElementById(A);Y.innerHTML+=3DIDICommon.makeIframeTag({id=
:X,name:X,src:ga,width:0,height:0,frameBorder:0})}else =
IDICommon.writeHiddenIframe(X,=0A=
ga)}d[n]+=3Dfa;K=3D""}v.src+=3D"#"+K}if(A){var =
Y=3Ddocument.getElementById(A);Y.innerHTML+=3DIDICommon.makeIframeTag(v)}=
else =
document.write(IDICommon.makeIframeTag(v))}return{setHostRelayUrl:r,setMo=
duleRelayUrl:p,getModuleRelayUrl:q,registerListener:x,unregisterListener:=
o,postMessageToModule:Q,createModule:S}})();var ma=3Dma||{},L=3Dthis;var =
na=3Dfunction(a,c){var b=3Dc.length;for(var d=3D0;d<b;d++){var =
e=3Db=3D=3D1?c:c.charAt(d);if(a.charAt(0)=3D=3De&&a.charAt(a.length-1)=3D=
=3De)return a.substring(1,a.length-1)}return a};var =
oa,pa,qa,ra,sa,ua,va,wa,xa,ya,za,Aa=3Dfunction(){var =
a=3Dfalse,c=3Dfalse,b=3Dfalse,d=3Dfalse,e=3Dfalse,f=3Dfalse,i=3Dfalse,k=3D=
false,j=3Dfalse,q=3D"";if(L.navigator){var =
o=3DL.navigator,r=3Do.userAgent;a=3Dr.indexOf("Opera")=3D=3D0;c=3D!a&&r.i=
ndexOf("MSIE")!=3D-1;b=3D!a&&r.indexOf("WebKit")!=3D-1;j=3Db&&r.indexOf("=
Mobile")!=3D-1;d=3D!a&&!b&&o.product=3D=3D"Gecko";e=3Dd&&o.vendor=3D=3D"C=
amino";var =
p,x;if(a)p=3DL.opera.version();else{if(d)x=3D/rv\:([^\);]+)(\)|;)/;else =
if(c)x=3D/MSIE\s+([^\);]+)(\)|;)/;else =
if(b)x=3D/WebKit\/(\S+)/;if(x){x.test(r);p=3DRegExp.$1}}q=3D=0A=
o.platform||"";f=3Dq.indexOf("Mac")!=3D-1;i=3Dq.indexOf("Win")!=3D-1;k=3D=
q.indexOf("Linux")!=3D-1}oa=3Da;pa=3Dc;qa=3Dd;ra=3De;sa=3Db;ua=3Dj;va=3Dp=
;wa=3Dq;xa=3Df;ya=3Di;za=3Dk};Aa();var Ba=3Doa;var =
Ca=3Dfunction(a){return typeof =
a=3D=3D"string"?document.getElementById(a):a},Da=3DCa;var =
Ea=3Dfunction(a){return =
a.nodeType=3D=3D9?a:a.ownerDocument||a.document};var =
Fa=3Dfunction(a,c){var =
b=3DEa(a);if(b.defaultView&&b.defaultView.getComputedStyle){var =
d=3Db.defaultView.getComputedStyle(a,"");if(d)return d[c]}return =
null};var Ga=3Dfunction(a){var =
c=3DEa(a),b=3D"";if(c.createTextRange){var =
d=3Dc.body.createTextRange();d.moveToElementText(a);b=3Dd.queryCommandVal=
ue("FontName")}if(!b){b=3DFa(a,"fontFamily")||(a.currentStyle?a.currentSt=
yle.fontFamily:null)||a.style.fontFamily;if(Ba&&za)b=3Db.replace(/ =
\[[^\]]*\]/,"")}var e=3Db.split(",");if(e.length>1)b=3De[0];return =
na(b,"\"'")};function M(a){return a!=3Dnull?'"'+a+'"':'""'}function =
J(a){return typeof =
encodeURIComponent=3D=3D"function"?encodeURIComponent(a):escape(a)}functi=
on N(a,c){if(a&&c)window.google_ad_url+=3D"&"+a+"=3D"+c}function =
O(a){var c=3Dwindow,b=3Ds[a]||y[a]||null,d=3Dc[a];N(b,d)}function =
P(a,c){if(c)N(a,J(c))}function U(a){var =
c=3Dwindow,b=3Ds[a]||y[a]||null,d=3Dc[a];P(b,d)}function V(a,c){var =
b=3Dwindow,d=3Ds[a]||y[a]||null,e=3Db[a];if(d&&e&&typeof =
e=3D=3D"object")e=3De[c%e.length];N(d,e)}function Ha(a,c){var =
b=3Da.screen,d=3Dnavigator.javaEnabled(),=0A=
e=3D-c.getTimezoneOffset();if(b){N("u_h",b.height);N("u_w",b.width);N("u_=
ah",b.availHeight);N("u_aw",b.availWidth);N("u_cd",b.colorDepth)}N("u_tz"=
,e);N("u_his",history.length);N("u_java",d);if(navigator.plugins)N("u_npl=
ug",navigator.plugins.length);if(navigator.mimeTypes)N("u_nmime",navigato=
r.mimeTypes.length)}function =
Ia(a){if(!a.google_enable_first_party_cookie)return;if(D=3D=3Dnull)D=3Dne=
w z;if(a._GA_googleCookieHelper=3D=3Dnull)a._GA_googleCookieHelper=3Dnew =
I;if(!a._google_cookie_fetched){a._google_cookie_fetched=3D=0A=
true;a._GA_googleCookieHelper.h(W(a.google_ad_client))}}function =
W(a){if(a){a=3Da.toLowerCase();if(a.substring(0,3)!=3D"ca-")a=3D"ca-"+a}r=
eturn a}function =
Ja(a){if(a){a=3Da.toLowerCase();if(a.substring(0,9)!=3D"dist-aff-")a=3D"d=
ist-aff-"+a}return a}function Ka(a,c){var =
b=3Ddocument.getElementById(a);b.style.height=3Dc+"px"}function =
La(a,c,b){window.clearTimeout(b);var =
d=3D/^google_resize_flash_ad_idi\((\d+)\)/,e=3Da.match(d);if(e)Ka(c,e[1])=
}function =
Ma(a,c,b,d){b=3Db.substring(0,2000);b=3Db.replace(/%\w?$/,"");var =
e=3D"script";=0A=
if((a.google_ad_output=3D=3D"js"||a.google_ad_output=3D=3D"json_html")&&(=
a.google_ad_request_done||a.google_radlink_request_done))c.write("<"+e+' =
language=3D"JavaScript1.1" src=3D'+M(b)+"></"+e+">");else =
if(a.google_ad_output=3D=3D"html"){if(a.name!=3D"google_ads_frame"){if(d!=
=3Dnull)c.write('<div =
id=3D"'+d+'">');if(Na(a.google_ad_output,a.google_ad_client)){IDIHost.set=
ModuleRelayUrl("http://pagead2.googlesyndication.com/pagead/idi_relay.htm=
l");var =
f=3D0;if(a.google_num_0ad_slots)f+=3Da.google_num_0ad_slots;if(a.google_n=
um_ad_slots)f+=3D=0A=
a.google_num_ad_slots;if(a.google_num_sdo_slots)f+=3Da.google_num_sdo_slo=
ts;var i=3D"google_inline_div"+f,k=3D"<div id=3D"+M(i)+' =
style=3D"position:relative;width:'+a.google_ad_width+'px"></div><div =
style=3D"position:relative;width:'+a.google_ad_width+"px;height:"+a.googl=
e_ad_height+'px;z-index:-1"></div>';c.write(k);var =
j=3D"google_frame"+f,q=3Da.setTimeout(function(){IDIHost.unregisterListen=
er(j)},5000);IDIHost.createModule(b,j,a.google_ad_width,a.google_ad_heigh=
t,{callback:function(o,r){La(o,r,q)},pollingInterval:500,=0A=
iframeAttrs:{style:"position: =
absolute;left:0px",marginWidth:"0",marginHeight:"0",vspace:"0",hspace:"0"=
,allowTransparency:"true"},parentDivId:i})}else{c.write('<iframe =
name=3D"google_ads_frame" width=3D'+M(a.google_ad_width)+" =
height=3D"+M(a.google_ad_height)+" =
frameborder=3D"+M(a.google_ad_frameborder)+" src=3D"+M(b)+' =
marginwidth=3D"0" marginheight=3D"0" vspace=3D"0" hspace=3D"0" =
allowtransparency=3D"true" =
scrolling=3D"no">');c.write("</iframe>")}if(d!=3Dnull)c.write("</div>")}}=
else if(a.google_ad_output=3D=3D"textlink")c.write("<"+=0A=
e+' language=3D"JavaScript1.1" src=3D'+M(b)+"></"+e+">")}function =
Oa(a){for(var c in s)a[c]=3Dnull;for(var c in =
y){if(c=3D=3D"google_correlator")continue;a[c]=3Dnull}}function =
Pa(a){if(a.google_ad_format)return =
a.google_ad_format.indexOf("_0ads")>0;return =
a.google_ad_output!=3D"html"&&a.google_num_radlinks>0}function =
Z(a){return a&&a.indexOf("_sdo")!=3D-1}function Qa(a){var =
c=3Dnull,b=3Dwindow,d=3Ddocument,e=3Dnew =
Date,f=3De.getTime(),i=3Db.google_ad_format,k=3D"http://pagead2.googlesyn=
dication.com";if(b.google_cpa_choice!=3Dc){b.google_ad_url=3D=0A=
k+"/cpa/ads?";b.google_ad_url+=3D"client=3D"+escape(W(b.google_ad_client)=
);b.google_ad_region=3D"_google_cpa_region_";O("google_cpa_choice");if(ty=
peof d.characterSet!=3D"undefined")P("oe",d.characterSet);else if(typeof =
d.charset!=3D"undefined")P("oe",d.charset)}else =
if(Z(i)){b.google_ad_url=3Dk+"/pagead/sdo?";b.google_ad_url+=3D"client=3D=
"+escape(Ja(b.google_ad_client))}else{b.google_ad_url=3Dk+"/pagead/ads?";=
b.google_ad_url+=3D"client=3D"+escape(W(b.google_ad_client))}O("google_ad=
_host");O("google_ad_host_tier_id");var j=3D=0A=
b.google_num_slots_by_client,q=3Db.google_num_slots_by_channel,o=3Db.goog=
le_prev_ad_formats_by_region,r=3Db.google_prev_ad_slotnames_by_region;if(=
b.google_ad_region=3D=3Dc&&b.google_ad_section!=3Dc)b.google_ad_region=3D=
b.google_ad_section;var =
p=3Db.google_ad_region=3D=3Dc?"":b.google_ad_region;if(Z(i)){b.google_num=
_sdo_slots=3Db.google_num_sdo_slots?b.google_num_sdo_slots+1:1;if(b.googl=
e_num_sdo_slots>4)return false}else =
if(Pa(b)){b.google_num_0ad_slots=3Db.google_num_0ad_slots?b.google_num_0a=
d_slots+1:1;if(b.google_num_0ad_slots>=0A=
3)return false}else =
if(b.google_cpa_choice=3D=3Dc){b.google_num_ad_slots=3Db.google_num_ad_sl=
ots?b.google_num_ad_slots+1:1;if(b.google_num_slots_to_rotate){o[p]=3Dc;r=
[p]=3Dc;if(b.google_num_slot_to_show=3D=3Dc)b.google_num_slot_to_show=3Df=
%b.google_num_slots_to_rotate+1;if(b.google_num_slot_to_show!=3Db.google_=
num_ad_slots)return false}else =
if(b.google_num_ad_slots>6&&p=3D=3D"")return =
false}N("dt",e.getTime());O("google_language");if(b.google_country)O("goo=
gle_country");else O("google_gl");O("google_region");U("google_city");=0A=
U("google_hints");O("google_safe");O("google_encoding");O("google_last_mo=
dified_time");U("google_alternate_ad_url");O("google_alternate_color");O(=
"google_skip");O("google_targeting");var =
x=3Db.google_ad_client;if(!j[x]){j[x]=3D1;j.length+=3D1}else =
j[x]+=3D1;if(o[p])if(!Z(i)){P("prev_fmts",o[p].toLowerCase());if(j.length=
>1)N("slot",j[x])}if(r[p])P("prev_slotnames",r[p].toLowerCase());if(i&&!b=
.google_ad_slot){P("format",i.toLowerCase());if(!Z(i))o[p]=3Do[p]?o[p]+",=
"+i:i}if(b.google_ad_slot)r[p]=3Dr[p]?r[p]+","+=0A=
b.google_ad_slot:b.google_ad_slot;O("google_max_num_ads");N("output",b.go=
ogle_ad_output);O("google_adtest");O("google_ad_callback");O("google_ad_s=
lot");U("google_correlator");if(b.google_ad_channel){U("google_ad_channel=
");var Q=3D"",S=3Db.google_ad_channel.split(/[+, ]/);for(var =
h=3D0;h<S.length;h++){var n=3DS[h];if(!q[n])q[n]=3D1;else =
Q+=3Dn+"+"}P("pv_ch",Q)}if(b.google_ad_host_channel){U("google_ad_host_ch=
annel");var =
t=3DRa(b.google_ad_host_channel,b.google_viewed_host_channels);P("pv_h_ch=
",t)}if(b.google_enable_first_party_cookie)P("cookie",=0A=
b._GA_googleCookieHelper.j());U("google_page_url");V("google_color_bg",f)=
;V("google_color_text",f);V("google_color_link",f);V("google_color_url",f=
);V("google_color_border",f);V("google_color_line",f);if(b.google_reuse_c=
olors)N("reuse_colors",1);else =
N("reuse_colors",0);O("google_kw_type");U("google_kw");U("google_contents=
");O("google_num_radlinks");O("google_max_radlink_len");O("google_rl_filt=
ering");O("google_rl_mode");O("google_rt");U("google_rl_dest_url");O("goo=
gle_num_radlinks_per_unit");O("google_ad_type");=0A=
O("google_image_size");O("google_ad_region");O("google_feedback");U("goog=
le_referrer_url");U("google_page_location");N("frm",b.google_iframing);O(=
"google_bid");O("google_cust_age");O("google_cust_gender");O("google_cust=
_interests");O("google_cust_id");O("google_cust_job");O("google_cust_u_ur=
l");O("google_cust_l");O("google_cust_lh");O("google_cust_ch");O("google_=
ed");O("google_video_doc_id");O("google_video_product_type");U("google_ui=
_features");U("google_only_ads_with_video");U("google_disable_video_autop=
lay");=0A=
if(a)P("ff",Ga(a));if(b.top.location=3D=3Dd.location&&d.body){var =
w=3Dd.body.scrollHeight,u=3Dd.body.clientHeight;if(u&&w)P("cc",Math.round=
(u*100/w))}aa();N("ga_vid",b.gaGlobal.vid);N("ga_sid",b.gaGlobal.sid);N("=
ga_hid",b.gaGlobal.hid);N("ga_fc",b.gaGlobal.from_cookie);U("google_analy=
tics_uacct");O("google_ad_override");O("google_flash_version");Ha(b,e);re=
turn true}function Ra(a,c){var b=3Da.split("|"),d=3D-1,e=3D[];for(var =
f=3D0;f<b.length;f++){var i=3Db[f].split(/[+, ]/);if(!c[f])c[f]=3D{};var =
k=3D"";for(var j=3D0;j<i.length;j++){var q=3D=0A=
i[j];if(!c[f][q])c[f][q]=3D1;else =
k+=3D"+"+q}k=3Dk.slice(1);e[f]=3Dk;if(k!=3D"")d=3Df}var =
o=3D"";if(d>-1){for(var f=3D0;f<d;f++)o+=3De[f]+"|";o+=3De[d]}return =
o}function Sa(){var a=3Dwindow,c=3Ddocument;Ia(a);var =
b;if(Math.random()<0.01){var =
d=3D"google_temp_span";if(!Da(d)){c.write("<span =
id=3D"+d+"></span>");b=3DDa(d)}}var =
e=3DQa(b);if(b)b&&b.parentNode?b.parentNode.removeChild(b):null;if(!e)ret=
urn;Ma(a,c,a.google_ad_url,null);Oa(a)}function Ta(){Sa();return =
true}function Ua(a,c){var =
b=3Dc.documentElement;if(a.top.location=3D=3Dc.location)return false;=0A=
if(a.google_ad_width&&a.google_ad_height){var =
d=3D1,e=3D1;if(a.innerHeight){d=3Da.innerWidth;e=3Da.innerHeight}else =
if(b&&b.clientHeight){d=3Db.clientWidth;e=3Db.clientHeight}else =
if(c.body){d=3Dc.body.clientWidth;e=3Dc.body.clientHeight}if(e>2*a.google=
_ad_height||d>2*a.google_ad_width)return false}return true}function =
Va(a){var =
c=3Dwindow,b=3Dnull,d=3Dc.onerror;c.onerror=3Da;if(c.google_ad_frameborde=
r=3D=3Db)c.google_ad_frameborder=3D0;if(c.google_ad_output=3D=3Db)c.googl=
e_ad_output=3D"html";if(Z(c.google_ad_format)){var =
e=3Dc.google_ad_format.match(/^(\d+)x(\d+)_.*/);=0A=
if(e){c.google_ad_width=3DparseInt(e[1],10);c.google_ad_height=3DparseInt=
(e[2],10);c.google_ad_output=3D"html"}}if(c.google_ad_format=3D=3Db&&c.go=
ogle_ad_output=3D=3D"html")c.google_ad_format=3Dc.google_ad_width+"x"+c.g=
oogle_ad_height;Wa(c,document);if(c.google_num_slots_by_channel=3D=3Db)c.=
google_num_slots_by_channel=3D[];if(c.google_viewed_host_channels=3D=3Db)=
c.google_viewed_host_channels=3D[];if(c.google_num_slots_by_client=3D=3Db=
)c.google_num_slots_by_client=3D[];if(c.google_prev_ad_formats_by_region=3D=
=3Db)c.google_prev_ad_formats_by_region=3D=0A=
[];if(c.google_prev_ad_slotnames_by_region=3D=3Db)c.google_prev_ad_slotna=
mes_by_region=3D[];if(c.google_correlator=3D=3Db)c.google_correlator=3D(n=
ew =
Date).getTime();if(c.google_adslot_loaded=3D=3Db)c.google_adslot_loaded=3D=
{};if(c.google_adContentsBySlot=3D=3Db)c.google_adContentsBySlot=3D{};if(=
c.google_flash_version=3D=3Db)c.google_flash_version=3Dka();c.onerror=3Dd=
}function la(a){if(a in $)return $[a];return =
$[a]=3Dnavigator.userAgent.toLowerCase().indexOf(a)!=3D-1}var =
$=3D{};function Na(a,c){if(a!=3D"html")return false;var =
b=3D{};b["ca-pub-7027491298716603"]=3D=0A=
true;b["ca-pub-8344185808443527"]=3Dtrue;b["ca-google"]=3Dtrue;return =
b[W(c)]!=3Dnull}function Xa(a){var =
c=3D{},b=3Da.split("?"),d=3Db[b.length-1].split("&");for(var =
e=3D0;e<d.length;e++){var =
f=3Dd[e].split("=3D");if(f[0])try{c[f[0].toLowerCase()]=3Df.length>1?wind=
ow.decodeURIComponent?decodeURIComponent(f[1].replace(/\+/g," =
")):unescape(f[1]):""}catch(i){}}return c}function Ya(){var =
a=3Dwindow,c=3DXa(document.URL);if(c.google_ad_override){a.google_ad_over=
ride=3Dc.google_ad_override;a.google_adtest=3D"on"}}function =
Za(a,c){for(var b in c)a["google_"+=0A=
b]=3Dc[b]}function $a(a,c){if(!c)return a.location;return =
a.referrer}function =
ab(a,c){if(!c&&a.google_referrer_url=3D=3Dnull)return"0";else =
if(c&&a.google_referrer_url=3D=3Dnull)return"1";else =
if(!c&&a.google_referrer_url!=3Dnull)return"2";else =
if(c&&a.google_referrer_url!=3Dnull)return"3";return"4"}function =
bb(a,c,b,d){a.page_url=3D$a(b,d);a.page_location=3Dnull}function =
cb(a,c,b,d){a.page_url=3Dc.google_page_url;a.page_location=3D$a(b,d)||"EM=
PTY"}function db(a,c){var =
b=3D{},d=3DUa(a,c);b.iframing=3Dab(a,d);if(!!a.google_page_url)cb(b,=0A=
a,c,d);else =
bb(b,a,c,d);b.last_modified_time=3Dc.location=3D=3Db.page_url?Date.parse(=
c.lastModified)/1000:null;b.referrer_url=3Dd?a.google_referrer_url:a.goog=
le_page_url&&a.google_referrer_url?a.google_referrer_url:c.referrer;retur=
n b}function eb(a){var =
c=3D{},b=3Da.URL.substring(a.URL.lastIndexOf("http"));c.iframing=3Dnull;c=
.page_url=3Db;c.page_location=3Da.location;c.last_modified_time=3Dnull;c.=
referrer_url=3Db;return c}function Wa(a,c){var =
b;b=3Da.google_page_url=3D=3Dnull&&fb[c.domain]?eb(c):db(a,c);Za(a,b)}var=
 fb=3D{};fb["ad.yieldmanager.com"]=3D=0A=
true;Ya();Va(Ta);Sa();=0A=
})()=0A=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://digg.com/tools/diggthis.js

(function(){var D=3Dtypeof digg_skin=3D=3D"string"?digg_skin:"";var =
C=3D80;var A=3D52;if(D=3D=3D"compact"){C=3D18;A=3D120=0A=
}else{if(D=3D=3D"icon"){C=3D16;A=3D16}}var B=3Dtypeof =
digg_url=3D=3D"string"?digg_url:(typeof =
DIGG_URL=3D=3D"string"?DIGG_URL:window.location.href);=0A=
document.write("<iframe =
src=3D'http://digg.com/tools/diggthis.php?u=3D"+escape(B).replace(/\+/g,"=
%2b")+(typeof =
digg_title=3D=3D"string"?("&t=3D"+escape(digg_title)):"")+(typeof =
digg_window=3D=3D"string"?("&w=3D"+escape(digg_window)):"")+(typeof =
digg_bodytext=3D=3D"string"?("&b=3D"+escape(digg_bodytext)):"")+(typeof =
digg_media=3D=3D"string"?("&m=3D"+escape(digg_media)):"")+(typeof =
digg_topic=3D=3D"string"?("&c=3D"+escape(digg_topic)):"")+(typeof =
digg_bgcolor=3D=3D"string"?("&k=3D"+escape(digg_bgcolor)):"")+(D?("&s=3D"=
+D):"")+"' height=3D'"+C+"' width=3D'"+A+"' frameborder=3D'0' =
scrolling=3D'no'></iframe>")=0A=
})();
------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://digg.com/tools/widgetjs

=0A=
document.write('<script type=3D"text/javascript" =
src=3D"http://digg.com/js/jquery.js"></script>');=0A=
document.write('<script type=3D"text/javascript" =
src=3D"http://digg.com/js/jquery-dom.js"></script>');=0A=
document.write('<link rel=3D"stylesheet" type=3D"text/css" media=3D"all" =
href=3D"http://digg.com/css/widget.css" />');=0A=
=0A=
digg_width =3D typeof digg_width =3D=3D 'string' ? digg_width : '300px';=0A=
digg_height  =3D typeof digg_height  =3D=3D 'string' ? digg_height  : =
'350px';=0A=
digg_border  =3D typeof digg_border  =3D=3D 'number' ? digg_border  : 1;=0A=
digg_target  =3D typeof digg_target  =3D=3D 'number' ? '_blank' : '';=0A=
digg_count =3D typeof digg_count  =3D=3D 'number' ? 'no-digg-count'  : =
'';=0A=
digg_description =3D typeof digg_description  =3D=3D 'number' ? ''  : =
'no-digg-description';=0A=
digg_theme =3D typeof digg_theme  =3D=3D 'string' ? digg_theme  !=3D =
'digg-widget-unstyled' ? 'digg-widget '+digg_theme : digg_theme  : =
'digg-widget digg-widget-theme1';=0A=
digg_title =3D typeof digg_title  =3D=3D 'string' ? digg_title  : 'All =
popular stories in All Topics';=0A=
digg_custom_header =3D typeof digg_custom_header  =3D=3D 'string' ? =
'background: '+digg_custom_header+';'  : '';=0A=
digg_custom_border =3D typeof digg_custom_border  =3D=3D 'string' ? =
'border-color: '+digg_custom_border+';'  : '';=0A=
digg_custom_link =3D typeof digg_custom_link  =3D=3D 'string' ? =
digg_custom_link  : '';=0A=
digg_custom_hoverlink =3D typeof digg_custom_hoverlink  =3D=3D 'string' =
? digg_custom_hoverlink  : '';=0A=
digg_custom_footer =3D typeof digg_custom_footer  =3D=3D 'string' ? ' =
style=3D"color: '+digg_custom_footer+'"'  : '';=0A=
digg_id =3D typeof digg_id  =3D=3D 'string' ? ''+digg_id+''  : =
'digg-widget-container';=0A=
=0A=
document.write('<div id=3D"'+digg_id+'" class=3D"'+digg_theme+'" =
style=3D"width: '+digg_width+'; border-width: '+digg_border*7+'px; =
'+digg_custom_border+'">');=0A=
document.write('<div class=3D"digg-widget-header" =
style=3D"'+digg_custom_header+'"><h1><a =
href=3D"http://digg.com/?OTC-widget">Digg</a></h1><div><a =
href=3D"http://digg.com/tour?OTC-widget">What is Digg?</a></div></div>');=0A=
document.write('<div class=3D"digg-widget-topic">'+digg_title+'</div>');=0A=
document.write('<ul style=3D"height: '+digg_height+';" =
class=3D"'+digg_count+' '+digg_description+'"></ul>');=0A=
document.write('<div class=3D"digg-widget-footer"><a =
href=3D"http://digg.com/?OTC-widget"'+digg_custom_footer+'>Powered by =
Digg\'s Users</a></div></div>');=0A=
=0A=
function diggwb(obj) {=0A=
    if (!$j) setTimeout(function() { diggwb(obj); }, 200); //hack for IE =
not loading scripts that are included via document.write until it =
decides too=0A=
    $j('#'+digg_id+' ul').html('');=0A=
    var tpl =3D function() {=0A=
        return [=0A=
            'li', {}, [=0A=
                'a', { 'href': this.href+'?OTC-widget', 'class': =
'digg-count' }, this.diggs+' <span>diggs</span>',=0A=
                'h3', {}, [=0A=
                    'a', { 'href': this.href+'?OTC-widget', 'target':  =
digg_target, 'style': 'color: '+digg_custom_link+' ' }, this.title=0A=
                ],=0A=
                'p', {}, this.description=0A=
            ]=0A=
        ];=0A=
    };=0A=
    if(!obj) {=0A=
        $j('#'+digg_id+' ul').html('We were unable to retrieve matching =
stories from Digg. Please refresh the page to try again.');=0A=
    }=0A=
    if(!obj.stories || obj.stories.length =3D=3D 0) {=0A=
        $j('#'+digg_id+' ul').html('Currently, there are no recent =
stories of this type on Digg.');=0A=
    }=0A=
    for (var i =3D 0 ; i < obj.stories.length ; i++) {=0A=
            if(obj.stories[i].diggs > 10000) {=0A=
                obj.stories[i].diggs =3D =
Math.floor(obj.stories[i].diggs/1000)+'K+';=0A=
            }=0A=
            $j('#'+digg_id+' ul').tplAppend(obj.stories[i], tpl);=0A=
    }=0A=
    if(digg_custom_hoverlink !=3D '') {=0A=
        $j('#'+digg_id+' ul a').hover(function(){$j(this).css('color',  =
digg_custom_hoverlink)}, function() {$j(this).css('color',  =
digg_custom_link)});=0A=
    }=0A=
}=0A=

------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://digg.com/tools/services?type=javascript&callback=diggwb&endPoint=/stories/upcoming&domain=www.latimes.com&sort=digg_count-desc&count=10

diggwb({"timestamp":1218992584,"total":"25","offset":0,"stories":[{"id":"=
8022417","link":"http:\/\/www.latimes.com\/news\/nationworld\/world\/la-f=
g-ossetia17-2008aug17,0,5302823.story","submit_date":1218930378,"diggs":1=
61,"comments":5,"title":"Russia Agrees to Truce; Blows Up Crucial =
Georgian Bridge","description":"A key railway bridge was blown up by =
Russia and its allied forces, effectively severing all east-west =
transportation routes within Georgia, officials =
said.","status":"upcoming","media":"news","user":{"name":"zaibatsu","icon=
":"http:\/\/digg.com\/users\/zaibatsu\/l.png","registered":1102319523,"pr=
ofileviews":114479,"fullname":"Zaibatsu"},"topic":{"name":"World =
News","short_name":"world_news"},"container":{"name":"World & =
Business","short_name":"world_business"},"thumbnail":{"originalwidth":500=
,"originalheight":325,"contentType":"image\/jpeg","src":"http:\/\/digg.co=
m\/world_news\/Russia_Agrees_to_Truce_Blows_Up_Crucial_Georgian_Bridge\/t=
.jpg","width":80,"height":80},"href":"http:\/\/digg.com\/world_news\/Russ=
ia_Agrees_to_Truce_Blows_Up_Crucial_Georgian_Bridge"},{"id":"8026375","li=
nk":"http:\/\/www.latimes.com\/news\/opinion\/la-ed-cyberwar17-2008aug17,=
0,5922456.story","submit_date":1218965984,"diggs":92,"comments":1,"title"=
:"Georgia under Cyber Attack [Not The One In The =
USA]","description":"Among the more disturbing aspects of Russia's =
invasion of Georgia is that it was accompanied by a wave of cyber =
attacks on Georgian government websites. The combination of electronic =
and physical punches illuminated how ill-prepared the world is for this =
new kind of =
warfare.","status":"upcoming","media":"news","user":{"name":"louiebaur","=
icon":"http:\/\/digg.com\/users\/louiebaur\/l.png","registered":119843357=
0,"profileviews":10600,"fullname":"LouieBaur"},"topic":{"name":"World =
News","short_name":"world_news"},"container":{"name":"World & =
Business","short_name":"world_business"},"thumbnail":{"originalwidth":140=
,"originalheight":110,"contentType":"image\/jpeg","src":"http:\/\/digg.co=
m\/world_news\/Georgia_under_Cyber_Attack_Not_The_One_In_The_USA\/t.jpg",=
"width":80,"height":80},"href":"http:\/\/digg.com\/world_news\/Georgia_un=
der_Cyber_Attack_Not_The_One_In_The_USA"},{"id":"8027160","link":"http:\/=
\/www.latimes.com\/entertainment\/la-ca-vegas17-2008aug17,0,2153504.story=
","submit_date":1218973830,"diggs":59,"comments":2,"title":"Trekkies =
Will Lose a Starbase","description":"Star Trek: The Experience will =
close at the end of the month. An annual convention will continue, but =
will it be the =
same?","status":"upcoming","media":"news","user":{"name":"defaultfilter",=
"icon":"http:\/\/digg.com\/users\/defaultfilter\/l.png","registered":1207=
608443,"profileviews":1761,"fullname":"Ohms =
Lawler"},"topic":{"name":"Television","short_name":"television"},"contain=
er":{"name":"Entertainment","short_name":"entertainment"},"href":"http:\/=
\/digg.com\/television\/Trekkies_Will_Lose_a_Starbase"},{"id":"8025602","=
link":"http:\/\/www.latimes.com\/news\/nationworld\/world\/middleeast\/la=
-fg-react17-2008aug17,0,4574939.story","submit_date":1218958129,"diggs":4=
8,"comments":6,"title":"Arabs sees hypocrisy in Bush response to =
Georgia-Russia war","description":"The U.S. president should be 'too =
ashamed to speak about the occupation of any country, he is already =
occupying one,' one observer =
says.","status":"upcoming","media":"news","user":{"name":"borzou","icon":=
"http:\/\/digg.com\/users\/borzou\/l.png","registered":1209025953,"profil=
eviews":1440},"topic":{"name":"World =
News","short_name":"world_news"},"container":{"name":"World & =
Business","short_name":"world_business"},"thumbnail":{"originalwidth":140=
,"originalheight":110,"contentType":"image\/jpeg","src":"http:\/\/digg.co=
m\/world_news\/Arabs_sees_hypocrisy_in_Bush_response_to_Georgia_Russia_wa=
r\/t.jpg","width":80,"height":80},"href":"http:\/\/digg.com\/world_news\/=
Arabs_sees_hypocrisy_in_Bush_response_to_Georgia_Russia_war"},{"id":"8025=
051","link":"http:\/\/www.latimes.com\/news\/nationworld\/world\/la-fg-wa=
rprep17-2008aug17,0,3594295.story","submit_date":1218952973,"diggs":23,"c=
omments":0,"title":"LAT: Russia and Georgia were on a collision =
course","description":"Both sides had set their course for conflict, =
analysts and officials in Washington, Tbilisi and Moscow say: A =
combination of Russia's relentless drive toward confrontation and =
Georgian hubris made last week's warfare inevitable. =
\r\n","status":"upcoming","media":"news","user":{"name":"yakdrag","icon":=
"http:\/\/digg.com\/img\/udl.png","registered":1213875731,"profileviews":=
316},"topic":{"name":"World =
News","short_name":"world_news"},"container":{"name":"World & =
Business","short_name":"world_business"},"thumbnail":{"originalwidth":140=
,"originalheight":110,"contentType":"image\/jpeg","src":"http:\/\/digg.co=
m\/world_news\/LAT_Russia_and_Georgia_were_on_a_collision_course\/t.jpg",=
"width":80,"height":80},"href":"http:\/\/digg.com\/world_news\/LAT_Russia=
_and_Georgia_were_on_a_collision_course"},{"id":"8025921","link":"http:\/=
\/www.latimes.com\/news\/nationworld\/world\/la-fg-leftists17-2008aug17,0=
,4693478.story","submit_date":1218961555,"diggs":22,"comments":0,"title":=
"Hugo Chavez basks in Paraguay President Lugo's =
glory","description":"The Venezuelan travels with the new president to =
spread their leftist message in the countryside. On his first full day =
in office, President Fernando Lugo traveled Saturday to this =
agricultural zone where he first won acclaim as a Roman Catholic bishop =
defending the landless poor against large =
landowners.","status":"upcoming","media":"news","user":{"name":"KyleMacRa=
nnell","icon":"http:\/\/digg.com\/users\/KyleMacRannell\/l.png","register=
ed":1209695901,"profileviews":102,"fullname":"Kyle =
MacRannell"},"topic":{"name":"World =
News","short_name":"world_news"},"container":{"name":"World & =
Business","short_name":"world_business"},"thumbnail":{"originalwidth":140=
,"originalheight":110,"contentType":"image\/jpeg","src":"http:\/\/digg.co=
m\/world_news\/Hugo_Chavez_basks_in_Paraguay_President_Lugo_s_glory\/t.jp=
g","width":80,"height":80},"href":"http:\/\/digg.com\/world_news\/Hugo_Ch=
avez_basks_in_Paraguay_President_Lugo_s_glory"},{"id":"8029540","link":"h=
ttp:\/\/www.latimes.com\/news\/printedition\/front\/la-fg-deathtribe14-20=
08aug14,0,3590859.story?track=3Drss","submit_date":1218990303,"diggs":18,=
"comments":0,"title":"Indonesian Tribe Takes Years to Bury their =
Dead","description":"The dead wait months, even years, for their last =
rites while relatives negotiate funeral arrangements, everything from =
the right timing to allow mourners to travel long distances, to where =
they will stay and who will feed them. In many ways, Torajans spend a =
lifetime preparing for their =
demise.","status":"upcoming","media":"news","user":{"name":"miranda622","=
icon":"http:\/\/digg.com\/users\/miranda622\/l.png","registered":11762244=
97,"profileviews":7668},"topic":{"name":"Travel & =
Places","short_name":"travel_places"},"container":{"name":"Lifestyle","sh=
ort_name":"lifestyle"},"href":"http:\/\/digg.com\/travel_places\/Indonesi=
an_Tribe_Takes_Years_to_Bury_their_Dead"},{"id":"8023089","link":"http:\/=
\/www.latimes.com\/news\/politics\/la-na-forum16-2008aug16,0,1071584.stor=
y","submit_date":1218936730,"diggs":18,"comments":22,"title":"NObama and =
McCain hold a non-debate","description":"Non-denominational Liberal =
Christian Saddleback Church, candidates will field questions before an =
audience.  Will America fall for NObama's charisma ignoring Liberals =
lies?  Will McCain be nuanced by liberal =
questioners.","status":"upcoming","media":"news","user":{"name":"mathewsj=
","icon":"http:\/\/digg.com\/img\/udl.png","registered":1172443659,"profi=
leviews":996},"topic":{"name":"US Elections =
2008","short_name":"2008_us_elections"},"container":{"name":"World & =
Business","short_name":"world_business"},"thumbnail":{"originalwidth":140=
,"originalheight":110,"contentType":"image\/gif","src":"http:\/\/digg.com=
\/2008_us_elections\/NObama_and_McCain_hold_a_non_debate\/t.gif","width":=
80,"height":80},"href":"http:\/\/digg.com\/2008_us_elections\/NObama_and_=
McCain_hold_a_non_debate"},{"id":"8025808","link":"http:\/\/www.latimes.c=
om\/news\/printedition\/front\/la-na-hospital17-2008aug17,0,2572183.story=
","submit_date":1218960357,"diggs":17,"comments":0,"title":"Mexico drug =
war's costs, risks exported to U.S.","description":"Officers and others =
wounded across the border are increasingly being transferred to an El =
Paso hospital. Drug cartel hit men had pumped the deputy police chief =
with more than 20 bullets, and slightly wounded his boss, after a wild =
car chase in Nuevo Casas Grandes, the Mexican city the two were supposed =
to =
protect.","status":"upcoming","media":"news","user":{"name":"KyleMacRanne=
ll","icon":"http:\/\/digg.com\/users\/KyleMacRannell\/l.png","registered"=
:1209695901,"profileviews":102,"fullname":"Kyle =
MacRannell"},"topic":{"name":"World =
News","short_name":"world_news"},"container":{"name":"World & =
Business","short_name":"world_business"},"thumbnail":{"originalwidth":500=
,"originalheight":315,"contentType":"image\/jpeg","src":"http:\/\/digg.co=
m\/world_news\/Mexico_drug_war_s_costs_risks_exported_to_U_S\/t.jpg","wid=
th":80,"height":80},"href":"http:\/\/digg.com\/world_news\/Mexico_drug_wa=
r_s_costs_risks_exported_to_U_S"},{"id":"8025790","link":"http:\/\/www.la=
times.com\/news\/printedition\/front\/la-na-saddleback17-2008aug17,0,3145=
888.story","submit_date":1218960131,"diggs":18,"comments":1,"title":"Obam=
a Says Marriage Is Only Between Man + Woman - Left =
Upset","description":"Obama called marriage \"a sacred union, between a =
man and a woman\" drawing applause when he added, \"God is in the mix.\" =
 \"I believe that Jesus Christ died for my sins, and that I am redeemed =
through him. That is a source of strength and sustenance on a daily =
basis,\" Obama said. \"I know that I don't walk alone.\" =
\r\n","status":"upcoming","media":"news","user":{"name":"Ridgeliner7","ic=
on":"http:\/\/digg.com\/users\/Ridgeliner7\/l.png","registered":118669685=
0,"profileviews":5303},"topic":{"name":"US Elections =
2008","short_name":"2008_us_elections"},"container":{"name":"World & =
Business","short_name":"world_business"},"thumbnail":{"originalwidth":500=
,"originalheight":280,"contentType":"image\/jpeg","src":"http:\/\/digg.co=
m\/2008_us_elections\/Obama_Says_Marriage_Is_Only_Between_Man_Woman_Left_=
Upset\/t.jpg","width":80,"height":80},"href":"http:\/\/digg.com\/2008_us_=
elections\/Obama_Says_Marriage_Is_Only_Between_Man_Woman_Left_Upset"}],"c=
ount":10})
------=_NextPart_000_0000_01C90061.47186AA0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://articles.latimes.com/javascripts/s_code.js?1217444655

/* SiteCatalyst code version: H.9.=0A=
Copyright 1997-2008 Omniture, Inc. More info available at=0A=
http://www.omniture.com */=0A=
/************************ ADDITIONAL FEATURES ************************=0A=
     Plugins=0A=
*/=0A=
/* Specify the Report Suite ID(s) to track here */=0A=
var s_account=3D'triblatarticlesprod';=0A=
var s=3Ds_gi(s_account)=0A=
=0A=
/************************** CONFIG SECTION **************************/=0A=
/* You may add or alter any code config here. */=0A=
/* E-commerce Config */=0A=
s.currencyCode=3D"USD"=0A=
/* Link Tracking Config */=0A=
s.trackDownloadLinks=3Dtrue=0A=
s.trackExternalLinks=3Dtrue=0A=
s.trackInlineStats=3Dtrue=0A=
s.linkDownloadFileTypes=3D"exe,zip,wav,mp3,mov,mpg,avi,wmv,doc,pdf,xls"=0A=
s.linkInternalFilters=3D"javascript:,topics.latimes.com"=0A=
s.linkLeaveQueryString=3Dfalse=0A=
s.linkTrackVars=3D"server"=0A=
s.linkTrackEvents=3D"None"=0A=
=0A=
/* Set URL to prop 26  */=0A=
s.prop26=3Dwindow.location.pathname;=0A=
=0A=
/* Plugin Config */=0A=
s.usePlugins=3Dtrue=0A=
function s_doPlugins(s) {=0A=
=0A=
if(!s.campaign){=0A=
=0A=
/* Set campaign if cid is found */=0A=
s.campaign=3Ds.getQueryParam('cid,track,gcid','');=0A=
=0A=
/* getValOnce used to deflate campaign click-throughs */=0A=
s.campaign=3Ds.getValOnce(s.campaign,"ctc",0)=0A=
}=0A=
/* Set event 5 (page view) on every page  */=0A=
s.events=3Ds.events?s.events+',event5':'event5';=0A=
=0A=
/* Set days since last visit */=0A=
s.eVar25=3Ds.getDaysSinceLastVisit();=0A=
=0A=
=0A=
var t =3D new Date();cct=3Dt.getTime();=0A=
var month =3D t.getMonth();var day =3D t.getDate();var year =3D =
t.getFullYear();=0A=
var =
mon=3D['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov',=
'Dec'];=0A=
var thism=3Dmon[month];var currentDate =3D (thism + =
year);String(currentDate);=0A=
if(year!=3D'2008'){currentDate=3D=3D'Date Unavailable'};=0A=
=0A=
=0A=
/* Repeat Visitor by campaign */=0A=
=0A=
=0A=
var temp1=3Ds.getQueryParam('gcid');var =
temp2=3Ds.getQueryParam('track');var temp3=3Ds.getQueryParam('ctrack');=0A=
var temp4=3Ds.getQueryParam('coll');var =
temp5=3Ds.getQueryParam('cmp');var temp6;=0A=
if(temp1){temp6=3DcurrentDate+':'+'gcid:'+temp1};if(temp2){temp6=3Dcurren=
tDate+':'+'track:'+temp2};if(temp3){temp6=3DcurrentDate+':'+'ctrack:'+tem=
p3};=0A=
if(temp4){temp6=3DcurrentDate+':'+'coll:'+temp4};if(temp5){temp6=3Dcurren=
tDate+':'+'cmp:'+temp5};=0A=
var isFtcv =3D s.c_r('s_ftcv');var isVisit =3D s.c_r('s_current');=0A=
var ex=3Dnew Date();ct=3Dex.getTime();ex.setTime(ct+90*24*60*60*1000) // =
90 days expire;=0A=
var ccxp=3Dnew Date();var =
cct=3Dccxp.getTime();ccxp.setTime(cct+30*60*1000); // expire in 30 min=0A=
if((temp6) && =
(!isFtcv)){s.c_w('s_ftcv',temp6,ex);s.c_w('s_current',temp6,ccxp);=0A=
s.events=3Ds.apl(s.events,'event9',',','1');s.eVar26=3Dtemp6};=0A=
if((isFtcv) && =
(!isVisit)){s.events=3Ds.apl(s.events,'event10',',','1')}//Set Repeat =
visit event;=0A=
=0A=
=0A=
/* Set event for unique searches if prop3 is found */=0A=
=0A=
if(s.prop3){=0A=
	s.prop3=3Ds.prop3.toLowerCase();=0A=
	s.eVar3=3Ds.prop3;=0A=
	var t_search=3Ds.getValOnce(s.eVar3,'ev3',0)=0A=
if(t_search)=0A=
	s.events=3Ds.apl(s.events,'event6',1)=0A=
}=0A=
=0A=
/* Plugin: timeparting - PST */=0A=
s.prop34=3Ds.getTimeParting('h','-8','2008');=0A=
s.prop33=3Ds.getTimeParting('d','-8','2008');=0A=
s.prop35=3Ds.getTimeParting('w','-8','2008');=0A=
=0A=
=0A=
}=0A=
s.doPlugins=3Ds_doPlugins=0A=
/************************** PLUGINS SECTION *************************/=0A=
/* You may insert any plugins you wish to use here.                 */=0A=
=0A=
/*=0A=
 * Plugin: Days since last Visit 1.0.H=0A=
 */=0A=
s.getDaysSinceLastVisit=3Dnew Function(""=0A=
+"var s=3Dthis,e=3Dnew =
Date(),cval,ct=3De.getTime(),c=3D's_lastvisit',day=3D24*"=0A=
+"60*60*1000;e.setTime(ct+3*365*day);cval=3Ds.c_r(c);if(!cval){s.c_w(c,"=0A=
+"ct,e);return 'First page view or cookies not supported';}else{var d"=0A=
+"=3Dct-cval;if(d>30*60*1000){if(d>30*day){s.c_w(c,ct,e);return 'More t"=0A=
+"han 30 days';}if(d<30*day+1 && d>7*day){s.c_w(c,ct,e);return 'More "=0A=
+"than 7 days';}if(d<7*day+1 && d>day){s.c_w(c,ct,e);return 'Less tha"=0A=
+"n 7 days';}if(d<day+1){s.c_w(c,ct,e);return 'Less than 1 day';}}els"=0A=
+"e return '';}"=0A=
);=0A=
=0A=
/*=0A=
 * Plugin: getQueryParam 2.0 - return query string parameter(s)=0A=
 */=0A=
s.getQueryParam=3Dnew Function("p","d","u",""=0A=
+"var =
s=3Dthis,v=3D'',i,t;d=3Dd?d:'';u=3Du?u:(s.pageURL?s.pageURL:''+s.wd.loc"=0A=
+"ation);u=3Du=3D=3D'f'?''+s.gtfs().location:u;while(p){i=3Dp.indexOf(','=
);i=3D"=0A=
+"i<0?p.length:i;t=3Ds.p_gpv(p.substring(0,i),u);if(t)v+=3Dv?d+t:t;p=3Dp.=
su"=0A=
+"bstring(i=3D=3Dp.length?i:i+1)}return v");=0A=
s.p_gpv=3Dnew Function("k","u",""=0A=
+"var =
s=3Dthis,v=3D'',i=3Du.indexOf('?'),q;if(k&&i>-1){q=3Du.substring(i+1);v"=0A=
+"=3Ds.pt(q,'&','p_gvf',k)}return v");=0A=
s.p_gvf=3Dnew Function("t","k",""=0A=
+"if(t){var =
s=3Dthis,i=3Dt.indexOf('=3D'),p=3Di<0?t:t.substring(0,i),v=3Di<0?'T"=0A=
+"rue':t.substring(i+1);if(p.toLowerCase()=3D=3Dk.toLowerCase())return =
s."=0A=
+"epa(v)}return ''");=0A=
=0A=
/*=0A=
 * Plugin Utility: apl v1.1=0A=
 */=0A=
s.apl=3Dnew Function("L","v","d","u",""=0A=
+"var s=3Dthis,m=3D0;if(!L)L=3D'';if(u){var =
i,n,a=3Ds.split(L,d);for(i=3D0;i<a."=0A=
+"length;i++){n=3Da[i];m=3Dm||(u=3D=3D1?(n=3D=3Dv):(n.toLowerCase()=3D=3D=
v.toLowerCas"=0A=
+"e()));}}if(!m)L=3DL?L+d+v:v;return L");=0A=
=0A=
=0A=
/*=0A=
 * Plugin: getValOnce 0.2 - get a value once per session or number of =
days=0A=
 */=0A=
s.getValOnce=3Dnew Function("v","c","e",""=0A=
+"var s=3Dthis,k=3Ds.c_r(c),a=3Dnew =
Date;e=3De?e:0;if(v){a.setTime(a.getTime("=0A=
+")+e*86400000);s.c_w(c,v,e?a:0);}return v=3D=3Dk?'':v");=0A=
=0A=
/*=0A=
 * Plugin: getAndPersistValue 0.3 - get a value on every page=0A=
 */=0A=
s.getAndPersistValue=3Dnew Function("v","c","e",""=0A=
+"var s=3Dthis,a=3Dnew =
Date;e=3De?e:0;a.setTime(a.getTime()+e*86400000);if("=0A=
+"v)s.c_w(c,v,e?a:0);return s.c_r(c);");=0A=
=0A=
/*=0A=
 * Utility Function: split v1.5 - split a string (JS 1.0 compatible)=0A=
 */=0A=
s.split=3Dnew Function("l","d",""=0A=
+"var i,x=3D0,a=3Dnew =
Array;while(l){i=3Dl.indexOf(d);i=3Di>-1?i:l.length;a[x"=0A=
+"++]=3Dl.substring(0,i);l=3Dl.substring(i+d.length);}return a");=0A=
=0A=
/*=0A=
 * Plugin: getTimeParting 1.3 - Set timeparting values based on time zone=0A=
 */=0A=
=0A=
s.getTimeParting=3Dnew Function("t","z","y",""=0A=
+"dc=3Dnew Date('1/1/2000');var f=3D15;var ne=3D8;if(dc.getDay()!=3D6||"=0A=
+"dc.getMonth()!=3D0){return'Data Not Available'}else{;z=3DparseInt(z);"=0A=
+"if(y=3D=3D'2009'){f=3D8;ne=3D1};gmar=3Dnew =
Date('3/1/'+y);dsts=3Df-gmar.getDay("=0A=
+");gnov=3Dnew Date('11/1/'+y);dste=3Dne-gnov.getDay();spr=3Dnew =
Date('3/'"=0A=
+"+dsts+'/'+y);fl=3Dnew Date('11/'+dste+'/'+y);cd=3Dnew Date();"=0A=
+"if(cd>spr&&cd<fl){z=3Dz+1}else{z=3Dz};utc=3Dcd.getTime()+(cd.getTimezon=
eO"=0A=
+"ffset()*60000);tz=3Dnew Date(utc + =
(3600000*z));thisy=3Dtz.getFullYear("=0A=
+");var days=3D['Sunday','Monday','Tuesday','Wednesday','Thursday','Fr"=0A=
+"iday','Saturday'];if(thisy!=3Dy){return'Data Not Available'}else{;thi"=0A=
+"sh=3Dtz.getHours();thismin=3Dtz.getMinutes();thisd=3Dtz.getDay();var =
dow=3D"=0A=
+"days[thisd];var ap=3D'AM';var dt=3D'Weekday';var =
mint=3D'00';if(thismin>3"=0A=
+"0){mint=3D'30'}if(thish>=3D12){ap=3D'PM';thish=3Dthish-12};if =
(thish=3D=3D0){th"=0A=
+"ish=3D12};if(thisd=3D=3D6||thisd=3D=3D0){dt=3D'Weekend'};var =
timestring=3Dthish+'"=0A=
+":'+mint+ap;var daystring=3Ddow;var =
endstring=3Ddt;if(t=3D=3D'h'){return tim"=0A=
+"estring}if(t=3D=3D'd'){return daystring};if(t=3D=3D'w'){return ap}}};"=0A=
);=0A=
=0A=
/* WARNING: Changing any of the below variables will cause drastic=0A=
changes to how your visitor data is collected.  Changes should only be=0A=
made when instructed to do so by your account manager.*/=0A=
s.visitorNamespace=3D"tribuneinteractive"=0A=
s.trackingServer=3D"m.trb.com"=0A=
s.trackingServerSecure=3D"sm.trb.com"=0A=
s.dc=3D122=0A=
=0A=
/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/=0A=
var s_objectID;function s_c2fe(f){var x=3D'',s=3D0,e,a,b,c;while(1){e=3D=0A=
f.indexOf('"',s);b=3Df.indexOf('\\',s);c=3Df.indexOf("\n",s);if(e<0||(b>=3D=0A=
0&&b<e))e=3Db;if(e<0||(c>=3D0&&c<e))e=3Dc;if(e>=3D0){x+=3D(e>s?f.substrin=
g(s,e):=0A=
'')+(e=3D=3Dc?'\\n':'\\'+f.substring(e,e+1));s=3De+1}else return x=0A=
+f.substring(s)}return f}function s_c2fa(f){var s=3Df.indexOf('(')+1,e=3D=0A=
f.indexOf(')'),a=3D'',c;while(s>=3D0&&s<e){c=3Df.substring(s,s+1);if(c=3D=
=3D',')=0A=
a+=3D'","';else if(("\n\r\t ").indexOf(c)<0)a+=3Dc;s++}return =
a?'"'+a+'"':=0A=
a}function s_c2f(cc){cc=3D''+cc;var fc=3D'var f=3Dnew Function(',s=3D=0A=
cc.indexOf(';',cc.indexOf('{')),e=3Dcc.lastIndexOf('}'),o,a,d,q,c,f,h,x=0A=
fc+=3Ds_c2fa(cc)+',"var s=3Dnew Object;';c=3Dcc.substring(s+1,e);s=3D=0A=
c.indexOf('function');while(s>=3D0){d=3D1;q=3D'';x=3D0;f=3Dc.substring(s)=
;a=3D=0A=
s_c2fa(f);e=3Do=3Dc.indexOf('{',s);e++;while(d>0){h=3Dc.substring(e,e+1);=
if(=0A=
q){if(h=3D=3Dq&&!x)q=3D'';if(h=3D=3D'\\')x=3Dx?0:1;else =
x=3D0}else{if(h=3D=3D'"'||h=3D=3D"'"=0A=
)q=3Dh;if(h=3D=3D'{')d++;if(h=3D=3D'}')d--}if(d>0)e++}c=3Dc.substring(0,s=
)=0A=
+'new Function('+(a?a+',':'')+'"'+s_c2fe(c.substring(o+1,e))+'")'=0A=
+c.substring(e+1);s=3Dc.indexOf('function')}fc+=3Ds_c2fe(c)+';return =
s");'=0A=
eval(fc);return f}function s_gi(un,pg,ss){var c=3D"function s_c(un,pg,s"=0A=
+"s){var s=3Dthis;s.wd=3Dwindow;if(!s.wd.s_c_in){s.wd.s_c_il=3Dnew =
Array;s."=0A=
+"wd.s_c_in=3D0;}s._il=3Ds.wd.s_c_il;s._in=3Ds.wd.s_c_in;s._il[s._in]=3Ds=
;s.w"=0A=
+"d.s_c_in++;s.m=3Dfunction(m){return =
(''+m).indexOf('{')<0};s.fl=3Dfunct"=0A=
+"ion(x,l){return x?(''+x).substring(0,l):x};s.co=3Dfunction(o){if(!o)r"=0A=
+"eturn o;var n=3Dnew Object,x;for(x in o)if(x.indexOf('select')<0&&x.i"=0A=
+"ndexOf('filter')<0)n[x]=3Do[x];return =
n};s.num=3Dfunction(x){x=3D''+x;for"=0A=
+"(var p=3D0;p<x.length;p++)if(('0123456789').indexOf(x.substring(p,p+1"=0A=
+"))<0)return 0;return 1};s.rep=3Dfunction(x,o,n){var =
i=3Dx.indexOf(o);wh"=0A=
+"ile(x&&i>=3D0){x=3Dx.substring(0,i)+n+x.substring(i+o.length);i=3Dx.ind=
ex"=0A=
+"Of(o,i+n.length)}return x};s.ape=3Dfunction(x){var =
s=3Dthis,i;x=3Dx?s.rep"=0A=
+"(escape(''+x),'+','%2B'):x;if(x&&s.charSet&&s.em=3D=3D1&&x.indexOf('%u'=
"=0A=
+")<0&&x.indexOf('%U')<0){i=3Dx.indexOf('%');while(i>=3D0){i++;if(('89ABC=
"=0A=
+"DEFabcdef').indexOf(x.substring(i,i+1))>=3D0)return x.substring(0,i)+"=0A=
+"'u00'+x.substring(i);i=3Dx.indexOf('%',i)}}return =
x};s.epa=3Dfunction(x"=0A=
+"){var s=3Dthis;return x?unescape(s.rep(''+x,'+',' =
')):x};s.pt=3Dfunctio"=0A=
+"n(x,d,f,a){var =
s=3Dthis,t=3Dx,z=3D0,y,r;while(t){y=3Dt.indexOf(d);y=3Dy<0?t.l"=0A=
+"ength:y;t=3Dt.substring(0,y);r=3Ds.m(f)?s[f](t,a):f(t,a);if(r)return =
r;"=0A=
+"z+=3Dy+d.length;t=3Dx.substring(z,x.length);t=3Dz<x.length?t:''}return =
''"=0A=
+"};s.isf=3Dfunction(t,a){var =
c=3Da.indexOf(':');if(c>=3D0)a=3Da.substring(0,"=0A=
+"c);if(t.substring(0,2)=3D=3D's_')t=3Dt.substring(2);return =
(t!=3D''&&t=3D=3Da)}"=0A=
+";s.fsf=3Dfunction(t,a){var =
s=3Dthis;if(s.pt(a,',','isf',t))s.fsg+=3D(s.fs"=0A=
+"g!=3D''?',':'')+t;return 0};s.fs=3Dfunction(x,f){var =
s=3Dthis;s.fsg=3D'';s."=0A=
+"pt(x,',','fsf',f);return s.fsg};s.c_d=3D'';s.c_gdf=3Dfunction(t,a){var =
"=0A=
+"s=3Dthis;if(!s.num(t))return 1;return 0};s.c_gd=3Dfunction(){var =
s=3Dthis"=0A=
+",d=3Ds.wd.location.hostname,n=3Ds.fpCookieDomainPeriods,p;if(!n)n=3Ds.c=
oo"=0A=
+"kieDomainPeriods;if(d&&!s.c_d){n=3Dn?parseInt(n):2;n=3Dn>2?n:2;p=3Dd.la=
st"=0A=
+"IndexOf('.');if(p>=3D0){while(p>=3D0&&n>1){p=3Dd.lastIndexOf('.',p-1);n=
--"=0A=
+"}s.c_d=3Dp>0&&s.pt(d,'.','c_gdf',0)?d.substring(p):d}}return s.c_d};s"=0A=
+".c_r=3Dfunction(k){var s=3Dthis;k=3Ds.ape(k);var c=3D' =
'+s.d.cookie,i=3Dc.ind"=0A=
+"exOf(' =
'+k+'=3D'),e=3Di<0?i:c.indexOf(';',i),v=3Di<0?'':s.epa(c.substring"=0A=
+"(i+2+k.length,e<0?c.length:e));return =
v!=3D'[[B]]'?v:''};s.c_w=3Dfuncti"=0A=
+"on(k,v,e){var =
s=3Dthis,d=3Ds.c_gd(),l=3Ds.cookieLifetime,t;v=3D''+v;l=3Dl?(''"=0A=
+"+l).toUpperCase():'';if(e&&l!=3D'SESSION'&&l!=3D'NONE'){t=3D(v!=3D''?pa=
rseI"=0A=
+"nt(l?l:0):-60);if(t){e=3Dnew Date;e.setTime(e.getTime()+(t*1000))}}if"=0A=
+"(k&&l!=3D'NONE'){s.d.cookie=3Dk+'=3D'+s.ape(v!=3D''?v:'[[B]]')+'; =
path=3D/;'+"=0A=
+"(e&&l!=3D'SESSION'?' expires=3D'+e.toGMTString()+';':'')+(d?' =
domain=3D'+"=0A=
+"d+';':'');return s.c_r(k)=3D=3Dv}return =
0};s.eh=3Dfunction(o,e,r,f){var s"=0A=
+"=3Dthis,b=3D's_'+e+'_'+s._in,n=3D-1,l,i,x;if(!s.ehl)s.ehl=3Dnew =
Array;l=3Ds.e"=0A=
+"hl;for(i=3D0;i<l.length&&n<0;i++){if(l[i].o=3D=3Do&&l[i].e=3D=3De)n=3Di=
}if(n<0)"=0A=
+"{n=3Di;l[n]=3Dnew =
Object}x=3Dl[n];x.o=3Do;x.e=3De;f=3Dr?x.b:f;if(r||f){x.b=3Dr?0:"=0A=
+"o[e];x.o[e]=3Df}if(x.b){x.o[b]=3Dx.b;return b}return =
0};s.cet=3Dfunction("=0A=
+"f,a,t,o,b){var =
s=3Dthis,r;if(s.apv>=3D5&&(!s.isopera||s.apv>=3D7))eval('t"=0A=
+"ry{r=3Ds.m(f)?s[f](a):f(a)}catch(e){r=3Ds.m(t)?s[t](e):t(e)}');else{if(=
"=0A=
+"s.ismac&&s.u.indexOf('MSIE =
4')>=3D0)r=3Ds.m(b)?s[b](a):b(a);else{s.eh(s"=0A=
+".wd,'onerror',0,o);r=3Ds.m(f)?s[f](a):f(a);s.eh(s.wd,'onerror',1)}}re"=0A=
+"turn r};s.gtfset=3Dfunction(e){var s=3Dthis;return =
s.tfs};s.gtfsoe=3Dnew "=0A=
+"Function('e','var s=3Ds_c_il['+s._in+'];s.eh(window,\"onerror\",1);s."=0A=
+"etfs=3D1;var c=3Ds.t();if(c)s.d.write(c);s.etfs=3D0;return =
true');s.gtfsf"=0A=
+"b=3Dfunction(a){return window};s.gtfsf=3Dfunction(w){var =
s=3Dthis,p=3Dw.par"=0A=
+"ent,l=3Dw.location;s.tfs=3Dw;if(p&&p.location!=3Dl&&p.location.host=3D=3D=
l.ho"=0A=
+"st){s.tfs=3Dp;return s.gtfsf(s.tfs)}return =
s.tfs};s.gtfs=3Dfunction(){v"=0A=
+"ar =
s=3Dthis;if(!s.tfs){s.tfs=3Ds.wd;if(!s.etfs)s.tfs=3Ds.cet('gtfsf',s.tf"=0A=
+"s,'gtfset',s.gtfsoe,'gtfsfb')}return s.tfs};s.ca=3Dfunction(){var =
s=3Dt"=0A=
+"his,imn=3D's_i_'+s.fun;if(s.d.images&&s.apv>=3D3&&(!s.isopera||s.apv>=3D=
7"=0A=
+")&&(s.ns6<0||s.apv>=3D6.1)){s.ios=3D1;if(!s.d.images[imn]&&(!s.isns||(s=
"=0A=
+".apv<4||s.apv>=3D5))){s.d.write('<im'+'g name=3D\"'+imn+'\" height=3D1 =
wi"=0A=
+"dth=3D1 border=3D0 =
alt=3D\"\">');if(!s.d.images[imn])s.ios=3D0}}};s.mr=3Dfunc"=0A=
+"tion(sess,q,ta){var =
s=3Dthis,dc=3Ds.dc,t1=3Ds.trackingServer,t2=3Ds.trackin"=0A=
+"gServerSecure,ns=3Ds.visitorNamespace,unc=3Ds.rep(s.fun,'_','-'),imn=3D=
's"=0A=
+"_i_'+s.fun,im,b,e,rs=3D'http'+(s.ssl?'s':'')+'://'+(t1?(s.ssl&&t2?t2:"=0A=
+"t1):((ns?ns:(s.ssl?'102':unc))+'.'+(s.dc?s.dc:112)+'.2o7.net'))+'/b"=0A=
+"/ss/'+s.un+'/1/H.9-Pdvu-2/'+sess+'?[AQB]&ndh=3D1'+(q?q:'')+(s.q?s.q:'"=0A=
+"')+'&[AQE]';if(s.isie&&!s.ismac){if(s.apv>5.5)rs=3Ds.fl(rs,4095);else"=0A=
+" rs=3Ds.fl(rs,2047)}if(s.ios||s.ss){if =
(!s.ss)s.ca();im=3Ds.wd[imn]?s.w"=0A=
+"d[imn]:s.d.images[imn];if(!im)im=3Ds.wd[imn]=3Dnew =
Image;im.src=3Drs;if(r"=0A=
+"s.indexOf('&pe=3D')>=3D0&&(!ta||ta=3D=3D'_self'||ta=3D=3D'_top'||(s.wd.=
name&&ta"=0A=
+"=3D=3Ds.wd.name))){b=3De=3Dnew =
Date;while(e.getTime()-b.getTime()<500)e=3Dnew"=0A=
+" Date}return ''}return '<im'+'g sr'+'c=3D\"'+rs+'\" width=3D1 =
height=3D1 "=0A=
+"border=3D0 alt=3D\"\">'};s.gg=3Dfunction(v){var s=3Dthis;return =
s.wd['s_'+v"=0A=
+"]};s.glf=3Dfunction(t,a){if(t.substring(0,2)=3D=3D's_')t=3Dt.substring(=
2);v"=0A=
+"ar s=3Dthis,v=3Ds.gg(t);if(v)s[t]=3Dv};s.gl=3Dfunction(v){var =
s=3Dthis;s.pt(v"=0A=
+",',','glf',0)};s.gv=3Dfunction(v){var s=3Dthis;return =
s['vpm_'+v]?s['vp"=0A=
+"v_'+v]:(s[v]?s[v]:'')};s.havf=3Dfunction(t,a){var =
s=3Dthis,b=3Dt.substrin"=0A=
+"g(0,4),x=3Dt.substring(4),n=3DparseInt(x),k=3D'g_'+t,m=3D'vpm_'+t,q=3Dt=
,v=3Ds.l"=0A=
+"inkTrackVars,e=3Ds.linkTrackEvents;s[k]=3Ds.gv(t);if(s.lnk||s.eo){v=3Dv=
?v"=0A=
+"+','+s.vl_l:'';if(v&&!s.pt(v,',','isf',t))s[k]=3D'';if(t=3D=3D'events'&=
&e"=0A=
+")s[k]=3Ds.fs(s[k],e)}s[m]=3D0;if(t=3D=3D'visitorID')q=3D'vid';else =
if(t=3D=3D'pag"=0A=
+"eURL')q=3D'g';else if(t=3D=3D'referrer')q=3D'r';else =
if(t=3D=3D'vmk')q=3D'vmt';el"=0A=
+"se =
if(t=3D=3D'charSet'){q=3D'ce';if(s[k]&&s.em=3D=3D2)s[k]=3D'UTF-8'}else =
if(t=3D"=0A=
+"=3D'visitorNamespace')q=3D'ns';else =
if(t=3D=3D'cookieDomainPeriods')q=3D'cdp'"=0A=
+";else if(t=3D=3D'cookieLifetime')q=3D'cl';else =
if(t=3D=3D'variableProvider')q"=0A=
+"=3D'vvp';else if(t=3D=3D'currencyCode')q=3D'cc';else =
if(t=3D=3D'channel')q=3D'ch'"=0A=
+";else if(t=3D=3D'campaign')q=3D'v0';else if(s.num(x)) =
{if(b=3D=3D'prop')q=3D'c'"=0A=
+"+n;else if(b=3D=3D'eVar')q=3D'v'+n;else =
if(b=3D=3D'hier'){q=3D'h'+n;s[k]=3Ds.fl(s"=0A=
+"[k],255)}}if(s[k]&&t!=3D'linkName'&&t!=3D'linkType')s.qav+=3D'&'+q+'=3D=
'+s."=0A=
+"ape(s[k]);return ''};s.hav=3Dfunction(){var =
s=3Dthis;s.qav=3D'';s.pt(s.vl"=0A=
+"_t,',','havf',0);return =
s.qav};s.lnf=3Dfunction(t,h){t=3Dt?t.toLowerCas"=0A=
+"e():'';h=3Dh?h.toLowerCase():'';var =
te=3Dt.indexOf('=3D');if(t&&te>0&&h.i"=0A=
+"ndexOf(t.substring(te+1))>=3D0)return t.substring(0,te);return ''};s."=0A=
+"ln=3Dfunction(h){var s=3Dthis,n=3Ds.linkNames;if(n)return =
s.pt(n,',','lnf"=0A=
+"',h);return =
''};s.ltdf=3Dfunction(t,h){t=3Dt?t.toLowerCase():'';h=3Dh?h.t"=0A=
+"oLowerCase():'';var =
qi=3Dh.indexOf('?');h=3Dqi>=3D0?h.substring(0,qi):h;i"=0A=
+"f(t&&h.substring(h.length-(t.length+1))=3D=3D'.'+t)return 1;return =
0};s"=0A=
+".ltef=3Dfunction(t,h){t=3Dt?t.toLowerCase():'';h=3Dh?h.toLowerCase():''=
;i"=0A=
+"f(t&&h.indexOf(t)>=3D0)return 1;return 0};s.lt=3Dfunction(h){var =
s=3Dthis"=0A=
+",lft=3Ds.linkDownloadFileTypes,lef=3Ds.linkExternalFilters,lif=3Ds.link=
In"=0A=
+"ternalFilters;lif=3Dlif?lif:s.wd.location.hostname;h=3Dh.toLowerCase();=
"=0A=
+"if(s.trackDownloadLinks&&lft&&s.pt(lft,',','ltdf',h))return 'd';if("=0A=
+"s.trackExternalLinks&&(lef||lif)&&(!lef||s.pt(lef,',','ltef',h))&&("=0A=
+"!lif||!s.pt(lif,',','ltef',h)))return 'e';return ''};s.lc=3Dnew Funct"=0A=
+"ion('e','var =
s=3Ds_c_il['+s._in+'],b=3Ds.eh(this,\"onclick\");s.lnk=3Ds.c"=0A=
+"o(this);s.t();s.lnk=3D0;if(b)return this[b](e);return =
true');s.bc=3Dnew"=0A=
+" Function('e','var s=3Ds_c_il['+s._in+'],f;if(s.d&&s.d.all&&s.d.all.c"=0A=
+"ppXYctnr)return;s.eo=3De.srcElement?e.srcElement:e.target;eval(\"try{"=0A=
+"if(s.eo&&(s.eo.tagName||s.eo.parentElement||s.eo.parentNode))s.t()}"=0A=
+"catch(f){}\");s.eo=3D0');s.ot=3Dfunction(o){var =
a=3Do.type,b=3Do.tagName;re"=0A=
+"turn (a&&a.toUpperCase?a:b&&b.toUpperCase?b:o.href?'A':'').toUpperC"=0A=
+"ase()};s.oid=3Dfunction(o){var =
s=3Dthis,t=3Ds.ot(o),p=3Do.protocol,c=3Do.oncl"=0A=
+"ick,n=3D'',x=3D0;if(!o.s_oid){if(o.href&&(t=3D=3D'A'||t=3D=3D'AREA')&&(=
!c||!p||"=0A=
+"p.toLowerCase().indexOf('javascript')<0))n=3Do.href;else =
if(c){n=3Ds.re"=0A=
+"p(s.rep(s.rep(s.rep(''+c,\"\\r\",''),\"\\n\",''),\"\\t\",''),' ',''"=0A=
+");x=3D2}else =
if(o.value&&(t=3D=3D'INPUT'||t=3D=3D'SUBMIT')){n=3Do.value;x=3D3}els"=0A=
+"e =
if(o.src&&t=3D=3D'IMAGE')n=3Do.src;if(n){o.s_oid=3Ds.fl(n,100);o.s_oidt=3D=
x"=0A=
+"}}return o.s_oid};s.rqf=3Dfunction(t,un){var =
s=3Dthis,e=3Dt.indexOf('=3D'),"=0A=
+"u=3De>=3D0?','+t.substring(0,e)+',':'';return =
u&&u.indexOf(','+un+',')>"=0A=
+"=3D0?s.epa(t.substring(e+1)):''};s.rq=3Dfunction(un){var =
s=3Dthis,c=3Dun.in"=0A=
+"dexOf(','),v=3Ds.c_r('s_sq'),q=3D'';if(c<0)return =
s.pt(v,'&','rqf',un);"=0A=
+"return s.pt(un,',','rq',0)};s.sqp=3Dfunction(t,a){var =
s=3Dthis,e=3Dt.inde"=0A=
+"xOf('=3D'),q=3De<0?'':s.epa(t.substring(e+1));s.sqq[q]=3D'';if(e>=3D0)s=
.pt("=0A=
+"t.substring(0,e),',','sqs',q);return 0};s.sqs=3Dfunction(un,q){var =
s=3D"=0A=
+"this;s.squ[un]=3Dq;return 0};s.sq=3Dfunction(q){var =
s=3Dthis,k=3D's_sq',v=3Ds"=0A=
+".c_r(k),x,c=3D0;s.sqq=3Dnew Object;s.squ=3Dnew =
Object;s.sqq[q]=3D'';s.pt(v,"=0A=
+"'&','sqp',0);s.pt(s.un,',','sqs',q);v=3D'';for(x in s.squ)s.sqq[s.squ"=0A=
+"[x]]+=3D(s.sqq[s.squ[x]]?',':'')+x;for(x in =
s.sqq)if(x&&s.sqq[x]&&(x=3D"=0A=
+"=3Dq||c<2)){v+=3D(v?'&':'')+s.sqq[x]+'=3D'+s.ape(x);c++}return =
s.c_w(k,v,"=0A=
+"0)};s.wdl=3Dnew Function('e','var =
s=3Ds_c_il['+s._in+'],r=3Dtrue,b=3Ds.eh(s"=0A=
+".wd,\"onload\"),i,o,oc;if(b)r=3Dthis[b](e);for(i=3D0;i<s.d.links.length=
"=0A=
+";i++){o=3Ds.d.links[i];oc=3Do.onclick?\"\"+o.onclick:\"\";if((oc.indexO=
"=0A=
+"f(\"s_gs(\")<0||oc.indexOf(\".s_oc(\")>=3D0)&&oc.indexOf(\".tl(\")<0)"=0A=
+"s.eh(o,\"onclick\",0,s.lc);}return r');s.wds=3Dfunction(){var =
s=3Dthis;"=0A=
+"if(s.apv>3&&(!s.isie||!s.ismac||s.apv>=3D5)){if(s.b&&s.b.attachEvent)"=0A=
+"s.b.attachEvent('onclick',s.bc);else if(s.b&&s.b.addEventListener)s"=0A=
+".b.addEventListener('click',s.bc,false);else s.eh(s.wd,'onload',0,s"=0A=
+".wdl)}};s.vs=3Dfunction(x){var =
s=3Dthis,v=3Ds.visitorSampling,g=3Ds.visitor"=0A=
+"SamplingGroup,k=3D's_vsn_'+s.un+(g?'_'+g:''),n=3Ds.c_r(k),e=3Dnew =
Date,y=3D"=0A=
+"e.getYear();e.setYear(y+10+(y<1900?1900:0));if(v){v*=3D100;if(!n){if("=0A=
+"!s.c_w(k,x,e))return 0;n=3Dx}if(n%10000>v)return 0}return 1};s.dyasmf"=0A=
+"=3Dfunction(t,m){if(t&&m&&m.indexOf(t)>=3D0)return 1;return =
0};s.dyasf=3D"=0A=
+"function(t,m){var =
s=3Dthis,i=3Dt?t.indexOf('=3D'):-1,n,x;if(i>=3D0&&m){var "=0A=
+"n=3Dt.substring(0,i),x=3Dt.substring(i+1);if(s.pt(x,',','dyasmf',m))ret=
"=0A=
+"urn n}return 0};s.uns=3Dfunction(){var =
s=3Dthis,x=3Ds.dynamicAccountSelec"=0A=
+"tion,l=3Ds.dynamicAccountList,m=3Ds.dynamicAccountMatch,n,i;s.un.toLowe=
"=0A=
+"rCase();if(x&&l){if(!m)m=3Ds.wd.location.host;if(!m.toLowerCase)m=3D''+=
"=0A=
+"m;l=3Dl.toLowerCase();m=3Dm.toLowerCase();n=3Ds.pt(l,';','dyasf',m);if(=
n)"=0A=
+"s.un=3Dn}i=3Ds.un.indexOf(',');s.fun=3Di<0?s.un:s.un.substring(0,i)};s.=
sa"=0A=
+"=3Dfunction(un){s.un=3Dun;if(!s.oun)s.oun=3Dun;else =
if((','+s.oun+',').in"=0A=
+"dexOf(un)<0)s.oun+=3D','+un;s.uns()};s.t=3Dfunction(){var =
s=3Dthis,trk=3D1,"=0A=
+"tm=3Dnew =
Date,sed=3DMath&&Math.random?Math.floor(Math.random()*10000000"=0A=
+"000000):tm.getTime(),sess=3D's'+Math.floor(tm.getTime()/10800000)%10+"=0A=
+"sed,yr=3Dtm.getYear(),vt=3Dtm.getDate()+'/'+tm.getMonth()+'/'+(yr<1900?=
"=0A=
+"yr+1900:yr)+' '+tm.getHours()+':'+tm.getMinutes()+':'+tm.getSeconds"=0A=
+"()+' '+tm.getDay()+' =
'+tm.getTimezoneOffset(),tfs=3Ds.gtfs(),ta=3D'',q=3D"=0A=
+"'',qs=3D'';s.uns();if(!s.q){var =
tl=3Dtfs.location,x=3D'',c=3D'',v=3D'',p=3D'',b"=0A=
+"w=3D'',bh=3D'',j=3D'1.0',k=3Ds.c_w('s_cc','true',0)?'Y':'N',hp=3D'',ct=3D=
'',pn=3D"=0A=
+"0,ps;if(s.apv>=3D4)x=3Dscreen.width+'x'+screen.height;if(s.isns||s.isop=
"=0A=
+"era){if(s.apv>=3D3){j=3D'1.1';v=3Ds.n.javaEnabled()?'Y':'N';if(s.apv>=3D=
4){"=0A=
+"j=3D'1.2';c=3Dscreen.pixelDepth;bw=3Ds.wd.innerWidth;bh=3Ds.wd.innerHei=
ght;"=0A=
+"if(s.apv>=3D4.06)j=3D'1.3'}}s.pl=3Ds.n.plugins}else =
if(s.isie){if(s.apv>=3D"=0A=
+"4){v=3Ds.n.javaEnabled()?'Y':'N';j=3D'1.2';c=3Dscreen.colorDepth;if(s.a=
pv"=0A=
+">=3D5){bw=3Ds.d.documentElement.offsetWidth;bh=3Ds.d.documentElement.of=
fs"=0A=
+"etHeight;j=3D'1.3';if(!s.ismac&&s.b){s.b.addBehavior('#default#homePa"=0A=
+"ge');hp=3Ds.b.isHomePage(tl)?\"Y\":\"N\";s.b.addBehavior('#default#cl"=0A=
+"ientCaps');ct=3Ds.b.connectionType}}}else =
r=3D''}if(s.pl)while(pn<s.pl."=0A=
+"length&&pn<30){ps=3Ds.fl(s.pl[pn].name,100)+';';if(p.indexOf(ps)<0)p+"=0A=
+"=3Dps;pn++}s.q=3D(x?'&s=3D'+s.ape(x):'')+(c?'&c=3D'+s.ape(c):'')+(j?'&j=
=3D'+j"=0A=
+":'')+(v?'&v=3D'+v:'')+(k?'&k=3D'+k:'')+(bw?'&bw=3D'+bw:'')+(bh?'&bh=3D'=
+bh:"=0A=
+"'')+(ct?'&ct=3D'+s.ape(ct):'')+(hp?'&hp=3D'+hp:'')+(p?'&p=3D'+s.ape(p):=
''"=0A=
+")}if(s.usePlugins)s.doPlugins(s);var =
l=3Ds.wd.location,r=3Dtfs.document"=0A=
+".referrer;if(!s.pageURL)s.pageURL=3Ds.fl(l?l:'',255);if(!s.referrer)s"=0A=
+".referrer=3Ds.fl(r?r:'',255);if(s.lnk||s.eo){var =
o=3Ds.eo?s.eo:s.lnk;if"=0A=
+"(!o)return '';var =
p=3Ds.gv('pageName'),w=3D1,t=3Ds.ot(o),n=3Ds.oid(o),x=3Do.s"=0A=
+"_oidt,h,l,i,oc;if(s.eo&&o=3D=3Ds.eo){while(o&&!n&&t!=3D'BODY'){o=3Do.pa=
rent"=0A=
+"Element?o.parentElement:o.parentNode;if(!o)return =
'';t=3Ds.ot(o);n=3Ds."=0A=
+"oid(o);x=3Do.s_oidt}oc=3Do.onclick?''+o.onclick:'';if((oc.indexOf(\"s_g=
"=0A=
+"s(\")>=3D0&&oc.indexOf(\".s_oc(\")<0)||oc.indexOf(\".tl(\")>=3D0)return=
"=0A=
+" =
''}ta=3Dn?o.target:1;h=3Do.href?o.href:'';i=3Dh.indexOf('?');h=3Ds.linkLe=
a"=0A=
+"veQueryString||i<0?h:h.substring(0,i);l=3Ds.linkName?s.linkName:s.ln("=0A=
+"h);t=3Ds.linkType?s.linkType.toLowerCase():s.lt(h);if(t&&(h||l))q+=3D'&=
"=0A=
+"pe=3Dlnk_'+(t=3D=3D'd'||t=3D=3D'e'?s.ape(t):'o')+(h?'&pev1=3D'+s.ape(h)=
:'')+(l?"=0A=
+"'&pev2=3D'+s.ape(l):'');else =
trk=3D0;if(s.trackInlineStats){if(!p){p=3Ds."=0A=
+"gv('pageURL');w=3D0}t=3Ds.ot(o);i=3Do.sourceIndex;if(s.gg('objectID')){=
n=3D"=0A=
+"s.gg('objectID');x=3D1;i=3D1}if(p&&n&&t)qs=3D'&pid=3D'+s.ape(s.fl(p,255=
))+("=0A=
+"w?'&pidt=3D'+w:'')+'&oid=3D'+s.ape(s.fl(n,100))+(x?'&oidt=3D'+x:'')+'&o=
t=3D"=0A=
+"'+s.ape(t)+(i?'&oi=3D'+i:'')}}if(!trk&&!qs)return '';if(s.p_r)s.p_r()"=0A=
+";var =
code=3D'';if(trk&&s.vs(sed))code=3Ds.mr(sess,(vt?'&t=3D'+s.ape(vt):'"=0A=
+"')+s.hav()+q+(qs?qs:s.rq(s.un)),ta);s.sq(trk?'':qs);s.lnk=3Ds.eo=3Ds.li=
"=0A=
+"nkName=3Ds.linkType=3Ds.wd.s_objectID=3Ds.ppu=3D'';return =
code};s.tl=3Dfuncti"=0A=
+"on(o,t,n){var =
s=3Dthis;s.lnk=3Ds.co(o);s.linkType=3Dt;s.linkName=3Dn;s.t()}"=0A=
+";s.ssl=3D(s.wd.location.protocol.toLowerCase().indexOf('https')>=3D0);s=
"=0A=
+".d=3Ddocument;s.b=3Ds.d.body;s.n=3Dnavigator;s.u=3Ds.n.userAgent;s.ns6=3D=
s.u."=0A=
+"indexOf('Netscape6/');var =
apn=3Ds.n.appName,v=3Ds.n.appVersion,ie=3Dv.ind"=0A=
+"exOf('MSIE '),o=3Ds.u.indexOf('Opera =
'),i;if(v.indexOf('Opera')>=3D0||o"=0A=
+">0)apn=3D'Opera';s.isie=3D(apn=3D=3D'Microsoft Internet =
Explorer');s.isns=3D("=0A=
+"apn=3D=3D'Netscape');s.isopera=3D(apn=3D=3D'Opera');s.ismac=3D(s.u.inde=
xOf('Mac"=0A=
+"')>=3D0);if(o>0)s.apv=3DparseFloat(s.u.substring(o+6));else =
if(ie>0){s."=0A=
+"apv=3DparseInt(i=3Dv.substring(ie+5));if(s.apv>3)s.apv=3DparseFloat(i)}=
el"=0A=
+"se if(s.ns6>0)s.apv=3DparseFloat(s.u.substring(s.ns6+10));else =
s.apv=3D"=0A=
+"parseFloat(v);s.em=3D0;if(String.fromCharCode){i=3Descape(String.fromCh=
"=0A=
+"arCode(256)).toUpperCase();s.em=3D(i=3D=3D'%C4%80'?2:(i=3D=3D'%U0100'?1=
:0))}s"=0A=
+".sa(un);s.vl_l=3D'visitorID,vmk,ppu,charSet,visitorNamespace,cookieDo"=0A=
+"mainPeriods,cookieLifetime,pageName,pageURL,referrer,currencyCode,p"=0A=
+"urchaseID';s.vl_t=3Ds.vl_l+',variableProvider,channel,server,pageType"=0A=
+",campaign,state,zip,events,products,linkName,linkType';for(var n=3D1;"=0A=
+"n<51;n++)s.vl_t+=3D',prop'+n+',eVar'+n+',hier'+n;s.vl_g=3Ds.vl_t+',trac=
"=0A=
+"kDownloadLinks,trackExternalLinks,trackInlineStats,linkLeaveQuerySt"=0A=
+"ring,linkDownloadFileTypes,linkExternalFilters,linkInternalFilters,"=0A=
+"linkNames';if(pg)s.gl(s.vl_g);s.ss=3Dss;if(!ss){s.wds();s.ca()}}",=0A=
l=3Dwindow.s_c_il,n=3Dnavigator,u=3Dn.userAgent,v=3Dn.appVersion,e=3Dv.in=
dexOf(=0A=
'MSIE =
'),m=3Du.indexOf('Netscape6/'),a,i,s;if(l)for(i=3D0;i<l.length;i++){=0A=
s=3Dl[i];if(s.oun=3D=3Dun)return s;else =
if(s.fs(s.oun,un)){s.sa(un);return s=0A=
}}if(e>0){a=3DparseInt(i=3Dv.substring(e+5));if(a>3)a=3DparseFloat(i)}=0A=
else if(m>0)a=3DparseFloat(u.substring(m+10));else a=3DparseFloat(v);if(a=0A=
>=3D5&&v.indexOf('Opera')<0&&u.indexOf('Opera')<0){eval(c);return new=0A=
s_c(un,pg,ss)}else s=3Ds_c2f(c);return s(un,pg,ss)}
------=_NextPart_000_0000_01C90061.47186AA0--
