From: <Saved by Windows Internet Explorer 7>
Subject: Beyond3D - Origin of Quake3's Fast InvSqrt() - Part Two
Date: Thu, 5 Apr 2007 13:25:06 -0600
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0088_01C77785.D3492390"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028

This is a multi-part message in MIME format.

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/content/articles/15/

=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 xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Beyond3D - =
Origin of Quake3's Fast InvSqrt() - Part Two</TITLE>
<META http-equiv=3Dcontent-type content=3D"text/html; charset=3Dutf-8">
<META content=3Dbeyond3d name=3Dkeywords>
<META content=3D"Beyond3D 3.0" name=3Ddescription><LINK=20
href=3D"http://www.beyond3d.com/css/siteh.css" type=3Dtext/css =
rel=3Dstylesheet>
<STYLE type=3Dtext/css>* HTML #wrapper {
=09
}
#wrapper {
	MAX-WIDTH: 1200px
}
</STYLE>
<LINK href=3D"http://www.beyond3d.com/css/site.css" type=3Dtext/css=20
rel=3Dstylesheet><LINK href=3D"http://www.beyond3d.com/css/tw.css" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK href=3D"http://www.beyond3d.com/css/lightbox.css" =

type=3Dtext/css rel=3Dstylesheet><LINK href=3D"/images/favicon.png" =
type=3Dimage/png=20
rel=3D"shortcut icon">
<SCRIPT src=3D"http://www.beyond3d.com/jslibs/tw.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://www.beyond3d.com/jslibs/prototype.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://www.beyond3d.com/jslibs/scriptaculous.js?load=3Deffects"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://www.beyond3d.com/jslibs/lightbox.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://www.beyond3d.com/jslibs/pagenav.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://hexusads.fluent.ltd.uk/adx.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://www.google-analytics.com/urchin.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT=20
type=3Dtext/javascript>=0A=
		_uacct =3D "UA-849374-1";=0A=
		urchinTracker();=0A=
	</SCRIPT>

<META content=3D"MSHTML 6.00.6000.16414" name=3DGENERATOR></HEAD>
<BODY>
<DIV id=3Dwrapper>
<DIV id=3Dinnerwrapper><!-- header -->
<DIV id=3Dheader><A name=3Dtop></A>
<DIV align=3Dcenter><A href=3D"http://www.beyond3d.com/"><IMG=20
style=3D"BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none"=20
height=3D85 =
src=3D"http://www.beyond3d.com/images/logo/400-Text-Logo.png"=20
width=3D400></A>
<SCRIPT language=3DJavaScript =
src=3D"http://hexusads.fluent.ltd.uk/adx.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript type=3Dtext/javascript>
<!--
   if (!document.phpAds_used) document.phpAds_used =3D ',';
   phpAds_random =3D new String (Math.random()); phpAds_random =3D =
phpAds_random.substring(2,11);
  =20
   document.write ("<" + "script language=3D'JavaScript' =
type=3D'text/javascript' src=3D'");
   document.write ("http://hexusads.fluent.ltd.uk/adjs.php?n=3D" + =
phpAds_random);
   document.write ("&amp;what=3Dzone:92&amp;target=3D_blank");
   document.write ("&amp;exclude=3D" + document.phpAds_used);
   if (document.referrer)
      document.write ("&amp;referer=3D" + escape(document.referrer));
   document.write ("'><" + "/script>");
//-->
</SCRIPT>
 <NOSCRIPT><A =
href=3D"http://hexusads.fluent.ltd.uk/adclick.php?n=3Da4b04b47"=20
target=3D_blank><IMG alt=3D""=20
src=3D"http://hexusads.fluent.ltd.uk/adview.php?what=3Dzone:92&amp;n=3Da4=
b04b47"=20
border=3D0></A></NOSCRIPT> </DIV><!-- main nav -->
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%">
  <TBODY>
  <TR height=3D53>
    <TD=20
    style=3D"BACKGROUND-IMAGE: url(/images/menu-left2-shaded.png); =
BACKGROUND-REPEAT: no-repeat"=20
    width=3D86>&nbsp;</TD>
    <TD=20
    style=3D"BACKGROUND-IMAGE: url(/images/menu-mid2.png); =
BACKGROUND-REPEAT: repeat-x"=20
    width=3D*><A class=3Dna href=3D"http://www.beyond3d.com/">News</A> =
<A class=3Dna=20
      href=3D"http://www.beyond3d.com/content/reviews">Reviews</A> <A =
class=3Dna=20
      href=3D"http://www.beyond3d.com/content/articles">Articles</A> <A =
class=3Dna=20
      href=3D"http://www.beyond3d.com/content/interviews">Interviews</A> =
<A=20
      class=3Dna href=3D"http://www.beyond3d.com/jpr">JPR</A> <A =
class=3Dna=20
      href=3D"http://www.beyond3d.com/resources/">3D Resources</A> <A =
class=3Dna=20
      href=3D"http://forum.beyond3d.com/">Forums</A> <A class=3Dna=20
      href=3D"http://www.beyond3d.com/content/about">About Us</A> <A =
class=3Dna=20
      href=3D"http://www.beyond3d.com/content/advertise">Advertise</A> =
<A class=3Dna=20
      href=3D"http://www.beyond3d.com/content/contact">Contact</A> </TD>
    <TD=20
    style=3D"BACKGROUND-IMAGE: url(/images/menu-mid2.png); =
BACKGROUND-REPEAT: repeat-x"=20
    width=3D30><A class=3Dna =
href=3D"http://www.beyond3d.com/rss/feedslist"><IMG=20
      style=3D"VERTICAL-ALIGN: middle; BORDER-TOP-STYLE: none; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: =
none"=20
      height=3D24 src=3D"http://www.beyond3d.com/images/rss-24x24.png" =
width=3D24></A>=20
    </TD>
    <TD=20
    style=3D"BACKGROUND-IMAGE: url(/images/menu-right2.png); =
BACKGROUND-REPEAT: no-repeat"=20
    align=3Dright width=3D208>&nbsp;</TD></TR></TBODY></TABLE><!-- sub =
nav --><!--=0A=
		<ul id=3D"subnav">=0A=
=0A=
		</ul>=0A=
		--></DIV><!-- three column xhtml layout -->
<DIV id=3Dsidebar><!-- column A -->
<H3 class=3Dtext2 id=3Dtitle1><B>Latest Reviews</B></H3>
<UL>
  <LI><A title=3D"Zotac GeForce 8800 GTS 320MiB Overclocked"=20
  href=3D"http://www.beyond3d.com/content/reviews/9">Zotac GeForce 8800 =
GTS 320MiB=20
  Overclocked</A>=20
  <LI><A title=3D"NVIDIA G80: General Performance Analysis"=20
  href=3D"http://www.beyond3d.com/content/reviews/7">NVIDIA G80: General =

  Performance Analysis</A>=20
  <LI><A title=3D"NVIDIA G80: Image Quality Analysis"=20
  href=3D"http://www.beyond3d.com/content/reviews/3">NVIDIA G80: Image =
Quality=20
  Analysis</A>=20
  <LI><A title=3D"NVIDIA G80: Architecture and GPU Analysis"=20
  href=3D"http://www.beyond3d.com/content/reviews/1">NVIDIA G80: =
Architecture and=20
  GPU Analysis</A>=20
  <LI><A title=3D"PowerColor X1300 PRO and HyperMemory"=20
  href=3D"http://www.beyond3d.com/content/reviews/6">PowerColor X1300 =
PRO and=20
  HyperMemory</A> </LI></UL>
<H3 class=3Dtext2 id=3Dtitle1><B>Latest Articles</B></H3>
<UL>
  <LI><A title=3D"Stream Processors, Inc. at ISSCC '07"=20
  href=3D"http://www.beyond3d.com/content/articles/29">Stream =
Processors, Inc. at=20
  ISSCC '07</A>=20
  <LI><A title=3D"Latest TechWatch preview from JPR"=20
  href=3D"http://www.beyond3d.com/content/articles/23">Latest TechWatch =
preview=20
  from JPR</A>=20
  <LI><A title=3D"JPR AIB Market Report Q4'06"=20
  href=3D"http://www.beyond3d.com/content/articles/22">JPR AIB Market =
Report=20
  Q4'06</A>=20
  <LI><A title=3D"JPR Workstation Report Q4'06"=20
  href=3D"http://www.beyond3d.com/content/articles/21">JPR Workstation =
Report=20
  Q4'06</A>=20
  <LI><A title=3D"JPR @ Beyond3D Explained"=20
  =
href=3D"http://www.beyond3d.com/content/articles/17">http://www.beyond3d.=
com/content/articles/17</A>=20
  </LI></UL>
<DIV align=3Dcenter>
<SCRIPT language=3DJavaScript type=3Dtext/javascript>
<!--
   if (!document.phpAds_used) document.phpAds_used =3D ',';
   phpAds_random =3D new String (Math.random()); phpAds_random =3D =
phpAds_random.substring(2,11);
  =20
   document.write ("<" + "script language=3D'JavaScript' =
type=3D'text/javascript' src=3D'");
   document.write ("http://hexusads.fluent.ltd.uk/adjs.php?n=3D" + =
phpAds_random);
   document.write ("&amp;what=3Dzone:90&amp;target=3D_blank");
   document.write ("&amp;exclude=3D" + document.phpAds_used);
   if (document.referrer)
      document.write ("&amp;referer=3D" + escape(document.referrer));
   document.write ("'><" + "/script>");
//-->
</SCRIPT>
<NOSCRIPT><A =
href=3D"http://hexusads.fluent.ltd.uk/adclick.php?n=3Dab03608d"=20
target=3D_blank><IMG alt=3D""=20
src=3D"http://hexusads.fluent.ltd.uk/adview.php?what=3Dzone:90&amp;n=3Dab=
03608d"=20
border=3D0></A></NOSCRIPT> </DIV><!-- end of column A --></DIV><!-- =
column C - right --><!-- end of column C -->
<DIV id=3Dcontentnorightbar>
<H2 class=3Dneutral>Origin of Quake3's Fast InvSqrt() - Part Two - Page =
1</H2>
<DIV><SPAN style=3D"FONT-SIZE: smaller; COLOR: #999">Published on 19th =
Dec 2006,=20
written by Rys for Consumer Graphics - Last updated: 21st Mar =
2007</SPAN> </DIV><!-- content -->
<H3>Introduction</H3>
<P></P>
<DIV style=3D"PADDING-LEFT: 5px; FLOAT: right; TEXT-ALIGN: center"><SPAN =

style=3D"FONT-SIZE: smaller; COLOR: #999">Advertisement</SPAN><BR>
<SCRIPT language=3DJavaScript =
src=3D"http://hexusads.fluent.ltd.uk/adx.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript type=3Dtext/javascript>
<!--
   if (!document.phpAds_used) document.phpAds_used =3D ',';
   phpAds_random =3D new String (Math.random()); phpAds_random =3D =
phpAds_random.substring(2,11);
  =20
   document.write ("<" + "script language=3D'JavaScript' =
type=3D'text/javascript' src=3D'");
   document.write ("http://hexusads.fluent.ltd.uk/adjs.php?n=3D" + =
phpAds_random);
   document.write ("&amp;what=3Dzone:89&amp;target=3D_blank");
   document.write ("&amp;exclude=3D" + document.phpAds_used);
   if (document.referrer)
      document.write ("&amp;referer=3D" + escape(document.referrer));
   document.write ("'><" + "/script>");
//-->
</SCRIPT>
<NOSCRIPT><A =
href=3D"http://hexusads.fluent.ltd.uk/adclick.php?n=3Dacf2848f"=20
target=3D_blank><IMG alt=3D""=20
src=3D"http://hexusads.fluent.ltd.uk/adview.php?what=3Dzone:89&amp;n=3Dac=
f2848f"=20
border=3D0></A></NOSCRIPT></DIV>
<P></P>
<P><STRONG>Note!</STRONG> This article is a short and slightly late =
followup to=20
<A href=3D"http://www.beyond3d.com/articles/fastinvsqrt/">another short =
and very=20
late investigation</A> into the origin of the fast inverse square root =
function=20
published as part of id Software's Quake3 source code release, 19th =
August 2005.=20
Check out the original for the background to what's being discussed =
below. </P>
<H3>Not done yet</H3>
<P><SPAN style=3D"COLOR: #003399">float</SPAN> InvSqrt (<SPAN=20
style=3D"COLOR: #003399">float</SPAN> =
x){<BR>&nbsp;&nbsp;&nbsp;&nbsp;float xhalf =3D=20
0.5f*x;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style=3D"COLOR: =
#003399">int</SPAN> i =3D=20
*(<SPAN style=3D"COLOR: =
#003399">int</SPAN>*)&amp;x;<BR>&nbsp;&nbsp;&nbsp;&nbsp;i=20
=3D 0x5f3759df - (i&gt;&gt;1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;x =3D *(<SPAN=20
style=3D"COLOR: =
#003399">float</SPAN>*)&amp;i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;x =3D=20
x*(1.5f - xhalf*x*x);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN=20
style=3D"COLOR: #003399">return</SPAN> x;<BR>} </P>
<P>The end of the original linked article above finished off with us =
opining=20
about the author, saying that the last man we'd probably ever find =
that'd=20
touched the code is Gary Tarolli, ex SGI, ex 3dfx, now at NVIDIA. After =
passing=20
by coding luminaries such as John Carmack, Michael Abrash and Terje =
Mathison,=20
attributing at least some part of it to Gary seemed pretty fitting given =
his=20
history and contributions to modern 3D graphics, not least the fact he's =
a=20
seriously good programmer too, and we left it at that. </P>
<P>Thinking that was it, we published and publicised and Slashdot picked =
it up,=20
giving the piece some very hefty exposure. Exposure enough, it =
transpires, to=20
have the real author say hello and own up to it. So it's not quite Gary, =
but=20
rather another Silicon Valley veteran with a name beginning with G. Step =

forward, Greg Walsh. </P>
<P>Greg's been a veteran of the computing industry since the early 70s, =
his=20
first big deals being working on Internet and distributed computing =
technologies=20
since before it was even the Internet, and helping to engineer the first =
WYSIWYG=20
word processor at Xerox PARC while at Stanford University. Following =
that, Greg=20
helped found Ardent Computer, whose <A=20
href=3D"http://en.wikipedia.org/wiki/Ardent_Computer">Wikipedia =
entry</A> gives=20
you more information on the company and its products than I possibly =
can. </P>
<P>Developing parallel graphics minicomputers using custom vector =
processors and=20
then Intel i860 RISC vector processors (used in old NeXT boxes to run =
the=20
graphics subsystem, as just one of that IC's uses), Ardent became =
Stardent after=20
Kubota, the company funding Ardent at the time, forced a merger with =
Stellar,=20
Ardent Computer's biggest competitor. </P>
<P>Ardent's Titan graphics minicomputer was having a hard time reaching =
its=20
performance claims, and Greg initially engineered the fast =
<EM>1/sqrt(x)</EM> as=20
a means to speed up software running on the computer that couldn't =
utilise the=20
vector hardware. At the time, Greg was working with Cleve Moler, =
MathWorks=20
founder and author of MatLab, at Ardent. It's from working with Cleve =
that Greg=20
got the initial seed of the idea to write the function. Cleve at the =
time was=20
investigating using N-R iteration for approximation, and Greg also wrote =

<EM>1/cuberoot(x)</EM> for the Titan in the same period using similar =
(but more=20
complex) methods. </P>
<P>At the same time, Tarolli was also consulting for Kubota, so we get =
our=20
lightbulb-above-head realisation about its movements into the published =
source,=20
since Gary was also using it and tweaking it for his own uses at 3dfx, =
and you=20
can trace 3dfx to id Software via Brian Hook at the very least. The =
rest, as=20
they say, is history. Gary and Greg would further work together for =
Accel=20
Graphics (Accel were eventually bought by Evans and Sutherland, yet=20
<EM>another</EM> company named across these two pieces that you could =
write an=20
entire 3D-based book about). I'm yet to collect an AccelSTAR of any =
kind, if=20
anyone with a spare is reading! </P>
<P>So we end up adding Greg to the list of those who have written or =
touched the=20
code over the years; we can rightfully name Cleve as the inspiration and =
Greg as=20
the author; and now we can likely put the story to bed. Greg left the 3D =
game to=20
start a business software company that successfully hit IPO to big =
fanfare in=20
1999, Kubota ended up producing add-in 3D boards for DEC workstations =
(the=20
Denali is mostly a very rare collectors item now) before leaving 3D for =
good,=20
and Cleve is still at Mathworks as its Chief Scientist and founder. </P>
<P>A big thanks to Greg for saying hello and passing on his information, =
and big=20
thanks to Slashdot (and Geo for the slashvertising submission) since =
without the=20
big publicity, Greg might never have seen the original article. </P>
<H3>Comment</H3>
<P>Feel like commenting? We'd love for you to do so <A=20
href=3D"http://www.beyond3d.com/forum/showthread.php?t=3D36816">here</A>.=
</P>
<P>&nbsp;</P><!-- end of content --><!-- page nav -->
<DIV style=3D"FLOAT: left">
<H2>Page Navigation</H2><SELECT class=3Drselect id=3Dpagenav=20
onchange=3D"jumpMenu('parent',this,1)"> <OPTION =
value=3D/content/articles/15/1=20
  selected>Page 1</OPTION></SELECT> </DIV><!-- end of page nav --><!-- =
submission links, last page only -->
<DIV style=3D"FLOAT: right">
<SCRIPT type=3Dtext/javascript>=0A=
							digg_bgcolor =3D '#fff';=0A=
							digg_skin =3D 'compact';=0A=
						</SCRIPT>

<SCRIPT src=3D"http://digg.com/tools/diggthis.js" =
type=3Dtext/javascript></SCRIPT>
<BR><!-- technorati --><IMG=20
style=3D"BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none"=20
src=3D"http://www.beyond3d.com/images/technorati.png" align=3DabsMiddle> =
<A=20
title=3D"Add to your technorati faves"=20
href=3D"http://technorati.com/faves?add=3Dhttp://www.beyond3d.com/content=
/articles/15/">Add=20
to your technorati faves</A><BR><!-- slashdot --><IMG=20
style=3D"BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none"=20
src=3D"http://www.beyond3d.com/images/slashdot.png" align=3DabsMiddle> =
<A=20
title=3D"Submit to slashdot"=20
href=3D"http://slashdot.org/submit.pl?url=3Dhttp://www.beyond3d.com/conte=
nt/articles/15/&amp;title=3DOrigin of Quake3's Fast InvSqrt() - Part =
Two">Submit=20
to slashdot</A><BR><!-- del.icio.us --><IMG=20
style=3D"BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none"=20
src=3D"http://www.beyond3d.com/images/del.icio.us.png" =
align=3DabsMiddle> <A=20
title=3D"Submit to del.icio.us"=20
href=3D"http://del.icio.us/post?url=3Dhttp://www.beyond3d.com/content/art=
icles/15/&amp;title=3DOrigin of Quake3's Fast InvSqrt() - Part =
Two">Submit=20
to del.icio.us</A><BR></DIV><!-- end of submission links --><!-- end of =
column B middle --></DIV>
<DIV id=3Dfooter style=3D"TEXT-ALIGN: center">
<P>Beyond3D is published by:<BR><A href=3D"http://www.hexus.net/"><IMG=20
style=3D"FLOAT: none; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none"=20
height=3D43 src=3D"http://www.beyond3d.com/images/logo/hexus.125.png" =
width=3D125></A>=20
</P>
<P>Beyond3D's published content is copyright HEXUS.pixels Ltd </P>
<P>Site width adjust<BR><A=20
href=3D"http://www.beyond3d.com/settings/widthx/thinner"><IMG=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
MARGIN: 0px; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: =
none"=20
height=3D16 alt=3D"go thinner" =
src=3D"http://www.beyond3d.com/images/thinnerx.png"=20
width=3D20></A> <A =
href=3D"http://www.beyond3d.com/settings/widthx/wider"><IMG=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
MARGIN: 0px; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: =
none"=20
height=3D16 alt=3D"go wider" =
src=3D"http://www.beyond3d.com/images/widerx.png"=20
width=3D20></A> <BR><A=20
href=3D"http://www.beyond3d.com/settings/widthx/resetwidth">Reset =
width</A> </P>
<P></P></DIV></DIV></DIV></BODY></HTML>

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.beyond3d.com/images/logo/400-Text-Logo.png

iVBORw0KGgoAAAANSUhEUgAAAZAAAABVCAYAAABn7bJ/AAAABGdBTUEAAK/INwWK6QAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAIBkSURBVHja7L0FnFzl1Qf8v3dk3d0l2bgS
gQgRaAR3hwJFSluctlSgfV9aKlSAtwVKaYEWp4EAJQRCICQhxN11d7PuriP3O+fce3fvzs7sbkLS
9/2+b578bmZ25M6j53/8KJqmIdiCLdiCLdiC7USbGpyCYAu2YAu2YAsCSLAFW7AFW7D9x5o9OAXB
FmzBFmynvhnGAYWuELpCjefW1klXF11eJQggwRZswRZs/z8FCw3Z9DDCq2k59DicwCObXkum59F0
RdAV6QMgjC/tdLXR1aQoqKM3S+j5EUVRCun5Efp0ET16ggASbMEWbMH2/x2wiCHqP4au6ZpXm0Qv
TWbAIMIfp6rK17ILMKp4vPwbWgs9LSUA2UH3pQub6dpJf9f/X5oLJeiFFWzBFmzBNihoDCPpYi5R
y8X0fDoR9Ryb2l+kaGrtQnVDGxpaOlHX1I765g40t3XR653weg0ZhD5IYIDoiBC54mPCkBAdhtio
MCTHRSA+OrSfrsutg0oFPd1KGPWJqiif0T32BwEk2IIt2ILt/yZoJHg1XEQ08gqiknNIuoi2WSh7
TVMHjpU2YF9RDXYdqcTuo9Woqm9DI4EFA0lnt6cHWAISYOMTIQ6bgElsZCiSCETG5iVhwvAUjKHH
gqwEpMSH94CKh27o9Wod9PcGArJ3CFA+JDApDgJIsAVbsAXb/3Ij0BhP0sYdRBovIU4/22bopLpc
Xuw+VoU124qwblcpPa9GTWM7Wtu7CQIU2O0qbKp+qfQlIu5QBoQOrQdgmA57SUTxEDp4vB64dT0W
IkIdJJ2ECpDMnJCFuZNzMbkgFeGhdiuY1NNPLSUgeZn6+2UQQIIt2IIt2P6T0oYucUwj4PguPV5j
tylhig4m2HawAsvWHcInG49hf1EtWjq6oSoqnE47bAQUKgGGQIXSK1Og39+D/Lpm7YneGfnHoEKd
6Op2E1B4EBZix8jseJw7JQ8Xnz0S08dmwGEgnMujsTfXcgKup+mlT4MAEmzBFmzBdvoljklEpH9E
T69w2BRh7ZvauvDB2oN4Y8UerN9bhua2bjgddoQQaKiqzQIOim7QkD+VvgBiFTQUP0DCtFex4obm
Ayha73PNa/TVi24Cky6XS6STM0ak4NoF43DZ3NFIiQs3gYRv+6mqKr8iqeSLIIAEW7AFW7Cdeqkj
gYDjh0QCv0cSRwTT8trGdryxci9e/Pd27DlWA8VmI67fAZuAhhUwlL6AYTxXTlj68Cd5mCBiBRSt
3yNLJB3dLrhdHgzLiMXN50+gaxIyk6JMIPFQt/5mU5Rfny4bSRBAgi3Ygu3/d83jxTVeTXtMUZQR
dhVoaXfhhQ+24e//3oaDx+t1aSPESbhgGEDksS94KFbpw/c5AkgdAfFD6wckfZ/zg9cHRLzG+16S
SNzo7OpGbmo0blo8Ad+9fBqSSSIxbCSVqqI8ZlPxXBBAgi3Ygi3YTlbq0JDs0bTf0eM3HYZL1Xtr
DuJX//gSWw5WkLThRIjTAcnyxACgmI+mhKEEkETQTxrpIbLKEHBjQPDQ+kgkAiRWiaQHWLzoJiBp
7+zCqOwEPHzTLNy4aDxJT4qu1lKwhKSRh+jxeBBAgi3Ygi3YTqB5NZzl8Wr/JG68gO3OB47X4bEX
12DpFwegEVCEhRoSh1B8C4AwbPS87iuNwCKRmM/RF1CGBm2WB0ON5Q9IfB51MPH2BRO6OrtdcBGY
LJyWh1/cOQ9njEwzpZFCApR7CFOWBQEk2IIt2IJtCM3t1e4hUvc4SR1iIHhp2Q787G+rUV7biqiI
MN0wDqvEoRrqK6ukofZKIn5VV1Yp5ERAROvz0CdyxAIiWj8Q6QWOXqnECz1ikT24PGjt6EJshBP/
ddtcfPeKqdKbbkISEr5+REDy2yCABFuwBVuwDQge+BnRuf9mlRUH+f3wmc8IQHbC6XAgJMSqrtIN
5X2Aox9oqOhnJPdVYfXBjhN14/UHIOgniWi+KiwDTHokkh7Vlq7W6urqxlXzR+H39yxAemKUqLRI
EvuDquIn1MPuIIAEW7D9v6jRsQun//OIWUyjxwx6Kc5COZjqcJbWClVVOH1FBRGv48FZO/Hm8Wp/
9Gp4gMGjsKIRtz7+AdbsKEF0pCF1CECovcDRAx69to8+do9+qiv0vu5XArHiiWKBCC2gINLHnddH
CulrE4EAhNBwH1uIZgUR/ps2WnNrB8bnJ+LlRy/BpIIUARFqy+025TrqWdMpBxCvVxtP75/LuV/o
z1hdPjotTSQrugppbfbRYdlG1wF63h48AsH2HybsKh2+C+m8zaE/R/dnCf3uXW4HiZv7iojQMtq3
HX4+p9J5mkYX3/dsVcEY1aZk09cdg3bKq9UTISzVJHUF1hKorOOMrQOMgaOaL6PHc+jPYafw3PJY
OT9HJV3HqR/ch53UlyPUr87/g+DxNIHHvQweWw9W4OZfvI+DxxsQFRFqAQhD6oDaR30lKiy/BnP0
BQsfMFF6Az9w4jYQ/XtanzgQXynEN0bEIpH4SB6aVToxrtb2TqQlhONvP74IC6bls2qPv/6ZzaZc
Sb1tPGUA4vF4b6H3/my32yL+F46x2+vRjtPYvqT1eVNV1eWKEiRuwXa6wUNLcbu9rzrs6jdwUhtO
g8vlXWe3q1cTUS037hlJoHETHbObidObZvqFtne4UF7fgarGTlQ2dIobqaUfcDpsSI4JQXJsKJLo
MTUuTNJjyPtebysRx1V0Lv5MRHyFzxiSaQwv0RjOx3/k0GjddFaL6KxuoZ9bSf0hAFWq//fBA7/2
atqPGDxWbSvCNx97H9WN7YgIC7VIHWoPcGgyVarFWB7Ay6qfh5VqPPpII4o/HiMQcFifWuJBTK8r
xn+rdDKAl5YVSBRTGoEBIF4dWDq6uhHuVPHM98/Htd8YKyBCH19J+/Ni6mnH1wYQ2vBTiIPZSE9t
728oxaqd1WjtdLHO7HQdXDjtKjITIzAyMwpjc2IxPC0SISF2mQiX27vSZlMfpc25IUjmgu00SR6K
2+151W5Try+ubsNrq4pwuLwFijKE40//5aRE4Lq5ORiRGQ0i4O85HLbL6BwtJEbs9/R8PH+sqLIF
q3fX4Mu91dhT3IjjNe1oaOmSdBmcrqInKNn4TRv9eIjThlQCkZzkCEwbkYDZ45IxY2QCYqJCiCZw
3iTvUjobDxkSieJyeRgAry+pacPfPjmKoqo2ceM8JXPEfaJ7JUWHID0hDLkpkRiREYVc6pucVSbc
bm8FkaM3qE9/HkhKOs2Sx888Gv7bSeDx1e5SXPXTf6G2uQuRYTRnDBiqKmChmd5Tip67ilOSqIph
61BUP3YOQ51lAoQBOpqmp2D3agaQDBlEAoGHV37O1uP4ZaqoTOVXX7fePlKJkVPLevUY1wVUdDDp
6nbR/tLw/MMX4roFY83o9ecJRO762gDi8Wi/IJHmkX+uPIbbn94oBL53D54Om4li5MHX750UHSoH
8cJp6bjhnFxkELDQQXRTN56gfj1Ki+QNkrxgO8UAkqJp3sMt7e6o83+2CusP1MIuCfF81Al+tFe8
Gd10AKcMj8fHv5iPhKiQZiLsbxIxup0Ik7rzWD2eW3YYH2+pINBoE8IQF2FHWlwIEqMdtN+diAwx
CBqTJLZqEkWqb3WjrsWFmqZuklS60drlQYjdRkxWDK6fn4PbFg5DQkwoST2eMiLY19C52E3SSVlT
uyvyksdWY92+GknsN/AYTlSDxYRSk/ESUMlZHZ4eiekjEnHxWRmYMTpJkgoSGFdRf35G/frrf1jy
uJnm/mVmSHccrsTlP/oXSXptCA8NEWqsGUZwAnVJBRIaapdIcwfntVJtRgJE04DeO+4+aREtwMJr
1u3WJNFic5ubGG1Pf0mlj0eWYlFX+YCHIUGE016IjXQgxKEi1KH0pbsWeq1Z76MZXlqKJowF2zzc
Hg4u5MtFEq+bJA8XCwcCIjwT3QQiHET52n9fhgtmFtA4vMwgPETXH78egLi9H6s2ZdENv12H99aX
4K6FaRiVHiGijum+ppxCaYTvxAhY1diFY9Wd2F/WhiPl7WihxSjIiMb9l4zEHecVgMVRkkbesdtt
NwXQMwdbsJ1Uo4N1Lkm4K7/cU4XzHv0CY7PCcePZSUKAMcieZ4L/2toqbD7Sgvd/NgcLpqTL613d
Hjz13gG5Khs6kJkQghkjojFzZAzGkKSdSgASG6ETLv1nFCugCaHuJsJU29yN0vpObDvWjHUHGumx
BU3tbkzKj8dvvzUJC+n3iGDX0h2eI+L96JpdVVj4yCpMzA3HN+ek9GaFFe56MJXKIPNE/WpodaG6
iftE57WqHcV0ZhuIeEaFOTBzTBLuv3QkFk/NkEG4Pd53CUTupj5U/AeYgPEuj3cVgUcCG8wveOgN
HClrQFR4GPVbJ+qcxTaeQDcqMgxx0eGIo8fMxHCkx4UiOtwumhCWsoaibTEVTPz57YUt+PJgPY7T
fDS1e/XvB5RGfKUOzQAAL0KdCtITQzCOGOhFE+MEoBSl1214oPy+mgnutEjtxGzUt3SjmKTcuuYO
qU3S1NKGBnreSK97PTqIdHZ30xyE4IMnrsWUUWnMGGilpSWLEhPiP42MjBx0DuwBKHo8o1hTe7cg
1Cza8PPGxhORp8Ni01FaVdTTsQVECuGB7yxuwZL1lVi5sx73/mULif01ePquqUiKDb3C5fJ2OBzq
TUGyF2ynsMXwfy3EqfEhTImx47LpybDxfld13ThXm+vrSaP/b1c1rNnfiK8ONhJx1T0iy2vb8cBf
t2DJlyUkkdhx54J0XDMjhaSHCCJSduEBmahpdCmqr67dUGHRFWbXkBMeivz0aMwbn4zbv9GN9Yca
8I9VZVi1pwHX/uZLPHnnFNy8YFii2+V5lDvU0uHiGyM91onLz0yi2+pjUBW1DzH6GkKIUGvmWBva
XCgkorl6Xz1W7KjDZzsqREV387n5+PkN45EcF3Y5SUhjiem7gH726OlavC1bt4YWjBj1UlRkREJr
RzfuemIZDpfUS4wHrydLHCkEEonxUchJi8fUYXEYlx2NjPgQAhi7IakpssYnwiAzA84fnV4Qqwfq
EWH2VHWgpcuQdXz1kn7BQ5M+OmnBc1NCMCw1Gt9blIGcpDDZJ6JaM/o3RCDt6VsnMSBMT49UtmPL
kQbsLqpBZW0jKkkSbiH6Hup0oLapA3f85t/46I83IDU+QiHA/8v7738w86qrrqxyOp0nASACZLra
isUkNwFHt5e4f69Kh8UuG1E7DQAi0hDdNj7GgYWTIzB/XCI+3l6DJ94rxBurC9FIh/O1h2dxYMyN
Ho93NQ30b0G6F2ynSgjRNdoQlQ9vRWLi4BBDq02AREP/Q8x7VhNds04fQp0qmIDd9Puv8PnOSozP
icCPL82lvRwvHj9uPkeaTQhCTypwK4dpPFo1A5qh2nDRj4SFhWLxGWmYPSoBz3xciOc+KRUGK5So
zzVzc+UWqmKOgYi8R9HBwxiDCSJfn9Wj2bBpSIxxkiQVgZnUn5vnZWLpxiq89HkZnl12CJsO1eG5
u6dh6ojEkQQiH5F0tPh02EXeeustRETFPHLG5MlTeOy/fGkNPt10DDFR4SIxRUU4kJUShbSURCyi
uZs7Kg5xUU7oZmbd3uE11sCX4x/KPLCdITzMRkxCtkiG3UQwPTWd6OjWRDzVDfUaDEu9D6XXv28n
8MhKCkFuciS+szBDpKJOWjteM943mqFGU4YkGWk9jyFE/9MTafxJEZg9Oh4Hy1Px703l2HaoHGVV
9agmyTY81IkdR6rxwz+vwEuPXIKszMz8kaNG//a+++675cknn0RoaOgJA0ifQXKnbTY7ix+w2+36
RlTVU6rG6vE4MA6LhyZVoQN22YwMQuQI3PfiXizfWo6fv7oL/0OSCElIv6KPsctkRZD2BdspFoQN
1YROdG12h/5oSN9WIs9qB5X5RCYURCS4INCPX9qBVbuqMGNEDJ64cRhGZEahy01niJgvh9PWc358
7+fvPPU7Fx4PgZAOJD++YiSiw5z41TtH8dAL2zCGOOrxefG92nU2xIoExee2dwyqqn7tc2rtk2ms
TSXu/t4LIzB3bAJ+8a8j+Hx3Ha7/7Vd47YczMW1k4ggCkbdIEpl3Kt3zS0pKUFhYPPW+B+5/kMf1
0frD+NOSzSRVhMo6xkc7CDhiMWNsJq6dlYmc5FCaPxUe6PNvM7h7Kz07ETW9dfwJsXbcd+Ew/P49
D2xKA45VdErUt4CISCD97R78PZVez0xwkjQUjlvmpSM/JQJuzaw3YuvTv6H2yffRa9DT8Tkx4vjw
yfZ4vL3mMEnD1SgjaSQqPARvfroXcyfl4LaLz8DUKZNv/tOfO9/63e9+t/zRRx8N+FvqUA6Souoq
Kx4MAwhfDoej5/HrXNb7WS8Wnex0dXltmDQsHr+9aTSJdKF4ccVRrNhWQd+xJZEU8lCQ2gXbaUEQ
BfrBNfa8v32rP+rPWU4JD7Hh1VWFeO3zIoxMD8Pj1xN4ZEQTeKj0Wafsaetl7n3zMgm89fL9jPld
lRg6t2bHd87Lxw1z0lFe14Zfv72vV8tkEA+d+dPv5dv3kzmr/l7n/oSEhBCBspPUZsPE/Hj89TsT
cPlZKSiqasbNf1iPw6XNrEaaRmf2F6dqlbq7u/G9731PufTyyx8PC3GG1TW349G/rhKPKFZFxUQ6
kJkWh3mT8vCdRXnEhYeh26szBNxns+/mc/Nv6+NQL/48sRzIJE7//osLxNEhK4nuoeopRTTNGvCn
Mx6cjp2Zj/R4O5Jjw3DT3AxMyosR8PC994n2xfd75nOvou+jy85Mw72XjEdBXhoyaF7YYcTusOOX
L6/F0bJ6md9n/vzsE2+//Xb4smXLThJAehiZXj2clYuxoqP18ncQAr3ve4Csfzv4wNCgedFnjUnG
XYtzpDLXU0sPiIGSDsqNtCjxQYIXbKdK7uiDIYrid2/3exQuXxHvl7V7qsFOgg9elIMJuTHEACkC
Hv6YJuu5YM8lLlbEtbFtFm7T+rt9zgbdxybPHbiHuN6RGRFYtqkM2w/XiTrLBBLddqMOeB6Heln7
MBC4uWEnzj8cv79lHC6cmowDpU24/69bxQuIpuk+r1c7+1Qs2JIlS5CZlX3eqBHDF/Lfz76zGdsP
VSE0xIEwAvP0lCicOSYb316QSeBuF+IZ4oeo+qNBgwG59XUruHo0G/JSI/HtRcPpMRoZJFnYFAYP
T0+EuJluhL2hUkhqyUuNwDfnZWKO2JmVfntlsHkP1F/fz/YyLg64CKRmjY7HXeePRWZ6MpLjQmTv
FRPgP/HqVwJ2kRFh47512+0333nnnejq6jpJFRbMiH6lR4yyit+Dibn+76cM+rrYYOh3RPRSWG/s
wdWzs/D2l+X4cl812DVy+qikFHp/Kr2/YojidzI9pHBKZw7wshINugfXFeZIzOr/C4FQp8G+xMxC
Fl1JdICTLWvPq9tMU11Hz9n1sup/sY9ZtDZ0aUnm2hjrUkiPZafo/pnG/XXTpqJU8v01rW+0dm8M
WV8i7qvCYi5S0VQh1uz94iEG57zJibhoWgo6XYowQQ6HQfAtajCzsQeP3aGitqEdtU2dYndMT4wQ
F9PObk/PubCqVaxn0e12Y1h6NC4ljvI3Sw5j2eYyzB2X3MshGnEO5ves3z0VKmdfdZbcn11I3R7E
RYfhlzeOQUltJz7ZUobnPzqC+y8bbXO5PI+rqm0+9Kj2k2plZWX41a9+pS5974Mf8t+HSurw/NJt
BBQOThSItMRwjM1Px23nZsr8Q9EZUn/gfaKepb50ynzNvJfLDZLCYsXN+ukPDsDt8ZCE6DLcbGE4
XWlIirYjMzkMF0xJw7njE3Qbs8PeBzis5gJ/vzsYTfWnyjLH3U17Z8aoeJTNGYmX2zskuNXtduKt
lXvxzfMmYNaEbNxxxx0PPPHb37zyxhtvtN5yyy0nByBD7ai1sTtcIDBhEZOLxg+k/xWDltbrNux2
a4TmEZg/PhHbjx3F2r3VDCAsDc6mt1cMQDCmE8GcRX+dRYc1lzjFNEUJlGaAvuHVKt0erZT+2Eif
+4rmeRM9HvX51ASPR1tET6fS5cDgqSLMH9xPovXndH0W0JLr1Qro/guo32fSn9FDOGTMbtbRkNbR
pniPHhss/RxN95tB92KO7wy7TcmhCY2x2fz7FBpj58plG/R0GTL24gHMY5G0IS817p88xL4W0T1X
Ux/ep+/ZqY8LqY8L6PUZdlUZTusT77s21K862i8H6SmNUeGaz18oypCCGjh9yHy6zqfns+n+BXT/
uP7395bRZ5rosEouCc0iefvu4f77X7E4T2mICFFx49xMkZy7iJD4cohW+wODhYvOwVPv7sLba4ok
Kp0BZXRWDB64bAzmTUwTTyfzO+Zv898mwdZtHBrmjU/Cc8sLsflQHSYT8VLV/ufJep0IOPg7/wOd
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

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://hexusads.fluent.ltd.uk/adview.php?what=zone:92&n=a4b04b47

R0lGODlhAQABAIAAAAQCBAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.beyond3d.com/images/rss-24x24.png

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

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://hexusads.fluent.ltd.uk/adview.php?what=zone:90&n=ab03608d

R0lGODlhAQABAIAAAAQCBAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://hexusads.fluent.ltd.uk/adview.php?what=zone:89&n=acf2848f

R0lGODlhAQABAIAAAAQCBAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.beyond3d.com/images/technorati.png

iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAIAAABiEdh4AAAABGdBTUEAAK/INwWK6QAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFMSURBVHjaYnz39u2u9xP2PZvz/ufzYMVa
N8ECBryABah67f1mIMtQxAuu+h3L3fX3229/OvH9z2dOFl5VPotAxUqhP8pAKcbkg6Kffr0GsqoN
d8oxmgAZN/7snXg58t//v2hmF+qt0mBxZoKoBgKIaiBYeacWUzVEHEgyYUp8+fMOq+sh4ggNQHdD
GGaigVg1QMSZteOg/D//furyegAZ2jwuf1i+PfhyAe4wFiY2N5nMYLEWkKdDd6N7C859+P/Uh18v
BNgk5BnN4IIoGoAmtZud4vsliysSLv7cxILM//PvFxDhUrr/2fzr7w+haADaAImduY9TLr3bzc8m
xsbM9evvt4+/Xv34+wWqBlkDL6vw5jdte57OhEj/+P4F0ypETBMD+NhEmVylMxiIBnYScSzABPfz
77ejL5cBUysepYLsktbiUb4iVQABBgAtFZJjGdLspQAAAABJRU5ErkJggg==

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.beyond3d.com/images/slashdot.png

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAAK/INwWK6QAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABMSURBVHjaYnz39i0DKYCJgUTAglVUaPJk
CONdbi6lNjCRZDw1bMBvPMU2EDQeZ7DiMYIJjxxcBJlNrh+IcT1hG5A1w9mMNE+tAAEGAO50ILN4
Y55HAAAAAElFTkSuQmCC

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.beyond3d.com/images/del.icio.us.png

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAAK/INwWK6QAAABl0RVh0
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAqSURBVHjaYvz//z8DNsDIiFWYgYmBRDCq
gRjAiEvi7t27o6FEPw0AAQYADfAFtarJaLcAAAAASUVORK5CYII=

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.beyond3d.com/images/logo/hexus.125.png

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
RU6Zg92BjNgAAAAASUVORK5CYII=

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.beyond3d.com/images/thinnerx.png

iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAF1JREFUeNpifPjwIQO5gAWI5eTkyND56NEjFjShvXv3Qhiqqqpwwdu3
b0MYzs7O6DajAWRtyCJwI+CAiYECMKp5ZGjGksIgKQlr8kQHwFz1nywA1MgCyR/kORsgwADtvlKB
lgxKLQAAAABJRU5ErkJggg==

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: http://www.beyond3d.com/images/widerx.png

iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAFlJREFUeNpifPjwIQO5gAWI5eTkyND56NEjFghr7969EIaqqioeDbdv
34YwnJ2doTYTow1ZDdwIJgYKwKjmkaGZBS3pEZk8oQCYq/6TBYAaWSD5gzxnAwQYANQ4UoF5fX5s
AAAAAElFTkSuQmCC

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/css/siteh.css

BODY {
	BACKGROUND: url(/images/body.jpg) #f6f6f6; MARGIN: 20px; WORD-SPACING: =
2px; FONT: 68.75%/1.6em "Lucida Grande", "Lucida Sans Unicode", =
"Verdana", "Geneva", sans-serif; COLOR: #1d1d1d
}
* {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#wrapper {
	BORDER-RIGHT: #f1f1f1 3px solid; BORDER-TOP: #f1f1f1 3px solid; =
MIN-WIDTH: 760px; BACKGROUND: #fff; MARGIN: 0px auto; BORDER-LEFT: =
#f1f1f1 3px solid; ; WIDTH: expression(this.width > 320 ? "320px" : =
this.width); BORDER-BOTTOM: #f1f1f1 3px solid
}

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/css/site.css

#innerwrapper {
	PADDING-RIGHT: 20px; PADDING-LEFT: 20px; BACKGROUND: =
url(/images/innerwrapper.jpg) repeat-x 50% top; PADDING-BOTTOM: 20px; =
MARGIN: 1px; PADDING-TOP: 20px
}
#header INPUT {
	BORDER-RIGHT: #f6f6f6 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#f6f6f6 2px solid; PADDING-LEFT: 5px; BACKGROUND: #fff; PADDING-BOTTOM: =
5px; FONT: 150% "Arial"; BORDER-LEFT: #f6f6f6 2px solid; WIDTH: 150px; =
COLOR: #999; PADDING-TOP: 5px; BORDER-BOTTOM: #f6f6f6 2px solid
}
#header INPUT:hover {
	BORDER-RIGHT: #ccc 2px solid; BORDER-TOP: #ccc 2px solid; BORDER-LEFT: =
#ccc 2px solid; BORDER-BOTTOM: #ccc 2px solid
}
#header INPUT:focus {
	BORDER-RIGHT: #79b5d6 2px solid; BORDER-TOP: #79b5d6 2px solid; =
BORDER-LEFT: #79b5d6 2px solid; COLOR: #555; BORDER-BOTTOM: #79b5d6 2px =
solid
}
#header FORM {
	PADDING-RIGHT: 25px; PADDING-LEFT: 25px; BACKGROUND: #fff; FLOAT: =
right; PADDING-BOTTOM: 20px; MARGIN: -20px -20px 0px 0px; WIDTH: 160px; =
BORDER-TOP-STYLE: none; PADDING-TOP: 27px; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
#header H1 {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 20px; PADDING-LEFT: 5px; =
FLOAT: left; PADDING-BOTTOM: 5px; MARGIN: 0px 20px 0px 0px; FONT: 250% =
"Arial"; COLOR: #333; PADDING-TOP: 5px
}
#header H1 A {
	COLOR: #333; BORDER-BOTTOM: #f6f6f6 2px solid; TEXT-DECORATION: none
}
#header H1 A:hover {
	COLOR: #111; BORDER-BOTTOM: #79b5d6 2px solid
}
#header H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; FONT: 150% =
"Arial"; COLOR: #666; BORDER-TOP-STYLE: none; PADDING-TOP: 16px; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: =
none
}
#header H2 A {
	COLOR: #444; BORDER-BOTTOM: #f6f6f6 2px solid; TEXT-DECORATION: none
}
#header H2 A:hover {
	BORDER-BOTTOM: #79b5d6 2px solid
}
#header #nav {
	CLEAR: both; BORDER-RIGHT: #388cba 2px solid; PADDING-RIGHT: 10px! =
important; BORDER-TOP: #388cba 2px solid; PADDING-LEFT: 10px! important; =
BACKGROUND: url(/images/nav.jpg) #4f9ec9 repeat-x 50% top; =
PADDING-BOTTOM: 0px! important; BORDER-LEFT: #388cba 2px solid; =
PADDING-TOP: 10px! important; BORDER-BOTTOM: #4f9ec9 2px solid
}
#header A EM {
	FONT-STYLE: normal; TEXT-DECORATION: underline
}
#header #nav A {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; FONT: =
140% "Trebuchet MS"; COLOR: #fff; PADDING-TOP: 10px; TEXT-DECORATION: =
none
}
#header #nav A:hover {
	COLOR: #378bf3
}
#header #nav A.active {
	BACKGROUND: #4f9ec9
}
#header #nav LI {
	DISPLAY: inline; MARGIN: 0px 1px 0px 0px; LIST-STYLE-TYPE: none
}
#header #subnav {
	BORDER-RIGHT: #388cba 2px solid; PADDING-RIGHT: 7px; PADDING-LEFT: 7px; =
BACKGROUND: #4f9ec9; PADDING-BOTTOM: 7px; FONT: 90% "Verdana"; =
BORDER-LEFT: #388cba 2px solid; COLOR: #deedf5; PADDING-TOP: 5px; =
BORDER-BOTTOM: #388cba 2px solid
}
#header #subnav LI {
	DISPLAY: inline; LIST-STYLE-TYPE: none
}
#header #subnav A {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; FONT: 100% =
"Verdana"; COLOR: #deedf5; PADDING-TOP: 5px; BORDER-BOTTOM: #4f9ec9 2px =
solid; TEXT-DECORATION: none
}
#header #subnav A:hover {
	COLOR: #fff; BORDER-BOTTOM: #388cba 2px solid
}
#header #subnav A.active {
	COLOR: #fff; BORDER-BOTTOM: #388cba 2px solid
}
#sidebar {
	PADDING-RIGHT: 20px; BORDER-TOP: #fff 2px solid; PADDING-LEFT: 20px; =
BACKGROUND: url(/images/bar-stripes.jpg) no-repeat left top; FLOAT: =
left; PADDING-BOTTOM: 20px; WIDTH: 200px; COLOR: #666; PADDING-TOP: =
10px; BORDER-BOTTOM: #fff 10px solid
}
#sidebar H2 {
	MARGIN: 10px 0px; FONT: 160% "Arial"; COLOR: #999; BORDER-TOP-STYLE: =
none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; =
BORDER-BOTTOM-STYLE: none
}
#sidebar H3 {
	FONT: bold 90% "Verdana"; COLOR: #900; LETTER-SPACING: 2px
}
#sidebar P {
	MARGIN: 15px 0px
}
#sidebar P.news {
	BACKGROUND: #323232
}
#sidebar P.news A.more {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
10px; FONT: 80% "Verdana"; TEXT-TRANSFORM: uppercase; COLOR: #ccc; =
PADDING-TOP: 10px; LETTER-SPACING: 1px; TEXT-ALIGN: right; =
TEXT-DECORATION: none
}
#sidebar P.news A:hover {
	COLOR: #98d158
}
#sidebar .subnav {
	BORDER-TOP: #2c2c2c 1px solid
}
#sidebar .subnav LI {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px; BORDER-BOTTOM: #2c2c2c 1px solid; LIST-STYLE-TYPE: =
none
}
#sidebar .subnav LI A {
	DISPLAY: block; COLOR: #ccc; TEXT-DECORATION: none
}
#sidebar .subnav LI A:hover {
	COLOR: #98d158
}
#sidebar .subnav LI A B {
	DISPLAY: none; FLOAT: right; COLOR: #666
}
#sidebar .subnav LI A:hover B {
	DISPLAY: inline
}
#sidebar INPUT {
	BORDER-RIGHT: #222222 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: =
#222222 1px solid; PADDING-LEFT: 4px; BACKGROUND: #2c2c2c; =
PADDING-BOTTOM: 4px; FONT: 90% "Verdana"; BORDER-LEFT: #222222 1px =
solid; WIDTH: 190px; COLOR: #ccc; PADDING-TOP: 4px; BORDER-BOTTOM: =
#222222 1px solid
}
#sidebarright {
	PADDING-RIGHT: 0px; PADDING-LEFT: 20px; BACKGROUND: =
url(/images/bar-stripes.jpg) no-repeat left top; FLOAT: right; =
PADDING-BOTTOM: 0px; WIDTH: 200px; PADDING-TOP: 10px
}
#sidebarright P {
	MARGIN: 10px 0px; FONT: 90%/20px "Verdana"; COLOR: #777
}
#sidebarright H3 {
	FONT: bold 90% "Verdana"; COLOR: #900; LETTER-SPACING: 2px
}
#sidebarright UL {
	MARGIN: 10px 0px 10px 15px; FONT: 100% "Verdana"
}
#sidebarright UL LI {
	MARGIN: 3px; COLOR: #666
}
#sidebar UL {
	MARGIN: 10px 0px 10px 15px; FONT: 100% "Verdana"
}
#sidebar UL LI {
	MARGIN: 3px
}
#content {
	PADDING-RIGHT: 0px; PADDING-LEFT: 20px; PADDING-BOTTOM: 0px; MARGIN: =
0px 210px 0px 205px; PADDING-TOP: 20px
}
#contentnorightbar {
	PADDING-RIGHT: 0px; PADDING-LEFT: 20px; PADDING-BOTTOM: 0px; MARGIN: =
0px 0px 0px 240px; PADDING-TOP: 20px
}
P {
	MARGIN: 15px 0px; LINE-HEIGHT: 18px
}
H2 {
	FONT: bold 170% "Arial", "Trebuchet MS", "Verdana"; COLOR: #79b933; =
BORDER-BOTTOM: #f6f6f6 2px solid
}
H2 A {
	COLOR: #3353b9; TEXT-DECORATION: none
}
H2 A:hover {
	TEXT-DECORATION: none
}
H2 A:visited {
	COLOR: #1d1d1d
}
#footer {
	CLEAR: both; PADDING-RIGHT: 10px; BORDER-TOP: #eee 1px solid; =
PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 30px 0px 0px; =
PADDING-TOP: 10px
}
A {
	COLOR: #0066ff; TEXT-DECORATION: none
}
A:hover {
	TEXT-DECORATION: underline
}
H3 {
	FONT: 150% "Arial", "Trebuchet MS", "Verdana"; COLOR: #79b933
}
H4 {
	FONT-WEIGHT: bold; COLOR: #0e3143
}
#content UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 2px; MARGIN: =
2px 2px 2px 6px; COLOR: #202020; PADDING-TOP: 2px
}
#content UL SPAN {
	COLOR: #202020
}
#contentnorightbar UL {
	MARGIN: 2px 0px 15px 20px; COLOR: #444
}
#contentnorightbar UL SPAN {
	COLOR: #444
}
#content TD {
	BORDER-RIGHT: #f1f1f1 thin dashed; FONT-SIZE: smaller; BORDER-BOTTOM: =
#f1f1f1 thin dashed; TEXT-ALIGN: center
}
#content TABLE {
=09
}
IMG {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; =
PADDING-TOP: 1px
}
.borderbg {
	BORDER-RIGHT: #f6f6f6 5px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#f6f6f6 5px solid; PADDING-LEFT: 3px; BACKGROUND: #ccc; PADDING-BOTTOM: =
3px; BORDER-LEFT: #f6f6f6 5px solid; PADDING-TOP: 3px; BORDER-BOTTOM: =
#f6f6f6 5px solid
}
FORM {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px
}
LABEL {
	DISPLAY: block; FONT-WEIGHT: bold; MARGIN: 5px 0px; COLOR: #444
}
INPUT {
	BORDER-RIGHT: #ccc 1px dotted; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px =
dotted; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ccc 1px =
dotted; WIDTH: 300px; COLOR: #2b2b2b; PADDING-TOP: 4px; BORDER-BOTTOM: =
#ccc 1px dotted
}
TEXTAREA {
	BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #eee 1px =
solid; DISPLAY: block; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; FONT: 90% =
"Verdana"; BORDER-LEFT: #eee 1px solid; COLOR: #777; PADDING-TOP: 4px; =
BORDER-BOTTOM: #eee 1px solid; HEIGHT: 200px
}
P IMG {
	MARGIN: 0px 10px 0px 0px
}
BLOCKQUOTE {
	PADDING-LEFT: 30px; COLOR: #686868; FONT-FAMILY: "Georgia"
}
.bq2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 110%; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px; FONT-STYLE: italic; FONT-FAMILY: "Georgia"
}
.rselect {
	BORDER-LEFT-COLOR: #ccc; BORDER-BOTTOM-COLOR: #ccc; FONT: 72.5%/1.6em =
"Lucida Grande", "Lucida Sans Unicode", "Verdana", "Geneva", sans-serif; =
WIDTH: 80px; COLOR: #444; BORDER-TOP-COLOR: #ccc; BACKGROUND-COLOR: =
#f9f9f9; BORDER-RIGHT-COLOR: #ccc
}
.neutral {
	COLOR: #3353b9
}
.ati {
	COLOR: #b93333
}
.nvidia {
	COLOR: #79b933
}
.intel {
	COLOR: #3e5581
}
.hider {
	COLOR: #eaeaea
}
.bb {
	FONT-WEIGHT: bold; FONT-SIZE: larger; COLOR: #8bc4ff
}
.th {
	COLOR: #fff; BACKGROUND-COLOR: #828282
}
.bq {
	PADDING-RIGHT: 10%; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; FONT: =
80%/10px "Georgia"; COLOR: #aaa; PADDING-TOP: 0px
}
.lightdashbox {
	BORDER-RIGHT: #ccc 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 1px =
dashed; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; FONT: 110% =
"Courier New"; BORDER-LEFT: #ccc 1px dashed; COLOR: #333; PADDING-TOP: =
5px; BORDER-BOTTOM: #ccc 1px dashed
}
.norightborder {
	BORDER-RIGHT-COLOR: #fff
}
.smallborder TD {
	BORDER-RIGHT: #ccc 1px dashed; PADDING-RIGHT: 2px; PADDING-LEFT: 2px; =
PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px dashed
}
.chiptable {
	FONT-SIZE: larger
}
.chipdetailstable {
	FONT-SIZE: smaller; MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px; TEXT-ALIGN: =
center
}
.chipdetailstable TD {
	BORDER-RIGHT: #ccc 1px dashed; PADDING-RIGHT: 2px; PADDING-LEFT: 2px; =
PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px dashed
}
.chipdetailstable THEAD TR TD {
	BORDER-RIGHT-STYLE: none
}
.normal {
	BACKGROUND-COLOR: #fff
}
.highlight {
	BACKGROUND-COLOR: #d1dbe0
}
.link {
	COLOR: #0066ff
}
.nomp {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.lb {
	FONT: 90% "Calibri", "Georgia", "Verdana"; WIDTH: 50px; COLOR: #fff; =
TEXT-ALIGN: center
}
.na {
	PADDING-RIGHT: 10px; FONT-WEIGHT: 700; COLOR: #fff; FONT-FAMILY: =
"Lucida Grande", "Lucida Sans Unicode", "Verdana", "Geneva", sans-serif
}

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/css/tw.css

.tableWidget_headerCell {
	BORDER-RIGHT: #aca899 1px solid; BORDER-LEFT: #fff 1px solid; CURSOR: =
pointer; BORDER-BOTTOM: #c5c2b2 3px solid; BACKGROUND-COLOR: #ece9d8
}
.tableWigdet_headerCellOver {
	BORDER-RIGHT: #aca899 1px solid; BORDER-LEFT: #fff 1px solid; CURSOR: =
pointer; BORDER-BOTTOM: #c5c2b2 3px solid; BACKGROUND-COLOR: #ece9d8
}
.tableWigdet_headerCellDown {
	BORDER-RIGHT: #aca899 1px solid; BORDER-LEFT: #fff 1px solid; CURSOR: =
pointer; BORDER-BOTTOM: #c5c2b2 3px solid; BACKGROUND-COLOR: #ece9d8
}
.tableWidget_headerCell {
	BORDER-TOP: #b8d1ed 2px solid
}
.tableWigdet_headerCellOver {
	BORDER-TOP: #3cff45 2px solid
}
.tableWidget TBODY .tableWidget_dataRollOver {
	BACKGROUND-COLOR: #fff
}
.tableWigdet_headerCellDown {
	BORDER-RIGHT: #fff 1px solid; BORDER-TOP: #3cff45 2px solid; =
BORDER-LEFT: #aca899 1px solid; BACKGROUND-COLOR: #dbd8c5
}
.tableWidget TD {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: =
0px; PADDING-TOP: 2px; BORDER-BOTTOM: #eae9e1 1px solid
}
.tableWidget TBODY {
	BACKGROUND-COLOR: #fff
}
.tableWidget {
	WIDTH: 400px
}
DIV.widget_tableDiv {
	BORDER-RIGHT: #aca899 1px solid; BORDER-TOP: #aca899 1px solid; =
OVERFLOW-Y: auto; BORDER-LEFT: #aca899 1px solid; WIDTH: 400px; =
BORDER-BOTTOM: #aca899 1px solid; HEIGHT: 200px
}
HTML > BODY DIV.widget_tableDiv {
	OVERFLOW: hidden; WIDTH: 400px
}
.tableWidget THEAD {
	POSITION: relative
}
.tableWidget THEAD TR {
	BOTTOM: 0px; POSITION: relative; TOP: 0px
}
.tableWidget .scrollingContent {
	OVERFLOW-Y: auto; WIDTH: 100%
}

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/css/lightbox.css

#lightbox {
	Z-INDEX: 100; LEFT: 0px; WIDTH: 100%; LINE-HEIGHT: 0; POSITION: =
absolute; TOP: 40px; TEXT-ALIGN: center
}
#lightbox A IMG {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
#outerImageContainer {
	MARGIN: 0px auto; WIDTH: 250px; POSITION: relative; HEIGHT: 250px; =
BACKGROUND-COLOR: #fff
}
#imageContainer {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px
}
#loading {
	LEFT: 0%; WIDTH: 100%; LINE-HEIGHT: 0; POSITION: absolute; TOP: 40%; =
HEIGHT: 25%; TEXT-ALIGN: center
}
#hoverNav {
	Z-INDEX: 10; LEFT: 0px; WIDTH: 100%; POSITION: absolute; TOP: 0px; =
HEIGHT: 100%
}
#imageContainer > #hoverNav {
	LEFT: 0px
}
#hoverNav A {
	outline: none
}
#prevLink {
	DISPLAY: block; BACKGROUND: url(/images/lightbox/blank.gif) no-repeat; =
WIDTH: 49%; HEIGHT: 100%
}
#nextLink {
	DISPLAY: block; BACKGROUND: url(/images/lightbox/blank.gif) no-repeat; =
WIDTH: 49%; HEIGHT: 100%
}
#prevLink {
	LEFT: 0px; FLOAT: left
}
#nextLink {
	RIGHT: 0px; FLOAT: right
}
#prevLink:hover {
	BACKGROUND: url(/images/lightbox/prevlabel.gif) no-repeat left 15%
}
#prevLink:hover:visited {
	BACKGROUND: url(/images/lightbox/prevlabel.gif) no-repeat left 15%
}
#nextLink:hover {
	BACKGROUND: url(/images/lightbox/nextlabel.gif) no-repeat right 15%
}
#nextLink:hover:visited {
	BACKGROUND: url(/images/lightbox/nextlabel.gif) no-repeat right 15%
}
#imageDataContainer {
	MARGIN: 0px auto; FONT: 10px/1.4em Verdana, Helvetica, sans-serif; =
BACKGROUND-COLOR: #fff
}
#imageData {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#imageData #imageDetails {
	FLOAT: left; WIDTH: 70%; TEXT-ALIGN: left
}
#imageData #caption {
	FONT-WEIGHT: bold
}
#imageData #numberDisplay {
	CLEAR: left; DISPLAY: block; PADDING-BOTTOM: 1em
}
#imageData #bottomNavClose {
	FLOAT: right; PADDING-BOTTOM: 0.7em; WIDTH: 66px
}
#overlay {
	Z-INDEX: 90; FILTER: alpha(opacity=3D60); LEFT: 0px; WIDTH: 100%; =
POSITION: absolute; TOP: 0px; HEIGHT: 500px; BACKGROUND-COLOR: #000; =
-moz-opacity: 0.6; opacity: 0.6
}
.clearfix:unknown {
	CLEAR: both; DISPLAY: block; VISIBILITY: hidden; HEIGHT: 0px; content: =
"."
}
* HTML > BODY .clearfix {
	DISPLAY: inline-block; WIDTH: 100%
}
* HTML .clearfix {
	HEIGHT: 1%
}

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/jslibs/tw.js

// JavaScript Document
	/*
	(C) www.dhtmlgoodies.com, October 2005
=09
	This is a script from www.dhtmlgoodies.com. You will find this and a =
lot of other scripts at our website.=09
=09
	Terms of use:
	You are free to use this script as long as the copyright message is =
kept intact. However, you may not
	redistribute, sell or repost it without our permission.
=09
	Thank you!
=09
	www.dhtmlgoodies.com
	Alf Magne Kalleland
=09
	*/=09
	var tableWidget_tableCounter =3D 0;
	var tableWidget_arraySort =3D new Array();
	var tableWidget_okToSort =3D true;
	var activeColumn =3D new Array();
	var arrowImagePath =3D "/images/";	// Path to arrow images
=09
	function addEndCol(obj)
	{
		if(document.all)return;
		var rows =3D obj.getElementsByTagName('TR');
		for(var no=3D0;no<rows.length;no++){
			var cell =3D rows[no].insertCell(-1);
			cell.innerHTML =3D ' ';
			cell.style.width =3D '13px';
			cell.width =3D '13';

		}=09
	=09
	}
=09
	function highlightTableHeader()
	{
		this.className=3D'tableWigdet_headerCellOver';
		if(document.all){	// I.E fix for "jumping" headings
			var divObj =3D this.parentNode.parentNode.parentNode.parentNode;
			this.parentNode.style.top =3D divObj.scrollTop + 'px';

		}
		=09
	}
=09
	function deHighlightTableHeader()
	{
		this.className=3D'tableWidget_headerCell';	=09
	}
=09
	function mousedownTableHeader()
	{
		this.className=3D'tableWigdet_headerCellDown';
		if(document.all){	// I.E fix for "jumping" headings
			var divObj =3D this.parentNode.parentNode.parentNode.parentNode;
			this.parentNode.style.top =3D divObj.scrollTop + 'px';
		}	=09
	}
=09
	function sortNumeric(a,b){
	=09
		a =3D a.replace(/,/,'.');
		b =3D b.replace(/,/,'.');
		a =3D a.replace(/[^\d\.\/]/g,'');
		b =3D b.replace(/[^\d\.\/]/g,'');
		if(a.indexOf('/')>=3D0)a =3D eval(a);
		if(b.indexOf('/')>=3D0)b =3D eval(b);
		return a/1 - b/1;
	}
=09

	function sortString(a, b) {

	  if ( a.toUpperCase() < b.toUpperCase() ) return -1;
	  if ( a.toUpperCase() > b.toUpperCase() ) return 1;
	  return 0;
	}=09
	function cancelTableWidgetEvent()
	{
		return false;
	}
=09
	function sortTable()
	{
		if(!tableWidget_okToSort)return;
		tableWidget_okToSort =3D false;
		/* Getting index of current column */
		var obj =3D this;
		var indexThis =3D 0;
		while(obj.previousSibling){
			obj =3D obj.previousSibling;
			if(obj.tagName=3D=3D'TD')indexThis++;	=09
		}
		var images =3D this.getElementsByTagName('IMG');
	=09
		if(this.getAttribute('direction') || this.direction){
			direction =3D this.getAttribute('direction');
			if(navigator.userAgent.indexOf('Opera')>=3D0)direction =3D =
this.direction;
			if(direction=3D=3D'ascending'){
				direction =3D 'descending';
				this.setAttribute('direction','descending');
				this.direction =3D 'descending';=09
			}else{
				direction =3D 'ascending';
				this.setAttribute('direction','ascending');	=09
				this.direction =3D 'ascending';	=09
			}
		}else{
			direction =3D 'ascending';
			this.setAttribute('direction','ascending');
			this.direction =3D 'ascending';
		}
	=09
	=09
	=09
		if(direction=3D=3D'descending'){
			images[0].style.display=3D'inline';
			images[0].style.visibility=3D'visible';
			images[1].style.display=3D'none';
		}else{
			images[1].style.display=3D'inline';
			images[1].style.visibility=3D'visible';
			images[0].style.display=3D'none';	=09
		}

	=09
		var tableObj =3D this.parentNode.parentNode.parentNode;
		var tBody =3D tableObj.getElementsByTagName('TBODY')[0];
	=09
		var widgetIndex =3D tableObj.id.replace(/[^\d]/g,'');
		var sortMethod =3D tableWidget_arraySort[widgetIndex][indexThis]; // N =
=3D numeric, S =3D String
		if(activeColumn[widgetIndex] && activeColumn[widgetIndex]!=3Dthis){
			var images =3D activeColumn[widgetIndex].getElementsByTagName('IMG');
			images[0].style.display=3D'none';
			images[1].style.display=3D'inline';
			images[1].style.visibility =3D 'hidden';
			=
if(activeColumn[widgetIndex])activeColumn[widgetIndex].removeAttribute('d=
irection');		=09
		}

		activeColumn[widgetIndex] =3D this;
	=09
		var cellArray =3D new Array();
		var cellObjArray =3D new Array();
		for(var no=3D1;no<tableObj.rows.length;no++){
			var content=3D tableObj.rows[no].cells[indexThis].innerHTML+'';
			cellArray.push(content);
			cellObjArray.push(tableObj.rows[no].cells[indexThis]);
		}
	=09
		if(sortMethod=3D=3D'N'){
			cellArray =3D cellArray.sort(sortNumeric);
		}else{
			cellArray =3D cellArray.sort(sortString);
		}
	=09
		if(direction=3D=3D'descending'){
			for(var no=3DcellArray.length;no>=3D0;no--){
				for(var no2=3D0;no2<cellObjArray.length;no2++){
					if(cellObjArray[no2].innerHTML =3D=3D cellArray[no] && =
!cellObjArray[no2].getAttribute('allreadySorted')){
						cellObjArray[no2].setAttribute('allreadySorted','1');=09
						tBody.appendChild(cellObjArray[no2].parentNode);			=09
					}			=09
				}		=09
			}
		}else{
			for(var no=3D0;no<cellArray.length;no++){
				for(var no2=3D0;no2<cellObjArray.length;no2++){
					if(cellObjArray[no2].innerHTML =3D=3D cellArray[no] && =
!cellObjArray[no2].getAttribute('allreadySorted')){
						cellObjArray[no2].setAttribute('allreadySorted','1');=09
						tBody.appendChild(cellObjArray[no2].parentNode);			=09
					}			=09
				}		=09
			}			=09
		}
	=09
		for(var no2=3D0;no2<cellObjArray.length;no2++){
			cellObjArray[no2].removeAttribute('allreadySorted');	=09
		}

		tableWidget_okToSort =3D true;
	=09
	=09
	}
=09
	function initTableWidget(objId,width,height,sortArray)
	{
		width =3D width + '';
		height =3D height + '';
		var obj =3D document.getElementById(objId);
		obj.parentNode.className=3D'widget_tableDiv';
		if(navigator.userAgent.indexOf('MSIE')>=3D0){
			obj.parentNode.style.overflowY =3D 'auto';
		}	=09
		tableWidget_arraySort[tableWidget_tableCounter] =3D sortArray;
		if(width.indexOf('%')>=3D0){
			obj.style.width =3D width;
			obj.parentNode.style.width =3D width;
		}else{
			obj.style.width =3D width + 'px';
			obj.parentNode.style.width =3D width + 'px';
		}
	=09
		if(height.indexOf('%')>=3D0){
			obj.style.height =3D height;	=09
			obj.parentNode.style.height =3D height;		=09
		=09
		}else{
			obj.style.height =3D height + 'px';	=09
			obj.parentNode.style.height =3D height + 'px';
		}
		obj.id =3D 'tableWidget' + tableWidget_tableCounter;
		addEndCol(obj);
	=09
		obj.cellSpacing =3D 0;
		obj.cellPadding =3D 0;
		obj.className=3D'tableWidget';
		var tHead =3D obj.getElementsByTagName('THEAD')[0];
		var cells =3D tHead.getElementsByTagName('TD');
		for(var no=3D0;no<cells.length;no++){
			cells[no].className =3D 'tableWidget_headerCell';
			cells[no].onselectstart =3D cancelTableWidgetEvent;
			if(no=3D=3Dcells.length-1){
				cells[no].style.borderRight =3D '0px';=09
			}
			if(sortArray[no]){
				cells[no].onmouseover =3D highlightTableHeader;
				cells[no].onmouseout =3D  deHighlightTableHeader;
				cells[no].onmousedown =3D mousedownTableHeader;	=09
				cells[no].onmouseup =3D highlightTableHeader;	=09
				cells[no].onclick =3D sortTable;=09
			=09
				var img =3D document.createElement('IMG');
				img.src =3D arrowImagePath + 'arrow_up.gif';
				cells[no].appendChild(img);=09
				img.style.visibility =3D 'hidden';
			=09
				var img =3D document.createElement('IMG');
				img.src =3D arrowImagePath + 'arrow_down.gif';
				cells[no].appendChild(img);=09
				img.style.display =3D 'none';
			=09
			=09
			}else{
				cells[no].style.cursor =3D 'default';=09
			}
		=09
		=09
		}	=09
		var tBody =3D obj.getElementsByTagName('TBODY')[0];
		if(document.all && navigator.userAgent.indexOf('Opera')<0){
			tBody.className=3D'scrollingContent';
			tBody.style.display=3D'block';		=09
		}else{
			tBody.className=3D'scrollingContent';
			tBody.style.height =3D =
(obj.parentNode.clientHeight-tHead.offsetHeight) + 'px';
			if(navigator.userAgent.indexOf('Opera')>=3D0){
				obj.parentNode.style.overflow =3D 'auto';
			}
		}
	=09
		for(var no=3D1;no<obj.rows.length;no++){
			obj.rows[no].onmouseover =3D highlightDataRow;
			obj.rows[no].onmouseout =3D deHighlightDataRow;
			for(var no2=3D0;no2<sortArray.length;no2++){	/* Right align numeric =
cells */
				if(sortArray[no2] && =
sortArray[no2]=3D=3D'N')obj.rows[no].cells[no2].style.textAlign=3D'right'=
;
			}
		}
		for(var no2=3D0;no2<sortArray.length;no2++){	/* Right align numeric =
cells */
			if(sortArray[no2] && =
sortArray[no2]=3D=3D'N')obj.rows[0].cells[no2].style.textAlign=3D'right';=

		}	=09
	=09
		tableWidget_tableCounter++;
	}
=09
=09
	function highlightDataRow()
	{
		if(navigator.userAgent.indexOf('Opera')>=3D0)return;
		this.className=3D'tableWidget_dataRollOver';
		if(document.all){	// I.E fix for "jumping" headings
			var divObj =3D this.parentNode.parentNode.parentNode;
			var tHead =3D divObj.getElementsByTagName('TR')[0];
			tHead.style.top =3D divObj.scrollTop + 'px';
		=09
		}=09
	}
=09
	function deHighlightDataRow()
	{
		if(navigator.userAgent.indexOf('Opera')>=3D0)return;
		this.className=3Dnull;
		if(document.all){	// I.E fix for "jumping" headings
			var divObj =3D this.parentNode.parentNode.parentNode;
			var tHead =3D divObj.getElementsByTagName('TR')[0];
			tHead.style.top =3D divObj.scrollTop + 'px';
		}		=09
	}


------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/jslibs/prototype.js

/*  Prototype JavaScript framework, version 1.5.0=0A=
 *  (c) 2005-2007 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://prototype.conio.net/=0A=
 *=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.5.0',=0A=
  BrowserFeatures: {=0A=
    XPath: !!document.evaluate=0A=
  },=0A=
=0A=
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',=0A=
  emptyFunction: function() {},=0A=
  K: function(x) { return x }=0A=
}=0A=
=0A=
var Class =3D {=0A=
  create: function() {=0A=
    return function() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
var Abstract =3D new Object();=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
  for (var property in source) {=0A=
    destination[property] =3D source[property];=0A=
  }=0A=
  return destination;=0A=
}=0A=
=0A=
Object.extend(Object, {=0A=
  inspect: function(object) {=0A=
    try {=0A=
      if (object =3D=3D=3D undefined) return 'undefined';=0A=
      if (object =3D=3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : object.toString();=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  },=0A=
=0A=
  keys: function(object) {=0A=
    var keys =3D [];=0A=
    for (var property in object)=0A=
      keys.push(property);=0A=
    return keys;=0A=
  },=0A=
=0A=
  values: function(object) {=0A=
    var values =3D [];=0A=
    for (var property in object)=0A=
      values.push(object[property]);=0A=
    return values;=0A=
  },=0A=
=0A=
  clone: function(object) {=0A=
    return Object.extend({}, object);=0A=
  }=0A=
});=0A=
=0A=
Function.prototype.bind =3D function() {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function() {=0A=
    return __method.apply(object, args.concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Function.prototype.bindAsEventListener =3D function(object) {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function(event) {=0A=
    return __method.apply(object, [( event || =
window.event)].concat(args).concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Number.prototype, {=0A=
  toColorPart: function() {=0A=
    var digits =3D this.toString(16);=0A=
    if (this < 16) return '0' + digits;=0A=
    return digits;=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this + 1;=0A=
  },=0A=
=0A=
  times: function(iterator) {=0A=
    $R(0, this, true).each(iterator);=0A=
    return this;=0A=
  }=0A=
});=0A=
=0A=
var Try =3D {=0A=
  these: function() {=0A=
    var returnValue;=0A=
=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var lambda =3D arguments[i];=0A=
      try {=0A=
        returnValue =3D lambda();=0A=
        break;=0A=
      } catch (e) {}=0A=
    }=0A=
=0A=
    return returnValue;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create();=0A=
PeriodicalExecuter.prototype =3D {=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    if (!this.timer) return;=0A=
    clearInterval(this.timer);=0A=
    this.timer =3D null;=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    if (!this.currentlyExecuting) {=0A=
      try {=0A=
        this.currentlyExecuting =3D true;=0A=
        this.callback(this);=0A=
      } finally {=0A=
        this.currentlyExecuting =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
String.interpret =3D function(value){=0A=
  return value =3D=3D null ? '' : String(value);=0A=
}=0A=
=0A=
Object.extend(String.prototype, {=0A=
  gsub: function(pattern, replacement) {=0A=
    var result =3D '', source =3D this, match;=0A=
    replacement =3D arguments.callee.prepareReplacement(replacement);=0A=
=0A=
    while (source.length > 0) {=0A=
      if (match =3D source.match(pattern)) {=0A=
        result +=3D source.slice(0, match.index);=0A=
        result +=3D String.interpret(replacement(match));=0A=
        source  =3D source.slice(match.index + match[0].length);=0A=
      } else {=0A=
        result +=3D source, source =3D '';=0A=
      }=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  sub: function(pattern, replacement, count) {=0A=
    replacement =3D this.gsub.prepareReplacement(replacement);=0A=
    count =3D count =3D=3D=3D undefined ? 1 : count;=0A=
=0A=
    return this.gsub(pattern, function(match) {=0A=
      if (--count < 0) return match[0];=0A=
      return replacement(match);=0A=
    });=0A=
  },=0A=
=0A=
  scan: function(pattern, iterator) {=0A=
    this.gsub(pattern, iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  truncate: function(length, truncation) {=0A=
    length =3D length || 30;=0A=
    truncation =3D truncation =3D=3D=3D undefined ? '...' : truncation;=0A=
    return this.length > length ?=0A=
      this.slice(0, length - truncation.length) + truncation : this;=0A=
  },=0A=
=0A=
  strip: function() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  },=0A=
=0A=
  stripTags: function() {=0A=
    return this.replace(/<\/?[^>]+>/gi, '');=0A=
  },=0A=
=0A=
  stripScripts: function() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  },=0A=
=0A=
  extractScripts: function() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A=
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  },=0A=
=0A=
  evalScripts: function() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  },=0A=
=0A=
  escapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    var text =3D document.createTextNode(this);=0A=
    div.appendChild(text);=0A=
    return div.innerHTML;=0A=
  },=0A=
=0A=
  unescapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D this.stripTags();=0A=
    return div.childNodes[0] ? (div.childNodes.length > 1 ?=0A=
      $A(div.childNodes).inject('',function(memo,node){ return =
memo+node.nodeValue }) :=0A=
      div.childNodes[0].nodeValue) : '';=0A=
  },=0A=
=0A=
  toQueryParams: function(separator) {=0A=
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
    if (!match) return {};=0A=
=0A=
    return match[1].split(separator || '&').inject({}, function(hash, =
pair) {=0A=
      if ((pair =3D pair.split('=3D'))[0]) {=0A=
        var name =3D decodeURIComponent(pair[0]);=0A=
        var value =3D pair[1] ? decodeURIComponent(pair[1]) : undefined;=0A=
=0A=
        if (hash[name] !=3D=3D undefined) {=0A=
          if (hash[name].constructor !=3D Array)=0A=
            hash[name] =3D [hash[name]];=0A=
          if (value) hash[name].push(value);=0A=
        }=0A=
        else hash[name] =3D value;=0A=
      }=0A=
      return hash;=0A=
    });=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.split('');=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this.slice(0, this.length - 1) +=0A=
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
  },=0A=
=0A=
  camelize: function() {=0A=
    var parts =3D this.split('-'), len =3D parts.length;=0A=
    if (len =3D=3D 1) return parts[0];=0A=
=0A=
    var camelized =3D this.charAt(0) =3D=3D '-'=0A=
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A=
      : parts[0];=0A=
=0A=
    for (var i =3D 1; i < len; i++)=0A=
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);=0A=
=0A=
    return camelized;=0A=
  },=0A=
=0A=
  capitalize: function(){=0A=
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();=0A=
  },=0A=
=0A=
  underscore: function() {=0A=
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();=0A=
  },=0A=
=0A=
  dasherize: function() {=0A=
    return this.gsub(/_/,'-');=0A=
  },=0A=
=0A=
  inspect: function(useDoubleQuotes) {=0A=
    var escapedString =3D this.replace(/\\/g, '\\\\');=0A=
    if (useDoubleQuotes)=0A=
      return '"' + escapedString.replace(/"/g, '\\"') + '"';=0A=
    else=0A=
      return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  }=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
  if (typeof replacement =3D=3D 'function') return replacement;=0A=
  var template =3D new Template(replacement);=0A=
  return function(match) { return template.evaluate(match) };=0A=
}=0A=
=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
=0A=
var Template =3D Class.create();=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
Template.prototype =3D {=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern  =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      var before =3D match[1];=0A=
      if (before =3D=3D '\\') return match[2];=0A=
      return before + String.interpret(object[match[3]]);=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
var $break    =3D new Object();=0A=
var $continue =3D new Object();=0A=
=0A=
var Enumerable =3D {=0A=
  each: function(iterator) {=0A=
    var index =3D 0;=0A=
    try {=0A=
      this._each(function(value) {=0A=
        try {=0A=
          iterator(value, index++);=0A=
        } catch (e) {=0A=
          if (e !=3D $continue) throw e;=0A=
        }=0A=
      });=0A=
    } catch (e) {=0A=
      if (e !=3D $break) throw e;=0A=
    }=0A=
    return this;=0A=
  },=0A=
=0A=
  eachSlice: function(number, iterator) {=0A=
    var index =3D -number, slices =3D [], array =3D this.toArray();=0A=
    while ((index +=3D number) < array.length)=0A=
      slices.push(array.slice(index, index+number));=0A=
    return slices.map(iterator);=0A=
  },=0A=
=0A=
  all: function(iterator) {=0A=
    var result =3D true;=0A=
    this.each(function(value, index) {=0A=
      result =3D result && !!(iterator || Prototype.K)(value, index);=0A=
      if (!result) throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  any: function(iterator) {=0A=
    var result =3D false;=0A=
    this.each(function(value, index) {=0A=
      if (result =3D !!(iterator || Prototype.K)(value, index))=0A=
        throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  collect: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push((iterator || Prototype.K)(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  detect: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index)) {=0A=
        result =3D value;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  findAll: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  grep: function(pattern, iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      var stringValue =3D value.toString();=0A=
      if (stringValue.match(pattern))=0A=
        results.push((iterator || Prototype.K)(value, index));=0A=
    })=0A=
    return results;=0A=
  },=0A=
=0A=
  include: function(object) {=0A=
    var found =3D false;=0A=
    this.each(function(value) {=0A=
      if (value =3D=3D object) {=0A=
        found =3D true;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return found;=0A=
  },=0A=
=0A=
  inGroupsOf: function(number, fillWith) {=0A=
    fillWith =3D fillWith =3D=3D=3D undefined ? null : fillWith;=0A=
    return this.eachSlice(number, function(slice) {=0A=
      while(slice.length < number) slice.push(fillWith);=0A=
      return slice;=0A=
    });=0A=
  },=0A=
=0A=
  inject: function(memo, iterator) {=0A=
    this.each(function(value, index) {=0A=
      memo =3D iterator(memo, value, index);=0A=
    });=0A=
    return memo;=0A=
  },=0A=
=0A=
  invoke: function(method) {=0A=
    var args =3D $A(arguments).slice(1);=0A=
    return this.map(function(value) {=0A=
      return value[method].apply(value, args);=0A=
    });=0A=
  },=0A=
=0A=
  max: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D (iterator || Prototype.K)(value, index);=0A=
      if (result =3D=3D undefined || value >=3D result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  min: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D (iterator || Prototype.K)(value, index);=0A=
      if (result =3D=3D undefined || value < result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  partition: function(iterator) {=0A=
    var trues =3D [], falses =3D [];=0A=
    this.each(function(value, index) {=0A=
      ((iterator || Prototype.K)(value, index) ?=0A=
        trues : falses).push(value);=0A=
    });=0A=
    return [trues, falses];=0A=
  },=0A=
=0A=
  pluck: function(property) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push(value[property]);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  reject: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (!iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  sortBy: function(iterator) {=0A=
    return this.map(function(value, index) {=0A=
      return {value: value, criteria: iterator(value, index)};=0A=
    }).sort(function(left, right) {=0A=
      var a =3D left.criteria, b =3D right.criteria;=0A=
      return a < b ? -1 : a > b ? 1 : 0;=0A=
    }).pluck('value');=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.map();=0A=
  },=0A=
=0A=
  zip: function() {=0A=
    var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
    if (typeof args.last() =3D=3D 'function')=0A=
      iterator =3D args.pop();=0A=
=0A=
    var collections =3D [this].concat(args).map($A);=0A=
    return this.map(function(value, index) {=0A=
      return iterator(collections.pluck(index));=0A=
    });=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.toArray().length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Enumerable:' + this.toArray().inspect() + '>';=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Enumerable, {=0A=
  map:     Enumerable.collect,=0A=
  find:    Enumerable.detect,=0A=
  select:  Enumerable.findAll,=0A=
  member:  Enumerable.include,=0A=
  entries: Enumerable.toArray=0A=
});=0A=
var $A =3D Array.from =3D function(iterable) {=0A=
  if (!iterable) return [];=0A=
  if (iterable.toArray) {=0A=
    return iterable.toArray();=0A=
  } else {=0A=
    var results =3D [];=0A=
    for (var i =3D 0, length =3D iterable.length; i < length; i++)=0A=
      results.push(iterable[i]);=0A=
    return results;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Array.prototype, Enumerable);=0A=
=0A=
if (!Array.prototype._reverse)=0A=
  Array.prototype._reverse =3D Array.prototype.reverse;=0A=
=0A=
Object.extend(Array.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      iterator(this[i]);=0A=
  },=0A=
=0A=
  clear: function() {=0A=
    this.length =3D 0;=0A=
    return this;=0A=
  },=0A=
=0A=
  first: function() {=0A=
    return this[0];=0A=
  },=0A=
=0A=
  last: function() {=0A=
    return this[this.length - 1];=0A=
  },=0A=
=0A=
  compact: function() {=0A=
    return this.select(function(value) {=0A=
      return value !=3D null;=0A=
    });=0A=
  },=0A=
=0A=
  flatten: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.concat(value && value.constructor =3D=3D Array ?=0A=
        value.flatten() : [value]);=0A=
    });=0A=
  },=0A=
=0A=
  without: function() {=0A=
    var values =3D $A(arguments);=0A=
    return this.select(function(value) {=0A=
      return !values.include(value);=0A=
    });=0A=
  },=0A=
=0A=
  indexOf: function(object) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      if (this[i] =3D=3D object) return i;=0A=
    return -1;=0A=
  },=0A=
=0A=
  reverse: function(inline) {=0A=
    return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
  },=0A=
=0A=
  reduce: function() {=0A=
    return this.length > 1 ? this : this[0];=0A=
  },=0A=
=0A=
  uniq: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.include(value) ? array : array.concat([value]);=0A=
    });=0A=
  },=0A=
=0A=
  clone: function() {=0A=
    return [].concat(this);=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
  }=0A=
});=0A=
=0A=
Array.prototype.toArray =3D Array.prototype.clone;=0A=
=0A=
function $w(string){=0A=
  string =3D string.strip();=0A=
  return string ? string.split(/\s+/) : [];=0A=
}=0A=
=0A=
if(window.opera){=0A=
  Array.prototype.concat =3D function(){=0A=
    var array =3D [];=0A=
    for(var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);=0A=
    for(var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      if(arguments[i].constructor =3D=3D Array) {=0A=
        for(var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)=0A=
          array.push(arguments[i][j]);=0A=
      } else {=0A=
        array.push(arguments[i]);=0A=
      }=0A=
    }=0A=
    return array;=0A=
  }=0A=
}=0A=
var Hash =3D function(obj) {=0A=
  Object.extend(this, obj || {});=0A=
};=0A=
=0A=
Object.extend(Hash, {=0A=
  toQueryString: function(obj) {=0A=
    var parts =3D [];=0A=
=0A=
	  this.prototype._each.call(obj, function(pair) {=0A=
      if (!pair.key) return;=0A=
=0A=
      if (pair.value && pair.value.constructor =3D=3D Array) {=0A=
        var values =3D pair.value.compact();=0A=
        if (values.length < 2) pair.value =3D values.reduce();=0A=
        else {=0A=
        	key =3D encodeURIComponent(pair.key);=0A=
          values.each(function(value) {=0A=
            value =3D value !=3D undefined ? encodeURIComponent(value) : =
'';=0A=
            parts.push(key + '=3D' + encodeURIComponent(value));=0A=
          });=0A=
          return;=0A=
        }=0A=
      }=0A=
      if (pair.value =3D=3D undefined) pair[1] =3D '';=0A=
      parts.push(pair.map(encodeURIComponent).join('=3D'));=0A=
	  });=0A=
=0A=
    return parts.join('&');=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Hash.prototype, Enumerable);=0A=
Object.extend(Hash.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var key in this) {=0A=
      var value =3D this[key];=0A=
      if (value && value =3D=3D Hash.prototype[key]) continue;=0A=
=0A=
      var pair =3D [key, value];=0A=
      pair.key =3D key;=0A=
      pair.value =3D value;=0A=
      iterator(pair);=0A=
    }=0A=
  },=0A=
=0A=
  keys: function() {=0A=
    return this.pluck('key');=0A=
  },=0A=
=0A=
  values: function() {=0A=
    return this.pluck('value');=0A=
  },=0A=
=0A=
  merge: function(hash) {=0A=
    return $H(hash).inject(this, function(mergedHash, pair) {=0A=
      mergedHash[pair.key] =3D pair.value;=0A=
      return mergedHash;=0A=
    });=0A=
  },=0A=
=0A=
  remove: function() {=0A=
    var result;=0A=
    for(var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var value =3D this[arguments[i]];=0A=
      if (value !=3D=3D undefined){=0A=
        if (result =3D=3D=3D undefined) result =3D value;=0A=
        else {=0A=
          if (result.constructor !=3D Array) result =3D [result];=0A=
          result.push(value)=0A=
        }=0A=
      }=0A=
      delete this[arguments[i]];=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  toQueryString: function() {=0A=
    return Hash.toQueryString(this);=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Hash:{' + this.map(function(pair) {=0A=
      return pair.map(Object.inspect).join(': ');=0A=
    }).join(', ') + '}>';=0A=
  }=0A=
});=0A=
=0A=
function $H(object) {=0A=
  if (object && object.constructor =3D=3D Hash) return object;=0A=
  return new Hash(object);=0A=
};=0A=
ObjectRange =3D Class.create();=0A=
Object.extend(ObjectRange.prototype, Enumerable);=0A=
Object.extend(ObjectRange.prototype, {=0A=
  initialize: function(start, end, exclusive) {=0A=
    this.start =3D start;=0A=
    this.end =3D end;=0A=
    this.exclusive =3D exclusive;=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    var value =3D this.start;=0A=
    while (this.include(value)) {=0A=
      iterator(value);=0A=
      value =3D value.succ();=0A=
    }=0A=
  },=0A=
=0A=
  include: function(value) {=0A=
    if (value < this.start)=0A=
      return false;=0A=
    if (this.exclusive)=0A=
      return value < this.end;=0A=
    return value <=3D this.end;=0A=
  }=0A=
});=0A=
=0A=
var $R =3D function(start, end, exclusive) {=0A=
  return new ObjectRange(start, end, exclusive);=0A=
}=0A=
=0A=
var Ajax =3D {=0A=
  getTransport: function() {=0A=
    return Try.these(=0A=
      function() {return new XMLHttpRequest()},=0A=
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A=
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}=0A=
    ) || false;=0A=
  },=0A=
=0A=
  activeRequestCount: 0=0A=
}=0A=
=0A=
Ajax.Responders =3D {=0A=
  responders: [],=0A=
=0A=
  _each: function(iterator) {=0A=
    this.responders._each(iterator);=0A=
  },=0A=
=0A=
  register: function(responder) {=0A=
    if (!this.include(responder))=0A=
      this.responders.push(responder);=0A=
  },=0A=
=0A=
  unregister: function(responder) {=0A=
    this.responders =3D this.responders.without(responder);=0A=
  },=0A=
=0A=
  dispatch: function(callback, request, transport, json) {=0A=
    this.each(function(responder) {=0A=
      if (typeof responder[callback] =3D=3D 'function') {=0A=
        try {=0A=
          responder[callback].apply(responder, [request, transport, =
json]);=0A=
        } catch (e) {}=0A=
      }=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
=0A=
Ajax.Responders.register({=0A=
  onCreate: function() {=0A=
    Ajax.activeRequestCount++;=0A=
  },=0A=
  onComplete: function() {=0A=
    Ajax.activeRequestCount--;=0A=
  }=0A=
});=0A=
=0A=
Ajax.Base =3D function() {};=0A=
Ajax.Base.prototype =3D {=0A=
  setOptions: function(options) {=0A=
    this.options =3D {=0A=
      method:       'post',=0A=
      asynchronous: true,=0A=
      contentType:  'application/x-www-form-urlencoded',=0A=
      encoding:     'UTF-8',=0A=
      parameters:   ''=0A=
    }=0A=
    Object.extend(this.options, options || {});=0A=
=0A=
    this.options.method =3D this.options.method.toLowerCase();=0A=
    if (typeof this.options.parameters =3D=3D 'string')=0A=
      this.options.parameters =3D =
this.options.parameters.toQueryParams();=0A=
  }=0A=
}=0A=
=0A=
Ajax.Request =3D Class.create();=0A=
Ajax.Request.Events =3D=0A=
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Request.prototype =3D Object.extend(new Ajax.Base(), {=0A=
  _complete: false,=0A=
=0A=
  initialize: function(url, options) {=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.setOptions(options);=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  request: function(url) {=0A=
    this.url =3D url;=0A=
    this.method =3D this.options.method;=0A=
    var params =3D 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=
    params =3D Hash.toQueryString(params);=0A=
    if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) =
params +=3D '&_=3D'=0A=
=0A=
    // when GET, append parameters to URL=0A=
    if (this.method =3D=3D 'get' && params)=0A=
      this.url +=3D (this.url.indexOf('?') > -1 ? '&' : '?') + params;=0A=
=0A=
    try {=0A=
      Ajax.Responders.dispatch('onCreate', this, this.transport);=0A=
=0A=
      this.transport.open(this.method.toUpperCase(), this.url,=0A=
        this.options.asynchronous);=0A=
=0A=
      if (this.options.asynchronous)=0A=
        setTimeout(function() { this.respondToReadyState(1) =
}.bind(this), 10);=0A=
=0A=
      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
      this.setRequestHeaders();=0A=
=0A=
      var body =3D this.method =3D=3D 'post' ? (this.options.postBody || =
params) : null;=0A=
=0A=
      this.transport.send(body);=0A=
=0A=
      /* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
      if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
        this.onStateChange();=0A=
=0A=
    }=0A=
    catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  onStateChange: function() {=0A=
    var readyState =3D this.transport.readyState;=0A=
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A=
      this.respondToReadyState(this.transport.readyState);=0A=
  },=0A=
=0A=
  setRequestHeaders: function() {=0A=
    var headers =3D {=0A=
      'X-Requested-With': 'XMLHttpRequest',=0A=
      'X-Prototype-Version': Prototype.Version,=0A=
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'=0A=
    };=0A=
=0A=
    if (this.method =3D=3D 'post') {=0A=
      headers['Content-type'] =3D this.options.contentType +=0A=
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');=0A=
=0A=
      /* Force "Connection: close" for older Mozilla browsers to work=0A=
       * around a bug where XMLHttpRequest sends an incorrect=0A=
       * Content-length header. See Mozilla Bugzilla #246651.=0A=
       */=0A=
      if (this.transport.overrideMimeType &&=0A=
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)=0A=
            headers['Connection'] =3D 'close';=0A=
    }=0A=
=0A=
    // user-defined headers=0A=
    if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
      var extras =3D this.options.requestHeaders;=0A=
=0A=
      if (typeof extras.push =3D=3D 'function')=0A=
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A=
          headers[extras[i]] =3D extras[i+1];=0A=
      else=0A=
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });=0A=
    }=0A=
=0A=
    for (var name in headers)=0A=
      this.transport.setRequestHeader(name, headers[name]);=0A=
  },=0A=
=0A=
  success: function() {=0A=
    return !this.transport.status=0A=
        || (this.transport.status >=3D 200 && this.transport.status < =
300);=0A=
  },=0A=
=0A=
  respondToReadyState: function(readyState) {=0A=
    var state =3D Ajax.Request.Events[readyState];=0A=
    var transport =3D this.transport, json =3D this.evalJSON();=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      try {=0A=
        this._complete =3D true;=0A=
        (this.options['on' + this.transport.status]=0A=
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
         || Prototype.emptyFunction)(transport, json);=0A=
      } catch (e) {=0A=
        this.dispatchException(e);=0A=
      }=0A=
=0A=
      if ((this.getHeader('Content-type') || 'text/javascript').strip().=0A=
        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))=0A=
          this.evalResponse();=0A=
    }=0A=
=0A=
    try {=0A=
      (this.options['on' + state] || Prototype.emptyFunction)(transport, =
json);=0A=
      Ajax.Responders.dispatch('on' + state, this, transport, json);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      // avoid memory leak in MSIE: clean up=0A=
      this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
    }=0A=
  },=0A=
=0A=
  getHeader: function(name) {=0A=
    try {=0A=
      return this.transport.getResponseHeader(name);=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalJSON: function() {=0A=
    try {=0A=
      var json =3D this.getHeader('X-JSON');=0A=
      return json ? eval('(' + json + ')') : null;=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalResponse: function() {=0A=
    try {=0A=
      return eval(this.transport.responseText);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  dispatchException: function(exception) {=0A=
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
    Ajax.Responders.dispatch('onException', this, exception);=0A=
  }=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create();=0A=
=0A=
Object.extend(Object.extend(Ajax.Updater.prototype, =
Ajax.Request.prototype), {=0A=
  initialize: function(container, url, options) {=0A=
    this.container =3D {=0A=
      success: (container.success || container),=0A=
      failure: (container.failure || (container.success ? null : =
container))=0A=
    }=0A=
=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.setOptions(options);=0A=
=0A=
    var onComplete =3D this.options.onComplete || =
Prototype.emptyFunction;=0A=
    this.options.onComplete =3D (function(transport, param) {=0A=
      this.updateContent();=0A=
      onComplete(transport, param);=0A=
    }).bind(this);=0A=
=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  updateContent: function() {=0A=
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'];=0A=
    var response =3D this.transport.responseText;=0A=
=0A=
    if (!this.options.evalScripts) response =3D response.stripScripts();=0A=
=0A=
    if (receiver =3D $(receiver)) {=0A=
      if (this.options.insertion)=0A=
        new this.options.insertion(receiver, response);=0A=
      else=0A=
        receiver.update(response);=0A=
    }=0A=
=0A=
    if (this.success()) {=0A=
      if (this.onComplete)=0A=
        setTimeout(this.onComplete.bind(this), 10);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create();=0A=
Ajax.PeriodicalUpdater.prototype =3D Object.extend(new Ajax.Base(), {=0A=
  initialize: function(container, url, options) {=0A=
    this.setOptions(options);=0A=
    this.onComplete =3D this.options.onComplete;=0A=
=0A=
    this.frequency =3D (this.options.frequency || 2);=0A=
    this.decay =3D (this.options.decay || 1);=0A=
=0A=
    this.updater =3D {};=0A=
    this.container =3D container;=0A=
    this.url =3D url;=0A=
=0A=
    this.start();=0A=
  },=0A=
=0A=
  start: function() {=0A=
    this.options.onComplete =3D this.updateComplete.bind(this);=0A=
    this.onTimerEvent();=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    this.updater.options.onComplete =3D undefined;=0A=
    clearTimeout(this.timer);=0A=
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A=
  },=0A=
=0A=
  updateComplete: function(request) {=0A=
    if (this.options.decay) {=0A=
      this.decay =3D (request.responseText =3D=3D this.lastText ?=0A=
        this.decay * this.options.decay : 1);=0A=
=0A=
      this.lastText =3D request.responseText;=0A=
    }=0A=
    this.timer =3D setTimeout(this.onTimerEvent.bind(this),=0A=
      this.decay * this.frequency * 1000);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
  }=0A=
});=0A=
function $(element) {=0A=
  if (arguments.length > 1) {=0A=
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)=0A=
      elements.push($(arguments[i]));=0A=
    return elements;=0A=
  }=0A=
  if (typeof element =3D=3D 'string')=0A=
    element =3D document.getElementById(element);=0A=
  return Element.extend(element);=0A=
}=0A=
=0A=
if (Prototype.BrowserFeatures.XPath) {=0A=
  document._getElementsByXPath =3D function(expression, parentElement) {=0A=
    var results =3D [];=0A=
    var query =3D document.evaluate(expression, $(parentElement) || =
document,=0A=
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);=0A=
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)=0A=
      results.push(query.snapshotItem(i));=0A=
    return results;=0A=
  };=0A=
}=0A=
=0A=
document.getElementsByClassName =3D function(className, parentElement) {=0A=
  if (Prototype.BrowserFeatures.XPath) {=0A=
    var q =3D ".//*[contains(concat(' ', @class, ' '), ' " + className + =
" ')]";=0A=
    return document._getElementsByXPath(q, parentElement);=0A=
  } else {=0A=
    var children =3D ($(parentElement) || =
document.body).getElementsByTagName('*');=0A=
    var elements =3D [], child;=0A=
    for (var i =3D 0, length =3D children.length; i < length; i++) {=0A=
      child =3D children[i];=0A=
      if (Element.hasClassName(child, className))=0A=
        elements.push(Element.extend(child));=0A=
    }=0A=
    return elements;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Element)=0A=
  var Element =3D new Object();=0A=
=0A=
Element.extend =3D function(element) {=0A=
  if (!element || _nativeExtensions || element.nodeType =3D=3D 3) return =
element;=0A=
=0A=
  if (!element._extended && element.tagName && element !=3D window) {=0A=
    var methods =3D Object.clone(Element.Methods), cache =3D =
Element.extend.cache;=0A=
=0A=
    if (element.tagName =3D=3D 'FORM')=0A=
      Object.extend(methods, Form.Methods);=0A=
    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))=0A=
      Object.extend(methods, Form.Element.Methods);=0A=
=0A=
    Object.extend(methods, Element.Methods.Simulated);=0A=
=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (typeof value =3D=3D 'function' && !(property in element))=0A=
        element[property] =3D cache.findOrStore(value);=0A=
    }=0A=
  }=0A=
=0A=
  element._extended =3D true;=0A=
  return element;=0A=
};=0A=
=0A=
Element.extend.cache =3D {=0A=
  findOrStore: function(value) {=0A=
    return this[value] =3D this[value] || function() {=0A=
      return value.apply(null, [this].concat($A(arguments)));=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
Element.Methods =3D {=0A=
  visible: function(element) {=0A=
    return $(element).style.display !=3D 'none';=0A=
  },=0A=
=0A=
  toggle: function(element) {=0A=
    element =3D $(element);=0A=
    Element[Element.visible(element) ? 'hide' : 'show'](element);=0A=
    return element;=0A=
  },=0A=
=0A=
  hide: function(element) {=0A=
    $(element).style.display =3D 'none';=0A=
    return element;=0A=
  },=0A=
=0A=
  show: function(element) {=0A=
    $(element).style.display =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  remove: function(element) {=0A=
    element =3D $(element);=0A=
    element.parentNode.removeChild(element);=0A=
    return element;=0A=
  },=0A=
=0A=
  update: function(element, html) {=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    $(element).innerHTML =3D html.stripScripts();=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  },=0A=
=0A=
  replace: function(element, html) {=0A=
    element =3D $(element);=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    if (element.outerHTML) {=0A=
      element.outerHTML =3D html.stripScripts();=0A=
    } else {=0A=
      var range =3D element.ownerDocument.createRange();=0A=
      range.selectNodeContents(element);=0A=
      element.parentNode.replaceChild(=0A=
        range.createContextualFragment(html.stripScripts()), element);=0A=
    }=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  },=0A=
=0A=
  inspect: function(element) {=0A=
    element =3D $(element);=0A=
    var result =3D '<' + element.tagName.toLowerCase();=0A=
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A=
      var property =3D pair.first(), attribute =3D pair.last();=0A=
      var value =3D (element[property] || '').toString();=0A=
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);=0A=
    });=0A=
    return result + '>';=0A=
  },=0A=
=0A=
  recursivelyCollect: function(element, property) {=0A=
    element =3D $(element);=0A=
    var elements =3D [];=0A=
    while (element =3D element[property])=0A=
      if (element.nodeType =3D=3D 1)=0A=
        elements.push(Element.extend(element));=0A=
    return elements;=0A=
  },=0A=
=0A=
  ancestors: function(element) {=0A=
    return $(element).recursivelyCollect('parentNode');=0A=
  },=0A=
=0A=
  descendants: function(element) {=0A=
    return $A($(element).getElementsByTagName('*'));=0A=
  },=0A=
=0A=
  immediateDescendants: function(element) {=0A=
    if (!(element =3D $(element).firstChild)) return [];=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    if (element) return [element].concat($(element).nextSiblings());=0A=
    return [];=0A=
  },=0A=
=0A=
  previousSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('previousSibling');=0A=
  },=0A=
=0A=
  nextSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('nextSibling');=0A=
  },=0A=
=0A=
  siblings: function(element) {=0A=
    element =3D $(element);=0A=
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());=0A=
  },=0A=
=0A=
  match: function(element, selector) {=0A=
    if (typeof selector =3D=3D 'string')=0A=
      selector =3D new Selector(selector);=0A=
    return selector.match($(element));=0A=
  },=0A=
=0A=
  up: function(element, expression, index) {=0A=
    return Selector.findElement($(element).ancestors(), expression, =
index);=0A=
  },=0A=
=0A=
  down: function(element, expression, index) {=0A=
    return Selector.findElement($(element).descendants(), expression, =
index);=0A=
  },=0A=
=0A=
  previous: function(element, expression, index) {=0A=
    return Selector.findElement($(element).previousSiblings(), =
expression, index);=0A=
  },=0A=
=0A=
  next: function(element, expression, index) {=0A=
    return Selector.findElement($(element).nextSiblings(), expression, =
index);=0A=
  },=0A=
=0A=
  getElementsBySelector: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element, args);=0A=
  },=0A=
=0A=
  getElementsByClassName: function(element, className) {=0A=
    return document.getElementsByClassName(className, element);=0A=
  },=0A=
=0A=
  readAttribute: function(element, name) {=0A=
    element =3D $(element);=0A=
    if (document.all && !window.opera) {=0A=
      var t =3D Element._attributeTranslations;=0A=
      if (t.values[name]) return t.values[name](element, name);=0A=
      if (t.names[name])  name =3D t.names[name];=0A=
      var attribute =3D element.attributes[name];=0A=
      if(attribute) return attribute.nodeValue;=0A=
    }=0A=
    return element.getAttribute(name);=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=
    if (elementClassName.length =3D=3D 0) return false;=0A=
    if (elementClassName =3D=3D className ||=0A=
        elementClassName.match(new RegExp("(^|\\s)" + className + =
"(\\s|$)")))=0A=
      return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  addClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element).add(className);=0A=
    return element;=0A=
  },=0A=
=0A=
  removeClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element).remove(className);=0A=
    return element;=0A=
  },=0A=
=0A=
  toggleClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element)[element.hasClassName(className) ? =
'remove' : 'add'](className);=0A=
    return element;=0A=
  },=0A=
=0A=
  observe: function() {=0A=
    Event.observe.apply(Event, arguments);=0A=
    return $A(arguments).first();=0A=
  },=0A=
=0A=
  stopObserving: function() {=0A=
    Event.stopObserving.apply(Event, arguments);=0A=
    return $A(arguments).first();=0A=
  },=0A=
=0A=
  // removes whitespace-only text node children=0A=
  cleanWhitespace: function(element) {=0A=
    element =3D $(element);=0A=
    var node =3D element.firstChild;=0A=
    while (node) {=0A=
      var nextNode =3D node.nextSibling;=0A=
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A=
        element.removeChild(node);=0A=
      node =3D nextNode;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  empty: function(element) {=0A=
    return $(element).innerHTML.match(/^\s*$/);=0A=
  },=0A=
=0A=
  descendantOf: function(element, ancestor) {=0A=
    element =3D $(element), ancestor =3D $(ancestor);=0A=
    while (element =3D element.parentNode)=0A=
      if (element =3D=3D ancestor) return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  scrollTo: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Position.cumulativeOffset(element);=0A=
    window.scrollTo(pos[0], pos[1]);=0A=
    return element;=0A=
  },=0A=
=0A=
  getStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    if (['float','cssFloat'].include(style))=0A=
      style =3D (typeof element.style.styleFloat !=3D 'undefined' ? =
'styleFloat' : 'cssFloat');=0A=
    style =3D style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value) {=0A=
      if (document.defaultView && document.defaultView.getComputedStyle) =
{=0A=
        var css =3D document.defaultView.getComputedStyle(element, null);=0A=
        value =3D css ? css[style] : null;=0A=
      } else if (element.currentStyle) {=0A=
        value =3D element.currentStyle[style];=0A=
      }=0A=
    }=0A=
=0A=
    if((value =3D=3D 'auto') && ['width','height'].include(style) && =
(element.getStyle('display') !=3D 'none'))=0A=
      value =3D element['offset'+style.capitalize()] + 'px';=0A=
=0A=
    if (window.opera && ['left', 'top', 'right', =
'bottom'].include(style))=0A=
      if (Element.getStyle(element, 'position') =3D=3D 'static') value =
=3D 'auto';=0A=
    if(style =3D=3D 'opacity') {=0A=
      if(value) return parseFloat(value);=0A=
      if(value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))=0A=
        if(value[1]) return parseFloat(value[1]) / 100;=0A=
      return 1.0;=0A=
    }=0A=
    return value =3D=3D 'auto' ? null : value;=0A=
  },=0A=
=0A=
  setStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    for (var name in style) {=0A=
      var value =3D style[name];=0A=
      if(name =3D=3D 'opacity') {=0A=
        if (value =3D=3D 1) {=0A=
          value =3D (/Gecko/.test(navigator.userAgent) &&=0A=
            !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? =
0.999999 : 1.0;=0A=
          if(/MSIE/.test(navigator.userAgent) && !window.opera)=0A=
            element.style.filter =3D =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');=0A=
        } else if(value =3D=3D=3D '') {=0A=
          if(/MSIE/.test(navigator.userAgent) && !window.opera)=0A=
            element.style.filter =3D =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');=0A=
        } else {=0A=
          if(value < 0.00001) value =3D 0;=0A=
          if(/MSIE/.test(navigator.userAgent) && !window.opera)=0A=
            element.style.filter =3D =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +=0A=
              'alpha(opacity=3D'+value*100+')';=0A=
        }=0A=
      } else if(['float','cssFloat'].include(name)) name =3D (typeof =
element.style.styleFloat !=3D 'undefined') ? 'styleFloat' : 'cssFloat';=0A=
      element.style[name.camelize()] =3D value;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  getDimensions: function(element) {=0A=
    element =3D $(element);=0A=
    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.style.overflow || 'auto';=0A=
    if ((Element.getStyle(element, 'overflow') || 'visible') !=3D =
'hidden')=0A=
      element.style.overflow =3D 'hidden';=0A=
    return element;=0A=
  },=0A=
=0A=
  undoClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element._overflow) return element;=0A=
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;=0A=
    element._overflow =3D null;=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});=0A=
=0A=
Element._attributeTranslations =3D {};=0A=
=0A=
Element._attributeTranslations.names =3D {=0A=
  colspan:   "colSpan",=0A=
  rowspan:   "rowSpan",=0A=
  valign:    "vAlign",=0A=
  datetime:  "dateTime",=0A=
  accesskey: "accessKey",=0A=
  tabindex:  "tabIndex",=0A=
  enctype:   "encType",=0A=
  maxlength: "maxLength",=0A=
  readonly:  "readOnly",=0A=
  longdesc:  "longDesc"=0A=
};=0A=
=0A=
Element._attributeTranslations.values =3D {=0A=
  _getAttr: function(element, attribute) {=0A=
    return element.getAttribute(attribute, 2);=0A=
  },=0A=
=0A=
  _flag: function(element, attribute) {=0A=
    return $(element).hasAttribute(attribute) ? attribute : null;=0A=
  },=0A=
=0A=
  style: function(element) {=0A=
    return element.style.cssText.toLowerCase();=0A=
  },=0A=
=0A=
  title: function(element) {=0A=
    var node =3D element.getAttributeNode('title');=0A=
    return node.specified ? node.nodeValue : null;=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element._attributeTranslations.values, {=0A=
  href: Element._attributeTranslations.values._getAttr,=0A=
  src:  Element._attributeTranslations.values._getAttr,=0A=
  disabled: Element._attributeTranslations.values._flag,=0A=
  checked:  Element._attributeTranslations.values._flag,=0A=
  readonly: Element._attributeTranslations.values._flag,=0A=
  multiple: Element._attributeTranslations.values._flag=0A=
});=0A=
=0A=
Element.Methods.Simulated =3D {=0A=
  hasAttribute: function(element, attribute) {=0A=
    var t =3D Element._attributeTranslations;=0A=
    attribute =3D t.names[attribute] || attribute;=0A=
    return $(element).getAttributeNode(attribute).specified;=0A=
  }=0A=
};=0A=
=0A=
// IE is missing .innerHTML support for TABLE-related elements=0A=
if (document.all && !window.opera){=0A=
  Element.Methods.update =3D function(element, html) {=0A=
    element =3D $(element);=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    var tagName =3D element.tagName.toUpperCase();=0A=
    if (['THEAD','TBODY','TR','TD'].include(tagName)) {=0A=
      var div =3D document.createElement('div');=0A=
      switch (tagName) {=0A=
        case 'THEAD':=0A=
        case 'TBODY':=0A=
          div.innerHTML =3D '<table><tbody>' +  html.stripScripts() + =
'</tbody></table>';=0A=
          depth =3D 2;=0A=
          break;=0A=
        case 'TR':=0A=
          div.innerHTML =3D '<table><tbody><tr>' +  html.stripScripts() =
+ '</tr></tbody></table>';=0A=
          depth =3D 3;=0A=
          break;=0A=
        case 'TD':=0A=
          div.innerHTML =3D '<table><tbody><tr><td>' +  =
html.stripScripts() + '</td></tr></tbody></table>';=0A=
          depth =3D 4;=0A=
      }=0A=
      $A(element.childNodes).each(function(node){=0A=
        element.removeChild(node)=0A=
      });=0A=
      depth.times(function(){ div =3D div.firstChild });=0A=
=0A=
      $A(div.childNodes).each(=0A=
        function(node){ element.appendChild(node) });=0A=
    } else {=0A=
      element.innerHTML =3D html.stripScripts();=0A=
    }=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
var _nativeExtensions =3D false;=0A=
=0A=
if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {=0A=
    var className =3D 'HTML' + tag + 'Element';=0A=
    if(window[className]) return;=0A=
    var klass =3D window[className] =3D {};=0A=
    klass.prototype =3D document.createElement(tag ? tag.toLowerCase() : =
'div').__proto__;=0A=
  });=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
  Object.extend(Element.Methods, methods || {});=0A=
=0A=
  function copy(methods, destination, onlyIfAbsent) {=0A=
    onlyIfAbsent =3D onlyIfAbsent || false;=0A=
    var cache =3D Element.extend.cache;=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (!onlyIfAbsent || !(property in destination))=0A=
        destination[property] =3D cache.findOrStore(value);=0A=
    }=0A=
  }=0A=
=0A=
  if (typeof HTMLElement !=3D 'undefined') {=0A=
    copy(Element.Methods, HTMLElement.prototype);=0A=
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A=
    copy(Form.Methods, HTMLFormElement.prototype);=0A=
    [HTMLInputElement, HTMLTextAreaElement, =
HTMLSelectElement].each(function(klass) {=0A=
      copy(Form.Element.Methods, klass.prototype);=0A=
    });=0A=
    _nativeExtensions =3D true;=0A=
  }=0A=
}=0A=
=0A=
var Toggle =3D new Object();=0A=
Toggle.display =3D Element.toggle;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.Insertion =3D function(adjacency) {=0A=
  this.adjacency =3D adjacency;=0A=
}=0A=
=0A=
Abstract.Insertion.prototype =3D {=0A=
  initialize: function(element, content) {=0A=
    this.element =3D $(element);=0A=
    this.content =3D content.stripScripts();=0A=
=0A=
    if (this.adjacency && this.element.insertAdjacentHTML) {=0A=
      try {=0A=
        this.element.insertAdjacentHTML(this.adjacency, this.content);=0A=
      } catch (e) {=0A=
        var tagName =3D this.element.tagName.toUpperCase();=0A=
        if (['TBODY', 'TR'].include(tagName)) {=0A=
          this.insertContent(this.contentFromAnonymousTable());=0A=
        } else {=0A=
          throw e;=0A=
        }=0A=
      }=0A=
    } else {=0A=
      this.range =3D this.element.ownerDocument.createRange();=0A=
      if (this.initializeRange) this.initializeRange();=0A=
      =
this.insertContent([this.range.createContextualFragment(this.content)]);=0A=
    }=0A=
=0A=
    setTimeout(function() {content.evalScripts()}, 10);=0A=
  },=0A=
=0A=
  contentFromAnonymousTable: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D '<table><tbody>' + this.content + =
'</tbody></table>';=0A=
    return $A(div.childNodes[0].childNodes[0].childNodes);=0A=
  }=0A=
}=0A=
=0A=
var Insertion =3D new Object();=0A=
=0A=
Insertion.Before =3D Class.create();=0A=
Insertion.Before.prototype =3D Object.extend(new =
Abstract.Insertion('beforeBegin'), {=0A=
  initializeRange: function() {=0A=
    this.range.setStartBefore(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.parentNode.insertBefore(fragment, this.element);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.Top =3D Class.create();=0A=
Insertion.Top.prototype =3D Object.extend(new =
Abstract.Insertion('afterBegin'), {=0A=
  initializeRange: function() {=0A=
    this.range.selectNodeContents(this.element);=0A=
    this.range.collapse(true);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.reverse(false).each((function(fragment) {=0A=
      this.element.insertBefore(fragment, this.element.firstChild);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.Bottom =3D Class.create();=0A=
Insertion.Bottom.prototype =3D Object.extend(new =
Abstract.Insertion('beforeEnd'), {=0A=
  initializeRange: function() {=0A=
    this.range.selectNodeContents(this.element);=0A=
    this.range.collapse(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.appendChild(fragment);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.After =3D Class.create();=0A=
Insertion.After.prototype =3D Object.extend(new =
Abstract.Insertion('afterEnd'), {=0A=
  initializeRange: function() {=0A=
    this.range.setStartAfter(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.parentNode.insertBefore(fragment,=0A=
        this.element.nextSibling);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    this.element.className.split(/\s+/).select(function(name) {=0A=
      return name.length > 0;=0A=
    })._each(iterator);=0A=
  },=0A=
=0A=
  set: function(className) {=0A=
    this.element.className =3D className;=0A=
  },=0A=
=0A=
  add: function(classNameToAdd) {=0A=
    if (this.include(classNameToAdd)) return;=0A=
    this.set($A(this).concat(classNameToAdd).join(' '));=0A=
  },=0A=
=0A=
  remove: function(classNameToRemove) {=0A=
    if (!this.include(classNameToRemove)) return;=0A=
    this.set($A(this).without(classNameToRemove).join(' '));=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return $A(this).join(' ');=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
var Selector =3D Class.create();=0A=
Selector.prototype =3D {=0A=
  initialize: function(expression) {=0A=
    this.params =3D {classNames: []};=0A=
    this.expression =3D expression.toString().strip();=0A=
    this.parseExpression();=0A=
    this.compileMatcher();=0A=
  },=0A=
=0A=
  parseExpression: function() {=0A=
    function abort(message) { throw 'Parse error in selector: ' + =
message; }=0A=
=0A=
    if (this.expression =3D=3D '')  abort('empty expression');=0A=
=0A=
    var params =3D this.params, expr =3D this.expression, match, =
modifier, clause, rest;=0A=
    while (match =3D =
expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=3D)(?:"([^"]*)"|([^\]\s]*))=
)?\]$/i)) {=0A=
      params.attributes =3D params.attributes || [];=0A=
      params.attributes.push({name: match[2], operator: match[3], value: =
match[4] || match[5] || ''});=0A=
      expr =3D match[1];=0A=
    }=0A=
=0A=
    if (expr =3D=3D '*') return this.params.wildcard =3D true;=0A=
=0A=
    while (match =3D expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {=0A=
      modifier =3D match[1], clause =3D match[2], rest =3D match[3];=0A=
      switch (modifier) {=0A=
        case '#':       params.id =3D clause; break;=0A=
        case '.':       params.classNames.push(clause); break;=0A=
        case '':=0A=
        case undefined: params.tagName =3D clause.toUpperCase(); break;=0A=
        default:        abort(expr.inspect());=0A=
      }=0A=
      expr =3D rest;=0A=
    }=0A=
=0A=
    if (expr.length > 0) abort(expr.inspect());=0A=
  },=0A=
=0A=
  buildMatchExpression: function() {=0A=
    var params =3D this.params, conditions =3D [], clause;=0A=
=0A=
    if (params.wildcard)=0A=
      conditions.push('true');=0A=
    if (clause =3D params.id)=0A=
      conditions.push('element.readAttribute("id") =3D=3D ' + =
clause.inspect());=0A=
    if (clause =3D params.tagName)=0A=
      conditions.push('element.tagName.toUpperCase() =3D=3D ' + =
clause.inspect());=0A=
    if ((clause =3D params.classNames).length > 0)=0A=
      for (var i =3D 0, length =3D clause.length; i < length; i++)=0A=
        conditions.push('element.hasClassName(' + clause[i].inspect() + =
')');=0A=
    if (clause =3D params.attributes) {=0A=
      clause.each(function(attribute) {=0A=
        var value =3D 'element.readAttribute(' + =
attribute.name.inspect() + ')';=0A=
        var splitValueBy =3D function(delimiter) {=0A=
          return value + ' && ' + value + '.split(' + =
delimiter.inspect() + ')';=0A=
        }=0A=
=0A=
        switch (attribute.operator) {=0A=
          case '=3D':       conditions.push(value + ' =3D=3D ' + =
attribute.value.inspect()); break;=0A=
          case '~=3D':      conditions.push(splitValueBy(' ') + =
'.include(' + attribute.value.inspect() + ')'); break;=0A=
          case '|=3D':      conditions.push(=0A=
                            splitValueBy('-') + '.first().toUpperCase() =
=3D=3D ' + attribute.value.toUpperCase().inspect()=0A=
                          ); break;=0A=
          case '!=3D':      conditions.push(value + ' !=3D ' + =
attribute.value.inspect()); break;=0A=
          case '':=0A=
          case undefined: conditions.push('element.hasAttribute(' + =
attribute.name.inspect() + ')'); break;=0A=
          default:        throw 'Unknown operator ' + attribute.operator =
+ ' in selector';=0A=
        }=0A=
      });=0A=
    }=0A=
=0A=
    return conditions.join(' && ');=0A=
  },=0A=
=0A=
  compileMatcher: function() {=0A=
    this.match =3D new Function('element', 'if (!element.tagName) return =
false; \=0A=
      element =3D $(element); \=0A=
      return ' + this.buildMatchExpression());=0A=
  },=0A=
=0A=
  findElements: function(scope) {=0A=
    var element;=0A=
=0A=
    if (element =3D $(this.params.id))=0A=
      if (this.match(element))=0A=
        if (!scope || Element.childOf(element, scope))=0A=
          return [element];=0A=
=0A=
    scope =3D (scope || =
document).getElementsByTagName(this.params.tagName || '*');=0A=
=0A=
    var results =3D [];=0A=
    for (var i =3D 0, length =3D scope.length; i < length; i++)=0A=
      if (this.match(element =3D scope[i]))=0A=
        results.push(Element.extend(element));=0A=
=0A=
    return results;=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return this.expression;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Selector, {=0A=
  matchElements: function(elements, expression) {=0A=
    var selector =3D new Selector(expression);=0A=
    return =
elements.select(selector.match.bind(selector)).map(Element.extend);=0A=
  },=0A=
=0A=
  findElement: function(elements, expression, index) {=0A=
    if (typeof expression =3D=3D 'number') index =3D expression, =
expression =3D false;=0A=
    return Selector.matchElements(elements, expression || '*')[index || =
0];=0A=
  },=0A=
=0A=
  findChildElements: function(element, expressions) {=0A=
    return expressions.map(function(expression) {=0A=
      return =
expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], =
function(results, expr) {=0A=
        var selector =3D new Selector(expr);=0A=
        return results.inject([], function(elements, result) {=0A=
          return elements.concat(selector.findElements(result || =
element));=0A=
        });=0A=
      });=0A=
    }).flatten();=0A=
  }=0A=
});=0A=
=0A=
function $$() {=0A=
  return Selector.findChildElements(document, $A(arguments));=0A=
}=0A=
var Form =3D {=0A=
  reset: function(form) {=0A=
    $(form).reset();=0A=
    return form;=0A=
  },=0A=
=0A=
  serializeElements: function(elements, getHash) {=0A=
    var data =3D elements.inject({}, function(result, element) {=0A=
      if (!element.disabled && element.name) {=0A=
        var key =3D element.name, value =3D $(element).getValue();=0A=
        if (value !=3D undefined) {=0A=
          if (result[key]) {=0A=
            if (result[key].constructor !=3D Array) 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 getHash ? data : Hash.toQueryString(data);=0A=
  }=0A=
};=0A=
=0A=
Form.Methods =3D {=0A=
  serialize: function(form, getHash) {=0A=
    return Form.serializeElements(Form.getElements(form), getHash);=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().each(function(element) {=0A=
      element.blur();=0A=
      element.disabled =3D 'true';=0A=
    });=0A=
    return form;=0A=
  },=0A=
=0A=
  enable: function(form) {=0A=
    form =3D $(form);=0A=
    form.getElements().each(function(element) {=0A=
      element.disabled =3D '';=0A=
    });=0A=
    return form;=0A=
  },=0A=
=0A=
  findFirstElement: function(form) {=0A=
    return $(form).getElements().find(function(element) {=0A=
      return element.type !=3D 'hidden' && !element.disabled &&=0A=
        ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
    });=0A=
  },=0A=
=0A=
  focusFirstElement: function(form) {=0A=
    form =3D $(form);=0A=
    form.findFirstElement().activate();=0A=
    return form;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Form, Form.Methods);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element =3D {=0A=
  focus: function(element) {=0A=
    $(element).focus();=0A=
    return element;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    $(element).select();=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Form.Element.Methods =3D {=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element.disabled && 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 Hash.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=
  clear: function(element) {=0A=
    $(element).value =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  present: function(element) {=0A=
    return $(element).value !=3D '';=0A=
  },=0A=
=0A=
  activate: function(element) {=0A=
    element =3D $(element);=0A=
    element.focus();=0A=
    if (element.select && ( element.tagName.toLowerCase() !=3D 'input' ||=0A=
      !['button', 'reset', 'submit'].include(element.type) ) )=0A=
      element.select();=0A=
    return element;=0A=
  },=0A=
=0A=
  disable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D true;=0A=
    return element;=0A=
  },=0A=
=0A=
  enable: function(element) {=0A=
    element =3D $(element);=0A=
    element.blur();=0A=
    element.disabled =3D false;=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Form.Element, Form.Element.Methods);=0A=
var Field =3D Form.Element;=0A=
var $F =3D Form.Element.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D {=0A=
  input: function(element) {=0A=
    switch (element.type.toLowerCase()) {=0A=
      case 'checkbox':=0A=
      case 'radio':=0A=
        return Form.Element.Serializers.inputSelector(element);=0A=
      default:=0A=
        return Form.Element.Serializers.textarea(element);=0A=
    }=0A=
  },=0A=
=0A=
  inputSelector: function(element) {=0A=
    return element.checked ? element.value : null;=0A=
  },=0A=
=0A=
  textarea: function(element) {=0A=
    return element.value;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    return this[element.type =3D=3D 'select-one' ?=0A=
      'selectOne' : 'selectMany'](element);=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 function() {}=0A=
Abstract.TimedObserver.prototype =3D {=0A=
  initialize: function(element, frequency, callback) {=0A=
    this.frequency =3D frequency;=0A=
    this.element   =3D $(element);=0A=
    this.callback  =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    var changed =3D ('string' =3D=3D typeof this.lastValue && 'string' =
=3D=3D typeof value=0A=
      ? this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value));=0A=
    if (changed) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Form.Element.Observer =3D Class.create();=0A=
Form.Element.Observer.prototype =3D Object.extend(new =
Abstract.TimedObserver(), {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.Observer =3D Class.create();=0A=
Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D function() {}=0A=
Abstract.EventObserver.prototype =3D {=0A=
  initialize: function(element, callback) {=0A=
    this.element  =3D $(element);=0A=
    this.callback =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
      this.registerFormCallbacks();=0A=
    else=0A=
      this.registerCallback(this.element);=0A=
  },=0A=
=0A=
  onElementEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    if (this.lastValue !=3D value) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  },=0A=
=0A=
  registerFormCallbacks: function() {=0A=
    =
Form.getElements(this.element).each(this.registerCallback.bind(this));=0A=
  },=0A=
=0A=
  registerCallback: function(element) {=0A=
    if (element.type) {=0A=
      switch (element.type.toLowerCase()) {=0A=
        case 'checkbox':=0A=
        case 'radio':=0A=
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
        default:=0A=
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Form.Element.EventObserver =3D Class.create();=0A=
Form.Element.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create();=0A=
Form.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
if (!window.Event) {=0A=
  var Event =3D new Object();=0A=
}=0A=
=0A=
Object.extend(Event, {=0A=
  KEY_BACKSPACE: 8,=0A=
  KEY_TAB:       9,=0A=
  KEY_RETURN:   13,=0A=
  KEY_ESC:      27,=0A=
  KEY_LEFT:     37,=0A=
  KEY_UP:       38,=0A=
  KEY_RIGHT:    39,=0A=
  KEY_DOWN:     40,=0A=
  KEY_DELETE:   46,=0A=
  KEY_HOME:     36,=0A=
  KEY_END:      35,=0A=
  KEY_PAGEUP:   33,=0A=
  KEY_PAGEDOWN: 34,=0A=
=0A=
  element: function(event) {=0A=
    return event.target || event.srcElement;=0A=
  },=0A=
=0A=
  isLeftClick: function(event) {=0A=
    return (((event.which) && (event.which =3D=3D 1)) ||=0A=
            ((event.button) && (event.button =3D=3D 1)));=0A=
  },=0A=
=0A=
  pointerX: function(event) {=0A=
    return event.pageX || (event.clientX +=0A=
      (document.documentElement.scrollLeft || document.body.scrollLeft));=0A=
  },=0A=
=0A=
  pointerY: function(event) {=0A=
    return event.pageY || (event.clientY +=0A=
      (document.documentElement.scrollTop || document.body.scrollTop));=0A=
  },=0A=
=0A=
  stop: function(event) {=0A=
    if (event.preventDefault) {=0A=
      event.preventDefault();=0A=
      event.stopPropagation();=0A=
    } else {=0A=
      event.returnValue =3D false;=0A=
      event.cancelBubble =3D true;=0A=
    }=0A=
  },=0A=
=0A=
  // find the first node with the given tagName, starting from the=0A=
  // node the event was triggered on; traverses the DOM upwards=0A=
  findElement: function(event, tagName) {=0A=
    var element =3D Event.element(event);=0A=
    while (element.parentNode && (!element.tagName ||=0A=
        (element.tagName.toUpperCase() !=3D tagName.toUpperCase())))=0A=
      element =3D element.parentNode;=0A=
    return element;=0A=
  },=0A=
=0A=
  observers: false,=0A=
=0A=
  _observeAndCache: function(element, name, observer, useCapture) {=0A=
    if (!this.observers) this.observers =3D [];=0A=
    if (element.addEventListener) {=0A=
      this.observers.push([element, name, observer, useCapture]);=0A=
      element.addEventListener(name, observer, useCapture);=0A=
    } else if (element.attachEvent) {=0A=
      this.observers.push([element, name, observer, useCapture]);=0A=
      element.attachEvent('on' + name, observer);=0A=
    }=0A=
  },=0A=
=0A=
  unloadCache: function() {=0A=
    if (!Event.observers) return;=0A=
    for (var i =3D 0, length =3D Event.observers.length; i < length; =
i++) {=0A=
      Event.stopObserving.apply(this, Event.observers[i]);=0A=
      Event.observers[i][0] =3D null;=0A=
    }=0A=
    Event.observers =3D false;=0A=
  },=0A=
=0A=
  observe: function(element, name, observer, useCapture) {=0A=
    element =3D $(element);=0A=
    useCapture =3D useCapture || false;=0A=
=0A=
    if (name =3D=3D 'keypress' &&=0A=
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A=
        || element.attachEvent))=0A=
      name =3D 'keydown';=0A=
=0A=
    Event._observeAndCache(element, name, observer, useCapture);=0A=
  },=0A=
=0A=
  stopObserving: function(element, name, observer, useCapture) {=0A=
    element =3D $(element);=0A=
    useCapture =3D useCapture || false;=0A=
=0A=
    if (name =3D=3D 'keypress' &&=0A=
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A=
        || element.detachEvent))=0A=
      name =3D 'keydown';=0A=
=0A=
    if (element.removeEventListener) {=0A=
      element.removeEventListener(name, observer, useCapture);=0A=
    } else if (element.detachEvent) {=0A=
      try {=0A=
        element.detachEvent('on' + name, observer);=0A=
      } catch (e) {}=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
/* prevent memory leaks in IE */=0A=
if (navigator.appVersion.match(/\bMSIE\b/))=0A=
  Event.observe(window, 'unload', Event.unloadCache, false);=0A=
var Position =3D {=0A=
  // set to true if needed, warning: firefox performance problems=0A=
  // NOT neeeded for page scrolling, only if draggable contained in=0A=
  // scrollable elements=0A=
  includeScrollOffsets: false,=0A=
=0A=
  // must be called before calling withinIncludingScrolloffset, every =
time the=0A=
  // page is scrolled=0A=
  prepare: function() {=0A=
    this.deltaX =3D  window.pageXOffset=0A=
                || document.documentElement.scrollLeft=0A=
                || document.body.scrollLeft=0A=
                || 0;=0A=
    this.deltaY =3D  window.pageYOffset=0A=
                || document.documentElement.scrollTop=0A=
                || document.body.scrollTop=0A=
                || 0;=0A=
  },=0A=
=0A=
  realOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.scrollTop  || 0;=0A=
      valueL +=3D element.scrollLeft || 0;=0A=
      element =3D element.parentNode;=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  cumulativeOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  positionedOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
      if (element) {=0A=
        if(element.tagName=3D=3D'BODY') break;=0A=
        var p =3D Element.getStyle(element, 'position');=0A=
        if (p =3D=3D 'relative' || p =3D=3D 'absolute') break;=0A=
      }=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  offsetParent: function(element) {=0A=
    if (element.offsetParent) return element.offsetParent;=0A=
    if (element =3D=3D document.body) return element;=0A=
=0A=
    while ((element =3D element.parentNode) && element !=3D =
document.body)=0A=
      if (Element.getStyle(element, 'position') !=3D 'static')=0A=
        return element;=0A=
=0A=
    return document.body;=0A=
  },=0A=
=0A=
  // caches x/y coordinate pair to use with overlap=0A=
  within: function(element, x, y) {=0A=
    if (this.includeScrollOffsets)=0A=
      return this.withinIncludingScrolloffsets(element, x, y);=0A=
    this.xcomp =3D x;=0A=
    this.ycomp =3D y;=0A=
    this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
    return (y >=3D this.offset[1] &&=0A=
            y <  this.offset[1] + element.offsetHeight &&=0A=
            x >=3D this.offset[0] &&=0A=
            x <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  withinIncludingScrolloffsets: function(element, x, y) {=0A=
    var offsetcache =3D this.realOffset(element);=0A=
=0A=
    this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
    this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
    this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
    return (this.ycomp >=3D this.offset[1] &&=0A=
            this.ycomp <  this.offset[1] + element.offsetHeight &&=0A=
            this.xcomp >=3D this.offset[0] &&=0A=
            this.xcomp <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  // within must be called directly before=0A=
  overlap: function(mode, element) {=0A=
    if (!mode) return 0;=0A=
    if (mode =3D=3D 'vertical')=0A=
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A=
        element.offsetHeight;=0A=
    if (mode =3D=3D 'horizontal')=0A=
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A=
        element.offsetWidth;=0A=
  },=0A=
=0A=
  page: function(forElement) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
=0A=
    var element =3D forElement;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
=0A=
      // Safari fix=0A=
      if (element.offsetParent=3D=3Ddocument.body)=0A=
        if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A=
=0A=
    } while (element =3D element.offsetParent);=0A=
=0A=
    element =3D forElement;=0A=
    do {=0A=
      if (!window.opera || element.tagName=3D=3D'BODY') {=0A=
        valueT -=3D element.scrollTop  || 0;=0A=
        valueL -=3D element.scrollLeft || 0;=0A=
      }=0A=
    } while (element =3D element.parentNode);=0A=
=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  clone: function(source, target) {=0A=
    var options =3D Object.extend({=0A=
      setLeft:    true,=0A=
      setTop:     true,=0A=
      setWidth:   true,=0A=
      setHeight:  true,=0A=
      offsetTop:  0,=0A=
      offsetLeft: 0=0A=
    }, arguments[2] || {})=0A=
=0A=
    // find page position of source=0A=
    source =3D $(source);=0A=
    var p =3D Position.page(source);=0A=
=0A=
    // find coordinate system to use=0A=
    target =3D $(target);=0A=
    var delta =3D [0, 0];=0A=
    var parent =3D null;=0A=
    // delta [0,0] will do fine with position: fixed elements,=0A=
    // position:absolute needs offsetParent deltas=0A=
    if (Element.getStyle(target,'position') =3D=3D 'absolute') {=0A=
      parent =3D Position.offsetParent(target);=0A=
      delta =3D Position.page(parent);=0A=
    }=0A=
=0A=
    // correct by body offsets (fixes Safari)=0A=
    if (parent =3D=3D document.body) {=0A=
      delta[0] -=3D document.body.offsetLeft;=0A=
      delta[1] -=3D document.body.offsetTop;=0A=
    }=0A=
=0A=
    // set position=0A=
    if(options.setLeft)   target.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
    if(options.setTop)    target.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
    if(options.setWidth)  target.style.width =3D source.offsetWidth + =
'px';=0A=
    if(options.setHeight) target.style.height =3D source.offsetHeight + =
'px';=0A=
  },=0A=
=0A=
  absolutize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.style.position =3D=3D 'absolute') return;=0A=
    Position.prepare();=0A=
=0A=
    var offsets =3D Position.positionedOffset(element);=0A=
    var top     =3D offsets[1];=0A=
    var left    =3D offsets[0];=0A=
    var width   =3D element.clientWidth;=0A=
    var height  =3D element.clientHeight;=0A=
=0A=
    element._originalLeft   =3D left - parseFloat(element.style.left  || =
0);=0A=
    element._originalTop    =3D top  - parseFloat(element.style.top || =
0);=0A=
    element._originalWidth  =3D element.style.width;=0A=
    element._originalHeight =3D element.style.height;=0A=
=0A=
    element.style.position =3D 'absolute';=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.width  =3D width + 'px';=0A=
    element.style.height =3D height + 'px';=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.style.position =3D=3D 'relative') return;=0A=
    Position.prepare();=0A=
=0A=
    element.style.position =3D 'relative';=0A=
    var top  =3D parseFloat(element.style.top  || 0) - =
(element._originalTop || 0);=0A=
    var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);=0A=
=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.height =3D element._originalHeight;=0A=
    element.style.width  =3D element._originalWidth;=0A=
  }=0A=
}=0A=
=0A=
// Safari returns margins on body which is incorrect if the child is =
absolutely=0A=
// positioned.  For performance reasons, redefine =
Position.cumulativeOffset for=0A=
// KHTML/WebKit only.=0A=
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A=
  Position.cumulativeOffset =3D function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
=0A=
    return [valueL, valueT];=0A=
  }=0A=
}=0A=
=0A=
Element.addMethods();
------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/jslibs/scriptaculous.js?load=effects

// script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007=0A=
=0A=
// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// =0A=
// Permission is hereby granted, free of charge, to any person obtaining=0A=
// a copy of this software and associated documentation files (the=0A=
// "Software"), to deal in the Software without restriction, including=0A=
// without limitation the rights to use, copy, modify, merge, publish,=0A=
// distribute, sublicense, and/or sell copies of the Software, and to=0A=
// permit persons to whom the Software is furnished to do so, subject to=0A=
// the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be=0A=
// included in all copies or substantial portions of the Software.=0A=
//=0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A=
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A=
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A=
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A=
//=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
var Scriptaculous =3D {=0A=
  Version: '1.7.0',=0A=
  require: function(libraryName) {=0A=
    // inserting via DOM fails in Safari 2.0, so brute force approach=0A=
    document.write('<script type=3D"text/javascript" =
src=3D"'+libraryName+'"></script>');=0A=
  },=0A=
  load: function() {=0A=
    if((typeof Prototype=3D=3D'undefined') || =0A=
       (typeof Element =3D=3D 'undefined') || =0A=
       (typeof Element.Methods=3D=3D'undefined') ||=0A=
       parseFloat(Prototype.Version.split(".")[0] + "." +=0A=
                  Prototype.Version.split(".")[1]) < 1.5)=0A=
       throw("script.aculo.us requires the Prototype JavaScript =
framework >=3D 1.5.0");=0A=
    =0A=
    $A(document.getElementsByTagName("script")).findAll( function(s) {=0A=
      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))=0A=
    }).each( function(s) {=0A=
      var path =3D s.src.replace(/scriptaculous\.js(\?.*)?$/,'');=0A=
      var includes =3D s.src.match(/\?.*load=3D([a-z,]*)/);=0A=
      (includes ? includes[1] : =
'builder,effects,dragdrop,controls,slider').split(',').each(=0A=
       function(include) { Scriptaculous.require(path+include+'.js') });=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
Scriptaculous.load();
------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/jslibs/lightbox.js

// =
-------------------------------------------------------------------------=
----------
//
//	Lightbox v2.02
//	by Lokesh Dhakar - http://www.huddletogether.com
//	3/31/06
//
//	For more information on this script, visit:
//	http://huddletogether.com/projects/lightbox2/
//
//	Licensed under the Creative Commons Attribution 2.5 License - =
http://creativecommons.org/licenses/by/2.5/
//=09
//	Credit also due to those who have helped, inspired, and made their =
code available to the public.
//	Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), =
Thomas Fuchs(mir.aculo.us), and others.
//
//
// =
-------------------------------------------------------------------------=
----------
/*

	Table of Contents
	-----------------
	Configuration
	Global Variables

	Extending Built-in Objects=09
	- Object.extend(Element)
	- Array.prototype.removeDuplicates()
	- Array.prototype.empty()

	Lightbox Class Declaration
	- initialize()
	- start()
	- changeImage()
	- resizeImageContainer()
	- showImage()
	- updateDetails()
	- updateNav()
	- enableKeyboardNav()
	- disableKeyboardNav()
	- keyboardAction()
	- preloadNeighborImages()
	- end()
=09
	Miscellaneous Functions
	- getPageScroll()
	- getPageSize()
	- getKey()
	- listenKey()
	- showSelectBoxes()
	- hideSelectBoxes()
	- pause()
	- initLightbox()
=09
	Function Calls
	- addLoadEvent(initLightbox)
=09
*/
// =
-------------------------------------------------------------------------=
----------

//
//	Configuration
//
var fileLoadingImage =3D "/images/lightbox/loading.gif";	=09
var fileBottomNavCloseImage =3D "/images/lightbox/closelabel.gif";

var resizeSpeed =3D 7;	// controls the speed of the image resizing =
(1=3Dslowest and 10=3Dfastest)

var borderSize =3D 10;	//if you adjust the padding in the CSS, you will =
need to update this variable

// =
-------------------------------------------------------------------------=
----------

//
//	Global Variables
//
var imageArray =3D new Array;
var activeImage;

if(resizeSpeed > 10){ resizeSpeed =3D 10;}
if(resizeSpeed < 1){ resizeSpeed =3D 1;}
resizeDuration =3D (11 - resizeSpeed) * 0.15;

// =
-------------------------------------------------------------------------=
----------

//
//	Additional methods for Element added by SU, Couloir
//	- further additions by Lokesh Dhakar (huddletogether.com)
//
Object.extend(Element, {
	getWidth: function(element) {
	   	element =3D $(element);
	   	return element.offsetWidth;=20
	},
	setWidth: function(element,w) {
	   	element =3D $(element);
    	element.style.width =3D w +"px";
	},
	setHeight: function(element,h) {
   		element =3D $(element);
    	element.style.height =3D h +"px";
	},
	setTop: function(element,t) {
	   	element =3D $(element);
    	element.style.top =3D t +"px";
	},
	setSrc: function(element,src) {
    	element =3D $(element);
    	element.src =3D src;=20
	},
	setHref: function(element,href) {
    	element =3D $(element);
    	element.href =3D href;=20
	},
	setInnerHTML: function(element,content) {
		element =3D $(element);
		element.innerHTML =3D content;
	}
});

// =
-------------------------------------------------------------------------=
----------

//
//	Extending built-in Array object
//	- array.removeDuplicates()
//	- array.empty()
//
Array.prototype.removeDuplicates =3D function () {
	for(i =3D 1; i < this.length; i++){
		if(this[i][0] =3D=3D this[i-1][0]){
			this.splice(i,1);
		}
	}
}

// =
-------------------------------------------------------------------------=
----------

Array.prototype.empty =3D function () {
	for(i =3D 0; i <=3D this.length; i++){
		this.shift();
	}
}

// =
-------------------------------------------------------------------------=
----------

//
//	Lightbox Class Declaration
//	- initialize()
//	- start()
//	- changeImage()
//	- resizeImageContainer()
//	- showImage()
//	- updateDetails()
//	- updateNav()
//	- enableKeyboardNav()
//	- disableKeyboardNav()
//	- keyboardNavAction()
//	- preloadNeighborImages()
//	- end()
//
//	Structuring of code inspired by Scott Upton (http://www.uptonic.com/)
//
var Lightbox =3D Class.create();

Lightbox.prototype =3D {
=09
	// initialize()
	// Constructor runs on completion of the DOM loading. Loops through =
anchor tags looking for=20
	// 'lightbox' references and applies onclick events to appropriate =
links. The 2nd section of
	// the function inserts html at the bottom of the page which is used to =
display the shadow=20
	// overlay and the image container.
	//
	initialize: function() {=09
		if (!document.getElementsByTagName){ return; }
		var anchors =3D document.getElementsByTagName('a');

		// loop through all anchor tags
		for (var i=3D0; i<anchors.length; i++){
			var anchor =3D anchors[i];
		=09
			var relAttribute =3D String(anchor.getAttribute('rel'));
		=09
			// use the string.match() method to catch 'lightbox' references in =
the rel attribute
			if (anchor.getAttribute('href') && =
(relAttribute.toLowerCase().match('lightbox'))){
				anchor.onclick =3D function () {myLightbox.start(this); return =
false;}
			}
		}

		// The rest of this code inserts html at the bottom of the page that =
looks similar to this:
		//
		//	<div id=3D"overlay"></div>
		//	<div id=3D"lightbox">
		//		<div id=3D"outerImageContainer">
		//			<div id=3D"imageContainer">
		//				<img id=3D"lightboxImage">
		//				<div style=3D"" id=3D"hoverNav">
		//					<a href=3D"#" id=3D"prevLink"></a>
		//					<a href=3D"#" id=3D"nextLink"></a>
		//				</div>
		//				<div id=3D"loading">
		//					<a href=3D"#" id=3D"loadingLink">
		//						<img src=3D"/images/lightbox/loading.gif">
		//					</a>
		//				</div>
		//			</div>
		//		</div>
		//		<div id=3D"imageDataContainer">
		//			<div id=3D"imageData">
		//				<div id=3D"imageDetails">
		//					<span id=3D"caption"></span>
		//					<span id=3D"numberDisplay"></span>
		//				</div>
		//				<div id=3D"bottomNav">
		//					<a href=3D"#" id=3D"bottomNavClose">
		//						<img src=3D"/images/lightbox/close.gif">
		//					</a>
		//				</div>
		//			</div>
		//		</div>
		//	</div>


		var objBody =3D document.getElementsByTagName("body").item(0);
	=09
		var objOverlay =3D document.createElement("div");
		objOverlay.setAttribute('id','overlay');
		objOverlay.style.display =3D 'none';
		objOverlay.onclick =3D function() { myLightbox.end(); return false; }
		objBody.appendChild(objOverlay);
	=09
		var objLightbox =3D document.createElement("div");
		objLightbox.setAttribute('id','lightbox');
		objLightbox.style.display =3D 'none';
		objBody.appendChild(objLightbox);
=09
		var objOuterImageContainer =3D document.createElement("div");
		objOuterImageContainer.setAttribute('id','outerImageContainer');
		objLightbox.appendChild(objOuterImageContainer);

		var objImageContainer =3D document.createElement("div");
		objImageContainer.setAttribute('id','imageContainer');
		objOuterImageContainer.appendChild(objImageContainer);
=09
		var objLightboxImage =3D document.createElement("img");
		objLightboxImage.setAttribute('id','lightboxImage');
		objImageContainer.appendChild(objLightboxImage);
=09
		var objHoverNav =3D document.createElement("div");
		objHoverNav.setAttribute('id','hoverNav');
		objImageContainer.appendChild(objHoverNav);
=09
		var objPrevLink =3D document.createElement("a");
		objPrevLink.setAttribute('id','prevLink');
		objPrevLink.setAttribute('href','#');
		objHoverNav.appendChild(objPrevLink);
	=09
		var objNextLink =3D document.createElement("a");
		objNextLink.setAttribute('id','nextLink');
		objNextLink.setAttribute('href','#');
		objHoverNav.appendChild(objNextLink);
=09
		var objLoading =3D document.createElement("div");
		objLoading.setAttribute('id','loading');
		objImageContainer.appendChild(objLoading);
=09
		var objLoadingLink =3D document.createElement("a");
		objLoadingLink.setAttribute('id','loadingLink');
		objLoadingLink.setAttribute('href','#');
		objLoadingLink.onclick =3D function() { myLightbox.end(); return =
false; }
		objLoading.appendChild(objLoadingLink);
=09
		var objLoadingImage =3D document.createElement("img");
		objLoadingImage.setAttribute('src', fileLoadingImage);
		objLoadingLink.appendChild(objLoadingImage);

		var objImageDataContainer =3D document.createElement("div");
		objImageDataContainer.setAttribute('id','imageDataContainer');
		objImageDataContainer.className =3D 'clearfix';
		objLightbox.appendChild(objImageDataContainer);

		var objImageData =3D document.createElement("div");
		objImageData.setAttribute('id','imageData');
		objImageDataContainer.appendChild(objImageData);
=09
		var objImageDetails =3D document.createElement("div");
		objImageDetails.setAttribute('id','imageDetails');
		objImageData.appendChild(objImageDetails);
=09
		var objCaption =3D document.createElement("span");
		objCaption.setAttribute('id','caption');
		objImageDetails.appendChild(objCaption);
=09
		var objNumberDisplay =3D document.createElement("span");
		objNumberDisplay.setAttribute('id','numberDisplay');
		objImageDetails.appendChild(objNumberDisplay);
	=09
		var objBottomNav =3D document.createElement("div");
		objBottomNav.setAttribute('id','bottomNav');
		objImageData.appendChild(objBottomNav);
=09
		var objBottomNavCloseLink =3D document.createElement("a");
		objBottomNavCloseLink.setAttribute('id','bottomNavClose');
		objBottomNavCloseLink.setAttribute('href','#');
		objBottomNavCloseLink.onclick =3D function() { myLightbox.end(); =
return false; }
		objBottomNav.appendChild(objBottomNavCloseLink);
=09
		var objBottomNavCloseImage =3D document.createElement("img");
		objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
		objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
	},
=09
	//
	//	start()
	//	Display overlay and lightbox. If image is part of a set, add =
siblings to imageArray.
	//
	start: function(imageLink) {=09

		hideSelectBoxes();

		// stretch overlay to fill page and fade in
		var arrayPageSize =3D getPageSize();
		Element.setHeight('overlay', arrayPageSize[1]);
		new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.8 });

		imageArray =3D [];
		imageNum =3D 0;	=09

		if (!document.getElementsByTagName){ return; }
		var anchors =3D document.getElementsByTagName('a');

		// if image is NOT part of a set..
		if((imageLink.getAttribute('rel') =3D=3D 'lightbox')){
			// add single image to imageArray
			imageArray.push(new Array(imageLink.getAttribute('href'), =
imageLink.getAttribute('title')));		=09
		} else {
		// if image is part of a set..

			// loop through anchors, find other images in set, and add them to =
imageArray
			for (var i=3D0; i<anchors.length; i++){
				var anchor =3D anchors[i];
				if (anchor.getAttribute('href') && (anchor.getAttribute('rel') =
=3D=3D imageLink.getAttribute('rel'))){
					imageArray.push(new Array(anchor.getAttribute('href'), =
anchor.getAttribute('title')));
				}
			}
			imageArray.removeDuplicates();
			while(imageArray[imageNum][0] !=3D imageLink.getAttribute('href')) { =
imageNum++;}
		}

		// calculate top offset for the lightbox and display=20
		var arrayPageSize =3D getPageSize();
		var arrayPageScroll =3D getPageScroll();
		var lightboxTop =3D arrayPageScroll[1] + (arrayPageSize[3] / 15);

		Element.setTop('lightbox', lightboxTop);
		Element.show('lightbox');
	=09
		this.changeImage(imageNum);
	},

	//
	//	changeImage()
	//	Hide most elements and preload image in preparation for resizing =
image container.
	//
	changeImage: function(imageNum) {=09
	=09
		activeImage =3D imageNum;	// update global var

		// hide elements during transition
		Element.show('loading');
		Element.hide('lightboxImage');
		Element.hide('hoverNav');
		Element.hide('prevLink');
		Element.hide('nextLink');
		Element.hide('imageDataContainer');
		Element.hide('numberDisplay');	=09
	=09
		imgPreloader =3D new Image();
	=09
		// once image is preloaded, resize image container
		imgPreloader.onload=3Dfunction(){
			Element.setSrc('lightboxImage', imageArray[activeImage][0]);
			myLightbox.resizeImageContainer(imgPreloader.width, =
imgPreloader.height);
		}
		imgPreloader.src =3D imageArray[activeImage][0];
	},

	//
	//	resizeImageContainer()
	//
	resizeImageContainer: function( imgWidth, imgHeight) {

		// get current height and width
		this.wCur =3D Element.getWidth('outerImageContainer');
		this.hCur =3D Element.getHeight('outerImageContainer');

		// scalars based on change from old to new
		this.xScale =3D ((imgWidth  + (borderSize * 2)) / this.wCur) * 100;
		this.yScale =3D ((imgHeight  + (borderSize * 2)) / this.hCur) * 100;

		// calculate size difference between new and old image, and resize if =
necessary
		wDiff =3D (this.wCur - borderSize * 2) - imgWidth;
		hDiff =3D (this.hCur - borderSize * 2) - imgHeight;

		if(!( hDiff =3D=3D 0)){ new Effect.Scale('outerImageContainer', =
this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); =
}
		if(!( wDiff =3D=3D 0)){ new Effect.Scale('outerImageContainer', =
this.xScale, {scaleY: false, delay: resizeDuration, duration: =
resizeDuration}); }

		// if new and old image are same size and no scaling transition is =
necessary,=20
		// do a quick pause to prevent image flicker.
		if((hDiff =3D=3D 0) && (wDiff =3D=3D 0)){
			if (navigator.appVersion.indexOf("MSIE")!=3D-1){ pause(250); } else { =
pause(100);}=20
		}

		Element.setHeight('prevLink', imgHeight);
		Element.setHeight('nextLink', imgHeight);
		Element.setWidth( 'imageDataContainer', imgWidth + (borderSize * 2));

		this.showImage();
	},
=09
	//
	//	showImage()
	//	Display image and begin preloading neighbors.
	//
	showImage: function(){
		Element.hide('loading');
		new Effect.Appear('lightboxImage', { duration: 0.5, queue: 'end', =
afterFinish: function(){	myLightbox.updateDetails(); } });
		this.preloadNeighborImages();
	},

	//
	//	updateDetails()
	//	Display caption, image number, and bottom nav.
	//
	updateDetails: function() {
=09
		Element.show('caption');
		Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
	=09
		// if image is part of set display 'Image x of x'=20
		if(imageArray.length > 1){
			Element.show('numberDisplay');
			Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + =
1) + " of " + imageArray.length);
		}

		new Effect.Parallel(
			[ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: =
resizeDuration + 0.25, from: 0.0, to: 1.0 }),=20
			  new Effect.Appear('imageDataContainer', { sync: true, duration: 1.0 =
}) ],=20
			{ duration: 0.65, afterFinish: function() { myLightbox.updateNav();} =
}=20
		);
	},

	//
	//	updateNav()
	//	Display appropriate previous and next hover navigation.
	//
	updateNav: function() {

		Element.show('hoverNav');			=09

		// if not first image in set, display prev image button
		if(activeImage !=3D 0){
			Element.show('prevLink');
			document.getElementById('prevLink').onclick =3D function() {
				myLightbox.changeImage(activeImage - 1); return false;
			}
		}

		// if not last image in set, display next image button
		if(activeImage !=3D (imageArray.length - 1)){
			Element.show('nextLink');
			document.getElementById('nextLink').onclick =3D function() {
				myLightbox.changeImage(activeImage + 1); return false;
			}
		}
	=09
		this.enableKeyboardNav();
	},

	//
	//	enableKeyboardNav()
	//
	enableKeyboardNav: function() {
		document.onkeydown =3D this.keyboardAction;=20
	},

	//
	//	disableKeyboardNav()
	//
	disableKeyboardNav: function() {
		document.onkeydown =3D '';
	},

	//
	//	keyboardAction()
	//
	keyboardAction: function(e) {
		if (e =3D=3D null) { // ie
			keycode =3D event.keyCode;
		} else { // mozilla
			keycode =3D e.which;
		}

		key =3D String.fromCharCode(keycode).toLowerCase();
	=09
		if((key =3D=3D 'x') || (key =3D=3D 'o') || (key =3D=3D 'c')){	// close =
lightbox
			myLightbox.end();
		} else if(key =3D=3D 'p'){	// display previous image
			if(activeImage !=3D 0){
				myLightbox.disableKeyboardNav();
				myLightbox.changeImage(activeImage - 1);
			}
		} else if(key =3D=3D 'n'){	// display next image
			if(activeImage !=3D (imageArray.length - 1)){
				myLightbox.disableKeyboardNav();
				myLightbox.changeImage(activeImage + 1);
			}
		}


	},

	//
	//	preloadNeighborImages()
	//	Preload previous and next images.
	//
	preloadNeighborImages: function(){

		if((imageArray.length - 1) > activeImage){
			preloadNextImage =3D new Image();
			preloadNextImage.src =3D imageArray[activeImage + 1][0];
		}
		if(activeImage > 0){
			preloadPrevImage =3D new Image();
			preloadPrevImage.src =3D imageArray[activeImage - 1][0];
		}
=09
	},

	//
	//	end()
	//
	end: function() {
		this.disableKeyboardNav();
		Element.hide('lightbox');
		new Effect.Fade('overlay', { duration: 0.2});
		showSelectBoxes();
	}
}

// =
-------------------------------------------------------------------------=
----------

//
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
//
function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll =3D self.pageYOffset;
	} else if (document.documentElement && =
document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll =3D document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll =3D document.body.scrollTop;
	}

	arrayPageScroll =3D new Array('',yScroll)=20
	return arrayPageScroll;
}

// =
-------------------------------------------------------------------------=
----------

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
=09
	var xScroll, yScroll;
=09
	if (window.innerHeight && window.scrollMaxY) {=09
		xScroll =3D document.body.scrollWidth;
		yScroll =3D window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // =
all but Explorer Mac
		xScroll =3D document.body.scrollWidth;
		yScroll =3D document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, =
Mozilla and Safari
		xScroll =3D document.body.offsetWidth;
		yScroll =3D document.body.offsetHeight;
	}
=09
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth =3D self.innerWidth;
		windowHeight =3D self.innerHeight;
	} else if (document.documentElement && =
document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth =3D document.documentElement.clientWidth;
		windowHeight =3D document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth =3D document.body.clientWidth;
		windowHeight =3D document.body.clientHeight;
	}=09
=09
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight =3D windowHeight;
	} else {=20
		pageHeight =3D yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){=09
		pageWidth =3D windowWidth;
	} else {
		pageWidth =3D xScroll;
	}


	arrayPageSize =3D new =
Array(pageWidth,pageHeight,windowWidth,windowHeight)=20
	return arrayPageSize;
}

// =
-------------------------------------------------------------------------=
----------

//
// getKey(key)
// Gets keycode. If 'x' is pressed then it hides the lightbox.
//
function getKey(e){
	if (e =3D=3D null) { // ie
		keycode =3D event.keyCode;
	} else { // mozilla
		keycode =3D e.which;
	}
	key =3D String.fromCharCode(keycode).toLowerCase();
=09
	if(key =3D=3D 'x'){
	}
}

// =
-------------------------------------------------------------------------=
----------

//
// listenKey()
//
function listenKey () {	document.onkeypress =3D getKey; }
=09
// ---------------------------------------------------

function showSelectBoxes(){
	selects =3D document.getElementsByTagName("select");
	for (i =3D 0; i !=3D selects.length; i++) {
		selects[i].style.visibility =3D "visible";
	}
}

// ---------------------------------------------------

function hideSelectBoxes(){
	selects =3D document.getElementsByTagName("select");
	for (i =3D 0; i !=3D selects.length; i++) {
		selects[i].style.visibility =3D "hidden";
	}
}

// ---------------------------------------------------

//
// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
//
function pause(numberMillis) {
	var now =3D new Date();
	var exitTime =3D now.getTime() + numberMillis;
	while (true) {
		now =3D new Date();
		if (now.getTime() > exitTime)
			return;
	}
}

// ---------------------------------------------------



function initLightbox() { myLightbox =3D new Lightbox(); }
Event.observe(window, 'load', initLightbox, false);
------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.beyond3d.com/jslibs/pagenav.js

// JavaScript Document
function jumpMenu(targ, selObj, restore){=20
  =
eval(targ+".location=3D'"+selObj.options[selObj.selectedIndex].value+"'")=
;
  if (restore) selObj.selectedIndex=3D0;
}
------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://hexusads.fluent.ltd.uk/adx.js

function phpads_deliverActiveX(content)=0A=
{=0A=
	document.write(content);	=0A=
}
------=_NextPart_000_0088_01C77785.D3492390
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 2005 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"search";	_uOkw[8]=3D"q";=0A=
_uOsr[9]=3D"netscape";	_uOkw[9]=3D"s";=0A=
_uOsr[10]=3D"cnn";	_uOkw[10]=3D"query";=0A=
_uOsr[11]=3D"looksmart";	_uOkw[11]=3D"qt";=0A=
_uOsr[12]=3D"about";	_uOkw[12]=3D"terms";=0A=
_uOsr[13]=3D"mamma";	_uOkw[13]=3D"query";=0A=
_uOsr[14]=3D"alltheweb";	_uOkw[14]=3D"q";=0A=
_uOsr[15]=3D"gigablast";	_uOkw[15]=3D"q";=0A=
_uOsr[16]=3D"voila";	_uOkw[16]=3D"kw";=0A=
_uOsr[17]=3D"virgilio";	_uOkw[17]=3D"qs";=0A=
_uOsr[18]=3D"live";	_uOkw[18]=3D"q";=0A=
_uOsr[19]=3D"baidu";	_uOkw[19]=3D"wd";=0A=
_uOsr[20]=3D"alice";	_uOkw[20]=3D"qs";=0A=
_uOsr[21]=3D"seznam";	_uOkw[21]=3D"w";=0A=
_uOsr[22]=3D"yandex";	_uOkw[22]=3D"text";=0A=
_uOsr[23]=3D"najdi";	_uOkw[23]=3D"q";=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";=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;=0A=
 var nx=3D" expires=3DSun, 18 Jan 2038 00:00:00 GMT;";=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+v)*1)+(_udh*1))) =
{_ubl=3D1;a=3D"-";b=3D"-";c=3D"-";xx=3D"-";z=3D"-";v=3D"-";}=0A=
   if (a!=3D"-" && b!=3D"-" && c!=3D"-") f=3D1;=0A=
   else if(a!=3D"-") f=3D2;=0A=
  }=0A=
 }=0A=
 if(f=3D=3D1) {=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+b+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+c+"; path=3D"+_utcp+";"+_udo;=0A=
 } else if (f=3D=3D2) {=0A=
  a=3D_uFixA(s,"&",_ust);=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A=
  _ufns=3D1;=0A=
 } else if (a>=3D0 && b>=3D0 && c>=3D0) {=0A=
  _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
 } else {=0A=
  if (a>=3D0) a=3D_uFixA(_ubd.cookie,";",_ust);=0A=
  else a=3D_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1";=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A=
  _ufns=3D1;=0A=
 }=0A=
 if (_ulink && xx && xx!=3D"" && xx!=3D"-") {=0A=
   xx=3D_uUES(xx);=0A=
   if (xx.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmx=3D"+xx+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
 }=0A=
 if (_ulink && v && v!=3D"" && v!=3D"-") {=0A=
  v=3D_uUES(v);=0A=
  if (v.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmv=3D"+v+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
 }=0A=
 _uInfo(page);=0A=
 _ufns=3D0;=0A=
 _ufno=3D0;=0A=
 _uff=3D1;=0A=
}=0A=
function _uInfo(page) {=0A=
 var p,s=3D"",dm=3D"",pg=3D_udl.pathname+_udl.search;=0A=
 if (page && page!=3D"") pg=3D_uES(page,1);=0A=
 _ur=3D_ubd.referrer;=0A=
 if (!_ur || _ur=3D=3D"") { _ur=3D"-"; }=0A=
 else {=0A=
  dm=3D_ubd.domain;=0A=
  if(_utcp && _utcp!=3D"/") dm+=3D_utcp;=0A=
  p=3D_ur.indexOf(dm);=0A=
  if ((p>=3D0) && (p<=3D8)) { _ur=3D"0"; }=0A=
  if (_ur.indexOf("[")=3D=3D0 && =
_ur.lastIndexOf("]")=3D=3D(_ur.length-1)) { _ur=3D"-"; }=0A=
 }=0A=
 s+=3D"&utmn=3D"+_uu;=0A=
 if (_ufsc) s+=3D_uBInfo();=0A=
 if (_uctm) s+=3D_uCInfo();=0A=
 if (_utitle && _ubd.title && _ubd.title!=3D"") =
s+=3D"&utmdt=3D"+_uES(_ubd.title);=0A=
 if (_udl.hostname && _udl.hostname!=3D"") =
s+=3D"&utmhn=3D"+_uES(_udl.hostname);=0A=
 s+=3D"&utmr=3D"+_ur;=0A=
 s+=3D"&utmp=3D"+pg;=0A=
 if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
  var i=3Dnew Image(1,1);=0A=
  i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
  i.onload=3Dfunction() {_uVoid();}=0A=
 }=0A=
 if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
  var i2=3Dnew Image(1,1);=0A=
  =
i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+=
_uGCS();=0A=
  i2.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
 return;=0A=
}=0A=
function _uVoid() { return; }=0A=
function _uCInfo() {=0A=
 if (!_ucto || _ucto=3D=3D"") { _ucto=3D"15768000"; }=0A=
 if (!_uVG()) return;=0A=
 var =
c=3D"",t=3D"-",t2=3D"-",t3=3D"-",o=3D0,cs=3D0,cn=3D0,i=3D0,z=3D"-",s=3D""=
;=0A=
 if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A=
 s+=3D_udl.search;=0A=
 var x=3Dnew Date(_udt.getTime()+(_ucto*1000));=0A=
 var dc=3D_ubd.cookie;=0A=
 x=3D" expires=3D"+x.toGMTString()+";";=0A=
 if (_ulink && !_ubl) {=0A=
  z=3D_uUES(_uGC(s,"__utmz=3D","&"));=0A=
  if (z!=3D"-" && z.indexOf(";")=3D=3D-1) { =
_ubd.cookie=3D"__utmz=3D"+z+"; path=3D"+_utcp+";"+x+_udo; return ""; }=0A=
 }=0A=
 z=3Ddc.indexOf("__utmz=3D"+_udh);=0A=
 if (z>-1) { z=3D_uGC(dc,"__utmz=3D"+_udh,";"); }=0A=
 else { z=3D"-"; }=0A=
 t=3D_uGC(s,_ucid+"=3D","&");=0A=
 t2=3D_uGC(s,_ucsr+"=3D","&");=0A=
 t3=3D_uGC(s,"gclid=3D","&");=0A=
 if ((t!=3D"-" && t!=3D"") || (t2!=3D"-" && t2!=3D"") || (t3!=3D"-" && =
t3!=3D"")) {=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"utmcid=3D"+_uEC(t);=0A=
  if (t2!=3D"-" && t2!=3D"") { if (c !=3D "") c+=3D"|"; =
c+=3D"utmcsr=3D"+_uEC(t2); }=0A=
  if (t3!=3D"-" && t3!=3D"") { if (c !=3D "") c+=3D"|"; =
c+=3D"utmgclid=3D"+_uEC(t3); }=0A=
  t=3D_uGC(s,_uccn+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmccn=3D"+_uEC(t);=0A=
  else c+=3D"|utmccn=3D(not+set)";=0A=
  t=3D_uGC(s,_ucmd+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmcmd=3D"+_uEC(t);=0A=
  else  c+=3D"|utmcmd=3D(not+set)";=0A=
  t=3D_uGC(s,_uctr+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmctr=3D"+_uEC(t);=0A=
  else { t=3D_uOrg(1); if (t!=3D"-" && t!=3D"") =
c+=3D"|utmctr=3D"+_uEC(t); }=0A=
  t=3D_uGC(s,_ucct+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmcct=3D"+_uEC(t);=0A=
  t=3D_uGC(s,_ucno+"=3D","&");=0A=
  if (t=3D=3D"1") o=3D1;=0A=
  if (z!=3D"-" && o=3D=3D1) return "";=0A=
 }=0A=
 if (c=3D=3D"-" || c=3D=3D"") { c=3D_uOrg(); if (z!=3D"-" && =
_ufno=3D=3D1)  return ""; }=0A=
 if (c=3D=3D"-" || c=3D=3D"") { if (_ufns=3D=3D1)  c=3D_uRef(); if =
(z!=3D"-" && _ufno=3D=3D1)  return ""; }=0A=
 if (c=3D=3D"-" || c=3D=3D"") {=0A=
  if (z=3D=3D"-" && _ufns=3D=3D1) { =
c=3D"utmccn=3D(direct)|utmcsr=3D(direct)|utmcmd=3D(none)"; }=0A=
  if (c=3D=3D"-" || c=3D=3D"") return "";=0A=
 }=0A=
 if (z!=3D"-") {=0A=
  i=3Dz.indexOf(".");=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  t=3Dz.substring(i+1,z.length);=0A=
  if (t.toLowerCase()=3D=3Dc.toLowerCase()) cs=3D1;=0A=
  t=3Dz.substring(0,i);=0A=
  if ((i=3Dt.lastIndexOf(".")) > -1) {=0A=
   t=3Dt.substring(i+1,t.length);=0A=
   cn=3D(t*1);=0A=
  }=0A=
 }=0A=
 if (cs=3D=3D0 || _ufns=3D=3D1) {=0A=
  t=3D_uGC(dc,"__utma=3D"+_udh,";");=0A=
  if ((i=3Dt.lastIndexOf(".")) > 9) {=0A=
   _uns=3Dt.substring(i+1,t.length);=0A=
   _uns=3D(_uns*1);=0A=
  }=0A=
  cn++;=0A=
  if (_uns=3D=3D0) _uns=3D1;=0A=
  _ubd.cookie=3D"__utmz=3D"+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; =
path=3D"+_utcp+"; "+x+_udo;=0A=
 }=0A=
 if (cs=3D=3D0 || _ufns=3D=3D1) return "&utmcn=3D1";=0A=
 else return "&utmcr=3D1";=0A=
}=0A=
function _uRef() {=0A=
 if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A=
 var i=3D0,h,k,n;=0A=
 if ((i=3D_ur.indexOf("://"))<0) return "";=0A=
 h=3D_ur.substring(i+3,_ur.length);=0A=
 if (h.indexOf("/") > -1) {=0A=
  k=3Dh.substring(h.indexOf("/"),h.length);=0A=
  if (k.indexOf("?") > -1) k=3Dk.substring(0,k.indexOf("?"));=0A=
  h=3Dh.substring(0,h.indexOf("/"));=0A=
 }=0A=
 h=3Dh.toLowerCase();=0A=
 n=3Dh;=0A=
 if ((i=3Dn.indexOf(":")) > -1) n=3Dn.substring(0,i);=0A=
 for (var ii=3D0;ii<_uRno.length;ii++) {=0A=
  if ((i=3Dn.indexOf(_uRno[ii].toLowerCase())) > -1 && =
n.length=3D=3D(i+_uRno[ii].length)) { _ufno=3D1; break; }=0A=
 }=0A=
 if (h.indexOf("www.")=3D=3D0) h=3Dh.substring(4,h.length);=0A=
 return =
"utmccn=3D(referral)|utmcsr=3D"+_uEC(h)+"|"+"utmcct=3D"+_uEC(k)+"|utmcmd=3D=
referral";=0A=
}=0A=
function _uOrg(t) {=0A=
 if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A=
 var i=3D0,h,k;=0A=
 if ((i=3D_ur.indexOf("://")) < 0) return "";=0A=
 h=3D_ur.substring(i+3,_ur.length);=0A=
 if (h.indexOf("/") > -1) {=0A=
  h=3Dh.substring(0,h.indexOf("/"));=0A=
 }=0A=
 for (var ii=3D0;ii<_uOsr.length;ii++) {=0A=
  if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) {=0A=
   if ((i=3D_ur.indexOf("?"+_uOkw[ii]+"=3D")) > -1 || =
(i=3D_ur.indexOf("&"+_uOkw[ii]+"=3D")) > -1) {=0A=
    k=3D_ur.substring(i+_uOkw[ii].length+2,_ur.length);=0A=
    if ((i=3Dk.indexOf("&")) > -1) k=3Dk.substring(0,i);=0A=
    for (var yy=3D0;yy<_uOno.length;yy++) {=0A=
     if (_uOno[yy].toLowerCase()=3D=3Dk.toLowerCase()) { _ufno=3D1; =
break; }=0A=
    }=0A=
    if (t) return _uEC(k);=0A=
    else return =
"utmccn=3D(organic)|utmcsr=3D"+_uEC(_uOsr[ii])+"|"+"utmctr=3D"+_uEC(k)+"|=
utmcmd=3Dorganic";=0A=
   }=0A=
  }=0A=
 }=0A=
 return "";=0A=
}=0A=
function _uBInfo() {=0A=
 var sr=3D"-",sc=3D"-",ul=3D"-",fl=3D"-",cs=3D"-",je=3D1;=0A=
 var n=3Dnavigator;=0A=
 if (self.screen) {=0A=
  sr=3Dscreen.width+"x"+screen.height;=0A=
  sc=3Dscreen.colorDepth+"-bit";=0A=
 } else if (self.java) {=0A=
  var j=3Djava.awt.Toolkit.getDefaultToolkit();=0A=
  var s=3Dj.getScreenSize();=0A=
  sr=3Ds.width+"x"+s.height;=0A=
 }=0A=
 if (n.language) { ul=3Dn.language.toLowerCase(); }=0A=
 else if (n.browserLanguage) { ul=3Dn.browserLanguage.toLowerCase(); }=0A=
 je=3Dn.javaEnabled()?1:0;=0A=
 if (_uflash) fl=3D_uFlash();=0A=
 if (_ubd.characterSet) cs=3D_uES(_ubd.characterSet);=0A=
 else if (_ubd.charset) cs=3D_uES(_ubd.charset);=0A=
 return =
"&utmcs=3D"+cs+"&utmsr=3D"+sr+"&utmsc=3D"+sc+"&utmul=3D"+ul+"&utmje=3D"+j=
e+"&utmfl=3D"+fl;=0A=
}=0A=
function __utmSetTrans() {=0A=
 var e;=0A=
 if (_ubd.getElementById) e=3D_ubd.getElementById("utmtrans");=0A=
 else if (_ubd.utmform && _ubd.utmform.utmtrans) =
e=3D_ubd.utmform.utmtrans;=0A=
 if (!e) return;=0A=
 var l=3De.value.split("UTM:");=0A=
 var i,i2,c;=0A=
 if (_userv=3D=3D0 || _userv=3D=3D2) i=3Dnew Array();=0A=
 if (_userv=3D=3D1 || _userv=3D=3D2) { i2=3Dnew Array(); c=3D_uGCS(); }=0A=
=0A=
 for (var ii=3D0;ii<l.length;ii++) {=0A=
  l[ii]=3D_uTrim(l[ii]);=0A=
  if (l[ii].charAt(0)!=3D'T' && l[ii].charAt(0)!=3D'I') continue;=0A=
  var r=3DMath.round(Math.random()*2147483647);=0A=
  if (!_utsp || _utsp=3D=3D"") _utsp=3D"|";=0A=
  var f=3Dl[ii].split(_utsp),s=3D"";=0A=
  if (f[0].charAt(0)=3D=3D'T') {=0A=
   s=3D"&utmt=3Dtran"+"&utmn=3D"+r;=0A=
   f[1]=3D_uTrim(f[1]); if(f[1]&&f[1]!=3D"") =
s+=3D"&utmtid=3D"+_uES(f[1]);=0A=
   f[2]=3D_uTrim(f[2]); if(f[2]&&f[2]!=3D"") =
s+=3D"&utmtst=3D"+_uES(f[2]);=0A=
   f[3]=3D_uTrim(f[3]); if(f[3]&&f[3]!=3D"") =
s+=3D"&utmtto=3D"+_uES(f[3]);=0A=
   f[4]=3D_uTrim(f[4]); if(f[4]&&f[4]!=3D"") =
s+=3D"&utmttx=3D"+_uES(f[4]);=0A=
   f[5]=3D_uTrim(f[5]); if(f[5]&&f[5]!=3D"") =
s+=3D"&utmtsp=3D"+_uES(f[5]);=0A=
   f[6]=3D_uTrim(f[6]); if(f[6]&&f[6]!=3D"") =
s+=3D"&utmtci=3D"+_uES(f[6]);=0A=
   f[7]=3D_uTrim(f[7]); if(f[7]&&f[7]!=3D"") =
s+=3D"&utmtrg=3D"+_uES(f[7]);=0A=
   f[8]=3D_uTrim(f[8]); if(f[8]&&f[8]!=3D"") =
s+=3D"&utmtco=3D"+_uES(f[8]);=0A=
  } else {=0A=
   s=3D"&utmt=3Ditem"+"&utmn=3D"+r;=0A=
   f[1]=3D_uTrim(f[1]); if(f[1]&&f[1]!=3D"") =
s+=3D"&utmtid=3D"+_uES(f[1]);=0A=
   f[2]=3D_uTrim(f[2]); if(f[2]&&f[2]!=3D"") =
s+=3D"&utmipc=3D"+_uES(f[2]);=0A=
   f[3]=3D_uTrim(f[3]); if(f[3]&&f[3]!=3D"") =
s+=3D"&utmipn=3D"+_uES(f[3]);=0A=
   f[4]=3D_uTrim(f[4]); if(f[4]&&f[4]!=3D"") =
s+=3D"&utmiva=3D"+_uES(f[4]);=0A=
   f[5]=3D_uTrim(f[5]); if(f[5]&&f[5]!=3D"") =
s+=3D"&utmipr=3D"+_uES(f[5]);=0A=
   f[6]=3D_uTrim(f[6]); if(f[6]&&f[6]!=3D"") =
s+=3D"&utmiqt=3D"+_uES(f[6]);=0A=
  }=0A=
  if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
   i[ii]=3Dnew Image(1,1);=0A=
   i[ii].src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
   i[ii].onload=3Dfunction() { _uVoid(); }=0A=
  }=0A=
  if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
   i2[ii]=3Dnew Image(1,1);=0A=
   =
i2[ii].src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D=
"+c;=0A=
   i2[ii].onload=3Dfunction() { _uVoid(); }=0A=
  }=0A=
 }=0A=
 return;=0A=
}=0A=
function _uFlash() {=0A=
 var f=3D"-",n=3Dnavigator;=0A=
 if (n.plugins && n.plugins.length) {=0A=
  for (var ii=3D0;ii<n.plugins.length;ii++) {=0A=
   if (n.plugins[ii].name.indexOf('Shockwave Flash')!=3D-1) {=0A=
    f=3Dn.plugins[ii].description.split('Shockwave Flash ')[1];=0A=
    break;=0A=
   }=0A=
  }=0A=
 } else if (window.ActiveXObject) {=0A=
  for (var ii=3D10;ii>=3D2;ii--) {=0A=
   try {=0A=
    var fl=3Deval("new =
ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");=0A=
    if (fl) { f=3Dii + '.0'; break; }=0A=
   }=0A=
   catch(e) {}=0A=
  }=0A=
 }=0A=
 return f;=0A=
}=0A=
function __utmLinker(l,h) {=0A=
 if (!_ulink) return;=0A=
 var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A=
 var dc=3D_ubd.cookie;=0A=
 if (!l || l=3D=3D"") return;=0A=
 var iq =3D l.indexOf("?"); =0A=
 var ih =3D l.indexOf("#"); =0A=
 if (dc) {=0A=
  a=3D_uES(_uGC(dc,"__utma=3D"+_udh,";"));=0A=
  b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A=
  c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A=
  x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A=
  z=3D_uES(_uGC(dc,"__utmz=3D"+_udh,";"));=0A=
  v=3D_uES(_uGC(dc,"__utmv=3D"+_udh,";"));=0A=
  k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A=
  =
p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D=
"+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A=
 }=0A=
 if (p) {=0A=
  if (h && ih>-1) return;=0A=
  if (h) { _udl.href=3Dl+"#"+p; }=0A=
  else {=0A=
   if (iq=3D=3D-1 && ih=3D=3D-1) _udl.href=3Dl+"?"+p;=0A=
   else if (ih=3D=3D-1) _udl.href=3Dl+"&"+p;=0A=
   else if (iq=3D=3D-1) =
_udl.href=3Dl.substring(0,ih-1)+"?"+p+l.substring(ih);=0A=
   else _udl.href=3Dl.substring(0,ih-1)+"&"+p+l.substring(ih);=0A=
  }=0A=
 } else { _udl.href=3Dl; }=0A=
}=0A=
function __utmLinkPost(f,h) {=0A=
 if (!_ulink) return;=0A=
 var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A=
 var dc=3D_ubd.cookie;=0A=
 if (!f || !f.action) return;=0A=
 var iq =3D f.action.indexOf("?"); =0A=
 var ih =3D f.action.indexOf("#"); =0A=
 if (dc) {=0A=
  a=3D_uES(_uGC(dc,"__utma=3D"+_udh,";"));=0A=
  b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A=
  c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A=
  x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A=
  z=3D_uES(_uGC(dc,"__utmz=3D"+_udh,";"));=0A=
  v=3D_uES(_uGC(dc,"__utmv=3D"+_udh,";"));=0A=
  k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A=
  =
p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D=
"+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A=
 }=0A=
 if (p) {=0A=
  if (h && ih>-1) return;=0A=
  if (h) { f.action+=3D"#"+p; }=0A=
  else {=0A=
   if (iq=3D=3D-1 && ih=3D=3D-1) f.action+=3D"?"+p;=0A=
   else if (ih=3D=3D-1) f.action+=3D"&"+p;=0A=
   else if (iq=3D=3D-1) =
f.action=3Df.action.substring(0,ih-1)+"?"+p+f.action.substring(ih);=0A=
   else =
f.action=3Df.action.substring(0,ih-1)+"&"+p+f.action.substring(ih);=0A=
  }=0A=
 }=0A=
 return;=0A=
}=0A=
function __utmSetVar(v) {=0A=
 if (!v || v=3D=3D"") return;=0A=
 if (!_udo || _udo =3D=3D "") {=0A=
  _udh=3D_uDomain();=0A=
  if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A=
 }=0A=
 if (!_uVG()) return;=0A=
 var r=3DMath.round(Math.random() * 2147483647);=0A=
 _ubd.cookie=3D"__utmv=3D"+_udh+"."+_uES(v)+"; path=3D"+_utcp+"; =
expires=3DSun, 18 Jan 2038 00:00:00 GMT;"+_udo;=0A=
 var s=3D"&utmt=3Dvar&utmn=3D"+r;=0A=
 if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
  var i=3Dnew Image(1,1);=0A=
  i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
  i.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
 if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
  var i2=3Dnew Image(1,1);=0A=
  =
i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+=
_uGCS();=0A=
  i2.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
}=0A=
function _uGCS() {=0A=
 var t,c=3D"",dc=3D_ubd.cookie;=0A=
 if ((t=3D_uGC(dc,"__utma=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utma=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmb=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmb=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmc=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmc=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmx=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmx=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmz=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmz=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmv=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmv=3D"+t+";");=0A=
 if (c.charAt(c.length-1)=3D=3D"+") c=3Dc.substring(0,c.length-1);=0A=
 return c;=0A=
}=0A=
function _uGC(l,n,s) {=0A=
 if (!l || l=3D=3D"" || !n || n=3D=3D"" || !s || s=3D=3D"") return "-";=0A=
 var i,i2,i3,c=3D"-";=0A=
 i=3Dl.indexOf(n);=0A=
 i3=3Dn.indexOf("=3D")+1;=0A=
 if (i > -1) {=0A=
  i2=3Dl.indexOf(s,i); if (i2 < 0) { i2=3Dl.length; }=0A=
  c=3Dl.substring((i+i3),i2);=0A=
 }=0A=
 return c;=0A=
}=0A=
function _uDomain() {=0A=
 if (!_udn || _udn=3D=3D"" || _udn=3D=3D"none") { _udn=3D""; return 1; }=0A=
 if (_udn=3D=3D"auto") {=0A=
  var d=3D_ubd.domain;=0A=
  if (d.substring(0,4)=3D=3D"www.") {=0A=
   d=3Dd.substring(4,d.length);=0A=
  }=0A=
  _udn=3Dd;=0A=
 }=0A=
 if (_uhash=3D=3D"off") return 1;=0A=
 return _uHash(_udn);=0A=
}=0A=
function _uHash(d) {=0A=
 if (!d || d=3D=3D"") return 1;=0A=
 var h=3D0,g=3D0;=0A=
 for (var i=3Dd.length-1;i>=3D0;i--) {=0A=
  var c=3DparseInt(d.charCodeAt(i));=0A=
  h=3D((h << 6) & 0xfffffff) + c + (c << 14);=0A=
  if ((g=3Dh & 0xfe00000)!=3D0) h=3D(h ^ (g >> 21));=0A=
 }=0A=
 return h;=0A=
}=0A=
function _uFixA(c,s,t) {=0A=
 if (!c || c=3D=3D"" || !s || s=3D=3D"" || !t || t=3D=3D"") return "-";=0A=
 var a=3D_uGC(c,"__utma=3D"+_udh,s);=0A=
 var lt=3D0,i=3D0;=0A=
 if ((i=3Da.lastIndexOf(".")) > 9) {=0A=
  _uns=3Da.substring(i+1,a.length);=0A=
  _uns=3D(_uns*1)+1;=0A=
  a=3Da.substring(0,i);=0A=
  if ((i=3Da.lastIndexOf(".")) > 7) {=0A=
   lt=3Da.substring(i+1,a.length);=0A=
   a=3Da.substring(0,i);=0A=
  }=0A=
  if ((i=3Da.lastIndexOf(".")) > 5) {=0A=
   a=3Da.substring(0,i);=0A=
  }=0A=
  a+=3D"."+lt+"."+t+"."+_uns;=0A=
 }=0A=
 return a;=0A=
}=0A=
function _uTrim(s) {=0A=
  if (!s || s=3D=3D"") return "";=0A=
  while ((s.charAt(0)=3D=3D' ') || (s.charAt(0)=3D=3D'\n') || =
(s.charAt(0,1)=3D=3D'\r')) s=3Ds.substring(1,s.length);=0A=
  while ((s.charAt(s.length-1)=3D=3D' ') || =
(s.charAt(s.length-1)=3D=3D'\n') || (s.charAt(s.length-1)=3D=3D'\r')) =
s=3Ds.substring(0,s.length-1);=0A=
  return s;=0A=
}=0A=
function _uEC(s) {=0A=
  var n=3D"";=0A=
  if (!s || s=3D=3D"") return "";=0A=
  for (var i=3D0;i<s.length;i++) {if (s.charAt(i)=3D=3D" ") n+=3D"+"; =
else n+=3Ds.charAt(i);}=0A=
  return n;=0A=
}=0A=
function __utmVisitorCode(f) {=0A=
 var r=3D0,t=3D0,i=3D0,i2=3D0,m=3D31;=0A=
 var a=3D_uGC(_ubd.cookie,"__utma=3D"+_udh,";");=0A=
 if ((i=3Da.indexOf(".",0))<0) return;=0A=
 if ((i2=3Da.indexOf(".",i+1))>0) r=3Da.substring(i+1,i2); else return =
"";  =0A=
 if ((i=3Da.indexOf(".",i2+1))>0) t=3Da.substring(i2+1,i); else return =
"";  =0A=
 if (f) {=0A=
  return r;=0A=
 } else {=0A=
  var c=3Dnew =
Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T'=
,'U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');=0A=
  return =
c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r=
&7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5=
&m]+c[t&m];=0A=
 }=0A=
}=0A=
function _uIN(n) {=0A=
 if (!n) return false;=0A=
 for (var i=3D0;i<n.length;i++) {=0A=
  var c=3Dn.charAt(i);=0A=
  if ((c<"0" || c>"9") && (c!=3D".")) return false;=0A=
 }=0A=
 return true;=0A=
}=0A=
function _uES(s,u) {=0A=
 if (typeof(encodeURIComponent) =3D=3D 'function') {=0A=
  if (u) return encodeURI(s);=0A=
  else return encodeURIComponent(s);=0A=
 } else {=0A=
  return escape(s);=0A=
 }=0A=
}=0A=
function _uUES(s) {=0A=
 if (typeof(decodeURIComponent) =3D=3D 'function') {=0A=
  return decodeURIComponent(s);=0A=
 } else {=0A=
  return unescape(s);=0A=
 }=0A=
}=0A=
function _uVG() {=0A=
 if((_udn.indexOf("www.google.") =3D=3D 0 || _udn.indexOf(".google.") =
=3D=3D 0 || _udn.indexOf("google.") =3D=3D 0) && _utcp=3D=3D'/') {=0A=
  return false;=0A=
 }=0A=
 return true;=0A=
}=0A=
function _uSP() {=0A=
 var s=3D100;=0A=
 if (_usample) s=3D_usample;=0A=
 if(s>=3D100 || s<=3D0) return true;=0A=
 return ((__utmVisitorCode(1)%10000)<(s*100));=0A=
}=0A=

------=_NextPart_000_0088_01C77785.D3492390
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://digg.com/tools/diggthis.js

=0A=
(function(){var ds=3Dtypeof digg_skin=3D=3D'string'?digg_skin:'';var =
h=3D80;var w=3D52;if(ds=3D=3D'compact'){h=3D18;w=3D120;}=0A=
var u=3Dtypeof digg_url=3D=3D'string'?digg_url:(typeof =
DIGG_URL=3D=3D'string'?DIGG_URL:window.location.href);document.write("<if=
rame src=3D'http://digg.com/tools/diggthis.php?u=3D"+=0A=
escape(u).replace(/\+/g,'%2b')+=0A=
(typeof digg_title=3D=3D'string'?('&t=3D'+escape(digg_title)):'')+=0A=
(typeof digg_bodytext=3D=3D'string'?('&b=3D'+escape(digg_bodytext)):'')+=0A=
(typeof digg_topic=3D=3D'string'?('&c=3D'+escape(digg_topic)):'')+=0A=
(typeof digg_bgcolor=3D=3D'string'?('&k=3D'+escape(digg_bgcolor)):'')+=0A=
(ds?('&s=3D'+ds):'')+"' height=3D'"+h+"' width=3D'"+w+"' =
frameborder=3D'0' scrolling=3D'no'></iframe>");})()
------=_NextPart_000_0088_01C77785.D3492390--

