From: <Saved by Windows Internet Explorer 7>
Subject: Waste vegetable oil - a new green super power, Other, Talk London | Tipped
Date: Fri, 10 Apr 2009 11:20:42 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0014_01C9B9CE.6282A360"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/talk/topic/143/waste-vegetable-oil-a-new-green-super-power/London

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML lang=3Den xml:lang=3D"en" =
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Waste vegetable oil =
- a new green super power, Other, Talk London | Tipped</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<META=20
content=3D"Tipped Talk London, Waste vegetable oil - a new green super =
power, Other, What's green, clean, cheap as chips and smells of =
chips?&#13;&#10;Biodiesel made from waste vegetable =
oil!&#13;&#10;&#13;&#10;Biofuels from virgin crops take land away from =
food crops. That is bad ..."=20
name=3Ddescription>
<META=20
content=3D"London, Waste vegetable oil - a new green super power, Other, =
What's green, clean, cheap as chips and smells of =
chips?&#13;&#10;Biodiesel made from waste vegetable =
oil!&#13;&#10;&#13;&#10;Biofuels from virgin crops take land away from =
food crops. That is bad and silly. &#13;&#10;Biodiesel made from a =
catering waste product offers London a local, resilient, sustainable =
alternative transport and heating fuel. That is clever and =
clean.&#13;&#10;www.uptownoil.co.uk&#9;&#13;&#10;&#13;&#10;Uptown Oil, =
based just round the corner from Borough tube, collect used vegetable =
oil from pubs and restaurants in London, and turn it into 100% recycled =
biodiesel on site in Southwark. &#13;&#10;&#13;&#10;This biodiesel can =
be used in normal diesel vehicles without any modification needed. =
Uptown biodiesel saves more than 1kg of CO2 for every litre burned. It =
costs less than normal fossil fuel diesel, and it produces less =
particulate matter in exhaust fumes.&#13;&#10;&#13;&#10;Biodiesel made =
from 100% recycled waste vegetable oil diverts waste from landfill and =
has the potential to save thousands of tonnes of CO2 a =
year.&#13;&#10;&#13;&#10;This small scale, South London, localised fuel =
production is a common sense alternative to fossil fuels. A load of =
black cabs fill up regularly on Uptown's 100% recycled biodiesel - one =
cab can save 5000 kilos of CO2 each year. That is a lot, and if we're to =
reduce emissions by 80% by 2050, it's worth some =
attention.&#13;&#10;&#13;&#10;Not all fossil fuels are bad. =
&#13;&#10;Bad biofuels =3D biomatter from virgin crops =3D silly. =
&#13;&#10;Good biodiesel =3D recycled waste oil =3D =
sensible.&#13;&#10;&#13;&#10;Encourage your local restaurants to recycle =
their oil and campaign for vehicle users to make the right fuel choice. =
&#13;&#10;&#13;&#10;www.uptownoil.co.uk&#9;&#13;&#10;020 7928 =
6300&#13;&#10;,Awesome awesome idea - thanks for the invite to come and =
view the site - can't wait!"=20
name=3Dkeywords><LINK title=3D"no title" media=3Dscreen=20
href=3D"http://www.tipped.co.uk/stylesheets/main.css?1238029555" =
type=3Dtext/css=20
charset=3Dutf-8 rel=3Dstylesheet><LINK href=3D"/favicon.ico" =
type=3Dimage/x-icon=20
rel=3D"shortcut icon"><LINK title=3DRSS=20
href=3D"http://www.tipped.co.uk/feed/rss/London" =
type=3Dapplication/rss+xml=20
rel=3Dalternate>
<SCRIPT =
src=3D"http://www.tipped.co.uk/javascripts/prototype.js?1238029555"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.tipped.co.uk/javascripts/effects.js?1238029555"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.tipped.co.uk/javascripts/dragdrop.js?1238029555"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.tipped.co.uk/javascripts/controls.js?1238029555"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.tipped.co.uk/javascripts/application.js?1238029555"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.tipped.co.uk/javascripts/jcarousellite.js?1238029555"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.tipped.co.uk/javascripts/jshizzle.js?1238029555"=20
type=3Dtext/javascript></SCRIPT>

<META content=3D"MSHTML 6.00.6000.16809" name=3DGENERATOR></HEAD>
<BODY class=3D" talk">
<DIV id=3Dwrapper>
<DIV id=3Dcontainer>
<DIV id=3Dadmin_nav>
<P><A href=3D"http://www.tipped.co.uk/signup" rel=3Dnofollow>Sign Up</A> =
| <A=20
href=3D"http://www.tipped.co.uk/login" rel=3Dnofollow>Sign In</A> | <A=20
class=3Dfeedback href=3D"http://www.tipped.co.uk/feedback" =
rel=3Dnofollow>Send=20
Feedback</A></P></DIV>
<DIV id=3Dheader>
<DIV id=3Dlogo>
<H1><A href=3D"http://www.tipped.co.uk/">Tipped</A></H1>
<P>London</P></DIV>
<DIV id=3Dsearch>
<FORM id=3Dsearch_form action=3Dhttp://www.tipped.co.uk/listings/search =
method=3Dget>
<DIV id=3Dsearch_for>
<DL>
  <DT><LABEL for=3Dsearch_for>Search For</LABEL> <SPAN =
class=3Dsearch_desc>(e.g.=20
  tapas, spa, Hakkasan)</SPAN>=20
  <DD><INPUT class=3Dtxt-std id=3Dq name=3Dq> </DD></DL></DIV>
<DIV id=3Dsearch_near>
<DL>
  <DT><LABEL for=3Dq_near>Near</LABEL> <SPAN class=3Dsearch_desc>(e.g. =
Camden,=20
  W1)</SPAN>=20
  <DD><INPUT class=3Dtxt-std id=3Dq_near name=3Dq_near> </DD></DL></DIV>
<DIV id=3Dsearch_submit><INPUT type=3Dimage alt=3DSearch=20
src=3D"http://www.tipped.co.uk/images/search_btn.png?1238029555"></DIV></=
FORM>
<P class=3Dcities><STRONG>Other Cities:</STRONG> <A title=3D"Tipped =
Birmingham"=20
href=3D"http://www.tipped.co.uk/location/Birmingham">Birmingham</A> | <A =

title=3D"Tipped Brighton"=20
href=3D"http://www.tipped.co.uk/location/Brighton">Brighton</A> | <A=20
title=3D"Tipped Cardiff"=20
href=3D"http://www.tipped.co.uk/location/Cardiff">Cardiff</A> | <A=20
title=3D"Tipped Edinburgh"=20
href=3D"http://www.tipped.co.uk/location/Edinburgh">Edinburgh</A> | <A=20
title=3D"Tipped Liverpool"=20
href=3D"http://www.tipped.co.uk/location/Liverpool">Liverpool</A> | <A=20
title=3D"Tipped Manchester"=20
href=3D"http://www.tipped.co.uk/location/Manchester">Manchester</A> | <A =

title=3D"Tipped Newcastle"=20
href=3D"http://www.tipped.co.uk/location/Newcastle">Newcastle</A> | <A=20
title=3D"Tipped Nottingham"=20
href=3D"http://www.tipped.co.uk/location/Nottingham">Nottingham</A> | =
<STRONG><A=20
href=3D"http://www.tipped.co.uk/cities">More...</A></STRONG></P></DIV></D=
IV>
<DIV id=3Dmain>
<DIV id=3Dcontent>
<DIV id=3Dnavigation>
<DIV class=3Dclearfix id=3Dnav_int>
<UL class=3Dclearfix id=3Dnav>
  <LI id=3Dnav_home><A =
href=3D"http://www.tipped.co.uk/location/London">Home</A>=20
  </LI>
  <LI id=3Dnav_sign_in><A href=3D"http://www.tipped.co.uk/login" =
rel=3Dnofollow>Sign=20
  in</A> </LI>
  <LI id=3Dnav_give_a_tip><A =
href=3D"http://www.tipped.co.uk/listings/check"=20
  rel=3Dnofollow>Give a tip</A> </LI>
  <LI id=3Dnav_collections><A=20
  href=3D"http://www.tipped.co.uk/collection">Collections</A> </LI>
  <LI id=3Dnav_talk><A=20
  =
href=3D"http://www.tipped.co.uk/talk/conversations/all/London">Talk</A>=20
</LI></UL></DIV></DIV><!-- the view must have an unmatched </div> tag  =
hence the strange indentation after yield --><NOSCRIPT>
<H3>Hey, you might want to enable Javascript, this site makes things =
cool with=20
javascript, so you might be missing out!</H3></NOSCRIPT>
<DIV class=3Dclearfix id=3Dtalk>
<DIV id=3Dtalk_sidebar>
<FORM action=3Dhttp://www.tipped.co.uk/talk/search/all/London =
method=3Dget>
<DIV class=3Dc_search>
<P><INPUT class=3Dc_search_text id=3Dtopic_search value=3D"Search =
Topics"=20
name=3Dq_talk></P>
<P><INPUT class=3Dc_search_submit type=3Dimage=20
src=3D"http://www.tipped.co.uk/images/search_btn_sm.gif?1238029555"></P><=
/DIV></FORM>
<SCRIPT type=3Dtext/javascript>=0A=
			Event.observe('topic_search', 'click', function(event) {=0A=
				var element =3D Event.element(event);=0A=
				element.value =3D "";=0A=
				element.style.color =3D "#000";=0A=
			});=0A=
		</SCRIPT>

<P class=3Dcreate><A =
href=3D"http://www.tipped.co.uk/collection/create"><IMG=20
height=3D16 alt=3D"Create a Topic"=20
src=3D"http://www.tipped.co.uk/images/add_icon.gif?1238029555" =
width=3D16></A>=20
<STRONG><A href=3D"http://www.tipped.co.uk/talk/new/conversation">Start =
a=20
Conversation</A></STRONG></P>
<DIV class=3Dsidebar_container_top><IMG height=3D3 alt=3D""=20
src=3D"http://www.tipped.co.uk/images/collections_sidebar_top.gif?1238029=
555"=20
width=3D160></DIV>
<DIV class=3D"sidebar_container talk_sidebar">
<DL class=3Dtalk_category_sidebar_list>
  <DT><A =
href=3D"http://www.tipped.co.uk/talk/conversations/all/London">All=20
  Conversations</A>=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/1/conversation/Local%20Questi=
ons/city/London">Local=20
  Questions</A>=20
  <DD>6 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/13/conversation/Site%20Questi=
ons%20&amp;%20Updates/city/London">Site=20
  Questions &amp; Updates</A>=20
  <DD>27 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/12/conversation/Recreation%20=
&amp;%20Sports/city/London">Recreation=20
  &amp; Sports</A>=20
  <DD>99 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/11/conversation/News%20&amp;%=
20Politics/city/London">News=20
  &amp; Politics</A>=20
  <DD>36 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/10/conversation/Relationships=
%20&amp;%20Dating/city/London">Relationships=20
  &amp; Dating</A>=20
  <DD>361 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/9/conversation/Humour%20&amp;=
%20Offbeat/city/London">Humour=20
  &amp; Offbeat</A>=20
  <DD>58 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/8/conversation/Travel/city/Lo=
ndon">Travel</A>=20

  <DD>123 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/7/conversation/Arts%20&amp;%2=
0Entertainment/city/London">Arts=20
  &amp; Entertainment</A>=20
  <DD>35 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/6/conversation/Shopping/city/=
London">Shopping</A>=20

  <DD>127 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/5/conversation/Events/city/Lo=
ndon">Events</A>=20

  <DD>one day ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/4/conversation/Nightlife/city=
/London">Nightlife</A>=20

  <DD>23 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/3/conversation/Drinking/city/=
London">Drinking</A>=20

  <DD>133 days ago=20
  <DT><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/2/conversation/Eating/city/Lo=
ndon">Eating</A>=20

  <DD>one day ago=20
  <DT class=3Dselected><A=20
  =
href=3D"http://www.tipped.co.uk/talk/filter/14/conversation/Other/city/Lo=
ndon">Other</A>=20

  <DD>8 days ago </DD></DL></DIV>
<DIV class=3Dsidebar_container_bottom><IMG height=3D3 alt=3D""=20
src=3D"http://www.tipped.co.uk/images/collections_sidebar_bottom.gif?1238=
029555"=20
width=3D160></DIV></DIV><!--end side bar -->
<DIV id=3Dtalk_main>
<DIV id=3Dbanner_ad>
<SCRIPT type=3Dtext/javascript><!--//<![CDATA[=0A=
   var m3_u =3D =
(location.protocol=3D=3D'https:'?'https://w00tpublishers.wootmedia.net/de=
livery/ajs.php':'http://w00tpublishers.wootmedia.net/delivery/ajs.php');=0A=
   var m3_r =3D Math.floor(Math.random()*99999999999);=0A=
   if (!document.MAX_used) document.MAX_used =3D ',';=0A=
   document.write ("<scr"+"ipt type=3D'text/javascript' src=3D'"+m3_u);=0A=
   document.write ("?zoneid=3D26&amp;target=3D_blank");=0A=
   document.write ('&amp;cb=3D' + m3_r);=0A=
   if (document.MAX_used !=3D ',') document.write ("&amp;exclude=3D" + =
document.MAX_used);=0A=
   document.write ("&amp;loc=3D" + escape(window.location));=0A=
   if (document.referrer) document.write ("&amp;referer=3D" + =
escape(document.referrer));=0A=
   if (document.context) document.write ("&context=3D" + =
escape(document.context));=0A=
   if (document.mmm_fo) document.write ("&amp;mmm_fo=3D1");=0A=
   document.write ("'><\/scr"+"ipt>");=0A=
//]]>--></SCRIPT>
<NOSCRIPT>
<DIV><A=20
href=3D"http://w00tpublishers.wootmedia.net/delivery/ck.php?n=3Daf12cf4e&=
amp;cb=3DINSERT_RANDOM_NUMBER_HERE"><IMG=20
alt=3D""=20
src=3D"http://w00tpublishers.wootmedia.net/delivery/avw.php?zoneid=3D26&a=
mp;cb=3DINSERT_RANDOM_NUMBER_HERE&amp;n=3Daf12cf4e"></A></DIV></NOSCRIPT>=
</DIV>
<DIV id=3Dconversation_main>
<DIV class=3Dconversation_header>
<H2><A name=3Dtop></A>Waste vegetable oil - a new green super power</H2>
<P>Category: <A=20
href=3D"http://www.tipped.co.uk/talk/filter/14/conversation/Other/city/Lo=
ndon">Other</A></P>
<P class=3Dconversation_header_actions><SPAN class=3Demail_updates><A=20
href=3D"http://www.tipped.co.uk/talk/subscribe/143">Get email updates =
about this=20
conversation</A></SPAN> <SPAN class=3Dflag_inapropriate><A=20
href=3D"http://www.tipped.co.uk/talk/flag/inappropriate/topic/show/143">F=
lag=20
Conversation as Inappropriate</A></SPAN> </P></DIV>
<HR>

<DIV class=3Dclearfix>
<P class=3Dpage_jump_link><A=20
href=3D"http://www.tipped.co.uk/talk/topic/143/waste-vegetable-oil-a-new-=
green-super-power/London#bottom">Page=20
Bottom</A></P></DIV>
<DIV class=3D"conversation_item clearfix">
<DIV class=3Dreviewer>
<P><A href=3D"http://www.tipped.co.uk/users/5597"><IMG =
class=3Dreviewer_photo alt=3D""=20
src=3D"http://www.tipped.co.uk/files/logo/0002/0715/Claudiathegardener_sm=
all.JPG?1228318918"></A></P>
<P><IMG class=3D"" alt=3D"1 out of 5.0"=20
src=3D"http://www.tipped.co.uk/images/circle_rating1.gif?1238029555"></P>=

<P><A href=3D"http://www.tipped.co.uk/users/5597">3 =
reviews</A></P></DIV>
<DIV class=3Dconversation_body>
<DIV class=3Dclearfix>
<P class=3Dconversation_name><A =
href=3D"http://www.tipped.co.uk/users/5597">Claudia=20
R.</A> said:</P>
<P class=3Dconversation_date>08-12-08</P></DIV>
<DIV class=3Dconversation_message>
<P>What's green, clean, cheap as chips and smells of chips? =
<BR>Biodiesel made=20
from waste vegetable oil!</P>
<P>Biofuels from virgin crops take land away from food crops. That is =
bad and=20
silly. <BR>Biodiesel made from a catering waste product offers London a =
local,=20
resilient, sustainable alternative transport and heating fuel. That is =
clever=20
and clean. <BR><A=20
href=3D"http://www.uptownoil.co.uk/">http://www.uptownoil.co.uk/</A> =
</P>
<P>Uptown Oil, based just round the corner from Borough tube, collect =
used=20
vegetable oil from pubs and restaurants in London, and turn it into 100% =

recycled biodiesel on site in Southwark. </P>
<P>This biodiesel can be used in normal diesel vehicles without any =
modification=20
needed. Uptown biodiesel saves more than 1kg of CO2 for every litre =
burned. It=20
costs less than normal fossil fuel diesel, and it produces less =
particulate=20
matter in exhaust fumes.</P>
<P>Biodiesel made from 100% recycled waste vegetable oil diverts waste =
from=20
landfill and has the potential to save thousands of tonnes of CO2 a =
year.</P>
<P>This small scale, South London, localised fuel production is a common =
sense=20
alternative to fossil fuels. A load of black cabs fill up regularly on =
Uptown's=20
100% recycled biodiesel - one cab can save 5000 kilos of CO2 each year. =
That is=20
a lot, and if we're to reduce emissions by 80% by 2050, it's worth some=20
attention.</P>
<P>Not all fossil fuels are bad. <BR>Bad biofuels =3D biomatter from =
virgin crops=20
=3D silly. <BR>Good biodiesel =3D recycled waste oil =3D sensible.</P>
<P>Encourage your local restaurants to recycle their oil and campaign =
for=20
vehicle users to make the right fuel choice. </P>
<P><A =
href=3D"http://www.uptownoil.co.uk/">http://www.uptownoil.co.uk/</A> =
<BR>020=20
7928 6300 </P></DIV></DIV>
<P class=3Dconversation_actions><SPAN class=3Dsend_to_friends><A=20
title=3D"Send message" =
href=3D"http://www.tipped.co.uk/messages/new?id=3D5597">Message=20
Claudia</A></SPAN> <SPAN class=3Dflag_inapropriate><A=20
href=3D"http://www.tipped.co.uk/talk/flag/inappropriate/topic/show/143">F=
lag as=20
Inappropriate</A></SPAN> </P></DIV>
<H2 class=3Dsection_heading><SPAN>1 Comments</SPAN></H2>
<DIV class=3D"comment_item clearfix">
<DIV class=3Dreviewer>
<P><A href=3D"http://www.tipped.co.uk/users/726"><IMG =
class=3Dreviewer_photo alt=3D""=20
src=3D"http://www.tipped.co.uk/files/logo/0002/3024/eduardo2_small.jpg?12=
33320181"></A></P>
<P><IMG class=3D"" alt=3D"4 out of 5.0"=20
src=3D"http://www.tipped.co.uk/images/circle_rating4.gif?1238029555"></P>=

<P></P>
<P><A href=3D"http://www.tipped.co.uk/users/726">216 reviews</A></P>
<P class=3Dbadge><A title=3D"Tippster '08"=20
href=3D"http://www.tipped.co.uk/tippster"><IMG height=3D15 =
alt=3D"Tippster '08"=20
src=3D"http://www.tipped.co.uk/images/tippster_badge_meta_08.gif?12380295=
55"=20
width=3D41></A></P></DIV>
<DIV class=3Dconversation_body>
<DIV class=3Dclearfix>
<P class=3Dconversation_name><A =
href=3D"http://www.tipped.co.uk/users/726">Charles=20
O.</A> said:</P>
<P class=3Dconversation_date>09-12-08</P></DIV>
<DIV class=3Dconversation_message>
<P>Awesome awesome idea - thanks for the invite to come and view the =
site -=20
can't wait!</P></DIV></DIV>
<P class=3Dconversation_actions><SPAN class=3Dsend_to_friends><A=20
title=3D"Send message" =
href=3D"http://www.tipped.co.uk/messages/new?id=3D726">Message=20
Charles</A></SPAN> <SPAN class=3Dflag_inapropriate><A=20
href=3D"http://www.tipped.co.uk/talk/flag/inappropriate/comment/show/433"=
>Flag as=20
Inappropriate</A></SPAN> </P></DIV>
<DIV class=3Dclearfix>
<P class=3Dpage_jump_link><A=20
href=3D"http://www.tipped.co.uk/talk/topic/143/waste-vegetable-oil-a-new-=
green-super-power/London#top">Page=20
Top</A></P></DIV>
<DIV class=3Dconversation_comment_form>
<H3><A name=3Dbottom></A>Get in on the conversation!</H3>
<FORM=20
action=3D/talk/topic/143/Waste%20vegetable%20oil%20-%20a%20new%20green%20=
super%20power/London=20
method=3Dpost>
<P><TEXTAREA class=3D"txt-std short wider" id=3Dcomment_message =
name=3Dcomment[message] rows=3D3 cols=3D51></TEXTAREA></P>
<P><INPUT class=3Dform_checkbox id=3Dtopic_subscribe type=3Dcheckbox =
CHECKED value=3D1=20
name=3Dtopic_subscribe> <SPAN class=3Ddesc>Send me email updates when =
others=20
reply.</SPAN></P>
<P><INPUT class=3Dstd_button type=3Dimage alt=3DSubmit=20
src=3D"http://www.tipped.co.uk/images/submit_btn.gif?1238029555">=20
</P></FORM></DIV></DIV></DIV></DIV></DIV><!--content--></DIV>
<DIV id=3Dfooter>
<P class=3Dfeed><A href=3D"http://www.tipped.co.uk/feed/rss/London">Grab =
the=20
feed.</A></P><A href=3D"http://www.tipped.co.uk/newsletter"=20
rel=3Dnofollow>Newsletter</A> | <A =
href=3D"http://www.tipped.co.uk/about"=20
rel=3Dnofollow>About</A> | <A href=3D"http://www.tipped.co.uk/contact"=20
rel=3Dnofollow>Contact</A> | <A =
href=3D"http://www.tipped.co.uk/advertise"=20
rel=3Dnofollow>Advertise</A> | <A =
href=3D"http://www.tipped.co.uk/feedback"=20
rel=3Dnofollow>Send Feedback</A> | <A =
href=3D"http://www.tipped.co.uk/privacy"=20
rel=3Dnofollow>Privacy Policy</A> | <A =
href=3D"http://www.tipped.co.uk/tos"=20
rel=3Dnofollow>Terms of Service</A> | <A=20
href=3D"http://www.tipped.co.uk/listings/new" rel=3Dnofollow>Add a =
Business</A><BR>
<P>=C2=A9 2009 <A href=3D"http://www.tipped.co.uk/">Tipped</A> Ltd. All =
Rights=20
Reserved</P></DIV></DIV></DIV>
<SCRIPT src=3D"http://www.google-analytics.com/urchin.js"=20
type=3Dtext/javascript>=0A=
</SCRIPT>

<SCRIPT=20
type=3Dtext/javascript>=0A=
_uacct =3D "UA-2145004-1";=0A=
urchinTracker();=0A=
</SCRIPT>
</BODY></HTML>

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/add_icon.gif?1238029555

R0lGODlhEAAQALMIAPzkz/727/akYPJ/IP3t3/F2EP////BtAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAACH5BAEAAAgALAAAAAAQABAAAARMEMlJq72YiHJOEcQFcMcwdAVQEeQRBJ0XTkJ8GIYtUO2d
xwVKKYArGgIn4YBoPCYnPZwtSLNJY7sJK/YCziajjgmlsmhIny9mzbZEAAA7

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/collections_sidebar_top.gif?1238029555

R0lGODlhoAAEALMAAPX19fn5+ff39/Hx8fT09O/v7/b29vDw8Pv7+////+3t7QAAAAAAAAAAAAAA
AAAAACH5BAAAAAAALAAAAACgAAQAAARMMCVExrk46827/2AojmQ5DgQiJYbivnAsz3Rt33iu73z/
AomAC4AoGo/IpHLJbDqf0Kh0OgW4AgeFYMXter/gsHhMLpvP6DRXoChEAAA7

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/collections_sidebar_bottom.gif?1238029555

R0lGODlhoAADALMAAOvr6/7+/vT09PDw8P///+bm5uzs7Orq6vX19e3t7QAAAAAAAAAAAAAAAAAA
AAAAACH5BAAAAAAALAAAAACgAAMAAAQpEKVJq704682730cBfKQGiJ4QDGXrvvAGGLFrjN0QEIFQ
/8CgcIhRESIAOw==

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://w00tpublishers.wootmedia.net/delivery/avw.php?zoneid=26&cb=INSERT_RANDOM_NUMBER_HERE&n=af12cf4e

R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/files/logo/0002/0715/Claudiathegardener_small.JPG?1228318918

/9j/4AAQSkZJRgABAQEASABIAAD/7RwoUGhvdG9zaG9wIDMuMAA4QklNBAQHQ2FwdGlvbgAAATsc
AgAAAgACHAJ4AL5QYXVsIENhaGFsYW4NV0EyMzEwNQ1Db250YWN0IE5hbWUvY2xhdWRpYSANQXZh
cm4gUm9hZA1UaXRsZTogdmVnZXRhYmxlIHBhdGNoDXBpY3Mgb2YgY2xhdWRpYSBwb3NzaWJseSB3
aXRoIGZyaWVuZHMsIHdpdGggdG9tYXRvIHBsYW50IGFuZCBvdGhlciB2ZWcgdGhleSBhcmUgZ3Jv
d2luZy4NQ2xhdWRpYSAgaW4gaGVyIGdhcmRlbi4NHAJQAAtNLiBPdXNlbGxhbRwCbgAJTmV3c3F1
ZXN0HAI3AAgyMDA3MDkyNhwCCgABNxwCPAALMTkxMDI5KzAxMDAcAugAK01vZGVsIDogICAgICAg
ICAgICAgICAgICAgICAgCUNhbm9uIEVPUyA1RA0AOEJJTQPpClByaW50IEluZm8AAAAAeAAoAAAA
SABIAAAAAAMeAkH/9//3A0ACSiACBXsD4AAAAAABaAFoAAAAAA+WC0UBbAAyC0VHGABQAAEBAQAA
AAEnDwABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGQAAAAAAAAAAAIAQLgENCIAAgBFAAAAN0JM
IDhCSU0D7QpSZXNvbHV0aW9uAAAAABABLAAAAAEAAgEsAAAAAQACOEJJTQQNGEZYIEdsb2JhbCBM
aWdodGluZyBBbmdsZQAAAAAEAAAAHjhCSU0EGRJGWCBHbG9iYWwgQWx0aXR1ZGUAAAAABAAAAB44
QklNA/MLUHJpbnQgRmxhZ3MAAAAJAAAAAAAAAAABADhCSU0ECg5Db3B5cmlnaHQgRmxhZwAAAAAB
AAA4QklNJxAUSmFwYW5lc2UgUHJpbnQgRmxhZ3MAAAAACgABAAAAAAAAAAI4QklNA/UXQ29sb3Ig
SGFsZnRvbmUgU2V0dGluZ3MAAABIAC9mZgABAGxmZgAGAAAAAAAAAC9mZgABAKGZmgAGAAAAAAAA
ADIAAAABAFoAAAAGAAAAAAAAADUAAAABAC0AAAAGAAAAAAAAOEJJTQP4F0NvbG9yIFRyYW5zZmVy
IFNldHRpbmdzAAAAcAAA/////////////////////////////wPoAAAAAP//////////////////
//////////8D6AAAAAD/////////////////////////////A+gAAAAA////////////////////
/////////wPoAAA4QklNBAgGR3VpZGVzAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeDVVSTCBv
dmVycmlkZXMAAAAEAAAAADhCSU0EGgZTbGljZXMAAAAAdQAAAAYAAAAAAAAAAAAADAAAAAgAAAAA
CgBXAEEAMgAzADEAMAA1AC0AMAA1AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAgA
AAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNBBERSUNDIFVudGFnZ2Vk
IEZsYWcAAAABAQA4QklNBBQXTGF5ZXIgSUQgR2VuZXJhdG9yIEJhc2UAAAAEAAAAAThCSU0EDBVO
ZXcgV2luZG93cyBUaHVtYm5haWwAABakAAAAAQAAAEsAAABwAAAA5AAAY8AAABaIABgAAf/Y/+AA
EEpGSUYAAQIBAEgASAAA/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8V
GBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4O
DhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgA
cABLAwEiAAIRAQMRAf/dAAQABf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUB
AQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJx
gTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePz
RieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYF
NQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNU
oxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//a
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAA8AEBFgC4ATAA13
AHcA7fsN/gAA8wETBPMBAAAN/gAAOf8AAMcAxwAAADn/AAD5AL0B+QAAAAf/Q/4H/wAA+QD5APkA
B/8H/wf/AgD//y4AAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUA
AJ8ABwBwACAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHx//8R8f//AEU4
MzUwMTccAAAAAwAAAAAAAAAAAAAA//9QFIEAAAAAAAAACgCwAgAEAASqAiIAfBGKCwEAAQBkACcA
cxGGCwAAAAAAAAAAAAAAAAAAAAABAGEDAAQABFUBTAIABAAE9wGWAQAEAAThAvEAFgEWAVsAwABD
AUMBnQCLAE0BTQHsAAAAAQCSAJIAkQAAAPEBCgQOBGECCAFAAEAABADuAV8DYgN7ACYA6wDtAIEB
+wH9A/8DXwIDAT8APgAEAPIBSgNMA3sALgDuAO8AiAE+CAAEAASsBVMVPggABAAErAVTFToIAwT7
A6kFUxXwBwAEAATWBVAUEAkABAAE0wRYG4QIAAQABEkFcBcHBlAEUAQRCoAM+gYABAAEcgi9DvAH
AAQABNYFUBQfCQAEAAQ9BRAZ8AcABAAE1gVQFPAHAAQABNYFUBTwBwAEAATWBVAU8AcABAAE1gVQ
FJD+jQH8A5Qqo/6VAeADECfV/qkBmANsIA3/xAFRA1gbSf/hAQcDcBdm//AB5wLgFYv/BAK+AlAU
wf8lAogCXBIAAE0CTgJoED4AegIZAtgOdwCmAusBrA27AN0CtwGADOsACQOXAbgLIwFAA3IB8Aqc
Ac4DMQFtCfQBEwglCIAAgACAAIAANAAbABwAJQAlAC8AMwA7ADUAPAA3AD4AQQBCADQAJgATABQA
GgAxADIAMQAxADYANgA6ADgAPABAAD4AOABIABUAEwAaADsAUABIAE4AQwBCAEkAPwBOAF0AZABI
AEQAGAAeADoAUQBCAFMAUQBSAEEARgA4AD8AOAA9ADwAVgBkADYANgBCAD0ATABSAF0AUQBZAE4A
UgBTAFMAPgArACoALQA3AFsAWABWAFMAXABYAFwAUgBUAFYAUgBJAE0ANAAsADwAdwCbAIgAkwB8
AHMAfABjAHQAhgCOAGMATQBAAEoAiACwAIsApwChAJ8AeQB9AGEAaABYAF0AVgBmAGgANwA3AEIA
PgBNAFIAXQBRAFgATQBSAFMAUgA9ACYAKwAuADkAXgBaAFYAVABbAFgAWwBSAFQAVgBRAEYATAA0
ACwAOwB5AJoAiACQAHkAcgB6AGIAdACEAIsAXgBLAEIATQCPALMAigCmAJ8AnAB3AHwAXwBnAFcA
XABUAGUAaAA2ADQANwAvADkAPABCADcAOQAuAC0ALAArAB8AEgAoACsAMgBHAEAAPQA5AD4AOAA3
AC4ALAAsACgAIQAdADIAKAA1AFoAawBcAGAATwBGAEYANAA5AEAAQQAqABsANwA/AG8AfwBbAGsA
ZABgAEUAQgAuAC4AJQAmAB8AHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAsAKwBowChAN4AsgBPAggCKwIS
BF0DbQLJAggACAAiAJcAPQNaASUBWwHyAEICMQKLA1gEewIOAqECDgAFACQAUABGAV8AVABlAF0A
5wBXAdEArQBVAEEArQAHAF8ADAEgApYIWwL7ASkCxAH/BDEFvgOcAmQBDQGtAhcAogC/AB8acAQA
AKYEAAQABEAKow71FwEASRBKAHT/Kg+2D7P/kQDfEPEPHhANEBEAQgDl/8MP7w+XDxIAXQAfAOMP
8w++/xsAERBsEKP/4f8AAEIAHMEAAAEAbgAMnAAAAQBAAAiEif/wqoQTmHxVEjhxAAAAAAAAAAAA
AAABAQDVHwEAeZ0BAMucAQD/CwAEAAQFAAAEAAAAAAAAAAAAAP8fAAL/HwACAAQABMcCvQHtAcsC
lQGfAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAIEAgQCBAIEAgQCBAElJKgD6AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAgABAAIABAAAAFIwMwACAAcABAAAADAxMDAAAAAAgKZCAIcFAAAAbywA
rgMAABYAAAAKAAAABgADAQMAAQAAAAYAAAAaAQUAAQAAAGISAAAbAQUAAQAAAGoSAAAoAQMAAQAA
AAIAAAABAgQAAQAAAHISAAACAgQAAQAAAJNHAAAAAAAASAAAAAEAAABIAAAAAQAAAP/Y/8QBogAA
AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoLAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsQ
AAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYX
GBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqS
k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz
9PX29/j5+hEAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6
goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9sAhAABAQEBAQEBAQEBAQEBAQECAQEBAQECAgICAgMDAwMDAwMDAwQE
BAMDBAMDAwQFBAQFBQUFBQMEBQYFBQYEBQUFAQEBAQEBAQIBAQIFAwMDBQUFBQUFBQUFBQUFBQUF
BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQX/wAARCAB4AKADASEAAhEBAxEB/9oA
DAMBAAIRAxEAPwD+FHQPgf8AGTxVawX3hr4WfEDXrO5Uvb3WkeEr64jkAJUlWRCCAwI47g+lbmp/
s1ftDaL4VufHOr/BD4q6Z4Ms7kWd14rv/Aepw6dHKTtCNcNGIwxbjGc5rGeIoU7OpNK+13uVyTtJ
2238jy8eFvEp5GgawR1yNOmP9KkHhHxSxAXw7rTFiAoGmTEk/lVe2pfzHL9bwv8Az8X3o25/hZ8S
7awt9UuPAPjCDTbt3itb6bw9drDIyruYK5TDFV5IHQc1SHw+8dG1uL0eEPEf2K0VWubs6PcCKMN9
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
d3G6jarLJggen0rdPxJ8dmIW/wDwlWrrbKZTHax3JSFPMOZAqABVDHkgAAnrWNTCYarJTqQTYckb
NWPpz4P/APBRb9t74AaNF4d+C/7SXxG+G2iQXzapBpnha9t7eFLo4BmUeWcSnA+cfNwOeKo+O/8A
goL+2t8Tv7XPxA/aW+Kvi069qket6udZ8QtKZ7xG3pM3AxKrchxgjscVx5lkmU5x7H+06CqeyalG
/RrZq3VdApQjRjKFNWT3P//Z/9sAQwADAgIDAgIDAwIDAwMDAwQHBQQEBAQJBgcFBwoJCwsKCQoK
DA0RDgwMEAwKCg4UDxAREhMTEwsOFBYUEhYREhMS/9sAQwEDAwMEBAQIBQUIEgwKDBISEhISEhIS
EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIS/8AAEQgAMgAyAwEiAAIR
AQMRAf/EABwAAAICAwEBAAAAAAAAAAAAAAAHBQYDBAgJAf/EADQQAAIBAwQBAwEFBgcAAAAAAAEC
AwQFEQAGEiEHEyIxQQgUMlFhFRcjYnKRQkNSVHGhwf/EABgBAQEBAQEAAAAAAAAAAAAAAAUEAQYD
/8QALhEAAQMCBAQFAwUAAAAAAAAAAQACAwQREiExYQVBUXETMpGhsRU08DNSweHx/9oADAMBAAIR
AxEAPwD0psiR1cU1utBekobdVPHMVAzz58zCuQRxAbDEf0g9EhVfaOvN58S+Kd9bltAuM0EVKKky
0QNTUjgPdyUjCR/05CjPQGkR47+2LerJtw7XutNKL/Zqmqgnrnp5KhPUEiy8pZARFIzo7YUMCSrY
7+N+8edt2bv8U7jg3pTUFy25fYDDRXSOZqCSITA84nfkininL4OfjOQezHzNnjOBpJHIb/nZWCJ8
Lg51gFw19mm13nyzu/cG96uuopqmzzp6ZrI/WamldjKXQE8V6PAdHHeBp9eZbVX7t2zuGa93CGmt
MdtmhqaTAzHmHlzBBGO+/r+Wo7xl4Vo/s/3p6ajuNTc6XdccL1kYQRmlcoZYJIXH4lKMUJIBzj4+
NfPNqVF72tWba2o9U1TugmjetrYzxp4scpii4BJ4Arn4yw70TWYzUhoyGVtv8XWUEIFJdzbuIv36
LjTxhuOe27FuVJLTR1FMlUogrmVj90Dgcn4jo5CHo/6sn41KXHa1+3ttmlumxWitdqraZjVUkkZp
YhKqCOTgxLNLy4qDnrkxwB7tS9Z44h8PVsFPc9wU91oKh2Wqtv3fKTyL2qhcnBGf8XfRwCDqB2o8
9XTXyz3E1ZipkaWwxUV3NNJFUyN7mghAIk5DkcLGThcZTOde1RcPdJH1Bz9NDbQ2Px0XKPfZgae3
okLMnpTSI4cMjEH2D5B0af7/AGZ6yZ2kjse9JEkPJXapt6FgfqVaUMD+jAEfUA9aNJDiMW/oorFd
bbfoNzUW4a4msts5oa1ba9uM3JLi4RRBP6YTDRFWTtSXBbv5B1VvNG8Ki53QWSlq5J7VtxxbLfTm
QlY4ozhj2ASWYMxJ79wGcAabm0bX5V2Rt2j3p5Sl9K37btb3z9m0SBK6eqEMkX3Rsj2BVQSSEk4C
hQDgY5E3LdLnX3681ho5aJLaVFf6sZCRqzljw7PMBiFJBY5YZ1vB56OCaSWPMCwI6bblXytmrYfB
Bs4g2XUPiTesO6trxUF8miFdY+EEUrPyLwHtCwPRxgoT/Iv1xq17qqbRtuBquqeONII2eSdwTwi+
WVMkk/GMnoE/XAB4fTcO77FuGa8bXp3jmW3LVZnAMa0pTLxsjHBPwcDsEdattx8gV28rBSQ3SGqa
qudTC1PwysalYsOpBPtA/EOjggk69aqOE1V8Qwl2uWV05RcQmbQ4TGfEY3TPO3QrPcr0t/vN+u9d
aQbVfKmRkgliJVowApVGx8jC9g5B/Ud0ym3PZPD90uFRYaOGtvq8Et9c9Q/OgjYcnRkVguG5ICSP
aASBk9S+9fI0t3ay7ZstvqmpKd3q6hlUStiJDEixBB7YVJdu/wARIJ0rvI1tutVN94tUctWlNHHH
UqoDvHJxxkEe4gg449j/AM3iAhq2Nache2vIaA7G2mh00KAnpn04s7zczucz8p723zRtuK3UqV20
vF1VUpCgmnnpagySuFHJmPr/AIick/qdGuQP2XfJffHQVZV/cuIWxg6NHfS4f3D2UmIr2bm8p2Xe
lnNRSmG82urovRqKyerjqo6mNC4lVC448Ar8OTKPdgYIwdefW5o0t96uUVJNTWuymcyx0iKUjb1i
3qwo2McVHA/lleh8aiL3fq+Da1DYtmWimio7aszG5UsqV0le8rRsSYXLLEMqx4qv0BJz1qtXnfFZ
UpGL7RVUdbExRZqssq+mVwwK4X3E47/QDAHwbR8Jlgle++TuX8pvhdVTxy4nP5e6ssW6VrIJTdqi
qiqHWWnoqTivGVDGET3EZGcHJB+Wzj8tS2TSi2JUC43WO61tcIqV6ZlWDIVsgu34HGU/lwxyRqqW
Wa2z2StqpLhFHVU8wk41Tu08yceivfHKlcBR3lhnPzrFFd6OSotcETPUQtUt6iujOI1kU5l+QDIA
PnHXH50m6A3/AKTza1mAWIz39/zdMPZu77HtneN4n3lb5bnI8JhSqo5URgYnJAViCFXmAXIHuA6O
DpY7g3fUUW7q+rT0uFS6iNi+FC9YdvzJ7Odadffmh9WkmgR4amoAXHH+GUJ6OBkjiSeOe+j9Nbtw
2hcd32qqvtloFqUoFL14oosJDEhVRMUBOFOQGx0D30D1RHC0AucNVz/GKljyI2HnfmsX7yJz/kg/
qCvf/ejVY+6Rf7en/sNGttH0QONbtLK8UimJ3Qg9FTjTh8X19VX/AMGuqZ6iLIHpyyF1xj8jo0ao
fqEaNVs+aLFbaC2Gaht9DTzPGOUkVOqMfj5IGdKnYkjLfomVmDCnqCCD3n0W0aNa7yroeGfqN7j5
URcPbX3EL0BXP0P+F0+/ARMXjrejxEo5sNQpZeiQZDkZ/XA/to0a8an7dypb94O5+CksoHEdfTRo
0alKAX//2Q==

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/circle_rating1.gif?1238029555

R0lGODlhMgAKAMQQAPOIMPJ/IPSSQPakYPetcPrSsPi/kPWbUPnJoP3t4PF2EPzk0P728Pi2gPvb
wPBtAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA
ABAALAAAAAAyAAoAAAXTICSOZGmeaJo6TWMwZeI4cLnM57yYjG4Oj+ADUIMQhArEiCEQBnaiRUBI
HCEUwgHJIcyKGo/BYgF4OETARqKgUNQCyYThIRAlFIBC4tgYAbtBIgB1IgwKWgwPBCNcSo0jYDtg
CSMHCiNNgA8iD32YdVxnI50QYEWhpQEkYH6aAIKqhYqcWiKPj18PlHNQEAKXUZpKEAgPBw4FZZRG
nQ5XATUACgYsdHYKAQUOB6RWWEGeuUEKBUvcQU8jCWVBAkVSQosmM0VLOCYyvSQ3+owOyxBCAAA7

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/files/logo/0002/3024/eduardo2_small.jpg?1233320181

/9j/4AAQSkZJRgABAQEASABIAAD/4QIyRXhpZgAATU0AKgAAAAgACQEPAAIAAAAOAAAAegEQAAIA
AAAGAAAAiAESAAMAAAABAAEAAAEaAAUAAAABAAAAjgEbAAUAAAABAAAAlgEoAAMAAAABAAIAAAEx
AAIAAAAmAAAAngEyAAIAAAAUAAAAxIdpAAQAAAABAAAA2AAAAABTb255IEVyaWNzc29uAEs3NTBp
AAAAAEgAAAABAAAASAAAAAFSMUowMDIgICAgICBwcmdDWEMxMjUwMDM2X0VVXzNfQ0wgMC4wADIw
MDY6MDQ6MjIgMDI6NDU6MzEAABWCmgAFAAAAAQAAAdqCnQAFAAAAAQAAAeKIJwADAAAAAQKAAACQ
AAAHAAAABDAyMjCQAwACAAAAFAAAAeqQBAACAAAAFAAAAf6SAQAKAAAAAQAAAhKSBAAKAAAAAQAA
AhqSBwADAAAAAQABAACSCAADAAAAAQAAAACSCQADAAAAAQAAAACgAAAHAAAABDAxMDCgAQADAAAA
AQABAACgAgAEAAAAAQAABMGgAwAEAAAAAQAAA/ykAQADAAAAAQABAACkAgADAAAAAQAAAACkAwAD
AAAAAQAAAACkBAAFAAAAAQAAAiKkBgADAAAAAQAAAACkDAADAAAAAQADAAAAAAAAAAAAAQAAABQA
AAAOAAAABTIwMDY6MDQ6MjIgMDI6NDU6MzEAMjAwNjowNDoyMiAwMjo0NTozMQAAAAAEAAAAAQAA
AAAAAAABAAAAAQAAAAH/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAH
zgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQ
ICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAAB
UAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFla
AAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2
aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAA
CAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXds
ZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAA
AAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZ
WiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2
z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8v
d3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABk
ZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IA
AAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0
aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlv
biBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAU
Xy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAA
AAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZ
AB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQA
qQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFF
AUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0C
JgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOAND
A08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgE
tgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZq
BnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4I
ggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrc
CvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4N
qQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5
ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcU
SRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgb
GEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIc
exyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEc
IUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3Jicm
VyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvR
LAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox
8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQ
OIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/
YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0ar
RvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5O
t08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3
V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7Ng
BWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlD
aZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFz
XXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2h
fgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmI
zokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQg
lIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qg
aaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQ
rUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6
O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/
yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHW
VdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T8
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
2Q==

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/circle_rating4.gif?1238029555

R0lGODlhMgAKAMQQAPF2EPzk0POIMPnJoPSSQPakYPJ/IPWbUPi/kPetcPrSsP728P3t4PvbwPi2
gPBtAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA
ABAALAAAAAAyAAoAAAW0ICSOZGmeaJo2joMs5dAO5YK0Tcm0DlM3jYCp8Cg+BDCRwPggjBgGpmMU
ADBpooG1WCA1mFyRA/xAiA7kHGRrBMAYAIGCkXhMRUSykuxckO0QX2kQYz5nACMEfyJ/ToJgU2OD
DgYkYyN5TAJ7YF0QfzSPTD4ID0IiBIgiAWRYA2SGdUwGSUtMThBwBgoNaHdZbL+EbQojC2hFBqe5
tk1JEAFRRQknQM/GQCcMQScB3CZAhhAhADs=

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/tippster_badge_meta_08.gif?1238029555

R0lGODlhKQAPANU/APTQv/317+qacO6MTeaNYPO2j/XJr+u2n/zq3+qSYPno3/jEn/vgz/F4JO1y
IPKaYOhkEO6ngPbBn/nez/O+n+xpEPGicOZvKOFlIOGIYNNOEN1hINVYIPrXv/fUv+VhEPnWv/nn
3/SlcPfl38hKIOmBQ/jVv9yLcPawgPBtEO2uj8lDEPeocOJdEP3s3+RXAOdaANhKAOldAOBTANRG
AN1PAOxfAM9BAPBkAMAwAO9jAMU2AO5iAMo7AP///////yH5BAEAAD8ALAAAAAApAA8AAAb/wJ/Q
xWrgjsikcsnENVguoXSR0lmv2Kx2m00tprzwAIVyhM/otHp9/iIqNtvDt+gEHLaKqNMRweOAgYKD
eQgPMogIIoggKBUMPpE+AQ2IiA4IDgMMCCiIIggMJZaIDw4wqAEDqAUoEpKSIKioBggQARIWPiUO
PgUgCLOoDi/FLxIMA7olAZEGBpIfxiYlAz7SDAUfAREGJsbGM+IzLRQBEwkzkgMtkhfj4hE+4h4e
Mx6RBfDiNf3+NQIiYEAQKQDBSP/6JfDRzwOFhRggJtwQo2JFAZE8YITlQ4VFixt8CLjggwABHxcw
UgRJgIZLl/J8KKChAtaBlzhpxARAQwOAUUgqchIIoeGG0RsaDADIYJRDiQwcjko9qiHqUQ5FpWoI
8eNAj69gw4odS7ZsjwNSDqzYwbat27dw475dgVbKjxEnSOTYy7ev37+Ac5A4MUJKEAA7

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/search_btn.png?1238029555

iVBORw0KGgoAAAANSUhEUgAAAFcAAAAWCAMAAACCEvCXAAAABGdBTUEAANbY1E9YMgAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG5UExURVtDHP///1xEHEIxFD8vFFpCGz0t
EzorEjcpEUQzFVlCG1M+GU45GFU/GlhBG0c1Fks4F1A7GFZAGlE8GUk2F/T09Pr6+p+Vg9rX0M7J
wYV0WKGVhPPy8NLMwqKXhKSZhaOYhPTy8Pn5+d7Z0XZpU56Ug6mhkrGmldDLwWRPKqWZhW9gRbmx
o3ttVYJyV1BBJYR4ZK2kk9HLwmBMKaKWhOjm4NzY0ZaJdF5LKHdlSLyzpPPy76+llIRyVMe/s2NO
Kravoqyjk/T19NvX0WBQNcS9spCAZ+jl4GNTNrm0rca/smxZObuzo3FhRsK8sWlVNldFJpeKdWZT
N720plNCJkM2H4BvU0Y4IIFxVox+Zo59Yufl4LStopuNdr24rlxIJ3lnSW1eRd3Y0X9yXfn5+npm
RmhWOMO9stzY0JKGdHpoSY6AZs/KwXNiRlpLMdHMwoZ5ZPX19enm4WRNKdDKwbCllHVlR/Dv7IJ4
aH9vVnpsVWpYOJ2Tg8K8stzb2JOFbr61psW+svT19bevoufk4H9wVoR6ad3Z0fr5+cjBtFZEJZeQ
g21ZOa6klFpGJ351Zruyo/b29dvXz8dLoGIAAAIISURBVHjatI/nV9tAEMRv0gHJkqUzrjLYYIMN
BpNgCCX0lt5777333hNIT/7i7MoKz5zy/Mn+Pel2d3ZuniQeb1lVS44tNbuI2sYSF6+4uXXgTfPi
hXrkiv3ptFhbB+7/SYtGP9diuRVzLqY6crFYYzUOpUVA5cw9AMOBQIwK2lhpQweXDppTw+OBwDh3
OEkLdz2HOV9Ip7BUSig5qZJl5fnyGAnXqX6j6rCAHZY1BjgOPlsWwBfyyPtCXgtdoQfYpOv0tKCl
rPzCQ7d10KMPIUWO1JCubycLwPtlYwW7RZPCI2DbUW5a0eoKmzH/HOeouY0jNKBpFKOel4YK4wqE
rdJNP5tI2naS/5rqXny3B3DJtjeiO0kv1Y+eFR5JX4gtgj4G35J1MNjPN/qCwQHcpJ6aTprn+05T
feo5/+X2+0OE9h9+zGJWiyPO/b7y1eOa9gCTSOzUtMnyggD4jC/PFQhTpWuPab7HZTOMMI9h75sK
5g0Uwkh0mQU+zIUF0wTKjrAv5IuQCmeB6DRwVWY4LSo/4A6pGUzIKJ7JCUxL+ZL0KBJSAtLdZdQQ
eV4YCgeinPfCMIpcI0YkwurMSNbIjswYxi4es7zKGt6uiKIaYpwQDT5629t7G6pDlqr7W7/F6npw
6q5YUwc+vZsS62rPk6lQSBxeX2u+hgix9eCGmvLzFceG/gowACESbWpuRy+dAAAAAElFTkSuQmCC

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/search_btn_sm.gif?1238029555

R0lGODlhOQAPAMQAANHMwpaJc8O8saGXhK+llLqxo9vX0Yd7Zujl4fPy8MjAs4FxVWNRMHttVXdn
TFpHJ0o3F1hBG0Y0FlM+GVlCG1A7GU05GFU/GmheTYVzVUMxFTorElxEHD4uE1tDHP///yH5BAAA
AAAALAAAAAA5AA8AAAX/YBJkZGmeaKquZpF88BdwdG3feK7vOKPEGY9wSCwaj8gkUgBbUJ5QSgDx
UTgoBABAwXhiEgVodnt4On5gCqPQfRKuUTV1EanbHR9ANhP5ILYMdQUwGHV+AFQODAkJBAUGDBkf
fIYDdpcBHwsXnJ0DHwOdF6CiD42NnKQPoJ8OoguanaSinKsNE7i5DDAIAw8Thwq4mWcIuHkDPwta
ubiwBloAoM3NCA0V2NkVDi4fBRWHAtgKCBWZC+AvCAcVWtoVz9Gg79kADRb4+fkPVBag+btiePM3
wIAMCwQSPNDX4MM9fP/05UPgAILFixgKHDiQwAAEZL4+ERhQMMFHXwYxeOwycCCAAAYNG1wEdbHm
KgcScurkyAuDBIOECBjYmYABSwkXDASQEOCFHwYMEDDQeVTnzg8ONGjdqtUBBq5gw4rd6nXs2AlU
MHRYy7at27dw48qNO+jDgQ148+rdy7ev3798ITCBkeAAhsOIEytezLixY8QNusUIAQA7

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.tipped.co.uk/images/submit_btn.gif?1238029555

R0lGODlhWAAZAPcAAP///1tDHFxEHEQzFUIxFFlCG1pCGz8vFD0tEzorEkc1FjcpEdbQxmddTFhB
G045GEk2F1M+GVA7GFE8GVU/GlZAGks4F6aahfPy8NLMwqGVhKKWhNvX0X9vVoJyV2NOKtHLwoFx
VnlnSc/Kwefk4PTy8KKXhKqhk6OYhODc1NXPxpiLdYZ5ZNHMwp+Vg2xZOdDKwdDLwaWZhaSZhYd6
ZMG4qmxdRa6klINzV31uVnhrVH9wVm9gRXttVVdFJmpYOGBMKZCAZ6uik3NiRtPOxbmxo5WIdJqT
iIVzVd3Z0ebk4cW+sp6Ug7iwo+Db1GlWN1ZEJo9/Y7uzo/Lx8NTPxpaIcF1JKMC7tIt9Zol7ZUY4
IdDMxI6AZmNTNtPNxdzY0WFRNod9bGROKY2GeXFhRm1eRcC8tJyViNDLxIJ6a+jl4MzEuG5aOVtN
MtHMxbGmlYJxVNHNxdXQxo5/ZtLNxfXz8YV0WIZ8bM/LxEQ2ILqzp8e/s4J1YNTPxWFNKZeKdcO9
ss7KxHRrW1NCJravoujm4LCllGhWOHtnR8S+tbyzpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABYABkA
AAj/AAEIHEiwoMGDCBMqXMiwYQoGECNKnEixosWLGDNaTKGwDhIBIEOKHEmypMmTKFOmjLLm4EeV
MGPKnHkSEceBKQLo3Mmzp8+fQIMKHUq0Z42BDIoqXcq0adCjABgYmEq1qtWrWLNq3cq161UxTgDI
KUC2rNmzaNOqXcu2rdu0cACocEC3rt27eOmyeZNBkQgHIoLYvfBBxIXDduoarvuBMF3ChyMLzks5
rwoVFTJr3sy5cwU/JQZmqJABgGYcAGSUHsglc6HUmfcAkFIBtYyCoz3r9lyFCoXfwIMLH05hBgBD
FF68oFAauAcAM0p7mAMgw2+BSSgAEWj9+YwXz5N4/wBCvHz5J30iqF/Pvr37CCsAlEDxQ30LAOtD
AEBxP0R8FBHoF9oP8YUW4H7qAdDCeww2qB4RE0Qo4YQUVjiBFSAMdMMEGUq4AwAmZDgQFhP8ASKI
S2BwAwCHfGhChACAYOGMNEZIhAQ45qjjjjzm2EERAg0RAwA+ArDBkBts8AUAHWwAwBBqpFiEkx10
YCSOAMTQ45Zc4ujFA2CGKeaYZI6pAQAaNAEAGWCeaQQMAICZBZpwPqAmAEbkgKaeGoAJAAxlBioo
mHRYYOihiCaqqAU0cCCECxgA0AMPAGDgghAAkODDCACMMEKkPGBAAqMC+dAFAID0AIALhna66Kuw
WuEARRwQ1GrrrbjmCgELkQrERK28CsRBGRCcMBAJv3JwQq0kEFKrsmBgwMKzy+pq7bV8uKHAttx2
6+233NqgwyDe6mADuOimq+664OqxxQDwxivvvPTWa++9+Oarb71tAIAGAQAHLPDABBds8MEIJ6xw
wYkAgMcBEEcs8cQUV2zxxRhnrDHFYQgUCAIghyzyyCSXbPLJKKes8sh3DISBFgnELPPMNNds8804
56zzzjKfUZAZeSwg9NBEF2300UgnrfTSTKehxEFKHCFIA1RXbfXVWGet9dZcd431GEdcMcVBAQEA
Ow==

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Location: http://www.tipped.co.uk/talk/topic/143/waste-vegetable-oil-a-new-green-super-power/hover.css

#featured A:hover {
	FONT-WEIGHT: bold; COLOR: #5d441c; TEXT-DECORATION: none
}
#top_tippers P A:hover {
	FONT-WEIGHT: bold; COLOR: #5d441c; TEXT-DECORATION: none
}
#top_tippers H3 A:hover {
	FONT-WEIGHT: bold; COLOR: #5d441c; TEXT-DECORATION: none
}
#also_like A:hover {
	COLOR: #5d441c; TEXT-DECORATION: none
}
.pagination A:hover {
	COLOR: #fff; BACKGROUND-COLOR: #439213; TEXT-DECORATION: none
}
#nav LI#nav_home A:hover {
	BACKGROUND: url(../images/nav_home_on.png) no-repeat
}
#nav LI#nav_my_profile A:hover {
	BACKGROUND: url(../images/nav_my_profile_on.png) no-repeat
}
#nav LI#nav_give_a_tip A:hover {
	BACKGROUND: url(../images/nav_give_a_tip_on.png) no-repeat
}
#nav LI#nav_get_tips A:hover {
	BACKGROUND: url(../images/nav_get_tips_on.png) no-repeat
}
#nav LI#nav_sign_in A:hover {
	BACKGROUND: url(../images/nav_sign_in_on.png) no-repeat
}
#nav LI#nav_friends A:hover {
	BACKGROUND: url(../images/nav_friends_on.png) no-repeat
}
#nav LI#nav_friends_disabled A:hover {
	BACKGROUND: url(../images/nav_friends_disabled_on.png) no-repeat
}
#nav LI#nav_collections A:hover {
	BACKGROUND: url(../images/nav_collections_on.png) no-repeat
}
#nav LI#nav_talk A:hover {
	BACKGROUND: url(../images/nav_talk_on.png) no-repeat
}
#category_nav_secondary LI A:hover {
	COLOR: #439213; TEXT-DECORATION: none
}
#profile_nav LI A:hover {
	COLOR: #439213; TEXT-DECORATION: none
}
#profile_meta LI A:hover {
	COLOR: #ee7009; TEXT-DECORATION: none
}
#detail_description P A {
	COLOR: #439213
}
#category_also_like P.more A:hover {
	COLOR: #5d441c; TEXT-DECORATION: none
}
#detail_description P A:hover {
	COLOR: #5d441c; TEXT-DECORATION: none
}

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/stylesheets/main.css?1238029555

@import url( hover.css );
* {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
BODY {
	MARGIN: auto; COLOR: #333; LINE-HEIGHT: 1.2; FONT-FAMILY: Arial, =
Helvetica, sans-serif; BACKGROUND-COLOR: #fff; TEXT-ALIGN: center
}
UL {
	LIST-STYLE-TYPE: none
}
A {
	COLOR: #439213; TEXT-DECORATION: none
}
A:hover {
	TEXT-DECORATION: underline
}
A.action_link {
	FONT-WEIGHT: bold; COLOR: #ee7009; FONT-STYLE: normal
}
A IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
HR {
	BORDER-RIGHT: #d8d8d8 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#d8d8d8 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 8px =
0px; BORDER-LEFT: #d8d8d8 0px solid; PADDING-TOP: 0px; BORDER-BOTTOM: =
#d8d8d8 0px solid; HEIGHT: 1px; BACKGROUND-COLOR: #d8d8d8
}
#filter_loading {
	FLOAT: right; MARGIN: 5px 20px 0px 0px
}
.nospace {
	MARGIN: 0px
}
.notop {
	MARGIN-TOP: 0px
}
.nobottom {
	MARGIN-BOTTOM: 0px! important
}
.smspc {
	MARGIN: 0.5em 0px
}
.txtsm {
	FONT-SIZE: 11px
}
.intro {
	FONT-SIZE: 14px; COLOR: #439213; LINE-HEIGHT: 18px
}
.disabled {
	FONT-SIZE: 11px; COLOR: #ccc! important
}
.inline {
	DISPLAY: inline
}
.fleft {
	FLOAT: left
}
.fright {
	FLOAT: right
}
.vmid {
	VERTICAL-ALIGN: middle
}
.clear {
	CLEAR: both
}
.clearfix:unknown {
	CLEAR: both; DISPLAY: block; VISIBILITY: hidden; HEIGHT: 0px; content: =
"."
}
.clearfix {
	DISPLAY: inline-block
}
.clearfix {
	DISPLAY: block
}
* HTML .clearfix {
	HEIGHT: 1%
}
.floatheader_container {
	PADDING-BOTTOM: 12px
}
#content H2.floatheader.pageheading {
	FLOAT: left; MARGIN-BOTTOM: 0px; WIDTH: 50%
}
.floatsubheader {
	FONT-SIZE: 11px; FLOAT: right; MARGIN: 2em 0px 0px; WIDTH: 40%; =
TEXT-ALIGN: right
}
#featured_archive .floatheader_container H2.floatheader {
	MARGIN-TOP: 0px
}
#featured_archive .floatheader_container P {
	MARGIN-TOP: 0px
}
UL.inline_images LI {
	FLOAT: left; WIDTH: 190px; HEIGHT: 55px
}
#wrapper #container .flash_error {
	FONT-SIZE: 12px
}
#wrapper #container .flash_notice {
	FONT-SIZE: 12px
}
#wrapper #container .formError {
	FONT-SIZE: 12px
}
#wrapper #container .flash_error {
	FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif
}
#wrapper #container .flash_notice {
	FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif
}
#wrapper #container .flash_error {
	COLOR: #c00
}
#wrapper #container .formError {
	COLOR: #c00
}
#wrapper #container .flash_notice {
	COLOR: #2996c8
}
#content FORM .fieldWithErrors INPUT {
	BACKGROUND-COLOR: #fff2f7
}
#wrapper #container .errorExplanation#errorExplanation H2 {
	FONT-SIZE: 12px; MARGIN-BOTTOM: 0.5em; COLOR: #c00
}
#wrapper #container .errorExplanation P {
	FONT-SIZE: 11px; MARGIN: 0px
}
#wrapper #container .errorExplanation UL {
	FONT-SIZE: 11px; MARGIN: 0px 0px 10px; COLOR: #c00
}
#wrapper #container .errorExplanation LI {
	MARGIN: 0px
}
.pagination {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; =
FLOAT: left; PADDING-BOTTOM: 1px; MARGIN: 20px 0px; TEXT-TRANSFORM: =
uppercase; WIDTH: 75%; LINE-HEIGHT: 15px; PADDING-TOP: 1px
}
#content .pagination {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; =
FLOAT: left; PADDING-BOTTOM: 1px; MARGIN: 20px 0px; TEXT-TRANSFORM: =
uppercase; WIDTH: 75%; LINE-HEIGHT: 15px; PADDING-TOP: 1px
}
.pagination A {
	BORDER-RIGHT: #d8d8d8 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#d8d8d8 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; MARGIN: 1px; =
BORDER-LEFT: #d8d8d8 1px solid; COLOR: #439213; PADDING-TOP: 0px; =
BORDER-BOTTOM: #d8d8d8 1px solid
}
.pagination A.next {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
.pagination A.previous {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
#wrapper {
	MARGIN: auto; WIDTH: 945px
}
#container {
	FLOAT: left; WIDTH: 945px
}
.print_container {
	MARGIN: 10px
}
.print_container .logo_header {
	PADDING-BOTTOM: 15px
}
.print_container #map {
	MARGIN-TOP: 15px
}
#admin_nav {
	MARGIN-TOP: 10px; FONT-SIZE: 11px; FLOAT: right
}
#admin_nav A {
	COLOR: #515151
}
#admin_nav A.signed_in {
	FONT-WEIGHT: bold; COLOR: #00446e
}
#admin_nav .feedback {
	FONT-WEIGHT: bold; COLOR: #ee7009
}
#logo {
	FLOAT: left; WIDTH: 190px; HEIGHT: 97px
}
#logo H1 A {
	DISPLAY: block; FONT-SIZE: 12px; BACKGROUND: url(../images/logo.gif) =
no-repeat; OVERFLOW: hidden; WIDTH: 189px; LINE-HEIGHT: 600px; HEIGHT: =
81px
}
#header #logo P {
	FONT-WEIGHT: bold; FONT-SIZE: 13px; MARGIN-BOTTOM: 5px; TEXT-TRANSFORM: =
uppercase; COLOR: #439213; LINE-HEIGHT: 0; TEXT-ALIGN: right
}
#header {
	FLOAT: left; MARGIN-BOTTOM: 10px; WIDTH: 945px; TEXT-ALIGN: left
}
#header H1 {
	FONT-SIZE: 12px; BACKGROUND: url(../images/tipped_logo_brighton.png) =
no-repeat; FLOAT: left; OVERFLOW: hidden; WIDTH: 193px; LINE-HEIGHT: =
600px; HEIGHT: 91px
}
#content H2.section_heading {
	FONT-SIZE: 11px; BACKGROUND: url(../images/heading_bg.gif) repeat-x 50% =
50%; MARGIN: 0px; TEXT-TRANSFORM: uppercase; COLOR: #5c441c; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; LETTER-SPACING: 1px; =
TEXT-ALIGN: center
}
#content H2.section_heading SPAN {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; =
PADDING-TOP: 4px; BACKGROUND-COLOR: #fff
}
#search {
	MARGIN-TOP: 10px; BACKGROUND: url(../images/search_bg.png) no-repeat; =
FLOAT: right; WIDTH: 705px; COLOR: #5d441c; HEIGHT: 72px
}
#search DT {
	FONT-SIZE: 12px; TEXT-TRANSFORM: uppercase; FONT-FAMILY: "Trebuchet =
MS", Helvetica, sans-serif
}
#search DT LABEL {
	FONT-WEIGHT: bold
}
#search INPUT {
	BORDER-RIGHT: #a4b97f 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#a4b97f 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: =
#a4b97f 1px solid; WIDTH: 250px; COLOR: #4a3717; PADDING-TOP: 2px; =
BORDER-BOTTOM: #a4b97f 1px solid; HEIGHT: 16px
}
#search_for {
	DISPLAY: inline; FLOAT: left; MARGIN: 10px 0px 0px 25px
}
#search_near {
	DISPLAY: inline; FLOAT: left; MARGIN: 10px 0px 0px 20px
}
#search_submit {
	DISPLAY: inline; FLOAT: left; MARGIN: 28px 0px 0px 20px
}
#search_submit INPUT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; WIDTH: =
auto; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: =
none; BORDER-LEFT-STYLE: none; HEIGHT: auto; BORDER-BOTTOM-STYLE: none
}
#search .search_desc {
	FONT-SIZE: 10px; TEXT-TRANSFORM: none; FONT-STYLE: italic
}
#search P.cities {
	CLEAR: both; FONT-SIZE: 11px; MARGIN: 3px 0px 0px 25px
}
#search P.cities A {
	COLOR: #5d441c
}
.search_hits {
	FONT-SIZE: 12px; COLOR: #636363
}
#sign_in_wrap {
	WIDTH: auto
}
#sign_up_wrap {
	WIDTH: auto
}
#sign_in {
	FLOAT: left; WIDTH: 385px
}
#sign_up {
	BORDER-RIGHT: #ccc 1px solid; FLOAT: left; WIDTH: 405px
}
#sign_in H2 {
	FLOAT: none; MARGIN-BOTTOM: 0px
}
#sign_up H2 {
	FLOAT: none; MARGIN-BOTTOM: 0px
}
#sign_in H2 SPAN {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BACKGROUND-COLOR: transparent
}
#sign_in .forgot {
	VERTICAL-ALIGN: middle
}
#sign_in .forgot {
	PADDING-LEFT: 20px; FONT-SIZE: 11px
}
#sign_up_wrap #sign_in H2 {
	COLOR: #666
}
#sign_up_wrap #sign_in H2 EM {
	COLOR: #439213; FONT-STYLE: normal
}
#content #sign_in FORM DT {
	WIDTH: 95px
}
#content #sign_up_wrap #sign_in FORM DT {
	WIDTH: 83px
}
#content #sign_up_wrap #sign_in FORM P.submit_line {
	MARGIN-LEFT: 93px
}
#content #sign_up FORM DT {
	WIDTH: 115px
}
#content #sign_in FORM DD {
	FLOAT: left; WIDTH: 270px
}
#content #sign_up FORM DD {
	FLOAT: left; WIDTH: 270px
}
#sign_in INPUT {
	WIDTH: 250px
}
#sign_up INPUT {
	WIDTH: 250px
}
#content #sign_in DD INPUT.box_button {
	WIDTH: auto
}
#content #sign_in P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 0px 105px; PADDING-TOP: 0px
}
#no_account {
	PADDING-LEFT: 25px; FLOAT: left; BORDER-LEFT: #d8d8d8 1px solid; WIDTH: =
310px
}
#no_account H2 {
	LINE-HEIGHT: 18px; HEIGHT: auto
}
#no_account H2 SPAN {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 2px; BACKGROUND-COLOR: transparent
}
#content {
	FONT-SIZE: 13px; MIN-HEIGHT: 350px; FLOAT: left; WIDTH: 630px; =
TEXT-ALIGN: left
}
* HTML #content {
	HEIGHT: 350px
}
.home #content {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.christmas #content {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
.maint #content {
	BORDER-TOP: #d8d8d8 1px solid; WIDTH: 945px
}
.maint #content .notice {
	FONT-SIZE: 14px
}
#content_ad {
	FLOAT: left; MARGIN: 10px 0px; WIDTH: 630px
}
#content H2 {
	FONT-SIZE: 18px; BACKGROUND: none transparent scroll repeat 0% 0%; =
MARGIN-BOTTOM: 3px; COLOR: #439213; LINE-HEIGHT: 18px; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif; TEXT-ALIGN: left
}
#content H2.pageheading {
	MARGIN: 1em 0px
}
H3 {
	FONT-SIZE: 18px; MARGIN-BOTTOM: 10px; COLOR: #439213; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif
}
H3.subhead {
	FONT-SIZE: 15px; MARGIN: 20px 0px; COLOR: #666
}
H4 {
	FONT-SIZE: 14px; MARGIN-BOTTOM: 0.5em; COLOR: #439213; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif
}
#content P {
	MARGIN-BOTTOM: 10px
}
#content FORM {
	MARGIN: 20px 0px
}
#content FORM DT {
	CLEAR: left; PADDING-RIGHT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 12px; =
FLOAT: left; WIDTH: 120px; COLOR: #439213; TEXT-ALIGN: right
}
#content FORM DT .desc {
	DISPLAY: block; FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN: 0px; =
COLOR: #333; FONT-STYLE: italic
}
#content FORM DD {
	DISPLAY: inline; FLOAT: left; PADDING-BOTTOM: 15px; MARGIN: 0px 10px =
0px 0px; WIDTH: 460px; COLOR: #333
}
#content FORM DD .desc {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN: 0px; COLOR: #333; =
FONT-STYLE: italic
}
#content FORM P .desc {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN: 0px; COLOR: #333; =
FONT-STYLE: italic
}
.textarea_caption {
	WIDTH: 416px
}
#content FORM SELECT {
	BORDER-RIGHT: #a4b97f 1px solid; BORDER-TOP: #a4b97f 1px solid; =
BORDER-LEFT: #a4b97f 1px solid; BORDER-BOTTOM: #a4b97f 1px solid
}
#content FORM SELECT OPTGROUP OPTION {
	PADDING-LEFT: 20px
}
INPUT {
	BORDER-RIGHT: #439213 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#439213 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: =
#439213 1px solid; WIDTH: 334px; PADDING-TOP: 2px; BORDER-BOTTOM: =
#439213 1px solid; HEIGHT: 16px
}
INPUT {
	BORDER-RIGHT: #439213 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#439213 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: =
#439213 1px solid; WIDTH: 334px; PADDING-TOP: 2px; BORDER-BOTTOM: =
#439213 1px solid; HEIGHT: 16px
}
#content FORM DD INPUT {
	BORDER-RIGHT: #a4b97f 1px solid; BORDER-TOP: #a4b97f 1px solid; =
BORDER-LEFT: #a4b97f 1px solid; BORDER-BOTTOM: #a4b97f 1px solid
}
#content FORM DD TEXTAREA {
	BORDER-RIGHT: #a4b97f 1px solid; BORDER-TOP: #a4b97f 1px solid; =
BORDER-LEFT: #a4b97f 1px solid; BORDER-BOTTOM: #a4b97f 1px solid
}
#content FORM UL INPUT {
	BORDER-RIGHT: #a4b97f 1px solid; BORDER-TOP: #a4b97f 1px solid; =
BORDER-LEFT: #a4b97f 1px solid; BORDER-BOTTOM: #a4b97f 1px solid
}
#content FORM UL TEXTAREA {
	BORDER-RIGHT: #a4b97f 1px solid; BORDER-TOP: #a4b97f 1px solid; =
BORDER-LEFT: #a4b97f 1px solid; BORDER-BOTTOM: #a4b97f 1px solid
}
.txt-std {
	BORDER-RIGHT: #a4b97f 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#a4b97f 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: =
#a4b97f 1px solid; WIDTH: 334px; PADDING-TOP: 2px; BORDER-BOTTOM: =
#a4b97f 1px solid
}
.wide.txt-std {
	WIDTH: 423px
}
.wider.txt-std {
	WIDTH: 735px
}
INPUT.txt-std {
	HEIGHT: 16px
}
TEXTAREA.txt-std {
	HEIGHT: 178px
}
TEXTAREA.tall {
	HEIGHT: 258px
}
TEXTAREA.short {
	HEIGHT: 100px
}
TEXTAREA.xshort {
	HEIGHT: 30px
}
TEXTAREA.photocomment {
	HEIGHT: 60px
}
#content FORM INPUT.search_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
WIDTH: 87px; PADDING-TOP: 0px; HEIGHT: 22px; BORDER-RIGHT-WIDTH: 0px
}
#wrapper #container #content INPUT.std_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: middle; WIDTH: 88px; PADDING-TOP: 0px; HEIGHT: 25px; =
BORDER-RIGHT-WIDTH: 0px
}
INPUT.std_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: middle; WIDTH: 88px; PADDING-TOP: 0px; HEIGHT: 25px; =
BORDER-RIGHT-WIDTH: 0px
}
#content FORM INPUT.std_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: middle; WIDTH: 88px; PADDING-TOP: 0px; HEIGHT: 25px; =
BORDER-RIGHT-WIDTH: 0px
}
#wrapper #container #content INPUT.sm_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: middle; WIDTH: 60px; PADDING-TOP: 0px; HEIGHT: 24px; =
BORDER-RIGHT-WIDTH: 0px
}
INPUT.sm_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: middle; WIDTH: 60px; PADDING-TOP: 0px; HEIGHT: 24px; =
BORDER-RIGHT-WIDTH: 0px
}
#content FORM INPUT.sm_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: middle; WIDTH: 60px; PADDING-TOP: 0px; HEIGHT: 24px; =
BORDER-RIGHT-WIDTH: 0px
}
#content FORM INPUT.mobile_send_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
WIDTH: 88px; PADDING-TOP: 0px; HEIGHT: 26px; BORDER-RIGHT-WIDTH: 0px
}
#content FORM INPUT.c_search_submit {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
WIDTH: 57px; PADDING-TOP: 0px; HEIGHT: 15px; BORDER-RIGHT-WIDTH: 0px
}
#content FORM INPUT.destroy_button {
	BORDER-RIGHT: #439213 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#439213 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; BORDER-LEFT: =
#439213 1px solid; WIDTH: 100px; PADDING-TOP: 3px; BORDER-BOTTOM: =
#439213 1px solid; HEIGHT: auto
}
#content FORM .submit_line {
	MARGIN: 0px 0px 0px 128px
}
#content FORM INPUT.form_checkbox {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; WIDTH: auto; HEIGHT: auto; BORDER-RIGHT-WIDTH: 0px
}
#content INPUT.form_checkbox {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; WIDTH: auto; HEIGHT: auto; BORDER-RIGHT-WIDTH: 0px
}
#content FORM INPUT.form_radio {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; WIDTH: auto; HEIGHT: auto; BORDER-RIGHT-WIDTH: 0px
}
#content FORM INPUT.box_button {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
#content FORM DD LABEL {
	MARGIN-RIGHT: 10px
}
#content FORM P {
	MARGIN: 0.5em 0px
}
#content FORM INPUT#logo_uploaded_data {
	BORDER-RIGHT: #439213 1px solid; BORDER-TOP: #439213 1px solid; =
BORDER-LEFT: #439213 1px solid; WIDTH: auto; BORDER-BOTTOM: #439213 1px =
solid; HEIGHT: auto
}
#content .feed {
	BORDER-RIGHT: #d8d8d8 1px solid; MARGIN-TOP: 20px
}
#content .feed A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 45px; BACKGROUND: =
url(../images/rss_icon.png) no-repeat; PADDING-BOTTOM: 5px; COLOR: #333; =
PADDING-TOP: 2px
}
#city_list {
	FLOAT: left; MARGIN: 10px 0px
}
#city_list LI {
	FLOAT: left; MARGIN: 2px 0px 0px 50px; WIDTH: 160px
}
#user_list {
	MARGIN: 15px 0px
}
.user {
	PADDING-LEFT: 10px; MARGIN-BOTTOM: 10px
}
#user_friend_list .user {
	MIN-HEIGHT: 90px; FLOAT: left; WIDTH: 200px
}
#top_tippers .user {
	MIN-HEIGHT: 90px; FLOAT: left; WIDTH: 200px
}
#member_search_results #user_friend_list .user {
	WIDTH: 630px
}
#member_search_results #user_friend_list .user_detail {
	WIDTH: 570px
}
.user .user_photo {
	DISPLAY: inline; FLOAT: left; WIDTH: 50px; MARGIN-RIGHT: 10px
}
.user .user_photo .user_image {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; =
BORDER-LEFT: #79c902 2px solid; BORDER-BOTTOM: #79c902 2px solid
}
.user .user_photo .remove_friend {
	FONT-SIZE: 10px; TEXT-ALIGN: center
}
.user .user_detail {
	FLOAT: left
}
#user_friend_list .user .user_detail {
	WIDTH: 140px
}
#content .user .user_detail P {
	MARGIN: 0px
}
#content .user .current_friend.user_detail H3 {
	COLOR: #2996c8
}
#content .user .current_friend.user_detail A {
	COLOR: #2996c8
}
.user IMG.a_friend {
	FLOAT: none; MARGIN: 0px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: =
none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
.user H3 {
	FONT-SIZE: 14px; MARGIN-BOTTOM: 3px
}
.user H3 A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
10px 0px 0px; PADDING-TOP: 0px
}
.user P {
	FONT-SIZE: 11px
}
#profile {
	FONT-SIZE: 11px; FLOAT: left
}
#profile H1 {
	DISPLAY: inline; FONT-SIZE: 32px; MARGIN-BOTTOM: 10px; COLOR: #439213; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif
}
#profile H1.friend {
	PADDING-RIGHT: 35px; BACKGROUND: url(../images/user_friends_icon.gif) =
no-repeat right 50%
}
#profile LI {
	MARGIN-BOTTOM: 10px
}
#profile IMG {
=09
}
#profile_meta {
	FLOAT: left; WIDTH: 154px; MARGIN-RIGHT: 20px
}
#profile_meta IMG {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; =
MARGIN-BOTTOM: 5px; BORDER-LEFT: #79c902 2px solid; BORDER-BOTTOM: =
#79c902 2px solid
}
#profile_meta UL {
	CLEAR: both; MARGIN-BOTTOM: 7px
}
#profile_meta LI {
	PADDING-LEFT: 24px; MARGIN-BOTTOM: 3px; LINE-HEIGHT: 18px
}
#profile_meta LI.is_friend {
	COLOR: #ee7009; FONT-STYLE: italic
}
#profile_meta LI A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 2px; COLOR: #439213; PADDING-TOP: 2px
}
#profile_meta LI.add_to_friends {
	BACKGROUND: url(../images/add_icon.gif) no-repeat 3px 1px
}
#profile_meta LI.remove_friend {
	BACKGROUND: url(../images/remove_icon.gif) no-repeat 3px 1px
}
#profile_meta LI.friends {
	BACKGROUND: url(../images/friends_icon_sm.gif) no-repeat 3px 0px
}
#profile_meta LI.reviews {
	BACKGROUND: url(../images/icon_tips_sm.gif) no-repeat
}
#profile_meta LI.send_message {
	BACKGROUND: url(../images/send_to_friends_icon.gif) no-repeat
}
#profile_meta LI.usefuls {
	FONT-WEIGHT: bold; COLOR: #439213
}
#profile_meta LI.firsts {
	FONT-WEIGHT: bold; COLOR: #439213
}
#profile_meta LI.image_uploads {
	FONT-WEIGHT: bold; COLOR: #439213
}
#profile_meta LI.featured {
	FONT-WEIGHT: bold; COLOR: #439213
}
#profile_meta LI.collections {
	FONT-WEIGHT: bold; COLOR: #439213
}
#profile_meta LI.usefuls {
	BACKGROUND: url(../images/usefull_icon_sm.gif) no-repeat 3px 0px
}
#profile_meta LI.firsts {
	BACKGROUND: url(../images/icon_first_sm.gif) no-repeat 3px 0px
}
#profile_meta LI.image_uploads {
	BACKGROUND: url(../images/icon_images_sm.gif) no-repeat 2px 0px
}
#profile_meta LI.featured {
	BACKGROUND: url(../images/icon_featured_sm.gif) no-repeat 2px 0px
}
#profile_meta LI.message {
	BACKGROUND: url(../images/send_to_friends_icon.gif) no-repeat 2px 0px
}
#profile_meta LI.collections {
	BACKGROUND: url(../images/collections_icon_sm.gif) no-repeat 2px 0px
}
#profile .is_friend {
	COLOR: #ee7009; FONT-STYLE: italic
}
#profile .profile_friend_list LI {
	MARGIN-BOTTOM: 0px
}
#profile UL.profile_friend_list {
	MARGIN-BOTTOM: 10px
}
#profile_info {
	FLOAT: left; MARGIN-LEFT: 0px; WIDTH: 450px
}
#profile_info LI {
	MARGIN-BOTTOM: 6px
}
#profile_form IMG.user_icon_small {
	MARGIN-TOP: -5px; FLOAT: none; PADDING-BOTTOM: 2px; VERTICAL-ALIGN: top
}
.edit_profile #content {
	WIDTH: 945px
}
.edit_profile #navigation {
	WIDTH: 945px
}
.edit_profile #profile_nav {
	WIDTH: 945px
}
.edit_profile #content #profile H2 {
	MARGIN-BOTTOM: 20px
}
#profile #community {
	FLOAT: left; WIDTH: 487px
}
#profile .profile_form#community DD {
	WIDTH: 303px
}
#profile .profile_form#community INPUT {
	WIDTH: 297px
}
#profile #account {
	PADDING-RIGHT: 0px; PADDING-LEFT: 35px; FLOAT: left; PADDING-BOTTOM: =
0px; BORDER-LEFT: #ccc 1px solid; WIDTH: 420px; PADDING-TOP: 0px
}
#profile #account #user_image {
	MARGIN-BOTTOM: 15px
}
#profile .profile_form#account INPUT {
	WIDTH: 230px
}
#profile .profile_form H3 {
	FONT-SIZE: 15px; COLOR: #666
}
.edit_profile #profile .profile_form DT {
	WIDTH: 140px
}
.edit_profile #profile .profile_form DD {
	WIDTH: 260px
}
.edit_profile #content FORM .submit_line {
	MARGIN-LEFT: 150px
}
#inbox {
	FONT-SIZE: 12px; FLOAT: left; WIDTH: 630px
}
.all_check {
	DISPLAY: inline; FLOAT: right; MARGIN: -25px 10px 0px 0px; COLOR: =
#7f7f7f; FONT-STYLE: italic
}
#inbox LI {
	FLOAT: left; PADDING-BOTTOM: 10px; WIDTH: 630px; BORDER-BOTTOM: #d8d8d8 =
1px solid
}
#inbox .subject_from {
	FLOAT: left; MARGIN: 10px 0px 10px 10px; WIDTH: 220px
}
#inbox .inbox_date {
	FLOAT: left; MARGIN: 10px 0px; WIDTH: 150px
}
#inbox .status {
	FLOAT: left; MARGIN: 10px 0px; WIDTH: 60px; TEXT-ALIGN: center
}
#inbox .check {
	FLOAT: left; MARGIN: 10px 0px 10px 50px; WIDTH: 10px
}
#inbox .read {
	COLOR: #7f7f7f; FONT-STYLE: italic
}
#inbox .delete {
	FLOAT: right; MARGIN: 5px 5px 0px 0px
}
#message {
	FLOAT: left; MARGIN-LEFT: 10px; WIDTH: 630px
}
#message UL {
	MARGIN-TOP: 20px; FONT-SIZE: 12px
}
#message LI {
	MARGIN: 5px 0px
}
#message P INPUT.reply {
	FLOAT: right; MARGIN: 5px 0px 0px 5px
}
#message P INPUT.delete {
	FLOAT: right; MARGIN: 5px 0px 0px 5px
}
#message P {
	BORDER-TOP: #d8d8d8 1px solid; MARGIN: 40px 0px 0px
}
#message IMG {
	BORDER-RIGHT: #8dcf02 2px solid; BORDER-TOP: #8dcf02 2px solid; FLOAT: =
right; MARGIN: 20px 10px 0px 0px; BORDER-LEFT: #8dcf02 2px solid; =
BORDER-BOTTOM: #8dcf02 2px solid
}
#message .message_body P {
	MARGIN-TOP: 20px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
#message A {
	COLOR: #439213
}
#content FORM#message_form DD {
	WIDTH: 498px; MARGIN-RIGHT: 0px
}
#message_nav {
	WIDTH: 630px; BORDER-BOTTOM: #d8d8d8 1px solid
}
#message_nav LI {
	DISPLAY: inline; FONT-SIZE: 12px; FLOAT: left; MARGIN-LEFT: 12px; =
TEXT-TRANSFORM: uppercase; FONT-FAMILY: "Trebuchet MS", Helvetica, =
sans-serif
}
#message_nav LI A {
	BORDER-RIGHT: #d8d8d8 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#d8d8d8 2px solid; DISPLAY: block; PADDING-LEFT: 10px; FONT-SIZE: 12px; =
FLOAT: left; PADDING-BOTTOM: 5px; BORDER-LEFT: #d8d8d8 1px solid; COLOR: =
#439213; PADDING-TOP: 5px
}
#message_nav_inbox A.on {
	MARGIN-BOTTOM: -1px; COLOR: #439213; BORDER-BOTTOM: #fff 1px solid
}
#message_nav_compose A.on {
	MARGIN-BOTTOM: -1px; COLOR: #439213; BORDER-BOTTOM: #fff 1px solid
}
.message_nav_item A.on {
	MARGIN-BOTTOM: -1px; COLOR: #439213; BORDER-BOTTOM: #fff 1px solid
}
#message_nav #message_nav_compose A {
	PADDING-RIGHT: 10px; PADDING-LEFT: 30px; BACKGROUND: =
url(../images/send_to_friends_icon.gif) no-repeat 10px 4px; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
#message_nav #message_nav_compose A.on {
	PADDING-RIGHT: 10px; PADDING-LEFT: 30px; BACKGROUND: =
url(../images/send_to_friends_icon.gif) no-repeat 10px 4px; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
#compose FORM {
	FONT-SIZE: 12px
}
#compose #send_to {
	BORDER-RIGHT: #439213 1px solid; BORDER-TOP: #439213 1px solid; =
BORDER-LEFT: #439213 1px solid; BORDER-BOTTOM: #439213 1px solid
}
#profile_nav {
	BACKGROUND: url(../images/category_nav_secondary_bg.png) repeat-x 50% =
bottom; MARGIN-BOTTOM: 15px; WIDTH: 630px
}
#profile_nav LI {
	DISPLAY: inline; FONT-WEIGHT: bold; FONT-SIZE: 10px; FLOAT: left; =
MARGIN-LEFT: 12px; TEXT-TRANSFORM: uppercase
}
#profile_nav LI A {
	PADDING-RIGHT: 10px; BORDER-TOP: #fff 2px solid; DISPLAY: block; =
PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; COLOR: #333; PADDING-TOP: 5px
}
#profile_nav_home A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#profile_nav_favorites A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#profile_nav_friends A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#profile_nav_tips A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#profile_nav_messages A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#profile_nav_collection A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
.sidebar_content_box {
	FONT-SIZE: 11px; BACKGROUND: url(../images/also_like_bg.png) #fdfdfd =
no-repeat; PADDING-BOTTOM: 15px; MARGIN: 10px 0px 20px; WIDTH: 300px; =
PADDING-TOP: 10px
}
#also_like {
	FONT-SIZE: 11px; BACKGROUND: url(../images/also_like_bg.png) #fdfdfd =
no-repeat; PADDING-BOTTOM: 15px; MARGIN: 10px 0px 20px; WIDTH: 300px; =
PADDING-TOP: 10px
}
.sidebar_content_box H2 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; BACKGROUND: =
url(../images/heading_bg.gif) repeat-x 50% 50%; MARGIN: 0px 4px 10px; =
TEXT-TRANSFORM: uppercase; COLOR: #5c441c; LINE-HEIGHT: 12px; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; LETTER-SPACING: 1px; =
HEIGHT: 12px; TEXT-ALIGN: center
}
#also_like H2 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; BACKGROUND: =
url(../images/heading_bg.gif) repeat-x 50% 50%; MARGIN: 0px 4px 10px; =
TEXT-TRANSFORM: uppercase; COLOR: #5c441c; LINE-HEIGHT: 12px; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; LETTER-SPACING: 1px; =
HEIGHT: 12px; TEXT-ALIGN: center
}
.sidebar_content_box H2 SPAN {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; =
PADDING-TOP: 2px; BACKGROUND-COLOR: #f1efec
}
#also_like H2 SPAN {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; =
PADDING-TOP: 2px; BACKGROUND-COLOR: #f1efec
}
.guidelines.sidebar_content_box {
	MARGIN-TOP: 0px
}
.guidelines.sidebar_content_box H3 {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 11px; =
PADDING-BOTTOM: 0px; MARGIN: 10px 0px 5px; COLOR: #439213; PADDING-TOP: =
0px
}
.guidelines.sidebar_content_box P {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 11px; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.newsletter.sidebar_content_box {
	MARGIN-TOP: 0px
}
DL.suggested_listing {
	FONT-SIZE: 11px
}
#map DL.suggested_listing IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
#also_like DL {
	MARGIN-LEFT: 10px
}
DL.suggested_listing {
	MARGIN-LEFT: 10px
}
.sidebar_content_box UL {
	MARGIN-LEFT: 10px
}
#also_like DL DT {
	MARGIN-TOP: 4px; FONT-WEIGHT: bold; LINE-HEIGHT: 1.4em
}
DL.suggested_listing DT {
	MARGIN-TOP: 4px; FONT-WEIGHT: bold; LINE-HEIGHT: 1.4em
}
#also_like DL DD {
	MARGIN-LEFT: 15px
}
DL.suggested_listing DD {
	MARGIN-LEFT: 15px
}
#also_like DL DD.rating {
	FONT-SIZE: 10px; COLOR: #333
}
DL.suggested_listing DD.rating {
	FONT-SIZE: 10px; COLOR: #333
}
#also_like DL DD.links {
	COLOR: #439213
}
DL.suggested_listing DD.links {
	COLOR: #439213
}
#also_like A {
	COLOR: #439213
}
DL.suggested_listing A {
	COLOR: #439213
}
.show_nearby_header {
	BACKGROUND: url(../images/heading_bg.gif) repeat-x 50% 50%; =
PADDING-BOTTOM: 5px; MARGIN: 0px 4px 10px; HEIGHT: 12px; TEXT-ALIGN: =
center
}
.show_nearby_header SPAN {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: normal; FONT-SIZE: =
11px; PADDING-BOTTOM: 2px; LINE-HEIGHT: 12px; PADDING-TOP: 2px; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; BACKGROUND-COLOR: =
#f1efec; TEXT-ALIGN: center
}
.show_nearby_header SPAN.headline {
	TEXT-TRANSFORM: uppercase; COLOR: #5c441c; LETTER-SPACING: 1px
}
SELECT.nearby_list {
	FONT-SIZE: 11px
}
#category_tips {
	FLOAT: left; WIDTH: 630px
}
#category_tips .tip {
	MARGIN-TOP: 20px; FLOAT: left; PADDING-BOTTOM: 20px; WIDTH: 425px; =
BORDER-BOTTOM: #d8d8d8 1px solid; POSITION: relative
}
#category_tips .tip IMG.tip_image {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; FLOAT: =
left; MARGIN: 0px 10px 6px 0px; BORDER-LEFT: #79c902 2px solid; =
BORDER-BOTTOM: #79c902 2px solid
}
#category_tips .tip H3 {
	COLOR: #439213; LINE-HEIGHT: 15px; MARGIN-RIGHT: 10px; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif
}
#category_tips .tip P {
	FONT-SIZE: 11px; MARGIN: 0px 0px 3px; WIDTH: 160px; LINE-HEIGHT: 1.3
}
#category_tips .tip P.tipped_by {
	DISPLAY: none; PADDING-TOP: 2px
}
#category_tips .tip P.tipped_by A {
	PADDING-RIGHT: 20px; DISPLAY: none; PADDING-LEFT: 0px; BACKGROUND: =
url(../images/user_friends_icon_sm.gif) no-repeat right 50%; =
PADDING-BOTTOM: 4px; PADDING-TOP: 1px
}
#category_tips .tip P.tip_review {
	MARGIN-LEFT: 65px; LINE-HEIGHT: 16px; HEIGHT: 16px
}
#category_tips .tip P.location {
	MARGIN-LEFT: 65px
}
#category_tips .tip P.type {
	MARGIN-LEFT: 65px
}
#category_tips .tip P.tags {
	MARGIN-LEFT: 65px
}
#category_tips .tip P.address {
	RIGHT: 0px; POSITION: absolute; TOP: 30px
}
#category_nav IMG {
	FLOAT: left
}
#category_nav_primary {
=09
}
#category_nav_primary {
	FONT-SIZE: 18px; FLOAT: left; MARGIN: 2px 0px 0px 5px; COLOR: #8dcf02; =
LINE-HEIGHT: 24px
}
#category_nav_primary A {
	COLOR: #439213
}
#category_nav_secondary {
	BACKGROUND: url(../images/category_nav_secondary_bg.png) repeat-x 50% =
bottom; FLOAT: left; WIDTH: 630px; PADDING-TOP: 5px
}
#category_nav_secondary LI {
	DISPLAY: inline; FONT-WEIGHT: bold; FONT-SIZE: 10px; FLOAT: left; =
MARGIN-LEFT: 12px; TEXT-TRANSFORM: uppercase
}
#category_nav_secondary LI A {
	PADDING-RIGHT: 10px; BORDER-TOP: #fff 2px solid; DISPLAY: block; =
PADDING-LEFT: 10px; PADDING-BOTTOM: 5px; COLOR: #333; PADDING-TOP: 5px
}
#category_nav_location SPAN A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#category_nav_neighborhood SPAN A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#category_nav_type SPAN A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#category_nav_tags SPAN A.on {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
.type #category_nav_type A {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
.tags #category_nav_tags A {
	BORDER-TOP: #439213 2px solid; COLOR: #439213; BACKGROUND-COLOR: #fff
}
#category_nav_tertiary {
	FONT-SIZE: 11px; FLOAT: left; MARGIN: 10px 0px; WIDTH: 630px
}
#category_nav_teritary P.no_options {
	MARGIN-LEFT: 10px; COLOR: #666
}
#category_nav_tertiary LI {
	PADDING-RIGHT: 2px; FLOAT: left; MARGIN-BOTTOM: 2px; COLOR: #439213; =
WHITE-SPACE: nowrap
}
#navigation {
	BORDER-TOP: #d8d8d8 1px solid; MARGIN: 2px 0px 14px; WIDTH: 630px; =
BORDER-BOTTOM: #d8d8d8 1px solid
}
#nav_int {
	WIDTH: 630px
}
#nav {
	FLOAT: left; WIDTH: 460px; HEIGHT: 32px
}
#nav LI {
	FONT-SIZE: 12px; FLOAT: left; MARGIN: 3px 5px 5px 0px; OVERFLOW: =
hidden; WIDTH: 87px; LINE-HEIGHT: 600px; HEIGHT: 25px
}
#nav LI A {
	DISPLAY: block
}
#nav LI#nav_home {
	BACKGROUND: url(../images/nav_home.png) no-repeat
}
.home #nav LI#nav_home {
	BACKGROUND: url(../images/nav_home_on.png) no-repeat
}
#nav LI#nav_my_profile {
	BACKGROUND: url(../images/nav_my_profile.png) no-repeat
}
.profile #nav LI#nav_my_profile {
	BACKGROUND: url(../images/nav_my_profile_on.png) no-repeat
}
#nav LI#nav_give_a_tip {
	BACKGROUND: url(../images/nav_give_a_tip.png) no-repeat
}
.give_a_tip #nav LI#nav_give_a_tip {
	BACKGROUND: url(../images/nav_give_a_tip_on.png) no-repeat
}
#nav LI#nav_get_tips {
	BACKGROUND: url(../images/nav_get_tips.png) no-repeat
}
.get_tips #nav LI#nav_get_tips {
	BACKGROUND: url(../images/nav_get_tips_on.png) no-repeat
}
#nav LI#nav_sign_in {
	BACKGROUND: url(../images/nav_sign_in.png) no-repeat
}
.sign_in #nav LI#nav_sign_in {
	BACKGROUND: url(../images/nav_sign_in_on.png) no-repeat
}
.sign_in #content {
	WIDTH: 945px
}
.sign_in #navigation {
	WIDTH: 945px
}
.sign_up #content {
	WIDTH: 945px
}
.sign_up #navigation {
	WIDTH: 945px
}
.photos #content {
	WIDTH: 945px
}
.photos #navigation {
	WIDTH: 945px
}
.feedback #content {
	WIDTH: 945px
}
.feedback #navigation {
	WIDTH: 945px
}
#nav LI#nav_friends {
	BACKGROUND: url(../images/nav_friends.png) no-repeat
}
.invite_friends #nav LI#nav_friends {
	BACKGROUND: url(../images/nav_friends_on.png) no-repeat
}
#nav LI#nav_friends_disabled {
	BACKGROUND: url(../images/nav_friends_disabled.png) no-repeat
}
.invite_friends #nav LI#nav_friends_disabled {
	BACKGROUND: url(../images/nav_friends_disabled_on.png) no-repeat
}
#nav LI#nav_collections {
	BACKGROUND: url(../images/nav_collections.png) no-repeat
}
.collections #nav LI#nav_collections {
	BACKGROUND: url(../images/nav_collections_on.png) no-repeat
}
#nav LI#nav_talk {
	BACKGROUND: url(../images/nav_talk.png) no-repeat
}
.talk #nav LI#nav_talk {
	BACKGROUND: url(../images/nav_talk_on.png) no-repeat
}
#stats {
	FLOAT: right; WIDTH: 150px
}
#stats LI {
	MARGIN-TOP: 2px; FONT-SIZE: 11px; FLOAT: right
}
#stats LI A {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 30px; PADDING-BOTTOM: =
8px; WIDTH: 20px; COLOR: #439213; PADDING-TOP: 8px
}
#stats #stat_groups A {
	BACKGROUND-IMAGE: url(../images/group_icon_pair.gif)
}
#stats #stat_messages A {
	BACKGROUND-IMAGE: url(../images/messages_icon_pair.gif)
}
#stats .unread#stat_messages A {
	BACKGROUND-IMAGE: url(../images/new_messages_icon_pair.gif)
}
#stats #stat_tips A {
	BACKGROUND-IMAGE: url(../images/tips_icon_pair.gif)
}
#stats LI.hover_pair A {
	BACKGROUND-POSITION: 0px 0px; BACKGROUND-REPEAT: no-repeat
}
#stats LI.hover_pair A:hover {
	BACKGROUND-POSITION: 0px -29px
}
#details {
	FLOAT: left; PADDING-BOTTOM: 15px; WIDTH: 630px; BORDER-BOTTOM: #d8d8d8 =
1px solid
}
#details H2 {
	FONT-SIZE: 18px; MARGIN: 0px 0px 10px; COLOR: #439213; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif
}
#detail_action {
	FONT-SIZE: 11px; FLOAT: left; WIDTH: 200px
}
#detail_action IMG {
	BORDER-RIGHT: #8dcf00 3px solid; BORDER-TOP: #8dcf00 3px solid; =
BORDER-LEFT: #8dcf00 3px solid; BORDER-BOTTOM: #8dcf00 3px solid
}
#detail_action UL {
	MARGIN-TOP: 7px
}
#detail_action LI {
	PADDING-LEFT: 24px; MARGIN-BOTTOM: 3px; LINE-HEIGHT: 18px
}
#detail_action LI A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 5px; COLOR: #439213; PADDING-TOP: 3px
}
#detail_action LI A:hover {
	COLOR: #f06d00; TEXT-DECORATION: none
}
#write_a_review {
	BACKGROUND: url(../images/review_icon.gif) no-repeat 4px 2px
}
#remove_favorite {
	BACKGROUND: url(../images/remove_icon.gif) no-repeat 3px 1px
}
#add_to_collection {
	BACKGROUND: url(../images/add_icon.gif) no-repeat 3px 1px
}
#send_to_friends {
	BACKGROUND: url(../images/send_to_friends_icon.gif) no-repeat
}
.send_to_friends {
	PADDING-RIGHT: 0px; PADDING-LEFT: 22px; FONT-SIZE: 10px; BACKGROUND: =
url(../images/send_to_friends_icon.gif) no-repeat 0px -3px; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
#send_to_mobile {
	BACKGROUND: url(../images/send_to_mobile_icon.gif) no-repeat
}
#upload_your_photos {
	BACKGROUND: url(../images/icon_images_sm.gif) no-repeat 2px 0px
}
#edit_listing_info {
	BACKGROUND: url(../images/write_icon.gif) no-repeat 2px 0px
}
#detail_info {
	FLOAT: left; WIDTH: 430px
}
#detail_description {
	PADDING-RIGHT: 15px; FONT-SIZE: 12px; FLOAT: left; WIDTH: 200px; =
LINE-HEIGHT: 16px
}
#detail_description P {
	MARGIN-BOTTOM: 10px
}
#detail_description A {
	COLOR: #439213
}
#detail_meta {
	FONT-SIZE: 11px; FLOAT: left; WIDTH: 215px
}
#detail_meta LI {
	MARGIN-BOTTOM: 10px
}
#detail_meta .hours {
	DISPLAY: block; TEXT-INDENT: 40px
}
#detail_meta .price {
	COLOR: #ee7009
}
#detail_meta A {
	COLOR: #439213
}
#rating {
	MARGIN-BOTTOM: 10px
}
#rating .based {
	FONT-STYLE: italic
}
#detail_meta .rating_box {
	BACKGROUND: url(../images/rating_box_background.gif) no-repeat; MARGIN: =
0px auto; WIDTH: 175px; HEIGHT: 36px; TEXT-ALIGN: center
}
#detail_meta .rating_box IMG {
	PADDING-TOP: 5px
}
#detail_meta .rating_sub {
	FONT-STYLE: italic; TEXT-ALIGN: center
}
#profile #rating {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: =
0px; MARGIN: 10px 0px 0px; WIDTH: 120px; PADDING-TOP: 0px; TEXT-ALIGN: =
left
}
#profile #rating IMG {
	DISPLAY: block; FLOAT: left; MARGIN: 0px auto
}
#profile #rating P {
	FLOAT: left; MARGIN: 3px auto; TEXT-ALIGN: center
}
.tippster_badge {
	PADDING-LEFT: 3px
}
#profile_favorites {
	BACKGROUND: url(../images/profile_favorites_bg.png) no-repeat; =
MARGIN-BOTTOM: 20px; WIDTH: 300px
}
#profile_favorites H2 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; BACKGROUND: =
url(../images/sidebar_heading_bg.gif) repeat-x 3px 6px; MARGIN: 0px 5px =
10px; TEXT-TRANSFORM: uppercase; WIDTH: 290px; COLOR: #5c441c; =
PADDING-TOP: 4px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; =
LETTER-SPACING: 1px; TEXT-ALIGN: center
}
#profile_favorites .favorite {
	CLEAR: both; FONT-SIZE: 11px; MARGIN: 0px 0px 10px 10px; WIDTH: 280px
}
.sidebar_content_box .favorite {
	CLEAR: both; FONT-SIZE: 11px; MARGIN: 0px 0px 10px 10px; WIDTH: 280px
}
#profile_favorites .favorite H3 {
	FONT-SIZE: 11px; MARGIN-BOTTOM: 0px; WIDTH: 210px; COLOR: #439213; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif
}
.sidebar_content_box .favorite H3 {
	FONT-SIZE: 11px; MARGIN-BOTTOM: 0px; WIDTH: 210px; COLOR: #439213; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif
}
#profile_favorites H3 IMG.cat_icon {
	MARGIN: 0px 3px 0px 0px; VERTICAL-ALIGN: middle; BORDER-TOP-STYLE: =
none; PADDING-TOP: 2px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
#profile_favorites .favorite IMG.favorite_photo {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; =
DISPLAY: inline; FLOAT: left; MARGIN: 0px 10px 0px 0px; BORDER-LEFT: =
#79c902 2px solid; WIDTH: 52px; BORDER-BOTTOM: #79c902 2px solid
}
.sidebar_content_box .favorite IMG.favorite_photo {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; =
DISPLAY: inline; FLOAT: left; MARGIN: 0px 10px 0px 0px; BORDER-LEFT: =
#79c902 2px solid; WIDTH: 52px; BORDER-BOTTOM: #79c902 2px solid
}
#profile_favorites .all_favorites A {
	CLEAR: both; DISPLAY: inline; FONT-WEIGHT: bold; FONT-SIZE: 11px; =
FLOAT: left; MARGIN: 0px 0px 0px 10px; TEXT-TRANSFORM: uppercase; COLOR: =
#439213
}
#profile_favorites P.no_favorites {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 11px; =
PADDING-BOTTOM: 10px; PADDING-TOP: 0px
}
.favorite .favorite_desc {
	FLOAT: left; WIDTH: 214px
}
.favorite_desc .rating {
	FONT-SIZE: 10px; COLOR: #333
}
.favorite_desc .rating IMG {
	VERTICAL-ALIGN: middle
}
#profile_favorites .favorite .collection_desc H3 {
	WIDTH: auto
}
#profile_favorites .favorite .collection_desc =
H3.collection_sidebar_title {
	FLOAT: left; WIDTH: 160px
}
.love_leave_create {
	FONT-SIZE: 10px; FLOAT: right; COLOR: #333
}
.on_collection.love_leave_create {
	WIDTH: 120px
}
.collection_desc H3 SPAN {
	DISPLAY: inline; FONT-WEIGHT: normal; FONT-SIZE: 10px; FLOAT: right; =
MARGIN-LEFT: 7px; COLOR: #333; FONT-FAMILY: Arial, Helvetica, sans-serif
}
#pending_friends {
	FONT-SIZE: 11px; BACKGROUND: url(../images/profile_friends_bg.png) =
no-repeat; MARGIN: 0px 0px 20px; WIDTH: 300px
}
#pending_friends H2 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; BACKGROUND: =
url(../images/sidebar_heading_bg.gif) repeat-x 3px 6px; MARGIN: 0px 5px =
10px; TEXT-TRANSFORM: uppercase; WIDTH: 290px; COLOR: #5c441c; =
PADDING-TOP: 4px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; =
LETTER-SPACING: 1px; TEXT-ALIGN: center
}
#pending_friends H4 {
	PADDING-LEFT: 10px
}
#pending_friends .friend {
	DISPLAY: inline; FLOAT: left; MARGIN: 0px 2px 10px 10px; WIDTH: 62px
}
#pending_friends .friend IMG {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; =
BORDER-LEFT: #79c902 2px solid; BORDER-BOTTOM: #79c902 2px solid
}
#pending_friends .friend A {
	COLOR: #2996c8
}
#pending_friends P.all_friends A {
	CLEAR: both; FONT-WEIGHT: bold; FLOAT: left; MARGIN: 10px 0px 0px 17px; =
TEXT-TRANSFORM: uppercase; COLOR: #439213; BORDER-BOTTOM: #5c441c 1px =
solid
}
#pending_friends .friend .friend_rank IMG {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
#pending_friends P.no_friends {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 0px
}
#profile_friends {
	FONT-SIZE: 11px; BACKGROUND: url(../images/profile_friends_bg.png) =
no-repeat; MARGIN-BOTTOM: 20px; WIDTH: 300px
}
.sidebar_heading {
	BORDER-RIGHT: #efede8 2px solid; BORDER-TOP: #efede8 2px solid; =
BACKGROUND: #efede8; BORDER-LEFT: #efede8 2px solid; BORDER-BOTTOM: =
#efede8 2px solid
}
#profile_friends H2 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; BACKGROUND: =
url(../images/sidebar_heading_bg.gif) repeat-x 3px 6px; MARGIN: 0px 5px =
10px; TEXT-TRANSFORM: uppercase; WIDTH: 290px; COLOR: #5c441c; =
PADDING-TOP: 4px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; =
LETTER-SPACING: 1px; TEXT-ALIGN: center
}
#profile_friends P {
	CLEAR: both
}
#profile_friends .friend {
	DISPLAY: inline; FLOAT: left; MARGIN: 0px 2px 15px 10px; WIDTH: 62px
}
#profile_friends .friend IMG {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; =
BORDER-LEFT: #79c902 2px solid; BORDER-BOTTOM: #79c902 2px solid
}
#profile_friends .friend A {
	COLOR: #2996c8
}
#profile_friends P.all_friends A {
	CLEAR: both; FONT-WEIGHT: bold; FLOAT: left; MARGIN: 10px 0px 0px 17px; =
TEXT-TRANSFORM: uppercase; COLOR: #439213
}
#profile_friends .friend .friend_rank IMG {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
#profile_friends P.no_friends {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 0px
}
#faq {
	PADDING-RIGHT: 10px; MARGIN-TOP: 10px; PADDING-LEFT: 10px; FONT-SIZE: =
11px; BACKGROUND: url(../images/faq_bg.png) #fdfdfd no-repeat; =
PADDING-BOTTOM: 10px; PADDING-TOP: 10px
}
#faq H2 {
	FONT-SIZE: 12px; BACKGROUND: url(../images/faq.gif) no-repeat; FLOAT: =
left; MARGIN-BOTTOM: 10px; OVERFLOW: hidden; WIDTH: 282px; LINE-HEIGHT: =
600px; HEIGHT: 10px
}
#faq H3 {
	FONT-SIZE: 11px; MARGIN: 10px 0px 5px; COLOR: #439213
}
#sidebar {
	FLOAT: right; WIDTH: 300px; PADDING-TOP: 2px; TEXT-ALIGN: left
}
#map IMG {
	BORDER-RIGHT: #addb00 2px solid; BORDER-TOP: #addb00 2px solid; =
BORDER-LEFT: #addb00 2px solid; BORDER-BOTTOM: #addb00 2px solid
}
#map H4 {
	FONT-SIZE: 14px; MARGIN-BOTTOM: 5px
}
#map H5 {
	FONT-SIZE: 12px
}
.map_wrapper {
	BORDER-RIGHT: #addb00 2px solid; BORDER-TOP: #addb00 2px solid; =
BORDER-LEFT: #addb00 2px solid; BORDER-BOTTOM: #addb00 2px solid
}
#tipped_mobile {
	BORDER-RIGHT: #8dcf02 3px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#8dcf02 3px solid; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/mobile_bg.png) #439213 no-repeat 220px 5px; =
PADDING-BOTTOM: 10px; BORDER-LEFT: #8dcf02 3px solid; COLOR: #fff; =
PADDING-TOP: 10px; BORDER-BOTTOM: #8dcf02 3px solid
}
#tipped_mobile FORM {
	MARGIN: 0px
}
#tipped_mobile H2 {
	FONT-SIZE: 12px; BACKGROUND: url(../images/tipped_for_mobile.gif) =
no-repeat; WIDTH: 166px; TEXT-INDENT: -6000px; HEIGHT: 21px
}
#content #tipped_mobile P {
	FONT-SIZE: 12px; MARGIN-BOTTOM: 0px; WIDTH: 200px
}
#tipped_mobile INPUT {
	MARGIN-TOP: 5px
}
#tipped_mobile #to {
	WIDTH: 180px; COLOR: #999
}
#tipped_mobile INPUT.mobile_send_button {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
WIDTH: auto; PADDING-TOP: 0px; HEIGHT: auto; BORDER-RIGHT-WIDTH: 0px
}
#mobile_popup {
	POSITION: relative
}
.add_to_friends_popup {
	POSITION: relative
}
#content .popup_window {
	BORDER-RIGHT: #8dcf02 3px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#8dcf02 3px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 6px; BORDER-LEFT: =
#8dcf02 3px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #8dcf02 3px solid; =
BACKGROUND-COLOR: #fff
}
#tipped_mobile_popup {
	BACKGROUND: url(../images/mobile_icon_bb.gif) #fff no-repeat 214px 12px
}
#content .popup_window FORM {
	MARGIN: 10px 0px 0px
}
#content .popup_window H2 {
	MARGIN-BOTTOM: 0.5em
}
#content .popup_window FORM P {
	MARGIN: 0px 0px 3px
}
#tipped_mobile_popup FORM INPUT.mb_text {
	WIDTH: 180px; COLOR: #999
}
#tipped_mobile_popup FORM INPUT.blk.mb_text {
	COLOR: #000
}
#tipped_mobile_popup FORM INPUT.chk {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; WIDTH: auto; HEIGHT: auto; BORDER-RIGHT-WIDTH: 0px
}
#content .popup_window FORM INPUT.submit {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; WIDTH: auto; HEIGHT: auto; BORDER-RIGHT-WIDTH: 0px
}
#content .popup_window FORM .submit_line {
	MARGIN-LEFT: 0px
}
#content .popup_window .submit_line INPUT {
	VERTICAL-ALIGN: middle
}
#content .popup_window .submit_line A {
	VERTICAL-ALIGN: middle
}
#content FORM .cancel_link {
	FONT-WEIGHT: normal; FONT-SIZE: 12px; TEXT-TRANSFORM: uppercase
}
#content .popup_window .submit_line A {
	FONT-WEIGHT: normal; FONT-SIZE: 12px; TEXT-TRANSFORM: uppercase
}
#content FORM .cancel_link {
	PADDING-LEFT: 15px
}
#content FORM .cancel_link:hover {
	COLOR: #5d441c; TEXT-DECORATION: none
}
#mobile_listing_popup {
	PADDING-RIGHT: 0px; DISPLAY: inline-block; PADDING-LEFT: 0px; LEFT: =
260px; PADDING-BOTTOM: 0px; WIDTH: 280px; PADDING-TOP: 0px; POSITION: =
absolute; TOP: -72px; TEXT-ALIGN: left
}
#friend_popup {
	PADDING-RIGHT: 0px; DISPLAY: inline-block; PADDING-LEFT: 0px; LEFT: =
260px; PADDING-BOTTOM: 0px; WIDTH: 280px; PADDING-TOP: 0px; POSITION: =
absolute; TEXT-ALIGN: left
}
#user_friend_list {
	LEFT: 120px; TOP: -40px
}
#top_tippers .info_list LI {
	FONT-SIZE: 11px
}
#map {
	MARGIN: 0px 0px 15px
}
#ad {
	MARGIN: 0px 0px 10px
}
#filter P {
	FONT-SIZE: 11px; FLOAT: right; PADDING-BOTTOM: 7px
}
#filter SELECT {
	FONT-SIZE: 11px
}
#reviews {
	FLOAT: left; WIDTH: 630px; TEXT-ALIGN: left
}
#recent_reviews {
	FLOAT: left; WIDTH: 630px; TEXT-ALIGN: left
}
#user_reviews {
	FLOAT: left; WIDTH: 630px; TEXT-ALIGN: left
}
.heading {
	BORDER-RIGHT: #fff 2px solid; BORDER-TOP: #fff 2px solid; BACKGROUND: =
#fff; BORDER-LEFT: #fff 2px solid; BORDER-BOTTOM: #fff 2px solid
}
#reviews H1 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; BACKGROUND: =
url(../images/heading_bg.gif) repeat-x 3px 6px; MARGIN-BOTTOM: 10px; =
TEXT-TRANSFORM: uppercase; WIDTH: 630px; COLOR: #5c441c; PADDING-TOP: =
2px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; LETTER-SPACING: =
1px; TEXT-ALIGN: center
}
#recent_reviews H1 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; BACKGROUND: =
url(../images/heading_bg.gif) repeat-x 3px 6px; MARGIN-BOTTOM: 10px; =
TEXT-TRANSFORM: uppercase; WIDTH: 630px; COLOR: #5c441c; PADDING-TOP: =
2px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; LETTER-SPACING: =
1px; TEXT-ALIGN: center
}
#user_reviews H1 {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; BACKGROUND: =
url(../images/heading_bg.gif) repeat-x 3px 6px; MARGIN-BOTTOM: 10px; =
TEXT-TRANSFORM: uppercase; WIDTH: 630px; COLOR: #5c441c; PADDING-TOP: =
2px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; LETTER-SPACING: =
1px; TEXT-ALIGN: center
}
#featured_archive .reviewer P {
	MARGIN: 0px
}
.review {
	MARGIN-TOP: 15px; FLOAT: left; PADDING-BOTTOM: 10px; WIDTH: 630px; =
BORDER-BOTTOM: #d8d8d8 1px solid
}
BODY.profile .review {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 8px
}
#recent_reviews .review {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 8px
}
#user_reviews .review {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 8px
}
#featured_archive .review {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 8px
}
#recent_tips .review {
	MARGIN-TOP: 0px; MARGIN-BOTTOM: 8px
}
#recent_tips .compact_review {
	MARGIN-BOTTOM: 13px
}
#recent_tips .review_info H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #5d441c; LINE-HEIGHT: 1.2em; =
PADDING-TOP: 0px
}
#recent_tips .review_info H2 SPAN {
	FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000; FONT-STYLE: italic
}
#recent_tips .review_info H3 {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; =
FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #439213; =
LINE-HEIGHT: 1.2em; PADDING-TOP: 0px
}
#recent_tips .review_info H3 SPAN {
	FONT-WEIGHT: normal; FONT-SIZE: 12px
}
#recent_tips .review_info P {
	MARGIN: 0px; LINE-HEIGHT: 1.2em
}
#content #recent_tips .reviewer P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#content FORM INPUT.rating_radio {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; WIDTH: auto; HEIGHT: auto; BORDER-RIGHT-WIDTH: 0px
}
.review_photo {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; FLOAT: =
left; BORDER-LEFT: #79c902 2px solid; MARGIN-RIGHT: 15px; BORDER-BOTTOM: =
#79c902 2px solid
}
IMG.review_stars {
	FLOAT: right; MARGIN: 5px 5px 0px 0px
}
IMG.main_review_stars {
	DISPLAY: block
}
.reviewer {
	FONT-SIZE: 11px; FLOAT: left; WIDTH: 65px; MARGIN-RIGHT: 5px
}
.commenter {
	FONT-SIZE: 11px; FLOAT: left; WIDTH: 65px; MARGIN-RIGHT: 5px
}
.reviewer_photo {
	BORDER-RIGHT: #addb00 2px solid; BORDER-TOP: #addb00 2px solid; =
MARGIN-BOTTOM: 5px; BORDER-LEFT: #addb00 2px solid; BORDER-BOTTOM: =
#addb00 2px solid
}
.reviewer_rank {
	MARGIN: 5px 0px
}
.reviewer A {
	COLOR: #2996c8
}
.commenter A {
	COLOR: #2996c8
}
.reviewer P.badge {
	MARGIN: 3px 0px
}
.commenter P.badge {
	MARGIN: 3px 0px
}
.review_info {
	DISPLAY: inline; FONT-SIZE: 11px; FLOAT: left; MARGIN-LEFT: 5px; WIDTH: =
535px; POSITION: relative
}
.home .review_info {
	WIDTH: 385px
}
.review_full.review_info {
	MARGIN-LEFT: 0px; WIDTH: 630px
}
.review_full.review_info .review_headline .review_stars {
	PADDING-RIGHT: 50px; FLOAT: right
}
.review_headline .featured_icon {
	POSITION: relative; TOP: 2px
}
.review_info .listing_info {
	MARGIN-BOTTOM: 10px
}
.review_info H2 {
	DISPLAY: inline; FONT-SIZE: 18px; MARGIN-BOTTOM: 10px; COLOR: #439213; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif
}
.review_info .review_listing_meta {
	DISPLAY: inline; PADDING-LEFT: 5px; FONT-SIZE: 11px
}
#reviews .review_info P.review_listing_meta {
	FONT-SIZE: 11px
}
.review_info H3 {
	FLOAT: left; MARGIN: 0px; COLOR: #5d441c
}
.review_info IMG.cat_icon {
	BORDER-TOP-STYLE: none; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: =
none
}
.review_info P {
	FONT-SIZE: 11px; MARGIN-BOTTOM: 5px
}
#content .review_info P {
	FONT-SIZE: 11px; MARGIN-BOTTOM: 5px
}
.review_info A {
	COLOR: #439213
}
.date {
	FONT-SIZE: 11px; FONT-STYLE: italic
}
.review_info P.date {
	FONT-SIZE: 11px; FONT-STYLE: italic
}
#content .review_info P.date {
	FONT-SIZE: 11px; FONT-STYLE: italic
}
.useful_wrap {
	FONT-SIZE: 10px; COLOR: #f06d00
}
.useful_wrap .edit_review {
	PADDING-LEFT: 4px
}
.useful_wrap .edit_review A IMG {
	VERTICAL-ALIGN: middle
}
A.agree {
	PADDING-RIGHT: 0px; PADDING-LEFT: 18px; FONT-SIZE: 10px; BACKGROUND: =
url(../images/agree_icon.gif) no-repeat; PADDING-BOTTOM: 1px; COLOR: =
#f06d00; PADDING-TOP: 0px
}
SPAN.agree {
	PADDING-RIGHT: 0px; PADDING-LEFT: 18px; FONT-SIZE: 10px; BACKGROUND: =
url(../images/agree_icon.gif) no-repeat; PADDING-BOTTOM: 1px; COLOR: =
#f06d00; PADDING-TOP: 0px
}
SPAN.label A:hover {
	TEXT-DECORATION: underline
}
SPAN.label {
	COLOR: #439213; TEXT-DECORATION: underline
}
A.disagree {
	PADDING-RIGHT: 0px; PADDING-LEFT: 18px; FONT-SIZE: 10px; BACKGROUND: =
url(../images/disagree_icon.gif) no-repeat; PADDING-BOTTOM: 1px; COLOR: =
#f06d00; PADDING-TOP: 0px
}
SPAN.disagree {
	PADDING-RIGHT: 0px; PADDING-LEFT: 18px; FONT-SIZE: 10px; BACKGROUND: =
url(../images/disagree_icon.gif) no-repeat; PADDING-BOTTOM: 1px; COLOR: =
#f06d00; PADDING-TOP: 0px
}
.thanks {
	COLOR: #333
}
.flag_inapropriate {
	PADDING-RIGHT: 2px; PADDING-LEFT: 18px; FONT-SIZE: 10px; BACKGROUND: =
url(../images/offensive_icon.gif) no-repeat; PADDING-BOTTOM: 0px; =
PADDING-TOP: 2px
}
.flag_inap_wrap {
	FONT-SIZE: 10px; RIGHT: 0px; BOTTOM: 0px; POSITION: absolute
}
#images_wrapper #flag_inappropriate {
	TEXT-ALIGN: right
}
#footer {
	BORDER-TOP: #d8d8d8 1px solid; FONT-SIZE: 11px; FLOAT: left; MARGIN: =
15px 0px; WIDTH: 945px; COLOR: #363636; PADDING-TOP: 18px; TEXT-ALIGN: =
left
}
#footer A {
	COLOR: #363636
}
#footer P {
	LINE-HEIGHT: 16px
}
#footer .feed {
	BORDER-RIGHT: #d8d8d8 1px solid; PADDING-RIGHT: 20px; FLOAT: left; =
MARGIN-RIGHT: 20px; HEIGHT: 40px
}
#footer .feed A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 45px; BACKGROUND: =
url(../images/rss_icon.png) no-repeat; PADDING-BOTTOM: 5px; PADDING-TOP: =
2px
}
#also_like A:hover {
	COLOR: #5d441c; TEXT-DECORATION: none
}
.reviewer A:hover {
	TEXT-DECORATION: underline
}
.pagination A:hover {
	COLOR: #fff; BACKGROUND-COLOR: #439213; TEXT-DECORATION: none
}
#add_search_for DL {
	WIDTH: 630px
}
#add_search_form #add_search_for DT {
	CLEAR: none; FONT-SIZE: 12px; WIDTH: auto; LINE-HEIGHT: 22px; =
MARGIN-RIGHT: 7px
}
#add_search_form #add_search_for DD {
	WIDTH: 176px; MARGIN-RIGHT: 20px
}
#add_search_form .search_desc {
	FONT-SIZE: 10px; FONT-STYLE: italic
}
DT .search_desc {
	FONT-WEIGHT: normal; COLOR: #636363; FONT-STYLE: italic
}
DD .desc {
	FONT-WEIGHT: normal; COLOR: #636363; FONT-STYLE: italic
}
#add_search_for INPUT {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; WIDTH: =
170px; PADDING-TOP: 2px; HEIGHT: 16px
}
FORM DT {
	LINE-HEIGHT: 18px
}
FORM DD {
	LINE-HEIGHT: 18px
}
TEXTAREA#user_bio_i_love {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
TEXTAREA#user_bio_from {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
TEXTAREA#user_bio_live {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
TEXTAREA#user_bio_music {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
TEXTAREA#user_bio_films {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
TEXTAREA#user_bio_friends {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
TEXTAREA#user_bio_not_tipping {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
TEXTAREA#user_bio_holiday {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
TEXTAREA#user_bio_other {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-SIZE: 12px; PADDING-BOTTOM: =
4px; PADDING-TOP: 4px; FONT-FAMILY: arial, sans-serif; HEIGHT: 28px
}
#content FORM SELECT#user_birthday_3i {
	WIDTH: 50px
}
#content FORM SELECT#user_birthday_1i {
	WIDTH: 70px
}
.compact_tip {
	FONT-SIZE: 11px; PADDING-BOTTOM: 15px; WIDTH: 630px
}
#recently_tipped .compact_tip {
	FLOAT: left; WIDTH: 277px
}
#top_tips .compact_tip {
	WIDTH: 460px
}
#recently_tipped .even.compact_tip {
	PADDING-RIGHT: 60px
}
#category_tips .compact_tip {
	MARGIN-BOTTOM: 15px; BORDER-BOTTOM: #d8d8d8 1px solid
}
#collection .compact_tip {
	MARGIN-BOTTOM: 15px; BORDER-BOTTOM: #d8d8d8 1px solid
}
#content .compact_tip {
	MARGIN-BOTTOM: 15px; BORDER-BOTTOM: #d8d8d8 1px solid
}
.compact_tip IMG.listing_image {
	BORDER-RIGHT: #8dcf02 2px solid; BORDER-TOP: #8dcf02 2px solid; FLOAT: =
left; BORDER-LEFT: #8dcf02 2px solid; WIDTH: 68px; MARGIN-RIGHT: 5px; =
BORDER-BOTTOM: #8dcf02 2px solid; HEIGHT: 51px
}
.review IMG.listing_image {
	BORDER-RIGHT: #8dcf02 2px solid; BORDER-TOP: #8dcf02 2px solid; FLOAT: =
left; BORDER-LEFT: #8dcf02 2px solid; WIDTH: 68px; MARGIN-RIGHT: 5px; =
BORDER-BOTTOM: #8dcf02 2px solid; HEIGHT: 51px
}
.listing_image {
	BORDER-RIGHT: #8dcf02 2px solid; BORDER-TOP: #8dcf02 2px solid; =
BORDER-LEFT: #8dcf02 2px solid; BORDER-BOTTOM: #8dcf02 2px solid
}
.tiny_inline_listing A {
	VERTICAL-ALIGN: middle
}
.tiny_inline_listing A IMG {
	VERTICAL-ALIGN: middle
}
.compact_tip .add_action_column {
	FLOAT: left; WIDTH: 18px
}
.compact_tip .tip_desc {
	FLOAT: left; WIDTH: 332px
}
#top_tips .tip_desc {
	WIDTH: 200px
}
#recently_tipped .tip_desc {
	WIDTH: 200px
}
.featured_tip_listing.compact_tip .tip_desc {
	MARGIN-LEFT: 75px
}
.compact_tip .tip_desc H3 {
	FONT-SIZE: 14px; MARGIN-BOTTOM: 3px; LINE-HEIGHT: 1em; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif
}
.compact_tip .tip_desc H3 IMG {
	VERTICAL-ALIGN: middle; LINE-HEIGHT: 1em; MARGIN-RIGHT: 3px
}
.compact_tip .tip_desc H3 A {
	VERTICAL-ALIGN: middle; COLOR: #439213; LINE-HEIGHT: 1em; HEIGHT: 14px
}
#content .compact_tip .tip_desc P {
	MARGIN: 0px
}
#category_tips .compact_tip .tip_desc P STRONG {
	COLOR: #439213
}
.compact_tip .tip_detail {
	FLOAT: right; WIDTH: 130px
}
.compact_tip .tip_detail .tip_rating IMG {
	VERTICAL-ALIGN: middle
}
.compact_tip .tip_detail .tip_rating SPAN {
	FONT-SIZE: 9px; MARGIN-LEFT: 3px; VERTICAL-ALIGN: middle; LINE-HEIGHT: =
9px
}
.compact_tip .tip_friends {
	PADDING-RIGHT: 10px; FLOAT: right; WIDTH: 58px
}
.tip_friends .friend_reviews {
	PADDING-RIGHT: 10px; FLOAT: left; WIDTH: 19px; COLOR: #8ccd00; =
TEXT-ALIGN: center
}
.tip_friends .friend_of_reviews {
	FLOAT: left; WIDTH: 29px; COLOR: #539b27; TEXT-ALIGN: center
}
.tip_us_off {
	BORDER-RIGHT: #439113 2px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#439113 2px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 4px; BORDER-LEFT: =
#439113 2px solid; PADDING-TOP: 6px; BORDER-BOTTOM: #439113 2px solid; =
BACKGROUND-COLOR: #8dcf00
}
.tip_us_off H3.dont_see {
	FONT-SIZE: 17px; BACKGROUND: url(../images/dont_see.gif) no-repeat; =
MARGIN-BOTTOM: 4px; OVERFLOW: hidden; WIDTH: 250px; LINE-HEIGHT: 600px; =
HEIGHT: 17px
}
.tip_us_off P {
	MARGIN: 0px
}
.submit_ad H3 {
	FONT-WEIGHT: bold; MARGIN-BOTTOM: 4px; COLOR: #ee7009
}
.google_map_popup {
	WIDTH: 200px
}
.google_map_window {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 5px; BORDER-LEFT-WIDTH: 0px; =
FONT-SIZE: 11px; FLOAT: left; BORDER-BOTTOM-WIDTH: 0px; LINE-HEIGHT: =
13px; BORDER-RIGHT-WIDTH: 0px
}
#map IMG.no_border {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
#content H2.photos_header {
	MARGIN-BOTTOM: 0.8em; COLOR: #666
}
H2.photos_header A {
	COLOR: #439213
}
#current_image {
	FLOAT: left; WIDTH: 600px
}
#detail_action #current_image {
	WIDTH: 200px
}
#photo_thumbs_and_upload {
	FLOAT: right; WIDTH: 325px
}
#all_images LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
0px; WIDTH: 80px; PADDING-TOP: 0px
}
#all_images LI P {
	MARGIN: 0px
}
.upload_wrap {
	MARGIN: 25px 0px
}
#upload_images {
=09
}
#upload_images FORM P {
	MARGIN-LEFT: 0px
}
#upload_images FORM #upload_fields SPAN {
	DISPLAY: block; MARGIN-BOTTOM: 0.5em
}
#upload_images FORM #upload_fields INPUT {
	BORDER-RIGHT: #439213 1px solid; BORDER-TOP: #439213 1px solid; =
BORDER-LEFT: #439213 1px solid; WIDTH: auto; BORDER-BOTTOM: #439213 1px =
solid; HEIGHT: auto
}
#upload_images FORM .upload_button {
	BORDER-RIGHT: #439213 1px solid; BORDER-TOP: #439213 1px solid; =
BORDER-LEFT: #439213 1px solid; WIDTH: auto; BORDER-BOTTOM: #439213 1px =
solid; HEIGHT: auto
}
#upload_images FORM .upload_button {
=09
}
#upload_images FORM #upload_fields SPAN {
	FONT-WEIGHT: bold; COLOR: #439213
}
#photo_thumbs_and_upload .prev_thumbnails {
	BORDER-RIGHT: #439213 1px solid; BORDER-TOP: #439213 1px solid; =
FONT-WEIGHT: bold; FONT-SIZE: 9px; FLOAT: left; BORDER-LEFT: #439213 1px =
solid; WIDTH: auto; BORDER-BOTTOM: #439213 1px solid; HEIGHT: 51px
}
#photo_thumbs_and_upload .next_thumbnails {
	BORDER-RIGHT: #439213 1px solid; BORDER-TOP: #439213 1px solid; =
FONT-WEIGHT: bold; FONT-SIZE: 9px; FLOAT: left; BORDER-LEFT: #439213 1px =
solid; WIDTH: auto; BORDER-BOTTOM: #439213 1px solid; HEIGHT: 51px
}
#photo_thumbs_and_upload DIV.thumb_holder {
	FLOAT: left
}
#photo_thumbs_and_upload .next_thumbnails {
	FLOAT: left
}
#photo_thumbs_and_upload .prev_thumbnails {
	MARGIN-RIGHT: 9px
}
#current_image DIV.review {
	WIDTH: 600px
}
.star-rating {
	BACKGROUND: url(../images/star.gif) repeat-x left -1000px
}
.star-rating A:hover {
	BACKGROUND: url(../images/star.gif) repeat-x left -1000px
}
.star-rating A:active {
	BACKGROUND: url(../images/star.gif) repeat-x left -1000px
}
.star-rating A:focus {
	BACKGROUND: url(../images/star.gif) repeat-x left -1000px
}
.star-rating .current-rating {
	BACKGROUND: url(../images/star.gif) repeat-x left -1000px
}
.star-rating {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: left top; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 125px; =
PADDING-TOP: 0px; LIST-STYLE-TYPE: none; POSITION: relative; HEIGHT: =
25px
}
.star-rating LI {
	DISPLAY: inline
}
.star-rating A {
	LEFT: 0px; OVERFLOW: hidden; BORDER-TOP-STYLE: none; TEXT-INDENT: =
-1000em; LINE-HEIGHT: 25px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; POSITION: absolute; TOP: 0px; HEIGHT: 25px; BORDER-BOTTOM-STYLE: =
none; outline: none
}
.star-rating .current-rating {
	LEFT: 0px; OVERFLOW: hidden; BORDER-TOP-STYLE: none; TEXT-INDENT: =
-1000em; LINE-HEIGHT: 25px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; POSITION: absolute; TOP: 0px; HEIGHT: 25px; BORDER-BOTTOM-STYLE: =
none; outline: none
}
.star-rating A:hover {
	BACKGROUND-POSITION: left bottom
}
.star-rating A:active {
	BACKGROUND-POSITION: left bottom
}
.star-rating A:focus {
	BACKGROUND-POSITION: left bottom
}
.star-rating A.one-star {
	Z-INDEX: 6; WIDTH: 20%
}
.star-rating A.two-stars {
	Z-INDEX: 5; WIDTH: 40%
}
.star-rating A.three-stars {
	Z-INDEX: 4; WIDTH: 60%
}
.star-rating A.four-stars {
	Z-INDEX: 3; WIDTH: 80%
}
.star-rating A.five-stars {
	Z-INDEX: 2; WIDTH: 100%
}
.star-rating .current-rating {
	BACKGROUND-POSITION: left center; Z-INDEX: 1
}
.price-rating {
	BACKGROUND: url(../images/star_price.gif) repeat-x left -1000px
}
.price-rating A:hover {
	BACKGROUND: url(../images/star_price.gif) repeat-x left -1000px
}
.price-rating A:active {
	BACKGROUND: url(../images/star_price.gif) repeat-x left -1000px
}
.price-rating A:focus {
	BACKGROUND: url(../images/star_price.gif) repeat-x left -1000px
}
.price-rating .current-price-rating {
	BACKGROUND: url(../images/star_price.gif) repeat-x left -1000px
}
.price-rating {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: left top; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 100px; =
PADDING-TOP: 0px; LIST-STYLE-TYPE: none; POSITION: relative; HEIGHT: =
25px
}
.price-rating LI {
	DISPLAY: inline
}
.price-rating A {
	LEFT: 0px; OVERFLOW: hidden; BORDER-TOP-STYLE: none; TEXT-INDENT: =
-1000em; LINE-HEIGHT: 25px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; POSITION: absolute; TOP: 0px; HEIGHT: 25px; BORDER-BOTTOM-STYLE: =
none; outline: none
}
.price-rating .current-price-rating {
	LEFT: 0px; OVERFLOW: hidden; BORDER-TOP-STYLE: none; TEXT-INDENT: =
-1000em; LINE-HEIGHT: 25px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; POSITION: absolute; TOP: 0px; HEIGHT: 25px; BORDER-BOTTOM-STYLE: =
none; outline: none
}
.price-rating A:hover {
	BACKGROUND-POSITION: left bottom
}
.price-rating A:active {
	BACKGROUND-POSITION: left bottom
}
.price-rating A:focus {
	BACKGROUND-POSITION: left bottom
}
.price-rating A.one-star {
	Z-INDEX: 6; WIDTH: 25%
}
.price-rating A.two-stars {
	Z-INDEX: 5; WIDTH: 50%
}
.price-rating A.three-stars {
	Z-INDEX: 4; WIDTH: 75%
}
.price-rating A.four-stars {
	Z-INDEX: 3; WIDTH: 100%
}
.price-rating .current-price-rating {
	BACKGROUND-POSITION: left center; Z-INDEX: 1
}
.ac_wrapper {
	POSITION: relative
}
DIV.auto_complete {
	BACKGROUND: #fff; LEFT: 0px! important; WIDTH: 350px
}
DIV.auto_complete UL {
	BORDER-RIGHT: #333 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #333 1px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: =
#333 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #333 1px solid; =
LIST-STYLE-TYPE: none
}
#content DIV.auto_complete UL LI {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: =
0px; PADDING-TOP: 3px
}
DIV.auto_complete UL LI.selected {
	BACKGROUND-COLOR: #eaf8db
}
DIV.auto_complete UL STRONG.highlight {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; COLOR: #800; PADDING-TOP: 0px
}
.tipper {
	FONT-SIZE: 11px; MARGIN-BOTTOM: 15px
}
#content H2.tipstream_header.center_line {
	MARGIN-TOP: 0px
}
.tipstream {
	FONT-SIZE: 11px
}
#content .tipper P {
	MARGIN: 0.2em 0px
}
#content .tipstream P {
	MARGIN: 0.2em 0px
}
.tipper .tipper_photo {
	DISPLAY: inline; FLOAT: left; WIDTH: 26px; MARGIN-RIGHT: 10px
}
.tipstream .tipstream_photo {
	DISPLAY: inline; FLOAT: left; MARGIN: 0px 4px 0px 0px; WIDTH: 20px; =
LINE-HEIGHT: 22px; TEXT-ALIGN: center
}
.tipstream .tipstream_photo IMG {
	VERTICAL-ALIGN: middle
}
#content .tipstream H2 {
	MARGIN: 22px 0px 15px
}
.tipstream H4 {
	FONT-WEIGHT: bold; FONT-SIZE: 12px; PADDING-BOTTOM: 3px; MARGIN: 7px =
0px 0px; COLOR: #666; BORDER-BOTTOM: #d9d9d9 1px solid
}
.tipper .tipper_detail {
	FLOAT: left; WIDTH: 590px
}
.tipstream .tipstream_detail {
	FLOAT: left; WIDTH: 436px; BORDER-BOTTOM: #e9e9e9 1px solid
}
#content .tipstream .tipstream_detail P {
	MARGIN: 0px; VERTICAL-ALIGN: middle; LINE-HEIGHT: 22px
}
.profile_stream.tipstream .tipstream_detail {
	WIDTH: 590px
}
.tipper .tipper_detail .created_at {
	FONT-SIZE: 10px; FONT-STYLE: italic
}
.tipstream .tipstream_detail .created_at {
	FONT-SIZE: 10px; FONT-STYLE: italic
}
.tipper .tipper_user {
	COLOR: #2996c8
}
#feedback_content {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 25px; DISPLAY: inline; =
FLOAT: left; WIDTH: 468px; MARGIN-RIGHT: 25px
}
#feedback_content FORM DD {
	WIDTH: 338px; MARGIN-RIGHT: 0px
}
#contact_content {
	FLOAT: left; WIDTH: 395px
}
#send_review_form {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 25px; DISPLAY: inline; =
FLOAT: left; WIDTH: 579px; MARGIN-RIGHT: 25px
}
#send_review_form FORM DD {
	WIDTH: 415px; MARGIN-RIGHT: 0px
}
#send_review_content {
	FLOAT: left; WIDTH: 300px
}
#send_review_content H3 {
	COLOR: #5d441c
}
#privacy DL DT {
	FONT-WEIGHT: bold; MARGIN: 0.5em 0px
}
#privacy UL {
	LIST-STYLE-TYPE: disc
}
#privacy UL LI {
	MARGIN-LEFT: 20px
}
#tos .section_head {
	MARGIN-TOP: 1.5em; FONT-WEIGHT: bold
}
#tos LI {
	MARGIN: 0.5em 0px
}
#tos LI LI {
	MARGIN-LEFT: 20px
}
.contacts .contact .contact_image {
	FLOAT: left; WIDTH: 35px
}
.contacts .contact .contact_detail {
	FLOAT: left; WIDTH: 250px
}
#content FORM .contacts .contact .contact_detail P {
	FONT-WEIGHT: bold; FONT-SIZE: 11px; MARGIN: 0px; COLOR: #2996c8; =
LINE-HEIGHT: 1.2em
}
#simple_captcha {
=09
}
#simple_captcha P {
=09
}
#simple_captcha INPUT {
=09
}
.hover_drag {
	BORDER-TOP: #d8d8d8 3px dashed; DISPLAY: block; PADDING-TOP: 10px
}
.handle {
	CURSOR: move
}
.collections #content {
	WIDTH: 945px
}
.collections #navigation {
	WIDTH: 945px
}
#collections_sidebar {
	DISPLAY: inline; Z-INDEX: 1001; FLOAT: left; WIDTH: 160px; =
MARGIN-RIGHT: 15px; POSITION: relative
}
#collections_main {
	FLOAT: left; WIDTH: 770px
}
#collections_skyscraper {
	FLOAT: right; WIDTH: 160px
}
#collections_main #tool_tip_container {
	BACKGROUND: url(../images/info_background.png) repeat-x left bottom; =
MARGIN-BOTTOM: 13px; HEIGHT: 40px
}
#banner_ad {
	MARGIN-BOTTOM: 13px; TEXT-ALIGN: center
}
#tool_tip_container {
	MARGIN-BOTTOM: 15px
}
#tool_tip_container .tool_tip {
	BACKGROUND: url(../images/info_background.png) repeat-x left bottom; =
HEIGHT: 40px
}
#collections_main #tool_tip_container .tool_tip {
	BACKGROUND: url(../images/tooltip_background.png) no-repeat right =
bottom; HEIGHT: 40px
}
.tool_tip H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 23px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px; COLOR: #f06d00; PADDING-TOP: 0px; POSITION: relative; =
TOP: 10px
}
.tool_tip P {
	PADDING-LEFT: 14px; FONT-SIZE: 13px; FLOAT: left; COLOR: #f06d00; =
POSITION: relative; TOP: 15px
}
.tool_tip .close_tooltip_x {
	PADDING-RIGHT: 4px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: =
0px; PADDING-TOP: 4px
}
#collection_search_results {
	MARGIN-BOTTOM: 15px; BORDER-BOTTOM: #d8d8d8 1px solid; POSITION: =
relative
}
#collection_search_results .close_tooltip_x {
	RIGHT: 4px; POSITION: absolute; TOP: 4px
}
.collection_search_item {
	PADDING-RIGHT: 6px; DISPLAY: inline; PADDING-LEFT: 6px; FONT-SIZE: =
11px; BACKGROUND: url(../images/search_item_background.png) no-repeat; =
FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px 15px 15px 0px; WIDTH: =
169px; COLOR: #000; PADDING-TOP: 3px; HEIGHT: 138px
}
.last.collection_search_item {
	MARGIN: 0px 0px 15px
}
.collection_search_item DT {
	FONT-WEIGHT: bold; OVERFLOW: hidden; WIDTH: 169px; HEIGHT: 14px
}
.collection_search_item DD {
	MARGIN-LEFT: 12px; OVERFLOW: hidden; WIDTH: 157px; HEIGHT: 14px
}
#content .collection_search_item P {
	MARGIN: 0px
}
#content .collection_search_item .add_collection_link {
	BORDER-TOP: #d8d8d8 1px solid; MARGIN-TOP: 6px; TEXT-TRANSFORM: =
uppercase; PADDING-TOP: 2px; TEXT-ALIGN: center
}
#collection_search_results .pagination {
	PADDING-BOTTOM: 15px; MARGIN: 5px 0px 0px
}
#collections_sidebar FORM {
	MARGIN: 0px 0px 10px
}
#collections_sidebar INPUT.c_search_text {
	BORDER-LEFT-COLOR: #a9b47f; BORDER-BOTTOM-COLOR: #a9b47f; MARGIN: 0px; =
WIDTH: 154px; COLOR: #999; BORDER-TOP-COLOR: #a9b47f; =
BORDER-RIGHT-COLOR: #a9b47f
}
#collections .create A {
	LINE-HEIGHT: 1em
}
.profile_collections .create A {
	LINE-HEIGHT: 1em
}
#collections .create IMG {
	VERTICAL-ALIGN: middle
}
.profile_collections .create IMG {
	VERTICAL-ALIGN: middle
}
.sidebar_container_top IMG {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.sidebar_container_bottom IMG {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.sidebar_container {
	BORDER-RIGHT: #ededed 2px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#ededed 0px solid; PADDING-LEFT: 10px; BACKGROUND: =
url(/images/collections_sidebar_background.png) no-repeat left bottom; =
PADDING-BOTTOM: 10px; BORDER-LEFT: #ededed 2px solid; PADDING-TOP: 5px; =
BORDER-BOTTOM: #ededed 0px solid
}
#collections .sidebar_container H2 {
	FONT-SIZE: 11px; BACKGROUND: url(../images/heading_bg.gif) repeat-x 50% =
50%; MARGIN: 7px 0px; TEXT-TRANSFORM: uppercase; COLOR: #5c441c; =
LINE-HEIGHT: 12px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; =
LETTER-SPACING: 1px; HEIGHT: 12px; TEXT-ALIGN: center
}
#collections .collection_search_item H2 {
	FONT-SIZE: 11px; BACKGROUND: url(../images/heading_bg.gif) repeat-x 50% =
50%; MARGIN: 7px 0px; TEXT-TRANSFORM: uppercase; COLOR: #5c441c; =
LINE-HEIGHT: 12px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; =
LETTER-SPACING: 1px; HEIGHT: 12px; TEXT-ALIGN: center
}
#content .collection_display_list H2.handle {
	FONT-SIZE: 11px; BACKGROUND: url(../images/heading_bg.gif) repeat-x 50% =
50%; MARGIN: 7px 0px; TEXT-TRANSFORM: uppercase; COLOR: #5c441c; =
LINE-HEIGHT: 12px; FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; =
LETTER-SPACING: 1px; HEIGHT: 12px; TEXT-ALIGN: center
}
#collections .sidebar_container H2 SPAN {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BACKGROUND-COLOR: #fff
}
#collections .sidebar_search_item H2 SPAN {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BACKGROUND-COLOR: #fff
}
#content .collection_display_list H2.handle SPAN {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; BACKGROUND-COLOR: #fff
}
#collections .list_container {
	MARGIN-BOTTOM: 15px; LIST-STYLE-TYPE: none
}
#collections .list_container .collection_list {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; FONT-SIZE: 11px; =
PADDING-BOTTOM: 2px; WIDTH: 136px; COLOR: #439213; PADDING-TOP: 2px; =
BORDER-BOTTOM: #d8d8d8 1px dashed; HEIGHT: 13px
}
.list_container .collection_list:hover {
	BACKGROUND: #ededed
}
.list_container .collection_list .handle {
	OVERFLOW: hidden; WIDTH: 136px; HEIGHT: 13px
}
.collection_expando {
	PADDING-RIGHT: 6px; PADDING-LEFT: 17px; FONT-SIZE: 11px; Z-INDEX: 2000; =
BACKGROUND: url(../images/collection_hover_background.png) no-repeat =
left top; LEFT: 130px; PADDING-BOTTOM: 0px; WIDTH: 167px; COLOR: #000; =
PADDING-TOP: 3px; POSITION: absolute; TOP: -10px; HEIGHT: 138px
}
.collection_expando DT {
	FONT-WEIGHT: bold; OVERFLOW: hidden; WIDTH: 167px; HEIGHT: 14px
}
.collection_expando DD {
	MARGIN-LEFT: 12px; OVERFLOW: hidden; WIDTH: 155px; HEIGHT: 14px
}
#content .collection_expando P {
	MARGIN: 0px
}
#content .collection_expando .add_collection_link {
	BORDER-TOP: #d8d8d8 1px solid; MARGIN-TOP: 6px; TEXT-TRANSFORM: =
uppercase; PADDING-TOP: 2px; TEXT-ALIGN: center
}
.collection_list_drag {
	BORDER-RIGHT: #d8d8d8 2px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#d8d8d8 2px solid; DISPLAY: block; PADDING-LEFT: 2px; FONT-SIZE: 11px; =
BACKGROUND: url(../images/handle_background.gif) repeat-x; =
PADDING-BOTTOM: 0px; BORDER-LEFT: #d8d8d8 2px solid; COLOR: #439213; =
PADDING-TOP: 2px; BORDER-BOTTOM: #d8d8d8 2px solid; HEIGHT: 16px
}
.collection_list_drag .handle {
	OVERFLOW: hidden; TEXT-TRANSFORM: uppercase; COLOR: #5c441c; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; LETTER-SPACING: 1px; =
HEIGHT: 14px
}
#collections UL.directory {
	MARGIN: 0px 0px 8px
}
#collections UL.directory LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: =
2px; COLOR: #439213; PADDING-TOP: 2px; BORDER-BOTTOM: #d8d8d8 1px dashed
}
#collections UL.directory LI SPAN:hover {
	TEXT-DECORATION: underline
}
#collections UL.directory LI UL {
	MARGIN-LEFT: 8px
}
#collections UL.directory LI UL LI {
	BORDER-TOP: #d8d8d8 1px dashed; BORDER-BOTTOM-WIDTH: 0px
}
.collection_display_column {
	DISPLAY: inline; FLOAT: left; WIDTH: 245px; MARGIN-RIGHT: 17px
}
.last.collection_display_column {
	MARGIN-RIGHT: 0px
}
.collection_display_list {
=09
}
.nonuser_list.collection_display_list LI {
	DISPLAY: inline; FLOAT: left; MARGIN-RIGHT: 17px
}
.nonuser_list.collection_display_list LI.last {
	MARGIN-RIGHT: 0px
}
.collection_display_list LI.main_list {
	PADDING-RIGHT: 7px; PADDING-LEFT: 10px; FONT-SIZE: 11px; MARGIN-BOTTOM: =
15px; PADDING-BOTTOM: 0px; WIDTH: 228px; PADDING-TOP: 2px; HEIGHT: 234px
}
.collection_display_list LI.tipped_collection_item.main_list {
	BACKGROUND: url(/images/tipped_collection_item_background.png) =
no-repeat
}
.collection_display_list LI.user_collection_item.main_list {
	BACKGROUND: url(/images/user_collection_item_background.png) no-repeat
}
#collections .collection_display_list H2.handle {
	MARGIN-BOTTOM: 3px
}
#collections .collection_display_list LI.main_list P.collection_author {
	MARGIN-BOTTOM: 2px; PADDING-BOTTOM: 6px; VERTICAL-ALIGN: middle; =
LINE-HEIGHT: 16px; BORDER-BOTTOM: #d8d8d8 1px solid
}
.collection_display_list LI.main_list P.collection_author .tpd {
	TEXT-TRANSFORM: uppercase; COLOR: #439213
}
LI.main_list P.collection_author .close_collection_x {
	FLOAT: right
}
.collection_display_list LI.main_list .collection_listings {
	COLOR: #5c441c
}
.collection_display_list LI.main_list .collection_listings DT A {
	COLOR: #5c441c
}
.collection_display_list LI.main_list .collection_listings DT {
	FONT-WEIGHT: bold
}
.collection_display_list LI.main_list .collection_listings DT =
.love_leave {
	FONT-WEIGHT: normal; FLOAT: right; VERTICAL-ALIGN: middle; COLOR: =
#f06d00; LINE-HEIGHT: 12px
}
.collection_display_list LI.main_list .collection_listings DT =
.love_leave IMG {
	MARGIN: 0px 1px 0px 3px; VERTICAL-ALIGN: middle
}
.collection_display_list LI.main_list .collection_listings DD {
	MARGIN: 0px 0px 4px 12px; OVERFLOW: hidden; COLOR: #439213; HEIGHT: =
15px
}
.collection_display_list LI.main_list .collection_actions {
	BORDER-TOP: #d8d8d8 1px solid; WIDTH: 228px; BOTTOM: 4px; PADDING-TOP: =
8px; POSITION: absolute
}
.love_leave_user {
	FONT-SIZE: 10px; COLOR: #f06d00; FONT-FAMILY: Arial, Helvetica, =
sans-serif
}
.collection_display_list LI.main_list .love_leave_user {
	FLOAT: right
}
#collection_header .love_leave_user {
	FLOAT: right
}
.collection_display_list LI.main_list .love_leave_user IMG {
	VERTICAL-ALIGN: middle
}
#collection_header .love_leave_user IMG {
	VERTICAL-ALIGN: middle
}
#collection {
	FLOAT: left; WIDTH: 630px
}
#collection_header {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; MARGIN-BOTTOM: 10px; =
PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BORDER-BOTTOM: #d8d8d8 1px =
solid; POSITION: relative
}
.user#collection_header {
	BACKGROUND: url(../images/collections_header_background_user.png) =
no-repeat
}
.tipped#collection_header {
	BACKGROUND: url(../images/collections_header_background_tipped.png) =
no-repeat
}
.collector_info {
	FLOAT: left; WIDTH: 75px
}
.collection_info {
	PADDING-RIGHT: 10px; FLOAT: left; WIDTH: 395px
}
.collection_actions {
	FLOAT: right; WIDTH: 130px
}
.collection_back {
	FONT-SIZE: 11px; RIGHT: 10px; BOTTOM: 5px; POSITION: absolute; =
TEXT-ALIGN: right
}
.collector_image IMG {
	BORDER-RIGHT: #79c902 2px solid; BORDER-TOP: #79c902 2px solid; =
BORDER-LEFT: #79c902 2px solid; BORDER-BOTTOM: #79c902 2px solid
}
.collector_details {
	MARGIN-TOP: 4px; FONT-SIZE: 11px
}
.collector_details LI IMG {
	VERTICAL-ALIGN: middle
}
.collector_details LI.user_name {
	FONT-WEIGHT: bold
}
#collection_header .collection_info H2 {
	MARGIN: 0px 0px 10px
}
#collection_header .collection_info H2 SPAN A {
	FONT-WEIGHT: normal; FONT-SIZE: 11px
}
.collection_info .tipped_collector {
	FONT-WEIGHT: bold; COLOR: #2996c8
}
.collection_actions .add_to_collection A {
	FONT-WEIGHT: bold; LINE-HEIGHT: 16px
}
.collection_actions .add_to_collection IMG {
	VERTICAL-ALIGN: middle
}
.collection_actions .mark_private {
	MARGIN-TOP: 3px; FONT-SIZE: 11px
}
.compact_tip .tipped_rating_links {
	CLEAR: both
}
.compact_tip .tipped_rating_links IMG {
	MARGIN: 0px 1px 0px 3px; VERTICAL-ALIGN: middle
}
.profile_collections #content {
	WIDTH: 945px
}
.profile_collections #navigation {
	WIDTH: 945px
}
.profile_collections #profile_nav {
	WIDTH: 945px
}
.profile_collections #collections_main {
	WIDTH: 780px
}
.profile_collections .collection_display_list =
LI.user_collection_item.main_list {
	DISPLAY: inline; FLOAT: left; MARGIN-RIGHT: 15px; POSITION: relative
}
.profile_collections H2.profile_collection_header {
	FLOAT: left
}
.profile_collections .create {
	DISPLAY: inline; FLOAT: right; MARGIN: 4px 180px 0px 0px
}
#add_to_list_popup {
	Z-INDEX: 11; POSITION: relative
}
#collection_popup {
	Z-INDEX: 11; POSITION: relative
}
#collection_listing_popup {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; Z-INDEX: 10; =
LEFT: 260px; PADDING-BOTTOM: 0px; WIDTH: 280px; PADDING-TOP: 0px; =
POSITION: absolute; TOP: -102px; BACKGROUND-COLOR: #fff; TEXT-ALIGN: =
left
}
#collection_listing_popup P {
	MARGIN-BOTTOM: 5px
}
#collection_listing_popup .popup_window FORM {
	MARGIN-TOP: 0px
}
#collection_listing_popup .txt {
	MARGIN-BOTTOM: 0.5em; WIDTH: 235px
}
#content #collection_listing_popup .popup_window FORM .submit_line {
	MARGIN-TOP: 1em
}
#collection_listing_popup H4 {
	COLOR: #000; FONT-FAMILY: Arial, sans-serif
}
H2 .editor_field {
	FONT-SIZE: 18px; MARGIN-BOTTOM: 3px; WIDTH: 320px; COLOR: #439213; =
FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif; HEIGHT: 26px
}
.inplaceeditor-form {
	DISPLAY: inline; MARGIN: 0px
}
.talk #content {
	WIDTH: 945px
}
.talk #navigation {
	WIDTH: 945px
}
#talk_sidebar {
	DISPLAY: inline; FLOAT: left; WIDTH: 160px; MARGIN-RIGHT: 15px
}
#talk_skyscraper {
	FLOAT: right; WIDTH: 160px
}
.talk_sidebar.sidebar_container {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 1px
}
#talk_sidebar FORM {
	MARGIN: 0px 0px 10px
}
#talk_sidebar INPUT.c_search_text {
	BORDER-LEFT-COLOR: #a9b47f; BORDER-BOTTOM-COLOR: #a9b47f; MARGIN: 0px; =
WIDTH: 154px; COLOR: #999; BORDER-TOP-COLOR: #a9b47f; =
BORDER-RIGHT-COLOR: #a9b47f
}
#talk_sidebar .create IMG {
	PADDING-BOTTOM: 3px; VERTICAL-ALIGN: middle
}
.talk_category_sidebar_list {
	FONT-SIZE: 11px
}
.talk_category_sidebar_list DT {
	MARGIN-TOP: 14px; FONT-WEIGHT: bold
}
.talk_category_sidebar_list DT.selected {
	PADDING-LEFT: 15px; BACKGROUND: =
url(../images/talk_category_selected_icon.gif) no-repeat 0px 0px
}
.talk_category_sidebar_list DT.selected A {
	COLOR: #5c441c
}
.talk_category_sidebar_list DD {
	COLOR: #666
}
#talk_main {
	FLOAT: left; WIDTH: 770px
}
.talk #content H2 {
	FONT-SIZE: 22px; MARGIN-BOTTOM: 8px
}
.talk .intro {
	FONT-SIZE: 14px; WIDTH: 95%; COLOR: #333; LINE-HEIGHT: 23px
}
.talk_conversation_wrap {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/talk_conversations_background.png) no-repeat; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.talk_conversation_list {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; PADDING-BOTTOM: =
0px; WIDTH: 750px; PADDING-TOP: 0px
}
.talk_conversation_list TH {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: =
11px; PADDING-BOTTOM: 7px; TEXT-TRANSFORM: uppercase; COLOR: #5c441c; =
PADDING-TOP: 12px; BORDER-BOTTOM: #d8d8d8 1px solid; LETTER-SPACING: =
0.1em
}
.talk_conversation_list TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 6px; =
VERTICAL-ALIGN: middle; PADDING-TOP: 6px; BORDER-BOTTOM: #d8d8d8 1px =
solid
}
.talk_conversation_list .short_data {
	TEXT-ALIGN: center
}
.talk_conversations TD IMG {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#add_topic {
	PADDING-RIGHT: 13px; PADDING-LEFT: 13px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px
}
#conversation_main {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 12px; BACKGROUND: =
url(../images/talk_conversations_background.png) no-repeat; =
PADDING-BOTTOM: 0px; WIDTH: 750px; PADDING-TOP: 10px
}
.conversation_header {
	POSITION: relative
}
#content .conversation_header_actions {
	RIGHT: 0px; MARGIN-BOTTOM: 0px; BOTTOM: 0px; POSITION: absolute
}
.conversation_header_actions .flag_inapropriate {
	FONT-SIZE: 11px
}
.talk #content H2.section_heading {
	FONT-SIZE: 11px
}
.conversation_item {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 10px; POSITION: relative
}
.conversation_body {
	FLOAT: left; WIDTH: 680px
}
#talk_main .reviewer P {
	MARGIN: 0px
}
#talk_main .reviewer P.badge {
	MARGIN-TOP: 3px
}
.comment_item .conversation_body {
	WIDTH: 655px
}
.conversation_name {
	VERTICAL-ALIGN: baseline; LINE-HEIGHT: 15px
}
.conversation_date {
	VERTICAL-ALIGN: baseline; LINE-HEIGHT: 15px
}
.conversation_name {
	FLOAT: left
}
.conversation_date {
	FONT-SIZE: 10px; FLOAT: right; COLOR: #d8d8d8; FONT-STYLE: italic
}
.conversation_message {
	MARGIN-BOTTOM: 30px! important
}
.conversation_actions {
	RIGHT: 0px; MARGIN-BOTTOM: 0px! important; BOTTOM: 10px; POSITION: =
absolute
}
.comment_item {
	PADDING-RIGHT: 0px; PADDING-LEFT: 25px; MARGIN-BOTTOM: 6px; =
PADDING-BOTTOM: 14px; PADDING-TOP: 10px; BORDER-BOTTOM: #d8d8d8 1px =
solid; POSITION: relative
}
.email_updates {
	PADDING-LEFT: 22px; FONT-SIZE: 11px; BACKGROUND: =
url(../images/send_to_friends_icon.gif) no-repeat 0px -2px; LINE-HEIGHT: =
14px
}
.page_jump_link {
	FONT-SIZE: 10px; FLOAT: right; LINE-HEIGHT: 14px
}
#conversation_main FORM {
	MARGIN-TOP: 0px
}
.christmas #content {
	WIDTH: 945px
}
.christmas #navigation {
	WIDTH: 945px
}
.christmas_rules #content {
	WIDTH: 945px
}
.christmas_rules #navigation {
	WIDTH: 945px
}
.christmas #maincontent {
	BACKGROUND: url(../images/snowflake_background.gif) no-repeat
}
.christmas #xmas_sidebar {
	PADDING-RIGHT: 10px; FLOAT: left; WIDTH: 160px
}
.christmas_rules #xmas_sidebar {
	PADDING-RIGHT: 10px; FLOAT: left; WIDTH: 160px
}
.christmas #maincontent {
	DISPLAY: inline; FLOAT: left; WIDTH: 775px
}
.christmas_rules #maincontent {
	DISPLAY: inline; FLOAT: left; WIDTH: 775px
}
.christmas #maincontent H1 {
	BACKGROUND: url(../images/tipped_christmas_headline.gif) no-repeat; =
MARGIN: 50px 0px 17px 55px; OVERFLOW: hidden; WIDTH: 282px; LINE-HEIGHT: =
600px; HEIGHT: 36px
}
.christmas #maincontent .mc_left {
	PADDING-LEFT: 10px; FLOAT: left; WIDTH: 460px
}
.christmas_rules #maincontent .mc_left {
	PADDING-LEFT: 10px; FLOAT: left; WIDTH: 460px
}
.christmas #maincontent .mc_right {
	FLOAT: right; WIDTH: 285px
}
.christmas #content #maincontent {
	FONT-SIZE: 12px
}
H4.cheery {
	COLOR: #d31113
}
UL.red_circle_list LI {
	PADDING-LEFT: 16px; BACKGROUND: url(../images/red_circle_bullet.gif) =
no-repeat 2px 0.3em; MARGIN-BOTTOM: 0.5em
}
.christmas_rules OL {
	MARGIN-LEFT: 30px
}
#sidebar_signup {
	MARGIN-BOTTOM: 30px
}
#sidebar_signup H2 {
	FONT-SIZE: 14px; MARGIN-BOTTOM: 1em; COLOR: #439213
}
#sidebar_signup P {
	FONT-SIZE: 12px; MARGIN: 1em 0px
}
#sidebar_signup FORM {
	FONT-SIZE: 12px
}
#sidebar_signup FORM DT {
	CLEAR: left; PADDING-RIGHT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 12px; =
FLOAT: left; WIDTH: 50px; COLOR: #439213; TEXT-ALIGN: right
}
#sidebar_signup FORM DD {
	DISPLAY: inline; FLOAT: left; PADDING-BOTTOM: 15px; MARGIN: 0px 10px =
0px 0px; WIDTH: 220px; COLOR: #333
}
#sidebar_signup .txt-std {
	WIDTH: 200px
}
#sidebar_signup .submit_line {
	PADDING-LEFT: 60px; MARGIN: 0px
}
#sign_up_ad {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/sign_up_bg.gif) #5d441c no-repeat left bottom; =
MARGIN-BOTTOM: 15px; PADDING-BOTTOM: 10px; COLOR: #fff; PADDING-TOP: =
10px
}
#sign_up_ad H2 {
	FONT-SIZE: 12px; BACKGROUND: url(../images/tipped_off_lately.gif) =
no-repeat; OVERFLOW: hidden; WIDTH: 230px; LINE-HEIGHT: 600px; HEIGHT: =
67px
}
#sign_up_ad P {
	FONT-SIZE: 12px; MARGIN: 5px 0px
}
#sign_up_ad A {
	COLOR: #8dcf02
}
.sponsored_details#details {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 15px; WIDTH: =
610px; PADDING-TOP: 0px
}
.sponsored_tip {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 15px; WIDTH: =
610px; PADDING-TOP: 0px
}
.sponsored_tip {
	PADDING-TOP: 1px
}
.sponsored_details#details #detail_info {
	WIDTH: 410px
}
.sponsored_details#details #detail_description {
	WIDTH: 190px
}
.sponsored_details#details #detail_meta {
	WIDTH: 205px
}
.sponsored_details {
	BACKGROUND: url(../images/sponsored_listing_background.png) repeat-x =
left top
}
.sponsored_details_sponsored_tip {
	BACKGROUND: url(../images/sponsored_listing_background.png) repeat-x =
left top
}
.sponsored_details_event_tip {
	BACKGROUND: url(../images/sponsored_listing_event_tip_background.png) =
repeat-x left top
}
.sponsored_details_partnership_tip {
	BACKGROUND: =
url(../images/sponsored_listing_partnership_tip_background.png) repeat-x =
left top
}
.sponsored_details_promotional_tip {
	BACKGROUND: =
url(../images/sponsored_listing_promotional_tip_background.png) repeat-x =
left top
}
.sponsored_tip {
	BACKGROUND: url(../images/sponsored_listing_item_background.png) =
repeat-x left top
}
.sponsored_details_title {
	PADDING-BOTTOM: 5px; MARGIN: 6px 0px 10px; BORDER-BOTTOM: #fff 1px =
solid
}
#details .sponsored_details_title P {
	FONT-SIZE: 11px; FLOAT: left; MARGIN: 0px; COLOR: #174854; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif
}
#category_tips .sponsored_details_title P {
	FONT-SIZE: 11px; FLOAT: left; MARGIN: 0px; COLOR: #174854; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif
}
#content .sponsored_details_title P {
	FONT-SIZE: 11px; FLOAT: left; MARGIN: 0px; COLOR: #174854; FONT-FAMILY: =
"Trebuchet MS", Helvetica, sans-serif
}
.sponsored_details_title IMG {
	PADDING-RIGHT: 3px; VERTICAL-ALIGN: middle
}
.sponsored_details_title .special_offer {
	FONT-WEIGHT: bold; FLOAT: right; COLOR: #f06d00
}
.sponsored_details #detail_action IMG {
	BORDER-LEFT-COLOR: #174854; BORDER-BOTTOM-COLOR: #174854; =
BORDER-TOP-COLOR: #174854; BORDER-RIGHT-COLOR: #174854
}
.sponsored_tip.compact_tip .tip_image IMG.listing_image {
	BORDER-LEFT-COLOR: #174854; BORDER-BOTTOM-COLOR: #174854; =
BORDER-TOP-COLOR: #174854; BORDER-RIGHT-COLOR: #174854
}
.sponsored_details#details H2 {
	COLOR: #174854
}
.sponsored_tip.compact_tip .tip_desc H3 A {
	COLOR: #174854
}
.sponsored_details A {
	COLOR: #174854
}
.sponsored_details #detail_action LI A {
	COLOR: #174854
}
.sponsored_details #detail_description P A {
	COLOR: #174854
}
.sponsored_details #detail_meta A {
	COLOR: #174854
}
.sponsored_tip A {
	COLOR: #174854
}
.sponsored_tip.compact_tip {
	FONT-FAMILY: "Trebuchet MS", Helvetica, sans-serif
}
.sponsored_tip .tip_image {
	FLOAT: left; WIDTH: 140px
}
.sponsored_tip.compact_tip .tip_desc {
	WIDTH: 320px
}
.sponsored_tip.compact_tip IMG.listing_image {
	WIDTH: auto; HEIGHT: 90px
}
.sponsored_details .tip_offer {
	BORDER-RIGHT: #a1d5e7 2px solid; PADDING-RIGHT: 14px; BORDER-TOP: =
#a1d5e7 2px solid; PADDING-LEFT: 14px; FONT-WEIGHT: bold; FONT-SIZE: =
11px; BACKGROUND: url(../images/sponsored_offer_background.png) #c5e5ef =
repeat-x; MARGIN-BOTTOM: 12px; PADDING-BOTTOM: 7px; BORDER-LEFT: #a1d5e7 =
2px solid; COLOR: #f06d00; LINE-HEIGHT: 15px; PADDING-TOP: 7px; =
BORDER-BOTTOM: #a1d5e7 2px solid; border-radius: 5px; =
-moz-border-radius: 5px; -webkit-border-radius: 5px
}
.sponsored_details .tip_offer H1 {
	FONT-SIZE: 13px; COLOR: #174854; FONT-FAMILY: "Trebuchet MS", =
Helvetica, sans-serif
}
.sponsored_details .tip_offer H2 {
	FONT-SIZE: 13px; COLOR: #174854; FONT-FAMILY: "Trebuchet MS", =
Helvetica, sans-serif
}
.sponsored_details .tip_offer H3 {
	FONT-SIZE: 13px; COLOR: #174854; FONT-FAMILY: "Trebuchet MS", =
Helvetica, sans-serif
}
.sponsored_details .tip_offer H4 {
	FONT-SIZE: 13px; COLOR: #174854; FONT-FAMILY: "Trebuchet MS", =
Helvetica, sans-serif
}
.sponsored_details .tip_offer H5 {
	FONT-SIZE: 13px; COLOR: #174854; FONT-FAMILY: "Trebuchet MS", =
Helvetica, sans-serif
}
#content .sponsored_details .tip_offer P {
	FONT-WEIGHT: bold; MARGIN: 5px 0px 0px; COLOR: #f06d00
}
.east_end_film_festival {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; BACKGROUND: =
url(/images/sponsored_bg/eeff_bg.png) no-repeat; PADDING-BOTTOM: 1em; =
WIDTH: 626px; COLOR: black; PADDING-TOP: 1em; HEIGHT: 157px
}
.east_end_film_festival P.campaign_title {
	DISPLAY: none
}
.east_end_film_festival .tip_image {
	MARGIN-TOP: 2em; MARGIN-LEFT: 1em
}
.east_end_film_festival .tip_image IMG.listing_image {
	BORDER-LEFT-COLOR: #e84f15; BORDER-BOTTOM-COLOR: #e84f15; =
BORDER-TOP-COLOR: #e84f15; BORDER-RIGHT-COLOR: #e84f15
}
.east_end_film_festival .tip_desc A {
	COLOR: #e84f15
}
.east_end_film_festival .tip_desc H3 A {
	COLOR: #e84f15
}
.east_end_film_festival .sponsored_details_title {
	PADDING-RIGHT: 1em; HEIGHT: 28px
}
.east_end_film_festival .tip_detail {
	PADDING-RIGHT: 1em
}
.footer_ad {
	CLEAR: both; BORDER-TOP: #ccc 1px solid; MARGIN-TOP: 18px; FLOAT: left; =
WIDTH: 945px; PADDING-TOP: 18px; TEXT-ALIGN: left
}
.sidebar_moving_map {
	PADDING-BOTTOM: 385px; HEIGHT: 100%
}
.submit_ad {
	PADDING-BOTTOM: 15px
}
UL .bookmark {
	DISPLAY: inline
}
.bottom-gutter {
	MARGIN-BOTTOM: 1em
}
.top-gutter {
	MARGIN-TOP: 1em
}
P.info {
	FONT-SIZE: 0.9em; COLOR: #999
}

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/javascripts/prototype.js?1238029555

/*  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_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/javascripts/effects.js?1238029555

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// Contributors:=0A=
//  Justin Palmer (http://encytemedia.com/)=0A=
//  Mark Pilgrim (http://diveintomark.org/)=0A=
//  Martin Bialasinki=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: =
http://script.aculo.us/ =0A=
=0A=
// converts rgb() and #xxx to #xxxxxx format,  =0A=
// returns self (or first argument) if not convertable  =0A=
String.prototype.parseColor =3D function() {  =0A=
  var color =3D '#';=0A=
  if (this.slice(0,4) =3D=3D 'rgb(') {  =0A=
    var cols =3D this.slice(4,this.length-1).split(',');  =0A=
    var i=3D0; do { color +=3D parseInt(cols[i]).toColorPart() } while =
(++i<3);  =0A=
  } else {  =0A=
    if (this.slice(0,1) =3D=3D '#') {  =0A=
      if (this.length=3D=3D4) for(var i=3D1;i<4;i++) color +=3D =
(this.charAt(i) + this.charAt(i)).toLowerCase();  =0A=
      if (this.length=3D=3D7) color =3D this.toLowerCase();  =0A=
    }  =0A=
  }  =0A=
  return (color.length=3D=3D7 ? color : (arguments[0] || this));  =0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.collectTextNodes =3D function(element) {  =0A=
  return $A($(element).childNodes).collect( function(node) {=0A=
    return (node.nodeType=3D=3D3 ? node.nodeValue : =0A=
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));=0A=
  }).flatten().join('');=0A=
};=0A=
=0A=
Element.collectTextNodesIgnoreClass =3D function(element, className) {  =0A=
  return $A($(element).childNodes).collect( function(node) {=0A=
    return (node.nodeType=3D=3D3 ? node.nodeValue : =0A=
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? =0A=
        Element.collectTextNodesIgnoreClass(node, className) : ''));=0A=
  }).flatten().join('');=0A=
};=0A=
=0A=
Element.setContentZoom =3D function(element, percent) {=0A=
  element =3D $(element);  =0A=
  element.setStyle({fontSize: (percent/100) + 'em'});   =0A=
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
  return element;=0A=
};=0A=
=0A=
Element.getInlineOpacity =3D function(element){=0A=
  return $(element).style.opacity || '';=0A=
};=0A=
=0A=
Element.forceRerendering =3D function(element) {=0A=
  try {=0A=
    element =3D $(element);=0A=
    var n =3D document.createTextNode(' ');=0A=
    element.appendChild(n);=0A=
    element.removeChild(n);=0A=
  } catch(e) { }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Effect =3D {=0A=
  _elementDoesNotExistError: {=0A=
    name: 'ElementDoesNotExistError',=0A=
    message: 'The specified DOM element does not exist, but is required =
for this effect to operate'=0A=
  },=0A=
  Transitions: {=0A=
    linear: Prototype.K,=0A=
    sinoidal: function(pos) {=0A=
      return (-Math.cos(pos*Math.PI)/2) + 0.5;=0A=
    },=0A=
    reverse: function(pos) {=0A=
      return 1-pos;=0A=
    },=0A=
    flicker: function(pos) {=0A=
      var pos =3D ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;=0A=
      return pos > 1 ? 1 : pos;=0A=
    },=0A=
    wobble: function(pos) {=0A=
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;=0A=
    },=0A=
    pulse: function(pos, pulses) { =0A=
      pulses =3D pulses || 5; =0A=
      return (=0A=
        ((pos % (1/pulses)) * pulses).round() =3D=3D 0 ? =0A=
              ((pos * pulses * 2) - (pos * pulses * 2).floor()) : =0A=
          1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())=0A=
        );=0A=
    },=0A=
    spring: function(pos) { =0A=
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); =0A=
    },=0A=
    none: function(pos) {=0A=
      return 0;=0A=
    },=0A=
    full: function(pos) {=0A=
      return 1;=0A=
    }=0A=
  },=0A=
  DefaultOptions: {=0A=
    duration:   1.0,   // seconds=0A=
    fps:        100,   // 100=3D assume 66fps max.=0A=
    sync:       false, // true for combining=0A=
    from:       0.0,=0A=
    to:         1.0,=0A=
    delay:      0.0,=0A=
    queue:      'parallel'=0A=
  },=0A=
  tagifyText: function(element) {=0A=
    var tagifyStyle =3D 'position:relative';=0A=
    if (Prototype.Browser.IE) tagifyStyle +=3D ';zoom:1';=0A=
    =0A=
    element =3D $(element);=0A=
    $A(element.childNodes).each( function(child) {=0A=
      if (child.nodeType=3D=3D3) {=0A=
        child.nodeValue.toArray().each( function(character) {=0A=
          element.insertBefore(=0A=
            new Element('span', {style: tagifyStyle}).update(=0A=
              character =3D=3D ' ' ? String.fromCharCode(160) : =
character), =0A=
              child);=0A=
        });=0A=
        Element.remove(child);=0A=
      }=0A=
    });=0A=
  },=0A=
  multiple: function(element, effect) {=0A=
    var elements;=0A=
    if (((typeof element =3D=3D 'object') || =0A=
        Object.isFunction(element)) && =0A=
       (element.length))=0A=
      elements =3D element;=0A=
    else=0A=
      elements =3D $(element).childNodes;=0A=
      =0A=
    var options =3D Object.extend({=0A=
      speed: 0.1,=0A=
      delay: 0.0=0A=
    }, arguments[2] || { });=0A=
    var masterDelay =3D options.delay;=0A=
=0A=
    $A(elements).each( function(element, index) {=0A=
      new effect(element, Object.extend(options, { delay: index * =
options.speed + masterDelay }));=0A=
    });=0A=
  },=0A=
  PAIRS: {=0A=
    'slide':  ['SlideDown','SlideUp'],=0A=
    'blind':  ['BlindDown','BlindUp'],=0A=
    'appear': ['Appear','Fade']=0A=
  },=0A=
  toggle: function(element, effect) {=0A=
    element =3D $(element);=0A=
    effect =3D (effect || 'appear').toLowerCase();=0A=
    var options =3D Object.extend({=0A=
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }=0A=
    }, arguments[2] || { });=0A=
    Effect[element.visible() ? =0A=
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, =
options);=0A=
  }=0A=
};=0A=
=0A=
Effect.DefaultOptions.transition =3D Effect.Transitions.sinoidal;=0A=
=0A=
/* ------------- core effects ------------- */=0A=
=0A=
Effect.ScopedQueue =3D Class.create(Enumerable, {=0A=
  initialize: function() {=0A=
    this.effects  =3D [];=0A=
    this.interval =3D null;    =0A=
  },=0A=
  _each: function(iterator) {=0A=
    this.effects._each(iterator);=0A=
  },=0A=
  add: function(effect) {=0A=
    var timestamp =3D new Date().getTime();=0A=
    =0A=
    var position =3D Object.isString(effect.options.queue) ? =0A=
      effect.options.queue : effect.options.queue.position;=0A=
    =0A=
    switch(position) {=0A=
      case 'front':=0A=
        // move unstarted effects after this effect  =0A=
        this.effects.findAll(function(e){ return e.state=3D=3D'idle' =
}).each( function(e) {=0A=
            e.startOn  +=3D effect.finishOn;=0A=
            e.finishOn +=3D effect.finishOn;=0A=
          });=0A=
        break;=0A=
      case 'with-last':=0A=
        timestamp =3D this.effects.pluck('startOn').max() || timestamp;=0A=
        break;=0A=
      case 'end':=0A=
        // start effect after last queued effect has finished=0A=
        timestamp =3D this.effects.pluck('finishOn').max() || timestamp;=0A=
        break;=0A=
    }=0A=
    =0A=
    effect.startOn  +=3D timestamp;=0A=
    effect.finishOn +=3D timestamp;=0A=
=0A=
    if (!effect.options.queue.limit || (this.effects.length < =
effect.options.queue.limit))=0A=
      this.effects.push(effect);=0A=
    =0A=
    if (!this.interval)=0A=
      this.interval =3D setInterval(this.loop.bind(this), 15);=0A=
  },=0A=
  remove: function(effect) {=0A=
    this.effects =3D this.effects.reject(function(e) { return =
e=3D=3Deffect });=0A=
    if (this.effects.length =3D=3D 0) {=0A=
      clearInterval(this.interval);=0A=
      this.interval =3D null;=0A=
    }=0A=
  },=0A=
  loop: function() {=0A=
    var timePos =3D new Date().getTime();=0A=
    for(var i=3D0, len=3Dthis.effects.length;i<len;i++) =0A=
      this.effects[i] && this.effects[i].loop(timePos);=0A=
  }=0A=
});=0A=
=0A=
Effect.Queues =3D {=0A=
  instances: $H(),=0A=
  get: function(queueName) {=0A=
    if (!Object.isString(queueName)) return queueName;=0A=
    =0A=
    return this.instances.get(queueName) ||=0A=
      this.instances.set(queueName, new Effect.ScopedQueue());=0A=
  }=0A=
};=0A=
Effect.Queue =3D Effect.Queues.get('global');=0A=
=0A=
Effect.Base =3D Class.create({=0A=
  position: null,=0A=
  start: function(options) {=0A=
    function codeForEvent(options,eventName){=0A=
      return (=0A=
        (options[eventName+'Internal'] ? =
'this.options.'+eventName+'Internal(this);' : '') +=0A=
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')=0A=
      );=0A=
    }=0A=
    if (options && options.transition =3D=3D=3D false) =
options.transition =3D Effect.Transitions.linear;=0A=
    this.options      =3D Object.extend(Object.extend({ =
},Effect.DefaultOptions), options || { });=0A=
    this.currentFrame =3D 0;=0A=
    this.state        =3D 'idle';=0A=
    this.startOn      =3D this.options.delay*1000;=0A=
    this.finishOn     =3D this.startOn+(this.options.duration*1000);=0A=
    this.fromToDelta  =3D this.options.to-this.options.from;=0A=
    this.totalTime    =3D this.finishOn-this.startOn;=0A=
    this.totalFrames  =3D this.options.fps*this.options.duration;=0A=
    =0A=
    eval('this.render =3D function(pos){ '+=0A=
      'if (this.state=3D=3D"idle"){this.state=3D"running";'+=0A=
      codeForEvent(this.options,'beforeSetup')+=0A=
      (this.setup ? 'this.setup();':'')+ =0A=
      codeForEvent(this.options,'afterSetup')+=0A=
      '};if (this.state=3D=3D"running"){'+=0A=
      =
'pos=3Dthis.options.transition(pos)*'+this.fromToDelta+'+'+this.options.f=
rom+';'+=0A=
      'this.position=3Dpos;'+=0A=
      codeForEvent(this.options,'beforeUpdate')+=0A=
      (this.update ? 'this.update(pos);':'')+=0A=
      codeForEvent(this.options,'afterUpdate')+=0A=
      '}}');=0A=
    =0A=
    this.event('beforeStart');=0A=
    if (!this.options.sync)=0A=
      Effect.Queues.get(Object.isString(this.options.queue) ? =0A=
        'global' : this.options.queue.scope).add(this);=0A=
  },=0A=
  loop: function(timePos) {=0A=
    if (timePos >=3D this.startOn) {=0A=
      if (timePos >=3D this.finishOn) {=0A=
        this.render(1.0);=0A=
        this.cancel();=0A=
        this.event('beforeFinish');=0A=
        if (this.finish) this.finish(); =0A=
        this.event('afterFinish');=0A=
        return;  =0A=
      }=0A=
      var pos   =3D (timePos - this.startOn) / this.totalTime,=0A=
          frame =3D (pos * this.totalFrames).round();=0A=
      if (frame > this.currentFrame) {=0A=
        this.render(pos);=0A=
        this.currentFrame =3D frame;=0A=
      }=0A=
    }=0A=
  },=0A=
  cancel: function() {=0A=
    if (!this.options.sync)=0A=
      Effect.Queues.get(Object.isString(this.options.queue) ? =0A=
        'global' : this.options.queue.scope).remove(this);=0A=
    this.state =3D 'finished';=0A=
  },=0A=
  event: function(eventName) {=0A=
    if (this.options[eventName + 'Internal']) this.options[eventName + =
'Internal'](this);=0A=
    if (this.options[eventName]) this.options[eventName](this);=0A=
  },=0A=
  inspect: function() {=0A=
    var data =3D $H();=0A=
    for(property in this)=0A=
      if (!Object.isFunction(this[property])) data.set(property, =
this[property]);=0A=
    return '#<Effect:' + data.inspect() + ',options:' + =
$H(this.options).inspect() + '>';=0A=
  }=0A=
});=0A=
=0A=
Effect.Parallel =3D Class.create(Effect.Base, {=0A=
  initialize: function(effects) {=0A=
    this.effects =3D effects || [];=0A=
    this.start(arguments[1]);=0A=
  },=0A=
  update: function(position) {=0A=
    this.effects.invoke('render', position);=0A=
  },=0A=
  finish: function(position) {=0A=
    this.effects.each( function(effect) {=0A=
      effect.render(1.0);=0A=
      effect.cancel();=0A=
      effect.event('beforeFinish');=0A=
      if (effect.finish) effect.finish(position);=0A=
      effect.event('afterFinish');=0A=
    });=0A=
  }=0A=
});=0A=
=0A=
Effect.Tween =3D Class.create(Effect.Base, {=0A=
  initialize: function(object, from, to) {=0A=
    object =3D Object.isString(object) ? $(object) : object;=0A=
    var args =3D $A(arguments), method =3D args.last(), =0A=
      options =3D args.length =3D=3D 5 ? args[3] : null;=0A=
    this.method =3D Object.isFunction(method) ? method.bind(object) :=0A=
      Object.isFunction(object[method]) ? object[method].bind(object) : =0A=
      function(value) { object[method] =3D value };=0A=
    this.start(Object.extend({ from: from, to: to }, options || { }));=0A=
  },=0A=
  update: function(position) {=0A=
    this.method(position);=0A=
  }=0A=
});=0A=
=0A=
Effect.Event =3D Class.create(Effect.Base, {=0A=
  initialize: function() {=0A=
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));=0A=
  },=0A=
  update: Prototype.emptyFunction=0A=
});=0A=
=0A=
Effect.Opacity =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    // make this work on IE on elements without 'layout'=0A=
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))=0A=
      this.element.setStyle({zoom: 1});=0A=
    var options =3D Object.extend({=0A=
      from: this.element.getOpacity() || 0.0,=0A=
      to:   1.0=0A=
    }, arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setOpacity(position);=0A=
  }=0A=
});=0A=
=0A=
Effect.Move =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      x:    0,=0A=
      y:    0,=0A=
      mode: 'relative'=0A=
    }, arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    this.element.makePositioned();=0A=
    this.originalLeft =3D parseFloat(this.element.getStyle('left') || =
'0');=0A=
    this.originalTop  =3D parseFloat(this.element.getStyle('top')  || =
'0');=0A=
    if (this.options.mode =3D=3D 'absolute') {=0A=
      this.options.x =3D this.options.x - this.originalLeft;=0A=
      this.options.y =3D this.options.y - this.originalTop;=0A=
    }=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setStyle({=0A=
      left: (this.options.x  * position + this.originalLeft).round() + =
'px',=0A=
      top:  (this.options.y  * position + this.originalTop).round()  + =
'px'=0A=
    });=0A=
  }=0A=
});=0A=
=0A=
// for backwards compatibility=0A=
Effect.MoveBy =3D function(element, toTop, toLeft) {=0A=
  return new Effect.Move(element, =0A=
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));=0A=
};=0A=
=0A=
Effect.Scale =3D Class.create(Effect.Base, {=0A=
  initialize: function(element, percent) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      scaleX: true,=0A=
      scaleY: true,=0A=
      scaleContent: true,=0A=
      scaleFromCenter: false,=0A=
      scaleMode: 'box',        // 'box' or 'contents' or { } with =
provided values=0A=
      scaleFrom: 100.0,=0A=
      scaleTo:   percent=0A=
    }, arguments[2] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    this.restoreAfterFinish =3D this.options.restoreAfterFinish || false;=0A=
    this.elementPositioning =3D this.element.getStyle('position');=0A=
    =0A=
    this.originalStyle =3D { };=0A=
    ['top','left','width','height','fontSize'].each( function(k) {=0A=
      this.originalStyle[k] =3D this.element.style[k];=0A=
    }.bind(this));=0A=
      =0A=
    this.originalTop  =3D this.element.offsetTop;=0A=
    this.originalLeft =3D this.element.offsetLeft;=0A=
    =0A=
    var fontSize =3D this.element.getStyle('font-size') || '100%';=0A=
    ['em','px','%','pt'].each( function(fontSizeType) {=0A=
      if (fontSize.indexOf(fontSizeType)>0) {=0A=
        this.fontSize     =3D parseFloat(fontSize);=0A=
        this.fontSizeType =3D fontSizeType;=0A=
      }=0A=
    }.bind(this));=0A=
    =0A=
    this.factor =3D (this.options.scaleTo - this.options.scaleFrom)/100;=0A=
    =0A=
    this.dims =3D null;=0A=
    if (this.options.scaleMode=3D=3D'box')=0A=
      this.dims =3D [this.element.offsetHeight, =
this.element.offsetWidth];=0A=
    if (/^content/.test(this.options.scaleMode))=0A=
      this.dims =3D [this.element.scrollHeight, =
this.element.scrollWidth];=0A=
    if (!this.dims)=0A=
      this.dims =3D [this.options.scaleMode.originalHeight,=0A=
                   this.options.scaleMode.originalWidth];=0A=
  },=0A=
  update: function(position) {=0A=
    var currentScale =3D (this.options.scaleFrom/100.0) + (this.factor * =
position);=0A=
    if (this.options.scaleContent && this.fontSize)=0A=
      this.element.setStyle({fontSize: this.fontSize * currentScale + =
this.fontSizeType });=0A=
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * =
currentScale);=0A=
  },=0A=
  finish: function(position) {=0A=
    if (this.restoreAfterFinish) =
this.element.setStyle(this.originalStyle);=0A=
  },=0A=
  setDimensions: function(height, width) {=0A=
    var d =3D { };=0A=
    if (this.options.scaleX) d.width =3D width.round() + 'px';=0A=
    if (this.options.scaleY) d.height =3D height.round() + 'px';=0A=
    if (this.options.scaleFromCenter) {=0A=
      var topd  =3D (height - this.dims[0])/2;=0A=
      var leftd =3D (width  - this.dims[1])/2;=0A=
      if (this.elementPositioning =3D=3D 'absolute') {=0A=
        if (this.options.scaleY) d.top =3D this.originalTop-topd + 'px';=0A=
        if (this.options.scaleX) d.left =3D this.originalLeft-leftd + =
'px';=0A=
      } else {=0A=
        if (this.options.scaleY) d.top =3D -topd + 'px';=0A=
        if (this.options.scaleX) d.left =3D -leftd + 'px';=0A=
      }=0A=
    }=0A=
    this.element.setStyle(d);=0A=
  }=0A=
});=0A=
=0A=
Effect.Highlight =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({ startcolor: '#ffff99' }, =
arguments[1] || { });=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    // Prevent executing on elements not in the layout flow=0A=
    if (this.element.getStyle('display')=3D=3D'none') { this.cancel(); =
return; }=0A=
    // Disable background image during the effect=0A=
    this.oldStyle =3D { };=0A=
    if (!this.options.keepBackgroundImage) {=0A=
      this.oldStyle.backgroundImage =3D =
this.element.getStyle('background-image');=0A=
      this.element.setStyle({backgroundImage: 'none'});=0A=
    }=0A=
    if (!this.options.endcolor)=0A=
      this.options.endcolor =3D =
this.element.getStyle('background-color').parseColor('#ffffff');=0A=
    if (!this.options.restorecolor)=0A=
      this.options.restorecolor =3D =
this.element.getStyle('background-color');=0A=
    // init color calculations=0A=
    this._base  =3D $R(0,2).map(function(i){ return =
parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));=0A=
    this._delta =3D $R(0,2).map(function(i){ return =
parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] =
}.bind(this));=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setStyle({backgroundColor: =
$R(0,2).inject('#',function(m,v,i){=0A=
      return =
m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); =
}.bind(this)) });=0A=
  },=0A=
  finish: function() {=0A=
    this.element.setStyle(Object.extend(this.oldStyle, {=0A=
      backgroundColor: this.options.restorecolor=0A=
    }));=0A=
  }=0A=
});=0A=
=0A=
Effect.ScrollTo =3D function(element) {=0A=
  var options =3D arguments[1] || { },=0A=
    scrollOffsets =3D document.viewport.getScrollOffsets(),=0A=
    elementOffsets =3D $(element).cumulativeOffset(),=0A=
    max =3D (window.height || document.body.scrollHeight) - =
document.viewport.getHeight();  =0A=
=0A=
  if (options.offset) elementOffsets[1] +=3D options.offset;=0A=
=0A=
  return new Effect.Tween(null,=0A=
    scrollOffsets.top,=0A=
    elementOffsets[1] > max ? max : elementOffsets[1],=0A=
    options,=0A=
    function(p){ scrollTo(scrollOffsets.left, p.round()) }=0A=
  );=0A=
};=0A=
=0A=
/* ------------- combination effects ------------- */=0A=
=0A=
Effect.Fade =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldOpacity =3D element.getInlineOpacity();=0A=
  var options =3D Object.extend({=0A=
    from: element.getOpacity() || 1.0,=0A=
    to:   0.0,=0A=
    afterFinishInternal: function(effect) { =0A=
      if (effect.options.to!=3D0) return;=0A=
      effect.element.hide().setStyle({opacity: oldOpacity}); =0A=
    }=0A=
  }, arguments[1] || { });=0A=
  return new Effect.Opacity(element,options);=0A=
};=0A=
=0A=
Effect.Appear =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
  from: (element.getStyle('display') =3D=3D 'none' ? 0.0 : =
element.getOpacity() || 0.0),=0A=
  to:   1.0,=0A=
  // force Safari to render floated elements properly=0A=
  afterFinishInternal: function(effect) {=0A=
    effect.element.forceRerendering();=0A=
  },=0A=
  beforeSetup: function(effect) {=0A=
    effect.element.setOpacity(effect.options.from).show(); =0A=
  }}, arguments[1] || { });=0A=
  return new Effect.Opacity(element,options);=0A=
};=0A=
=0A=
Effect.Puff =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D { =0A=
    opacity: element.getInlineOpacity(), =0A=
    position: element.getStyle('position'),=0A=
    top:  element.style.top,=0A=
    left: element.style.left,=0A=
    width: element.style.width,=0A=
    height: element.style.height=0A=
  };=0A=
  return new Effect.Parallel(=0A=
   [ new Effect.Scale(element, 200, =0A=
      { sync: true, scaleFromCenter: true, scaleContent: true, =
restoreAfterFinish: true }), =0A=
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], =0A=
     Object.extend({ duration: 1.0, =0A=
      beforeSetupInternal: function(effect) {=0A=
        Position.absolutize(effect.effects[0].element)=0A=
      },=0A=
      afterFinishInternal: function(effect) {=0A=
         effect.effects[0].element.hide().setStyle(oldStyle); }=0A=
     }, arguments[1] || { })=0A=
   );=0A=
};=0A=
=0A=
Effect.BlindUp =3D function(element) {=0A=
  element =3D $(element);=0A=
  element.makeClipping();=0A=
  return new Effect.Scale(element, 0,=0A=
    Object.extend({ scaleContent: false, =0A=
      scaleX: false, =0A=
      restoreAfterFinish: true,=0A=
      afterFinishInternal: function(effect) {=0A=
        effect.element.hide().undoClipping();=0A=
      } =0A=
    }, arguments[1] || { })=0A=
  );=0A=
};=0A=
=0A=
Effect.BlindDown =3D function(element) {=0A=
  element =3D $(element);=0A=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, 100, Object.extend({ =0A=
    scaleContent: false, =0A=
    scaleX: false,=0A=
    scaleFrom: 0,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makeClipping().setStyle({height: '0px'}).show(); =0A=
    },  =0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.undoClipping();=0A=
    }=0A=
  }, arguments[1] || { }));=0A=
};=0A=
=0A=
Effect.SwitchOff =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldOpacity =3D element.getInlineOpacity();=0A=
  return new Effect.Appear(element, Object.extend({=0A=
    duration: 0.4,=0A=
    from: 0,=0A=
    transition: Effect.Transitions.flicker,=0A=
    afterFinishInternal: function(effect) {=0A=
      new Effect.Scale(effect.element, 1, { =0A=
        duration: 0.3, scaleFromCenter: true,=0A=
        scaleX: false, scaleContent: false, restoreAfterFinish: true,=0A=
        beforeSetup: function(effect) { =0A=
          effect.element.makePositioned().makeClipping();=0A=
        },=0A=
        afterFinishInternal: function(effect) {=0A=
          =
effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: =
oldOpacity});=0A=
        }=0A=
      })=0A=
    }=0A=
  }, arguments[1] || { }));=0A=
};=0A=
=0A=
Effect.DropOut =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    top: element.getStyle('top'),=0A=
    left: element.getStyle('left'),=0A=
    opacity: element.getInlineOpacity() };=0A=
  return new Effect.Parallel(=0A=
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), =0A=
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],=0A=
    Object.extend(=0A=
      { duration: 0.5,=0A=
        beforeSetup: function(effect) {=0A=
          effect.effects[0].element.makePositioned(); =0A=
        },=0A=
        afterFinishInternal: function(effect) {=0A=
          =
effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);=0A=
        } =0A=
      }, arguments[1] || { }));=0A=
};=0A=
=0A=
Effect.Shake =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
    distance: 20,=0A=
    duration: 0.5=0A=
  }, arguments[1] || {});=0A=
  var distance =3D parseFloat(options.distance);=0A=
  var split =3D parseFloat(options.duration) / 10.0;=0A=
  var oldStyle =3D {=0A=
    top: element.getStyle('top'),=0A=
    left: element.getStyle('left') };=0A=
    return new Effect.Move(element,=0A=
      { x:  distance, y: 0, duration: split, afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -distance, y: 0, duration: split, afterFinishInternal: =
function(effect) {=0A=
        effect.element.undoPositioned().setStyle(oldStyle);=0A=
  }}) }}) }}) }}) }}) }});=0A=
};=0A=
=0A=
Effect.SlideDown =3D function(element) {=0A=
  element =3D $(element).cleanWhitespace();=0A=
  // SlideDown need to have the content of the element wrapped in a =
container element with fixed height!=0A=
  var oldInnerBottom =3D element.down().getStyle('bottom');=0A=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, 100, Object.extend({ =0A=
    scaleContent: false, =0A=
    scaleX: false, =0A=
    scaleFrom: window.opera ? 0 : 1,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makePositioned();=0A=
      effect.element.down().makePositioned();=0A=
      if (window.opera) effect.element.setStyle({top: ''});=0A=
      effect.element.makeClipping().setStyle({height: '0px'}).show(); =0A=
    },=0A=
    afterUpdateInternal: function(effect) {=0A=
      effect.element.down().setStyle({bottom:=0A=
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); =0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.undoClipping().undoPositioned();=0A=
      effect.element.down().undoPositioned().setStyle({bottom: =
oldInnerBottom}); }=0A=
    }, arguments[1] || { })=0A=
  );=0A=
};=0A=
=0A=
Effect.SlideUp =3D function(element) {=0A=
  element =3D $(element).cleanWhitespace();=0A=
  var oldInnerBottom =3D element.down().getStyle('bottom');=0A=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, window.opera ? 0 : 1,=0A=
   Object.extend({ scaleContent: false, =0A=
    scaleX: false, =0A=
    scaleMode: 'box',=0A=
    scaleFrom: 100,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makePositioned();=0A=
      effect.element.down().makePositioned();=0A=
      if (window.opera) effect.element.setStyle({top: ''});=0A=
      effect.element.makeClipping().show();=0A=
    },  =0A=
    afterUpdateInternal: function(effect) {=0A=
      effect.element.down().setStyle({bottom:=0A=
        (effect.dims[0] - effect.element.clientHeight) + 'px' });=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.hide().undoClipping().undoPositioned();=0A=
      effect.element.down().undoPositioned().setStyle({bottom: =
oldInnerBottom});=0A=
    }=0A=
   }, arguments[1] || { })=0A=
  );=0A=
};=0A=
=0A=
// Bug in opera makes the TD containing this element expand for a =
instance after finish =0A=
Effect.Squish =3D function(element) {=0A=
  return new Effect.Scale(element, window.opera ? 1 : 0, { =0A=
    restoreAfterFinish: true,=0A=
    beforeSetup: function(effect) {=0A=
      effect.element.makeClipping(); =0A=
    },  =0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.hide().undoClipping(); =0A=
    }=0A=
  });=0A=
};=0A=
=0A=
Effect.Grow =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
    direction: 'center',=0A=
    moveTransition: Effect.Transitions.sinoidal,=0A=
    scaleTransition: Effect.Transitions.sinoidal,=0A=
    opacityTransition: Effect.Transitions.full=0A=
  }, arguments[1] || { });=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    height: element.style.height,=0A=
    width: element.style.width,=0A=
    opacity: element.getInlineOpacity() };=0A=
=0A=
  var dims =3D element.getDimensions();    =0A=
  var initialMoveX, initialMoveY;=0A=
  var moveX, moveY;=0A=
  =0A=
  switch (options.direction) {=0A=
    case 'top-left':=0A=
      initialMoveX =3D initialMoveY =3D moveX =3D moveY =3D 0; =0A=
      break;=0A=
    case 'top-right':=0A=
      initialMoveX =3D dims.width;=0A=
      initialMoveY =3D moveY =3D 0;=0A=
      moveX =3D -dims.width;=0A=
      break;=0A=
    case 'bottom-left':=0A=
      initialMoveX =3D moveX =3D 0;=0A=
      initialMoveY =3D dims.height;=0A=
      moveY =3D -dims.height;=0A=
      break;=0A=
    case 'bottom-right':=0A=
      initialMoveX =3D dims.width;=0A=
      initialMoveY =3D dims.height;=0A=
      moveX =3D -dims.width;=0A=
      moveY =3D -dims.height;=0A=
      break;=0A=
    case 'center':=0A=
      initialMoveX =3D dims.width / 2;=0A=
      initialMoveY =3D dims.height / 2;=0A=
      moveX =3D -dims.width / 2;=0A=
      moveY =3D -dims.height / 2;=0A=
      break;=0A=
  }=0A=
  =0A=
  return new Effect.Move(element, {=0A=
    x: initialMoveX,=0A=
    y: initialMoveY,=0A=
    duration: 0.01, =0A=
    beforeSetup: function(effect) {=0A=
      effect.element.hide().makeClipping().makePositioned();=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      new Effect.Parallel(=0A=
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, =
from: 0.0, transition: options.opacityTransition }),=0A=
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: =
true, transition: options.moveTransition }),=0A=
          new Effect.Scale(effect.element, 100, {=0A=
            scaleMode: { originalHeight: dims.height, originalWidth: =
dims.width }, =0A=
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: =
options.scaleTransition, restoreAfterFinish: true})=0A=
        ], Object.extend({=0A=
             beforeSetup: function(effect) {=0A=
               effect.effects[0].element.setStyle({height: =
'0px'}).show(); =0A=
             },=0A=
             afterFinishInternal: function(effect) {=0A=
               =
effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldSty=
le); =0A=
             }=0A=
           }, options)=0A=
      )=0A=
    }=0A=
  });=0A=
};=0A=
=0A=
Effect.Shrink =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
    direction: 'center',=0A=
    moveTransition: Effect.Transitions.sinoidal,=0A=
    scaleTransition: Effect.Transitions.sinoidal,=0A=
    opacityTransition: Effect.Transitions.none=0A=
  }, arguments[1] || { });=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    height: element.style.height,=0A=
    width: element.style.width,=0A=
    opacity: element.getInlineOpacity() };=0A=
=0A=
  var dims =3D element.getDimensions();=0A=
  var moveX, moveY;=0A=
  =0A=
  switch (options.direction) {=0A=
    case 'top-left':=0A=
      moveX =3D moveY =3D 0;=0A=
      break;=0A=
    case 'top-right':=0A=
      moveX =3D dims.width;=0A=
      moveY =3D 0;=0A=
      break;=0A=
    case 'bottom-left':=0A=
      moveX =3D 0;=0A=
      moveY =3D dims.height;=0A=
      break;=0A=
    case 'bottom-right':=0A=
      moveX =3D dims.width;=0A=
      moveY =3D dims.height;=0A=
      break;=0A=
    case 'center':  =0A=
      moveX =3D dims.width / 2;=0A=
      moveY =3D dims.height / 2;=0A=
      break;=0A=
  }=0A=
  =0A=
  return new Effect.Parallel(=0A=
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, =
transition: options.opacityTransition }),=0A=
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, =
transition: options.scaleTransition, restoreAfterFinish: true}),=0A=
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, =
transition: options.moveTransition })=0A=
    ], Object.extend({            =0A=
         beforeStartInternal: function(effect) {=0A=
           effect.effects[0].element.makePositioned().makeClipping(); =0A=
         },=0A=
         afterFinishInternal: function(effect) {=0A=
           =
effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle=
(oldStyle); }=0A=
       }, options)=0A=
  );=0A=
};=0A=
=0A=
Effect.Pulsate =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options    =3D arguments[1] || { };=0A=
  var oldOpacity =3D element.getInlineOpacity();=0A=
  var transition =3D options.transition || Effect.Transitions.sinoidal;=0A=
  var reverser   =3D function(pos){ return =
transition(1-Effect.Transitions.pulse(pos, options.pulses)) };=0A=
  reverser.bind(transition);=0A=
  return new Effect.Opacity(element, =0A=
    Object.extend(Object.extend({  duration: 2.0, from: 0,=0A=
      afterFinishInternal: function(effect) { =
effect.element.setStyle({opacity: oldOpacity}); }=0A=
    }, options), {transition: reverser}));=0A=
};=0A=
=0A=
Effect.Fold =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    width: element.style.width,=0A=
    height: element.style.height };=0A=
  element.makeClipping();=0A=
  return new Effect.Scale(element, 5, Object.extend({   =0A=
    scaleContent: false,=0A=
    scaleX: false,=0A=
    afterFinishInternal: function(effect) {=0A=
    new Effect.Scale(element, 1, { =0A=
      scaleContent: false, =0A=
      scaleY: false,=0A=
      afterFinishInternal: function(effect) {=0A=
        effect.element.hide().undoClipping().setStyle(oldStyle);=0A=
      } });=0A=
  }}, arguments[1] || { }));=0A=
};=0A=
=0A=
Effect.Morph =3D Class.create(Effect.Base, {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if (!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      style: { }=0A=
    }, arguments[1] || { });=0A=
    =0A=
    if (!Object.isString(options.style)) this.style =3D =
$H(options.style);=0A=
    else {=0A=
      if (options.style.include(':'))=0A=
        this.style =3D options.style.parseStyle();=0A=
      else {=0A=
        this.element.addClassName(options.style);=0A=
        this.style =3D $H(this.element.getStyles());=0A=
        this.element.removeClassName(options.style);=0A=
        var css =3D this.element.getStyles();=0A=
        this.style =3D this.style.reject(function(style) {=0A=
          return style.value =3D=3D css[style.key];=0A=
        });=0A=
        options.afterFinishInternal =3D function(effect) {=0A=
          effect.element.addClassName(effect.options.style);=0A=
          effect.transforms.each(function(transform) {=0A=
            effect.element.style[transform.style] =3D '';=0A=
          });=0A=
        }=0A=
      }=0A=
    }=0A=
    this.start(options);=0A=
  },=0A=
  =0A=
  setup: function(){=0A=
    function parseColor(color){=0A=
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) =
color =3D '#ffffff';=0A=
      color =3D color.parseColor();=0A=
      return $R(0,2).map(function(i){=0A=
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) =0A=
      });=0A=
    }=0A=
    this.transforms =3D this.style.map(function(pair){=0A=
      var property =3D pair[0], value =3D pair[1], unit =3D null;=0A=
=0A=
      if (value.parseColor('#zzzzzz') !=3D '#zzzzzz') {=0A=
        value =3D value.parseColor();=0A=
        unit  =3D 'color';=0A=
      } else if (property =3D=3D 'opacity') {=0A=
        value =3D parseFloat(value);=0A=
        if (Prototype.Browser.IE && =
(!this.element.currentStyle.hasLayout))=0A=
          this.element.setStyle({zoom: 1});=0A=
      } else if (Element.CSS_LENGTH.test(value)) {=0A=
          var components =3D value.match(/^([\+\-]?[0-9\.]+)(.*)$/);=0A=
          value =3D parseFloat(components[1]);=0A=
          unit =3D (components.length =3D=3D 3) ? components[2] : null;=0A=
      }=0A=
=0A=
      var originalValue =3D this.element.getStyle(property);=0A=
      return { =0A=
        style: property.camelize(), =0A=
        originalValue: unit=3D=3D'color' ? parseColor(originalValue) : =
parseFloat(originalValue || 0), =0A=
        targetValue: unit=3D=3D'color' ? parseColor(value) : value,=0A=
        unit: unit=0A=
      };=0A=
    }.bind(this)).reject(function(transform){=0A=
      return (=0A=
        (transform.originalValue =3D=3D transform.targetValue) ||=0A=
        (=0A=
          transform.unit !=3D 'color' &&=0A=
          (isNaN(transform.originalValue) || =
isNaN(transform.targetValue))=0A=
        )=0A=
      )=0A=
    });=0A=
  },=0A=
  update: function(position) {=0A=
    var style =3D { }, transform, i =3D this.transforms.length;=0A=
    while(i--)=0A=
      style[(transform =3D this.transforms[i]).style] =3D =0A=
        transform.unit=3D=3D'color' ? '#'+=0A=
          (Math.round(transform.originalValue[0]+=0A=
            =
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorP=
art() +=0A=
          (Math.round(transform.originalValue[1]+=0A=
            =
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorP=
art() +=0A=
          (Math.round(transform.originalValue[2]+=0A=
            =
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorP=
art() :=0A=
        (transform.originalValue +=0A=
          (transform.targetValue - transform.originalValue) * =
position).toFixed(3) + =0A=
            (transform.unit =3D=3D=3D null ? '' : transform.unit);=0A=
    this.element.setStyle(style, true);=0A=
  }=0A=
});=0A=
=0A=
Effect.Transform =3D Class.create({=0A=
  initialize: function(tracks){=0A=
    this.tracks  =3D [];=0A=
    this.options =3D arguments[1] || { };=0A=
    this.addTracks(tracks);=0A=
  },=0A=
  addTracks: function(tracks){=0A=
    tracks.each(function(track){=0A=
      track =3D $H(track);=0A=
      var data =3D track.values().first();=0A=
      this.tracks.push($H({=0A=
        ids:     track.keys().first(),=0A=
        effect:  Effect.Morph,=0A=
        options: { style: data }=0A=
      }));=0A=
    }.bind(this));=0A=
    return this;=0A=
  },=0A=
  play: function(){=0A=
    return new Effect.Parallel(=0A=
      this.tracks.map(function(track){=0A=
        var ids =3D track.get('ids'), effect =3D track.get('effect'), =
options =3D track.get('options');=0A=
        var elements =3D [$(ids) || $$(ids)].flatten();=0A=
        return elements.map(function(e){ return new effect(e, =
Object.extend({ sync:true }, options)) });=0A=
      }).flatten(),=0A=
      this.options=0A=
    );=0A=
  }=0A=
});=0A=
=0A=
Element.CSS_PROPERTIES =3D $w(=0A=
  'backgroundColor backgroundPosition borderBottomColor =
borderBottomStyle ' + =0A=
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +=0A=
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +=0A=
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +=0A=
  'fontSize fontWeight height left letterSpacing lineHeight ' +=0A=
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight =
'+=0A=
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +=0A=
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +=0A=
  'right textIndent top width wordSpacing zIndex');=0A=
  =0A=
Element.CSS_LENGTH =3D =
/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;=0A=
=0A=
String.__parseStyleElement =3D document.createElement('div');=0A=
String.prototype.parseStyle =3D function(){=0A=
  var style, styleRules =3D $H();=0A=
  if (Prototype.Browser.WebKit)=0A=
    style =3D new Element('div',{style:this}).style;=0A=
  else {=0A=
    String.__parseStyleElement.innerHTML =3D '<div style=3D"' + this + =
'"></div>';=0A=
    style =3D String.__parseStyleElement.childNodes[0].style;=0A=
  }=0A=
  =0A=
  Element.CSS_PROPERTIES.each(function(property){=0A=
    if (style[property]) styleRules.set(property, style[property]); =0A=
  });=0A=
  =0A=
  if (Prototype.Browser.IE && this.include('opacity'))=0A=
    styleRules.set('opacity', =
this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);=0A=
=0A=
  return styleRules;=0A=
};=0A=
=0A=
if (document.defaultView && document.defaultView.getComputedStyle) {=0A=
  Element.getStyles =3D function(element) {=0A=
    var css =3D document.defaultView.getComputedStyle($(element), null);=0A=
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) =
{=0A=
      styles[property] =3D css[property];=0A=
      return styles;=0A=
    });=0A=
  };=0A=
} else {=0A=
  Element.getStyles =3D function(element) {=0A=
    element =3D $(element);=0A=
    var css =3D element.currentStyle, styles;=0A=
    styles =3D Element.CSS_PROPERTIES.inject({ }, function(hash, =
property) {=0A=
      hash.set(property, css[property]);=0A=
      return hash;=0A=
    });=0A=
    if (!styles.opacity) styles.set('opacity', element.getOpacity());=0A=
    return styles;=0A=
  };=0A=
};=0A=
=0A=
Effect.Methods =3D {=0A=
  morph: function(element, style) {=0A=
    element =3D $(element);=0A=
    new Effect.Morph(element, Object.extend({ style: style }, =
arguments[2] || { }));=0A=
    return element;=0A=
  },=0A=
  visualEffect: function(element, effect, options) {=0A=
    element =3D $(element)=0A=
    var s =3D effect.dasherize().camelize(), klass =3D =
s.charAt(0).toUpperCase() + s.substring(1);=0A=
    new Effect[klass](element, options);=0A=
    return element;=0A=
  },=0A=
  highlight: function(element, options) {=0A=
    element =3D $(element);=0A=
    new Effect.Highlight(element, options);=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+=0A=
  'pulsate shake puff squish switchOff dropOut').each(=0A=
  function(effect) { =0A=
    Effect.Methods[effect] =3D function(element, options){=0A=
      element =3D $(element);=0A=
      Effect[effect.charAt(0).toUpperCase() + =
effect.substring(1)](element, options);=0A=
      return element;=0A=
    }=0A=
  }=0A=
);=0A=
=0A=
$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes =
collectTextNodesIgnoreClass getStyles').each( =0A=
  function(f) { Effect.Methods[f] =3D Element[f]; }=0A=
);=0A=
=0A=
Element.addMethods(Effect.Methods);=0A=

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/javascripts/dragdrop.js?1238029555

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2007 Sammi Williams =
(http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
if(Object.isUndefined(Effect))=0A=
  throw("dragdrop.js requires including script.aculo.us' effects.js =
library");=0A=
=0A=
var Droppables =3D {=0A=
  drops: [],=0A=
=0A=
  remove: function(element) {=0A=
    this.drops =3D this.drops.reject(function(d) { return =
d.element=3D=3D$(element) });=0A=
  },=0A=
=0A=
  add: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend({=0A=
      greedy:     true,=0A=
      hoverclass: null,=0A=
      tree:       false=0A=
    }, arguments[1] || { });=0A=
=0A=
    // cache containers=0A=
    if(options.containment) {=0A=
      options._containers =3D [];=0A=
      var containment =3D options.containment;=0A=
      if(Object.isArray(containment)) {=0A=
        containment.each( function(c) { options._containers.push($(c)) =
});=0A=
      } else {=0A=
        options._containers.push($(containment));=0A=
      }=0A=
    }=0A=
    =0A=
    if(options.accept) options.accept =3D [options.accept].flatten();=0A=
=0A=
    Element.makePositioned(element); // fix IE=0A=
    options.element =3D element;=0A=
=0A=
    this.drops.push(options);=0A=
  },=0A=
  =0A=
  findDeepestChild: function(drops) {=0A=
    deepest =3D drops[0];=0A=
      =0A=
    for (i =3D 1; i < drops.length; ++i)=0A=
      if (Element.isParent(drops[i].element, deepest.element))=0A=
        deepest =3D drops[i];=0A=
    =0A=
    return deepest;=0A=
  },=0A=
=0A=
  isContained: function(element, drop) {=0A=
    var containmentNode;=0A=
    if(drop.tree) {=0A=
      containmentNode =3D element.treeNode; =0A=
    } else {=0A=
      containmentNode =3D element.parentNode;=0A=
    }=0A=
    return drop._containers.detect(function(c) { return containmentNode =
=3D=3D c });=0A=
  },=0A=
  =0A=
  isAffected: function(point, element, drop) {=0A=
    return (=0A=
      (drop.element!=3Delement) &&=0A=
      ((!drop._containers) ||=0A=
        this.isContained(element, drop)) &&=0A=
      ((!drop.accept) ||=0A=
        (Element.classNames(element).detect( =0A=
          function(v) { return drop.accept.include(v) } ) )) &&=0A=
      Position.within(drop.element, point[0], point[1]) );=0A=
  },=0A=
=0A=
  deactivate: function(drop) {=0A=
    if(drop.hoverclass)=0A=
      Element.removeClassName(drop.element, drop.hoverclass);=0A=
    this.last_active =3D null;=0A=
  },=0A=
=0A=
  activate: function(drop) {=0A=
    if(drop.hoverclass)=0A=
      Element.addClassName(drop.element, drop.hoverclass);=0A=
    this.last_active =3D drop;=0A=
  },=0A=
=0A=
  show: function(point, element) {=0A=
    if(!this.drops.length) return;=0A=
    var drop, affected =3D [];=0A=
    =0A=
    this.drops.each( function(drop) {=0A=
      if(Droppables.isAffected(point, element, drop))=0A=
        affected.push(drop);=0A=
    });=0A=
        =0A=
    if(affected.length>0)=0A=
      drop =3D Droppables.findDeepestChild(affected);=0A=
=0A=
    if(this.last_active && this.last_active !=3D drop) =
this.deactivate(this.last_active);=0A=
    if (drop) {=0A=
      Position.within(drop.element, point[0], point[1]);=0A=
      if(drop.onHover)=0A=
        drop.onHover(element, drop.element, =
Position.overlap(drop.overlap, drop.element));=0A=
      =0A=
      if (drop !=3D this.last_active) Droppables.activate(drop);=0A=
    }=0A=
  },=0A=
=0A=
  fire: function(event, element) {=0A=
    if(!this.last_active) return;=0A=
    Position.prepare();=0A=
=0A=
    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], =
element, this.last_active))=0A=
      if (this.last_active.onDrop) {=0A=
        this.last_active.onDrop(element, this.last_active.element, =
event); =0A=
        return true; =0A=
      }=0A=
  },=0A=
=0A=
  reset: function() {=0A=
    if(this.last_active)=0A=
      this.deactivate(this.last_active);=0A=
  }=0A=
}=0A=
=0A=
var Draggables =3D {=0A=
  drags: [],=0A=
  observers: [],=0A=
  =0A=
  register: function(draggable) {=0A=
    if(this.drags.length =3D=3D 0) {=0A=
      this.eventMouseUp   =3D this.endDrag.bindAsEventListener(this);=0A=
      this.eventMouseMove =3D this.updateDrag.bindAsEventListener(this);=0A=
      this.eventKeypress  =3D this.keyPress.bindAsEventListener(this);=0A=
      =0A=
      Event.observe(document, "mouseup", this.eventMouseUp);=0A=
      Event.observe(document, "mousemove", this.eventMouseMove);=0A=
      Event.observe(document, "keypress", this.eventKeypress);=0A=
    }=0A=
    this.drags.push(draggable);=0A=
  },=0A=
  =0A=
  unregister: function(draggable) {=0A=
    this.drags =3D this.drags.reject(function(d) { return =
d=3D=3Ddraggable });=0A=
    if(this.drags.length =3D=3D 0) {=0A=
      Event.stopObserving(document, "mouseup", this.eventMouseUp);=0A=
      Event.stopObserving(document, "mousemove", this.eventMouseMove);=0A=
      Event.stopObserving(document, "keypress", this.eventKeypress);=0A=
    }=0A=
  },=0A=
  =0A=
  activate: function(draggable) {=0A=
    if(draggable.options.delay) { =0A=
      this._timeout =3D setTimeout(function() { =0A=
        Draggables._timeout =3D null; =0A=
        window.focus(); =0A=
        Draggables.activeDraggable =3D draggable; =0A=
      }.bind(this), draggable.options.delay); =0A=
    } else {=0A=
      window.focus(); // allows keypress events if window isn't =
currently focused, fails for Safari=0A=
      this.activeDraggable =3D draggable;=0A=
    }=0A=
  },=0A=
  =0A=
  deactivate: function() {=0A=
    this.activeDraggable =3D null;=0A=
  },=0A=
  =0A=
  updateDrag: function(event) {=0A=
    if(!this.activeDraggable) return;=0A=
    var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
    // Mozilla-based browsers fire successive mousemove events with=0A=
    // the same coordinates, prevent needless redrawing (moz bug?)=0A=
    if(this._lastPointer && (this._lastPointer.inspect() =3D=3D =
pointer.inspect())) return;=0A=
    this._lastPointer =3D pointer;=0A=
    =0A=
    this.activeDraggable.updateDrag(event, pointer);=0A=
  },=0A=
  =0A=
  endDrag: function(event) {=0A=
    if(this._timeout) { =0A=
      clearTimeout(this._timeout); =0A=
      this._timeout =3D null; =0A=
    }=0A=
    if(!this.activeDraggable) return;=0A=
    this._lastPointer =3D null;=0A=
    this.activeDraggable.endDrag(event);=0A=
    this.activeDraggable =3D null;=0A=
  },=0A=
  =0A=
  keyPress: function(event) {=0A=
    if(this.activeDraggable)=0A=
      this.activeDraggable.keyPress(event);=0A=
  },=0A=
  =0A=
  addObserver: function(observer) {=0A=
    this.observers.push(observer);=0A=
    this._cacheObserverCallbacks();=0A=
  },=0A=
  =0A=
  removeObserver: function(element) {  // element instead of observer =
fixes mem leaks=0A=
    this.observers =3D this.observers.reject( function(o) { return =
o.element=3D=3Delement });=0A=
    this._cacheObserverCallbacks();=0A=
  },=0A=
  =0A=
  notify: function(eventName, draggable, event) {  // 'onStart', =
'onEnd', 'onDrag'=0A=
    if(this[eventName+'Count'] > 0)=0A=
      this.observers.each( function(o) {=0A=
        if(o[eventName]) o[eventName](eventName, draggable, event);=0A=
      });=0A=
    if(draggable.options[eventName]) =
draggable.options[eventName](draggable, event);=0A=
  },=0A=
  =0A=
  _cacheObserverCallbacks: function() {=0A=
    ['onStart','onEnd','onDrag'].each( function(eventName) {=0A=
      Draggables[eventName+'Count'] =3D Draggables.observers.select(=0A=
        function(o) { return o[eventName]; }=0A=
      ).length;=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Draggable =3D Class.create({=0A=
  initialize: function(element) {=0A=
    var defaults =3D {=0A=
      handle: false,=0A=
      reverteffect: function(element, top_offset, left_offset) {=0A=
        var dur =3D =
Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;=0A=
        new Effect.Move(element, { x: -left_offset, y: -top_offset, =
duration: dur,=0A=
          queue: {scope:'_draggable', position:'end'}=0A=
        });=0A=
      },=0A=
      endeffect: function(element) {=0A=
        var toOpacity =3D Object.isNumber(element._opacity) ? =
element._opacity : 1.0;=0A=
        new Effect.Opacity(element, {duration:0.2, from:0.7, =
to:toOpacity, =0A=
          queue: {scope:'_draggable', position:'end'},=0A=
          afterFinish: function(){ =0A=
            Draggable._dragging[element] =3D false =0A=
          }=0A=
        }); =0A=
      },=0A=
      zindex: 1000,=0A=
      revert: false,=0A=
      quiet: false,=0A=
      scroll: false,=0A=
      scrollSensitivity: 20,=0A=
      scrollSpeed: 15,=0A=
      snap: false,  // false, or xy or [x,y] or function(x,y){ return =
[x,y] }=0A=
      delay: 0=0A=
    };=0A=
    =0A=
    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))=0A=
      Object.extend(defaults, {=0A=
        starteffect: function(element) {=0A=
          element._opacity =3D Element.getOpacity(element);=0A=
          Draggable._dragging[element] =3D true;=0A=
          new Effect.Opacity(element, {duration:0.2, =
from:element._opacity, to:0.7}); =0A=
        }=0A=
      });=0A=
    =0A=
    var options =3D Object.extend(defaults, arguments[1] || { });=0A=
=0A=
    this.element =3D $(element);=0A=
    =0A=
    if(options.handle && Object.isString(options.handle))=0A=
      this.handle =3D this.element.down('.'+options.handle, 0);=0A=
    =0A=
    if(!this.handle) this.handle =3D $(options.handle);=0A=
    if(!this.handle) this.handle =3D this.element;=0A=
    =0A=
    if(options.scroll && !options.scroll.scrollTo && =
!options.scroll.outerHTML) {=0A=
      options.scroll =3D $(options.scroll);=0A=
      this._isScrollChild =3D Element.childOf(this.element, =
options.scroll);=0A=
    }=0A=
=0A=
    Element.makePositioned(this.element); // fix IE    =0A=
=0A=
    this.options  =3D options;=0A=
    this.dragging =3D false;   =0A=
=0A=
    this.eventMouseDown =3D this.initDrag.bindAsEventListener(this);=0A=
    Event.observe(this.handle, "mousedown", this.eventMouseDown);=0A=
    =0A=
    Draggables.register(this);=0A=
  },=0A=
  =0A=
  destroy: function() {=0A=
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);=0A=
    Draggables.unregister(this);=0A=
  },=0A=
  =0A=
  currentDelta: function() {=0A=
    return([=0A=
      parseInt(Element.getStyle(this.element,'left') || '0'),=0A=
      parseInt(Element.getStyle(this.element,'top') || '0')]);=0A=
  },=0A=
  =0A=
  initDrag: function(event) {=0A=
    if(!Object.isUndefined(Draggable._dragging[this.element]) &&=0A=
      Draggable._dragging[this.element]) return;=0A=
    if(Event.isLeftClick(event)) {    =0A=
      // abort on form elements, fixes a Firefox issue=0A=
      var src =3D Event.element(event);=0A=
      if((tag_name =3D src.tagName.toUpperCase()) && (=0A=
        tag_name=3D=3D'INPUT' ||=0A=
        tag_name=3D=3D'SELECT' ||=0A=
        tag_name=3D=3D'OPTION' ||=0A=
        tag_name=3D=3D'BUTTON' ||=0A=
        tag_name=3D=3D'TEXTAREA')) return;=0A=
        =0A=
      var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
      var pos     =3D Position.cumulativeOffset(this.element);=0A=
      this.offset =3D [0,1].map( function(i) { return (pointer[i] - =
pos[i]) });=0A=
      =0A=
      Draggables.activate(this);=0A=
      Event.stop(event);=0A=
    }=0A=
  },=0A=
  =0A=
  startDrag: function(event) {=0A=
    this.dragging =3D true;=0A=
    if(!this.delta)=0A=
      this.delta =3D this.currentDelta();=0A=
    =0A=
    if(this.options.zindex) {=0A=
      this.originalZ =3D =
parseInt(Element.getStyle(this.element,'z-index') || 0);=0A=
      this.element.style.zIndex =3D this.options.zindex;=0A=
    }=0A=
    =0A=
    if(this.options.ghosting) {=0A=
      this._clone =3D this.element.cloneNode(true);=0A=
      this.element._originallyAbsolute =3D =
(this.element.getStyle('position') =3D=3D 'absolute');=0A=
      if (!this.element._originallyAbsolute)=0A=
        Position.absolutize(this.element);=0A=
      this.element.parentNode.insertBefore(this._clone, this.element);=0A=
    }=0A=
    =0A=
    if(this.options.scroll) {=0A=
      if (this.options.scroll =3D=3D window) {=0A=
        var where =3D this._getWindowScroll(this.options.scroll);=0A=
        this.originalScrollLeft =3D where.left;=0A=
        this.originalScrollTop =3D where.top;=0A=
      } else {=0A=
        this.originalScrollLeft =3D this.options.scroll.scrollLeft;=0A=
        this.originalScrollTop =3D this.options.scroll.scrollTop;=0A=
      }=0A=
    }=0A=
    =0A=
    Draggables.notify('onStart', this, event);=0A=
        =0A=
    if(this.options.starteffect) this.options.starteffect(this.element);=0A=
  },=0A=
  =0A=
  updateDrag: function(event, pointer) {=0A=
    if(!this.dragging) this.startDrag(event);=0A=
    =0A=
    if(!this.options.quiet){=0A=
      Position.prepare();=0A=
      Droppables.show(pointer, this.element);=0A=
    }=0A=
    =0A=
    Draggables.notify('onDrag', this, event);=0A=
    =0A=
    this.draw(pointer);=0A=
    if(this.options.change) this.options.change(this);=0A=
    =0A=
    if(this.options.scroll) {=0A=
      this.stopScrolling();=0A=
      =0A=
      var p;=0A=
      if (this.options.scroll =3D=3D window) {=0A=
        with(this._getWindowScroll(this.options.scroll)) { p =3D [ left, =
top, left+width, top+height ]; }=0A=
      } else {=0A=
        p =3D Position.page(this.options.scroll);=0A=
        p[0] +=3D this.options.scroll.scrollLeft + Position.deltaX;=0A=
        p[1] +=3D this.options.scroll.scrollTop + Position.deltaY;=0A=
        p.push(p[0]+this.options.scroll.offsetWidth);=0A=
        p.push(p[1]+this.options.scroll.offsetHeight);=0A=
      }=0A=
      var speed =3D [0,0];=0A=
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] =
=3D pointer[0]-(p[0]+this.options.scrollSensitivity);=0A=
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] =
=3D pointer[1]-(p[1]+this.options.scrollSensitivity);=0A=
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] =
=3D pointer[0]-(p[2]-this.options.scrollSensitivity);=0A=
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] =
=3D pointer[1]-(p[3]-this.options.scrollSensitivity);=0A=
      this.startScrolling(speed);=0A=
    }=0A=
    =0A=
    // fix AppleWebKit rendering=0A=
    if(Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
    =0A=
    Event.stop(event);=0A=
  },=0A=
  =0A=
  finishDrag: function(event, success) {=0A=
    this.dragging =3D false;=0A=
    =0A=
    if(this.options.quiet){=0A=
      Position.prepare();=0A=
      var pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
      Droppables.show(pointer, this.element);=0A=
    }=0A=
=0A=
    if(this.options.ghosting) {=0A=
      if (!this.element._originallyAbsolute)=0A=
        Position.relativize(this.element);=0A=
      delete this.element._originallyAbsolute;=0A=
      Element.remove(this._clone);=0A=
      this._clone =3D null;=0A=
    }=0A=
=0A=
    var dropped =3D false; =0A=
    if(success) { =0A=
      dropped =3D Droppables.fire(event, this.element); =0A=
      if (!dropped) dropped =3D false; =0A=
    }=0A=
    if(dropped && this.options.onDropped) =
this.options.onDropped(this.element);=0A=
    Draggables.notify('onEnd', this, event);=0A=
=0A=
    var revert =3D this.options.revert;=0A=
    if(revert && Object.isFunction(revert)) revert =3D =
revert(this.element);=0A=
    =0A=
    var d =3D this.currentDelta();=0A=
    if(revert && this.options.reverteffect) {=0A=
      if (dropped =3D=3D 0 || revert !=3D 'failure')=0A=
        this.options.reverteffect(this.element,=0A=
          d[1]-this.delta[1], d[0]-this.delta[0]);=0A=
    } else {=0A=
      this.delta =3D d;=0A=
    }=0A=
=0A=
    if(this.options.zindex)=0A=
      this.element.style.zIndex =3D this.originalZ;=0A=
=0A=
    if(this.options.endeffect) =0A=
      this.options.endeffect(this.element);=0A=
      =0A=
    Draggables.deactivate(this);=0A=
    Droppables.reset();=0A=
  },=0A=
  =0A=
  keyPress: function(event) {=0A=
    if(event.keyCode!=3DEvent.KEY_ESC) return;=0A=
    this.finishDrag(event, false);=0A=
    Event.stop(event);=0A=
  },=0A=
  =0A=
  endDrag: function(event) {=0A=
    if(!this.dragging) return;=0A=
    this.stopScrolling();=0A=
    this.finishDrag(event, true);=0A=
    Event.stop(event);=0A=
  },=0A=
  =0A=
  draw: function(point) {=0A=
    var pos =3D Position.cumulativeOffset(this.element);=0A=
    if(this.options.ghosting) {=0A=
      var r   =3D Position.realOffset(this.element);=0A=
      pos[0] +=3D r[0] - Position.deltaX; pos[1] +=3D r[1] - =
Position.deltaY;=0A=
    }=0A=
    =0A=
    var d =3D this.currentDelta();=0A=
    pos[0] -=3D d[0]; pos[1] -=3D d[1];=0A=
    =0A=
    if(this.options.scroll && (this.options.scroll !=3D window && =
this._isScrollChild)) {=0A=
      pos[0] -=3D this.options.scroll.scrollLeft-this.originalScrollLeft;=0A=
      pos[1] -=3D this.options.scroll.scrollTop-this.originalScrollTop;=0A=
    }=0A=
    =0A=
    var p =3D [0,1].map(function(i){ =0A=
      return (point[i]-pos[i]-this.offset[i]) =0A=
    }.bind(this));=0A=
    =0A=
    if(this.options.snap) {=0A=
      if(Object.isFunction(this.options.snap)) {=0A=
        p =3D this.options.snap(p[0],p[1],this);=0A=
      } else {=0A=
      if(Object.isArray(this.options.snap)) {=0A=
        p =3D p.map( function(v, i) {=0A=
          return (v/this.options.snap[i]).round()*this.options.snap[i] =
}.bind(this))=0A=
      } else {=0A=
        p =3D p.map( function(v) {=0A=
          return (v/this.options.snap).round()*this.options.snap =
}.bind(this))=0A=
      }=0A=
    }}=0A=
    =0A=
    var style =3D this.element.style;=0A=
    if((!this.options.constraint) || =
(this.options.constraint=3D=3D'horizontal'))=0A=
      style.left =3D p[0] + "px";=0A=
    if((!this.options.constraint) || =
(this.options.constraint=3D=3D'vertical'))=0A=
      style.top  =3D p[1] + "px";=0A=
    =0A=
    if(style.visibility=3D=3D"hidden") style.visibility =3D ""; // fix =
gecko rendering=0A=
  },=0A=
  =0A=
  stopScrolling: function() {=0A=
    if(this.scrollInterval) {=0A=
      clearInterval(this.scrollInterval);=0A=
      this.scrollInterval =3D null;=0A=
      Draggables._lastScrollPointer =3D null;=0A=
    }=0A=
  },=0A=
  =0A=
  startScrolling: function(speed) {=0A=
    if(!(speed[0] || speed[1])) return;=0A=
    this.scrollSpeed =3D =
[speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];=0A=
    this.lastScrolled =3D new Date();=0A=
    this.scrollInterval =3D setInterval(this.scroll.bind(this), 10);=0A=
  },=0A=
  =0A=
  scroll: function() {=0A=
    var current =3D new Date();=0A=
    var delta =3D current - this.lastScrolled;=0A=
    this.lastScrolled =3D current;=0A=
    if(this.options.scroll =3D=3D window) {=0A=
      with (this._getWindowScroll(this.options.scroll)) {=0A=
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {=0A=
          var d =3D delta / 1000;=0A=
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], =
top + d*this.scrollSpeed[1] );=0A=
        }=0A=
      }=0A=
    } else {=0A=
      this.options.scroll.scrollLeft +=3D this.scrollSpeed[0] * delta / =
1000;=0A=
      this.options.scroll.scrollTop  +=3D this.scrollSpeed[1] * delta / =
1000;=0A=
    }=0A=
    =0A=
    Position.prepare();=0A=
    Droppables.show(Draggables._lastPointer, this.element);=0A=
    Draggables.notify('onDrag', this);=0A=
    if (this._isScrollChild) {=0A=
      Draggables._lastScrollPointer =3D Draggables._lastScrollPointer || =
$A(Draggables._lastPointer);=0A=
      Draggables._lastScrollPointer[0] +=3D this.scrollSpeed[0] * delta =
/ 1000;=0A=
      Draggables._lastScrollPointer[1] +=3D this.scrollSpeed[1] * delta =
/ 1000;=0A=
      if (Draggables._lastScrollPointer[0] < 0)=0A=
        Draggables._lastScrollPointer[0] =3D 0;=0A=
      if (Draggables._lastScrollPointer[1] < 0)=0A=
        Draggables._lastScrollPointer[1] =3D 0;=0A=
      this.draw(Draggables._lastScrollPointer);=0A=
    }=0A=
    =0A=
    if(this.options.change) this.options.change(this);=0A=
  },=0A=
  =0A=
  _getWindowScroll: function(w) {=0A=
    var T, L, W, H;=0A=
    with (w.document) {=0A=
      if (w.document.documentElement && documentElement.scrollTop) {=0A=
        T =3D documentElement.scrollTop;=0A=
        L =3D documentElement.scrollLeft;=0A=
      } else if (w.document.body) {=0A=
        T =3D body.scrollTop;=0A=
        L =3D body.scrollLeft;=0A=
      }=0A=
      if (w.innerWidth) {=0A=
        W =3D w.innerWidth;=0A=
        H =3D w.innerHeight;=0A=
      } else if (w.document.documentElement && =
documentElement.clientWidth) {=0A=
        W =3D documentElement.clientWidth;=0A=
        H =3D documentElement.clientHeight;=0A=
      } else {=0A=
        W =3D body.offsetWidth;=0A=
        H =3D body.offsetHeight=0A=
      }=0A=
    }=0A=
    return { top: T, left: L, width: W, height: H };=0A=
  }=0A=
});=0A=
=0A=
Draggable._dragging =3D { };=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var SortableObserver =3D Class.create({=0A=
  initialize: function(element, observer) {=0A=
    this.element   =3D $(element);=0A=
    this.observer  =3D observer;=0A=
    this.lastValue =3D Sortable.serialize(this.element);=0A=
  },=0A=
  =0A=
  onStart: function() {=0A=
    this.lastValue =3D Sortable.serialize(this.element);=0A=
  },=0A=
  =0A=
  onEnd: function() {=0A=
    Sortable.unmark();=0A=
    if(this.lastValue !=3D Sortable.serialize(this.element))=0A=
      this.observer(this.element)=0A=
  }=0A=
});=0A=
=0A=
var Sortable =3D {=0A=
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,=0A=
  =0A=
  sortables: { },=0A=
  =0A=
  _findRootElement: function(element) {=0A=
    while (element.tagName.toUpperCase() !=3D "BODY") {  =0A=
      if(element.id && Sortable.sortables[element.id]) return element;=0A=
      element =3D element.parentNode;=0A=
    }=0A=
  },=0A=
=0A=
  options: function(element) {=0A=
    element =3D Sortable._findRootElement($(element));=0A=
    if(!element) return;=0A=
    return Sortable.sortables[element.id];=0A=
  },=0A=
  =0A=
  destroy: function(element){=0A=
    var s =3D Sortable.options(element);=0A=
    =0A=
    if(s) {=0A=
      Draggables.removeObserver(s.element);=0A=
      s.droppables.each(function(d){ Droppables.remove(d) });=0A=
      s.draggables.invoke('destroy');=0A=
      =0A=
      delete Sortable.sortables[s.element.id];=0A=
    }=0A=
  },=0A=
=0A=
  create: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend({ =0A=
      element:     element,=0A=
      tag:         'li',       // assumes li children, override with =
tag: 'tagname'=0A=
      dropOnEmpty: false,=0A=
      tree:        false,=0A=
      treeTag:     'ul',=0A=
      overlap:     'vertical', // one of 'vertical', 'horizontal'=0A=
      constraint:  'vertical', // one of 'vertical', 'horizontal', false=0A=
      containment: element,    // also takes array of elements (or =
id's); or false=0A=
      handle:      false,      // or a CSS class=0A=
      only:        false,=0A=
      delay:       0,=0A=
      hoverclass:  null,=0A=
      ghosting:    false,=0A=
      quiet:       false, =0A=
      scroll:      false,=0A=
      scrollSensitivity: 20,=0A=
      scrollSpeed: 15,=0A=
      format:      this.SERIALIZE_RULE,=0A=
      =0A=
      // these take arrays of elements or ids and can be =0A=
      // used for better initialization performance=0A=
      elements:    false,=0A=
      handles:     false,=0A=
      =0A=
      onChange:    Prototype.emptyFunction,=0A=
      onUpdate:    Prototype.emptyFunction=0A=
    }, arguments[1] || { });=0A=
=0A=
    // clear any old sortable with same element=0A=
    this.destroy(element);=0A=
=0A=
    // build options for the draggables=0A=
    var options_for_draggable =3D {=0A=
      revert:      true,=0A=
      quiet:       options.quiet,=0A=
      scroll:      options.scroll,=0A=
      scrollSpeed: options.scrollSpeed,=0A=
      scrollSensitivity: options.scrollSensitivity,=0A=
      delay:       options.delay,=0A=
      ghosting:    options.ghosting,=0A=
      constraint:  options.constraint,=0A=
      handle:      options.handle };=0A=
=0A=
    if(options.starteffect)=0A=
      options_for_draggable.starteffect =3D options.starteffect;=0A=
=0A=
    if(options.reverteffect)=0A=
      options_for_draggable.reverteffect =3D options.reverteffect;=0A=
    else=0A=
      if(options.ghosting) options_for_draggable.reverteffect =3D =
function(element) {=0A=
        element.style.top  =3D 0;=0A=
        element.style.left =3D 0;=0A=
      };=0A=
=0A=
    if(options.endeffect)=0A=
      options_for_draggable.endeffect =3D options.endeffect;=0A=
=0A=
    if(options.zindex)=0A=
      options_for_draggable.zindex =3D options.zindex;=0A=
=0A=
    // build options for the droppables  =0A=
    var options_for_droppable =3D {=0A=
      overlap:     options.overlap,=0A=
      containment: options.containment,=0A=
      tree:        options.tree,=0A=
      hoverclass:  options.hoverclass,=0A=
      onHover:     Sortable.onHover=0A=
    }=0A=
    =0A=
    var options_for_tree =3D {=0A=
      onHover:      Sortable.onEmptyHover,=0A=
      overlap:      options.overlap,=0A=
      containment:  options.containment,=0A=
      hoverclass:   options.hoverclass=0A=
    }=0A=
=0A=
    // fix for gecko engine=0A=
    Element.cleanWhitespace(element); =0A=
=0A=
    options.draggables =3D [];=0A=
    options.droppables =3D [];=0A=
=0A=
    // drop on empty handling=0A=
    if(options.dropOnEmpty || options.tree) {=0A=
      Droppables.add(element, options_for_tree);=0A=
      options.droppables.push(element);=0A=
    }=0A=
=0A=
    (options.elements || this.findElements(element, options) || =
[]).each( function(e,i) {=0A=
      var handle =3D options.handles ? $(options.handles[i]) :=0A=
        (options.handle ? $(e).select('.' + options.handle)[0] : e); =0A=
      options.draggables.push(=0A=
        new Draggable(e, Object.extend(options_for_draggable, { handle: =
handle })));=0A=
      Droppables.add(e, options_for_droppable);=0A=
      if(options.tree) e.treeNode =3D element;=0A=
      options.droppables.push(e);      =0A=
    });=0A=
    =0A=
    if(options.tree) {=0A=
      (Sortable.findTreeElements(element, options) || []).each( =
function(e) {=0A=
        Droppables.add(e, options_for_tree);=0A=
        e.treeNode =3D element;=0A=
        options.droppables.push(e);=0A=
      });=0A=
    }=0A=
=0A=
    // keep reference=0A=
    this.sortables[element.id] =3D options;=0A=
=0A=
    // for onupdate=0A=
    Draggables.addObserver(new SortableObserver(element, =
options.onUpdate));=0A=
=0A=
  },=0A=
=0A=
  // return all suitable-for-sortable elements in a guaranteed order=0A=
  findElements: function(element, options) {=0A=
    return Element.findChildren(=0A=
      element, options.only, options.tree ? true : false, options.tag);=0A=
  },=0A=
  =0A=
  findTreeElements: function(element, options) {=0A=
    return Element.findChildren(=0A=
      element, options.only, options.tree ? true : false, =
options.treeTag);=0A=
  },=0A=
=0A=
  onHover: function(element, dropon, overlap) {=0A=
    if(Element.isParent(dropon, element)) return;=0A=
=0A=
    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {=0A=
      return;=0A=
    } else if(overlap>0.5) {=0A=
      Sortable.mark(dropon, 'before');=0A=
      if(dropon.previousSibling !=3D element) {=0A=
        var oldParentNode =3D element.parentNode;=0A=
        element.style.visibility =3D "hidden"; // fix gecko rendering=0A=
        dropon.parentNode.insertBefore(element, dropon);=0A=
        if(dropon.parentNode!=3DoldParentNode) =0A=
          Sortable.options(oldParentNode).onChange(element);=0A=
        Sortable.options(dropon.parentNode).onChange(element);=0A=
      }=0A=
    } else {=0A=
      Sortable.mark(dropon, 'after');=0A=
      var nextElement =3D dropon.nextSibling || null;=0A=
      if(nextElement !=3D element) {=0A=
        var oldParentNode =3D element.parentNode;=0A=
        element.style.visibility =3D "hidden"; // fix gecko rendering=0A=
        dropon.parentNode.insertBefore(element, nextElement);=0A=
        if(dropon.parentNode!=3DoldParentNode) =0A=
          Sortable.options(oldParentNode).onChange(element);=0A=
        Sortable.options(dropon.parentNode).onChange(element);=0A=
      }=0A=
    }=0A=
  },=0A=
  =0A=
  onEmptyHover: function(element, dropon, overlap) {=0A=
    var oldParentNode =3D element.parentNode;=0A=
    var droponOptions =3D Sortable.options(dropon);=0A=
        =0A=
    if(!Element.isParent(dropon, element)) {=0A=
      var index;=0A=
      =0A=
      var children =3D Sortable.findElements(dropon, {tag: =
droponOptions.tag, only: droponOptions.only});=0A=
      var child =3D null;=0A=
            =0A=
      if(children) {=0A=
        var offset =3D Element.offsetSize(dropon, droponOptions.overlap) =
* (1.0 - overlap);=0A=
        =0A=
        for (index =3D 0; index < children.length; index +=3D 1) {=0A=
          if (offset - Element.offsetSize (children[index], =
droponOptions.overlap) >=3D 0) {=0A=
            offset -=3D Element.offsetSize (children[index], =
droponOptions.overlap);=0A=
          } else if (offset - (Element.offsetSize (children[index], =
droponOptions.overlap) / 2) >=3D 0) {=0A=
            child =3D index + 1 < children.length ? children[index + 1] =
: null;=0A=
            break;=0A=
          } else {=0A=
            child =3D children[index];=0A=
            break;=0A=
          }=0A=
        }=0A=
      }=0A=
      =0A=
      dropon.insertBefore(element, child);=0A=
      =0A=
      Sortable.options(oldParentNode).onChange(element);=0A=
      droponOptions.onChange(element);=0A=
    }=0A=
  },=0A=
=0A=
  unmark: function() {=0A=
    if(Sortable._marker) Sortable._marker.hide();=0A=
  },=0A=
=0A=
  mark: function(dropon, position) {=0A=
    // mark on ghosting only=0A=
    var sortable =3D Sortable.options(dropon.parentNode);=0A=
    if(sortable && !sortable.ghosting) return; =0A=
=0A=
    if(!Sortable._marker) {=0A=
      Sortable._marker =3D =0A=
        ($('dropmarker') || =
Element.extend(document.createElement('DIV'))).=0A=
          =
hide().addClassName('dropmarker').setStyle({position:'absolute'});=0A=
      =
document.getElementsByTagName("body").item(0).appendChild(Sortable._marke=
r);=0A=
    }    =0A=
    var offsets =3D Position.cumulativeOffset(dropon);=0A=
    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + =
'px'});=0A=
    =0A=
    if(position=3D=3D'after')=0A=
      if(sortable.overlap =3D=3D 'horizontal') =0A=
        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) =
+ 'px'});=0A=
      else=0A=
        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) =
+ 'px'});=0A=
    =0A=
    Sortable._marker.show();=0A=
  },=0A=
  =0A=
  _tree: function(element, options, parent) {=0A=
    var children =3D Sortable.findElements(element, options) || [];=0A=
  =0A=
    for (var i =3D 0; i < children.length; ++i) {=0A=
      var match =3D children[i].id.match(options.format);=0A=
=0A=
      if (!match) continue;=0A=
      =0A=
      var child =3D {=0A=
        id: encodeURIComponent(match ? match[1] : null),=0A=
        element: element,=0A=
        parent: parent,=0A=
        children: [],=0A=
        position: parent.children.length,=0A=
        container: $(children[i]).down(options.treeTag)=0A=
      }=0A=
      =0A=
      /* Get the element containing the children and recurse over it */=0A=
      if (child.container)=0A=
        this._tree(child.container, options, child)=0A=
      =0A=
      parent.children.push (child);=0A=
    }=0A=
=0A=
    return parent; =0A=
  },=0A=
=0A=
  tree: function(element) {=0A=
    element =3D $(element);=0A=
    var sortableOptions =3D this.options(element);=0A=
    var options =3D Object.extend({=0A=
      tag: sortableOptions.tag,=0A=
      treeTag: sortableOptions.treeTag,=0A=
      only: sortableOptions.only,=0A=
      name: element.id,=0A=
      format: sortableOptions.format=0A=
    }, arguments[1] || { });=0A=
    =0A=
    var root =3D {=0A=
      id: null,=0A=
      parent: null,=0A=
      children: [],=0A=
      container: element,=0A=
      position: 0=0A=
    }=0A=
    =0A=
    return Sortable._tree(element, options, root);=0A=
  },=0A=
=0A=
  /* Construct a [i] index for a particular node */=0A=
  _constructIndex: function(node) {=0A=
    var index =3D '';=0A=
    do {=0A=
      if (node.id) index =3D '[' + node.position + ']' + index;=0A=
    } while ((node =3D node.parent) !=3D null);=0A=
    return index;=0A=
  },=0A=
=0A=
  sequence: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend(this.options(element), arguments[1] || =
{ });=0A=
    =0A=
    return $(this.findElements(element, options) || []).map( =
function(item) {=0A=
      return item.id.match(options.format) ? =
item.id.match(options.format)[1] : '';=0A=
    });=0A=
  },=0A=
=0A=
  setSequence: function(element, new_sequence) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend(this.options(element), arguments[2] || =
{ });=0A=
    =0A=
    var nodeMap =3D { };=0A=
    this.findElements(element, options).each( function(n) {=0A=
        if (n.id.match(options.format))=0A=
            nodeMap[n.id.match(options.format)[1]] =3D [n, n.parentNode];=0A=
        n.parentNode.removeChild(n);=0A=
    });=0A=
   =0A=
    new_sequence.each(function(ident) {=0A=
      var n =3D nodeMap[ident];=0A=
      if (n) {=0A=
        n[1].appendChild(n[0]);=0A=
        delete nodeMap[ident];=0A=
      }=0A=
    });=0A=
  },=0A=
  =0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    var options =3D Object.extend(Sortable.options(element), =
arguments[1] || { });=0A=
    var name =3D encodeURIComponent(=0A=
      (arguments[1] && arguments[1].name) ? arguments[1].name : =
element.id);=0A=
    =0A=
    if (options.tree) {=0A=
      return Sortable.tree(element, arguments[1]).children.map( function =
(item) {=0A=
        return [name + Sortable._constructIndex(item) + "[id]=3D" + =0A=
                =
encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));=0A=
      }).flatten().join('&');=0A=
    } else {=0A=
      return Sortable.sequence(element, arguments[1]).map( =
function(item) {=0A=
        return name + "[]=3D" + encodeURIComponent(item);=0A=
      }).join('&');=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
// Returns true if child is contained within element=0A=
Element.isParent =3D function(child, element) {=0A=
  if (!child.parentNode || child =3D=3D element) return false;=0A=
  if (child.parentNode =3D=3D element) return true;=0A=
  return Element.isParent(child.parentNode, element);=0A=
}=0A=
=0A=
Element.findChildren =3D function(element, only, recursive, tagName) {   =0A=
  if(!element.hasChildNodes()) return null;=0A=
  tagName =3D tagName.toUpperCase();=0A=
  if(only) only =3D [only].flatten();=0A=
  var elements =3D [];=0A=
  $A(element.childNodes).each( function(e) {=0A=
    if(e.tagName && e.tagName.toUpperCase()=3D=3DtagName &&=0A=
      (!only || (Element.classNames(e).detect(function(v) { return =
only.include(v) }))))=0A=
        elements.push(e);=0A=
    if(recursive) {=0A=
      var grandchildren =3D Element.findChildren(e, only, recursive, =
tagName);=0A=
      if(grandchildren) elements.push(grandchildren);=0A=
    }=0A=
  });=0A=
=0A=
  return (elements.length>0 ? elements.flatten() : []);=0A=
}=0A=
=0A=
Element.offsetSize =3D function (element, type) {=0A=
  return element['offset' + ((type=3D=3D'vertical' || =
type=3D=3D'height') ? 'Height' : 'Width')];=0A=
}=0A=

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/javascripts/controls.js?1238029555

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
//           (c) 2005-2007 Ivan Krstic =
(http://blogs.law.harvard.edu/ivan)=0A=
//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)=0A=
// Contributors:=0A=
//  Richard Livsey=0A=
//  Rahul Bhargava=0A=
//  Rob Wills=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
// Autocompleter.Base handles all the autocompletion functionality =0A=
// that's independent of the data source for autocompletion. This=0A=
// includes drawing the autocompletion menu, observing keyboard=0A=
// and mouse events, and similar.=0A=
//=0A=
// Specific autocompleters need to provide, at the very least, =0A=
// a getUpdatedChoices function that will be invoked every time=0A=
// the text inside the monitored textbox changes. This method =0A=
// should get the text for which to provide autocompletion by=0A=
// invoking this.getToken(), NOT by directly accessing=0A=
// this.element.value. This is to allow incremental tokenized=0A=
// autocompletion. Specific auto-completion logic (AJAX, etc)=0A=
// belongs in getUpdatedChoices.=0A=
//=0A=
// Tokenized incremental autocompletion is enabled automatically=0A=
// when an autocompleter is instantiated with the 'tokens' option=0A=
// in the options parameter, e.g.:=0A=
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });=0A=
// will incrementally autocomplete with a comma as the token.=0A=
// Additionally, ',' in the above example can be replaced with=0A=
// a token array, e.g. { tokens: [',', '\n'] } which=0A=
// enables autocompletion on multiple tokens. This is most =0A=
// useful when one of the tokens is \n (a newline), as it =0A=
// allows smart autocompletion after linebreaks.=0A=
=0A=
if(typeof Effect =3D=3D 'undefined')=0A=
  throw("controls.js requires including script.aculo.us' effects.js =
library");=0A=
=0A=
var Autocompleter =3D { }=0A=
Autocompleter.Base =3D Class.create({=0A=
  baseInitialize: function(element, update, options) {=0A=
    element          =3D $(element)=0A=
    this.element     =3D element; =0A=
    this.update      =3D $(update);  =0A=
    this.hasFocus    =3D false; =0A=
    this.changed     =3D false; =0A=
    this.active      =3D false; =0A=
    this.index       =3D 0;     =0A=
    this.entryCount  =3D 0;=0A=
    this.oldElementValue =3D this.element.value;=0A=
=0A=
    if(this.setOptions)=0A=
      this.setOptions(options);=0A=
    else=0A=
      this.options =3D options || { };=0A=
=0A=
    this.options.paramName    =3D this.options.paramName || =
this.element.name;=0A=
    this.options.tokens       =3D this.options.tokens || [];=0A=
    this.options.frequency    =3D this.options.frequency || 0.4;=0A=
    this.options.minChars     =3D this.options.minChars || 1;=0A=
    this.options.onShow       =3D this.options.onShow || =0A=
      function(element, update){ =0A=
        if(!update.style.position || =
update.style.position=3D=3D'absolute') {=0A=
          update.style.position =3D 'absolute';=0A=
          Position.clone(element, update, {=0A=
            setHeight: false, =0A=
            offsetTop: element.offsetHeight=0A=
          });=0A=
        }=0A=
        Effect.Appear(update,{duration:0.15});=0A=
      };=0A=
    this.options.onHide =3D this.options.onHide || =0A=
      function(element, update){ new Effect.Fade(update,{duration:0.15}) =
};=0A=
=0A=
    if(typeof(this.options.tokens) =3D=3D 'string') =0A=
      this.options.tokens =3D new Array(this.options.tokens);=0A=
    // Force carriage returns as token delimiters anyway=0A=
    if (!this.options.tokens.include('\n'))=0A=
      this.options.tokens.push('\n');=0A=
=0A=
    this.observer =3D null;=0A=
    =0A=
    this.element.setAttribute('autocomplete','off');=0A=
=0A=
    Element.hide(this.update);=0A=
=0A=
    Event.observe(this.element, 'blur', =
this.onBlur.bindAsEventListener(this));=0A=
    Event.observe(this.element, '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_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/javascripts/application.js?1238029555

// Place your application-specific JavaScript functions and classes here=0A=
// This file is automatically included by javascript_include_tag =
:defaults=0A=
   function display_it(obj) {=0A=
			var el =3D document.getElementById(obj);=0A=
		    el.style.display =3D (el.style.display !=3D 'none' ? 'none' : '' );=0A=
		}=0A=
=0A=
		function setActiveTab(tabID,class_name) {=0A=
=0A=
var currTabElem =3D document.getElementById(tabID);=0A=
currTabElem.setAttribute("class",class_name);=0A=
currTabElem.setAttribute("className", class_name);=0A=
return;=0A=
} =0A=
=0A=
 function resize_collection_column(column,size) {=0A=
		var collection_column =3D $("my_collection_"+column);=0A=
		if (size<500)=0A=
		{ size=3D500;}=0A=
		height=3Dsize+"px";=0A=
		collection_column.style.height =3D height ;=0A=
	}=0A=
	=0A=
	function textCounter(name,limit) {=0A=
=0A=
    var field =3D document.getElementById(name);=0A=
    var counter =3D document.getElementById('rem_char');=0A=
    var maxlimit =3D limit;=0A=
=0A=
      if(field.value.length > maxlimit)=0A=
        field.value =3D field.value.substring(0, maxlimit);=0A=
=0A=
      else =0A=
        counter.value =3D maxlimit - field.value.length;=0A=
}
------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js

/*=0A=
 * jQuery JavaScript Library v1.3.1=0A=
 * http://jquery.com/=0A=
 *=0A=
 * Copyright (c) 2009 John Resig=0A=
 * Dual licensed under the MIT and GPL licenses.=0A=
 * http://docs.jquery.com/License=0A=
 *=0A=
 * Date: 2009-01-21 20:42:16 -0500 (Wed, 21 Jan 2009)=0A=
 * Revision: 6158=0A=
 */=0A=
(function(){var =
l=3Dthis,g,y=3Dl.jQuery,p=3Dl.$,o=3Dl.jQuery=3Dl.$=3Dfunction(E,F){return=
 new =
o.fn.init(E,F)},D=3D/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=3D/^.[^:#\[\.=
,]*$/;o.fn=3Do.prototype=3D{init:function(E,H){E=3DE||document;if(E.nodeT=
ype){this[0]=3DE;this.length=3D1;this.context=3DE;return this}if(typeof =
E=3D=3D=3D"string"){var =
G=3DD.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=3Do.clean([G[1]],H)}else{var =
I=3Ddocument.getElementById(G[3]);if(I&&I.id!=3DG[3]){return =
o().find(E)}var F=3Do(I||[]);F.context=3Ddocument;F.selector=3DE;return =
F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return =
o(document).ready(E)}}if(E.selector&&E.context){this.selector=3DE.selecto=
r;this.context=3DE.context}return =
this.setArray(o.makeArray(E))},selector:"",jquery:"1.3.1",size:function()=
{return this.length},get:function(E){return =
E=3D=3D=3Dg?o.makeArray(this):this[E]},pushStack:function(F,H,E){var =
G=3Do(F);G.prevObject=3Dthis;G.context=3Dthis.context;if(H=3D=3D=3D"find"=
){G.selector=3Dthis.selector+(this.selector?" =
":"")+E}else{if(H){G.selector=3Dthis.selector+"."+H+"("+E+")"}}return =
G},setArray:function(E){this.length=3D0;Array.prototype.push.apply(this,E=
);return this},each:function(F,E){return =
o.each(this,F,E)},index:function(E){return =
o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var =
E=3DF;if(typeof F=3D=3D=3D"string"){if(H=3D=3D=3Dg){return =
this[0]&&o[G||"attr"](this[0],F)}else{E=3D{};E[F]=3DH}}return =
this.each(function(I){for(F in =
E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E=
,F){if((E=3D=3D"width"||E=3D=3D"height")&&parseFloat(F)<0){F=3Dg}return =
this.attr(E,F,"curCSS")},text:function(F){if(typeof =
F!=3D=3D"object"&&F!=3Dnull){return =
this.empty().append((this[0]&&this[0].ownerDocument||document).createText=
Node(F))}var =
E=3D"";o.each(F||this,function(){o.each(this.childNodes,function(){if(thi=
s.nodeType!=3D8){E+=3Dthis.nodeType!=3D1?this.nodeValue:o.fn.text([this])=
}})});return E},wrapAll:function(E){if(this[0]){var =
F=3Do(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBef=
ore(this[0])}F.map(function(){var =
G=3Dthis;while(G.firstChild){G=3DG.firstChild}return =
G}).append(this)}return this},wrapInner:function(E){return =
this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){re=
turn this.each(function(){o(this).wrapAll(E)})},append:function(){return =
this.domManip(arguments,true,function(E){if(this.nodeType=3D=3D1){this.ap=
pendChild(E)}})},prepend:function(){return =
this.domManip(arguments,true,function(E){if(this.nodeType=3D=3D1){this.in=
sertBefore(E,this.firstChild)}})},before:function(){return =
this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,=
this)})},after:function(){return =
this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,=
this.nextSibling)})},end:function(){return =
this.prevObject||o([])},push:[].push,find:function(E){if(this.length=3D=3D=
=3D1&&!/,/.test(E)){var =
G=3Dthis.pushStack([],"find",E);G.length=3D0;o.find(E,this[0],G);return =
G}else{var F=3Do.map(this,function(H){return o.find(E,H)});return =
this.pushStack(/[^+>] =
[^+>]/.test(E)?o.unique(F):F,"find",E)}},clone:function(F){var =
E=3Dthis.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){va=
r =
I=3Dthis.cloneNode(true),H=3Ddocument.createElement("div");H.appendChild(=
I);return o.clean([H.innerHTML])[0]}else{return =
this.cloneNode(true)}});var =
G=3DE.find("*").andSelf().each(function(){if(this[h]!=3D=3Dg){this[h]=3Dn=
ull}});if(F=3D=3D=3Dtrue){this.find("*").andSelf().each(function(I){if(th=
is.nodeType=3D=3D3){return}var H=3Do.data(this,"events");for(var K in =
H){for(var J in =
H[K]){o.event.add(G[I],K,H[K][J],H[K][J].data)}}})}return =
E},filter:function(E){return =
this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return =
E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return =
F.nodeType=3D=3D=3D1})),"filter",E)},closest:function(E){var =
F=3Do.expr.match.POS.test(E)?o(E):null;return this.map(function(){var =
G=3Dthis;while(G&&G.ownerDocument){if(F?F.index(G)>-1:o(G).is(E)){return =
G}G=3DG.parentNode}})},not:function(E){if(typeof =
E=3D=3D=3D"string"){if(f.test(E)){return =
this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=3Do.multiFilter=
(E,this)}}var F=3DE.length&&E[E.length-1]!=3D=3Dg&&!E.nodeType;return =
this.filter(function(){return =
F?o.inArray(this,E)<0:this!=3DE})},add:function(E){return =
this.pushStack(o.unique(o.merge(this.get(),typeof =
E=3D=3D=3D"string"?o(E):o.makeArray(E))))},is:function(E){return =
!!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return =
!!E&&this.is("."+E)},val:function(K){if(K=3D=3D=3Dg){var =
E=3Dthis[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{=
}).specified?E.value:E.text}if(o.nodeName(E,"select")){var =
I=3DE.selectedIndex,L=3D[],M=3DE.options,H=3DE.type=3D=3D"select-one";if(=
I<0){return null}for(var F=3DH?I:0,J=3DH?I+1:M.length;F<J;F++){var =
G=3DM[F];if(G.selected){K=3Do(G).val();if(H){return K}L.push(K)}}return =
L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof =
K=3D=3D=3D"number"){K+=3D""}return =
this.each(function(){if(this.nodeType!=3D1){return}if(o.isArray(K)&&/radi=
o|checkbox/.test(this.type)){this.checked=3D(o.inArray(this.value,K)>=3D0=
||o.inArray(this.name,K)>=3D0)}else{if(o.nodeName(this,"select")){var =
N=3Do.makeArray(K);o("option",this).each(function(){this.selected=3D(o.in=
Array(this.value,N)>=3D0||o.inArray(this.text,N)>=3D0)});if(!N.length){th=
is.selectedIndex=3D-1}}else{this.value=3DK}}})},html:function(E){return =
E=3D=3D=3Dg?(this[0]?this[0].innerHTML:null):this.empty().append(E)},repl=
aceWith:function(E){return this.after(E).remove()},eq:function(E){return =
this.slice(E,+E+1)},slice:function(){return =
this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.=
prototype.slice.call(arguments).join(","))},map:function(E){return =
this.pushStack(o.map(this,function(G,F){return =
E.call(G,F,G)}))},andSelf:function(){return =
this.add(this.prevObject)},domManip:function(K,N,M){if(this[0]){var =
J=3D(this[0].ownerDocument||this[0]).createDocumentFragment(),G=3Do.clean=
(K,(this[0].ownerDocument||this[0]),J),I=3DJ.firstChild,E=3Dthis.length>1=
?J.cloneNode(true):J;if(I){for(var =
H=3D0,F=3Dthis.length;H<F;H++){M.call(L(this[H],I),H>0?E.cloneNode(true):=
J)}}if(G){o.each(G,z)}}return this;function L(O,P){return =
N&&o.nodeName(O,"table")&&o.nodeName(P,"tr")?(O.getElementsByTagName("tbo=
dy")[0]||O.appendChild(O.ownerDocument.createElement("tbody"))):O}}};o.fn=
.init.prototype=3Do.fn;function =
z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o=
.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.pa=
rentNode.removeChild(F)}}function e(){return +new =
Date}o.extend=3Do.fn.extend=3Dfunction(){var =
J=3Darguments[0]||{},H=3D1,I=3Darguments.length,E=3Dfalse,G;if(typeof =
J=3D=3D=3D"boolean"){E=3DJ;J=3Darguments[1]||{};H=3D2}if(typeof =
J!=3D=3D"object"&&!o.isFunction(J)){J=3D{}}if(I=3D=3DH){J=3Dthis;--H}for(=
;H<I;H++){if((G=3Darguments[H])!=3Dnull){for(var F in G){var =
K=3DJ[F],L=3DG[F];if(J=3D=3D=3DL){continue}if(E&&L&&typeof =
L=3D=3D=3D"object"&&!L.nodeType){J[F]=3Do.extend(E,K||(L.length!=3Dnull?[=
]:{}),L)}else{if(L!=3D=3Dg){J[F]=3DL}}}}}return J};var =
b=3D/z-?index|font-?weight|opacity|zoom|line-?height/i,q=3Ddocument.defau=
ltView||{},s=3DObject.prototype.toString;o.extend({noConflict:function(E)=
{l.$=3Dp;if(E){l.jQuery=3Dy}return o},isFunction:function(E){return =
s.call(E)=3D=3D=3D"[object Function]"},isArray:function(E){return =
s.call(E)=3D=3D=3D"[object Array]"},isXMLDoc:function(E){return =
E.nodeType=3D=3D=3D9&&E.documentElement.nodeName!=3D=3D"HTML"||!!E.ownerD=
ocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){G=3Do.trim(G=
);if(G){var =
F=3Ddocument.getElementsByTagName("head")[0]||document.documentElement,E=3D=
document.createElement("script");E.type=3D"text/javascript";if(o.support.=
scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=3DG}F.i=
nsertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){ret=
urn =
F.nodeName&&F.nodeName.toUpperCase()=3D=3DE.toUpperCase()},each:function(=
G,K,F){var E,H=3D0,I=3DG.length;if(F){if(I=3D=3D=3Dg){for(E in =
G){if(K.apply(G[E],F)=3D=3D=3Dfalse){break}}}else{for(;H<I;){if(K.apply(G=
[H++],F)=3D=3D=3Dfalse){break}}}}else{if(I=3D=3D=3Dg){for(E in =
G){if(K.call(G[E],E,G[E])=3D=3D=3Dfalse){break}}}else{for(var =
J=3DG[0];H<I&&K.call(J,H,J)!=3D=3Dfalse;J=3DG[++H]){}}}return =
G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=3DI.call(H,F)}return =
typeof =
I=3D=3D=3D"number"&&G=3D=3D"curCSS"&&!b.test(E)?I+"px":I},className:{add:=
function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType=3D=3D=
1&&!o.className.has(E.className,H)){E.className+=3D(E.className?" =
":"")+H}})},remove:function(E,F){if(E.nodeType=3D=3D1){E.className=3DF!=3D=
=3Dg?o.grep(E.className.split(/\s+/),function(G){return =
!o.className.has(F,G)}).join(" "):""}},has:function(F,E){return =
F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:functi=
on(H,G,I){var E=3D{};for(var F in =
G){E[F]=3DH.style[F];H.style[F]=3DG[F]}I.call(H);for(var F in =
G){H.style[F]=3DE[F]}},css:function(G,E,I){if(E=3D=3D"width"||E=3D=3D"hei=
ght"){var =
K,F=3D{position:"absolute",visibility:"hidden",display:"block"},J=3DE=3D=3D=
"width"?["Left","Right"]:["Top","Bottom"];function =
H(){K=3DE=3D=3D"width"?G.offsetWidth:G.offsetHeight;var =
M=3D0,L=3D0;o.each(J,function(){M+=3DparseFloat(o.curCSS(G,"padding"+this=
,true))||0;L+=3DparseFloat(o.curCSS(G,"border"+this+"Width",true))||0});K=
-=3DMath.round(M+L)}if(o(G).is(":visible")){H()}else{o.swap(G,F,H)}return=
 Math.max(0,K)}return o.curCSS(G,E,I)},curCSS:function(I,F,G){var =
L,E=3DI.style;if(F=3D=3D"opacity"&&!o.support.opacity){L=3Do.attr(E,"opac=
ity");return =
L=3D=3D""?"1":L}if(F.match(/float/i)){F=3Dw}if(!G&&E&&E[F]){L=3DE[F]}else=
{if(q.getComputedStyle){if(F.match(/float/i)){F=3D"float"}F=3DF.replace(/=
([A-Z])/g,"-$1").toLowerCase();var =
M=3Dq.getComputedStyle(I,null);if(M){L=3DM.getPropertyValue(F)}if(F=3D=3D=
"opacity"&&L=3D=3D""){L=3D"1"}}else{if(I.currentStyle){var =
J=3DF.replace(/\-(\w)/g,function(N,O){return =
O.toUpperCase()});L=3DI.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?=
$/i.test(L)&&/^\d/.test(L)){var =
H=3DE.left,K=3DI.runtimeStyle.left;I.runtimeStyle.left=3DI.currentStyle.l=
eft;E.left=3DL||0;L=3DE.pixelLeft+"px";E.left=3DH;I.runtimeStyle.left=3DK=
}}}}return L},clean:function(F,K,I){K=3DK||document;if(typeof =
K.createElement=3D=3D=3D"undefined"){K=3DK.ownerDocument||K[0]&&K[0].owne=
rDocument||document}if(!I&&F.length=3D=3D=3D1&&typeof =
F[0]=3D=3D=3D"string"){var =
H=3D/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var=
 =
G=3D[],E=3D[],L=3DK.createElement("div");o.each(F,function(P,R){if(typeof=
 R=3D=3D=3D"number"){R+=3D""}if(!R){return}if(typeof =
R=3D=3D=3D"string"){R=3DR.replace(/(<(\w+)[^>]*?)\/>/g,function(T,U,S){re=
turn =
S.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?T:U+"=
></"+S+">"});var O=3Do.trim(R).toLowerCase();var =
Q=3D!O.indexOf("<opt")&&[1,"<select =
multiple=3D'multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>"=
,"</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>",=
"</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||=
(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></t=
body></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>=
","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>=
"]||[0,"",""];L.innerHTML=3DQ[1]+R+Q[2];while(Q[0]--){L=3DL.lastChild}if(=
!o.support.tbody){var =
N=3D!O.indexOf("<table")&&O.indexOf("<tbody")<0?L.firstChild&&L.firstChil=
d.childNodes:Q[1]=3D=3D"<table>"&&O.indexOf("<tbody")<0?L.childNodes:[];f=
or(var =
M=3DN.length-1;M>=3D0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.=
length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespa=
ce&&/^\s/.test(R)){L.insertBefore(K.createTextNode(R.match(/^\s*/)[0]),L.=
firstChild)}R=3Do.makeArray(L.childNodes)}if(R.nodeType){G.push(R)}else{G=
=3Do.merge(G,R)}});if(I){for(var =
J=3D0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLo=
werCase()=3D=3D=3D"text/javascript")){E.push(G[J].parentNode?G[J].parentN=
ode.removeChild(G[J]):G[J])}else{if(G[J].nodeType=3D=3D=3D1){G.splice.app=
ly(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.=
appendChild(G[J])}}return E}return =
G},attr:function(J,G,K){if(!J||J.nodeType=3D=3D3||J.nodeType=3D=3D8){retu=
rn g}var =
H=3D!o.isXMLDoc(J),L=3DK!=3D=3Dg;G=3DH&&o.props[G]||G;if(J.tagName){var =
F=3D/href|src|style/.test(G);if(G=3D=3D"selected"&&J.parentNode){J.parent=
Node.selectedIndex}if(G in =
J&&H&&!F){if(L){if(G=3D=3D"type"&&o.nodeName(J,"input")&&J.parentNode){th=
row"type property can't be =
changed"}J[G]=3DK}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return =
J.getAttributeNode(G).nodeValue}if(G=3D=3D"tabIndex"){var =
I=3DJ.getAttributeNode("tabIndex");return =
I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|text=
area)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return =
J[G]}if(!o.support.style&&H&&G=3D=3D"style"){return =
o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var =
E=3D!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G)=
;return =
E=3D=3D=3Dnull?g:E}if(!o.support.opacity&&G=3D=3D"opacity"){if(L){J.zoom=3D=
1;J.filter=3D(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=3D=
=3D"NaN"?"":"alpha(opacity=3D"+K*100+")")}return =
J.filter&&J.filter.indexOf("opacity=3D")>=3D0?(parseFloat(J.filter.match(=
/opacity=3D([^)]*)/)[1])/100)+"":""}G=3DG.replace(/-([a-z])/ig,function(M=
,N){return N.toUpperCase()});if(L){J[G]=3DK}return =
J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:=
function(G){var E=3D[];if(G!=3Dnull){var =
F=3DG.length;if(F=3D=3Dnull||typeof =
G=3D=3D=3D"string"||o.isFunction(G)||G.setInterval){E[0]=3DG}else{while(F=
){E[--F]=3DG[F]}}}return E},inArray:function(G,H){for(var =
E=3D0,F=3DH.length;E<F;E++){if(H[E]=3D=3D=3DG){return E}}return =
-1},merge:function(H,E){var =
F=3D0,G,I=3DH.length;if(!o.support.getAll){while((G=3DE[F++])!=3Dnull){if=
(G.nodeType!=3D8){H[I++]=3DG}}}else{while((G=3DE[F++])!=3Dnull){H[I++]=3D=
G}}return H},unique:function(K){var F=3D[],E=3D{};try{for(var =
G=3D0,H=3DK.length;G<H;G++){var =
J=3Do.data(K[G]);if(!E[J]){E[J]=3Dtrue;F.push(K[G])}}}catch(I){F=3DK}retu=
rn F},grep:function(F,J,E){var G=3D[];for(var =
H=3D0,I=3DF.length;H<I;H++){if(!E!=3D!J(F[H],H)){G.push(F[H])}}return =
G},map:function(E,J){var F=3D[];for(var G=3D0,H=3DE.length;G<H;G++){var =
I=3DJ(E[G],G);if(I!=3Dnull){F[F.length]=3DI}}return =
F.concat.apply([],F)}});var =
C=3Dnavigator.userAgent.toLowerCase();o.browser=3D{version:(C.match(/.+(?=
:rv|it|ra|ie)[\/: =
]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),ms=
ie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compati=
ble|webkit)/.test(C)};o.each({parent:function(E){return =
E.parentNode},parents:function(E){return =
o.dir(E,"parentNode")},next:function(E){return =
o.nth(E,2,"nextSibling")},prev:function(E){return =
o.nth(E,2,"previousSibling")},nextAll:function(E){return =
o.dir(E,"nextSibling")},prevAll:function(E){return =
o.dir(E,"previousSibling")},siblings:function(E){return =
o.sibling(E.parentNode.firstChild,E)},children:function(E){return =
o.sibling(E.firstChild)},contents:function(E){return =
o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.make=
Array(E.childNodes)}},function(E,F){o.fn[E]=3Dfunction(G){var =
H=3Do.map(this,F);if(G&&typeof =
G=3D=3D"string"){H=3Do.multiFilter(G,H)}return =
this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"p=
repend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith=
"},function(E,F){o.fn[E]=3Dfunction(){var G=3Darguments;return =
this.each(function(){for(var =
H=3D0,I=3DG.length;H<I;H++){o(G[H])[F](this)}})}});o.each({removeAttr:fun=
ction(E){o.attr(this,E,"");if(this.nodeType=3D=3D1){this.removeAttribute(=
E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E=
){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof =
E!=3D=3D"boolean"){E=3D!o.className.has(this,F)}o.className[E?"add":"remo=
ve"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",=
this).add([this]).each(function(){o.event.remove(this);o.removeData(this)=
});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:functio=
n(){o(">*",this).remove();while(this.firstChild){this.removeChild(this.fi=
rstChild)}}},function(E,F){o.fn[E]=3Dfunction(){return =
this.each(F,arguments)}});function j(E,F){return =
E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var =
h=3D"jQuery"+e(),v=3D0,A=3D{};o.extend({cache:{},data:function(F,E,G){F=3D=
F=3D=3Dl?A:F;var =
H=3DF[h];if(!H){H=3DF[h]=3D++v}if(E&&!o.cache[H]){o.cache[H]=3D{}}if(G!=3D=
=3Dg){o.cache[H][E]=3DG}return =
E?o.cache[H][E]:H},removeData:function(F,E){F=3DF=3D=3Dl?A:F;var =
H=3DF[h];if(E){if(o.cache[H]){delete o.cache[H][E];E=3D"";for(E in =
o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete =
F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete =
o.cache[H]}},queue:function(F,E,H){if(F){E=3D(E||"fx")+"queue";var =
G=3Do.data(F,E);if(!G||o.isArray(H)){G=3Do.data(F,E,o.makeArray(H))}else{=
if(H){G.push(H)}}}return G},dequeue:function(H,G){var =
E=3Do.queue(H,G),F=3DE.shift();if(!G||G=3D=3D=3D"fx"){F=3DE[0]}if(F!=3D=3D=
g){F.call(H)}}});o.fn.extend({data:function(E,G){var =
H=3DE.split(".");H[1]=3DH[1]?"."+H[1]:"";if(G=3D=3D=3Dg){var =
F=3Dthis.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F=3D=3D=3Dg&&this.l=
ength){F=3Do.data(this[0],E)}return =
F=3D=3D=3Dg&&H[1]?this.data(H[0]):F}else{return =
this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G=
)})}},removeData:function(E){return =
this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeo=
f E!=3D=3D"string"){F=3DE;E=3D"fx"}if(F=3D=3D=3Dg){return =
o.queue(this[0],E)}return this.each(function(){var =
G=3Do.queue(this,E,F);if(E=3D=3D"fx"&&G.length=3D=3D1){G[0].call(this)}})=
},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});=0A=
/*=0A=
 * Sizzle CSS Selector Engine - v0.9.3=0A=
 *  Copyright 2009, The Dojo Foundation=0A=
 *  Released under the MIT, BSD, and GPL Licenses.=0A=
 *  More information: http://sizzlejs.com/=0A=
 */=0A=
(function(){var =
Q=3D/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]+['"]|[^[\]=
'"]+)+\]|\\.|[^ =
>+~,(\[]+)+|[>+~])(\s*,\s*)?/g,K=3D0,G=3DObject.prototype.toString;var =
F=3Dfunction(X,T,aa,ab){aa=3Daa||[];T=3DT||document;if(T.nodeType!=3D=3D1=
&&T.nodeType!=3D=3D9){return[]}if(!X||typeof X!=3D=3D"string"){return =
aa}var =
Y=3D[],V,ae,ah,S,ac,U,W=3Dtrue;Q.lastIndex=3D0;while((V=3DQ.exec(X))!=3D=3D=
null){Y.push(V[1]);if(V[2]){U=3DRegExp.rightContext;break}}if(Y.length>1&=
&L.exec(X)){if(Y.length=3D=3D=3D2&&H.relative[Y[0]]){ae=3DI(Y[0]+Y[1],T)}=
else{ae=3DH.relative[Y[0]]?[T]:F(Y.shift(),T);while(Y.length){X=3DY.shift=
();if(H.relative[X]){X+=3DY.shift()}ae=3DI(X,ae)}}}else{var =
ad=3Dab?{expr:Y.pop(),set:E(ab)}:F.find(Y.pop(),Y.length=3D=3D=3D1&&T.par=
entNode?T.parentNode:T,P(T));ae=3DF.filter(ad.expr,ad.set);if(Y.length>0)=
{ah=3DE(ae)}else{W=3Dfalse}while(Y.length){var =
ag=3DY.pop(),af=3Dag;if(!H.relative[ag]){ag=3D""}else{af=3DY.pop()}if(af=3D=
=3Dnull){af=3DT}H.relative[ag](ah,af,P(T))}}if(!ah){ah=3Dae}if(!ah){throw=
"Syntax error, unrecognized expression: =
"+(ag||X)}if(G.call(ah)=3D=3D=3D"[object =
Array]"){if(!W){aa.push.apply(aa,ah)}else{if(T.nodeType=3D=3D=3D1){for(va=
r =
Z=3D0;ah[Z]!=3Dnull;Z++){if(ah[Z]&&(ah[Z]=3D=3D=3Dtrue||ah[Z].nodeType=3D=
=3D=3D1&&J(T,ah[Z]))){aa.push(ae[Z])}}}else{for(var =
Z=3D0;ah[Z]!=3Dnull;Z++){if(ah[Z]&&ah[Z].nodeType=3D=3D=3D1){aa.push(ae[Z=
])}}}}}else{E(ah,aa)}if(U){F(U,T,aa,ab)}return =
aa};F.matches=3Dfunction(S,T){return =
F(S,null,null,T)};F.find=3Dfunction(Z,S,aa){var =
Y,W;if(!Z){return[]}for(var V=3D0,U=3DH.order.length;V<U;V++){var =
X=3DH.order[V],W;if((W=3DH.match[X].exec(Z))){var =
T=3DRegExp.leftContext;if(T.substr(T.length-1)!=3D=3D"\\"){W[1]=3D(W[1]||=
"").replace(/\\/g,"");Y=3DH.find[X](W,S,aa);if(Y!=3Dnull){Z=3DZ.replace(H=
.match[X],"");break}}}}if(!Y){Y=3DS.getElementsByTagName("*")}return{set:=
Y,expr:Z}};F.filter=3Dfunction(ab,aa,ae,V){var =
U=3Dab,ag=3D[],Y=3Daa,X,S;while(ab&&aa.length){for(var Z in =
H.filter){if((X=3DH.match[Z].exec(ab))!=3Dnull){var =
T=3DH.filter[Z],af,ad;S=3Dfalse;if(Y=3D=3Dag){ag=3D[]}if(H.preFilter[Z]){=
X=3DH.preFilter[Z](X,Y,ae,ag,V);if(!X){S=3Daf=3Dtrue}else{if(X=3D=3D=3Dtr=
ue){continue}}}if(X){for(var =
W=3D0;(ad=3DY[W])!=3Dnull;W++){if(ad){af=3DT(ad,X,W,Y);var =
ac=3DV^!!af;if(ae&&af!=3Dnull){if(ac){S=3Dtrue}else{Y[W]=3Dfalse}}else{if=
(ac){ag.push(ad);S=3Dtrue}}}}}if(af!=3D=3Dg){if(!ae){Y=3Dag}ab=3Dab.repla=
ce(H.match[Z],"");if(!S){return[]}break}}}ab=3Dab.replace(/\s*,\s*/,"");i=
f(ab=3D=3DU){if(S=3D=3Dnull){throw"Syntax error, unrecognized =
expression: "+ab}else{break}}U=3Dab}return Y};var =
H=3DF.selectors=3D{order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\u=
FFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=3D[=
'"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFF=
F_-]|\\.)+)\s*(?:(\S?=3D)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\u=
FFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+=
-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=3D[^-]=
|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^=
\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHan=
dle:{href:function(S){return =
S.getAttribute("href")}},relative:{"+":function(W,T){for(var =
U=3D0,S=3DW.length;U<S;U++){var V=3DW[U];if(V){var =
X=3DV.previousSibling;while(X&&X.nodeType!=3D=3D1){X=3DX.previousSibling}=
W[U]=3Dtypeof T=3D=3D=3D"string"?X||false:X=3D=3D=3DT}}if(typeof =
T=3D=3D=3D"string"){F.filter(T,W,true)}},">":function(X,T,Y){if(typeof =
T=3D=3D=3D"string"&&!/\W/.test(T)){T=3DY?T:T.toUpperCase();for(var =
U=3D0,S=3DX.length;U<S;U++){var W=3DX[U];if(W){var =
V=3DW.parentNode;X[U]=3DV.nodeName=3D=3D=3DT?V:false}}}else{for(var =
U=3D0,S=3DX.length;U<S;U++){var W=3DX[U];if(W){X[U]=3Dtypeof =
T=3D=3D=3D"string"?W.parentNode:W.parentNode=3D=3D=3DT}}if(typeof =
T=3D=3D=3D"string"){F.filter(T,X,true)}}},"":function(V,T,X){var =
U=3D"done"+(K++),S=3DR;if(!T.match(/\W/)){var =
W=3DT=3DX?T:T.toUpperCase();S=3DO}S("parentNode",T,U,V,W,X)},"~":function=
(V,T,X){var U=3D"done"+(K++),S=3DR;if(typeof =
T=3D=3D=3D"string"&&!T.match(/\W/)){var =
W=3DT=3DX?T:T.toUpperCase();S=3DO}S("previousSibling",T,U,V,W,X)}},find:{=
ID:function(T,U,V){if(typeof U.getElementById!=3D=3D"undefined"&&!V){var =
S=3DU.getElementById(T[1]);return =
S?[S]:[]}},NAME:function(S,T,U){if(typeof =
T.getElementsByName!=3D=3D"undefined"&&!U){return =
T.getElementsByName(S[1])}},TAG:function(S,T){return =
T.getElementsByTagName(S[1])}},preFilter:{CLASS:function(V,T,U,S,Y){V=3D"=
 "+V[1].replace(/\\/g,"")+" ";var X;for(var =
W=3D0;(X=3DT[W])!=3Dnull;W++){if(X){if(Y^(" "+X.className+" =
").indexOf(V)>=3D0){if(!U){S.push(X)}}else{if(U){T[W]=3Dfalse}}}}return =
false},ID:function(S){return =
S[1].replace(/\\/g,"")},TAG:function(T,S){for(var =
U=3D0;S[U]=3D=3D=3Dfalse;U++){}return =
S[U]&&P(S[U])?T[1]:T[1].toUpperCase()},CHILD:function(S){if(S[1]=3D=3D"nt=
h"){var =
T=3D/(-?)(\d*)n((?:\+|-)?\d*)/.exec(S[2]=3D=3D"even"&&"2n"||S[2]=3D=3D"od=
d"&&"2n+1"||!/\D/.test(S[2])&&"0n+"+S[2]||S[2]);S[2]=3D(T[1]+(T[2]||1))-0=
;S[3]=3DT[3]-0}S[0]=3D"done"+(K++);return S},ATTR:function(T){var =
S=3DT[1].replace(/\\/g,"");if(H.attrMap[S]){T[1]=3DH.attrMap[S]}if(T[2]=3D=
=3D=3D"~=3D"){T[4]=3D" "+T[4]+" "}return =
T},PSEUDO:function(W,T,U,S,X){if(W[1]=3D=3D=3D"not"){if(W[3].match(Q).len=
gth>1){W[3]=3DF(W[3],null,null,T)}else{var =
V=3DF.filter(W[3],T,U,true^X);if(!U){S.push.apply(S,V)}return =
false}}else{if(H.match.POS.test(W[0])){return true}}return =
W},POS:function(S){S.unshift(true);return =
S}},filters:{enabled:function(S){return =
S.disabled=3D=3D=3Dfalse&&S.type!=3D=3D"hidden"},disabled:function(S){ret=
urn S.disabled=3D=3D=3Dtrue},checked:function(S){return =
S.checked=3D=3D=3Dtrue},selected:function(S){S.parentNode.selectedIndex;r=
eturn S.selected=3D=3D=3Dtrue},parent:function(S){return =
!!S.firstChild},empty:function(S){return =
!S.firstChild},has:function(U,T,S){return =
!!F(S[3],U).length},header:function(S){return/h\d/i.test(S.nodeName)},tex=
t:function(S){return"text"=3D=3D=3DS.type},radio:function(S){return"radio=
"=3D=3D=3DS.type},checkbox:function(S){return"checkbox"=3D=3D=3DS.type},f=
ile:function(S){return"file"=3D=3D=3DS.type},password:function(S){return"=
password"=3D=3D=3DS.type},submit:function(S){return"submit"=3D=3D=3DS.typ=
e},image:function(S){return"image"=3D=3D=3DS.type},reset:function(S){retu=
rn"reset"=3D=3D=3DS.type},button:function(S){return"button"=3D=3D=3DS.typ=
e||S.nodeName.toUpperCase()=3D=3D=3D"BUTTON"},input:function(S){return/in=
put|select|textarea|button/i.test(S.nodeName)}},setFilters:{first:functio=
n(T,S){return S=3D=3D=3D0},last:function(U,T,S,V){return =
T=3D=3D=3DV.length-1},even:function(T,S){return =
S%2=3D=3D=3D0},odd:function(T,S){return =
S%2=3D=3D=3D1},lt:function(U,T,S){return =
T<S[3]-0},gt:function(U,T,S){return T>S[3]-0},nth:function(U,T,S){return =
S[3]-0=3D=3DT},eq:function(U,T,S){return =
S[3]-0=3D=3DT}},filter:{CHILD:function(S,V){var =
Y=3DV[1],Z=3DS.parentNode;var X=3DV[0];if(Z&&(!Z[X]||!S.nodeIndex)){var =
W=3D1;for(var =
T=3DZ.firstChild;T;T=3DT.nextSibling){if(T.nodeType=3D=3D1){T.nodeIndex=3D=
W++}}Z[X]=3DW-1}if(Y=3D=3D"first"){return =
S.nodeIndex=3D=3D1}else{if(Y=3D=3D"last"){return =
S.nodeIndex=3D=3DZ[X]}else{if(Y=3D=3D"only"){return =
Z[X]=3D=3D1}else{if(Y=3D=3D"nth"){var =
ab=3Dfalse,U=3DV[2],aa=3DV[3];if(U=3D=3D1&&aa=3D=3D0){return =
true}if(U=3D=3D0){if(S.nodeIndex=3D=3Daa){ab=3Dtrue}}else{if((S.nodeIndex=
-aa)%U=3D=3D0&&(S.nodeIndex-aa)/U>=3D0){ab=3Dtrue}}return =
ab}}}}},PSEUDO:function(Y,U,V,Z){var =
T=3DU[1],W=3DH.filters[T];if(W){return =
W(Y,V,U,Z)}else{if(T=3D=3D=3D"contains"){return(Y.textContent||Y.innerTex=
t||"").indexOf(U[3])>=3D0}else{if(T=3D=3D=3D"not"){var X=3DU[3];for(var =
V=3D0,S=3DX.length;V<S;V++){if(X[V]=3D=3D=3DY){return false}}return =
true}}}},ID:function(T,S){return =
T.nodeType=3D=3D=3D1&&T.getAttribute("id")=3D=3D=3DS},TAG:function(T,S){r=
eturn(S=3D=3D=3D"*"&&T.nodeType=3D=3D=3D1)||T.nodeName=3D=3D=3DS},CLASS:f=
unction(T,S){return S.test(T.className)},ATTR:function(W,U){var =
S=3DH.attrHandle[U[1]]?H.attrHandle[U[1]](W):W[U[1]]||W.getAttribute(U[1]=
),X=3DS+"",V=3DU[2],T=3DU[4];return =
S=3D=3Dnull?V=3D=3D=3D"!=3D":V=3D=3D=3D"=3D"?X=3D=3D=3DT:V=3D=3D=3D"*=3D"=
?X.indexOf(T)>=3D0:V=3D=3D=3D"~=3D"?(" "+X+" =
").indexOf(T)>=3D0:!U[4]?S:V=3D=3D=3D"!=3D"?X!=3DT:V=3D=3D=3D"^=3D"?X.ind=
exOf(T)=3D=3D=3D0:V=3D=3D=3D"$=3D"?X.substr(X.length-T.length)=3D=3D=3DT:=
V=3D=3D=3D"|=3D"?X=3D=3D=3DT||X.substr(0,T.length+1)=3D=3D=3DT+"-":false}=
,POS:function(W,T,U,X){var S=3DT[2],V=3DH.setFilters[S];if(V){return =
V(W,U,T,X)}}}};var L=3DH.match.POS;for(var N in =
H.match){H.match[N]=3DRegExp(H.match[N].source+/(?![^\[]*\])(?![^\(]*\))/=
.source)}var =
E=3Dfunction(T,S){T=3DArray.prototype.slice.call(T);if(S){S.push.apply(S,=
T);return S}return =
T};try{Array.prototype.slice.call(document.documentElement.childNodes)}ca=
tch(M){E=3Dfunction(W,V){var T=3DV||[];if(G.call(W)=3D=3D=3D"[object =
Array]"){Array.prototype.push.apply(T,W)}else{if(typeof =
W.length=3D=3D=3D"number"){for(var =
U=3D0,S=3DW.length;U<S;U++){T.push(W[U])}}else{for(var =
U=3D0;W[U];U++){T.push(W[U])}}}return T}}(function(){var =
T=3Ddocument.createElement("form"),U=3D"script"+(new =
Date).getTime();T.innerHTML=3D"<input name=3D'"+U+"'/>";var =
S=3Ddocument.documentElement;S.insertBefore(T,S.firstChild);if(!!document=
.getElementById(U)){H.find.ID=3Dfunction(W,X,Y){if(typeof =
X.getElementById!=3D=3D"undefined"&&!Y){var =
V=3DX.getElementById(W[1]);return V?V.id=3D=3D=3DW[1]||typeof =
V.getAttributeNode!=3D=3D"undefined"&&V.getAttributeNode("id").nodeValue=3D=
=3D=3DW[1]?[V]:g:[]}};H.filter.ID=3Dfunction(X,V){var W=3Dtypeof =
X.getAttributeNode!=3D=3D"undefined"&&X.getAttributeNode("id");return =
X.nodeType=3D=3D=3D1&&W&&W.nodeValue=3D=3D=3DV}}S.removeChild(T)})();(fun=
ction(){var =
S=3Ddocument.createElement("div");S.appendChild(document.createComment(""=
));if(S.getElementsByTagName("*").length>0){H.find.TAG=3Dfunction(T,X){va=
r W=3DX.getElementsByTagName(T[1]);if(T[1]=3D=3D=3D"*"){var =
V=3D[];for(var =
U=3D0;W[U];U++){if(W[U].nodeType=3D=3D=3D1){V.push(W[U])}}W=3DV}return =
W}}S.innerHTML=3D"<a =
href=3D'#'></a>";if(S.firstChild&&S.firstChild.getAttribute("href")!=3D=3D=
"#"){H.attrHandle.href=3Dfunction(T){return =
T.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){=
var S=3DF,T=3Ddocument.createElement("div");T.innerHTML=3D"<p =
class=3D'TEST'></p>";if(T.querySelectorAll&&T.querySelectorAll(".TEST").l=
ength=3D=3D=3D0){return}F=3Dfunction(X,W,U,V){W=3DW||document;if(!V&&W.no=
deType=3D=3D=3D9&&!P(W)){try{return =
E(W.querySelectorAll(X),U)}catch(Y){}}return =
S(X,W,U,V)};F.find=3DS.find;F.filter=3DS.filter;F.selectors=3DS.selectors=
;F.matches=3DS.matches})()}if(document.getElementsByClassName&&document.d=
ocumentElement.getElementsByClassName){H.order.splice(1,0,"CLASS");H.find=
.CLASS=3Dfunction(S,T){return T.getElementsByClassName(S[1])}}function =
O(T,Z,Y,ac,aa,ab){for(var W=3D0,U=3Dac.length;W<U;W++){var =
S=3Dac[W];if(S){S=3DS[T];var X=3Dfalse;while(S&&S.nodeType){var =
V=3DS[Y];if(V){X=3Dac[V];break}if(S.nodeType=3D=3D=3D1&&!ab){S[Y]=3DW}if(=
S.nodeName=3D=3D=3DZ){X=3DS;break}S=3DS[T]}ac[W]=3DX}}}function =
R(T,Y,X,ab,Z,aa){for(var V=3D0,U=3Dab.length;V<U;V++){var =
S=3Dab[V];if(S){S=3DS[T];var =
W=3Dfalse;while(S&&S.nodeType){if(S[X]){W=3Dab[S[X]];break}if(S.nodeType=3D=
=3D=3D1){if(!aa){S[X]=3DV}if(typeof =
Y!=3D=3D"string"){if(S=3D=3D=3DY){W=3Dtrue;break}}else{if(F.filter(Y,[S])=
.length>0){W=3DS;break}}}S=3DS[T]}ab[V]=3DW}}}var =
J=3Ddocument.compareDocumentPosition?function(T,S){return =
T.compareDocumentPosition(S)&16}:function(T,S){return =
T!=3D=3DS&&(T.contains?T.contains(S):true)};var P=3Dfunction(S){return =
S.nodeType=3D=3D=3D9&&S.documentElement.nodeName!=3D=3D"HTML"||!!S.ownerD=
ocument&&P(S.ownerDocument)};var I=3Dfunction(S,Z){var =
V=3D[],W=3D"",X,U=3DZ.nodeType?[Z]:Z;while((X=3DH.match.PSEUDO.exec(S))){=
W+=3DX[0];S=3DS.replace(H.match.PSEUDO,"")}S=3DH.relative[S]?S+"*":S;for(=
var Y=3D0,T=3DU.length;Y<T;Y++){F(S,U[Y],V)}return =
F.filter(W,V)};o.find=3DF;o.filter=3DF.filter;o.expr=3DF.selectors;o.expr=
[":"]=3Do.expr.filters;F.selectors.filters.hidden=3Dfunction(S){return"hi=
dden"=3D=3D=3DS.type||o.css(S,"display")=3D=3D=3D"none"||o.css(S,"visibil=
ity")=3D=3D=3D"hidden"};F.selectors.filters.visible=3Dfunction(S){return"=
hidden"!=3D=3DS.type&&o.css(S,"display")!=3D=3D"none"&&o.css(S,"visibilit=
y")!=3D=3D"hidden"};F.selectors.filters.animated=3Dfunction(S){return =
o.grep(o.timers,function(T){return =
S=3D=3D=3DT.elem}).length};o.multiFilter=3Dfunction(U,S,T){if(T){U=3D":no=
t("+U+")"}return F.matches(U,S)};o.dir=3Dfunction(U,T){var =
S=3D[],V=3DU[T];while(V&&V!=3Ddocument){if(V.nodeType=3D=3D1){S.push(V)}V=
=3DV[T]}return S};o.nth=3Dfunction(W,S,U,V){S=3DS||1;var =
T=3D0;for(;W;W=3DW[U]){if(W.nodeType=3D=3D1&&++T=3D=3DS){break}}return =
W};o.sibling=3Dfunction(U,T){var =
S=3D[];for(;U;U=3DU.nextSibling){if(U.nodeType=3D=3D1&&U!=3DT){S.push(U)}=
}return =
S};return;l.Sizzle=3DF})();o.event=3D{add:function(I,F,H,K){if(I.nodeType=
=3D=3D3||I.nodeType=3D=3D8){return}if(I.setInterval&&I!=3Dl){I=3Dl}if(!H.=
guid){H.guid=3Dthis.guid++}if(K!=3D=3Dg){var =
G=3DH;H=3Dthis.proxy(G);H.data=3DK}var =
E=3Do.data(I,"events")||o.data(I,"events",{}),J=3Do.data(I,"handle")||o.d=
ata(I,"handle",function(){return typeof =
o!=3D=3D"undefined"&&!o.event.triggered?o.event.handle.apply(arguments.ca=
llee.elem,arguments):g});J.elem=3DI;o.each(F.split(/\s+/),function(M,N){v=
ar =
O=3DN.split(".");N=3DO.shift();H.type=3DO.slice().sort().join(".");var =
L=3DE[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O=
)}if(!L){L=3DE[N]=3D{};if(!o.event.special[N]||o.event.special[N].setup.c=
all(I,K,O)=3D=3D=3Dfalse){if(I.addEventListener){I.addEventListener(N,J,f=
alse)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=3DH;o.e=
vent.global[N]=3Dtrue});I=3Dnull},guid:1,global:{},remove:function(K,H,J)=
{if(K.nodeType=3D=3D3||K.nodeType=3D=3D8){return}var =
G=3Do.data(K,"events"),F,E;if(G){if(H=3D=3D=3Dg||(typeof =
H=3D=3D=3D"string"&&H.charAt(0)=3D=3D".")){for(var I in =
G){this.remove(K,I+(H||""))}}else{if(H.type){J=3DH.handler;H=3DH.type}o.e=
ach(H.split(/\s+/),function(M,O){var Q=3DO.split(".");O=3DQ.shift();var =
N=3DRegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){i=
f(J){delete G[O][J.guid]}else{for(var P in =
G[O]){if(N.test(G[O][P].type)){delete =
G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K=
,Q)}for(F in =
G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.ca=
ll(K,Q)=3D=3D=3Dfalse){if(K.removeEventListener){K.removeEventListener(O,=
o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.d=
ata(K,"handle"))}}}F=3Dnull;delete G[O]}}})}for(F in G){break}if(!F){var =
L=3Do.data(K,"handle");if(L){L.elem=3Dnull}o.removeData(K,"events");o.rem=
oveData(K,"handle")}}},trigger:function(I,K,H,E){var =
G=3DI.type||I;if(!E){I=3Dtypeof =
I=3D=3D=3D"object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf(=
"!")>=3D0){I.type=3DG=3DG.slice(0,-1);I.exclusive=3Dtrue}if(!H){I.stopPro=
pagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&t=
his.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeTyp=
e=3D=3D3||H.nodeType=3D=3D8){return =
g}I.result=3Dg;I.target=3DH;K=3Do.makeArray(K);K.unshift(I)}I.currentTarg=
et=3DH;var =
J=3Do.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&=
G=3D=3D"click"))&&H["on"+G]&&H["on"+G].apply(H,K)=3D=3D=3Dfalse){I.result=
=3Dfalse}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=3D=3D=
"click")){this.triggered=3Dtrue;try{H[G]()}catch(L){}}this.triggered=3Dfa=
lse;if(!I.isPropagationStopped()){var =
F=3DH.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},ha=
ndle:function(K){var J,E;K=3Darguments[0]=3Do.event.fix(K||l.event);var =
L=3DK.type.split(".");K.type=3DL.shift();J=3D!L.length&&!K.exclusive;var =
I=3DRegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=3D(o.dat=
a(this,"events")||{})[K.type];for(var G in E){var =
H=3DE[G];if(J||I.test(H.type)){K.handler=3DH;K.data=3DH.data;var =
F=3DH.apply(this,arguments);if(F!=3D=3Dg){K.result=3DF;if(F=3D=3D=3Dfalse=
){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStop=
ped()){break}}}},props:"altKey attrChange attrName bubbles button =
cancelable charCode clientX clientY ctrlKey currentTarget data detail =
eventPhase fromElement handler keyCode metaKey newValue originalTarget =
pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey =
srcElement target toElement view wheelDelta which".split(" =
"),fix:function(H){if(H[h]){return H}var F=3DH;H=3Do.Event(F);for(var =
G=3Dthis.props.length,J;G;){J=3Dthis.props[--G];H[J]=3DF[J]}if(!H.target)=
{H.target=3DH.srcElement||document}if(H.target.nodeType=3D=3D3){H.target=3D=
H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=3D=
H.fromElement=3D=3DH.target?H.toElement:H.fromElement}if(H.pageX=3D=3Dnul=
l&&H.clientX!=3Dnull){var =
I=3Ddocument.documentElement,E=3Ddocument.body;H.pageX=3DH.clientX+(I&&I.=
scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=3DH.clientY+(I&=
&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCo=
de||H.charCode=3D=3D=3D0)?H.charCode:H.keyCode)){H.which=3DH.charCode||H.=
keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=3DH.ctrlKey}if(!H.which&&H.bu=
tton){H.which=3D(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return =
H},proxy:function(F,E){E=3DE||function(){return =
F.apply(this,arguments)};E.guid=3DF.guid=3DF.guid||E.guid||this.guid++;re=
turn =
E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setu=
p:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.lengt=
h){var =
E=3D0,F=3DRegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").=
live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(=
this,G[0],c)}}}}}};o.Event=3Dfunction(E){if(!this.preventDefault){return =
new =
o.Event(E)}if(E&&E.type){this.originalEvent=3DE;this.type=3DE.type}else{t=
his.type=3DE}this.timeStamp=3De();this[h]=3Dtrue};function k(){return =
false}function u(){return =
true}o.Event.prototype=3D{preventDefault:function(){this.isDefaultPrevent=
ed=3Du;var =
E=3Dthis.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefaul=
t()}E.returnValue=3Dfalse},stopPropagation:function(){this.isPropagationS=
topped=3Du;var =
E=3Dthis.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagat=
ion()}E.cancelBubble=3Dtrue},stopImmediatePropagation:function(){this.isI=
mmediatePropagationStopped=3Du;this.stopPropagation()},isDefaultPrevented=
:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var =
a=3Dfunction(F){var =
E=3DF.relatedTarget;while(E&&E!=3Dthis){try{E=3DE.parentNode}catch(G){E=3D=
this}}if(E!=3Dthis){F.type=3DF.data;o.event.handle.apply(this,arguments)}=
};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.e=
vent.special[E]=3D{setup:function(){o.event.add(this,F,a,E)},teardown:fun=
ction(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){re=
turn =
F=3D=3D"unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E=
||G,E&&G)})},one:function(G,H,F){var =
E=3Do.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply=
(this,arguments)});return =
this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){r=
eturn =
this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){re=
turn =
this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function=
(E,G){if(this[0]){var =
F=3Do.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G=
,this[0]);return F.result}},toggle:function(G){var =
E=3Darguments,F=3D1;while(F<E.length){o.event.proxy(G,E[F++])}return =
this.click(o.event.proxy(G,function(H){this.lastToggle=3D(this.lastToggle=
||0)%F;H.preventDefault();return =
E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F)=
{return =
this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.c=
all(document,o)}else{o.readyList.push(E)}return =
this},live:function(G,F){var =
E=3Do.event.proxy(F);E.guid+=3Dthis.selector+G;o(document).bind(i(G,this.=
selector),this.selector,E);return =
this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.g=
uid+this.selector+F}:null);return this}});function c(H){var =
E=3DRegExp("(^|\\.)"+H.type+"(\\.|$)"),G=3Dtrue,F=3D[];o.each(o.data(this=
,"events").live||[],function(I,J){if(E.test(J.type)){var =
K=3Do(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});o.each=
(F,function(){if(this.fn.call(this.elem,H,this.fn.data)=3D=3D=3Dfalse){G=3D=
false}});return G}function =
i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ =
/g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){=
if(!o.isReady){o.isReady=3Dtrue;if(o.readyList){o.each(o.readyList,functi=
on(){this.call(document,o)});o.readyList=3Dnull}o(document).triggerHandle=
r("ready")}}});var x=3Dfalse;function =
B(){if(x){return}x=3Dtrue;if(document.addEventListener){document.addEvent=
Listener("DOMContentLoaded",function(){document.removeEventListener("DOMC=
ontentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.=
attachEvent){document.attachEvent("onreadystatechange",function(){if(docu=
ment.readyState=3D=3D=3D"complete"){document.detachEvent("onreadystatecha=
nge",arguments.callee);o.ready()}});if(document.documentElement.doScroll&=
&typeof =
l.frameElement=3D=3D=3D"undefined"){(function(){if(o.isReady){return}try{=
document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.c=
allee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("bl=
ur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mouse=
move,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydow=
n,keypress,keyup,error").split(","),function(F,E){o.fn[E]=3Dfunction(G){r=
eturn =
G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var=
 E in =
o.cache){if(E!=3D1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.e=
lem)}}});(function(){o.support=3D{};var =
F=3Ddocument.documentElement,G=3Ddocument.createElement("script"),K=3Ddoc=
ument.createElement("div"),J=3D"script"+(new =
Date).getTime();K.style.display=3D"none";K.innerHTML=3D'   =
<link/><table></table><a href=3D"/a" =
style=3D"color:red;float:left;opacity:.5;">a</a><select><option>text</opt=
ion></select><object><param/></object>';var =
H=3DK.getElementsByTagName("*"),E=3DK.getElementsByTagName("a")[0];if(!H|=
|!H.length||!E){return}o.support=3D{leadingWhitespace:K.firstChild.nodeTy=
pe=3D=3D3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.get=
ElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSeria=
lize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttrib=
ute("style")),hrefNormalized:E.getAttribute("href")=3D=3D=3D"/a",opacity:=
E.style.opacity=3D=3D=3D"0.5",cssFloat:!!E.style.cssFloat,scriptEval:fals=
e,noCloneEvent:true,boxModel:null};G.type=3D"text/javascript";try{G.appen=
dChild(document.createTextNode("window."+J+"=3D1;"))}catch(I){}F.insertBe=
fore(G,F.firstChild);if(l[J]){o.support.scriptEval=3Dtrue;delete =
l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("oncli=
ck",function(){o.support.noCloneEvent=3Dfalse;K.detachEvent("onclick",arg=
uments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var =
L=3Ddocument.createElement("div");L.style.width=3D"1px";L.style.paddingLe=
ft=3D"1px";document.body.appendChild(L);o.boxModel=3Do.support.boxModel=3D=
L.offsetWidth=3D=3D=3D2;document.body.removeChild(L)})})();var =
w=3Do.support.cssFloat?"cssFloat":"styleFloat";o.props=3D{"for":"htmlFor"=
,"class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly=
",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabin=
dex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(type=
of G!=3D=3D"string"){return this._load(G)}var I=3DG.indexOf(" =
");if(I>=3D0){var E=3DG.slice(I,G.length);G=3DG.slice(0,I)}var =
H=3D"GET";if(J){if(o.isFunction(J)){K=3DJ;J=3Dnull}else{if(typeof =
J=3D=3D=3D"object"){J=3Do.param(J);H=3D"POST"}}}var =
F=3Dthis;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,=
L){if(L=3D=3D"success"||L=3D=3D"notmodified"){F.html(E?o("<div/>").append=
(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.respon=
seText)}if(K){F.each(K,[M.responseText,L,M])}}});return =
this},serialize:function(){return =
o.param(this.serializeArray())},serializeArray:function(){return =
this.map(function(){return =
this.elements?o.makeArray(this.elements):this}).filter(function(){return =
this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.no=
deName)||/text|hidden|password/i.test(this.type))}).map(function(E,F){var=
 G=3Do(this).val();return =
G=3D=3Dnull?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,va=
lue:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajax=
Complete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=
=3Dfunction(G){return this.bind(F,G)}});var =
r=3De();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=3DG;G=3Dnul=
l}return =
o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:functio=
n(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return =
o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=3DG;G=3D=
{}}return =
o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:functi=
on(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:=
true,type:"GET",contentType:"application/x-www-form-urlencoded",processDa=
ta:true,async:true,xhr:function(){return l.ActiveXObject?new =
ActiveXObject("Microsoft.XMLHTTP"):new =
XMLHttpRequest()},accepts:{xml:"application/xml, =
text/xml",html:"text/html",script:"text/javascript, =
application/javascript",json:"application/json, =
text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:=
function(M){M=3Do.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var =
W,F=3D/=3D\?(&|$)/g,R,V,G=3DM.type.toUpperCase();if(M.data&&M.processData=
&&typeof =
M.data!=3D=3D"string"){M.data=3Do.param(M.data)}if(M.dataType=3D=3D"jsonp=
"){if(G=3D=3D"GET"){if(!M.url.match(F)){M.url+=3D(M.url.match(/\?/)?"&":"=
?")+(M.jsonp||"callback")+"=3D?"}}else{if(!M.data||!M.data.match(F)){M.da=
ta=3D(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=3D?"}}M.dataType=3D"j=
son"}if(M.dataType=3D=3D"json"&&(M.data&&M.data.match(F)||M.url.match(F))=
){W=3D"jsonp"+r++;if(M.data){M.data=3D(M.data+"").replace(F,"=3D"+W+"$1")=
}M.url=3DM.url.replace(F,"=3D"+W+"$1");M.dataType=3D"script";l[W]=3Dfunct=
ion(X){V=3DX;I();L();l[W]=3Dg;try{delete =
l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=3D=3D"script"&&M.ca=
che=3D=3Dnull){M.cache=3Dfalse}if(M.cache=3D=3D=3Dfalse&&G=3D=3D"GET"){va=
r E=3De();var =
U=3DM.url.replace(/(\?|&)_=3D.*?(&|$)/,"$1_=3D"+E+"$2");M.url=3DU+((U=3D=3D=
M.url)?(M.url.match(/\?/)?"&":"?")+"_=3D"+E:"")}if(M.data&&G=3D=3D"GET"){=
M.url+=3D(M.url.match(/\?/)?"&":"?")+M.data;M.data=3Dnull}if(M.global&&!o=
.active++){o.event.trigger("ajaxStart")}var =
Q=3D/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=3D=3D"script"&&G=3D=
=3D"GET"&&Q&&(Q[1]&&Q[1]!=3Dlocation.protocol||Q[2]!=3Dlocation.host)){va=
r H=3Ddocument.getElementsByTagName("head")[0];var =
T=3Ddocument.createElement("script");T.src=3DM.url;if(M.scriptCharset){T.=
charset=3DM.scriptCharset}if(!W){var =
O=3Dfalse;T.onload=3DT.onreadystatechange=3Dfunction(){if(!O&&(!this.read=
yState||this.readyState=3D=3D"loaded"||this.readyState=3D=3D"complete")){=
O=3Dtrue;I();L();H.removeChild(T)}}}H.appendChild(T);return g}var =
K=3Dfalse;var =
J=3DM.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}=
else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-T=
ype",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Sinc=
e",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 =
GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setReques=
tHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+=
", =
*/*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)=3D=3D=
=3Dfalse){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort()=
;return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var =
N=3Dfunction(X){if(J.readyState=3D=3D0){if(P){clearInterval(P);P=3Dnull;i=
f(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.=
readyState=3D=3D4||X=3D=3D"timeout")){K=3Dtrue;if(P){clearInterval(P);P=3D=
null}R=3DX=3D=3D"timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModifie=
d&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=3D=3D"success"=
){try{V=3Do.httpData(J,M.dataType,M)}catch(Z){R=3D"parsererror"}}if(R=3D=3D=
"success"){var =
Y;try{Y=3DJ.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&=
&Y){o.lastModified[M.url]=3DY}if(!W){I()}}else{o.handleError(M,J,R)}L();i=
f(X){J.abort()}if(M.async){J=3Dnull}}}};if(M.async){var =
P=3DsetInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("=
timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,nul=
l,S)}if(!M.async){N()}function =
I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSucces=
s",[J,M])}}function =
L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComp=
lete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}retur=
n =
J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){=
o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){t=
ry{return =
!F.status&&location.protocol=3D=3D"file:"||(F.status>=3D200&&F.status<300=
)||F.status=3D=3D304||F.status=3D=3D1223}catch(E){}return =
false},httpNotModified:function(G,E){try{var =
H=3DG.getResponseHeader("Last-Modified");return =
G.status=3D=3D304||H=3D=3Do.lastModified[E]}catch(F){}return =
false},httpData:function(J,H,G){var =
F=3DJ.getResponseHeader("content-type"),E=3DH=3D=3D"xml"||!H&&F&&F.indexO=
f("xml")>=3D0,I=3DE?J.responseXML:J.responseText;if(E&&I.documentElement.=
tagName=3D=3D"parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=3DG.=
dataFilter(I,H)}if(typeof =
I=3D=3D=3D"string"){if(H=3D=3D"script"){o.globalEval(I)}if(H=3D=3D"json")=
{I=3Dl["eval"]("("+I+")")}}return I},param:function(E){var =
G=3D[];function =
H(I,J){G[G.length]=3DencodeURIComponent(I)+"=3D"+encodeURIComponent(J)}if=
(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}el=
se{for(var F in =
E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFu=
nction(E[F])?E[F]():E[F])}}}return =
G.join("&").replace(/%20/g,"+")}});var =
m=3D{},n,d=3D[["height","marginTop","marginBottom","paddingTop","paddingB=
ottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"]=
,["opacity"]];function t(F,E){var =
G=3D{};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=3DF});re=
turn G}o.fn.extend({show:function(J,L){if(J){return =
this.animate(t("show",3),J,L)}else{for(var =
H=3D0,F=3Dthis.length;H<F;H++){var =
E=3Do.data(this[H],"olddisplay");this[H].style.display=3DE||"";if(o.css(t=
his[H],"display")=3D=3D=3D"none"){var =
G=3Dthis[H].tagName,K;if(m[G]){K=3Dm[G]}else{var I=3Do("<"+G+" =
/>").appendTo("body");K=3DI.css("display");if(K=3D=3D=3D"none"){K=3D"bloc=
k"}I.remove();m[G]=3DK}this[H].style.display=3Do.data(this[H],"olddisplay=
",K)}}return this}},hide:function(H,I){if(H){return =
this.animate(t("hide",3),H,I)}else{for(var =
G=3D0,F=3Dthis.length;G<F;G++){var =
E=3Do.data(this[G],"olddisplay");if(!E&&E!=3D=3D"none"){o.data(this[G],"o=
lddisplay",o.css(this[G],"display"))}this[G].style.display=3D"none"}retur=
n this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=3Dtypeof =
G=3D=3D=3D"boolean";return =
o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G=3D=3D=
null||E?this.each(function(){var =
H=3DE?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t=
("toggle",3),G,F)},fadeTo:function(E,G,F){return =
this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var =
E=3Do.speed(F,H,G);return =
this[E.queue=3D=3D=3Dfalse?"each":"queue"](function(){var =
K=3Do.extend({},E),M,L=3Dthis.nodeType=3D=3D1&&o(this).is(":hidden"),J=3D=
this;for(M in I){if(I[M]=3D=3D"hide"&&L||I[M]=3D=3D"show"&&!L){return =
K.complete.call(this)}if((M=3D=3D"height"||M=3D=3D"width")&&this.style){K=
.display=3Do.css(this,"display");K.overflow=3Dthis.style.overflow}}if(K.o=
verflow!=3Dnull){this.style.overflow=3D"hidden"}K.curAnim=3Do.extend({},I=
);o.each(I,function(O,S){var R=3Dnew =
o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=3D=3D"toggle"?L?"show":"hi=
de":S](I)}else{var =
Q=3DS.toString().match(/^([+-]=3D)?([\d+-.]+)(.*)$/),T=3DR.cur(true)||0;i=
f(Q){var =
N=3DparseFloat(Q[2]),P=3DQ[3]||"px";if(P!=3D"px"){J.style[O]=3D(N||1)+P;T=
=3D((N||1)/R.cur(true))*T;J.style[O]=3DT+P}if(Q[1]){N=3D((Q[1]=3D=3D"-=3D=
"?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return =
true})},stop:function(F,E){var =
G=3Do.timers;if(F){this.queue([])}this.each(function(){for(var =
H=3DG.length-1;H>=3D0;H--){if(G[H].elem=3D=3Dthis){if(E){G[H](true)}G.spl=
ice(H,1)}}});if(!E){this.dequeue()}return =
this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("=
toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F=
){o.fn[E]=3Dfunction(G,H){return =
this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=3Dtypeof =
G=3D=3D=3D"object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,ea=
sing:F&&H||H&&!o.isFunction(H)&&H};E.duration=3Do.fx.off?0:typeof =
E.duration=3D=3D=3D"number"?E.duration:o.fx.speeds[E.duration]||o.fx.spee=
ds._default;E.old=3DE.complete;E.complete=3Dfunction(){if(E.queue!=3D=3Df=
alse){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return=
 E},easing:{linear:function(G,H,E,F){return =
E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}}=
,timers:[],fx:function(F,E,G){this.options=3DE;this.elem=3DF;this.prop=3D=
G;if(!E.orig){E.orig=3D{}}}});o.fx.prototype=3D{update:function(){if(this=
.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step=
[this.prop]||o.fx.step._default)(this);if((this.prop=3D=3D"height"||this.=
prop=3D=3D"width")&&this.elem.style){this.elem.style.display=3D"block"}},=
cur:function(F){if(this.elem[this.prop]!=3Dnull&&(!this.elem.style||this.=
elem.style[this.prop]=3D=3Dnull)){return this.elem[this.prop]}var =
E=3DparseFloat(o.css(this.elem,this.prop,F));return =
E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:functi=
on(I,H,G){this.startTime=3De();this.start=3DI;this.end=3DH;this.unit=3DG|=
|this.unit||"px";this.now=3Dthis.start;this.pos=3Dthis.state=3D0;var =
E=3Dthis;function F(J){return =
E.step(J)}F.elem=3Dthis.elem;if(F()&&o.timers.push(F)=3D=3D1){n=3DsetInte=
rval(function(){var K=3Do.timers;for(var =
J=3D0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInt=
erval(n)}},13)}},show:function(){this.options.orig[this.prop]=3Do.attr(th=
is.elem.style,this.prop);this.options.show=3Dtrue;this.custom(this.prop=3D=
=3D"width"||this.prop=3D=3D"height"?1:0,this.cur());o(this.elem).show()},=
hide:function(){this.options.orig[this.prop]=3Do.attr(this.elem.style,thi=
s.prop);this.options.hide=3Dtrue;this.custom(this.cur(),0)},step:function=
(H){var =
G=3De();if(H||G>=3Dthis.options.duration+this.startTime){this.now=3Dthis.=
end;this.pos=3Dthis.state=3D1;this.update();this.options.curAnim[this.pro=
p]=3Dtrue;var E=3Dtrue;for(var F in =
this.options.curAnim){if(this.options.curAnim[F]!=3D=3Dtrue){E=3Dfalse}}i=
f(E){if(this.options.display!=3Dnull){this.elem.style.overflow=3Dthis.opt=
ions.overflow;this.elem.style.display=3Dthis.options.display;if(o.css(thi=
s.elem,"display")=3D=3D"none"){this.elem.style.display=3D"block"}}if(this=
.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.sho=
w){for(var I in =
this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}thi=
s.options.complete.call(this.elem)}return false}else{var =
J=3DG-this.startTime;this.state=3DJ/this.options.duration;this.pos=3Do.ea=
sing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J=
,0,1,this.options.duration);this.now=3Dthis.start+((this.end-this.start)*=
this.pos);this.update()}return =
true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opaci=
ty:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E)=
{if(E.elem.style&&E.elem.style[E.prop]!=3Dnull){E.elem.style[E.prop]=3DE.=
now+E.unit}else{E.elem[E.prop]=3DE.now}}}});if(document.documentElement.g=
etBoundingClientRect){o.fn.offset=3Dfunction(){if(!this[0]){return{top:0,=
left:0}}if(this[0]=3D=3D=3Dthis[0].ownerDocument.body){return =
o.offset.bodyOffset(this[0])}var =
G=3Dthis[0].getBoundingClientRect(),J=3Dthis[0].ownerDocument,F=3DJ.body,=
E=3DJ.documentElement,L=3DE.clientTop||F.clientTop||0,K=3DE.clientLeft||F=
.clientLeft||0,I=3DG.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.sc=
rollTop)-L,H=3DG.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scro=
llLeft)-K;return{top:I,left:H}}}else{o.fn.offset=3Dfunction(){if(!this[0]=
){return{top:0,left:0}}if(this[0]=3D=3D=3Dthis[0].ownerDocument.body){ret=
urn =
o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();=
var =
J=3Dthis[0],G=3DJ.offsetParent,F=3DJ,O=3DJ.ownerDocument,M,H=3DO.document=
Element,K=3DO.body,L=3DO.defaultView,E=3DL.getComputedStyle(J,null),N=3DJ=
.offsetTop,I=3DJ.offsetLeft;while((J=3DJ.parentNode)&&J!=3D=3DK&&J!=3D=3D=
H){M=3DL.getComputedStyle(J,null);N-=3DJ.scrollTop,I-=3DJ.scrollLeft;if(J=
=3D=3D=3DG){N+=3DJ.offsetTop,I+=3DJ.offsetLeft;if(o.offset.doesNotAddBord=
er&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tag=
Name))){N+=3DparseInt(M.borderTopWidth,10)||0,I+=3DparseInt(M.borderLeftW=
idth,10)||0}F=3DG,G=3DJ.offsetParent}if(o.offset.subtractsBorderForOverfl=
owNotVisible&&M.overflow!=3D=3D"visible"){N+=3DparseInt(M.borderTopWidth,=
10)||0,I+=3DparseInt(M.borderLeftWidth,10)||0}E=3DM}if(E.position=3D=3D=3D=
"relative"||E.position=3D=3D=3D"static"){N+=3DK.offsetTop,I+=3DK.offsetLe=
ft}if(E.position=3D=3D=3D"fixed"){N+=3DMath.max(H.scrollTop,K.scrollTop),=
I+=3DMath.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset=3D=
{initialize:function(){if(this.initialized){return}var =
L=3Ddocument.body,F=3Ddocument.createElement("div"),H,G,N,I,M,E,J=3DL.sty=
le.marginTop,K=3D'<div =
style=3D"position:absolute;top:0;left:0;margin:0;border:5px solid =
#000;padding:0;width:1px;height:1px;"><div></div></div><table =
style=3D"position:absolute;top:0;left:0;margin:0;border:5px solid =
#000;padding:0;width:1px;height:1px;" cellpadding=3D"0" =
cellspacing=3D"0"><tr><td></td></tr></table>';M=3D{position:"absolute",to=
p:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"=
};for(E in =
M){F.style[E]=3DM[E]}F.innerHTML=3DK;L.insertBefore(F,L.firstChild);H=3DF=
.firstChild,G=3DH.firstChild,I=3DH.nextSibling.firstChild.firstChild;this=
.doesNotAddBorder=3D(G.offsetTop!=3D=3D5);this.doesAddBorderForTableAndCe=
lls=3D(I.offsetTop=3D=3D=3D5);H.style.overflow=3D"hidden",H.style.positio=
n=3D"relative";this.subtractsBorderForOverflowNotVisible=3D(G.offsetTop=3D=
=3D=3D-5);L.style.marginTop=3D"1px";this.doesNotIncludeMarginInBodyOffset=
=3D(L.offsetTop=3D=3D=3D0);L.style.marginTop=3DJ;L.removeChild(F);this.in=
itialized=3Dtrue},bodyOffset:function(E){o.offset.initialized||o.offset.i=
nitialize();var =
G=3DE.offsetTop,F=3DE.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOf=
fset){G+=3DparseInt(o.curCSS(E,"marginTop",true),10)||0,F+=3DparseInt(o.c=
urCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({pos=
ition:function(){var I=3D0,H=3D0,F;if(this[0]){var =
G=3Dthis.offsetParent(),J=3Dthis.offset(),E=3D/^body|html$/i.test(G[0].ta=
gName)?{top:0,left:0}:G.offset();J.top-=3Dj(this,"marginTop");J.left-=3Dj=
(this,"marginLeft");E.top+=3Dj(G,"borderTopWidth");E.left+=3Dj(G,"borderL=
eftWidth");F=3D{top:J.top-E.top,left:J.left-E.left}}return =
F},offsetParent:function(){var =
E=3Dthis[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.=
tagName)&&o.css(E,"position")=3D=3D"static")){E=3DE.offsetParent}return =
o(E)}});o.each(["Left","Top"],function(F,E){var =
G=3D"scroll"+E;o.fn[G]=3Dfunction(H){if(!this[0]){return null}return =
H!=3D=3Dg?this.each(function(){this=3D=3Dl||this=3D=3Ddocument?l.scrollTo=
(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=3DH}):this[0]=3D=3D=
l||this[0]=3D=3Ddocument?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&=
&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Hei=
ght","Width"],function(H,F){var =
E=3DH?"Left":"Top",G=3DH?"Right":"Bottom";o.fn["inner"+F]=3Dfunction(){re=
turn =
this[F.toLowerCase()]()+j(this,"padding"+E)+j(this,"padding"+G)};o.fn["ou=
ter"+F]=3Dfunction(J){return =
this["inner"+F]()+j(this,"border"+E+"Width")+j(this,"border"+G+"Width")+(=
J?j(this,"margin"+E)+j(this,"margin"+G):0)};var =
I=3DF.toLowerCase();o.fn[I]=3Dfunction(J){return =
this[0]=3D=3Dl?document.compatMode=3D=3D"CSS1Compat"&&document.documentEl=
ement["client"+F]||document.body["client"+F]:this[0]=3D=3Ddocument?Math.m=
ax(document.documentElement["client"+F],document.body["scroll"+F],documen=
t.documentElement["scroll"+F],document.body["offset"+F],document.document=
Element["offset"+F]):J=3D=3D=3Dg?(this.length?o.css(this[0],I):null):this=
.css(I,typeof J=3D=3D=3D"string"?J:J+"px")}})})();
------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/javascripts/jcarousellite.js?1238029555

(function($){$.fn.jCarouselLite=3Dfunction(o){o=3D$.extend({btnPrev:null,=
btnNext:null,btnGo:null,mouseWheel:false,auto:null,speed:200,easing:null,=
vertical:false,circular:true,visible:3,start:0,scroll:1,beforeStart:null,=
afterEnd:null},o||{});return this.each(function(){var =
b=3Dfalse,animCss=3Do.vertical?"top":"left",sizeCss=3Do.vertical?"height"=
:"width";var =
c=3D$(this),ul=3D$("ul",c),tLi=3D$("li",ul),tl=3DtLi.size(),v=3Do.visible=
;if(o.circular){ul.prepend(tLi.slice(tl-v-1+1).clone()).append(tLi.slice(=
0,v).clone());o.start+=3Dv}var =
f=3D$("li",ul),itemLength=3Df.size(),curr=3Do.start;c.css("visibility","v=
isible");f.css({overflow:"hidden",float:o.vertical?"none":"left"});ul.css=
({margin:"0",padding:"0",position:"relative","list-style-type":"none","z-=
index":"1"});c.css({overflow:"hidden",position:"relative","z-index":"2",l=
eft:"0px"});var g=3Do.vertical?height(f):width(f);var =
h=3Dg*itemLength;var =
j=3Dg*v;f.css({width:f.width(),height:f.height()});ul.css(sizeCss,h+"px")=
.css(animCss,-(curr*g));c.css(sizeCss,j+"px");if(o.btnPrev)$(o.btnPrev).c=
lick(function(){return =
go(curr-o.scroll)});if(o.btnNext)$(o.btnNext).click(function(){return =
go(curr+o.scroll)});if(o.btnGo)$.each(o.btnGo,function(i,a){$(a).click(fu=
nction(){return =
go(o.circular?o.visible+i:i)})});if(o.mouseWheel&&c.mousewheel)c.mousewhe=
el(function(e,d){return =
d>0?go(curr-o.scroll):go(curr+o.scroll)});if(o.auto)setInterval(function(=
){go(curr+o.scroll)},o.auto+o.speed);function vis(){return =
f.slice(curr).slice(0,v)};function =
go(a){if(!b){if(o.beforeStart)o.beforeStart.call(this,vis());if(o.circula=
r){if(a<=3Do.start-v-1){ul.css(animCss,-((itemLength-(v*2))*g)+"px");curr=
=3Da=3D=3Do.start-v-1?itemLength-(v*2)-1:itemLength-(v*2)-o.scroll}else =
if(a>=3DitemLength-v+1){ul.css(animCss,-((v)*g)+"px");curr=3Da=3D=3DitemL=
ength-v+1?v+1:v+o.scroll}else =
curr=3Da}else{if(a<0||a>itemLength-v)return;else =
curr=3Da}b=3Dtrue;ul.animate(animCss=3D=3D"left"?{left:-(curr*g)}:{top:-(=
curr*g)},o.speed,o.easing,function(){if(o.afterEnd)o.afterEnd.call(this,v=
is());b=3Dfalse});if(!o.circular){$(o.btnPrev+","+o.btnNext).removeClass(=
"disabled");$((curr-o.scroll<0&&o.btnPrev)||(curr+o.scroll>itemLength-v&&=
o.btnNext)||[]).addClass("disabled")}}return false}})};function =
css(a,b){return parseInt($.css(a[0],b))||0};function width(a){return =
a[0].offsetWidth+css(a,'marginLeft')+css(a,'marginRight')};function =
height(a){return =
a[0].offsetHeight+css(a,'marginTop')+css(a,'marginBottom')}})(jQuery);
------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.tipped.co.uk/javascripts/jshizzle.js?1238029555

jQuery.noConflict();=0A=
=0A=
jQuery(document).ready(function() {=0A=
  jQuery('.thumb_holder').jCarouselLite({=0A=
    btnNext: ".next_thumbnails",=0A=
    btnPrev: ".prev_thumbnails"=0A=
  });=0A=
});=0A=

------=_NextPart_000_0014_01C9B9CE.6282A360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.google-analytics.com/urchin.js

//-- Google Analytics Urchin Module=0A=
//-- Copyright 2007 Google, All Rights Reserved.=0A=
=0A=
//-- Urchin On Demand Settings ONLY=0A=
var _uacct=3D"";			// set up the Urchin Account=0A=
var _userv=3D1;			// service mode (0=3Dlocal,1=3Dremote,2=3Dboth)=0A=
=0A=
//-- UTM User Settings=0A=
var _ufsc=3D1;			// set client info flag (1=3Don|0=3Doff)=0A=
var _udn=3D"auto";		// (auto|none|domain) set the domain name for cookies=0A=
var _uhash=3D"on";		// (on|off) unique domain hash for cookies=0A=
var _utimeout=3D"1800";   	// set the inactive session timeout in seconds=0A=
var _ugifpath=3D"/__utm.gif";	// set the web path to the __utm.gif file=0A=
var _utsp=3D"|";			// transaction field separator=0A=
var _uflash=3D1;			// set flash version detect option (1=3Don|0=3Doff)=0A=
var _utitle=3D1;			// set the document title detect option =
(1=3Don|0=3Doff)=0A=
var _ulink=3D0;			// enable linker functionality (1=3Don|0=3Doff)=0A=
var _uanchor=3D0;			// enable use of anchors for campaign =
(1=3Don|0=3Doff)=0A=
var _utcp=3D"/";			// the cookie path for tracking=0A=
var _usample=3D100;		// The sampling % of visitors to track (1-100).=0A=
=0A=
//-- UTM Campaign Tracking Settings=0A=
var _uctm=3D1;			// set campaign tracking module (1=3Don|0=3Doff)=0A=
var _ucto=3D"15768000";		// set timeout in seconds (6 month default)=0A=
var _uccn=3D"utm_campaign";	// name=0A=
var _ucmd=3D"utm_medium";		// medium (cpc|cpm|link|email|organic)=0A=
var _ucsr=3D"utm_source";		// source=0A=
var _uctr=3D"utm_term";		// term/keyword=0A=
var _ucct=3D"utm_content";	// content=0A=
var _ucid=3D"utm_id";		// id number=0A=
var _ucno=3D"utm_nooverride";	// don't override=0A=
=0A=
//-- Auto/Organic Sources and Keywords=0A=
var _uOsr=3Dnew Array();=0A=
var _uOkw=3Dnew Array();=0A=
_uOsr[0]=3D"google";	_uOkw[0]=3D"q";=0A=
_uOsr[1]=3D"yahoo";	_uOkw[1]=3D"p";=0A=
_uOsr[2]=3D"msn";		_uOkw[2]=3D"q";=0A=
_uOsr[3]=3D"aol";		_uOkw[3]=3D"query";=0A=
_uOsr[4]=3D"aol";		_uOkw[4]=3D"encquery";=0A=
_uOsr[5]=3D"lycos";	_uOkw[5]=3D"query";=0A=
_uOsr[6]=3D"ask";		_uOkw[6]=3D"q";=0A=
_uOsr[7]=3D"altavista";	_uOkw[7]=3D"q";=0A=
_uOsr[8]=3D"netscape";	_uOkw[8]=3D"query";=0A=
_uOsr[9]=3D"cnn";	_uOkw[9]=3D"query";=0A=
_uOsr[10]=3D"looksmart";	_uOkw[10]=3D"qt";=0A=
_uOsr[11]=3D"about";	_uOkw[11]=3D"terms";=0A=
_uOsr[12]=3D"mamma";	_uOkw[12]=3D"query";=0A=
_uOsr[13]=3D"alltheweb";	_uOkw[13]=3D"q";=0A=
_uOsr[14]=3D"gigablast";	_uOkw[14]=3D"q";=0A=
_uOsr[15]=3D"voila";	_uOkw[15]=3D"rdata";=0A=
_uOsr[16]=3D"virgilio";	_uOkw[16]=3D"qs";=0A=
_uOsr[17]=3D"live";	_uOkw[17]=3D"q";=0A=
_uOsr[18]=3D"baidu";	_uOkw[18]=3D"wd";=0A=
_uOsr[19]=3D"alice";	_uOkw[19]=3D"qs";=0A=
_uOsr[20]=3D"yandex";	_uOkw[20]=3D"text";=0A=
_uOsr[21]=3D"najdi";	_uOkw[21]=3D"q";=0A=
_uOsr[22]=3D"aol";	_uOkw[22]=3D"q";=0A=
_uOsr[23]=3D"club-internet"; _uOkw[23]=3D"query";=0A=
_uOsr[24]=3D"mama";	_uOkw[24]=3D"query";=0A=
_uOsr[25]=3D"seznam";	_uOkw[25]=3D"q";=0A=
_uOsr[26]=3D"search";	_uOkw[26]=3D"q";=0A=
_uOsr[27]=3D"wp";	_uOkw[27]=3D"szukaj";=0A=
_uOsr[28]=3D"onet";	_uOkw[28]=3D"qt";=0A=
_uOsr[29]=3D"netsprint";	_uOkw[29]=3D"q";=0A=
_uOsr[30]=3D"google.interia";	_uOkw[30]=3D"q";=0A=
_uOsr[31]=3D"szukacz";	_uOkw[31]=3D"q";=0A=
_uOsr[32]=3D"yam";	_uOkw[32]=3D"k";=0A=
_uOsr[33]=3D"pchome";	_uOkw[33]=3D"q";=0A=
_uOsr[34]=3D"kvasir";	_uOkw[34]=3D"searchExpr";=0A=
_uOsr[35]=3D"sesam";	_uOkw[35]=3D"q";=0A=
_uOsr[36]=3D"ozu"; _uOkw[36]=3D"q";=0A=
_uOsr[37]=3D"terra"; _uOkw[37]=3D"query";=0A=
_uOsr[38]=3D"nostrum"; _uOkw[38]=3D"query";=0A=
_uOsr[39]=3D"mynet"; _uOkw[39]=3D"q";=0A=
_uOsr[40]=3D"ekolay"; _uOkw[40]=3D"q";=0A=
_uOsr[41]=3D"search.ilse"; _uOkw[41]=3D"search_for";=0A=
=0A=
//-- Auto/Organic Keywords to Ignore=0A=
var _uOno=3Dnew Array();=0A=
//_uOno[0]=3D"urchin";=0A=
//_uOno[1]=3D"urchin.com";=0A=
//_uOno[2]=3D"www.urchin.com";=0A=
=0A=
//-- Referral domains to Ignore=0A=
var _uRno=3Dnew Array();=0A=
//_uRno[0]=3D".urchin.com";=0A=
=0A=
//-- **** Don't modify below this point ***=0A=
var =
_uff,_udh,_udt,_ubl=3D0,_udo=3D"",_uu,_ufns=3D0,_uns=3D0,_ur=3D"-",_ufno=3D=
0,_ust=3D0,_ubd=3Ddocument,_udl=3D_ubd.location,_udlh=3D"",_uwv=3D"1.3";=0A=
var _ugifpath2=3D"http://www.google-analytics.com/__utm.gif";=0A=
if (_udl.hash) _udlh=3D_udl.href.substring(_udl.href.indexOf('#'));=0A=
if (_udl.protocol=3D=3D"https:") =
_ugifpath2=3D"https://ssl.google-analytics.com/__utm.gif";=0A=
if (!_utcp || _utcp=3D=3D"") _utcp=3D"/";=0A=
function urchinTracker(page) {=0A=
 if (_udl.protocol=3D=3D"file:") return;=0A=
 if (_uff && (!page || page=3D=3D"")) return;=0A=
 var a,b,c,xx,v,z,k,x=3D"",s=3D"",f=3D0,nv=3D0;=0A=
 var nx=3D" expires=3D"+_uNx()+";";=0A=
 var dc=3D_ubd.cookie;=0A=
 _udh=3D_uDomain();=0A=
 if (!_uVG()) return;=0A=
 _uu=3DMath.round(Math.random()*2147483647);=0A=
 _udt=3Dnew Date();=0A=
 _ust=3DMath.round(_udt.getTime()/1000);=0A=
 a=3Ddc.indexOf("__utma=3D"+_udh+".");=0A=
 b=3Ddc.indexOf("__utmb=3D"+_udh);=0A=
 c=3Ddc.indexOf("__utmc=3D"+_udh);=0A=
 if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A=
 if (_utimeout && _utimeout!=3D"") {=0A=
  x=3Dnew Date(_udt.getTime()+(_utimeout*1000));=0A=
  x=3D" expires=3D"+x.toGMTString()+";";=0A=
 }=0A=
 if (_ulink) {=0A=
  if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A=
  s+=3D_udl.search;=0A=
  if(s && s!=3D"" && s.indexOf("__utma=3D")>=3D0) {=0A=
   if (!(_uIN(a=3D_uGC(s,"__utma=3D","&")))) a=3D"-";=0A=
   if (!(_uIN(b=3D_uGC(s,"__utmb=3D","&")))) b=3D"-";=0A=
   if (!(_uIN(c=3D_uGC(s,"__utmc=3D","&")))) c=3D"-";=0A=
   v=3D_uGC(s,"__utmv=3D","&");=0A=
   z=3D_uGC(s,"__utmz=3D","&");=0A=
   k=3D_uGC(s,"__utmk=3D","&");=0A=
   xx=3D_uGC(s,"__utmx=3D","&");=0A=
   if ((k*1) !=3D ((_uHash(a+b+c+xx+z+