From: <Saved by Windows Internet Explorer 7>
Subject: 2 - CiteSeerX
Date: Sat, 20 Dec 2008 00:19:53 -0600
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_00B9_01C96238.AE9BB360"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3350

This is a multi-part message in MIME format.

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.3617

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML lang=3Den xml:lang=3D"en" =
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD=20
profile=3Dhttp://www.w3.org/2005/11/profile><TITLE>2 - CiteSeerX</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3DUTF-8"><LINK=20
href=3D"http://citeseerx.ist.psu.edu/css/csxsecondary.css" =
type=3Dtext/css=20
rel=3Dstylesheet><!-- for mobile devices    <link type=3D"text/css" =
rel=3D"stylesheet" href=3D"handheldstyle.css" media=3D"handheld" /> =
--><LINK=20
href=3D"/favicon.ico" type=3Dimage/x-icon rel=3D"shortcut icon">
<SCRIPT =
src=3D"http://citeseerx.ist.psu.edu/dwr/interface/MetadataCartJS.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://citeseerx.ist.psu.edu/dwr/engine.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://citeseerx.ist.psu.edu/js/mootools.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://citeseerx.ist.psu.edu/js/mootabs.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://citeseerx.ist.psu.edu/js/searchbox.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://citeseerx.ist.psu.edu/js/metacart.js"=20
type=3Dtext/javascript></SCRIPT>
<LINK href=3D"http://citeseerx.ist.psu.edu/css/wforms.css" =
type=3Dtext/css=20
rel=3Dstylesheet>
<SCRIPT src=3D"http://citeseerx.ist.psu.edu/js/correctionutils.js"=20
type=3Dtext/javascript></SCRIPT>

<META content=3D"citeseerx, Stephen Doty, Anthony Giaquinto" =
name=3Dkeywords>
<META=20
content=3D"Document details from CiteSeerX (Isaac Councill, Lee Giles): =
Presenting quantum Schur algebras as quotients of the quantized =
universal enveloping"=20
name=3Ddescription><!-- Next is an Internet Explorer Conditional Comment =
(IECC) which will give the topic_heading the layout it needs to prevent =
the three pixel gap. This gap is caused by an inline declared item =
adjacent to a float making a 3px margin between the item and the float. =
The 3px margin disappears as soon as the content clears the float, =
causing a 3 pixel text jog. In other words a yucky gap. --><!--[if IE]>
<STYLE type=3Dtext/css>H2.topic_heading {
	ZOOM: 1
}
</STYLE>
<![endif]--><!-- Next is a call for IE. It applies the 'sfhover' class =
to li elements in the 'secondary_nav' id'd ul element when they are =
'moused over' and removes it, using a regular expression, when 'moused =
out'. -->
<SCRIPT src=3D"http://citeseerx.ist.psu.edu/js/mousedout.js"=20
type=3Dtext/javascript></SCRIPT>
<!-- Next are the calls for nifty rounded corners --><LINK=20
href=3D"http://citeseerx.ist.psu.edu/css/niftyCorners.css" =
type=3Dtext/css=20
rel=3Dstylesheet>
<SCRIPT src=3D"http://citeseerx.ist.psu.edu/js/niftycube.js"=20
type=3Dtext/javascript></SCRIPT>

<META content=3D"MSHTML 6.00.6000.16762" name=3DGENERATOR></HEAD>
<BODY=20
onload=3D'Nifty("ul#secondary_nav a","transparent");Nifty("ul.button_nav =
a","transparent");'><!-- Begin header for the primary, secondary, =
tertiary, etc. pages, can be placed in one external file to be called by =
all pages. -->
<DIV class=3D"top_nav clearfix" id=3Dtop_nav_bar>
<DIV id=3Dtop_nav_bar_main>
<UL>
  <LI><A class=3Dlightlink title=3D"CiteSeerX Home page and Statistics"=20
  href=3D"http://citeseerx.ist.psu.edu/">Home|Statistics</A>
  <LI><A class=3Dlightlink title=3D"About CiteSeerX"=20
  href=3D"http://citeseerx.ist.psu.edu/about/site">About</A>
  <LI><A class=3Dlightlink title=3D"Updates and New Features"=20
  href=3D"http://csxblog.ist.psu.edu/">Bulletin</A>
  <LI><A class=3Dlightlink title=3D"Add Your Document"=20
  href=3D"http://citeseerx.ist.psu.edu/submit">Submit Documents</A>
  <LI><A class=3Dlightlink title=3D"Submit Your Feedback"=20
  =
href=3D"http://citeseerx.ist.psu.edu/feedback">Feedback</A></LI></UL></DI=
V>
<DIV id=3Dtop_nav_bar_user><SPAN id=3Dcartspan><A class=3Dlightlink=20
href=3D"http://citeseerx.ist.psu.edu/metacart">MetaCart</A></SPAN><SPAN=20
id=3Duserspan>Sign in to <A class=3Dlightlink=20
href=3D"http://citeseerx.ist.psu.edu/myciteseer/action/accountHome">MyCit=
eSeer</A></SPAN>=20
</DIV></DIV><!-- End top_nav_bar -->
<DIV id=3Dlogo><!-- Contains logo div --><A class=3Dremove=20
title=3D"CiteSeerX Home page and Statistics"=20
href=3D"http://citeseerx.ist.psu.edu/"><IMG alt=3D"CiteSeerXbeta logo"=20
src=3D"http://citeseerx.ist.psu.edu/images/CSxbetaw.gif"></A> </DIV><!-- =
End logo --><!-- First are the floating containers -->
<DIV id=3Dsearch_meta_box>
<DIV id=3Dsearch_tabs>
<UL class=3Dmootabs_title id=3Dtabs_titles>
  <LI class=3Dactive title=3Ddocs_tab>
  <DIV>Documents</DIV></LI>
  <LI title=3Dauth_tab>
  <DIV>Authors</DIV></LI></UL><!-- remove extra whitespace by coding =
in-line lists on one line -->
<DIV class=3Dmootabs_panel id=3Ddocs_tab>
<FORM id=3Ddoc_search_form action=3D/search method=3Dget><!-- name not =
valid in XHTML, To get around this issue, use <form =
id=3D"header_search_form" ... > and in my link use =
javascript:document.forms['header_search_form'].submit(); which =
validates correctly. -->
<FIELDSET class=3DrightAligned>
<P><INPUT class=3D"query csx" size=3D50 name=3Dq> <INPUT class=3D"button =
csx" type=3Dsubmit alt=3DSearch value=3DSearch name=3Dsubmit></P><INPUT=20
type=3Dhidden value=3Drel name=3Dsort>=20
<P><INPUT type=3Dcheckbox value=3D1 name=3Dic> Include Citations | <A=20
title=3D"Search full text, title, abstract, date, author name, author =
affiliation, etc."=20
href=3D"http://citeseerx.ist.psu.edu/advanced_search">Advanced =
Search</A> | <A=20
title=3D"Get Help"=20
href=3D"http://citeseerx.ist.psu.edu/help/search">Help</A></P></FIELDSET>=
=20
</FORM></DIV><!-- End docs_tab -->
<DIV class=3Dmootabs_panel id=3Dauth_tab>
<FORM id=3Dauth_search_form action=3D/search method=3Dget><!-- name not =
valid in XHTML, To get around this issue, use <form =
id=3D"header_search_form" ... > and in my link use =
javascript:document.forms['header_search_form'].submit(); which =
validates correctly. -->
<FIELDSET class=3DrightAligned>
<P><INPUT class=3D"query csx" size=3D50 name=3Dq> <INPUT class=3D"button =
csx" type=3Dsubmit alt=3DSearch value=3DSearch name=3Dsubmit>=20
<INPUT type=3Dhidden value=3Dcite name=3Dsort> <INPUT type=3Dhidden =
value=3Dauth=20
name=3Dt></P>
<P><INPUT type=3Dcheckbox value=3D1 name=3Dic> Include Citations | <A=20
title=3D"Search full text, title, abstract, date, author name, author =
affiliation, etc."=20
href=3D"http://citeseerx.ist.psu.edu/advanced_search">Advanced =
Search</A> | <A=20
title=3D"Get Help"=20
href=3D"http://citeseerx.ist.psu.edu/help/search">Help</A></P></FIELDSET>=
=20
</FORM></DIV><!-- End auth_tab --></DIV><!-- End search_tabs =
--></DIV><!-- End search_meta_box -->
<SCRIPT type=3Dtext/javascript>=0A=
 <!--=0A=
  window.addEvent('domready', function(){=0A=
   =0A=
     startSearchTabs('docs_tab');=0A=
   =0A=
   =0A=
  });=0A=
 // -->=0A=
</SCRIPT>
<!-- End of the floating containers --><!-- End header for the primary, =
secondary, tertiary, etc. pages -->
<DIV class=3Dclearfix id=3Dpage_wrapper><!-- Contains all the divisions =
(div's) within the page (not including top navigation bar, search box =
and meta information) -->
<DIV class=3Dclearfix id=3Dcenter_content><!-- Contains header div -->
<DIV id=3Dsecondary_tabs_container>
<DIV id=3Dsecondary_tabs><!-- to make a tab highlighted, place =
id=3D"currentpage" within li tag -->
<UL>
  <LI id=3Dcurrentpage><A class=3D"page_tabs remove"=20
  =
href=3D"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=3D10.1.1.22.3617=
"><SPAN>Summary</SPAN></A></LI>
  <LI class=3Dtab4sublist><A class=3D"page_tabs remove"=20
  title=3D"Find documents related to this document"=20
  =
href=3D"http://citeseerx.ist.psu.edu/viewdoc/similar?doi=3D10.1.1.22.3617=
"><SPAN=20
  class=3Dclearfix>Related Documents</SPAN></A>
  <UL class=3D"tab_sublist clearfix">
    <LI><A class=3D"sublist_links remove"=20
    title=3D"Documents that cite the same works"=20
    =
href=3D"http://citeseerx.ist.psu.edu/viewdoc/similar?doi=3D10.1.1.22.3617=
&amp;type=3Dab"><SPAN>Active=20
    Bibliography</SPAN></A></LI>
    <LI><A class=3D"sublist_links remove"=20
    title=3D"Documents cited by the same works"=20
    =
href=3D"http://citeseerx.ist.psu.edu/viewdoc/similar?doi=3D10.1.1.22.3617=
&amp;type=3Dcc"><SPAN>Co-citation</SPAN></A></LI></UL></LI>
  <LI><A class=3D"page_tabs remove"=20
  =
href=3D"http://citeseerx.ist.psu.edu/viewdoc/versions?doi=3D10.1.1.22.361=
7"><SPAN>Version=20
  History</SPAN></A></LI></UL></DIV></DIV>
<DIV id=3Dprimary_content>
<H1 class=3Dprimaryheader><SPAN class=3DZ3988=20
title=3Dctx_ver=3DZ39.88-2004&amp;rft_val_fmt=3Dinfo%3Aofi%2Ffmt%3Akev%3A=
mtx%3Ajournal&amp;rft_id=3Dinfo:doi/10.1.1.22.3617&amp;rft_id=3Dhttp%3A%2=
F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.22.3617&amp;=
rft.atitle=3D2&amp;rft.genre=3Dunknown&amp;rft.au=3DDoty%2C+Stephen&amp;r=
ft.au=3DGiaquinto%2C+Anthony>&nbsp;</SPAN>=20
2 </H1>
<DIV id=3Dintroduction>
<DIV class=3Ddlspan id=3Ddownloads>Download:<BR><A=20
title=3D"View or Download this document as PDF"=20
href=3D"http://citeseerx.ist.psu.edu/viewdoc/download?doi=3D10.1.1.22.361=
7&amp;rep=3Drep1&amp;type=3Dpdf"><IMG=20
alt=3D"Download as a PDF" =
src=3D"http://citeseerx.ist.psu.edu/icons/pdf.gif"> </A>|=20
<A title=3D"View or Download this document as PS"=20
href=3D"http://citeseerx.ist.psu.edu/viewdoc/download?doi=3D10.1.1.22.361=
7&amp;rep=3Drep1&amp;type=3Dps"><IMG=20
alt=3D"Download as a PS" =
src=3D"http://citeseerx.ist.psu.edu/icons/ps.gif">=20
</A></DIV>
<DIV class=3D"char_increased char_indented char_mediumvalue padded">by =
Stephen=20
Doty, Anthony Giaquinto </DIV>
<DIV class=3D"char_increased  char_indented char6 padded"></DIV>
<DIV=20
class=3D"char_increased char_indented char6 =
padded">http://www.math.luc.edu/~doty/preprints/DG5.ps.gz=20
</DIV>
<DIV class=3D"char_increased char_indented"><SPAN class=3Dactionspan=20
onclick=3DaddToCartProxy(2004777)>Add To MetaCart</SPAN> <SPAN =
class=3Dcartmsg=20
id=3Dcmsg_2004777></SPAN></DIV></DIV><!-- End introduction -->
<DIV class=3D"information_bar clearfix">
<UL class=3Dbutton_nav>
  <LI><A class=3Dremove=20
  title=3D"Add this document to your collection (Account required)"=20
  =
href=3D"http://citeseerx.ist.psu.edu/myciteseer/action/addPaperCollection=
?doi=3D10.1.1.22.3617"><SPAN>Add=20
  to Collection</SPAN></A></LI>
  <LI><A class=3Dremove=20
  title=3D"Submit corrections for this document (Account required)"=20
  =
href=3D"http://citeseerx.ist.psu.edu/correct?doi=3D10.1.1.22.3617"><SPAN>=
Correct=20
  Errors</SPAN></A></LI>
  <LI><A class=3Dremove=20
  title=3D"Monitor changes to this document (Account required)"=20
  =
href=3D"http://citeseerx.ist.psu.edu/myciteseer/action/editMonitors?doi=3D=
10.1.1.22.3617"><SPAN>Monitor=20
  Changes</SPAN></A></LI></UL></DIV>
<DIV id=3Dmain_content>
<DIV id=3Dright-sidebar><!-- Contains left content -->
<DIV class=3Dinside><!-- to give some room between columns -->
<DIV class=3Dcontent_box>
<H2>Popular Tags</H2>
<P>No tags have been applied to this document.</P>
<FORM id=3Dtag_form action=3D/myciteseer/action/editTags method=3Dpost>
<FIELDSET class=3Dnoborder>
<P>Add a tag: <INPUT class=3Dtag_query size=3D25 name=3Dtag> <INPUT =
class=3Dbutton title=3D"Enter a keyword for this document" type=3Dsubmit =
alt=3Dsubmit value=3DSubmit name=3Dsubmit></P><INPUT=20
type=3Dhidden value=3D10.1.1.22.3617 name=3Ddoi> </FIELDSET> =
</FORM></DIV>
<DIV class=3Dcontent_box>
<H2>BibTeX | <SPAN class=3Dactionspan =
onclick=3DaddToCartProxy(2004777)>Add To=20
MetaCart</SPAN> <SPAN class=3Dcartmsg=20
id=3Dcmsg_2004777></SPAN></H2>@MISC{Doty_2,<BR>&nbsp;&nbsp;&nbsp;&nbsp;au=
thor =3D=20
{Stephen Doty and Anthony Giaquinto},<BR>&nbsp;&nbsp;&nbsp;&nbsp;title =
=3D=20
{2},<BR>&nbsp;&nbsp;&nbsp;&nbsp;year =3D=20
{}<BR>}<BR></DIV></DIV><!--End inside --></DIV><!-- End of right-sidebar =
-->
<H2 class=3Dtopic_heading>Abstract:</H2>
<P class=3Dpara4>Presenting quantum Schur algebras as quotients of the =
quantized=20
universal enveloping</P>
<H2 class=3Dtopic_heading>Citations</H2><!-- List as title - firstauth, =
secondauth, et al (year) --><!-- whitespace after number is visible on =
web page -->
<TABLE class=3Dcitelist>
  <TBODY>
  <TR>
    <TD><SPAN class=3Dchar_emphasized>22</SPAN> </TD>
    <TD><A class=3Dcitation_only=20
      =
href=3D"http://citeseerx.ist.psu.edu/showciting?cid=3D1319202">Finite=20
      dimensional Hopf algebras arising from quantized universal =
enveloping=20
      algebras</A> =E2=80=93 Lusztig - 1990 </TD></TR>
  <TR>
    <TD><SPAN class=3Dchar_emphasized>21</SPAN> </TD>
    <TD><A class=3Dcitation_only=20
      href=3D"http://citeseerx.ist.psu.edu/showciting?cid=3D1322102">A =
note on=20
      quantized Weyl reciprocity at roots of unity, Algebra Colloq</A> =
=E2=80=93 Du -=20
      1995 </TD></TR>
  <TR>
    <TD><SPAN class=3Dchar_emphasized>5</SPAN> </TD>
    <TD><A=20
      =
href=3D"http://citeseerx.ist.psu.edu/viewdoc/summary?cid=3D1330421">q-Sch=
ur=20
      Algebras as Quotients of Quantized Enveloping Algebras</A> =
=E2=80=93 Green - 1996=20
    </TD></TR>
  <TR>
    <TD><SPAN class=3Dchar_emphasized>3</SPAN> </TD>
    <TD><A=20
      =
href=3D"http://citeseerx.ist.psu.edu/viewdoc/summary?cid=3D1589501">Prese=
nting=20
      Schur algebras as quotients of the universal enveloping algebra of =
gl 2 ,=20
      Algebras and Representation Theory</A> =E2=80=93 Doty, Giaquinto - =
2000=20
  </TD></TR></TBODY></TABLE>
<UL></UL><!-- End citation list -->
<DIV class=3Dparent_div_spacer></DIV></DIV><!-- End main_content -->
<DIV class=3Dinformation_bar>
<DIV class=3Dpara4><A class=3Dremove title=3D"View or Download this =
Document"=20
href=3D"http://citeseerx.ist.psu.edu/viewdoc/download?doi=3D10.1.1.22.361=
7&amp;rep=3Drep1&amp;type=3Dpdf">View=20
or Download</A> | <A class=3Dremove=20
href=3D"http://citeseerx.ist.psu.edu/myciteseer/action/addPaperCollection=
?doi=3D10.1.1.22.3617">Add=20
to My Collection</A> | <A class=3Dremove=20
title=3D"Submit corrections for this document"=20
href=3D"http://citeseerx.ist.psu.edu/correct?doi=3D10.1.1.22.3617">Correc=
t=20
Errors</A></DIV></DIV><!-- End bottom information_bar -->
<DIV id=3Dconclusion>
<DIV><A title=3D"Find documents related to this document"=20
href=3D"http://citeseerx.ist.psu.edu/viewdoc/similar?doi=3D10.1.1.22.3617=
">Related=20
Documents</A>: <A title=3D"Documents that cite the same works"=20
href=3D"http://citeseerx.ist.psu.edu/viewdoc/similar?doi=3D10.1.1.22.3617=
&amp;type=3Dab">Active=20
Bibliography</A> | <A title=3D"Documents cited by the same works"=20
href=3D"http://citeseerx.ist.psu.edu/viewdoc/similar?doi=3D10.1.1.22.3617=
&amp;type=3Dcc">Co-citation</A><!-- &#124; <a href=3D"#">Version =
History</a> -->=20
</DIV></DIV><!-- End conclusion --></DIV><!-- End primary_content =
--></DIV><!-- End center_content -->
<DIV id=3Dfooter>
<P><A title=3D"CiteSeerX Home page and Statistics"=20
href=3D"http://citeseerx.ist.psu.edu/">Home|Statistics</A> | <A=20
title=3D"Learn more about this scientific literature digital library and =
search engine"=20
href=3D"http://citeseerx.ist.psu.edu/about/site">About =
CiteSeer<SUP>x</SUP></A> |=20
<A title=3D"Updates and New Features"=20
href=3D"http://csxblog.ist.psu.edu/">Bulletin</A> | <A title=3D"Add Your =
Document"=20
href=3D"http://citeseerx.ist.psu.edu/submit">Submit Documents</A> | <A=20
title=3D"Submit Your Feedback"=20
href=3D"http://citeseerx.ist.psu.edu/feedback">Feedback</A> | <A=20
title=3D"Privacy Policy" =
href=3D"http://citeseerx.ist.psu.edu/privacy">Privacy=20
Policy</A></P>
<P>=C2=A9 2007 <A href=3D"http://www.psu.edu/">The Pennsylvania State=20
University</A></P>
<P>Developed at and hosted by <A href=3D"http://ist.psu.edu/">The =
College of=20
Information Sciences and Technology</A> at Penn State</P>
<P><A class=3Dremove=20
title=3D"Penn State College of Information Sciences and Technology"=20
href=3D"http://ist.psu.edu/"><IMG id=3Dist alt=3D"IST logo"=20
src=3D"http://citeseerx.ist.psu.edu/images/istlogo.gif"></A></P></DIV></D=
IV><!-- end of page_wrapper --></BODY></HTML>

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://citeseerx.ist.psu.edu/images/CSxbetaw.gif

R0lGODlhGQEyAOYOAAY2a/Ly8kdcdOvr62pwdwUrVczMzAc8d0Z7ttXh7jdPaWqXyeLi4piYmQlJ
kQUlSglNmFRkd8XW6Wl3hlGCuMPDw9zc3QhBgQ9BeTt0tHmCjs/c67u7u1VvjZaktNPT0+ju9LTK
4glRoYeHiApSozJGXSRnsRZcqqa2x6S+2vv7+7Oys7jG1StYiqnB3KKiowhEiP3+/gpWqhQ0WJa1
15quxJacpCJkrcXN1e3w9I2nw6urq1yNw7S8xjtkkoSfvQpUp3iYvSQ9WAlQnqSst8DFyoWWqaax
vYqr0fT2+BlVmWGJtjRqpoWLlHeMpLnBynqhzRk8Y8nT3Y+RlGuQugYwXwhIjhtKgGuEoPf4+fj6
/NLV2fv8/QQhQBxhrZiy0OXm57G2vDBtstPZ4B00Tg4rTJ+mrx5Si0JRZOHp8SRdng9Yqg8vUsnI
yRNQlBFXpA5SnsbGxq+vr9jX2L++v8/Pz7i3t5+en3x9gKempxdBb0RypQpVqApUqP///wpVqSH5
BAEAAA4ALAAAAAAZATIAAAf/gA6Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWm
p6ipnicUPAgnqrGys7ScazcZCBm5GSdrkgsbCRI8i2vHv7WDaya5CGLJytLTlxkLIWlaXNvcSRs0
FDeOPH7lfjkIiRkSGxshsMpQEtrbWmlIYtT6+4w8IUnmAgoslwAfIwnmssxxYgURAi3l0ihDsGGg
ORBQ4PDbuBGBhBgBYwxgYKEkmAEqBOZAAg9RgnID6qyYcADGIQQA/SRw01AWhRwWQ6LQyLForTVQ
IJqzUEHOiyYaojZ5wcEAg5zlNmRIBAXMBzp5GqABcOBmTikYLvRMJQaEuRgW/4jYMNNmzkkwFjy4
McpX1YkUAeesmEJAARk2ZRKzISNEwJQKFnKA5AKGAqI3P+y8mCKgTIGahnCWwxEFgE1VLswFMKNg
Bhs2QibYqVCBjh0sfUFRWLAgnyEeC3hEU3YiNUwOnGc86NLlgfPnz4VoqDCHAck6exDBuFKCDfPP
pwmJ9oNjRpULqsRgJaKc+XM0d17cme9jbW5NPLj4kdBSEGA/UFCzhnF+MLADAWQs19wDBTRYxYNV
NFjAAwrYwEFtHMjhwyFWHBAhg1UcYJ8g45UXoioLgOSHBQq4x6CEaIwgYwR6oHffJmvQUM4XhKTo
Bwv6ILHUCwIo6FwBVQBA1v8BTDKpZIQzTDDfHQ1MccYhMBwAQJKghZaTiWWlImQ5YXjH4JJaVoEG
ASU8EGJ4N2LyRkUxWOZAW36MoQYMcM5CgX4FvoCGkQUseQEM9lkBwwVpzkCAjHgI0GUhi15wqENn
mRcmKv9xQcSRABxqhaJaRgFqn3FasgdQaVwZwop7NIlqKmtU5McAchT5XZKXLpIlAI4iWOimkYy3
haaRnIAAb7zx0AskX5SjQhEJhlqIFRdsyeWshzCzG7M8QJPJGmIAxywFJmCyxrLBEWJFEOWgAO8A
RmhJFrenLGBOBRMsd+akjTDqGogi9uhCCinYSQgNB6cQAqBg2GCEET/8kI7/Imv4kwOg5nABAg0I
vNGIjzGAEQF4hzDKJL6EmLDAPCqao0VBW1GSARQJKPWWFhIskC4jCxzswsU8bBBzDsU4gO0TqvWA
gZJkjZjKCQit2IAQ30Utya8PWksIgQG27JZAcMXBwQor2LGEIhRUHZQ5IfimCBMDZBFDEkXMUDCH
iI780tvlrDQJDUAB7kcaCxCVyKvlLODAmH6oMJIFFzsAQwtplLNFC10DHAsCKtJBwK57S4Itk70O
QiAV9t1QuDkqWMBBWFNM0UAHUgsCRRawM/BBHXVUF0BAOVDBCAoDJKFCFkdgwHIjBPoRgAW/Bw8G
7+ZswMQjYrh9qwV1GPCB/wUDxOyHC2oosroOMH1QAQccODHpBakFcESEvB41Jhh5YO2m56abFYGw
MKkTMCwFKGDBACxAhwYQIAIQjEALAAg5FXzADBOIgAAUIIAJ2GAOwytHDIw3ty2AIQAxiAEKrlQJ
xkmvDTaYwAYF0EEiWAAradgeI8TwNz+AoQJN6MAMI6CBHjAgJaNRnznGcKs42ECIEZhAabq0hOUx
oA0EQFLpZlG1DzQha8+zxH+SMAGyXEtLAphDHeSAB/c4yGuD8JEfshCHDkRhQtApgwLMgBUtrE0R
WPgAA0IoBR1GYkDmGAARBDADPD5nBgJ4AhIPZ0hEmKCHDLCBAtjgSOcIof8DTDQHkBARPQbMJAoR
mpAWbcIEEAQAB2HgwA4UAMdZqKcccYhAc04Uiv+AoQNvIsSv0rjGNi4ISbUcD3kU0EkJNegBE3gd
CNKXiAtgwQAWCCEI/ggJKLzFA3d8jjMbxAYjxGyUiFiDCwOAhSpAZ5wPEEIPAvKD3BHIAnLI4ji3
BYcQDOADHRDCC8JSI2X8aY50QEMXChVGMZZjDiczTSEY5QM1snFXSprUGtzGInEiE2pbKkAECqcC
FOCrQxOIAwjLwQUdQOKW8VLOkboGtQcVwAnmSAIWuEUOczjBkUhKUk0LMIMjmCMH9TGEcQZghxEk
CERCBQ0UAjAHIwCgAAL/eIEcnGAjWvAAJAHgQJt42Us/xKAOEUUVDHzguxXgoQz/E1WPOhYBcRqK
T4tKExZAogIG+ABfMABABDiw0nKgzxH/8aGpQEQWS/HJUmlCQTmSgIMrSK1W5ngCHpF5gEM9llEA
0EMoc0CErqoucnUQC0Y72zcELPAIV7hqATQgBw50oKGi+OqtOCAEN5n2E4BRgQEEwNBD7AEEDKCD
BjxTS0Fs1BwoeA6vZpUlPUhBeh+QX+4Eka09fmAA5khAJREhhsLFAAsz7azUTtcCt8SkA791gG79
kIQi/atv12LUXgtUgRb8NjUDoINTd+k5KTCgAj7QVhWicAc7hKEF2zWF/27D2luJiiK4wy2ul5JQ
hymUIURSe8hk7Zu/RGBrrwe2QUGrCYAoTKEO4I1IdhThTYKwwTnBTESWUKAQDmjAwoNIbA9ABUBh
YmAMAfiAHToAMAA3FYyEyNEVCbiljApADiuwwRW8CtY4lEDDZRUucYEsHoBYwAZsICshapwnIcwg
Clc4gxpuQGcT2NnOdL6BGnwABgPIoQEKKPIgslWFCRggxoebcbdciIIZzEAPW55zne9sAjqnjwoH
3kET9ECsS/r0zXqQs6QpXWlLn6EGDMxDGU3r5Db+rxAZYMERnPA0LkG2A1OwwV9nodss1OHLgt4E
hsc8K9FkMs3ECnJOi//Qgx7gQBgJiLa0px1tHBhgBQ0YAS3jO1EPReDQLNUTIm6AySf04Ak4oLa6
o70BHMRhB9kWApAzwLEtNPsJUli3uiWAA7BMAQ9RKB2AOTA6MAviBG9wA2jvJYjqcprbphADROBy
smBrYtgGH4Sx0axm57rwn7TBZggtIhKmwHsEeEBDx7HkIQHUASgxsN+symsOBhiANoLEnkUk95U8
/BsPJYAjBWBngTbQQaUoeVsSwFAHO9zh56UJD4DpoMvPbBe0APuVemVxg8z5sAkZ9wTGyaxxgBx7
5TewVQD8TKU77GA2bTCA3OfeBrPJ4el4IAAB0GB1RgxzCwAJAANua4j/DCjlhzugklY5EIe4z13u
baiAHRKPcr2XgKz6KofswtKAPKzg6I5/vNHtEJbK40HeXa1fBeq68kFUSq2Wgngp3mCcABSBDWQX
e+QynHsHbBzZhki7WS0wATSgQQEKQAMNl7/8CGpQAMcvQQmEEHYOZSuaMcgCA8KAgRFlYLK5ND7y
mU9+59Mw+iXQVE9qnAMzQP/4HCQ/DZ3/fDRIvzvnOW0AVu9bRYzKxLWwBCJkMr3HCWNXbGbHccnm
AFRDX3OgUMc0ThLoTEaSYwEDAB4QAyrQZz7wW7cUAG3AHM0xgSSIR+5BVj01ADYggi9SgvDkL4WS
evQVB0XSXOogN5OA/wv9gQlM4HVJEAY22AkHaBYFooCHUD8Q5UYuWIJcEmEp4wPDMwBt8GNw0nUi
UQdkEIFLOIEl5nuRMwBhoIRbyIWTkhpJ0AY1KHuFYAA1YAlUYAA1swk1kBMBwGROiAlD6CVFCHyG
gARZMD1f5CYgNYiEOIgrIwkXwAJN1AT5NwgnIAVZ8E8CsFBCVYiWCDVbJwjltXRt0FsfdYmX2Flf
M0doWH2HwIZuCIedsAdgkBMWcAa4RQl5WAi/13o/MRIr0EiNhVe82IuIUgMUgFdS8zP+J1kBpgEg
Rgg6EAAL1ABx5YvQCANq8AVMgFeF8AYswIwf0C+7GI29SAE60AJ8Mv8iqZEFpViAhoCKlfCGcbgJ
HnA95cAC3WcJEiABOEgIs1hme9h6DjAGA7BAE2CBi0AFZoUC4+UAJpACCdCOiAAYpoQHuAcnFPCP
fRZ0aoFYfgACP0BNhfAD/7h9MxCEiFARY7AEe1EI5ch7uMWGCIACcocClSMIN/ADRWAARfAD4iAI
NdADBiAvjkiTNvkDGQCMkXAGBgCPP7JllFA1IEABiqNsYlZ9tbiAguCRARAAW8BpjmACmaMQP1AI
C1A4LvCUhnACFfEBL0AAD1BLbqBAzEgEIvkbIBETikYIakA+zOgE6FgIOlIgRcCRp5UFKukIc1cD
CEABPElCDnADNRn/BBlABUVQBDlJBTVgAD9gJyfAk0K5BJFpAIrpCDDQAYL0JRsSCRmgdh9wBCeJ
j9JDg1JpZkZ4CHdZNyU1jwdRDgzAAeK4DC40QmyjBVlAB1MwKI04CBRwQlmgAvLTCBngFjEwBx7A
J4dglSqAVGoYR/oRAHWABRc5igHgmntJCHL3lQfHk76hAwbATRlgAC4lCOw4COipMGJQk5/pCNYk
chGxBGSZCCcABTkxABWQB/41Ig7JAcRmFto5BXx4CFjAAElnUozAOLnZAQynia+TBAiwXS8xBy+A
BwlSnIJgBUQwSBroBM+DAF43B3JASwB0BjjQihm5B3e4ABAhmCoW/yr2kRoMYAd8F56DIHf9QQEG
EAQMaAA9UAjoCQ/vWaQoUAhB4JmmcwDT8V0qEgJLkJOW9DLmIBhTcHnNlQI58AE70KPFlgPJNQIL
aghX4AHkkxIscJDOxQN/g08BGYOEAC9HxU2DsA63sgIjoFBrGV8t8ASDVA41AJiEcANQABTClQfE
lSSoYgUdUAeFGgBUsJqwlgIgkQMV0ABfJpAuEKZjaorp2IZr2Ibr+XiPVzNLup716aqTkCWyEQfZ
FF4hAAUUkAFiIAYZQAFQgA3mAAZ0cAenRzCF8AUMdAdkehPgIwcakKbXcgVh8AHwmAMJcwK+cAI3
UzVnmJbKYaeD4P8GKIAVP7IEu0oBYHoOHDACBFAGC5V7a1UX5aMTSNALx+AAFEADfxNgDdAZZzIr
9xkZ5SABUCAGb7AGJ2ACPJACY2MBg6EAOAYwyDqszOSjgqCO4omqlrkLHLsLSqqKDgCrhCCyiAgA
AtAAdkCrI2dW9cAF5gOgdzACAmAm4AqfbfBny1p4dcABxAqtlHIFZoB0IpQFSQACWcAxDjsFEXBj
/1oIQFsdWLENKmJK7JqF/5M7F+ADK4CfZpUFIJADWqAiHJYHfypdWzQIKEUHlJoTXOC1SaAzMAt0
6VUINXCzgEaqa2gA/YEAQ8qkhXClg7CkJ2CkTgqllJAtUUAAdyD/B3RAreT6FgMwBzw7AhHQWyfo
OZkRszkLa/7Wrvw4aHowAStQAYK0suegZA2QcnB1JvEFA3rQBIxnFwHgstMzrHgQAVn4rhDXIQow
BSlrFzrnB1wwAH5GGG0CKrKXJQJwBxzQBm0aENoXB2RbuWbbJzrgdNqGt+JpmY7okjlZmXEopOTp
AEvqAD+QnoMwn4Y7CdhyVUIQASPgdhciPh/wAQZAByuwGbcrBO46ggIpCE5gAyj3Zb3HBDbwb55L
le7iIQqgAYt7IW0QeaT3b4xkV2fLXSY7BTuQNhwwedm2d95BYBGWJZA0FSsAwXGAvzELwnZ1nYgb
ARr8eY2Xwn9G/7klsLqCGF8BPMDa+6M1qQOHyZMKw5hFQAUZcL5F0BLlewI1KZSQSZ+XQGgFUAZC
gAZRFBVRkXcRYH9Me0wVaghnoAeuUX1wcAZXEAWcBKLaoSUFUMURQAATMAEPJADd8U5ffEbAYsVx
rHd0nCCX+zxZEiGNEUVy/EBowL92fJ0YXAVsUAICAMeFvMXUJ05dWAhhPMYWRwg1EAQt+ZIxeSfo
GZRBWgM4eAJAeZNDqTCVwDUFsBglYHz3VwJkAFcLwljdyXIQcsGDpi1xKUyNQgbSJwTCjBiUrDUm
piUzIASxjMj+m8kN1yjKLMzDjMPIpMiD5iFskMzTJ8yH8U7/67XLuXyHqYK2oJVKz8GCxXzHiIB1
avgrxswIpxNSnfQittYI7fshzhGB6qwIiyLP8/xGzkwpafJM0EHPofI87DzOkHA6aZJKzhRVqbMI
ihLR2iFXkJBXTwIhEC3OvqwtEmJrHE0p5azRUYVfW+MkJG1rDTXRsajQwqQy9oImFr0PE90kqGPS
C51XNk3RkfBYO83TsQpZTeJYLo0KisKLIT0NSQ3P47jU8OzUCw3VRT3VVF3VUx0IADs=

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://citeseerx.ist.psu.edu/icons/pdf.gif

R0lGODlhEAAQAPIAAAAAAM7Ozu/v7////////wAAAAAAAAAAACH5BAEAAAQALAAAAAAQABAAggAA
AM7Ozu/v7////////wAAAAAAAAAAAAM5SATcrVABQatgUdoKAsjTdgVeFG7Op4mWuqSwK0uztNxf
jtl2TkM6XxD4UmEetJgDyGoxmxSZcpkAADs=

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://citeseerx.ist.psu.edu/icons/ps.gif

R0lGODlhEAAQAKEAAAAAhM7Ozu/v7////yH5BAEAAAMALAAAAAAQABAAAAI33ICZxgYCo0DNyQgC
qO/OoDXdpWyWJ5lHyaoINi7OQ08l80K5gtOl7fLFZKsW74TS4ZKYnnFRAAA7

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://citeseerx.ist.psu.edu/images/istlogo.gif

R0lGODlhQQAZAOcAACZmolKCroKiwKK+xrbO4dHe59bq8lJidnqGkuLy8lB6qJqiqn6Ccvb67l5e
XYaWppqq0lZ2lF56jra+wquqqcDS4I6Ojvr68mFmZdre3pKWhq62uu7y7vr+9szGyGJyemJ+nM7O
zmZmXubq6dXW13KSrm5+jt7e4LOysmpubbLK2vry+mlydr6+vo6ewoaqwN7i3j5umLe2tmaCmKKa
mcLGxmmOuYKKeu729pKennJyc2tiYipmomhqYk5qhpGqxp6utvr+/V6CnnJ6fnKavlpmeu7u7+Li
4i5ooP7++nJ2ivb+8kZwmKK+3mJiYpaWimaCotva2vL27p6ywn56elp6mujm3tLa5tfi7r62sv76
8q62vjZiitDm+MrS1p6inIKWuqa+0m5mYJyWlIqiweby6pKSkv7+/paent7q5lJ2koqasqampZCK
jsHCwbK6vqauuoKCgvby6o6uymCCrHZ2dWiKqqK60G6KnqayzvL69s7SxrLG1nJqaq+urjVmmKzC
0oaGhtHe7/b29ury7qi4yn+evpaWlt7i7mpmXu7+/l6Ktv76/vr69l5mcvb+9mZ2hlB0nKbG2trq
9oqKiuLm4tbm+nqatvb69rzK1mJyinqeym5ubmZiY+r297q6utLK1t7q8rqysjpmkPr6/rrS5pqa
mpSakmpqaubu8J6ennp6eZ6yzvL+/XaStm52gsrKypauxnKSvmaCqq661tLS0nZybpKiyubm5sPW
4lxgZpaanmpmZtLa0q6+0naKpvL2+PLy8vLu8e7y9+L2/k9+q9rm5l+GrWZmZuny+Orq6vb+/vL6
/P72/lqGpsbS2v7+9Jaqzq6usq66yq7G5uLu825qbKK2zu7u9t7m2n5+f2Jqav769052pDpomNfe
5766u/r29rbCzIaqylp+pJKOjqKioqK+0oqavm6Gqtba3trm8t7m5sbGxYJ+fqKemtLi9p22zpKy
xvr6+vb6/ebm7uLe3Fhqeo6Smq7G0mJqdt7u7nCWuGiGsLrO3P729ywAAAAAQQAZAAAI/gDPCBwo
cJ5Bg2cGHSQ4SBkJWG5gwSKBa9CZecEyHpyXsODBQcGMWCRIsuTAYLA+fWohQ+WnKBwFnqBgoZwF
C6s42YrTbp4yc6pUUfCDouXKlihQUKCg6lDPiyajnjHy6ZAOVMhQBTJFIknCWoHqUFCHC1cICimc
sBl0ZJUTVNoo3QyEtY4ZMxbi6BDhgE0wqVEtNmRT98igw4NCrNLh5u/BYH5WmQpWa5WZdkcyBpPB
CdWhEUY4GIkiTZsqI4CjxmzhBJkZhRxxUXJgLlg4r6RIJaRAyUi7OCFItkCGbMwgRgWDqTKDOnVJ
g0FCtK49sJYOJ9JIej0TgtIRN6r+/gaB2gIVqvBngnCcJ8OCspjOS4ZA5sTcyHmweqBiM083Jt26
KdMOLifUYhF85SGD3hkAngBLc/GVBIsTTnxxn3UOrKIOQlBdxFES8A3kBlamAKPdPNtFKBByZ8CC
TCfmwHdEHE5YQwlMKQ6U2xncjDdQCykgY4ocKqa2nXROvAPfIJ9w8pYFUegGIkFe+SgiiX8V6dyE
GKgykkBGoKADcYG4oQyVUpXHiylfavmcQCFgAGObSQzihjaoOMCLGbXEpFtULXCCDBpZamllegKR
EgQsiexAwyBBMMPMMMFgk8En7giKASU1FABPAVdcoc4VWAgCjyXwwJHCDmaoU82r/qlUk8CsCSRj
6zA4AMMMPYoyQso/WkDzCDOtKEKMOBg4gUAsc4wjQAmyEGGDHWr4IKcDLJgAAh0KFFOMAouQAwUI
VWiiCzKa4NGPDbKUAAY6LrgAQSx5bCFOJs+QykEw3HjSBTU/GHJJPyBEIME927yyBhk/sHLHHedI
Agg1fMhgRh99OCJBPP4QUIrHBPBRQQXR6NCDGb0Ys0817KRCCA654kAPMIPQQ08HvJ6BhQDFHOOK
IUAAUkEBW/TQiSmp0MNMEI1Ao14jFyhkDw0iiJCCX400wg030JzRwRLi9ODEGNgsM4iiSTCSxHZ/
DrQdLT500wQWqQwTBK8e7CCG/n1B9I1LFMkw44kKsdzxzQnldILKEFg80soykCvEjRspiHAKB488
EgQmHWwNzdrcCLR2Ej4aMI4Qs9ixSTwiw+NLEbrswgHUwrRwiDLMhKHGKEy4YkkUOiQihhujnwFi
Eo8EigoNK/zDjfNri056I1ZygyI3pNCDzTMDjMPPMVV0w8Uf3ijQDR020PHKA4Yw8QcSPIwSBjB+
NCpDOGfgzyA3jAQqQg6EoEcQIGeS6LnNJCCpBzsKcYB7pOMOsYgFGX6hDwQQwRt/4AIAYpAPYIii
E8jwwKH61oEWWENIwfARi9zEIwbNIwTb0MUpPLEETOihBnXYwCQu8T4uVCEX3A0wBS/qQAKCzIN/
SUgQGoRBOhZqJwkdkIETRNAGYYQjHM0IgQ7KYYVQXIMfP/BHMKLACUdQYAUeGkgQ6EecNuCCFCt0
YkKi4AFKOKETdZBBLZTBiFqwABnvsEc4dIUDWLhjb2kYCEeCoIxatCAQDugBJygQAhiEiIXCQEFe
tLEKbQRCA3tYQjbwwQJOBIICLWGDO6iAAhiEDj7hqIUpAhEHbdQyEJT4xJnkeIZGjKASMEhDJSpx
hEoIYwWYsEII3rAANJjiCxQAh2E6sJ15sCgYuDiCNrOpzfcUKSAAOw==

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/viewdoc/secondarylayout.css

BODY {
	TEXT-ALIGN: center
}
#top_nav_bar {
	CLEAR: both; MARGIN: 0px auto; TEXT-ALIGN: left
}
#page_wrapper {
	CLEAR: both; MARGIN: 0px auto; OVERFLOW: hidden; WIDTH: 96%; =
TEXT-ALIGN: left
}
#center_content {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
auto; PADDING-TOP: 0px
}
#right-sidebar {
	CLEAR: right; FLOAT: right; OVERFLOW: hidden
}
#main_content {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0.5em; PADDING-BOTTOM: =
0.5em; MARGIN: 0px 0px 0.5em; PADDING-TOP: 0px
}
.parent_div_spacer {
	CLEAR: both
}
.inside {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px
}
.clearfix:unknown {
	CLEAR: both; DISPLAY: block; VISIBILITY: hidden; HEIGHT: 0px; content: =
"."
}
.clearfix {
	DISPLAY: inline-block
}
* HTML .clearfix {
	HEIGHT: 1%
}
.clearfix {
	DISPLAY: block
}
#footer {
	CLEAR: both; MARGIN: 1em auto 0.5em; TEXT-ALIGN: left
}

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/viewdoc/secondarycustomize.css

* {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
BODY {
	FONT-SIZE: 70%; BACKGROUND-IMAGE: url(../images/gradient.gif); =
LINE-HEIGHT: 1.3em; BACKGROUND-REPEAT: repeat-x; FONT-FAMILY: Verdana, =
Arial, Helvetica, sans-serif; TEXT-ALIGN: center
}
H1 {
	MARGIN: 0.5em 0px
}
H2 {
	MARGIN: 0.5em 0px
}
H3 {
	MARGIN: 0.5em 0px
}
H4 {
	MARGIN: 0.5em 0px
}
H5 {
	MARGIN: 0.5em 0px
}
H6 {
	MARGIN: 0.5em 0px
}
P {
	MARGIN: 0.5em 0px
}
BLOCKQUOTE {
	MARGIN: 0.5em 0px
}
LABEL {
	MARGIN: 0.5em 0px
}
OL {
	MARGIN: 0.5em 0px
}
DL {
	MARGIN: 0.5em 0px
}
ADDRESS {
	MARGIN: 0.5em 0px
}
DIV.parent_spacer {
	CLEAR: both; OVERFLOW: hidden
}
UL.formating {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; LIST-STYLE-POSITION: inside; =
PADDING-BOTTOM: 0px; MARGIN: 0.5em; PADDING-TOP: 0px
}
LI {
	MARGIN-LEFT: 1em
}
DD {
	MARGIN-LEFT: 1em
}
.nofrills_list {
	LIST-STYLE-TYPE: none
}
.listformating LI {
	MARGIN-TOP: 1em
}
TABLE.citelist TD {
	PADDING-LEFT: 0.5em; PADDING-BOTTOM: 1em; VERTICAL-ALIGN: top
}
.char3 {
	DISPLAY: inline; FONT-WEIGHT: bold; FONT-SIZE: 1em; COLOR: #7590dd; =
LINE-HEIGHT: 1.5em; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.char6 {
	FONT-SIZE: 120%; COLOR: #6f6f6f
}
.char_mediumvalue {
	COLOR: #363636
}
.char_increased {
	FONT-SIZE: 1.2em
}
.char_increased LI {
	FONT-SIZE: 1.1em
}
.char_indented {
	MARGIN-LEFT: 3em
}
.char_emphasized {
	DISPLAY: inline; FONT-WEIGHT: bold; COLOR: #000; WHITE-SPACE: pre
}
.char_smaller {
	FONT-SIZE: 0.8em
}
.char_increased_alot {
	FONT-SIZE: 1.4em
}
.smallcapped {
	FONT-SIZE: 1.2em; COLOR: #000; TEXT-ALIGN: left; FONT-VARIANT: =
small-caps
}
.para2 {
	CLEAR: both; PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: =
0px; MARGIN: 0px 0px 0.5em; WIDTH: 95%; PADDING-TOP: 0px; TEXT-ALIGN: =
center
}
.para4 {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 1em; MARGIN: =
0px; PADDING-TOP: 1em
}
.para5 {
	DISPLAY: inline
}
.padded {
	MARGIN-BOTTOM: 0.2em
}
.bluetext {
	COLOR: #1684d5
}
A:link {
	COLOR: #00b; BORDER-BOTTOM: #bbb 1px dotted; TEXT-DECORATION: none
}
A:visited {
	COLOR: #639; BORDER-BOTTOM: #bbb 1px dotted; TEXT-DECORATION: none
}
A.lightlink:link {
	FONT-WEIGHT: bold; COLOR: #cff; BORDER-BOTTOM: #bbb 1px dotted; =
TEXT-DECORATION: none
}
A.lightlink:visited {
	FONT-WEIGHT: bold; COLOR: #c9f; BORDER-BOTTOM: #bbb 1px dotted; =
TEXT-DECORATION: none
}
A.lightlink:hover:link {
	FONT-WEIGHT: bold; COLOR: #555; BACKGROUND-COLOR: #eee
}
A.lightlink:hover:visited {
	FONT-WEIGHT: bold; COLOR: #555; BACKGROUND-COLOR: #eee
}
A.citation_only {
	COLOR: #6666ff
}
A.tooltip {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; Z-INDEX: 24; =
BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; POSITION: relative; =
BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none
}
A.tooltip:hover {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; Z-INDEX: 25; =
BACKGROUND-IMAGE: none; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: =
0px; TEXT-DECORATION: none
}
A.tooltip SPAN {
	BORDER-RIGHT: #0cf 1px solid; BORDER-TOP: #0cf 1px solid; DISPLAY: =
none; LEFT: 2em; BORDER-LEFT: #0cf 1px solid; WIDTH: 30em; =
BORDER-BOTTOM: #0cf 1px solid; TOP: 2em
}
A.tooltip:hover SPAN {
	BORDER-RIGHT: #0cf 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #0cf =
1px solid; DISPLAY: block; PADDING-LEFT: 0.5em; LEFT: 2em; =
PADDING-BOTTOM: 0.5em; BORDER-LEFT: #0cf 1px solid; WIDTH: 30em; COLOR: =
#000; PADDING-TOP: 0.5em; BORDER-BOTTOM: #0cf 1px solid; POSITION: =
absolute; TOP: 2em; BACKGROUND-COLOR: #f2f8fd; TEXT-ALIGN: left
}
A IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
A.remove {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
.icon {
	WIDTH: 16px; MARGIN-RIGHT: 1em; HEIGHT: 16px
}
FIELDSET.rightAligned {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 0.5em; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: #02176e 1px solid; =
BORDER-TOP-STYLE: none; PADDING-TOP: 0.3em; BORDER-BOTTOM: #ccc 1px =
solid; TEXT-ALIGN: right
}
FIELDSET.noborder {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
TEXTAREA.csx {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 0.1em; BORDER-TOP: #666 =
1px solid; PADDING-LEFT: 0.1em; FONT-SIZE: 1em; PADDING-BOTTOM: 0.1em; =
BORDER-LEFT: #666 1px solid; PADDING-TOP: 0.1em; BORDER-BOTTOM: #ccc 1px =
solid; FONT-FAMILY: arial, Helvetica, sans-serif
}
INPUT.csx {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 0.1em; BORDER-TOP: #666 =
1px solid; PADDING-LEFT: 0.1em; FONT-SIZE: 1em; PADDING-BOTTOM: 0.1em; =
BORDER-LEFT: #666 1px solid; PADDING-TOP: 0.1em; BORDER-BOTTOM: #ccc 1px =
solid; FONT-FAMILY: arial, Helvetica, sans-serif
}
BUTTON.csx {
	BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #666 1px solid; FONT-SIZE: =
80%; BORDER-LEFT: #666 1px solid; BORDER-BOTTOM: #ccc 1px solid; =
FONT-FAMILY: arial, Helvetica, sans-serif
}
TEXTAREA:focus {
	BACKGROUND-COLOR: #ffc
}
INPUT:focus {
	BACKGROUND-COLOR: #ffc
}
.button {
	BORDER-RIGHT: #003466 1px solid; BORDER-TOP: #003466 1px solid; =
BORDER-LEFT: #003466 1px solid; COLOR: #003466; BORDER-BOTTOM: #003466 =
1px solid; BACKGROUND-COLOR: #8fc0f0
}
#top_nav_bar {
	Z-INDEX: 1; PADDING-BOTTOM: 0.5em; PADDING-TOP: 0.3em; BORDER-BOTTOM: =
#fff 1px solid
}
.top_nav {
	TEXT-ALIGN: left
}
.top_nav UL LI {
	DISPLAY: inline
}
#top_nav_bar UL LI :link {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 1em; PADDING-LEFT: 1em; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: #fff; =
BORDER-RIGHT-WIDTH: 0px
}
#top_nav_bar UL LI :visited {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 1em; PADDING-LEFT: 1em; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: =
0px
}
#top_nav_bar UL LI :hover {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 1em; PADDING-LEFT: 1em; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BACKGROUND-COLOR: =
#69c; BORDER-RIGHT-WIDTH: 0px
}
#top_nav_bar_main {
	FLOAT: left; WIDTH: 70%
}
#top_nav_bar_user {
	FLOAT: right; WIDTH: 29%; COLOR: #fff; TEXT-ALIGN: right
}
#cartspan {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 0.2em; =
PADDING-TOP: 0.2em
}
#userspan {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 0.2em; =
BORDER-LEFT: #fff 1px solid; MARGIN-RIGHT: 1em; PADDING-TOP: 0.2em
}
.top_nav UL LI :link {
	PADDING-BOTTOM: 0.5em; COLOR: #fff; PADDING-TOP: 0.3em
}
.top_nav UL LI :visited {
	PADDING-BOTTOM: 0.5em; PADDING-TOP: 0.3em
}
.top_nav UL LI :hover {
	PADDING-BOTTOM: 0.5em; PADDING-TOP: 0.3em
}
.top_nav UL LI :hover:visited {
	PADDING-BOTTOM: 0.5em; COLOR: #fff; PADDING-TOP: 0.3em
}
#logo {
	FLOAT: left; MARGIN: 15px 0px 10px 1em; TEXT-ALIGN: left
}
#logo IMG {
	WIDTH: 281px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; HEIGHT: 50px; BORDER-BOTTOM-STYLE: none
}
#mycsxlogo {
	FLOAT: left; MARGIN: 15px 0px 10px 1em; TEXT-ALIGN: left
}
#mycsxlogo IMG {
	WIDTH: 239px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; HEIGHT: 50px; BORDER-BOTTOM-STYLE: none
}
#search_meta_box {
	FLOAT: right; PADDING-BOTTOM: 1em; POSITION: relative
}
#mcs_search_meta_box {
	FLOAT: right; PADDING-BOTTOM: 1em; POSITION: relative
}
#tabs A {
	FLOAT: none
}
#meta_nav {
	CLEAR: both; Z-INDEX: 3; RIGHT: 8px; FLOAT: right; WIDTH: 200px; =
POSITION: absolute; TOP: 5px
}
#meta_nav UL LI :link {
	BACKGROUND-COLOR: #fff
}
#meta_nav UL LI :visited {
	BACKGROUND-COLOR: #fff
}
#meta_nav UL LI :hover:link {
	COLOR: #fff; BACKGROUND-COLOR: #69c
}
#meta_nav UL LI :hover:visited {
	COLOR: #fff; BACKGROUND-COLOR: #69c
}
.nav {
	WIDTH: 100%; COLOR: #fff; LINE-HEIGHT: 3em; TEXT-ALIGN: right
}
.nav UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: =
0.75em; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #fff; PADDING-TOP: 0px; =
FONT-FAMILY: tahoma, verdana, geneva, arial, helvetica, sans-serif; =
LETTER-SPACING: 2px
}
.nav UL LI {
	DISPLAY: inline
}
.nav UL LI :link {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 0.2em; COLOR: =
#fff; PADDING-TOP: 0.2em; TEXT-DECORATION: none
}
.nav UL LI :visited {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 0.2em; COLOR: =
#fff; PADDING-TOP: 0.2em; TEXT-DECORATION: none
}
.nav UL LI :hover:link {
	COLOR: #fff; TEXT-DECORATION: none
}
.nav UL LI :hover:visited {
	COLOR: #fff; TEXT-DECORATION: none
}
.nav UL LI :link {
	PADDING-RIGHT: 1em; MARGIN-TOP: 0.5em; PADDING-LEFT: 1em; =
BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0.2em; COLOR: #ccf; =
PADDING-TOP: 0.2em; TEXT-DECORATION: none
}
.nav UL LI :visited {
	PADDING-RIGHT: 1em; MARGIN-TOP: 0.5em; PADDING-LEFT: 1em; =
BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0.2em; COLOR: #ccf; =
PADDING-TOP: 0.2em; TEXT-DECORATION: none
}
#center_content {
	WIDTH: 100%; BACKGROUND-COLOR: transparent
}
.content {
	CLEAR: both; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: =
normal; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; MARGIN-LEFT: 8px; WIDTH: =
95%; COLOR: #000; PADDING-TOP: 10px
}
.content H2 {
	MARGIN-TOP: 5px; PADDING-LEFT: 15px; FONT-SIZE: 14px; COLOR: #222
}
.content H3 {
	PADDING-LEFT: 15px; FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #ee6700
}
.content P {
	PADDING-LEFT: 15px; MARGIN: 5px 0px
}
.content_box {
	BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; MARGIN: 1em =
1em 2em; BORDER-LEFT: #ccc 1px solid; WIDTH: 336px; BORDER-BOTTOM: #ccc =
1px solid
}
.content_box H2 {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0px; MARGIN: =
0px; FONT: bold 1.1em Verdana, Arial, Helvetica, sans-serif; =
TEXT-TRANSFORM: uppercase; COLOR: #02176e; PADDING-TOP: 0px; =
BORDER-BOTTOM: #999 2px solid; BACKGROUND-COLOR: #8fc0f0; TEXT-ALIGN: =
left
}
.content_box UL {
	PADDING-LEFT: 1em; MARGIN-LEFT: 1.5em; TEXT-INDENT: -1em
}
#primary_content {
	CLEAR: both; BORDER-RIGHT: #02176e 1px solid; PADDING-RIGHT: 0px; =
PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: #ccc =
1px solid; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; BORDER-BOTTOM: =
#02176e 1px solid; BACKGROUND-COLOR: #fff; TEXT-ALIGN: left
}
#introduction {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.5em; MARGIN: =
0px; COLOR: #000; PADDING-TOP: 0px; BACKGROUND-COLOR: #ffc
}
.primaryheader {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.5em; MARGIN: =
0px; FONT: bold 1.5em Verdana, Arial, Helvetica, sans-serif; COLOR: =
#000; PADDING-TOP: 0.5em; BACKGROUND-COLOR: #ffc; TEXT-ALIGN: left
}
.information_bar {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.5em; =
MARGIN: 0px; PADDING-TOP: 0.5em; BACKGROUND-COLOR: #dedede
}
.information_bar .left_content {
	FLOAT: left
}
.information_bar .right_content {
	PADDING-RIGHT: 0.5em; FLOAT: right
}
.information_bar2 {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.5em; =
MARGIN: 0px 0px 0.5em; PADDING-TOP: 0.5em; BACKGROUND-COLOR: #ffc
}
#conclusion {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.5em; =
MARGIN: 0px; COLOR: #000; PADDING-TOP: 0.5em; BORDER-BOTTOM: #ccc 1px =
solid; BACKGROUND-COLOR: #ffc
}
.searchresult {
	MARGIN: 0.5em 0px; LIST-STYLE-TYPE: none
}
.blockhighlight_box {
	PADDING-RIGHT: 1em; MARGIN-TOP: 1em; MARGIN-BOTTOM: 1.5em
}
.overblock {
	BACKGROUND-POSITION: 100% 0px; DISPLAY: block; BACKGROUND-IMAGE: =
url(../images/grdnt_yw.gif); BORDER-LEFT: #69c 1px solid; BORDER-BOTTOM: =
#69c 1px solid; BACKGROUND-REPEAT: repeat-x
}
.offblock {
	BACKGROUND-POSITION: 100% -150px; DISPLAY: block; BACKGROUND-IMAGE: =
url(../images/grdnt_yw.gif); BORDER-LEFT: #fff 1px solid; BORDER-BOTTOM: =
#fff 1px solid; BACKGROUND-REPEAT: repeat-x
}
.blockhighlight UL {
	MARGIN: 0px; WIDTH: 400px
}
.blockhighlight LI {
	DISPLAY: block; LIST-STYLE-TYPE: none
}
.blockhighlight LI EM {
	FONT-WEIGHT: bold
}
.blockhighlight LI.doc_details {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0.5em; =
PADDING-BOTTOM: 0.5em; MARGIN: 0px 1em 2em 0px; BORDER-LEFT: #fff 1px =
solid; PADDING-TOP: 0px; BORDER-BOTTOM: #fff 1px solid; TEXT-DECORATION: =
none
}
* HTML .blockhighlight LI A {
	WIDTH: 400px
}
A.citation:hover {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none
}
.blockhighlight A EM.title {
	DISPLAY: inline; FONT: bold 1.3em/170% Verdana, Helvetica, sans-serif; =
COLOR: blue; BORDER-BOTTOM: blue 1px solid
}
.blockhighlight EM.title {
	DISPLAY: inline; FONT: 1.3em/170% Verdana, Helvetica, sans-serif
}
.blockhighlight A SPAN.author {
	DISPLAY: block; FONT: 1.1em/170% Verdana, Helvetica, sans-serif; COLOR: =
#6f6f6f
}
.blockhighlight A SPAN.doc_clipping {
	DISPLAY: block; FONT: 1.1em/170% Verdana, Helvetica, sans-serif; COLOR: =
#000
}
H2.topic_heading {
	FONT-WEIGHT: bold; FONT-SIZE: 1.1em; COLOR: #000
}
#downloads {
	PADDING-RIGHT: 2em; PADDING-LEFT: 4em; FLOAT: right; PADDING-BOTTOM: =
2em; PADDING-TOP: 1em; TEXT-ALIGN: center
}
.dlspan {
	FONT-WEIGHT: bold; TEXT-TRANSFORM: uppercase
}
#secondary_tabs_container {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; WIDTH: 100%; PADDING-TOP: 0px
}
#secondary_tabs {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; Z-INDEX: 5; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; LINE-HEIGHT: normal; =
PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#secondary_tabs UL {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; MARGIN: =
0px; LINE-HEIGHT: normal; PADDING-TOP: 10px; LIST-STYLE-TYPE: none
}
#secondary_tabs LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px; WIDTH: 15em; PADDING-TOP: 0px; POSITION: relative
}
#secondary_tabs LI UL {
	CLEAR: left; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; Z-INDEX: 6; LEFT: =
-999em; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 3em; WIDTH: 15em; =
PADDING-TOP: 0px; POSITION: absolute; TOP: 2em
}
#secondary_tabs LI UL LI {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #1978cc =
1px solid; PADDING-LEFT: 0.5em; BACKGROUND: #8fc0f0; PADDING-BOTTOM: =
0.25em; BORDER-LEFT: #000 1px solid; PADDING-TOP: 0.25em; BORDER-BOTTOM: =
#000 1px solid
}
#secondary_tabs LI UL LI A {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#secondary_tabs A.sublist_links SPAN {
	FONT-WEIGHT: bold; WIDTH: 14em; COLOR: #666
}
#secondary_tabs LI UL LI:hover {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #ee6700 =
1px solid; PADDING-LEFT: 0.5em; FONT-WEIGHT: bold; BACKGROUND: #ffa826; =
PADDING-BOTTOM: 0.25em; BORDER-LEFT: #000 1px solid; COLOR: #000; =
PADDING-TOP: 0.25em; BORDER-BOTTOM: #000 1px solid
}
#secondary_tabs LI UL LI A.sublist_links:hover SPAN {
	FONT-WEIGHT: bold; COLOR: #000
}
#secondary_tabs LI:hover UL {
	LEFT: auto
}
#secondary_tabs LI.sfhover UL {
	LEFT: auto
}
#secondary_tabs A.page_tabs {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 9px; BACKGROUND: =
url(../images/tab_all_lft.gif) no-repeat left top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; CURSOR: hand; PADDING-TOP: 0px; =
BORDER-BOTTOM: #1978cc 1px solid; TEXT-DECORATION: none
}
#secondary_tabs A.page_tabs SPAN {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 6px; FONT-WEIGHT: =
bold; BACKGROUND: url(../images/tab_all_rght.gif) no-repeat right top; =
FLOAT: left; PADDING-BOTTOM: 4px; WIDTH: 12em; COLOR: #666; PADDING-TOP: =
5px; TEXT-ALIGN: center
}
#secondary_tabs A.page_tabs SPAN {
	FLOAT: none
}
#secondary_tabs A.page_tabs:hover {
	BACKGROUND-POSITION: 0% -150px
}
#secondary_tabs A.page_tabs:hover SPAN {
	BACKGROUND-POSITION: 100% -150px; FONT-WEIGHT: bold; COLOR: #000
}
#secondary_tabs #currentpage A.page_tabs {
	BORDER-TOP-WIDTH: 0px; BACKGROUND-POSITION: 0px -300px; =
BORDER-LEFT-WIDTH: 0px; BACKGROUND-IMAGE: =
url(../images/tab_all_lft.gif); BORDER-BOTTOM-WIDTH: 0px; =
BORDER-RIGHT-WIDTH: 0px
}
#secondary_tabs #currentpage A.page_tabs SPAN {
	BACKGROUND-POSITION: 100% -300px; FONT-WEIGHT: bold; BACKGROUND-IMAGE: =
url(../images/tab_all_rght.gif); PADDING-BOTTOM: 5px; WIDTH: 12em; =
COLOR: #000; TEXT-ALIGN: center
}
.button_nav {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.button_nav LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px 0.5em 0px 0px; OVERFLOW: visible; =
WIDTH: 13em; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; POSITION: relative
}
.button_nav LI A {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: 100% -100px; DISPLAY: block; =
PADDING-LEFT: 0px; BACKGROUND-IMAGE: url(../images/gradient.gif); =
PADDING-BOTTOM: 0px; MARGIN: 0px 0.3em 0px 0px; FONT: bold 100%/1.5em =
Verdana,Arial,sans-serif; WIDTH: 13em; COLOR: #fff; PADDING-TOP: 0px; =
BACKGROUND-REPEAT: repeat-x; TEXT-ALIGN: center; TEXT-DECORATION: none
}
.button_nav A:hover {
	BACKGROUND-POSITION: 100% 0px; BACKGROUND-IMAGE: =
url(../images/grdnt_ywor.gif); COLOR: #000; BACKGROUND-REPEAT: repeat-x
}
.button_nav A:visited {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: 100% -100px; DISPLAY: block; =
PADDING-LEFT: 0px; BACKGROUND-IMAGE: url(../images/gradient.gif); =
PADDING-BOTTOM: 0px; MARGIN: 0px 0.3em 0px 0px; FONT: bold 100%/1.5em =
Verdana,Arial,sans-serif; WIDTH: 13em; COLOR: #fff; PADDING-TOP: 0px; =
BACKGROUND-REPEAT: repeat-x; TEXT-ALIGN: center; TEXT-DECORATION: none
}
#right-sidebar {
	BACKGROUND: #fff; MARGIN: 0.5em
}
#citechart {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; WIDTH: 330px; HEIGHT: 255px; BORDER-RIGHT-WIDTH: 0px
}
TABLE.tableformat {
	BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: =
#ccc 1px solid; WIDTH: 336px; BORDER-BOTTOM: #ccc 1px solid; =
BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff
}
TABLE.tableformat TD {
	BORDER-RIGHT: #ccc 2px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 2px =
solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ccc 2px =
solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ccc 2px solid; =
BACKGROUND-COLOR: #fff
}
.cite_context {
	VISIBILITY: hidden; OVERFLOW: hidden; POSITION: relative; HEIGHT: 0px
}
.actionspan {
	CURSOR: pointer; COLOR: #00b
}
.metatable {
	BORDER-RIGHT: #c1d0e8 thin solid; BORDER-TOP: #c1d0e8 thin solid; =
MARGIN: 0px auto; BORDER-LEFT: #c1d0e8 thin solid; BORDER-BOTTOM: =
#c1d0e8 thin solid; BORDER-COLLAPSE: separate
}
.metatable THEAD TH {
	BORDER-RIGHT: #c1d0e8 thin solid; BORDER-TOP: #c1d0e8 thin solid; =
BORDER-LEFT: #c1d0e8 thin solid; BORDER-BOTTOM: #c1d0e8 thin solid; =
TEXT-ALIGN: center
}
.metatable TBODY TD {
	BORDER-RIGHT: #c1d0e8 thin solid; PADDING-RIGHT: 0.2em; BORDER-TOP: =
#c1d0e8 thin solid; PADDING-LEFT: 0.2em; PADDING-BOTTOM: 0.2em; =
BORDER-LEFT: #c1d0e8 thin solid; PADDING-TOP: 0.2em; BORDER-BOTTOM: =
#c1d0e8 thin solid; TEXT-ALIGN: left
}
.version_nav {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.5em; =
PADDING-TOP: 0.5em; FONT-FAMILY: tahoma, verdana, geneva, arial, =
helvetica, sans-serif; TEXT-ALIGN: center
}
.version_nav UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 0.5em; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.version_nav LI {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0.1em; MARGIN: =
0px; FONT: bold 1.2em Verdana, Arial, Helvetica, sans-serif; COLOR: =
#003466; PADDING-TOP: 0.1em
}
.version_nav LI.active {
	BORDER-RIGHT: #aaa 1px solid; BORDER-TOP: #ccc 1px solid; BACKGROUND: =
#ffc; BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #aaa 1px solid
}
.banner {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 1em; =
PADDING-TOP: 1em; TEXT-ALIGN: left
}
.banner_header {
	FONT-WEIGHT: bold; COLOR: #ff6600
}
.banner_text {
	COLOR: #ffffff
}
.banner_text A:link {
	FONT-WEIGHT: bold; COLOR: #cff; BORDER-BOTTOM: #bbb 1px dotted; =
TEXT-DECORATION: none
}
.banner_text A:visited {
	FONT-WEIGHT: bold; COLOR: #c9f; BORDER-BOTTOM: #bbb 1px dotted; =
TEXT-DECORATION: none
}
.banner_text A:hover:link {
	FONT-WEIGHT: bold; COLOR: #555; BACKGROUND-COLOR: #eee
}
.banner_text A:hover:visited {
	FONT-WEIGHT: bold; COLOR: #555; BACKGROUND-COLOR: #eee
}
UL.cart_item {
	MARGIN: 1em
}
.cart_item LI {
	MARGIN-BOTTOM: 0.2em
}
.cart_item LI.indent {
	PADDING-LEFT: 2em
}
.cartmsg {
	COLOR: #c5821d
}
.mypagecontent {
	CLEAR: both; BORDER-RIGHT: #000 1px; PADDING-RIGHT: 0px; BORDER-TOP: =
#000 1px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: =
visible; BORDER-LEFT: #000 1px; WIDTH: 100%; PADDING-TOP: 0px; =
BORDER-BOTTOM: #000 1px; BACKGROUND-COLOR: #f7f7f7
}
.columns-float {
	BACKGROUND: #f7f7f7; FLOAT: left; WIDTH: 60%
}
.columns-float-sec {
	BACKGROUND: #f7f7f7; FLOAT: left; WIDTH: 80%
}
.column-one {
	FLOAT: right; WIDTH: 83%
}
.column-two {
	FLOAT: left; WIDTH: 17%
}
.column-three {
	Z-INDEX: 12; FLOAT: right; WIDTH: 40%
}
.column-one-sec {
	FLOAT: right; WIDTH: 75%
}
.column-two-sec {
	FLOAT: left; WIDTH: 25%
}
.column-three-sec {
	Z-INDEX: 12; FLOAT: right; WIDTH: 15%
}
.column-one-content {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; MARGIN: =
0.5em 0px; BORDER-TOP-STYLE: none; PADDING-TOP: 6px; BORDER-RIGHT-STYLE: =
none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
.column-two-content {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; MARGIN: =
0.5em 0px; BORDER-TOP-STYLE: none; PADDING-TOP: 6px; BORDER-RIGHT-STYLE: =
none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
.column-three-content {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; MARGIN: =
0.5em 0px; BORDER-TOP-STYLE: none; PADDING-TOP: 6px; BORDER-RIGHT-STYLE: =
none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
.column-one-content {
	MARGIN-LEFT: 1px; MARGIN-RIGHT: 1px
}
.columns-float {
	POSITION: relative
}
.column-one {
	POSITION: relative
}
.colume-one-sec {
	POSITION: relative
}
.column-two {
	POSITION: relative
}
.column-two-sec {
	POSITION: relative
}
.column-three {
	POSITION: relative
}
column-three-sec H2 {
	POSITION: relative
}
.box-clear {
	CLEAR: both; FONT-SIZE: 1px; LINE-HEIGHT: 0px
}
.box-clear {
	FONT-SIZE: medium
}
.box-clear.fake {
	DISPLAY: none
}
HTML > BODY DIV.box-clear {
	DISPLAY: none
}
HEAD:first-child + BODY DIV.box-clear {
	DISPLAY: block
}
.nn4clear {
	CLEAR: both; FONT-SIZE: 1px; LINE-HEIGHT: 0px
}
.nn4clear {
	DISPLAY: none
}
.myhome_infocontainer {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; Z-INDEX: 10; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0.7em 0px 0px 1em; BORDER-LEFT: #ccc 1px =
solid; PADDING-TOP: 0px; POSITION: relative
}
.char_floating {
	FONT-SIZE: 1.6em; Z-INDEX: 11; LEFT: 0.3em; FLOAT: left; MARGIN: 0px; =
COLOR: #1080d3; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
POSITION: absolute; TOP: 0px
}
.pushdown {
	MARGIN: 0.9em 0px 0px 0.7em
}
#box {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; BACKGROUND: =
url(../images/grdnt_orwh.gif) #ffca7a repeat-x; PADDING-BOTTOM: 5px; =
MARGIN: 0px 0px 0px 1em; WIDTH: 30em; PADDING-TOP: 5px; TEXT-ALIGN: =
center
}
.char_headers {
	FONT-SIZE: 1.6em; COLOR: #1080d3; LINE-HEIGHT: 1.5em; FONT-FAMILY: =
Verdana, Arial, Helvetica, sans-serif
}
UL.box_list {
	MARGIN-TOP: 1em
}
.column-two-content H2 {
	FONT-SIZE: 1.5em; COLOR: #1080d3; TEXT-ALIGN: left; FONT-VARIANT: =
small-caps
}
.column-two-content H3 {
	FONT-WEIGHT: normal; FONT-SIZE: 1em; COLOR: #000; TEXT-ALIGN: left
}
.myhome_content_box {
	BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0.5em
}
.myhome_content_box H3 {
	PADDING-RIGHT: 0.3em; PADDING-LEFT: 0.3em; FONT-SIZE: 1.2em; =
PADDING-BOTTOM: 0px; COLOR: #000; PADDING-TOP: 0px; FONT-VARIANT: =
small-caps
}
.myhome_content_box P {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0px; MARGIN: =
0.7em 0px 0px 1em; PADDING-TOP: 0px
}
#leftmenu {
	MARGIN-TOP: 0px; MARGIN-LEFT: 0.5em; WIDTH: 100%
}
#leftmenu UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#leftmenu UL LI {
	BORDER-LEFT: #1080d3 1px solid
}
#leftmenu UL LI :link {
	PADDING-RIGHT: 1em; DISPLAY: block; PADDING-LEFT: 1em; PADDING-BOTTOM: =
1em; WIDTH: 11em; COLOR: #003466; PADDING-TOP: 1em; TEXT-DECORATION: =
none
}
#leftmenu UL LI :visited {
	PADDING-RIGHT: 1em; DISPLAY: block; PADDING-LEFT: 1em; PADDING-BOTTOM: =
1em; WIDTH: 11em; COLOR: #003466; PADDING-TOP: 1em; TEXT-DECORATION: =
none
}
#leftmenu UL LI.end :link {
	BORDER-BOTTOM: #ccc 1px dotted
}
#leftmenu UL LI.end :visited {
	BORDER-BOTTOM: #ccc 1px dotted
}
#leftmenu UL LI.active A:link {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 1em; COLOR: =
#fff; PADDING-TOP: 1em; BACKGROUND-COLOR: #1080d3; FONT-VARIANT: =
small-caps; TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: none
}
#leftmenu UL LI.active A:visited {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 1em; COLOR: =
#fff; PADDING-TOP: 1em; BACKGROUND-COLOR: #1080d3; FONT-VARIANT: =
small-caps; TEXT-DECORATION: none; BORDER-BOTTOM-STYLE: none
}
#leftmenu UL LI :hover:link {
	BACKGROUND: url(../images/grdnt_orwh.gif) #ffca7a repeat-x; COLOR: #333
}
#leftmenu UL LI :hover:visited {
	BACKGROUND: url(../images/grdnt_orwh.gif) #ffca7a repeat-x; COLOR: #333
}
#leftmenu DIV {
	PADDING-RIGHT: 1em; PADDING-LEFT: 1em
}
#myheader {
	BACKGROUND: none transparent scroll repeat 0% 0%
}
#mymeta_nav {
	CLEAR: both; OVERFLOW: hidden
}
#mymeta_nav UL LI :link {
=09
}
#mymeta_nav UL LI :visited {
=09
}
#mymeta_nav UL LI :hover:link {
	COLOR: #000; BACKGROUND-COLOR: #ee6700
}
#mymeta_nav UL LI :hover:visited {
	COLOR: #000; BACKGROUND-COLOR: #ee6700
}
.mynavsub_menu {
	WIDTH: 100%
}
.mynavsub_menu UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: =
0.85em; FLOAT: right; PADDING-BOTTOM: 0.5em; MARGIN: 0px; PADDING-TOP: =
0.5em; FONT-FAMILY: tahoma, verdana, geneva, arial, helvetica, =
sans-serif; LETTER-SPACING: 2px
}
.mynavsub_menu UL LI {
	DISPLAY: inline
}
.mynavsub_menu UL LI :link {
	BORDER-RIGHT: #159 1px solid; PADDING-RIGHT: 1em; PADDING-LEFT: 1em; =
BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0.5em; COLOR: #fff; =
PADDING-TOP: 0.5em; TEXT-DECORATION: none
}
.mynavsub_menu UL LI :visited {
	BORDER-RIGHT: #159 1px solid; PADDING-RIGHT: 1em; PADDING-LEFT: 1em; =
BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0.5em; COLOR: #fff; =
PADDING-TOP: 0.5em; TEXT-DECORATION: none
}
.mynavsub_menu UL LI :hover:link {
	COLOR: #fff; TEXT-DECORATION: none
}
.mynavsub_menu UL LI :hover:visited {
	COLOR: #fff; TEXT-DECORATION: none
}
.mynavsub_menu LI.last :link {
	BORDER-RIGHT-STYLE: none
}
.mynavsub_menu LI.last :visited {
	BORDER-RIGHT-STYLE: none
}
#mymain_menu {
	CLEAR: both; BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; =
BACKGROUND: #f7f7f7; BORDER-LEFT: #000 1px solid; BORDER-BOTTOM: #000 =
1px solid
}
#mymain_menu UL {
	FONT-SIZE: 0.95em; FLOAT: left
}
#mymain_menu UL LI :link {
	BACKGROUND-COLOR: #f7f7f7
}
#mymain_menu UL LI :visited {
	BACKGROUND-COLOR: #f7f7f7
}
#mymain_menu UL LI :hover:link {
	COLOR: #000; BACKGROUND-COLOR: #ee6700
}
#mymain_menu UL LI :hover:visited {
	COLOR: #000; BACKGROUND-COLOR: #ee6700
}
#mymain_menu UL LI A.active {
	TEXT-TRANSFORM: uppercase; COLOR: #fff; BACKGROUND-COLOR: #000; =
TEXT-ALIGN: left; TEXT-DECORATION: none
}
#mymain_menu UL LI A.active:hover {
	TEXT-TRANSFORM: uppercase; COLOR: #fff; BACKGROUND-COLOR: #000; =
TEXT-ALIGN: left; TEXT-DECORATION: none
}
#mymain_menu UL LI A.active SPAN {
	TEXT-TRANSFORM: lowercase
}
#mymain_menu UL LI A.active:hover SPAN {
	TEXT-TRANSFORM: lowercase
}
.mynav {
	FLOAT: left; WIDTH: 100%
}
.mynav UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.mynav UL LI {
	DISPLAY: inline
}
.mynav UL {
	FONT-WEIGHT: bold; FONT-SIZE: 0.85em; FLOAT: right; MARGIN: 0px; =
FONT-FAMILY: tahoma, verdana, geneva, arial, helvetica, sans-serif; =
LETTER-SPACING: 2px
}
.mynav UL LI :link {
	BORDER-RIGHT: #159 1px solid; PADDING-RIGHT: 1em; PADDING-LEFT: 1em; =
FLOAT: left; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0.2em; COLOR: =
#003466; PADDING-TOP: 0.2em; TEXT-DECORATION: none
}
.mynav UL LI :visited {
	BORDER-RIGHT: #159 1px solid; PADDING-RIGHT: 1em; PADDING-LEFT: 1em; =
FLOAT: left; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0.2em; COLOR: =
#003466; PADDING-TOP: 0.2em; TEXT-DECORATION: none
}
.mynav UL LI :hover:link {
	COLOR: #fff; TEXT-DECORATION: none
}
.mynav UL LI :hover:visited {
	COLOR: #fff; TEXT-DECORATION: none
}
.mynav LI.last :link {
	BORDER-RIGHT-STYLE: none
}
.mynav LI.last :visited {
	BORDER-RIGHT-STYLE: none
}
#login_content {
	CLEAR: both; PADDING-RIGHT: 2em; PADDING-LEFT: 2em; PADDING-BOTTOM: =
2em; MARGIN: 0px auto; WIDTH: 65%; PADDING-TOP: 2em
}
.left-column_content {
	FLOAT: left; MARGIN: 0px; TEXT-ALIGN: right
}
.right-column_content {
	CLEAR: right; MARGIN: 0px 0.5em; TEXT-ALIGN: left
}
#mylogin FIELDSET {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
.oneField {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0.5em; =
PADDING-TOP: 0.5em
}
.errMsg {
	PADDING-RIGHT: 0.5em; COLOR: #900
}
#captcha {
	BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; MARGIN-TOP: =
3em; BORDER-LEFT: #000 1px solid; BORDER-BOTTOM: #000 1px solid
}
.banner_edit {
	WIDTH: 100%
}
.invite_field {
	WIDTH: 100%
}
.paper-tool-tip {
	Z-INDEX: 13000; WIDTH: 500px; COLOR: #000; TEXT-ALIGN: justify
}
.paper-tool-title {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FONT-WEIGHT: bold; FONT-SIZE: =
11px; BACKGROUND: #c1d0e8; PADDING-BOTTOM: 4px; MARGIN: 0px; COLOR: =
#3e4f14; PADDING-TOP: 8px; BORDER-BOTTOM: #69c 1px solid
}
.paper-tool-text {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FONT-SIZE: 11px; BACKGROUND: =
#d1e3f6; PADDING-BOTTOM: 8px; PADDING-TOP: 4px
}
A.paper-tips {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BACKGROUND-IMAGE: none; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none
}
.tagcloud {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 16px; MARGIN: =
0px 0px 16px; COLOR: #999999; LINE-HEIGHT: 180%; PADDING-TOP: 16px; =
LIST-STYLE-TYPE: none; BACKGROUND-COLOR: #f7f7f7
}
.tagcloud_doc {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; MARGIN: =
0px; COLOR: #999999; LINE-HEIGHT: 180%; PADDING-TOP: 8px; =
LIST-STYLE-TYPE: none; BACKGROUND-COLOR: #fff
}
.tag1 A:link {
	FONT-WEIGHT: 200; FONT-SIZE: 100%; COLOR: #006ff7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag1 A:visited {
	FONT-WEIGHT: 200; FONT-SIZE: 100%; COLOR: #006ff7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag1 A:active {
	FONT-WEIGHT: 200; FONT-SIZE: 100%; COLOR: #006ff7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag2 A:link {
	FONT-WEIGHT: 300; FONT-SIZE: 110%; COLOR: #005fe7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag2 A:visited {
	FONT-WEIGHT: 300; FONT-SIZE: 110%; COLOR: #005fe7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag2 A:active {
	FONT-WEIGHT: 300; FONT-SIZE: 110%; COLOR: #005fe7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag3 A:link {
	FONT-WEIGHT: 500; FONT-SIZE: 120%; COLOR: #004fd7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag3 A:visited {
	FONT-WEIGHT: 500; FONT-SIZE: 120%; COLOR: #004fd7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag3 A:active {
	FONT-WEIGHT: 500; FONT-SIZE: 120%; COLOR: #004fd7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag4 A:link {
	FONT-WEIGHT: 600; FONT-SIZE: 130%; COLOR: #003fc7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag4 A:visited {
	FONT-WEIGHT: 600; FONT-SIZE: 130%; COLOR: #003fc7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag4 A:active {
	FONT-WEIGHT: 600; FONT-SIZE: 130%; COLOR: #003fc7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag5 A:link {
	FONT-WEIGHT: 800; FONT-SIZE: 145%; COLOR: #002fb7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag5 A:visited {
	FONT-WEIGHT: 800; FONT-SIZE: 145%; COLOR: #002fb7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag5 A:active {
	FONT-WEIGHT: 800; FONT-SIZE: 145%; COLOR: #002fb7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag6 A:link {
	FONT-WEIGHT: 900; FONT-SIZE: 160%; COLOR: #001fa7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag6 A:visited {
	FONT-WEIGHT: 900; FONT-SIZE: 160%; COLOR: #001fa7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag6 A:active {
	FONT-WEIGHT: 900; FONT-SIZE: 160%; COLOR: #001fa7; MARGIN-RIGHT: 6px; =
TEXT-DECORATION: none
}
.tag1 {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.tag2 {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.tag3 {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.tag4 {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.tag5 {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.tag6 {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px
}
.tag1 A:hover {
	TEXT-DECORATION: underline
}
.tag2 A:hover {
	TEXT-DECORATION: underline
}
.tag3 A:hover {
	TEXT-DECORATION: underline
}
.tag4 A:hover {
	TEXT-DECORATION: underline
}
.tag5 A:hover {
	TEXT-DECORATION: underline
}
.tag6 A:hover {
	TEXT-DECORATION: underline
}
#delete-conf-Box {
	BORDER-RIGHT: #69c 1px solid; BORDER-TOP: #69c 1px solid; FONT-WEIGHT: =
bold; FONT-SIZE: 15px; PADDING-BOTTOM: 24px; BORDER-LEFT: #69c 1px =
solid; BORDER-BOTTOM: #69c 1px solid; BACKGROUND-COLOR: #c1d0e8
}
#delete-conf-InBox {
	PADDING-TOP: 15px
}
#delete-conf-BoxContent {
	PADDING-RIGHT: 20px; PADDING-LEFT: 20px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#delete-conf-Box INPUT {
	MARGIN: 10px
}
#delete-conf-Box .BoxAlert {
	TEXT-ALIGN: center
}
#delete-conf-Box .BoxConfirm {
	TEXT-ALIGN: center
}
#delete-conf-Box .BoxPrompt {
	TEXT-ALIGN: left
}
.pnotes_container {
	BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BACKGROUND: =
#f7f7f7; PADDING-BOTTOM: 0.5em; BORDER-LEFT: #ccc 1px solid; WIDTH: 99%; =
BORDER-BOTTOM: #ccc 1px solid
}
.pnotes_container H2 {
	PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; PADDING-BOTTOM: 0px; MARGIN: =
0px; FONT: bold 1.1em Verdana, Arial, Helvetica, sans-serif; =
TEXT-TRANSFORM: uppercase; COLOR: #02176e; PADDING-TOP: 0px; =
BORDER-BOTTOM: #999 2px solid; BACKGROUND-COLOR: #8fc0f0; TEXT-ALIGN: =
left
}
.pnotes_container TABLE {
	BORDER-RIGHT: #c1d0e8 thin solid; BORDER-TOP: #c1d0e8 thin solid; =
MARGIN: 0px auto; BORDER-LEFT: #c1d0e8 thin solid; WIDTH: 99%; =
BORDER-BOTTOM: #c1d0e8 thin solid; BORDER-COLLAPSE: collapse
}
.pnotes_container THEAD TH {
	BORDER-RIGHT: #c1d0e8 thin solid; BORDER-TOP: #c1d0e8 thin solid; =
BORDER-LEFT: #c1d0e8 thin solid; BORDER-BOTTOM: #c1d0e8 thin solid; =
TEXT-ALIGN: center
}
.pnotes_container TBODY TD {
	BORDER-RIGHT: #c1d0e8 thin solid; PADDING-RIGHT: 0.2em; BORDER-TOP: =
#c1d0e8 thin solid; PADDING-LEFT: 0.2em; PADDING-BOTTOM: 0.2em; =
BORDER-LEFT: #c1d0e8 thin solid; PADDING-TOP: 0.2em; BORDER-BOTTOM: =
#c1d0e8 thin solid; TEXT-ALIGN: left
}
.datatable {
	BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; MARGIN: 0px =
auto 5px; BORDER-LEFT: #ccc 1px solid; WIDTH: 100%; BORDER-BOTTOM: #ccc =
1px solid
}
.datatable THEAD {
	Z-INDEX: 2; BACKGROUND: #f3f3f3; HEIGHT: 1.2em
}
.datatable THEAD TR {
	WIDTH: auto
}
.datatable THEAD TR TH {
	FONT-WEIGHT: bold; WIDTH: 100px; TEXT-INDENT: 5px; BORDER-BOTTOM: =
#cccccc 2px solid; HEIGHT: 1.2em; TEXT-ALIGN: center
}
.datatable TBODY {
	WIDTH: 100%
}
.datatable TBODY TR {
	VISIBILITY: visible; BORDER-BOTTOM: red 1px solid
}
.datatable TBODY TR TD {
	BORDER-RIGHT: #cccccc 0px solid; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 2px; WIDTH: 100px; PADDING-TOP: 2px
}
.datatable TBODY TR.odd TD {
	BACKGROUND: #ffffff
}
.datatable TBODY TR.even TD {
	BACKGROUND: #f6f6f6
}
.datatable TBODY TR.odd:hover TD {
	BACKGROUND: #feffbf
}
.datatable TBODY TR.even:hover TD {
	BACKGROUND: #feffbf
}
#footer {
	CLEAR: both; BACKGROUND: #fff; FLOAT: left; WIDTH: 100%; TEXT-ALIGN: =
center
}
#footer P {
	FONT-SIZE: 0.9em; COLOR: #999
}
#ist {
	WIDTH: 65px; HEIGHT: 25px
}
#side_nav {
	CLEAR: left; BORDER-RIGHT: #666 1px solid; PADDING-RIGHT: 0px; =
BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 0.5em; BACKGROUND: #f7f7f7; =
FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 2em 1em; BORDER-LEFT: =
#ccc 1px solid; WIDTH: 12.4em; COLOR: #c1d0e8; PADDING-TOP: 0.5em; =
BORDER-BOTTOM: #666 1px solid; FONT-FAMILY: tahoma, verdana, geneva, =
arial, helvetica, sans-serif; LETTER-SPACING: 1px
}
#side_nav UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 0.5em; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#side_nav LI {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0.1em; MARGIN: =
0px; FONT: bold 1.2em Verdana, Arial, Helvetica, sans-serif; =
TEXT-TRANSFORM: uppercase; COLOR: #003466; PADDING-TOP: 0.1em
}
#side_nav LI LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 10px; PADDING-BOTTOM: 1px; MARGIN: =
0px -3px; FONT: 1em Verdana, Arial, Helvetica, sans-serif; =
TEXT-TRANSFORM: capitalize; COLOR: #000; PADDING-TOP: 1px
}
#side_nav LI LI.active {
	BORDER-RIGHT: #000 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #ccc 1px =
solid; PADDING-LEFT: 9px; BACKGROUND: #c1d0e8; PADDING-BOTTOM: 0px; =
BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #666 1px =
solid
}
#side_nav :link {
	DISPLAY: block; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
#side_nav :visited {
	DISPLAY: block; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
#side_nav :hover:link {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #000
}
#side_nav :hover:visited {
	BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #000
}

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/viewdoc/searchbox.css

#search_meta_box {
	Z-INDEX: 2; RIGHT: 20px; TOP: 0px; HEIGHT: 100px; TEXT-ALIGN: right
}
#mcs_search_meta_box {
	Z-INDEX: 2; RIGHT: 20px; TOP: 0px; HEIGHT: 100px; TEXT-ALIGN: right
}
#search_tabs {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; OVERFLOW: hidden; WIDTH: 405px; LINE-HEIGHT: normal; PADDING-TOP: =
0px
}
#mcs_search_tabs {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; OVERFLOW: hidden; WIDTH: 405px; LINE-HEIGHT: normal; PADDING-TOP: =
0px
}
#mcs_search_tabs {
	WIDTH: 305px
}
#search_tabs .mootabs_title {
	PADDING-RIGHT: 0px; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/tab_back_tr.gif) repeat-x 50% bottom; FLOAT: left; =
LIST-STYLE-IMAGE: none; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; =
PADDING-TOP: 10px; LIST-STYLE-TYPE: none
}
#mcs_search_tabs .mootabs_title {
	PADDING-RIGHT: 0px; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/tab_back_tr.gif) repeat-x 50% bottom; FLOAT: left; =
LIST-STYLE-IMAGE: none; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; =
PADDING-TOP: 10px; LIST-STYLE-TYPE: none
}
#search_tabs .mootabs_title LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 9px; BACKGROUND: =
url(../images/tab_norm_lft_dk.gif) no-repeat left top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#mcs_search_tabs .mootabs_title LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 9px; BACKGROUND: =
url(../images/tab_norm_lft_dk.gif) no-repeat left top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#search_tabs .mootabs_title LI.active {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 9px; BACKGROUND: =
url(../images/tab_on_lft_dk.gif) no-repeat left top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#mcs_search_tabs .mootabs_title LI.active {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 9px; BACKGROUND: =
url(../images/tab_on_lft_dk.gif) no-repeat left top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#search_tabs .mootabs_title LI DIV {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 6px; BACKGROUND: =
url(../images/tab_norm_rght_dk.gif) no-repeat right top; FLOAT: left; =
PADDING-BOTTOM: 4px; MARGIN: 0px; CURSOR: pointer; COLOR: #00b; =
PADDING-TOP: 5px
}
#mcs_search_tabs .mootabs_title LI DIV {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 6px; BACKGROUND: =
url(../images/tab_norm_rght_dk.gif) no-repeat right top; FLOAT: left; =
PADDING-BOTTOM: 4px; MARGIN: 0px; CURSOR: pointer; COLOR: #00b; =
PADDING-TOP: 5px
}
#search_tabs .mootabs_title LI.active DIV {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 6px; BACKGROUND: =
url(../images/tab_on_rght_dk.gif) no-repeat right top; FLOAT: left; =
PADDING-BOTTOM: 5px; MARGIN: 0px; CURSOR: pointer; COLOR: #00b; =
PADDING-TOP: 5px
}
#mcs_search_tabs .mootabs_title LI.active DIV {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 6px; BACKGROUND: =
url(../images/tab_on_rght_dk.gif) no-repeat right top; FLOAT: left; =
PADDING-BOTTOM: 5px; MARGIN: 0px; CURSOR: pointer; COLOR: #00b; =
PADDING-TOP: 5px
}
#search_tabs .mootabs_panel {
	CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: none; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 405px; =
PADDING-TOP: 0px; POSITION: relative; BACKGROUND-COLOR: #fff; =
TEXT-ALIGN: right
}
#mcs_search_tabs .mootabs_panel {
	CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: none; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 405px; =
PADDING-TOP: 0px; POSITION: relative; BACKGROUND-COLOR: #fff; =
TEXT-ALIGN: right
}
#mcs_search_tabs .mootabs_panel {
	WIDTH: 305px
}
#search_tabs .active.mootabs_panel {
	DISPLAY: block; BACKGROUND-COLOR: #fff
}
#mcs_search_tabs .mootabs_panel {
	DISPLAY: block; BACKGROUND-COLOR: #fff
}

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/viewdoc/mootabs.css

#tabs_container {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; WIDTH: 100%; LINE-HEIGHT: normal; PADDING-TOP: 0px
}
#tabs_container .mootabs_title {
	PADDING-RIGHT: 0px; PADDING-LEFT: 10px; BACKGROUND: =
url(../images/tab_back_tr.gif) repeat-x 50% bottom; FLOAT: left; =
LIST-STYLE-IMAGE: none; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 99%; =
LINE-HEIGHT: normal; PADDING-TOP: 10px; LIST-STYLE-TYPE: none
}
#tabs_container .mootabs_title LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 9px; BACKGROUND: =
url(../images/tab_norm_lft.gif) no-repeat left top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#tabs_container .mootabs_title LI.active {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 9px; BACKGROUND: =
url(../images/tab_on_lft_dk.gif) no-repeat left top; FLOAT: left; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#tabs_container .mootabs_title LI DIV {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 6px; BACKGROUND: =
url(../images/tab_norm_rght_dk.gif) no-repeat right top; FLOAT: left; =
PADDING-BOTTOM: 4px; MARGIN: 0px; CURSOR: pointer; COLOR: #00b; =
PADDING-TOP: 5px
}
#tabs_container .mootabs_title LI.active DIV {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 6px; BACKGROUND: =
url(../images/tab_on_rght_dk.gif) no-repeat right top; FLOAT: left; =
PADDING-BOTTOM: 5px; MARGIN: 0px; CURSOR: pointer; COLOR: #00b; =
PADDING-TOP: 5px
}
#tabs_container .mootabs_panel {
	CLEAR: both; PADDING-RIGHT: 0px; DISPLAY: none; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; PADDING-TOP: 0px; =
POSITION: relative; BACKGROUND-COLOR: #fff
}
#tabs_container .active.mootabs_panel {
	DISPLAY: block; BACKGROUND-COLOR: #fff
}
.panel_content {
	CLEAR: both; BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 0px; =
PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: =
#02176e 1px solid; WIDTH: 100%; BORDER-TOP-STYLE: none; PADDING-TOP: =
0px; BORDER-BOTTOM: #ccc 1px solid
}

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Location: http://citeseerx.ist.psu.edu/css/csxsecondary.css

@import url( secondarylayout.css );
@import url( secondarycustomize.css );
@import url( searchbox.css );
@import url( mootabs.css );

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/css/wforms.css

FORM.wform {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0.8em 0px 1.6em; PADDING-TOP: 0px
}
.wform FIELDSET {
	BORDER-RIGHT: #c1d0e8 1px solid; PADDING-RIGHT: 1em; BORDER-TOP: =
#c1d0e8 1px solid; PADDING-LEFT: 1em; PADDING-BOTTOM: 1.2em; MARGIN: 0px =
0px 1em; BORDER-LEFT: #c1d0e8 1px solid; PADDING-TOP: 0.5em; =
BORDER-BOTTOM: #c1d0e8 1px solid
}
.wform LEGEND {
	BORDER-RIGHT: #000000 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: =
#000000 1px solid; PADDING-LEFT: 2px; FONT-WEIGHT: bold; PADDING-BOTTOM: =
0px; MARGIN: 0px; BORDER-LEFT: #000000 1px solid; PADDING-TOP: 0px; =
BORDER-BOTTOM: #000000 1px solid; BACKGROUND-COLOR: #c1d0e8
}
.wform LABEL.preField {
	PADDING-RIGHT: 2px; MIN-WIDTH: 13em; DISPLAY: block; PADDING-LEFT: 0px; =
FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
.labelsLeftAligned LABEL.preField {
	PADDING-RIGHT: 2px; MIN-WIDTH: 13em; DISPLAY: block; PADDING-LEFT: 0px; =
FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
.labelsRightAligned LABEL.preField {
	PADDING-RIGHT: 2px; MIN-WIDTH: 13em; DISPLAY: block; PADDING-LEFT: 0px; =
FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
.wform .labelsAbove LABEL.preField {
	DISPLAY: block; FLOAT: none; WIDTH: auto
}
FORM.wform .labelsLeftAligned LABEL.preField {
	FLOAT: left
}
FORM.wform .labelsRightAligned LABEL.preField {
	FLOAT: left
}
FORM.wform .labelsAbove LABEL.preField {
	FLOAT: none
}
.wform .labelsLeftAligned LABEL.preField {
	TEXT-ALIGN: left
}
.wform .labelsRightAligned LABEL.preField {
	TEXT-ALIGN: right
}
.wform LABEL.postField {
	MARGIN-LEFT: 4px; MARGIN-RIGHT: 4px
}
.wform TEXTAREA {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 1px =
0px; VERTICAL-ALIGN: top; PADDING-TOP: 0px
}
.wform INPUT {
=09
}
.wform SELECT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
FORM.wform .instructions {
	MARGIN: 1em 0px
}
FORM.wform .oneChoice {
	WHITE-SPACE: nowrap
}
FORM.wform .oneChoicePerLine .oneChoice {
	DISPLAY: block
}
.wform .labelsLeftAligned .oneChoicePerLine .oneChoice {
	MARGIN-LEFT: 13em
}
.labelsRightAligned .oneChoicePerLine .oneChoice {
	MARGIN-LEFT: 13em
}
.reqMark {
	FONT-SIZE: xx-small; MARGIN-LEFT: 5px; COLOR: #f00
}
FORM.wform .oneField {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; MARGIN-BOTTOM: =
0.75em; PADDING-BOTTOM: 2px; PADDING-TOP: 2px
}
FORM.wform .inlineSection {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 2px; OVERFLOW: =
auto; WIDTH: 100%; PADDING-TOP: 2px
}
FORM.wform .inlineSection .oneField {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN-RIGHT: 4px; PADDING-TOP: 0px
}
FORM.wform .inlineSection .inlineLabel {
	PADDING-RIGHT: 2px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.labelsLeftAligned .inlineSection .oneField .inlineLabel {
	PADDING-RIGHT: 2px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.labelsRightAligned .inlineSection .oneField .inlineLabel {
	PADDING-RIGHT: 2px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.wform .labelsAbove .inlineSection .oneField .inlineLabel {
	DISPLAY: block; WHITE-SPACE: normal
}
.wform .labelsLeftAligned .inlineSection .oneChoicePerLine .oneChoice {
	MARGIN-LEFT: 0px
}
.labelsRightAligned .inlineSection .oneChoicePerLine .oneChoice {
	MARGIN-LEFT: 0px
}
FORM.wform TABLE {
=09
}
FORM.wform TD {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
FORM.wform TH {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
FORM.wform .errFld {
	BORDER-RIGHT: #f00 1px solid; BORDER-TOP: #f00 1px solid; BORDER-LEFT: =
#f00 1px solid; BORDER-BOTTOM: #f00 1px solid
}
.errMsg {
	DISPLAY: block; COLOR: #cc3333! important
}
FORM.wform .field-hint {
	DISPLAY: inline; COLOR: #333
}
FORM.wform .field-hint-inactive {
	DISPLAY: inline; COLOR: #ccc
}
FORM.hintsTooltip .field-hint {
	PADDING-RIGHT: 0px; BACKGROUND-POSITION: left top; DISPLAY: block; =
PADDING-LEFT: 0px; Z-INDEX: 50; BACKGROUND-IMAGE: =
url(../images/hint_topborder.gif); PADDING-BOTTOM: 0px; MARGIN: 2px 0px =
0px 10px; WIDTH: 180px; PADDING-TOP: 14px; BACKGROUND-REPEAT: no-repeat; =
POSITION: absolute
}
FORM.hintsTooltip .field-hint SPAN {
	BORDER-RIGHT: #ffc20d 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: =
#ffc20d 0px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: =
#ffc20d 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ffc20d 1px solid; =
BACKGROUND-COLOR: #fffbb8
}
FORM.hintsTooltip .field-hint SPAN {
	DISPLAY: block
}
FORM.hintsTooltip .field-hint-inactive {
	DISPLAY: block; VISIBILITY: hidden; POSITION: absolute
}
FORM.wform DIV.repeat {
	PADDING-RIGHT: 3px
}
FORM.wform DIV.removeable {
	PADDING-RIGHT: 3px
}
FORM.wform .duplicateLink {
	DISPLAY: block; TEXT-ALIGN: right
}
FORM.wform .removeLink {
	DISPLAY: block; TEXT-ALIGN: right
}
FORM.wform TD .duplicateLink {
=09
}
FORM TD .removeLink {
=09
}
FORM.wform .onstate-a {
	DISPLAY: block! important
}
FORM.wform .onstate-b {
	DISPLAY: block! important
}
FORM.wform .onstate-c {
	DISPLAY: block! important
}
FORM.wform .onstate-d {
	DISPLAY: block! important
}
FORM.wform .onstate-e {
	DISPLAY: block! important
}
FORM.wform .onstate-f {
	DISPLAY: block! important
}
FORM.wform .onstate-g {
	DISPLAY: block! important
}
FORM.wform .onstate-h {
	DISPLAY: block! important
}
FORM.wform .onstate-i {
	DISPLAY: block! important
}
FORM.wform .onstate-j {
	DISPLAY: block! important
}
FORM.wform .onstate-k {
	DISPLAY: block! important
}
FORM.wform .onstate-l {
	DISPLAY: block! important
}
FORM.wform .onstate-m {
	DISPLAY: block! important
}
FORM.wform .onstate-n {
	DISPLAY: block! important
}
FORM.wform .onstate-o {
	DISPLAY: block! important
}
FORM.wform .onstate-p {
	DISPLAY: block! important
}
FORM.wform .onstate-q {
	DISPLAY: block! important
}
FORM.wform .onstate-r {
	DISPLAY: block! important
}
FORM.wform .onstate-s {
	DISPLAY: block! important
}
FORM.wform .onstate-t {
	DISPLAY: block! important
}
FORM.wform .onstate-u {
	DISPLAY: block! important
}
FORM.wform .onstate-v {
	DISPLAY: block! important
}
FORM.wform .onstate-w {
	DISPLAY: block! important
}
FORM.wform .onstate-x {
	DISPLAY: block! important
}
FORM.wform .onstate-y {
	DISPLAY: block! important
}
FORM.wform .onstate-z {
	DISPLAY: block! important
}
FORM.wform .onstate-aa {
	DISPLAY: block! important
}
FORM.wform .onstate-ab {
	DISPLAY: block! important
}
FORM.wform .onstate-ac {
	DISPLAY: block! important
}
FORM.wform .onstate-ad {
	DISPLAY: block! important
}
FORM.wform .onstate-ae {
	DISPLAY: block! important
}
FORM.wform .onstate-af {
	DISPLAY: block! important
}
FORM.wform .onstate-ag {
	DISPLAY: block! important
}
FORM.wform .onstate-ah {
	DISPLAY: block! important
}
FORM.wform .onstate-ai {
	DISPLAY: block! important
}
FORM.wform .onstate-aj {
	DISPLAY: block! important
}
FORM.wform .onstate-ak {
	DISPLAY: block! important
}
FORM.wform .onstate-al {
	DISPLAY: block! important
}
FORM.wform .onstate-am {
	DISPLAY: block! important
}
FORM.wform .onstate-an {
	DISPLAY: block! important
}
FORM.wform .onstate-ao {
	DISPLAY: block! important
}
FORM.wform .onstate-ap {
	DISPLAY: block! important
}
FORM.wform .onstate-aq {
	DISPLAY: block! important
}
FORM.wform .onstate-ar {
	DISPLAY: block! important
}
FORM.wform .onstate-as {
	DISPLAY: block! important
}
FORM.wform .onstate-at {
	DISPLAY: block! important
}
FORM.wform .onstate-au {
	DISPLAY: block! important
}
FORM.wform .onstate-av {
	DISPLAY: block! important
}
FORM.wform .onstate-aw {
	DISPLAY: block! important
}
FORM.wform .onstate-ax {
	DISPLAY: block! important
}
FORM.wform .onstate-ay {
	DISPLAY: block! important
}
FORM.wform .onstate-az {
	DISPLAY: block! important
}
FORM.wform .onstate-ba {
	DISPLAY: block! important
}
FORM.wform .onstate-bb {
	DISPLAY: block! important
}
FORM.wform .onstate-bc {
	DISPLAY: block! important
}
FORM.wform .onstate-bd {
	DISPLAY: block! important
}
FORM.wform .onstate-be {
	DISPLAY: block! important
}
FORM.wform .onstate-bf {
	DISPLAY: block! important
}
FORM.wform .onstate-bg {
	DISPLAY: block! important
}
FORM.wform .onstate-bh {
	DISPLAY: block! important
}
FORM.wform .onstate-bi {
	DISPLAY: block! important
}
FORM.wform .onstate-bj {
	DISPLAY: block! important
}
FORM.wform .onstate-bk {
	DISPLAY: block! important
}
FORM.wform .onstate-bl {
	DISPLAY: block! important
}
FORM.wform .actions {
	MARGIN: 20px 0px 10px
}
FORM.wform .actions .primaryAction {
	PADDING-RIGHT: 15px; PADDING-LEFT: 15px; PADDING-BOTTOM: 4px; =
PADDING-TOP: 4px
}
FORM.wform .actions .secondaryAction {
	PADDING-RIGHT: 15px; PADDING-LEFT: 15px; PADDING-BOTTOM: 4px; =
PADDING-TOP: 4px
}
FORM.wform .actions .secondaryAction:hover {
=09
}
FORM.wform .wfPagingButtons .wfPagePreviousButton {
	PADDING-RIGHT: 15px; PADDING-LEFT: 15px; PADDING-BOTTOM: 4px; =
MARGIN-RIGHT: 15px; PADDING-TOP: 4px
}
FORM.wform .wfPagingButtons .wfPageNextButton {
	PADDING-RIGHT: 15px; PADDING-LEFT: 15px; PADDING-BOTTOM: 4px; =
PADDING-TOP: 4px
}
FORM.wform .actions .primaryAction {
	TEXT-TRANSFORM: capitalize
}
FORM.wform .actions .secondaryAction {
	TEXT-TRANSFORM: capitalize
}
FORM.wform {
=09
}
FORM.wform FIELDSET {
=09
}
FORM.wform FIELDSET LEGEND {
=09
}

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/css/niftyCorners.css

B.niftycorners {
	DISPLAY: block
}
B.niftyfill {
	DISPLAY: block
}
B.niftycorners * {
	BORDER-RIGHT: 1px solid; BORDER-TOP: 0px solid; DISPLAY: block; =
FONT-SIZE: 1px; OVERFLOW: hidden; BORDER-LEFT: 1px solid; LINE-HEIGHT: =
1px; BORDER-BOTTOM: 0px solid; HEIGHT: 1px
}
B.r1 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 2px; BORDER-BOTTOM-WIDTH: =
0px; MARGIN: 0px 3px; BORDER-RIGHT-WIDTH: 2px
}
B.r2 {
	MARGIN: 0px 2px
}
B.r3 {
	MARGIN: 0px 1px
}
B.r4 {
	HEIGHT: 2px
}
B.rb1 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 2px; BORDER-BOTTOM-WIDTH: =
0px; MARGIN: 0px 8px; BORDER-RIGHT-WIDTH: 2px
}
B.rb2 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 2px; BORDER-BOTTOM-WIDTH: =
0px; MARGIN: 0px 6px; BORDER-RIGHT-WIDTH: 2px
}
B.rb3 {
	MARGIN: 0px 5px
}
B.rb4 {
	MARGIN: 0px 4px
}
B.rb5 {
	MARGIN: 0px 3px
}
B.rb6 {
	MARGIN: 0px 2px
}
B.rb7 {
	MARGIN: 0px 1px; HEIGHT: 2px
}
B.rb8 {
	MARGIN: 0px; HEIGHT: 2px
}
B.rs1 {
	MARGIN: 0px 1px
}
B.t1 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 5px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 5px
}
B.t2 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 3px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 3px
}
B.t3 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 2px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 2px
}
B.t4 {
	HEIGHT: 2px
}
B.tb1 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 10px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 10px
}
B.tb2 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 8px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 8px
}
B.tb3 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 6px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 6px
}
B.tb4 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 5px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 5px
}
B.tb5 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 4px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 4px
}
B.tb6 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 3px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 3px
}
B.tb7 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 2px; BORDER-BOTTOM-WIDTH: =
0px; HEIGHT: 2px; BORDER-RIGHT-WIDTH: 2px
}
B.tb8 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: =
0px; HEIGHT: 2px; BORDER-RIGHT-WIDTH: 1px
}
B.ts1 {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 2px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 2px
}

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/dwr/interface/MetadataCartJS.js


function MetadataCartJS() { }
MetadataCartJS._path =3D '/dwr';
=0A=
MetadataCartJS.addToCart =3D function(p0, callback) {
    DWREngine._execute(MetadataCartJS._path, 'MetadataCartJS', =
'addToCart', p0, callback);
}
=0A=
MetadataCartJS.addToCart =3D function(p1, callback) {
    DWREngine._execute(MetadataCartJS._path, 'MetadataCartJS', =
'addToCart', false, p1, callback);
}
=0A=
MetadataCartJS.removeFromCart =3D function(p0, callback) {
    DWREngine._execute(MetadataCartJS._path, 'MetadataCartJS', =
'removeFromCart', p0, callback);
}
=0A=
MetadataCartJS.removeFromCart =3D function(p1, callback) {
    DWREngine._execute(MetadataCartJS._path, 'MetadataCartJS', =
'removeFromCart', false, p1, callback);
}

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/dwr/engine.js

=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
if (DWREngine =3D=3D null) var DWREngine =3D {};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setErrorHandler =3D function(handler) {=0A=
DWREngine._errorHandler =3D handler;=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setWarningHandler =3D function(handler) {=0A=
DWREngine._warningHandler =3D handler;=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setTimeout =3D function(timeout) {=0A=
DWREngine._timeout =3D timeout;=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setPreHook =3D function(handler) {=0A=
DWREngine._preHook =3D handler;=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setPostHook =3D function(handler) {=0A=
DWREngine._postHook =3D handler;=0A=
};=0A=
=0A=
=0A=
DWREngine.XMLHttpRequest =3D 1;=0A=
=0A=
=0A=
DWREngine.IFrame =3D 2;=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setMethod =3D function(newMethod) {=0A=
if (newMethod !=3D DWREngine.XMLHttpRequest && newMethod !=3D =
DWREngine.IFrame) {=0A=
DWREngine._handleError("Remoting method must be one of =
DWREngine.XMLHttpRequest or DWREngine.IFrame");=0A=
return;=0A=
}=0A=
DWREngine._method =3D newMethod;=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setVerb =3D function(verb) {=0A=
if (verb !=3D "GET" && verb !=3D "POST") {=0A=
DWREngine._handleError("Remoting verb must be one of GET or POST");=0A=
return;=0A=
}=0A=
DWREngine._verb =3D verb;=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setOrdered =3D function(ordered) {=0A=
DWREngine._ordered =3D ordered;=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setAsync =3D function(async) {=0A=
DWREngine._async =3D async;=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.setTextHtmlHandler =3D function(handler) {=0A=
DWREngine._textHtmlHandler =3D handler;=0A=
}=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.defaultMessageHandler =3D function(message) {=0A=
if (typeof message =3D=3D "object" && message.name =3D=3D "Error" && =
message.description) {=0A=
alert("Error: " + message.description);=0A=
}=0A=
else {=0A=
=0A=
if (message.toString().indexOf("0x80040111") =3D=3D -1) {=0A=
alert(message);=0A=
}=0A=
}=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.beginBatch =3D function() {=0A=
if (DWREngine._batch) {=0A=
DWREngine._handleError("Batch already started.");=0A=
return;=0A=
}=0A=
=0A=
DWREngine._batch =3D {=0A=
map:{ callCount:0 },=0A=
paramCount:0,=0A=
ids:[],=0A=
preHooks:[],=0A=
postHooks:[]=0A=
};=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine.endBatch =3D function(options) {=0A=
var batch =3D DWREngine._batch;=0A=
if (batch =3D=3D null) {=0A=
DWREngine._handleError("No batch in progress.");=0A=
return;=0A=
}=0A=
=0A=
if (options && options.preHook) batch.preHooks.unshift(options.preHook);=0A=
if (options && options.postHook) batch.postHooks.push(options.postHook);=0A=
if (DWREngine._preHook) batch.preHooks.unshift(DWREngine._preHook);=0A=
if (DWREngine._postHook) batch.postHooks.push(DWREngine._postHook);=0A=
=0A=
if (batch.method =3D=3D null) batch.method =3D DWREngine._method;=0A=
if (batch.verb =3D=3D null) batch.verb =3D DWREngine._verb;=0A=
if (batch.async =3D=3D null) batch.async =3D DWREngine._async;=0A=
if (batch.timeout =3D=3D null) batch.timeout =3D DWREngine._timeout;=0A=
=0A=
batch.completed =3D false;=0A=
=0A=
=0A=
DWREngine._batch =3D null;=0A=
=0A=
=0A=
=0A=
if (!DWREngine._ordered) {=0A=
DWREngine._sendData(batch);=0A=
DWREngine._batches[DWREngine._batches.length] =3D batch;=0A=
}=0A=
else {=0A=
if (DWREngine._batches.length =3D=3D 0) {=0A=
=0A=
DWREngine._sendData(batch);=0A=
DWREngine._batches[DWREngine._batches.length] =3D batch;=0A=
}=0A=
else {=0A=
=0A=
DWREngine._batchQueue[DWREngine._batchQueue.length] =3D batch;=0A=
}=0A=
}=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine._errorHandler =3D DWREngine.defaultMessageHandler;=0A=
=0A=
=0A=
DWREngine._warningHandler =3D null;=0A=
=0A=
=0A=
DWREngine._preHook =3D null;=0A=
=0A=
=0A=
DWREngine._postHook =3D null;=0A=
=0A=
=0A=
DWREngine._batches =3D [];=0A=
=0A=
=0A=
DWREngine._batchQueue =3D [];=0A=
=0A=
=0A=
DWREngine._handlersMap =3D {};=0A=
=0A=
=0A=
DWREngine._method =3D DWREngine.XMLHttpRequest;=0A=
=0A=
=0A=
DWREngine._verb =3D "POST";=0A=
=0A=
=0A=
DWREngine._ordered =3D false;=0A=
=0A=
=0A=
DWREngine._async =3D true;=0A=
=0A=
=0A=
DWREngine._batch =3D null;=0A=
=0A=
=0A=
DWREngine._timeout =3D 0;=0A=
=0A=
=0A=
DWREngine._DOMDocument =3D ["Msxml2.DOMDocument.6.0", =
"Msxml2.DOMDocument.5.0", "Msxml2.DOMDocument.4.0", =
"Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", =
"Microsoft.XMLDOM"];=0A=
=0A=
=0A=
DWREngine._XMLHTTP =3D ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", =
"Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", =
"Microsoft.XMLHTTP"];=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine._execute =3D function(path, scriptName, methodName, =
vararg_params) {=0A=
var singleShot =3D false;=0A=
if (DWREngine._batch =3D=3D null) {=0A=
DWREngine.beginBatch();=0A=
singleShot =3D true;=0A=
}=0A=
=0A=
var args =3D [];=0A=
for (var i =3D 0; i < arguments.length - 3; i++) {=0A=
args[i] =3D arguments[i + 3];=0A=
}=0A=
=0A=
if (DWREngine._batch.path =3D=3D null) {=0A=
DWREngine._batch.path =3D path;=0A=
}=0A=
else {=0A=
if (DWREngine._batch.path !=3D path) {=0A=
DWREngine._handleError("Can't batch requests to multiple DWR Servlets.");=0A=
return;=0A=
}=0A=
}=0A=
=0A=
=0A=
var params;=0A=
var callData;=0A=
var firstArg =3D args[0];=0A=
var lastArg =3D args[args.length - 1];=0A=
=0A=
if (typeof firstArg =3D=3D "function") {=0A=
callData =3D { callback:args.shift() };=0A=
params =3D args;=0A=
}=0A=
else if (typeof lastArg =3D=3D "function") {=0A=
callData =3D { callback:args.pop() };=0A=
params =3D args;=0A=
}=0A=
else if (lastArg !=3D null && typeof lastArg =3D=3D "object" && =
lastArg.callback !=3D null && typeof lastArg.callback =3D=3D "function") =
{=0A=
callData =3D args.pop();=0A=
params =3D args;=0A=
}=0A=
else if (firstArg =3D=3D null) {=0A=
=0A=
=0A=
=0A=
if (lastArg =3D=3D null && args.length > 2) {=0A=
DWREngine._handleError("Ambiguous nulls at start and end of parameter =
list. Which is the callback function?");=0A=
}=0A=
callData =3D { callback:args.shift() };=0A=
params =3D args;=0A=
}=0A=
else if (lastArg =3D=3D null) {=0A=
callData =3D { callback:args.pop() };=0A=
params =3D args;=0A=
}=0A=
else {=0A=
DWREngine._handleError("Missing callback function or metadata object.");=0A=
return;=0A=
}=0A=
=0A=
=0A=
var random =3D Math.floor(Math.random() * 10001);=0A=
var id =3D (random + "_" + new Date().getTime()).toString();=0A=
var prefix =3D "c" + DWREngine._batch.map.callCount + "-";=0A=
DWREngine._batch.ids.push(id);=0A=
=0A=
=0A=
if (callData.method !=3D null) {=0A=
DWREngine._batch.method =3D callData.method;=0A=
delete callData.method;=0A=
}=0A=
if (callData.verb !=3D null) {=0A=
DWREngine._batch.verb =3D callData.verb;=0A=
delete callData.verb;=0A=
}=0A=
if (callData.async !=3D null) {=0A=
DWREngine._batch.async =3D callData.async;=0A=
delete callData.async;=0A=
}=0A=
if (callData.timeout !=3D null) {=0A=
DWREngine._batch.timeout =3D callData.timeout;=0A=
delete callData.timeout;=0A=
}=0A=
=0A=
=0A=
if (callData.preHook !=3D null) {=0A=
DWREngine._batch.preHooks.unshift(callData.preHook);=0A=
delete callData.preHook;=0A=
}=0A=
if (callData.postHook !=3D null) {=0A=
DWREngine._batch.postHooks.push(callData.postHook);=0A=
delete callData.postHook;=0A=
}=0A=
=0A=
=0A=
if (callData.errorHandler =3D=3D null) callData.errorHandler =3D =
DWREngine._errorHandler;=0A=
if (callData.warningHandler =3D=3D null) callData.warningHandler =3D =
DWREngine._warningHandler;=0A=
=0A=
=0A=
DWREngine._handlersMap[id] =3D callData;=0A=
=0A=
DWREngine._batch.map[prefix + "scriptName"] =3D scriptName;=0A=
DWREngine._batch.map[prefix + "methodName"] =3D methodName;=0A=
DWREngine._batch.map[prefix + "id"] =3D id;=0A=
=0A=
=0A=
for (i =3D 0; i < params.length; i++) {=0A=
DWREngine._serializeAll(DWREngine._batch, [], params[i], prefix + =
"param" + i);=0A=
}=0A=
=0A=
=0A=
DWREngine._batch.map.callCount++;=0A=
if (singleShot) {=0A=
DWREngine.endBatch();=0A=
}=0A=
};=0A=
=0A=
=0A=
DWREngine._sendData =3D function(batch) {=0A=
=0A=
if (batch.map.callCount =3D=3D 0) return;=0A=
=0A=
for (var i =3D 0; i < batch.preHooks.length; i++) {=0A=
batch.preHooks[i]();=0A=
}=0A=
batch.preHooks =3D null;=0A=
=0A=
if (batch.timeout && batch.timeout !=3D 0) {=0A=
batch.interval =3D setInterval(function() { =
DWREngine._abortRequest(batch); }, batch.timeout);=0A=
}=0A=
=0A=
var urlPostfix;=0A=
if (batch.map.callCount =3D=3D 1) {=0A=
urlPostfix =3D batch.map["c0-scriptName"] + "." + =
batch.map["c0-methodName"] + ".dwr";=0A=
}=0A=
else {=0A=
urlPostfix =3D "Multiple." + batch.map.callCount + ".dwr";=0A=
}=0A=
=0A=
=0A=
if (batch.method =3D=3D DWREngine.XMLHttpRequest) {=0A=
if (window.XMLHttpRequest) {=0A=
batch.req =3D new XMLHttpRequest();=0A=
}=0A=
=0A=
else if (window.ActiveXObject && !(navigator.userAgent.indexOf("Mac") =
>=3D 0 && navigator.userAgent.indexOf("MSIE") >=3D 0)) {=0A=
batch.req =3D DWREngine._newActiveXObject(DWREngine._XMLHTTP);=0A=
}=0A=
}=0A=
=0A=
var query =3D "";=0A=
var prop;=0A=
=0A=
=0A=
if (batch.req) {=0A=
batch.map.xml =3D "true";=0A=
=0A=
if (batch.async) {=0A=
batch.req.onreadystatechange =3D function() { =
DWREngine._stateChange(batch); };=0A=
}=0A=
=0A=
var indexSafari =3D navigator.userAgent.indexOf("Safari/");=0A=
if (indexSafari >=3D 0) {=0A=
var version =3D navigator.userAgent.substring(indexSafari + 7);=0A=
if (parseInt(version, 10) < 400) batch.verb =3D=3D "GET";=0A=
}=0A=
if (batch.verb =3D=3D "GET") {=0A=
=0A=
=0A=
=0A=
batch.map.callCount =3D "" + batch.map.callCount;=0A=
=0A=
for (prop in batch.map) {=0A=
var qkey =3D encodeURIComponent(prop);=0A=
var qval =3D encodeURIComponent(batch.map[prop]);=0A=
if (qval =3D=3D "") DWREngine._handleError("Found empty qval for =
qkey=3D" + qkey);=0A=
query +=3D qkey + "=3D" + qval + "&";=0A=
}=0A=
=0A=
try {=0A=
batch.req.open("GET", batch.path + "/exec/" + urlPostfix + "?" + query, =
batch.async);=0A=
batch.req.send(null);=0A=
if (!batch.async) DWREngine._stateChange(batch);=0A=
}=0A=
catch (ex) {=0A=
DWREngine._handleMetaDataError(null, ex);=0A=
}=0A=
}=0A=
else {=0A=
for (prop in batch.map) {=0A=
if (typeof batch.map[prop] !=3D "function") {=0A=
query +=3D prop + "=3D" + batch.map[prop] + "\n";=0A=
}=0A=
}=0A=
=0A=
try {=0A=
batch.req.open("POST", batch.path + "/exec/" + urlPostfix, batch.async);=0A=
batch.req.setRequestHeader('Content-Type', 'text/plain');=0A=
batch.req.send(query);=0A=
if (!batch.async) DWREngine._stateChange(batch);=0A=
}=0A=
catch (ex) {=0A=
DWREngine._handleMetaDataError(null, ex);=0A=
}=0A=
}=0A=
}=0A=
else {=0A=
batch.map.xml =3D "false";=0A=
var idname =3D "dwr-if-" + batch.map["c0-id"];=0A=
=0A=
batch.div =3D document.createElement("div");=0A=
batch.div.innerHTML =3D "<iframe src=3D'javascript:void(0)' =
frameborder=3D'0' width=3D'0' height=3D'0' id=3D'" + idname + "' =
name=3D'" + idname + "'></iframe>";=0A=
document.body.appendChild(batch.div);=0A=
batch.iframe =3D document.getElementById(idname);=0A=
batch.iframe.setAttribute("style", "width:0px; height:0px; border:0px;");=0A=
=0A=
if (batch.verb =3D=3D "GET") {=0A=
for (prop in batch.map) {=0A=
if (typeof batch.map[prop] !=3D "function") {=0A=
query +=3D encodeURIComponent(prop) + "=3D" + =
encodeURIComponent(batch.map[prop]) + "&";=0A=
}=0A=
}=0A=
query =3D query.substring(0, query.length - 1);=0A=
=0A=
batch.iframe.setAttribute("src", batch.path + "/exec/" + urlPostfix + =
"?" + query);=0A=
document.body.appendChild(batch.iframe);=0A=
}=0A=
else {=0A=
batch.form =3D document.createElement("form");=0A=
batch.form.setAttribute("id", "dwr-form");=0A=
batch.form.setAttribute("action", batch.path + "/exec" + urlPostfix);=0A=
batch.form.setAttribute("target", idname);=0A=
batch.form.target =3D idname;=0A=
batch.form.setAttribute("method", "POST");=0A=
for (prop in batch.map) {=0A=
var formInput =3D document.createElement("input");=0A=
formInput.setAttribute("type", "hidden");=0A=
formInput.setAttribute("name", prop);=0A=
formInput.setAttribute("value", batch.map[prop]);=0A=
batch.form.appendChild(formInput);=0A=
}=0A=
document.body.appendChild(batch.form);=0A=
batch.form.submit();=0A=
}=0A=
}=0A=
};=0A=
=0A=
=0A=
DWREngine._stateChange =3D function(batch) {=0A=
if (!batch.completed && batch.req.readyState =3D=3D 4) {=0A=
try {=0A=
var reply =3D batch.req.responseText;=0A=
=0A=
if (reply =3D=3D null || reply =3D=3D "") {=0A=
DWREngine._handleMetaDataWarning(null, "No data received from server");=0A=
}=0A=
else {=0A=
var contentType =3D batch.req.getResponseHeader("Content-Type");=0A=
if (!contentType.match(/^text\/plain/) && =
!contentType.match(/^text\/javascript/)) {=0A=
if (DWREngine._textHtmlHandler && contentType.match(/^text\/html/)) {=0A=
DWREngine._textHtmlHandler();=0A=
}=0A=
else {=0A=
DWREngine._handleMetaDataWarning(null, "Invalid content type from =
server: '" + contentType + "'");=0A=
}=0A=
}=0A=
else {=0A=
=0A=
=0A=
=0A=
if (reply.search("DWREngine._handle") =3D=3D -1) {=0A=
DWREngine._handleMetaDataWarning(null, "Invalid reply from server");=0A=
}=0A=
else {=0A=
eval(reply);=0A=
}=0A=
}=0A=
}=0A=
=0A=
=0A=
DWREngine._clearUp(batch);=0A=
}=0A=
catch (ex) {=0A=
if (ex =3D=3D null) ex =3D "Unknown error occured";=0A=
DWREngine._handleMetaDataWarning(null, ex);=0A=
}=0A=
finally {=0A=
=0A=
=0A=
=0A=
if (DWREngine._batchQueue.length !=3D 0) {=0A=
var sendbatch =3D DWREngine._batchQueue.shift();=0A=
DWREngine._sendData(sendbatch);=0A=
DWREngine._batches[DWREngine._batches.length] =3D sendbatch;=0A=
}=0A=
}=0A=
}=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine._handleResponse =3D function(id, reply) {=0A=
=0A=
var handlers =3D DWREngine._handlersMap[id];=0A=
DWREngine._handlersMap[id] =3D null;=0A=
=0A=
if (handlers) {=0A=
=0A=
=0A=
try {=0A=
if (handlers.callback) handlers.callback(reply);=0A=
}=0A=
catch (ex) {=0A=
DWREngine._handleMetaDataError(handlers, ex);=0A=
}=0A=
}=0A=
=0A=
=0A=
if (DWREngine._method =3D=3D DWREngine.IFrame) {=0A=
var responseBatch =3D DWREngine._batches[DWREngine._batches.length-1];=0A=
=0A=
if (responseBatch.map["c"+(responseBatch.map.callCount-1)+"-id"] =3D=3D =
id) {=0A=
DWREngine._clearUp(responseBatch);=0A=
}=0A=
}=0A=
};=0A=
=0A=
=0A=
DWREngine._handleServerError =3D function(id, error) {=0A=
=0A=
var handlers =3D DWREngine._handlersMap[id];=0A=
DWREngine._handlersMap[id] =3D null;=0A=
=0A=
if (error.message) DWREngine._handleMetaDataError(handlers, =
error.message, error);=0A=
else DWREngine._handleMetaDataError(handlers, error);=0A=
};=0A=
=0A=
=0A=
DWREngine._eval =3D function(script) {=0A=
return eval(script);=0A=
}=0A=
=0A=
=0A=
DWREngine._abortRequest =3D function(batch) {=0A=
if (batch && !batch.completed) {=0A=
clearInterval(batch.interval);=0A=
DWREngine._clearUp(batch);=0A=
if (batch.req) batch.req.abort();=0A=
=0A=
var handlers;=0A=
for (var i =3D 0; i < batch.ids.length; i++) {=0A=
handlers =3D DWREngine._handlersMap[batch.ids[i]];=0A=
DWREngine._handleMetaDataError(handlers, "Timeout");=0A=
}=0A=
}=0A=
};=0A=
=0A=
=0A=
DWREngine._clearUp =3D function(batch) {=0A=
if (batch.completed) {=0A=
DWREngine._handleError("Double complete");=0A=
return;=0A=
}=0A=
=0A=
=0A=
if (batch.div) batch.div.parentNode.removeChild(batch.div);=0A=
if (batch.iframe) batch.iframe.parentNode.removeChild(batch.iframe);=0A=
if (batch.form) batch.form.parentNode.removeChild(batch.form);=0A=
=0A=
=0A=
if (batch.req) delete batch.req;=0A=
=0A=
for (var i =3D 0; i < batch.postHooks.length; i++) {=0A=
batch.postHooks[i]();=0A=
}=0A=
batch.postHooks =3D null;=0A=
=0A=
=0A=
for (var i =3D 0; i < DWREngine._batches.length; i++) {=0A=
if (DWREngine._batches[i] =3D=3D batch) {=0A=
DWREngine._batches.splice(i, 1);=0A=
break;=0A=
}=0A=
}=0A=
=0A=
batch.completed =3D true;=0A=
};=0A=
=0A=
=0A=
DWREngine._handleError =3D function(reason, ex) {=0A=
if (DWREngine._errorHandler) DWREngine._errorHandler(reason, ex);=0A=
};=0A=
=0A=
=0A=
DWREngine._handleWarning =3D function(reason, ex) {=0A=
if (DWREngine._warningHandler) DWREngine._warningHandler(reason, ex);=0A=
};=0A=
=0A=
=0A=
DWREngine._handleMetaDataError =3D function(handlers, reason, ex) {=0A=
if (handlers && typeof handlers.errorHandler =3D=3D "function") =
handlers.errorHandler(reason, ex);=0A=
else DWREngine._handleError(reason, ex);=0A=
};=0A=
=0A=
=0A=
DWREngine._handleMetaDataWarning =3D function(handlers, reason, ex) {=0A=
if (handlers && typeof handlers.warningHandler =3D=3D "function") =
handlers.warningHandler(reason, ex);=0A=
else DWREngine._handleWarning(reason, ex);=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine._serializeAll =3D function(batch, referto, data, name) {=0A=
if (data =3D=3D null) {=0A=
batch.map[name] =3D "null:null";=0A=
return;=0A=
}=0A=
=0A=
switch (typeof data) {=0A=
case "boolean":=0A=
batch.map[name] =3D "boolean:" + data;=0A=
break;=0A=
case "number":=0A=
batch.map[name] =3D "number:" + data;=0A=
break;=0A=
case "string":=0A=
batch.map[name] =3D "string:" + encodeURIComponent(data);=0A=
break;=0A=
case "object":=0A=
if (data instanceof String) batch.map[name] =3D "String:" + =
encodeURIComponent(data);=0A=
else if (data instanceof Boolean) batch.map[name] =3D "Boolean:" + data;=0A=
else if (data instanceof Number) batch.map[name] =3D "Number:" + data;=0A=
else if (data instanceof Date) batch.map[name] =3D "Date:" + =
data.getTime();=0A=
else if (data instanceof Array) batch.map[name] =3D =
DWREngine._serializeArray(batch, referto, data, name);=0A=
else batch.map[name] =3D DWREngine._serializeObject(batch, referto, =
data, name);=0A=
break;=0A=
case "function":=0A=
=0A=
break;=0A=
default:=0A=
DWREngine._handleWarning("Unexpected type: " + typeof data + ", =
attempting default converter.");=0A=
batch.map[name] =3D "default:" + data;=0A=
break;=0A=
}=0A=
};=0A=
=0A=
=0A=
DWREngine._lookup =3D function(referto, data, name) {=0A=
var lookup;=0A=
=0A=
for (var i =3D 0; i < referto.length; i++) {=0A=
if (referto[i].data =3D=3D data) {=0A=
lookup =3D referto[i];=0A=
break;=0A=
}=0A=
}=0A=
if (lookup) return "reference:" + lookup.name;=0A=
referto.push({ data:data, name:name });=0A=
return null;=0A=
};=0A=
=0A=
=0A=
DWREngine._serializeObject =3D function(batch, referto, data, name) {=0A=
var ref =3D DWREngine._lookup(referto, data, name);=0A=
if (ref) return ref;=0A=
=0A=
=0A=
=0A=
if (data.nodeName && data.nodeType) {=0A=
return DWREngine._serializeXml(batch, referto, data, name);=0A=
}=0A=
=0A=
=0A=
var reply =3D "Object:{";=0A=
var element;=0A=
for (element in data) {=0A=
batch.paramCount++;=0A=
var childName =3D "c" + DWREngine._batch.map.callCount + "-e" + =
batch.paramCount;=0A=
DWREngine._serializeAll(batch, referto, data[element], childName);=0A=
=0A=
reply +=3D encodeURIComponent(element) + ":reference:" + childName + ", =
";=0A=
}=0A=
=0A=
if (reply.substring(reply.length - 2) =3D=3D ", ") {=0A=
reply =3D reply.substring(0, reply.length - 2);=0A=
}=0A=
reply +=3D "}";=0A=
=0A=
return reply;=0A=
};=0A=
=0A=
=0A=
DWREngine._serializeXml =3D function(batch, referto, data, name) {=0A=
var ref =3D DWREngine._lookup(referto, data, name);=0A=
if (ref) return ref;=0A=
=0A=
var output;=0A=
if (window.XMLSerializer) output =3D new =
XMLSerializer().serializeToString(data);=0A=
else output =3D data.toXml;=0A=
=0A=
return "XML:" + encodeURIComponent(output);=0A=
};=0A=
=0A=
=0A=
DWREngine._serializeArray =3D function(batch, referto, data, name) {=0A=
var ref =3D DWREngine._lookup(referto, data, name);=0A=
if (ref) return ref;=0A=
=0A=
var reply =3D "Array:[";=0A=
for (var i =3D 0; i < data.length; i++) {=0A=
if (i !=3D 0) reply +=3D ",";=0A=
batch.paramCount++;=0A=
var childName =3D "c" + DWREngine._batch.map.callCount + "-e" + =
batch.paramCount;=0A=
DWREngine._serializeAll(batch, referto, data[i], childName);=0A=
reply +=3D "reference:";=0A=
reply +=3D childName;=0A=
}=0A=
reply +=3D "]";=0A=
=0A=
return reply;=0A=
};=0A=
=0A=
=0A=
DWREngine._unserializeDocument =3D function(xml) {=0A=
var dom;=0A=
if (window.DOMParser) {=0A=
var parser =3D new DOMParser();=0A=
dom =3D parser.parseFromString(xml, "text/xml");=0A=
if (!dom.documentElement || dom.documentElement.tagName =3D=3D =
"parsererror") {=0A=
var message =3D dom.documentElement.firstChild.data;=0A=
message +=3D "\n" + =
dom.documentElement.firstChild.nextSibling.firstChild.data;=0A=
throw message;=0A=
}=0A=
return dom;=0A=
}=0A=
else if (window.ActiveXObject) {=0A=
dom =3D DWREngine._newActiveXObject(DWREngine._DOMDocument);=0A=
dom.loadXML(xml);=0A=
return dom;=0A=
}=0A=
else {=0A=
var div =3D document.createElement("div");=0A=
div.innerHTML =3D xml;=0A=
return div;=0A=
}=0A=
};=0A=
=0A=
=0A=
=0A=
=0A=
=0A=
DWREngine._newActiveXObject =3D function(axarray) {=0A=
var returnValue;=0A=
for (var i =3D 0; i < axarray.length; i++) {=0A=
try {=0A=
returnValue =3D new ActiveXObject(axarray[i]);=0A=
break;=0A=
}=0A=
catch (ex) {   }=0A=
}=0A=
return returnValue;=0A=
};=0A=
=0A=
=0A=
if (typeof window.encodeURIComponent =3D=3D=3D 'undefined') {=0A=
DWREngine._utf8 =3D function(wide) {=0A=
wide =3D "" + wide;=0A=
var c;=0A=
var s;=0A=
var enc =3D "";=0A=
var i =3D 0;=0A=
while (i < wide.length) {=0A=
c =3D wide.charCodeAt(i++);=0A=
=0A=
if (c >=3D 0xDC00 && c < 0xE000) continue;=0A=
if (c >=3D 0xD800 && c < 0xDC00) {=0A=
if (i >=3D wide.length) continue;=0A=
s =3D wide.charCodeAt(i++);=0A=
if (s < 0xDC00 || c >=3D 0xDE00) continue;=0A=
c =3D ((c - 0xD800) << 10) + (s - 0xDC00) + 0x10000;=0A=
}=0A=
=0A=
if (c < 0x80) {=0A=
enc +=3D String.fromCharCode(c);=0A=
}=0A=
else if (c < 0x800) {=0A=
enc +=3D String.fromCharCode(0xC0 + (c >> 6), 0x80 + (c & 0x3F));=0A=
}=0A=
else if (c < 0x10000) {=0A=
enc +=3D String.fromCharCode(0xE0 + (c >> 12), 0x80 + (c >> 6 & 0x3F), =
0x80 + (c & 0x3F));=0A=
}=0A=
else {=0A=
enc +=3D String.fromCharCode(0xF0 + (c >> 18), 0x80 + (c >> 12 & 0x3F), =
0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));=0A=
}=0A=
}=0A=
return enc;=0A=
}=0A=
=0A=
DWREngine._hexchars =3D "0123456789ABCDEF";=0A=
=0A=
DWREngine._toHex =3D function(n) {=0A=
return DWREngine._hexchars.charAt(n >> 4) + DWREngine._hexchars.charAt(n =
& 0xF);=0A=
}=0A=
=0A=
DWREngine._okURIchars =3D =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";=0A=
=0A=
window.encodeURIComponent =3D function(s)  {=0A=
s =3D DWREngine._utf8(s);=0A=
var c;=0A=
var enc =3D "";=0A=
for (var i=3D 0; i<s.length; i++) {=0A=
if (DWREngine._okURIchars.indexOf(s.charAt(i)) =3D=3D -1) {=0A=
enc +=3D "%" + DWREngine._toHex(s.charCodeAt(i));=0A=
}=0A=
else {=0A=
enc +=3D s.charAt(i);=0A=
}=0A=
}=0A=
return enc;=0A=
}=0A=
}=0A=
=0A=
=0A=
if (typeof Array.prototype.splice =3D=3D=3D 'undefined') {=0A=
Array.prototype.splice =3D function(ind, cnt)=0A=
{=0A=
if (arguments.length =3D=3D 0) return ind;=0A=
if (typeof ind !=3D "number") ind =3D 0;=0A=
if (ind < 0) ind =3D Math.max(0,this.length + ind);=0A=
if (ind > this.length) {=0A=
if (arguments.length > 2) ind =3D this.length;=0A=
else return [];=0A=
}=0A=
if (arguments.length < 2) cnt =3D this.length-ind;=0A=
=0A=
cnt =3D (typeof cnt =3D=3D "number") ? Math.max(0, cnt) : 0;=0A=
removeArray =3D this.slice(ind, ind + cnt);=0A=
endArray =3D this.slice(ind + cnt);=0A=
this.length =3D ind;=0A=
=0A=
for (var i =3D 2; i < arguments.length; i++) this[this.length] =3D =
arguments[i];=0A=
for (i =3D 0; i < endArray.length; i++) this[this.length] =3D =
endArray[i];=0A=
=0A=
return removeArray;=0A=
}=0A=
}=0A=
=0A=
=0A=
if (typeof Array.prototype.shift =3D=3D=3D 'undefined') {=0A=
Array.prototype.shift =3D function(str) {=0A=
var val =3D this[0];=0A=
for (var i =3D 1; i < this.length; ++i) this[i - 1] =3D this[i];=0A=
this.length--;=0A=
return val;=0A=
}=0A=
}=0A=
=0A=
=0A=
if (typeof Array.prototype.unshift =3D=3D=3D 'undefined') {=0A=
Array.prototype.unshift =3D function() {=0A=
var i =3D unshift.arguments.length;=0A=
for (var j =3D this.length - 1; j >=3D 0; --j) this[j + i] =3D this[j];=0A=
for (j =3D 0; j < i; ++j) this[j] =3D unshift.arguments[j];=0A=
}=0A=
}=0A=
=0A=
=0A=
if (typeof Array.prototype.push =3D=3D=3D 'undefined') {=0A=
Array.prototype.push =3D function() {=0A=
var sub =3D this.length;=0A=
for (var i =3D 0; i < push.arguments.length; ++i) {=0A=
this[sub] =3D push.arguments[i];=0A=
sub++;=0A=
}=0A=
}=0A=
}=0A=
=0A=
=0A=
if (typeof Array.prototype.pop =3D=3D=3D 'undefined') {=0A=
Array.prototype.pop =3D function() {=0A=
var lastElement =3D this[this.length - 1];=0A=
this.length--;=0A=
return lastElement;=0A=
}=0A=
}=0A=


------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/js/mootools.js

/*=0A=
Script: Core.js=0A=
	Mootools - My Object Oriented javascript.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
=0A=
MooTools Copyright:=0A=
	copyright (c) 2007 Valerio Proietti, <http://mad4milk.net>=0A=
=0A=
MooTools Credits:=0A=
	- Class is slightly based on Base.js =
<http://dean.edwards.name/weblog/2006/03/base/> (c) 2006 Dean Edwards, =
License <http://creativecommons.org/licenses/LGPL/2.1/>=0A=
	- Some functions are inspired by those found in prototype.js =
<http://prototype.conio.net/> (c) 2005 Sam Stephenson sam [at] conio =
[dot] net, MIT-style license=0A=
	- Documentation by Aaron Newton (aaron.newton [at] cnet [dot] com) and =
Valerio Proietti.=0A=
*/=0A=
=0A=
var MooTools =3D {=0A=
	version: '1.11'=0A=
};=0A=
=0A=
/* Section: Core Functions */=0A=
=0A=
/*=0A=
Function: $defined=0A=
	Returns true if the passed in value/object is defined, that means is =
not null or undefined.=0A=
=0A=
Arguments:=0A=
	obj - object to inspect=0A=
*/=0A=
=0A=
function $defined(obj){=0A=
	return (obj !=3D undefined);=0A=
};=0A=
=0A=
/*=0A=
Function: $type=0A=
	Returns the type of object that matches the element passed in.=0A=
=0A=
Arguments:=0A=
	obj - the object to inspect.=0A=
=0A=
Example:=0A=
	>var myString =3D 'hello';=0A=
	>$type(myString); //returns "string"=0A=
=0A=
Returns:=0A=
	'element' - if obj is a DOM element node=0A=
	'textnode' - if obj is a DOM text node=0A=
	'whitespace' - if obj is a DOM whitespace node=0A=
	'arguments' - if obj is an arguments object=0A=
	'object' - if obj is an object=0A=
	'string' - if obj is a string=0A=
	'number' - if obj is a number=0A=
	'boolean' - if obj is a boolean=0A=
	'function' - if obj is a function=0A=
	'regexp' - if obj is a regular expression=0A=
	'class' - if obj is a Class. (created with new Class, or the extend of =
another class).=0A=
	'collection' - if obj is a native htmlelements collection, such as =
childNodes, getElementsByTagName .. etc.=0A=
	false - (boolean) if the object is not defined or none of the above.=0A=
*/=0A=
=0A=
function $type(obj){=0A=
	if (!$defined(obj)) return false;=0A=
	if (obj.htmlElement) return 'element';=0A=
	var type =3D typeof obj;=0A=
	if (type =3D=3D 'object' && obj.nodeName){=0A=
		switch(obj.nodeType){=0A=
			case 1: return 'element';=0A=
			case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';=0A=
		}=0A=
	}=0A=
	if (type =3D=3D 'object' || type =3D=3D 'function'){=0A=
		switch(obj.constructor){=0A=
			case Array: return 'array';=0A=
			case RegExp: return 'regexp';=0A=
			case Class: return 'class';=0A=
		}=0A=
		if (typeof obj.length =3D=3D 'number'){=0A=
			if (obj.item) return 'collection';=0A=
			if (obj.callee) return 'arguments';=0A=
		}=0A=
	}=0A=
	return type;=0A=
};=0A=
=0A=
/*=0A=
Function: $merge=0A=
	merges a number of objects recursively without referencing them or =
their sub-objects.=0A=
=0A=
Arguments:=0A=
	any number of objects.=0A=
=0A=
Example:=0A=
	>var mergedObj =3D $merge(obj1, obj2, obj3);=0A=
	>//obj1, obj2, and obj3 are unaltered=0A=
*/=0A=
=0A=
function $merge(){=0A=
	var mix =3D {};=0A=
	for (var i =3D 0; i < arguments.length; i++){=0A=
		for (var property in arguments[i]){=0A=
			var ap =3D arguments[i][property];=0A=
			var mp =3D mix[property];=0A=
			if (mp && $type(ap) =3D=3D 'object' && $type(mp) =3D=3D 'object') =
mix[property] =3D $merge(mp, ap);=0A=
			else mix[property] =3D ap;=0A=
		}=0A=
	}=0A=
	return mix;=0A=
};=0A=
=0A=
/*=0A=
Function: $extend=0A=
	Copies all the properties from the second passed object to the first =
passed Object.=0A=
	If you do myWhatever.extend =3D $extend the first parameter will become =
myWhatever, and your extend function will only need one parameter.=0A=
=0A=
Example:=0A=
	(start code)=0A=
	var firstOb =3D {=0A=
		'name': 'John',=0A=
		'lastName': 'Doe'=0A=
	};=0A=
	var secondOb =3D {=0A=
		'age': '20',=0A=
		'sex': 'male',=0A=
		'lastName': 'Dorian'=0A=
	};=0A=
	$extend(firstOb, secondOb);=0A=
	//firstOb will become:=0A=
	{=0A=
		'name': 'John',=0A=
		'lastName': 'Dorian',=0A=
		'age': '20',=0A=
		'sex': 'male'=0A=
	};=0A=
	(end)=0A=
=0A=
Returns:=0A=
	The first object, extended.=0A=
*/=0A=
=0A=
var $extend =3D function(){=0A=
	var args =3D arguments;=0A=
	if (!args[1]) args =3D [this, args[0]];=0A=
	for (var property in args[1]) args[0][property] =3D args[1][property];=0A=
	return args[0];=0A=
};=0A=
=0A=
/*=0A=
Function: $native=0A=
	Will add a .extend method to the objects passed as a parameter, but the =
property passed in will be copied to the object's prototype only if non =
previously existent.=0A=
	Its handy if you dont want the .extend method of an object to overwrite =
existing methods.=0A=
	Used automatically in MooTools to implement =
Array/String/Function/Number methods to browser that dont support them =
whitout manual checking.=0A=
=0A=
Arguments:=0A=
	a number of classes/native javascript objects=0A=
=0A=
*/=0A=
=0A=
var $native =3D function(){=0A=
	for (var i =3D 0, l =3D arguments.length; i < l; i++){=0A=
		arguments[i].extend =3D function(props){=0A=
			for (var prop in props){=0A=
				if (!this.prototype[prop]) this.prototype[prop] =3D props[prop];=0A=
				if (!this[prop]) this[prop] =3D $native.generic(prop);=0A=
			}=0A=
		};=0A=
	}=0A=
};=0A=
=0A=
$native.generic =3D function(prop){=0A=
	return function(bind){=0A=
		return this.prototype[prop].apply(bind, =
Array.prototype.slice.call(arguments, 1));=0A=
	};=0A=
};=0A=
=0A=
$native(Function, Array, String, Number);=0A=
=0A=
/*=0A=
Function: $chk=0A=
	Returns true if the passed in value/object exists or is 0, otherwise =
returns false.=0A=
	Useful to accept zeroes.=0A=
=0A=
Arguments:=0A=
	obj - object to inspect=0A=
*/=0A=
=0A=
function $chk(obj){=0A=
	return !!(obj || obj =3D=3D=3D 0);=0A=
};=0A=
=0A=
/*=0A=
Function: $pick=0A=
	Returns the first object if defined, otherwise returns the second.=0A=
=0A=
Arguments:=0A=
	obj - object to test=0A=
	picked - the default to return=0A=
=0A=
Example:=0A=
	(start code)=0A=
		function say(msg){=0A=
			alert($pick(msg, 'no meessage supplied'));=0A=
		}=0A=
	(end)=0A=
*/=0A=
=0A=
function $pick(obj, picked){=0A=
	return $defined(obj) ? obj : picked;=0A=
};=0A=
=0A=
/*=0A=
Function: $random=0A=
	Returns a random integer number between the two passed in values.=0A=
=0A=
Arguments:=0A=
	min - integer, the minimum value (inclusive).=0A=
	max - integer, the maximum value (inclusive).=0A=
=0A=
Returns:=0A=
	a random integer between min and max.=0A=
*/=0A=
=0A=
function $random(min, max){=0A=
	return Math.floor(Math.random() * (max - min + 1) + min);=0A=
};=0A=
=0A=
/*=0A=
Function: $time=0A=
	Returns the current timestamp=0A=
=0A=
Returns:=0A=
	a timestamp integer.=0A=
*/=0A=
=0A=
function $time(){=0A=
	return new Date().getTime();=0A=
};=0A=
=0A=
/*=0A=
Function: $clear=0A=
	clears a timeout or an Interval.=0A=
=0A=
Returns:=0A=
	null=0A=
=0A=
Arguments:=0A=
	timer - the setInterval or setTimeout to clear.=0A=
=0A=
Example:=0A=
	>var myTimer =3D myFunction.delay(5000); //wait 5 seconds and execute =
my function.=0A=
	>myTimer =3D $clear(myTimer); //nevermind=0A=
=0A=
See also:=0A=
	<Function.delay>, <Function.periodical>=0A=
*/=0A=
=0A=
function $clear(timer){=0A=
	clearTimeout(timer);=0A=
	clearInterval(timer);=0A=
	return null;=0A=
};=0A=
=0A=
/*=0A=
Class: Abstract=0A=
	Abstract class, to be used as singleton. Will add .extend to any object=0A=
=0A=
Arguments:=0A=
	an object=0A=
=0A=
Returns:=0A=
	the object with an .extend property, equivalent to <$extend>.=0A=
*/=0A=
=0A=
var Abstract =3D function(obj){=0A=
	obj =3D obj || {};=0A=
	obj.extend =3D $extend;=0A=
	return obj;=0A=
};=0A=
=0A=
//window, document=0A=
=0A=
var Window =3D new Abstract(window);=0A=
var Document =3D new Abstract(document);=0A=
document.head =3D document.getElementsByTagName('head')[0];=0A=
=0A=
/*=0A=
Class: window=0A=
	Some properties are attached to the window object by the browser =
detection.=0A=
	=0A=
Note:=0A=
	browser detection is entirely object-based. We dont sniff.=0A=
=0A=
Properties:=0A=
	window.ie - will be set to true if the current browser is internet =
explorer (any).=0A=
	window.ie6 - will be set to true if the current browser is internet =
explorer 6.=0A=
	window.ie7 - will be set to true if the current browser is internet =
explorer 7.=0A=
	window.gecko - will be set to true if the current browser is =
Mozilla/Gecko.=0A=
	window.webkit - will be set to true if the current browser is =
Safari/Konqueror.=0A=
	window.webkit419 - will be set to true if the current browser is =
Safari2 / webkit till version 419.=0A=
	window.webkit420 - will be set to true if the current browser is =
Safari3 (Webkit SVN Build) / webkit over version 419.=0A=
	window.opera - is set to true by opera itself.=0A=
*/=0A=
=0A=
window.xpath =3D !!(document.evaluate);=0A=
if (window.ActiveXObject) window.ie =3D window[window.XMLHttpRequest ? =
'ie7' : 'ie6'] =3D true;=0A=
else if (document.childNodes && !document.all && =
!navigator.taintEnabled) window.webkit =3D window[window.xpath ? =
'webkit420' : 'webkit419'] =3D true;=0A=
else if (document.getBoxObjectFor !=3D null) window.gecko =3D true;=0A=
=0A=
/*compatibility*/=0A=
=0A=
window.khtml =3D window.webkit;=0A=
=0A=
Object.extend =3D $extend;=0A=
=0A=
/*end compatibility*/=0A=
=0A=
//htmlelement=0A=
=0A=
if (typeof HTMLElement =3D=3D 'undefined'){=0A=
	var HTMLElement =3D function(){};=0A=
	if (window.webkit) document.createElement("iframe"); //fixes safari=0A=
	HTMLElement.prototype =3D (window.webkit) ? =
window["[[DOMElement.prototype]]"] : {};=0A=
}=0A=
HTMLElement.prototype.htmlElement =3D function(){};=0A=
=0A=
//enables background image cache for internet explorer 6=0A=
=0A=
if (window.ie6) try {document.execCommand("BackgroundImageCache", false, =
true);} catch(e){};=0A=
=0A=
/*=0A=
Script: Class.js=0A=
	Contains the Class Function, aims to ease the creation of reusable =
Classes.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Class=0A=
	The base class object of the <http://mootools.net> framework.=0A=
	Creates a new class, its initialize method will fire upon class =
instantiation.=0A=
	Initialize wont fire on instantiation when you pass *null*.=0A=
=0A=
Arguments:=0A=
	properties - the collection of properties that apply to the class.=0A=
=0A=
Example:=0A=
	(start code)=0A=
	var Cat =3D new Class({=0A=
		initialize: function(name){=0A=
			this.name =3D name;=0A=
		}=0A=
	});=0A=
	var myCat =3D new Cat('Micia');=0A=
	alert(myCat.name); //alerts 'Micia'=0A=
	(end)=0A=
*/=0A=
=0A=
var Class =3D function(properties){=0A=
	var klass =3D function(){=0A=
		return (arguments[0] !=3D=3D null && this.initialize && =
$type(this.initialize) =3D=3D 'function') ? this.initialize.apply(this, =
arguments) : this;=0A=
	};=0A=
	$extend(klass, this);=0A=
	klass.prototype =3D properties;=0A=
	klass.constructor =3D Class;=0A=
	return klass;=0A=
};=0A=
=0A=
/*=0A=
Property: empty=0A=
	Returns an empty function=0A=
*/=0A=
=0A=
Class.empty =3D function(){};=0A=
=0A=
Class.prototype =3D {=0A=
=0A=
	/*=0A=
	Property: extend=0A=
		Returns the copy of the Class extended with the passed in properties.=0A=
=0A=
	Arguments:=0A=
		properties - the properties to add to the base class in this new Class.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		var Animal =3D new Class({=0A=
			initialize: function(age){=0A=
				this.age =3D age;=0A=
			}=0A=
		});=0A=
		var Cat =3D Animal.extend({=0A=
			initialize: function(name, age){=0A=
				this.parent(age); //will call the previous initialize;=0A=
				this.name =3D name;=0A=
			}=0A=
		});=0A=
		var myCat =3D new Cat('Micia', 20);=0A=
		alert(myCat.name); //alerts 'Micia'=0A=
		alert(myCat.age); //alerts 20=0A=
		(end)=0A=
	*/=0A=
=0A=
	extend: function(properties){=0A=
		var proto =3D new this(null);=0A=
		for (var property in properties){=0A=
			var pp =3D proto[property];=0A=
			proto[property] =3D Class.Merge(pp, properties[property]);=0A=
		}=0A=
		return new Class(proto);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: implement=0A=
		Implements the passed in properties to the base Class prototypes, =
altering the base class, unlike <Class.extend>.=0A=
=0A=
	Arguments:=0A=
		properties - the properties to add to the base class.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		var Animal =3D new Class({=0A=
			initialize: function(age){=0A=
				this.age =3D age;=0A=
			}=0A=
		});=0A=
		Animal.implement({=0A=
			setName: function(name){=0A=
				this.name =3D name=0A=
			}=0A=
		});=0A=
		var myAnimal =3D new Animal(20);=0A=
		myAnimal.setName('Micia');=0A=
		alert(myAnimal.name); //alerts 'Micia'=0A=
		(end)=0A=
	*/=0A=
=0A=
	implement: function(){=0A=
		for (var i =3D 0, l =3D arguments.length; i < l; i++) =
$extend(this.prototype, arguments[i]);=0A=
	}=0A=
=0A=
};=0A=
=0A=
//internal=0A=
=0A=
Class.Merge =3D function(previous, current){=0A=
	if (previous && previous !=3D current){=0A=
		var type =3D $type(current);=0A=
		if (type !=3D $type(previous)) return current;=0A=
		switch(type){=0A=
			case 'function':=0A=
				var merged =3D function(){=0A=
					this.parent =3D arguments.callee.parent;=0A=
					return current.apply(this, arguments);=0A=
				};=0A=
				merged.parent =3D previous;=0A=
				return merged;=0A=
			case 'object': return $merge(previous, current);=0A=
		}=0A=
	}=0A=
	return current;=0A=
};=0A=
=0A=
/*=0A=
Script: Class.Extras.js=0A=
	Contains common implementations for custom classes. In Mootools is =
implemented in <Ajax>, <XHR> and <Fx.Base> and many more.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Chain=0A=
	An "Utility" Class. Its methods can be implemented with =
<Class.implement> into any <Class>.=0A=
	Currently implemented in <Fx.Base>, <XHR> and <Ajax>. In <Fx.Base> for =
example, is used to execute a list of function, one after another, once =
the effect is completed.=0A=
	The functions will not be fired all togheter, but one every completion, =
to create custom complex animations.=0A=
=0A=
Example:=0A=
	(start code)=0A=
	var myFx =3D new Fx.Style('element', 'opacity');=0A=
=0A=
	myFx.start(1,0).chain(function(){=0A=
		myFx.start(0,1);=0A=
	}).chain(function(){=0A=
		myFx.start(1,0);=0A=
	}).chain(function(){=0A=
		myFx.start(0,1);=0A=
	});=0A=
	//the element will appear and disappear three times=0A=
	(end)=0A=
*/=0A=
=0A=
var Chain =3D new Class({=0A=
=0A=
	/*=0A=
	Property: chain=0A=
		adds a function to the Chain instance stack.=0A=
=0A=
	Arguments:=0A=
		fn - the function to append.=0A=
	*/=0A=
=0A=
	chain: function(fn){=0A=
		this.chains =3D this.chains || [];=0A=
		this.chains.push(fn);=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: callChain=0A=
		Executes the first function of the Chain instance stack, then removes =
it. The first function will then become the second.=0A=
	*/=0A=
=0A=
	callChain: function(){=0A=
		if (this.chains && this.chains.length) this.chains.shift().delay(10, =
this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: clearChain=0A=
		Clears the stack of a Chain instance.=0A=
	*/=0A=
=0A=
	clearChain: function(){=0A=
		this.chains =3D [];=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Class: Events=0A=
	An "Utility" Class. Its methods can be implemented with =
<Class.implement> into any <Class>.=0A=
	In <Fx.Base> Class, for example, is used to give the possibility add =
any number of functions to the Effects events, like onComplete, onStart, =
onCancel.=0A=
	Events in a Class that implements <Events> can be either added as an =
option, or with addEvent. Never with .options.onEventName.=0A=
=0A=
Example:=0A=
	(start code)=0A=
	var myFx =3D new Fx.Style('element', 'opacity').addEvent('onComplete', =
function(){=0A=
		alert('the effect is completed');=0A=
	}).addEvent('onComplete', function(){=0A=
		alert('I told you the effect is completed');=0A=
	});=0A=
=0A=
	myFx.start(0,1);=0A=
	//upon completion it will display the 2 alerts, in order.=0A=
	(end)=0A=
=0A=
Implementing:=0A=
	This class can be implemented into other classes to add the =
functionality to them.=0A=
	Goes well with the <Options> class.=0A=
=0A=
Example:=0A=
	(start code)=0A=
	var Widget =3D new Class({=0A=
		initialize: function(){},=0A=
		finish: function(){=0A=
			this.fireEvent('onComplete');=0A=
		}=0A=
	});=0A=
	Widget.implement(new Events);=0A=
	//later...=0A=
	var myWidget =3D new Widget();=0A=
	myWidget.addEvent('onComplete', myfunction);=0A=
	(end)=0A=
*/=0A=
=0A=
var Events =3D new Class({=0A=
=0A=
	/*=0A=
	Property: addEvent=0A=
		adds an event to the stack of events of the Class instance.=0A=
=0A=
	Arguments:=0A=
		type - string; the event name (e.g. 'onComplete')=0A=
		fn - function to execute=0A=
	*/=0A=
=0A=
	addEvent: function(type, fn){=0A=
		if (fn !=3D Class.empty){=0A=
			this.$events =3D this.$events || {};=0A=
			this.$events[type] =3D this.$events[type] || [];=0A=
			this.$events[type].include(fn);=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: fireEvent=0A=
		fires all events of the specified type in the Class instance.=0A=
=0A=
	Arguments:=0A=
		type - string; the event name (e.g. 'onComplete')=0A=
		args - array or single object; arguments to pass to the function; if =
more than one argument, must be an array=0A=
		delay - (integer) delay (in ms) to wait to execute the event=0A=
=0A=
	Example:=0A=
	(start code)=0A=
	var Widget =3D new Class({=0A=
		initialize: function(arg1, arg2){=0A=
			...=0A=
			this.fireEvent("onInitialize", [arg1, arg2], 50);=0A=
		}=0A=
	});=0A=
	Widget.implement(new Events);=0A=
	(end)=0A=
	*/=0A=
=0A=
	fireEvent: function(type, args, delay){=0A=
		if (this.$events && this.$events[type]){=0A=
			this.$events[type].each(function(fn){=0A=
				fn.create({'bind': this, 'delay': delay, 'arguments': args})();=0A=
			}, this);=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: removeEvent=0A=
		removes an event from the stack of events of the Class instance.=0A=
=0A=
	Arguments:=0A=
		type - string; the event name (e.g. 'onComplete')=0A=
		fn - function that was added=0A=
	*/=0A=
=0A=
	removeEvent: function(type, fn){=0A=
		if (this.$events && this.$events[type]) this.$events[type].remove(fn);=0A=
		return this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Class: Options=0A=
	An "Utility" Class. Its methods can be implemented with =
<Class.implement> into any <Class>.=0A=
	Used to automate the options settings, also adding Class <Events> when =
the option begins with on.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		var Widget =3D new Class({=0A=
			options: {=0A=
				color: '#fff',=0A=
				size: {=0A=
					width: 100=0A=
					height: 100=0A=
				}=0A=
			},=0A=
			initialize: function(options){=0A=
				this.setOptions(options);=0A=
			}=0A=
		});=0A=
		Widget.implement(new Options);=0A=
		//later...=0A=
		var myWidget =3D new Widget({=0A=
			color: '#f00',=0A=
			size: {=0A=
				width: 200=0A=
			}=0A=
		});=0A=
		//myWidget.options =3D {color: #f00, size: {width: 200, height: 100}}=0A=
		(end)=0A=
*/=0A=
=0A=
var Options =3D new Class({=0A=
=0A=
	/*=0A=
	Property: setOptions=0A=
		sets this.options=0A=
=0A=
	Arguments:=0A=
		defaults - object; the default set of options=0A=
		options - object; the user entered options. can be empty too.=0A=
=0A=
	Note:=0A=
		if your Class has <Events> implemented, every option beginning with =
on, followed by a capital letter (onComplete) becomes an Class instance =
event.=0A=
	*/=0A=
=0A=
	setOptions: function(){=0A=
		this.options =3D $merge.apply(null, [this.options].extend(arguments));=0A=
		if (this.addEvent){=0A=
			for (var option in this.options){=0A=
				if ($type(this.options[option] =3D=3D 'function') && =
(/^on[A-Z]/).test(option)) this.addEvent(option, this.options[option]);=0A=
			}=0A=
		}=0A=
		return this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Array.js=0A=
	Contains Array prototypes, <$A>, <$each>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Array=0A=
	A collection of The Array Object prototype methods.=0A=
*/=0A=
=0A=
//custom methods=0A=
=0A=
Array.extend({=0A=
=0A=
	/*=0A=
	Property: forEach=0A=
		Iterates through an array; This method is only available for browsers =
without native *forEach* support.=0A=
		For more info see =
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Globa=
l_Objects:Array:forEach>=0A=
=0A=
		*forEach* executes the provided function (callback) once for each =
element present in the array. callback is invoked only for indexes of =
the array which have assigned values; it is not invoked for indexes =
which have been deleted or which have never been assigned values.=0A=
=0A=
	Arguments:=0A=
		fn - function to execute with each item in the array; passed the item =
and the index of that item in the array=0A=
		bind - the object to bind "this" to (see <Function.bind>)=0A=
=0A=
	Example:=0A=
		>['apple','banana','lemon'].each(function(item, index){=0A=
		>	alert(index + " =3D " + item); //alerts "0 =3D apple" etc.=0A=
		>}, bindObj); //optional second arg for binding, not used here=0A=
	*/=0A=
=0A=
	forEach: function(fn, bind){=0A=
		for (var i =3D 0, j =3D this.length; i < j; i++) fn.call(bind, =
this[i], i, this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: filter=0A=
		This method is provided only for browsers without native *filter* =
support.=0A=
		For more info see =
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objec=
ts:Array:filter>=0A=
=0A=
		*filter* calls a provided callback function once for each element in =
an array, and constructs a new array of all the values for which =
callback returns a true value. callback is invoked only for indexes of =
the array which have assigned values; it is not invoked for indexes =
which have been deleted or which have never been assigned values. Array =
elements which do not pass the callback test are simply skipped, and are =
not included in the new array.=0A=
=0A=
	Arguments:=0A=
		fn - function to execute with each item in the array; passed the item =
and the index of that item in the array=0A=
		bind - the object to bind "this" to (see <Function.bind>)=0A=
=0A=
	Example:=0A=
		>var biggerThanTwenty =3D [10,3,25,100].filter(function(item, index){=0A=
		> return item > 20;=0A=
		>});=0A=
		>//biggerThanTwenty =3D [25,100]=0A=
	*/=0A=
=0A=
	filter: function(fn, bind){=0A=
		var results =3D [];=0A=
		for (var i =3D 0, j =3D this.length; i < j; i++){=0A=
			if (fn.call(bind, this[i], i, this)) results.push(this[i]);=0A=
		}=0A=
		return results;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: map=0A=
		This method is provided only for browsers without native *map* support.=0A=
		For more info see =
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Globa=
l_Objects:Array:map>=0A=
=0A=
		*map* calls a provided callback function once for each element in an =
array, in order, and constructs a new array from the results. callback =
is invoked only for indexes of the array which have assigned values; it =
is not invoked for indexes which have been deleted or which have never =
been assigned values.=0A=
=0A=
	Arguments:=0A=
		fn - function to execute with each item in the array; passed the item =
and the index of that item in the array=0A=
		bind - the object to bind "this" to (see <Function.bind>)=0A=
=0A=
	Example:=0A=
		>var timesTwo =3D [1,2,3].map(function(item, index){=0A=
		> return item*2;=0A=
		>});=0A=
		>//timesTwo =3D [2,4,6];=0A=
	*/=0A=
=0A=
	map: function(fn, bind){=0A=
		var results =3D [];=0A=
		for (var i =3D 0, j =3D this.length; i < j; i++) results[i] =3D =
fn.call(bind, this[i], i, this);=0A=
		return results;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: every=0A=
		This method is provided only for browsers without native *every* =
support.=0A=
		For more info see =
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Globa=
l_Objects:Array:every>=0A=
=0A=
		*every* executes the provided callback function once for each element =
present in the array until it finds one where callback returns a false =
value. If such an element is found, the every method immediately returns =
false. Otherwise, if callback returned a true value for all elements, =
every will return true. callback is invoked only for indexes of the =
array which have assigned values; it is not invoked for indexes which =
have been deleted or which have never been assigned values.=0A=
=0A=
	Arguments:=0A=
		fn - function to execute with each item in the array; passed the item =
and the index of that item in the array=0A=
		bind - the object to bind "this" to (see <Function.bind>)=0A=
=0A=
	Example:=0A=
		>var areAllBigEnough =3D [10,4,25,100].every(function(item, index){=0A=
		> return item > 20;=0A=
		>});=0A=
		>//areAllBigEnough =3D false=0A=
	*/=0A=
=0A=
	every: function(fn, bind){=0A=
		for (var i =3D 0, j =3D this.length; i < j; i++){=0A=
			if (!fn.call(bind, this[i], i, this)) return false;=0A=
		}=0A=
		return true;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: some=0A=
		This method is provided only for browsers without native *some* =
support.=0A=
		For more info see =
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Globa=
l_Objects:Array:some>=0A=
=0A=
		*some* executes the callback function once for each element present in =
the array until it finds one where callback returns a true value. If =
such an element is found, some immediately returns true. Otherwise, some =
returns false. callback is invoked only for indexes of the array which =
have assigned values; it is not invoked for indexes which have been =
deleted or which have never been assigned values.=0A=
=0A=
	Arguments:=0A=
		fn - function to execute with each item in the array; passed the item =
and the index of that item in the array=0A=
		bind - the object to bind "this" to (see <Function.bind>)=0A=
=0A=
	Example:=0A=
		>var isAnyBigEnough =3D [10,4,25,100].some(function(item, index){=0A=
		> return item > 20;=0A=
		>});=0A=
		>//isAnyBigEnough =3D true=0A=
	*/=0A=
=0A=
	some: function(fn, bind){=0A=
		for (var i =3D 0, j =3D this.length; i < j; i++){=0A=
			if (fn.call(bind, this[i], i, this)) return true;=0A=
		}=0A=
		return false;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: indexOf=0A=
		This method is provided only for browsers without native *indexOf* =
support.=0A=
		For more info see =
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Globa=
l_Objects:Array:indexOf>=0A=
=0A=
		*indexOf* compares a search element to elements of the Array using =
strict equality (the same method used by the =3D=3D=3D, or =
triple-equals, operator).=0A=
=0A=
	Arguments:=0A=
		item - any type of object; element to locate in the array=0A=
		from - integer; optional; the index of the array at which to begin the =
search (defaults to 0)=0A=
=0A=
	Example:=0A=
		>['apple','lemon','banana'].indexOf('lemon'); //returns 1=0A=
		>['apple','lemon'].indexOf('banana'); //returns -1=0A=
	*/=0A=
=0A=
	indexOf: function(item, from){=0A=
		var len =3D this.length;=0A=
		for (var i =3D (from < 0) ? Math.max(0, len + from) : from || 0; i < =
len; i++){=0A=
			if (this[i] =3D=3D=3D item) return i;=0A=
		}=0A=
		return -1;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: each=0A=
		Same as <Array.forEach>.=0A=
=0A=
	Arguments:=0A=
		fn - function to execute with each item in the array; passed the item =
and the index of that item in the array=0A=
		bind - optional, the object that the "this" of the function will refer =
to.=0A=
=0A=
	Example:=0A=
		>var Animals =3D ['Cat', 'Dog', 'Coala'];=0A=
		>Animals.each(function(animal){=0A=
		>	document.write(animal)=0A=
		>});=0A=
	*/=0A=
=0A=
	/*=0A=
	Property: copy=0A=
		returns a copy of the array.=0A=
=0A=
	Returns:=0A=
		a new array which is a copy of the current one.=0A=
=0A=
	Arguments:=0A=
		start - integer; optional; the index where to start the copy, default =
is 0. If negative, it is taken as the offset from the end of the array.=0A=
		length - integer; optional; the number of elements to copy. By =
default, copies all elements from start to the end of the array.=0A=
=0A=
	Example:=0A=
		>var letters =3D ["a","b","c"];=0A=
		>var copy =3D letters.copy();		// ["a","b","c"] (new instance)=0A=
	*/=0A=
=0A=
	copy: function(start, length){=0A=
		start =3D start || 0;=0A=
		if (start < 0) start =3D this.length + start;=0A=
		length =3D length || (this.length - start);=0A=
		var newArray =3D [];=0A=
		for (var i =3D 0; i < length; i++) newArray[i] =3D this[start++];=0A=
		return newArray;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: remove=0A=
		Removes all occurrences of an item from the array.=0A=
=0A=
	Arguments:=0A=
		item - the item to remove=0A=
=0A=
	Returns:=0A=
		the Array with all occurrences of the item removed.=0A=
=0A=
	Example:=0A=
		>["1","2","3","2"].remove("2") // ["1","3"];=0A=
	*/=0A=
=0A=
	remove: function(item){=0A=
		var i =3D 0;=0A=
		var len =3D this.length;=0A=
		while (i < len){=0A=
			if (this[i] =3D=3D=3D item){=0A=
				this.splice(i, 1);=0A=
				len--;=0A=
			} else {=0A=
				i++;=0A=
			}=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: contains=0A=
		Tests an array for the presence of an item.=0A=
=0A=
	Arguments:=0A=
		item - the item to search for in the array.=0A=
		from - integer; optional; the index at which to begin the search, =
default is 0. If negative, it is taken as the offset from the end of the =
array.=0A=
=0A=
	Returns:=0A=
		true - the item was found=0A=
		false - it wasn't=0A=
=0A=
	Example:=0A=
		>["a","b","c"].contains("a"); // true=0A=
		>["a","b","c"].contains("d"); // false=0A=
	*/=0A=
=0A=
	contains: function(item, from){=0A=
		return this.indexOf(item, from) !=3D -1;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: associate=0A=
		Creates an object with key-value pairs based on the array of keywords =
passed in=0A=
		and the current content of the array.=0A=
=0A=
	Arguments:=0A=
		keys - the array of keywords.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		var Animals =3D ['Cat', 'Dog', 'Coala', 'Lizard'];=0A=
		var Speech =3D ['Miao', 'Bau', 'Fruuu', 'Mute'];=0A=
		var Speeches =3D Animals.associate(Speech);=0A=
		//Speeches['Miao'] is now Cat.=0A=
		//Speeches['Bau'] is now Dog.=0A=
		//...=0A=
		(end)=0A=
	*/=0A=
=0A=
	associate: function(keys){=0A=
		var obj =3D {}, length =3D Math.min(this.length, keys.length);=0A=
		for (var i =3D 0; i < length; i++) obj[keys[i]] =3D this[i];=0A=
		return obj;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: extend=0A=
		Extends an array with another one.=0A=
=0A=
	Arguments:=0A=
		array - the array to extend ours with=0A=
=0A=
	Example:=0A=
		>var Animals =3D ['Cat', 'Dog', 'Coala'];=0A=
		>Animals.extend(['Lizard']);=0A=
		>//Animals is now: ['Cat', 'Dog', 'Coala', 'Lizard'];=0A=
	*/=0A=
=0A=
	extend: function(array){=0A=
		for (var i =3D 0, j =3D array.length; i < j; i++) this.push(array[i]);=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: merge=0A=
		merges an array in another array, without duplicates. (case- and =
type-sensitive)=0A=
=0A=
	Arguments:=0A=
		array - the array to merge from.=0A=
=0A=
	Example:=0A=
		>['Cat','Dog'].merge(['Dog','Coala']); //returns ['Cat','Dog','Coala']=0A=
	*/=0A=
=0A=
	merge: function(array){=0A=
		for (var i =3D 0, l =3D array.length; i < l; i++) =
this.include(array[i]);=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: include=0A=
		includes the passed in element in the array, only if its not already =
present. (case- and type-sensitive)=0A=
=0A=
	Arguments:=0A=
		item - item to add to the array (if not present)=0A=
=0A=
	Example:=0A=
		>['Cat','Dog'].include('Dog'); //returns ['Cat','Dog']=0A=
		>['Cat','Dog'].include('Coala'); //returns ['Cat','Dog','Coala']=0A=
	*/=0A=
=0A=
	include: function(item){=0A=
		if (!this.contains(item)) this.push(item);=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getRandom=0A=
		returns a random item in the Array=0A=
	*/=0A=
=0A=
	getRandom: function(){=0A=
		return this[$random(0, this.length - 1)] || null;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getLast=0A=
		returns the last item in the Array=0A=
	*/=0A=
=0A=
	getLast: function(){=0A=
		return this[this.length - 1] || null;=0A=
	}=0A=
=0A=
});=0A=
=0A=
//copies=0A=
=0A=
Array.prototype.each =3D Array.prototype.forEach;=0A=
Array.each =3D Array.forEach;=0A=
=0A=
/* Section: Utility Functions */=0A=
=0A=
/*=0A=
Function: $A()=0A=
	Same as <Array.copy>, but as function.=0A=
	Useful to apply Array prototypes to iterable objects, as a collection =
of DOM elements or the arguments object.=0A=
=0A=
Example:=0A=
	(start code)=0A=
	function myFunction(){=0A=
		$A(arguments).each(argument, function(){=0A=
			alert(argument);=0A=
		});=0A=
	};=0A=
	//the above will alert all the arguments passed to the function =
myFunction.=0A=
	(end)=0A=
*/=0A=
=0A=
function $A(array){=0A=
	return Array.copy(array);=0A=
};=0A=
=0A=
/*=0A=
Function: $each=0A=
	Use to iterate through iterables that are not regular arrays, such as =
builtin getElementsByTagName calls, arguments of a function, or an =
object.=0A=
=0A=
Arguments:=0A=
	iterable - an iterable element or an objct.=0A=
	function - function to apply to the iterable.=0A=
	bind - optional, the 'this' of the function will refer to this object.=0A=
=0A=
Function argument:=0A=
	The function argument will be passed the following arguments.=0A=
=0A=
	item - the current item in the iterator being procesed=0A=
	index - integer; the index of the item, or key in case of an object.=0A=
=0A=
Examples:=0A=
	(start code)=0A=
	$each(['Sun','Mon','Tue'], function(day, index){=0A=
		alert('name:' + day + ', index: ' + index);=0A=
	});=0A=
	//alerts "name: Sun, index: 0", "name: Mon, index: 1", etc.=0A=
	//over an object=0A=
	$each({first: "Sunday", second: "Monday", third: "Tuesday"}, =
function(value, key){=0A=
		alert("the " + key + " day of the week is " + value);=0A=
	});=0A=
	//alerts "the first day of the week is Sunday",=0A=
	//"the second day of the week is Monday", etc.=0A=
	(end)=0A=
*/=0A=
=0A=
function $each(iterable, fn, bind){=0A=
	if (iterable && typeof iterable.length =3D=3D 'number' && =
$type(iterable) !=3D 'object'){=0A=
		Array.forEach(iterable, fn, bind);=0A=
	} else {=0A=
		 for (var name in iterable) fn.call(bind || iterable, iterable[name], =
name);=0A=
	}=0A=
};=0A=
=0A=
/*compatibility*/=0A=
=0A=
Array.prototype.test =3D Array.prototype.contains;=0A=
=0A=
/*end compatibility*/=0A=
=0A=
/*=0A=
Script: String.js=0A=
	Contains String prototypes.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: String=0A=
	A collection of The String Object prototype methods.=0A=
*/=0A=
=0A=
String.extend({=0A=
=0A=
	/*=0A=
	Property: test=0A=
		Tests a string with a regular expression.=0A=
=0A=
	Arguments:=0A=
		regex - a string or regular expression object, the regular expression =
you want to match the string with=0A=
		params - optional, if first parameter is a string, any parameters you =
want to pass to the regex ('g' has no effect)=0A=
=0A=
	Returns:=0A=
		true if a match for the regular expression is found in the string, =
false if not.=0A=
		See =
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objec=
ts:RegExp:test>=0A=
=0A=
	Example:=0A=
		>"I like cookies".test("cookie"); // returns true=0A=
		>"I like cookies".test("COOKIE", "i") // ignore case, returns true=0A=
		>"I like cookies".test("cake"); // returns false=0A=
	*/=0A=
=0A=
	test: function(regex, params){=0A=
		return (($type(regex) =3D=3D 'string') ? new RegExp(regex, params) : =
regex).test(this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toInt=0A=
		parses a string to an integer.=0A=
=0A=
	Returns:=0A=
		either an int or "NaN" if the string is not a number.=0A=
=0A=
	Example:=0A=
		>var value =3D "10px".toInt(); // value is 10=0A=
	*/=0A=
=0A=
	toInt: function(){=0A=
		return parseInt(this, 10);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toFloat=0A=
		parses a string to an float.=0A=
=0A=
	Returns:=0A=
		either a float or "NaN" if the string is not a number.=0A=
=0A=
	Example:=0A=
		>var value =3D "10.848".toFloat(); // value is 10.848=0A=
	*/=0A=
=0A=
	toFloat: function(){=0A=
		return parseFloat(this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: camelCase=0A=
		Converts a hiphenated string to a camelcase string.=0A=
=0A=
	Example:=0A=
		>"I-like-cookies".camelCase(); //"ILikeCookies"=0A=
=0A=
	Returns:=0A=
		the camel cased string=0A=
	*/=0A=
=0A=
	camelCase: function(){=0A=
		return this.replace(/-\D/g, function(match){=0A=
			return match.charAt(1).toUpperCase();=0A=
		});=0A=
	},=0A=
=0A=
	/*=0A=
	Property: hyphenate=0A=
		Converts a camelCased string to a hyphen-ated string.=0A=
=0A=
	Example:=0A=
		>"ILikeCookies".hyphenate(); //"I-like-cookies"=0A=
	*/=0A=
=0A=
	hyphenate: function(){=0A=
		return this.replace(/\w[A-Z]/g, function(match){=0A=
			return (match.charAt(0) + '-' + match.charAt(1).toLowerCase());=0A=
		});=0A=
	},=0A=
=0A=
	/*=0A=
	Property: capitalize=0A=
		Converts the first letter in each word of a string to Uppercase.=0A=
=0A=
	Example:=0A=
		>"i like cookies".capitalize(); //"I Like Cookies"=0A=
=0A=
	Returns:=0A=
		the capitalized string=0A=
	*/=0A=
=0A=
	capitalize: function(){=0A=
		return this.replace(/\b[a-z]/g, function(match){=0A=
			return match.toUpperCase();=0A=
		});=0A=
	},=0A=
=0A=
	/*=0A=
	Property: trim=0A=
		Trims the leading and trailing spaces off a string.=0A=
=0A=
	Example:=0A=
		>"    i like cookies     ".trim() //"i like cookies"=0A=
=0A=
	Returns:=0A=
		the trimmed string=0A=
	*/=0A=
=0A=
	trim: function(){=0A=
		return this.replace(/^\s+|\s+$/g, '');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: clean=0A=
		trims (<String.trim>) a string AND removes all the double spaces in a =
string.=0A=
=0A=
	Returns:=0A=
		the cleaned string=0A=
=0A=
	Example:=0A=
		>" i      like     cookies      \n\n".clean() //"i like cookies"=0A=
	*/=0A=
=0A=
	clean: function(){=0A=
		return this.replace(/\s{2,}/g, ' ').trim();=0A=
	},=0A=
=0A=
	/*=0A=
	Property: rgbToHex=0A=
		Converts an RGB value to hexidecimal. The string must be in the format =
of "rgb(255,255,255)" or "rgba(255,255,255,1)";=0A=
=0A=
	Arguments:=0A=
		array - boolean value, defaults to false. Use true if you want the =
array ['FF','33','00'] as output instead of "#FF3300"=0A=
=0A=
	Returns:=0A=
		hex string or array. returns "transparent" if the output is set as =
string and the fourth value of rgba in input string is 0.=0A=
=0A=
	Example:=0A=
		>"rgb(17,34,51)".rgbToHex(); //"#112233"=0A=
		>"rgba(17,34,51,0)".rgbToHex(); //"transparent"=0A=
		>"rgb(17,34,51)".rgbToHex(true); //['11','22','33']=0A=
	*/=0A=
=0A=
	rgbToHex: function(array){=0A=
		var rgb =3D this.match(/\d{1,3}/g);=0A=
		return (rgb) ? rgb.rgbToHex(array) : false;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: hexToRgb=0A=
		Converts a hexidecimal color value to RGB. Input string must be the =
hex color value (with or without the hash). Also accepts triplets =
('333');=0A=
=0A=
	Arguments:=0A=
		array - boolean value, defaults to false. Use true if you want the =
array [255,255,255] as output instead of "rgb(255,255,255)";=0A=
=0A=
	Returns:=0A=
		rgb string or array.=0A=
=0A=
	Example:=0A=
		>"#112233".hexToRgb(); //"rgb(17,34,51)"=0A=
		>"#112233".hexToRgb(true); //[17,34,51]=0A=
	*/=0A=
=0A=
	hexToRgb: function(array){=0A=
		var hex =3D this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);=0A=
		return (hex) ? hex.slice(1).hexToRgb(array) : false;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: contains=0A=
		checks if the passed in string is contained in the String. also =
accepts an optional second parameter, to check if the string is =
contained in a list of separated values.=0A=
=0A=
	Example:=0A=
		>'a b c'.contains('c', ' '); //true=0A=
		>'a bc'.contains('bc'); //true=0A=
		>'a bc'.contains('b', ' '); //false=0A=
	*/=0A=
=0A=
	contains: function(string, s){=0A=
		return (s) ? (s + this + s).indexOf(s + string + s) > -1 : =
this.indexOf(string) > -1;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: escapeRegExp=0A=
		Returns string with escaped regular expression characters=0A=
=0A=
	Example:=0A=
		>var search =3D 'animals.sheeps[1]'.escapeRegExp(); // search is now =
'animals\.sheeps\[1\]'=0A=
=0A=
	Returns:=0A=
		Escaped string=0A=
	*/=0A=
=0A=
	escapeRegExp: function(){=0A=
		return this.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');=0A=
	}=0A=
=0A=
});=0A=
=0A=
Array.extend({=0A=
=0A=
	/*=0A=
	Property: rgbToHex=0A=
		see <String.rgbToHex>, but as an array method.=0A=
	*/=0A=
=0A=
	rgbToHex: function(array){=0A=
		if (this.length < 3) return false;=0A=
		if (this.length =3D=3D 4 && this[3] =3D=3D 0 && !array) return =
'transparent';=0A=
		var hex =3D [];=0A=
		for (var i =3D 0; i < 3; i++){=0A=
			var bit =3D (this[i] - 0).toString(16);=0A=
			hex.push((bit.length =3D=3D 1) ? '0' + bit : bit);=0A=
		}=0A=
		return array ? hex : '#' + hex.join('');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: hexToRgb=0A=
		same as <String.hexToRgb>, but as an array method.=0A=
	*/=0A=
=0A=
	hexToRgb: function(array){=0A=
		if (this.length !=3D 3) return false;=0A=
		var rgb =3D [];=0A=
		for (var i =3D 0; i < 3; i++){=0A=
			rgb.push(parseInt((this[i].length =3D=3D 1) ? this[i] + this[i] : =
this[i], 16));=0A=
		}=0A=
		return array ? rgb : 'rgb(' + rgb.join(',') + ')';=0A=
	}=0A=
=0A=
});=0A=
=0A=
/* =0A=
Script: Function.js=0A=
	Contains Function prototypes and utility functions .=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
=0A=
Credits:=0A=
	- Some functions are inspired by those found in prototype.js =
<http://prototype.conio.net/> (c) 2005 Sam Stephenson sam [at] conio =
[dot] net, MIT-style license=0A=
*/=0A=
=0A=
/*=0A=
Class: Function=0A=
	A collection of The Function Object prototype methods.=0A=
*/=0A=
=0A=
Function.extend({=0A=
=0A=
	/*=0A=
	Property: create=0A=
		Main function to create closures.=0A=
=0A=
	Returns:=0A=
		a function.=0A=
=0A=
	Arguments:=0A=
		options - An Options object.=0A=
=0A=
	Options:=0A=
		bind - The object that the "this" of the function will refer to. =
Default is the current function.=0A=
		event - If set to true, the function will act as an event listener and =
receive an event as first argument.=0A=
				If set to a class name, the function will receive a new instance of =
this class (with the event passed as argument's constructor) as first =
argument.=0A=
				Default is false.=0A=
		arguments - A single argument or array of arguments that will be =
passed to the function when called.=0A=
		=0A=
					If both the event and arguments options are set, the event is =
passed as first argument and the arguments array will follow.=0A=
					=0A=
					Default is no custom arguments, the function will receive the =
standard arguments when called.=0A=
					=0A=
		delay - Numeric value: if set, the returned function will delay the =
actual execution by this amount of milliseconds and return a timer =
handle when called.=0A=
				Default is no delay.=0A=
		periodical - Numeric value: if set, the returned function will =
periodically perform the actual execution with this specified interval =
and return a timer handle when called.=0A=
				Default is no periodical execution.=0A=
		attempt - If set to true, the returned function will try to execute =
and return either the results or false on error. Default is false.=0A=
	*/=0A=
=0A=
	create: function(options){=0A=
		var fn =3D this;=0A=
		options =3D $merge({=0A=
			'bind': fn,=0A=
			'event': false,=0A=
			'arguments': null,=0A=
			'delay': false,=0A=
			'periodical': false,=0A=
			'attempt': false=0A=
		}, options);=0A=
		if ($chk(options.arguments) && $type(options.arguments) !=3D 'array') =
options.arguments =3D [options.arguments];=0A=
		return function(event){=0A=
			var args;=0A=
			if (options.event){=0A=
				event =3D event || window.event;=0A=
				args =3D [(options.event =3D=3D=3D true) ? event : new =
options.event(event)];=0A=
				if (options.arguments) args.extend(options.arguments);=0A=
			}=0A=
			else args =3D options.arguments || arguments;=0A=
			var returns =3D function(){=0A=
				return fn.apply($pick(options.bind, fn), args);=0A=
			};=0A=
			if (options.delay) return setTimeout(returns, options.delay);=0A=
			if (options.periodical) return setInterval(returns, =
options.periodical);=0A=
			if (options.attempt) try {return returns();} catch(err){return =
false;};=0A=
			return returns();=0A=
		};=0A=
	},=0A=
=0A=
	/*=0A=
	Property: pass=0A=
		Shortcut to create closures with arguments and bind.=0A=
=0A=
	Returns:=0A=
		a function.=0A=
=0A=
	Arguments:=0A=
		args - the arguments passed. must be an array if arguments > 1=0A=
		bind - optional, the object that the "this" of the function will refer =
to.=0A=
=0A=
	Example:=0A=
		>myFunction.pass([arg1, arg2], myElement);=0A=
	*/=0A=
=0A=
	pass: function(args, bind){=0A=
		return this.create({'arguments': args, 'bind': bind});=0A=
	},=0A=
=0A=
	/*=0A=
	Property: attempt=0A=
		Tries to execute the function, returns either the result of the =
function or false on error.=0A=
=0A=
	Arguments:=0A=
		args - the arguments passed. must be an array if arguments > 1=0A=
		bind - optional, the object that the "this" of the function will refer =
to.=0A=
=0A=
	Example:=0A=
		>myFunction.attempt([arg1, arg2], myElement);=0A=
	*/=0A=
=0A=
	attempt: function(args, bind){=0A=
		return this.create({'arguments': args, 'bind': bind, 'attempt': =
true})();=0A=
	},=0A=
=0A=
	/*=0A=
	Property: bind=0A=
		method to easily create closures with "this" altered.=0A=
=0A=
	Arguments:=0A=
		bind - optional, the object that the "this" of the function will refer =
to.=0A=
		args - optional, the arguments passed. must be an array if arguments > =
1=0A=
=0A=
	Returns:=0A=
		a function.=0A=
=0A=
	Example:=0A=
		>function myFunction(){=0A=
		>	this.setStyle('color', 'red');=0A=
		>	// note that 'this' here refers to myFunction, not an element=0A=
		>	// we'll need to bind this function to the element we want to alter=0A=
		>};=0A=
		>var myBoundFunction =3D myFunction.bind(myElement);=0A=
		>myBoundFunction(); // this will make the element myElement red.=0A=
	*/=0A=
=0A=
	bind: function(bind, args){=0A=
		return this.create({'bind': bind, 'arguments': args});=0A=
	},=0A=
=0A=
	/*=0A=
	Property: bindAsEventListener=0A=
		cross browser method to pass event firer=0A=
=0A=
	Arguments:=0A=
		bind - optional, the object that the "this" of the function will refer =
to.=0A=
		args - optional, the arguments passed. must be an array if arguments > =
1=0A=
=0A=
	Returns:=0A=
		a function with the parameter bind as its "this" and as a pre-passed =
argument event or window.event, depending on the browser.=0A=
=0A=
	Example:=0A=
		>function myFunction(event){=0A=
		>	alert(event.clientx) //returns the coordinates of the mouse..=0A=
		>};=0A=
		>myElement.onclick =3D myFunction.bindAsEventListener(myElement);=0A=
	*/=0A=
=0A=
	bindAsEventListener: function(bind, args){=0A=
		return this.create({'bind': bind, 'event': true, 'arguments': args});=0A=
	},=0A=
=0A=
	/*=0A=
	Property: delay=0A=
		Delays the execution of a function by a specified duration.=0A=
=0A=
	Arguments:=0A=
		delay - the duration to wait in milliseconds.=0A=
		bind - optional, the object that the "this" of the function will refer =
to.=0A=
		args - optional, the arguments passed. must be an array if arguments > =
1=0A=
=0A=
	Example:=0A=
		>myFunction.delay(50, myElement) //wait 50 milliseconds, then call =
myFunction and bind myElement to it=0A=
		>(function(){alert('one second later...')}).delay(1000); //wait a =
second and alert=0A=
	*/=0A=
=0A=
	delay: function(delay, bind, args){=0A=
		return this.create({'delay': delay, 'bind': bind, 'arguments': =
args})();=0A=
	},=0A=
=0A=
	/*=0A=
	Property: periodical=0A=
		Executes a function in the specified intervals of time=0A=
=0A=
	Arguments:=0A=
		interval - the duration of the intervals between executions.=0A=
		bind - optional, the object that the "this" of the function will refer =
to.=0A=
		args - optional, the arguments passed. must be an array if arguments > =
1=0A=
	*/=0A=
=0A=
	periodical: function(interval, bind, args){=0A=
		return this.create({'periodical': interval, 'bind': bind, 'arguments': =
args})();=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Number.js=0A=
	Contains the Number prototypes.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Number=0A=
	A collection of The Number Object prototype methods.=0A=
*/=0A=
=0A=
Number.extend({=0A=
=0A=
	/*=0A=
	Property: toInt=0A=
		Returns this number; useful because toInt must work on both Strings =
and Numbers.=0A=
	*/=0A=
=0A=
	toInt: function(){=0A=
		return parseInt(this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toFloat=0A=
		Returns this number as a float; useful because toFloat must work on =
both Strings and Numbers.=0A=
	*/=0A=
=0A=
	toFloat: function(){=0A=
		return parseFloat(this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: limit=0A=
		Limits the number.=0A=
=0A=
	Arguments:=0A=
		min - number, minimum value=0A=
		max - number, maximum value=0A=
=0A=
	Returns:=0A=
		the number in the given limits.=0A=
=0A=
	Example:=0A=
		>(12).limit(2, 6.5)  // returns 6.5=0A=
		>(-4).limit(2, 6.5)  // returns 2=0A=
		>(4.3).limit(2, 6.5) // returns 4.3=0A=
	*/=0A=
=0A=
	limit: function(min, max){=0A=
		return Math.min(max, Math.max(min, this));=0A=
	},=0A=
=0A=
	/*=0A=
	Property: round=0A=
		Returns the number rounded to specified precision.=0A=
=0A=
	Arguments:=0A=
		precision - integer, number of digits after the decimal point. Can =
also be negative or zero (default).=0A=
=0A=
	Example:=0A=
		>12.45.round() // returns 12=0A=
		>12.45.round(1) // returns 12.5=0A=
		>12.45.round(-1) // returns 10=0A=
=0A=
	Returns:=0A=
		The rounded number.=0A=
	*/=0A=
=0A=
	round: function(precision){=0A=
		precision =3D Math.pow(10, precision || 0);=0A=
		return Math.round(this * precision) / precision;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: times=0A=
		Executes a passed in function the specified number of times=0A=
=0A=
	Arguments:=0A=
		function - the function to be executed on each iteration of the loop=0A=
=0A=
	Example:=0A=
		>(4).times(alert);=0A=
	*/=0A=
=0A=
	times: function(fn){=0A=
		for (var i =3D 0; i < this; i++) fn(i);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Element.js=0A=
	Contains useful Element prototypes, to be used with the dollar function =
<$>.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
=0A=
Credits:=0A=
	- Some functions are inspired by those found in prototype.js =
<http://prototype.conio.net/> (c) 2005 Sam Stephenson sam [at] conio =
[dot] net, MIT-style license=0A=
*/=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
var Element =3D new Class({=0A=
=0A=
	/*=0A=
	Property: initialize=0A=
		Creates a new element of the type passed in.=0A=
=0A=
	Arguments:=0A=
		el - string; the tag name for the element you wish to create. you can =
also pass in an element reference, in which case it will be extended.=0A=
		props - object; the properties you want to add to your element.=0A=
		Accepts the same keys as <Element.setProperties>, but also allows =
events and styles=0A=
=0A=
	Props:=0A=
		the key styles will be used as setStyles, the key events will be used =
as addEvents. any other key is used as setProperty.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		new Element('a', {=0A=
			'styles': {=0A=
				'display': 'block',=0A=
				'border': '1px solid black'=0A=
			},=0A=
			'events': {=0A=
				'click': function(){=0A=
					//aaa=0A=
				},=0A=
				'mousedown': function(){=0A=
					//aaa=0A=
				}=0A=
			},=0A=
			'class': 'myClassSuperClass',=0A=
			'href': 'http://mad4milk.net'=0A=
		});=0A=
=0A=
		(end)=0A=
	*/=0A=
=0A=
	initialize: function(el, props){=0A=
		if ($type(el) =3D=3D 'string'){=0A=
			if (window.ie && props && (props.name || props.type)){=0A=
				var name =3D (props.name) ? ' name=3D"' + props.name + '"' : '';=0A=
				var type =3D (props.type) ? ' type=3D"' + props.type + '"' : '';=0A=
				delete props.name;=0A=
				delete props.type;=0A=
				el =3D '<' + el + name + type + '>';=0A=
			}=0A=
			el =3D document.createElement(el);=0A=
		}=0A=
		el =3D $(el);=0A=
		return (!props || !el) ? el : el.set(props);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Class: Elements=0A=
	- Every dom function such as <$$>, or in general every function that =
returns a collection of nodes in mootools, returns them as an Elements =
class.=0A=
	- The purpose of the Elements class is to allow <Element> methods to =
work also on <Elements> array.=0A=
	- Elements is also an Array, so it accepts all the <Array> methods.=0A=
	- Every node of the Elements instance is already extended with <$>.=0A=
=0A=
Example:=0A=
	>$$('myselector').each(function(el){=0A=
	> //...=0A=
	>});=0A=
=0A=
	some iterations here, $$('myselector') is also an array.=0A=
=0A=
	>$$('myselector').setStyle('color', 'red');=0A=
	every element returned by $$('myselector') also accepts <Element> =
methods, in this example every element will be made red.=0A=
*/=0A=
=0A=
var Elements =3D new Class({=0A=
=0A=
	initialize: function(elements){=0A=
		return (elements) ? $extend(elements, this) : this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
Elements.extend =3D function(props){=0A=
	for (var prop in props){=0A=
		this.prototype[prop] =3D props[prop];=0A=
		this[prop] =3D $native.generic(prop);=0A=
	}=0A=
};=0A=
=0A=
/*=0A=
Section: Utility Functions=0A=
=0A=
Function: $=0A=
	returns the element passed in with all the Element prototypes applied.=0A=
=0A=
Arguments:=0A=
	el - a reference to an actual element or a string representing the id =
of an element=0A=
=0A=
Example:=0A=
	>$('myElement') // gets a DOM element by id with all the Element =
prototypes applied.=0A=
	>var div =3D document.getElementById('myElement');=0A=
	>$(div) //returns an Element also with all the mootools extentions =
applied.=0A=
=0A=
	You'll use this when you aren't sure if a variable is an actual element =
or an id, as=0A=
	well as just shorthand for document.getElementById().=0A=
=0A=
Returns:=0A=
	a DOM element or false (if no id was found).=0A=
=0A=
Note:=0A=
	you need to call $ on an element only once to get all the prototypes.=0A=
	But its no harm to call it multiple times, as it will detect if it has =
been already extended.=0A=
*/=0A=
=0A=
function $(el){=0A=
	if (!el) return null;=0A=
	if (el.htmlElement) return Garbage.collect(el);=0A=
	if ([window, document].contains(el)) return el;=0A=
	var type =3D $type(el);=0A=
	if (type =3D=3D 'string'){=0A=
		el =3D document.getElementById(el);=0A=
		type =3D (el) ? 'element' : false;=0A=
	}=0A=
	if (type !=3D 'element') return null;=0A=
	if (el.htmlElement) return Garbage.collect(el);=0A=
	if (['object', 'embed'].contains(el.tagName.toLowerCase())) return el;=0A=
	$extend(el, Element.prototype);=0A=
	el.htmlElement =3D function(){};=0A=
	return Garbage.collect(el);=0A=
};=0A=
=0A=
/*=0A=
Function: $$=0A=
	Selects, and extends DOM elements. Elements arrays returned with $$ =
will also accept all the <Element> methods.=0A=
	The return type of element methods run through $$ is always an array. =
If the return array is only made by elements,=0A=
	$$ will be applied automatically.=0A=
=0A=
Arguments:=0A=
	HTML Collections, arrays of elements, arrays of strings as element ids, =
elements, strings as selectors.=0A=
	Any number of the above as arguments are accepted.=0A=
=0A=
Note:=0A=
	if you load <Element.Selectors.js>, $$ will also accept CSS Selectors, =
otherwise the only selectors supported are tag names.=0A=
=0A=
Example:=0A=
	>$$('a') //an array of all anchor tags on the page=0A=
	>$$('a', 'b') //an array of all anchor and bold tags on the page=0A=
	>$$('#myElement') //array containing only the element with id =3D =
myElement. (only with <Element.Selectors.js>)=0A=
	>$$('#myElement a.myClass') //an array of all anchor tags with the =
class "myClass"=0A=
	>//within the DOM element with id "myElement" (only with =
<Element.Selectors.js>)=0A=
	>$$(myelement, myelement2, 'a', ['myid', myid2, 'myid3'], =
document.getElementsByTagName('div')) //an array containing:=0A=
	>// the element referenced as myelement if existing,=0A=
	>// the element referenced as myelement2 if existing,=0A=
	>// all the elements with a as tag in the page,=0A=
	>// the element with id =3D myid if existing=0A=
	>// the element with id =3D myid2 if existing=0A=
	>// the element with id =3D myid3 if existing=0A=
	>// all the elements with div as tag in the page=0A=
=0A=
Returns:=0A=
	array - array of all the dom elements matched, extended with <$>.  =
Returns as <Elements>.=0A=
*/=0A=
=0A=
document.getElementsBySelector =3D document.getElementsByTagName;=0A=
=0A=
function $$(){=0A=
	var elements =3D [];=0A=
	for (var i =3D 0, j =3D arguments.length; i < j; i++){=0A=
		var selector =3D arguments[i];=0A=
		switch($type(selector)){=0A=
			case 'element': elements.push(selector);=0A=
			case 'boolean': break;=0A=
			case false: break;=0A=
			case 'string': selector =3D document.getElementsBySelector(selector, =
true);=0A=
			default: elements.extend(selector);=0A=
		}=0A=
	}=0A=
	return $$.unique(elements);=0A=
};=0A=
=0A=
$$.unique =3D function(array){=0A=
	var elements =3D [];=0A=
	for (var i =3D 0, l =3D array.length; i < l; i++){=0A=
		if (array[i].$included) continue;=0A=
		var element =3D $(array[i]);=0A=
		if (element && !element.$included){=0A=
			element.$included =3D true;=0A=
			elements.push(element);=0A=
		}=0A=
	}=0A=
	for (var n =3D 0, d =3D elements.length; n < d; n++) =
elements[n].$included =3D null;=0A=
	return new Elements(elements);=0A=
};=0A=
=0A=
Elements.Multi =3D function(property){=0A=
	return function(){=0A=
		var args =3D arguments;=0A=
		var items =3D [];=0A=
		var elements =3D true;=0A=
		for (var i =3D 0, j =3D this.length, returns; i < j; i++){=0A=
			returns =3D this[i][property].apply(this[i], args);=0A=
			if ($type(returns) !=3D 'element') elements =3D false;=0A=
			items.push(returns);=0A=
		};=0A=
		return (elements) ? $$.unique(items) : items;=0A=
	};=0A=
};=0A=
=0A=
Element.extend =3D function(properties){=0A=
	for (var property in properties){=0A=
		HTMLElement.prototype[property] =3D properties[property];=0A=
		Element.prototype[property] =3D properties[property];=0A=
		Element[property] =3D $native.generic(property);=0A=
		var elementsProperty =3D (Array.prototype[property]) ? property + =
'Elements' : property;=0A=
		Elements.prototype[elementsProperty] =3D Elements.Multi(property);=0A=
	}=0A=
};=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: set=0A=
		you can set events, styles and properties with this shortcut. same as =
calling new Element.=0A=
	*/=0A=
=0A=
	set: function(props){=0A=
		for (var prop in props){=0A=
			var val =3D props[prop];=0A=
			switch(prop){=0A=
				case 'styles': this.setStyles(val); break;=0A=
				case 'events': if (this.addEvents) this.addEvents(val); break;=0A=
				case 'properties': this.setProperties(val); break;=0A=
				default: this.setProperty(prop, val);=0A=
			}=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	inject: function(el, where){=0A=
		el =3D $(el);=0A=
		switch(where){=0A=
			case 'before': el.parentNode.insertBefore(this, el); break;=0A=
			case 'after':=0A=
				var next =3D el.getNext();=0A=
				if (!next) el.parentNode.appendChild(this);=0A=
				else el.parentNode.insertBefore(this, next);=0A=
				break;=0A=
			case 'top':=0A=
				var first =3D el.firstChild;=0A=
				if (first){=0A=
					el.insertBefore(this, first);=0A=
					break;=0A=
				}=0A=
			default: el.appendChild(this);=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: injectBefore=0A=
		Inserts the Element before the passed element.=0A=
=0A=
	Arguments:=0A=
		el - an element reference or the id of the element to be injected in.=0A=
=0A=
	Example:=0A=
		>html:=0A=
		><div id=3D"myElement"></div>=0A=
		><div id=3D"mySecondElement"></div>=0A=
		>js:=0A=
		>$('mySecondElement').injectBefore('myElement');=0A=
		>resulting html:=0A=
		><div id=3D"mySecondElement"></div>=0A=
		><div id=3D"myElement"></div>=0A=
	*/=0A=
=0A=
	injectBefore: function(el){=0A=
		return this.inject(el, 'before');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: injectAfter=0A=
		Same as <Element.injectBefore>, but inserts the element after.=0A=
	*/=0A=
=0A=
	injectAfter: function(el){=0A=
		return this.inject(el, 'after');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: injectInside=0A=
		Same as <Element.injectBefore>, but inserts the element inside.=0A=
	*/=0A=
=0A=
	injectInside: function(el){=0A=
		return this.inject(el, 'bottom');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: injectTop=0A=
		Same as <Element.injectInside>, but inserts the element inside, at the =
top.=0A=
	*/=0A=
=0A=
	injectTop: function(el){=0A=
		return this.inject(el, 'top');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: adopt=0A=
		Inserts the passed elements inside the Element.=0A=
=0A=
	Arguments:=0A=
		accepts elements references, element ids as string, selectors =
($$('stuff')) / array of elements, array of ids as strings and =
collections.=0A=
	*/=0A=
=0A=
	adopt: function(){=0A=
		var elements =3D [];=0A=
		$each(arguments, function(argument){=0A=
			elements =3D elements.concat(argument);=0A=
		});=0A=
		$$(elements).inject(this);=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: remove=0A=
		Removes the Element from the DOM.=0A=
=0A=
	Example:=0A=
		>$('myElement').remove() //bye bye=0A=
	*/=0A=
=0A=
	remove: function(){=0A=
		return this.parentNode.removeChild(this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: clone=0A=
		Clones the Element and returns the cloned one.=0A=
=0A=
	Arguments:=0A=
		contents - boolean, when true the Element is cloned with childNodes, =
default true=0A=
=0A=
	Returns:=0A=
		the cloned element=0A=
=0A=
	Example:=0A=
		>var clone =3D $('myElement').clone().injectAfter('myElement');=0A=
		>//clones the Element and append the clone after the Element.=0A=
	*/=0A=
=0A=
	clone: function(contents){=0A=
		var el =3D $(this.cloneNode(contents !=3D=3D false));=0A=
		if (!el.$events) return el;=0A=
		el.$events =3D {};=0A=
		for (var type in this.$events) el.$events[type] =3D {=0A=
			'keys': $A(this.$events[type].keys),=0A=
			'values': $A(this.$events[type].values)=0A=
		};=0A=
		return el.removeEvents();=0A=
	},=0A=
=0A=
	/*=0A=
	Property: replaceWith=0A=
		Replaces the Element with an element passed.=0A=
=0A=
	Arguments:=0A=
		el - a string representing the element to be injected in (myElementId, =
or div), or an element reference.=0A=
		If you pass div or another tag, the element will be created.=0A=
=0A=
	Returns:=0A=
		the passed in element=0A=
=0A=
	Example:=0A=
		>$('myOldElement').replaceWith($('myNewElement')); //$('myOldElement') =
is gone, and $('myNewElement') is in its place.=0A=
	*/=0A=
=0A=
	replaceWith: function(el){=0A=
		el =3D $(el);=0A=
		this.parentNode.replaceChild(el, this);=0A=
		return el;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: appendText=0A=
		Appends text node to a DOM element.=0A=
=0A=
	Arguments:=0A=
		text - the text to append.=0A=
=0A=
	Example:=0A=
		><div id=3D"myElement">hey</div>=0A=
		>$('myElement').appendText(' howdy'); //myElement innerHTML is now =
"hey howdy"=0A=
	*/=0A=
=0A=
	appendText: function(text){=0A=
		this.appendChild(document.createTextNode(text));=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: hasClass=0A=
		Tests the Element to see if it has the passed in className.=0A=
=0A=
	Returns:=0A=
		true - the Element has the class=0A=
		false - it doesn't=0A=
=0A=
	Arguments:=0A=
		className - string; the class name to test.=0A=
=0A=
	Example:=0A=
		><div id=3D"myElement" class=3D"testClass"></div>=0A=
		>$('myElement').hasClass('testClass'); //returns true=0A=
	*/=0A=
=0A=
	hasClass: function(className){=0A=
		return this.className.contains(className, ' ');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: addClass=0A=
		Adds the passed in class to the Element, if the element doesnt already =
have it.=0A=
=0A=
	Arguments:=0A=
		className - string; the class name to add=0A=
=0A=
	Example:=0A=
		><div id=3D"myElement" class=3D"testClass"></div>=0A=
		>$('myElement').addClass('newClass'); //<div id=3D"myElement" =
class=3D"testClass newClass"></div>=0A=
	*/=0A=
=0A=
	addClass: function(className){=0A=
		if (!this.hasClass(className)) this.className =3D (this.className + ' =
' + className).clean();=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: removeClass=0A=
		Works like <Element.addClass>, but removes the class from the element.=0A=
	*/=0A=
=0A=
	removeClass: function(className){=0A=
		this.className =3D this.className.replace(new RegExp('(^|\\s)' + =
className + '(?:\\s|$)'), '$1').clean();=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toggleClass=0A=
		Adds or removes the passed in class name to the element, depending on =
if it's present or not.=0A=
=0A=
	Arguments:=0A=
		className - the class to add or remove=0A=
=0A=
	Example:=0A=
		><div id=3D"myElement" class=3D"myClass"></div>=0A=
		>$('myElement').toggleClass('myClass');=0A=
		><div id=3D"myElement" class=3D""></div>=0A=
		>$('myElement').toggleClass('myClass');=0A=
		><div id=3D"myElement" class=3D"myClass"></div>=0A=
	*/=0A=
=0A=
	toggleClass: function(className){=0A=
		return this.hasClass(className) ? this.removeClass(className) : =
this.addClass(className);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setStyle=0A=
		Sets a css property to the Element.=0A=
=0A=
		Arguments:=0A=
			property - the property to set=0A=
			value - the value to which to set it; for numeric values that require =
"px" you can pass an integer=0A=
=0A=
		Example:=0A=
			>$('myElement').setStyle('width', '300px'); //the width is now 300px=0A=
			>$('myElement').setStyle('width', 300); //the width is now 300px=0A=
	*/=0A=
=0A=
	setStyle: function(property, value){=0A=
		switch(property){=0A=
			case 'opacity': return this.setOpacity(parseFloat(value));=0A=
			case 'float': property =3D (window.ie) ? 'styleFloat' : 'cssFloat';=0A=
		}=0A=
		property =3D property.camelCase();=0A=
		switch($type(value)){=0A=
			case 'number': if (!['zIndex', 'zoom'].contains(property)) value +=3D =
'px'; break;=0A=
			case 'array': value =3D 'rgb(' + value.join(',') + ')';=0A=
		}=0A=
		this.style[property] =3D value;=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setStyles=0A=
		Applies a collection of styles to the Element.=0A=
=0A=
	Arguments:=0A=
		source - an object or string containing all the styles to apply. When =
its a string it overrides old style.=0A=
=0A=
	Examples:=0A=
		>$('myElement').setStyles({=0A=
		>	border: '1px solid #000',=0A=
		>	width: 300,=0A=
		>	height: 400=0A=
		>});=0A=
=0A=
		OR=0A=
=0A=
		>$('myElement').setStyles('border: 1px solid #000; width: 300px; =
height: 400px;');=0A=
	*/=0A=
=0A=
	setStyles: function(source){=0A=
		switch($type(source)){=0A=
			case 'object': Element.setMany(this, 'setStyle', source); break;=0A=
			case 'string': this.style.cssText =3D source;=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setOpacity=0A=
		Sets the opacity of the Element, and sets also visibility =3D=3D =
"hidden" if opacity =3D=3D 0, and visibility =3D "visible" if opacity > =
0.=0A=
=0A=
	Arguments:=0A=
		opacity - float; Accepts values from 0 to 1.=0A=
=0A=
	Example:=0A=
		>$('myElement').setOpacity(0.5) //make it 50% transparent=0A=
	*/=0A=
=0A=
	setOpacity: function(opacity){=0A=
		if (opacity =3D=3D 0){=0A=
			if (this.style.visibility !=3D "hidden") this.style.visibility =3D =
"hidden";=0A=
		} else {=0A=
			if (this.style.visibility !=3D "visible") this.style.visibility =3D =
"visible";=0A=
		}=0A=
		if (!this.currentStyle || !this.currentStyle.hasLayout) =
this.style.zoom =3D 1;=0A=
		if (window.ie) this.style.filter =3D (opacity =3D=3D 1) ? '' : =
"alpha(opacity=3D" + opacity * 100 + ")";=0A=
		this.style.opacity =3D this.$tmp.opacity =3D opacity;=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getStyle=0A=
		Returns the style of the Element given the property passed in.=0A=
=0A=
	Arguments:=0A=
		property - the css style property you want to retrieve=0A=
=0A=
	Example:=0A=
		>$('myElement').getStyle('width'); //returns "400px"=0A=
		>//but you can also use=0A=
		>$('myElement').getStyle('width').toInt(); //returns 400=0A=
=0A=
	Returns:=0A=
		the style as a string=0A=
	*/=0A=
=0A=
	getStyle: function(property){=0A=
		property =3D property.camelCase();=0A=
		var result =3D this.style[property];=0A=
		if (!$chk(result)){=0A=
			if (property =3D=3D 'opacity') return this.$tmp.opacity;=0A=
			result =3D [];=0A=
			for (var style in Element.Styles){=0A=
				if (property =3D=3D style){=0A=
					Element.Styles[style].each(function(s){=0A=
						var style =3D this.getStyle(s);=0A=
						result.push(parseInt(style) ? style : '0px');=0A=
					}, this);=0A=
					if (property =3D=3D 'border'){=0A=
						var every =3D result.every(function(bit){=0A=
							return (bit =3D=3D result[0]);=0A=
						});=0A=
						return (every) ? result[0] : false;=0A=
					}=0A=
					return result.join(' ');=0A=
				}=0A=
			}=0A=
			if (property.contains('border')){=0A=
				if (Element.Styles.border.contains(property)){=0A=
					return ['Width', 'Style', 'Color'].map(function(p){=0A=
						return this.getStyle(property + p);=0A=
					}, this).join(' ');=0A=
				} else if (Element.borderShort.contains(property)){=0A=
					return ['Top', 'Right', 'Bottom', 'Left'].map(function(p){=0A=
						return this.getStyle('border' + p + property.replace('border', =
''));=0A=
					}, this).join(' ');=0A=
				}=0A=
			}=0A=
			if (document.defaultView) result =3D =
document.defaultView.getComputedStyle(this, =
null).getPropertyValue(property.hyphenate());=0A=
			else if (this.currentStyle) result =3D this.currentStyle[property];=0A=
		}=0A=
		if (window.ie) result =3D Element.fixStyle(property, result, this);=0A=
		if (result && property.test(/color/i) && result.contains('rgb')){=0A=
			return result.split('rgb').splice(1,4).map(function(color){=0A=
				return color.rgbToHex();=0A=
			}).join(' ');=0A=
		}=0A=
		return result;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getStyles=0A=
		Returns an object of styles of the Element for each argument passed in.=0A=
		Arguments:=0A=
		properties - strings; any number of style properties=0A=
	Example:=0A=
		>$('myElement').getStyles('width','height','padding');=0A=
		>//returns an object like:=0A=
		>{width: "10px", height: "10px", padding: "10px 0px 10px 0px"}=0A=
	*/=0A=
=0A=
	getStyles: function(){=0A=
		return Element.getMany(this, 'getStyle', arguments);=0A=
	},=0A=
=0A=
	walk: function(brother, start){=0A=
		brother +=3D 'Sibling';=0A=
		var el =3D (start) ? this[start] : this[brother];=0A=
		while (el && $type(el) !=3D 'element') el =3D el[brother];=0A=
		return $(el);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getPrevious=0A=
		Returns the previousSibling of the Element, excluding text nodes.=0A=
=0A=
	Example:=0A=
		>$('myElement').getPrevious(); //get the previous DOM element from =
myElement=0A=
=0A=
	Returns:=0A=
		the sibling element or undefined if none found.=0A=
	*/=0A=
=0A=
	getPrevious: function(){=0A=
		return this.walk('previous');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getNext=0A=
		Works as Element.getPrevious, but tries to find the nextSibling.=0A=
	*/=0A=
=0A=
	getNext: function(){=0A=
		return this.walk('next');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getFirst=0A=
		Works as <Element.getPrevious>, but tries to find the firstChild.=0A=
	*/=0A=
=0A=
	getFirst: function(){=0A=
		return this.walk('next', 'firstChild');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getLast=0A=
		Works as <Element.getPrevious>, but tries to find the lastChild.=0A=
	*/=0A=
=0A=
	getLast: function(){=0A=
		return this.walk('previous', 'lastChild');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getParent=0A=
		returns the $(element.parentNode)=0A=
	*/=0A=
=0A=
	getParent: function(){=0A=
		return $(this.parentNode);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getChildren=0A=
		returns all the $(element.childNodes), excluding text nodes. Returns =
as <Elements>.=0A=
	*/=0A=
=0A=
	getChildren: function(){=0A=
		return $$(this.childNodes);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: hasChild=0A=
		returns true if the passed in element is a child of the $(element).=0A=
	*/=0A=
=0A=
	hasChild: function(el){=0A=
		return !!$A(this.getElementsByTagName('*')).contains(el);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getProperty=0A=
		Gets the an attribute of the Element.=0A=
=0A=
	Arguments:=0A=
		property - string; the attribute to retrieve=0A=
=0A=
	Example:=0A=
		>$('myImage').getProperty('src') // returns whatever.gif=0A=
=0A=
	Returns:=0A=
		the value, or an empty string=0A=
	*/=0A=
=0A=
	getProperty: function(property){=0A=
		var index =3D Element.Properties[property];=0A=
		if (index) return this[index];=0A=
		var flag =3D Element.PropertiesIFlag[property] || 0;=0A=
		if (!window.ie || flag) return this.getAttribute(property, flag);=0A=
		var node =3D this.attributes[property];=0A=
		return (node) ? node.nodeValue : null;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: removeProperty=0A=
		Removes an attribute from the Element=0A=
=0A=
	Arguments:=0A=
		property - string; the attribute to remove=0A=
	*/=0A=
=0A=
	removeProperty: function(property){=0A=
		var index =3D Element.Properties[property];=0A=
		if (index) this[index] =3D '';=0A=
		else this.removeAttribute(property);=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getProperties=0A=
		same as <Element.getStyles>, but for properties=0A=
	*/=0A=
=0A=
	getProperties: function(){=0A=
		return Element.getMany(this, 'getProperty', arguments);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setProperty=0A=
		Sets an attribute for the Element.=0A=
=0A=
	Arguments:=0A=
		property - string; the property to assign the value passed in=0A=
		value - the value to assign to the property passed in=0A=
=0A=
	Example:=0A=
		>$('myImage').setProperty('src', 'whatever.gif'); //myImage now points =
to whatever.gif for its source=0A=
	*/=0A=
=0A=
	setProperty: function(property, value){=0A=
		var index =3D Element.Properties[property];=0A=
		if (index) this[index] =3D value;=0A=
		else this.setAttribute(property, value);=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setProperties=0A=
		Sets numerous attributes for the Element.=0A=
=0A=
	Arguments:=0A=
		source - an object with key/value pairs.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		$('myElement').setProperties({=0A=
			src: 'whatever.gif',=0A=
			alt: 'whatever dude'=0A=
		});=0A=
		<img src=3D"whatever.gif" alt=3D"whatever dude">=0A=
		(end)=0A=
	*/=0A=
=0A=
	setProperties: function(source){=0A=
		return Element.setMany(this, 'setProperty', source);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setHTML=0A=
		Sets the innerHTML of the Element.=0A=
=0A=
	Arguments:=0A=
		html - string; the new innerHTML for the element.=0A=
=0A=
	Example:=0A=
		>$('myElement').setHTML(newHTML) //the innerHTML of myElement is now =
=3D newHTML=0A=
	*/=0A=
=0A=
	setHTML: function(){=0A=
		this.innerHTML =3D $A(arguments).join('');=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setText=0A=
		Sets the inner text of the Element.=0A=
=0A=
	Arguments:=0A=
		text - string; the new text content for the element.=0A=
=0A=
	Example:=0A=
		>$('myElement').setText('some text') //the text of myElement is now =
=3D 'some text'=0A=
	*/=0A=
=0A=
	setText: function(text){=0A=
		var tag =3D this.getTag();=0A=
		if (['style', 'script'].contains(tag)){=0A=
			if (window.ie){=0A=
				if (tag =3D=3D 'style') this.styleSheet.cssText =3D text;=0A=
				else if (tag =3D=3D  'script') this.setProperty('text', text);=0A=
				return this;=0A=
			} else {=0A=
				this.removeChild(this.firstChild);=0A=
				return this.appendText(text);=0A=
			}=0A=
		}=0A=
		this[$defined(this.innerText) ? 'innerText' : 'textContent'] =3D text;=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getText=0A=
		Gets the inner text of the Element.=0A=
	*/=0A=
=0A=
	getText: function(){=0A=
		var tag =3D this.getTag();=0A=
		if (['style', 'script'].contains(tag)){=0A=
			if (window.ie){=0A=
				if (tag =3D=3D 'style') return this.styleSheet.cssText;=0A=
				else if (tag =3D=3D  'script') return this.getProperty('text');=0A=
			} else {=0A=
				return this.innerHTML;=0A=
			}=0A=
		}=0A=
		return ($pick(this.innerText, this.textContent));=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getTag=0A=
		Returns the tagName of the element in lower case.=0A=
=0A=
	Example:=0A=
		>$('myImage').getTag() // returns 'img'=0A=
=0A=
	Returns:=0A=
		The tag name in lower case=0A=
	*/=0A=
=0A=
	getTag: function(){=0A=
		return this.tagName.toLowerCase();=0A=
	},=0A=
=0A=
	/*=0A=
	Property: empty=0A=
		Empties an element of all its children.=0A=
=0A=
	Example:=0A=
		>$('myDiv').empty() // empties the Div and returns it=0A=
=0A=
	Returns:=0A=
		The element.=0A=
	*/=0A=
=0A=
	empty: function(){=0A=
		Garbage.trash(this.getElementsByTagName('*'));=0A=
		return this.setHTML('');=0A=
	}=0A=
=0A=
});=0A=
=0A=
Element.fixStyle =3D function(property, result, element){=0A=
	if ($chk(parseInt(result))) return result;=0A=
	if (['height', 'width'].contains(property)){=0A=
		var values =3D (property =3D=3D 'width') ? ['left', 'right'] : ['top', =
'bottom'];=0A=
		var size =3D 0;=0A=
		values.each(function(value){=0A=
			size +=3D element.getStyle('border-' + value + '-width').toInt() + =
element.getStyle('padding-' + value).toInt();=0A=
		});=0A=
		return element['offset' + property.capitalize()] - size + 'px';=0A=
	} else if (property.test(/border(.+)Width|margin|padding/)){=0A=
		return '0px';=0A=
	}=0A=
	return result;=0A=
};=0A=
=0A=
Element.Styles =3D {'border': [], 'padding': [], 'margin': []};=0A=
['Top', 'Right', 'Bottom', 'Left'].each(function(direction){=0A=
	for (var style in Element.Styles) Element.Styles[style].push(style + =
direction);=0A=
});=0A=
=0A=
Element.borderShort =3D ['borderWidth', 'borderStyle', 'borderColor'];=0A=
=0A=
Element.getMany =3D function(el, method, keys){=0A=
	var result =3D {};=0A=
	$each(keys, function(key){=0A=
		result[key] =3D el[method](key);=0A=
	});=0A=
	return result;=0A=
};=0A=
=0A=
Element.setMany =3D function(el, method, pairs){=0A=
	for (var key in pairs) el[method](key, pairs[key]);=0A=
	return el;=0A=
};=0A=
=0A=
Element.Properties =3D new Abstract({=0A=
	'class': 'className', 'for': 'htmlFor', 'colspan': 'colSpan', =
'rowspan': 'rowSpan',=0A=
	'accesskey': 'accessKey', 'tabindex': 'tabIndex', 'maxlength': =
'maxLength',=0A=
	'readonly': 'readOnly', 'frameborder': 'frameBorder', 'value': 'value',=0A=
	'disabled': 'disabled', 'checked': 'checked', 'multiple': 'multiple', =
'selected': 'selected'=0A=
});=0A=
Element.PropertiesIFlag =3D {=0A=
	'href': 2, 'src': 2=0A=
};=0A=
=0A=
Element.Methods =3D {=0A=
	Listeners: {=0A=
		addListener: function(type, fn){=0A=
			if (this.addEventListener) this.addEventListener(type, fn, false);=0A=
			else this.attachEvent('on' + type, fn);=0A=
			return this;=0A=
		},=0A=
=0A=
		removeListener: function(type, fn){=0A=
			if (this.removeEventListener) this.removeEventListener(type, fn, =
false);=0A=
			else this.detachEvent('on' + type, fn);=0A=
			return this;=0A=
		}=0A=
	}=0A=
};=0A=
=0A=
window.extend(Element.Methods.Listeners);=0A=
document.extend(Element.Methods.Listeners);=0A=
Element.extend(Element.Methods.Listeners);=0A=
=0A=
var Garbage =3D {=0A=
=0A=
	elements: [],=0A=
=0A=
	collect: function(el){=0A=
		if (!el.$tmp){=0A=
			Garbage.elements.push(el);=0A=
			el.$tmp =3D {'opacity': 1};=0A=
		}=0A=
		return el;=0A=
	},=0A=
=0A=
	trash: function(elements){=0A=
		for (var i =3D 0, j =3D elements.length, el; i < j; i++){=0A=
			if (!(el =3D elements[i]) || !el.$tmp) continue;=0A=
			if (el.$events) el.fireEvent('trash').removeEvents();=0A=
			for (var p in el.$tmp) el.$tmp[p] =3D null;=0A=
			for (var d in Element.prototype) el[d] =3D null;=0A=
			Garbage.elements[Garbage.elements.indexOf(el)] =3D null;=0A=
			el.htmlElement =3D el.$tmp =3D el =3D null;=0A=
		}=0A=
		Garbage.elements.remove(null);=0A=
	},=0A=
=0A=
	empty: function(){=0A=
		Garbage.collect(window);=0A=
		Garbage.collect(document);=0A=
		Garbage.trash(Garbage.elements);=0A=
	}=0A=
=0A=
};=0A=
=0A=
window.addListener('beforeunload', function(){=0A=
	window.addListener('unload', Garbage.empty);=0A=
	if (window.ie) window.addListener('unload', CollectGarbage);=0A=
});=0A=
=0A=
/*=0A=
Script: Element.Event.js=0A=
	Contains the Event Class, Element methods to deal with Element events, =
custom Events, and the Function prototype bindWithEvent.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Event=0A=
	Cross browser methods to manage events.=0A=
=0A=
Arguments:=0A=
	event - the event=0A=
=0A=
Properties:=0A=
	shift - true if the user pressed the shift=0A=
	control - true if the user pressed the control=0A=
	alt - true if the user pressed the alt=0A=
	meta - true if the user pressed the meta key=0A=
	wheel - the amount of third button scrolling=0A=
	code - the keycode of the key pressed=0A=
	page.x - the x position of the mouse, relative to the full window=0A=
	page.y - the y position of the mouse, relative to the full window=0A=
	client.x - the x position of the mouse, relative to the viewport=0A=
	client.y - the y position of the mouse, relative to the viewport=0A=
	key - the key pressed as a lowercase string. key also returns 'enter', =
'up', 'down', 'left', 'right', 'space', 'backspace', 'delete', 'esc'. =
Handy for these special keys.=0A=
	target - the event target=0A=
	relatedTarget - the event related target=0A=
=0A=
Example:=0A=
	(start code)=0A=
	$('myLink').onkeydown =3D function(event){=0A=
		var event =3D new Event(event);=0A=
		//event is now the Event class.=0A=
		alert(event.key); //returns the lowercase letter pressed=0A=
		alert(event.shift); //returns true if the key pressed is shift=0A=
		if (event.key =3D=3D 's' && event.control) alert('document saved');=0A=
	};=0A=
	(end)=0A=
*/=0A=
=0A=
var Event =3D new Class({=0A=
=0A=
	initialize: function(event){=0A=
		if (event && event.$extended) return event;=0A=
		this.$extended =3D true;=0A=
		event =3D event || window.event;=0A=
		this.event =3D event;=0A=
		this.type =3D event.type;=0A=
		this.target =3D event.target || event.srcElement;=0A=
		if (this.target.nodeType =3D=3D 3) this.target =3D =
this.target.parentNode;=0A=
		this.shift =3D event.shiftKey;=0A=
		this.control =3D event.ctrlKey;=0A=
		this.alt =3D event.altKey;=0A=
		this.meta =3D event.metaKey;=0A=
		if (['DOMMouseScroll', 'mousewheel'].contains(this.type)){=0A=
			this.wheel =3D (event.wheelDelta) ? event.wheelDelta / 120 : =
-(event.detail || 0) / 3;=0A=
		} else if (this.type.contains('key')){=0A=
			this.code =3D event.which || event.keyCode;=0A=
			for (var name in Event.keys){=0A=
				if (Event.keys[name] =3D=3D this.code){=0A=
					this.key =3D name;=0A=
					break;=0A=
				}=0A=
			}=0A=
			if (this.type =3D=3D 'keydown'){=0A=
				var fKey =3D this.code - 111;=0A=
				if (fKey > 0 && fKey < 13) this.key =3D 'f' + fKey;=0A=
			}=0A=
			this.key =3D this.key || String.fromCharCode(this.code).toLowerCase();=0A=
		} else if (this.type.test(/(click|mouse|menu)/)){=0A=
			this.page =3D {=0A=
				'x': event.pageX || event.clientX + =
document.documentElement.scrollLeft,=0A=
				'y': event.pageY || event.clientY + =
document.documentElement.scrollTop=0A=
			};=0A=
			this.client =3D {=0A=
				'x': event.pageX ? event.pageX - window.pageXOffset : event.clientX,=0A=
				'y': event.pageY ? event.pageY - window.pageYOffset : event.clientY=0A=
			};=0A=
			this.rightClick =3D (event.which =3D=3D 3) || (event.button =3D=3D 2);=0A=
			switch(this.type){=0A=
				case 'mouseover': this.relatedTarget =3D event.relatedTarget || =
event.fromElement; break;=0A=
				case 'mouseout': this.relatedTarget =3D event.relatedTarget || =
event.toElement;=0A=
			}=0A=
			this.fixRelatedTarget();=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: stop=0A=
		cross browser method to stop an event=0A=
	*/=0A=
=0A=
	stop: function(){=0A=
		return this.stopPropagation().preventDefault();=0A=
	},=0A=
=0A=
	/*=0A=
	Property: stopPropagation=0A=
		cross browser method to stop the propagation of an event=0A=
	*/=0A=
=0A=
	stopPropagation: function(){=0A=
		if (this.event.stopPropagation) this.event.stopPropagation();=0A=
		else this.event.cancelBubble =3D true;=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: preventDefault=0A=
		cross browser method to prevent the default action of the event=0A=
	*/=0A=
=0A=
	preventDefault: function(){=0A=
		if (this.event.preventDefault) this.event.preventDefault();=0A=
		else this.event.returnValue =3D false;=0A=
		return this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
Event.fix =3D {=0A=
=0A=
	relatedTarget: function(){=0A=
		if (this.relatedTarget && this.relatedTarget.nodeType =3D=3D 3) =
this.relatedTarget =3D this.relatedTarget.parentNode;=0A=
	},=0A=
=0A=
	relatedTargetGecko: function(){=0A=
		try {Event.fix.relatedTarget.call(this);} catch(e){this.relatedTarget =
=3D this.target;}=0A=
	}=0A=
=0A=
};=0A=
=0A=
Event.prototype.fixRelatedTarget =3D (window.gecko) ? =
Event.fix.relatedTargetGecko : Event.fix.relatedTarget;=0A=
=0A=
/*=0A=
Property: keys=0A=
	you can add additional Event keys codes this way:=0A=
=0A=
Example:=0A=
	(start code)=0A=
	Event.keys.whatever =3D 80;=0A=
	$(myelement).addEvent(keydown, function(event){=0A=
		event =3D new Event(event);=0A=
		if (event.key =3D=3D 'whatever') console.log(whatever key clicked).=0A=
	});=0A=
	(end)=0A=
*/=0A=
=0A=
Event.keys =3D new Abstract({=0A=
	'enter': 13,=0A=
	'up': 38,=0A=
	'down': 40,=0A=
	'left': 37,=0A=
	'right': 39,=0A=
	'esc': 27,=0A=
	'space': 32,=0A=
	'backspace': 8,=0A=
	'tab': 9,=0A=
	'delete': 46=0A=
});=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.Methods.Events =3D {=0A=
=0A=
	/*=0A=
	Property: addEvent=0A=
		Attaches an event listener to a DOM element.=0A=
=0A=
	Arguments:=0A=
		type - the event to monitor ('click', 'load', etc) without the prefix =
'on'.=0A=
		fn - the function to execute=0A=
=0A=
	Example:=0A=
		>$('myElement').addEvent('click', function(){alert('clicked!')});=0A=
	*/=0A=
=0A=
	addEvent: function(type, fn){=0A=
		this.$events =3D this.$events || {};=0A=
		this.$events[type] =3D this.$events[type] || {'keys': [], 'values': =
[]};=0A=
		if (this.$events[type].keys.contains(fn)) return this;=0A=
		this.$events[type].keys.push(fn);=0A=
		var realType =3D type;=0A=
		var custom =3D Element.Events[type];=0A=
		if (custom){=0A=
			if (custom.add) custom.add.call(this, fn);=0A=
			if (custom.map) fn =3D custom.map;=0A=
			if (custom.type) realType =3D custom.type;=0A=
		}=0A=
		if (!this.addEventListener) fn =3D fn.create({'bind': this, 'event': =
true});=0A=
		this.$events[type].values.push(fn);=0A=
		return (Element.NativeEvents.contains(realType)) ? =
this.addListener(realType, fn) : this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: removeEvent=0A=
		Works as Element.addEvent, but instead removes the previously added =
event listener.=0A=
	*/=0A=
=0A=
	removeEvent: function(type, fn){=0A=
		if (!this.$events || !this.$events[type]) return this;=0A=
		var pos =3D this.$events[type].keys.indexOf(fn);=0A=
		if (pos =3D=3D -1) return this;=0A=
		var key =3D this.$events[type].keys.splice(pos,1)[0];=0A=
		var value =3D this.$events[type].values.splice(pos,1)[0];=0A=
		var custom =3D Element.Events[type];=0A=
		if (custom){=0A=
			if (custom.remove) custom.remove.call(this, fn);=0A=
			if (custom.type) type =3D custom.type;=0A=
		}=0A=
		return (Element.NativeEvents.contains(type)) ? =
this.removeListener(type, value) : this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: addEvents=0A=
		As <addEvent>, but accepts an object and add multiple events at once.=0A=
	*/=0A=
=0A=
	addEvents: function(source){=0A=
		return Element.setMany(this, 'addEvent', source);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: removeEvents=0A=
		removes all events of a certain type from an element. if no argument =
is passed in, removes all events.=0A=
=0A=
	Arguments:=0A=
		type - string; the event name (e.g. 'click')=0A=
	*/=0A=
=0A=
	removeEvents: function(type){=0A=
		if (!this.$events) return this;=0A=
		if (!type){=0A=
			for (var evType in this.$events) this.removeEvents(evType);=0A=
			this.$events =3D null;=0A=
		} else if (this.$events[type]){=0A=
			this.$events[type].keys.each(function(fn){=0A=
				this.removeEvent(type, fn);=0A=
			}, this);=0A=
			this.$events[type] =3D null;=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: fireEvent=0A=
		executes all events of the specified type present in the element.=0A=
=0A=
	Arguments:=0A=
		type - string; the event name (e.g. 'click')=0A=
		args - array or single object; arguments to pass to the function; if =
more than one argument, must be an array=0A=
		delay - (integer) delay (in ms) to wait to execute the event=0A=
	*/=0A=
=0A=
	fireEvent: function(type, args, delay){=0A=
		if (this.$events && this.$events[type]){=0A=
			this.$events[type].keys.each(function(fn){=0A=
				fn.create({'bind': this, 'delay': delay, 'arguments': args})();=0A=
			}, this);=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: cloneEvents=0A=
		Clones all events from an element to this element.=0A=
=0A=
	Arguments:=0A=
		from - element, copy all events from this element=0A=
		type - optional, copies only events of this type=0A=
	*/=0A=
=0A=
	cloneEvents: function(from, type){=0A=
		if (!from.$events) return this;=0A=
		if (!type){=0A=
			for (var evType in from.$events) this.cloneEvents(from, evType);=0A=
		} else if (from.$events[type]){=0A=
			from.$events[type].keys.each(function(fn){=0A=
				this.addEvent(type, fn);=0A=
			}, this);=0A=
		}=0A=
		return this;=0A=
	}=0A=
=0A=
};=0A=
=0A=
window.extend(Element.Methods.Events);=0A=
document.extend(Element.Methods.Events);=0A=
Element.extend(Element.Methods.Events);=0A=
=0A=
/* Section: Custom Events */=0A=
=0A=
Element.Events =3D new Abstract({=0A=
=0A=
	/*=0A=
	Event: mouseenter=0A=
		In addition to the standard javascript events (load, mouseover, =
mouseout, click, etc.) <Event.js> contains two custom events=0A=
		this event fires when the mouse enters the area of the dom element; =
will not be fired again if the mouse crosses over children of the =
element (unlike mouseover)=0A=
=0A=
=0A=
	Example:=0A=
		>$(myElement).addEvent('mouseenter', myFunction);=0A=
	*/=0A=
=0A=
	'mouseenter': {=0A=
		type: 'mouseover',=0A=
		map: function(event){=0A=
			event =3D new Event(event);=0A=
			if (event.relatedTarget !=3D this && =
!this.hasChild(event.relatedTarget)) this.fireEvent('mouseenter', event);=0A=
		}=0A=
	},=0A=
=0A=
	/*=0A=
	Event: mouseleave=0A=
		this event fires when the mouse exits the area of the dom element; =
will not be fired again if the mouse crosses over children of the =
element (unlike mouseout)=0A=
=0A=
=0A=
	Example:=0A=
		>$(myElement).addEvent('mouseleave', myFunction);=0A=
	*/=0A=
=0A=
	'mouseleave': {=0A=
		type: 'mouseout',=0A=
		map: function(event){=0A=
			event =3D new Event(event);=0A=
			if (event.relatedTarget !=3D this && =
!this.hasChild(event.relatedTarget)) this.fireEvent('mouseleave', event);=0A=
		}=0A=
	},=0A=
=0A=
	'mousewheel': {=0A=
		type: (window.gecko) ? 'DOMMouseScroll' : 'mousewheel'=0A=
	}=0A=
=0A=
});=0A=
=0A=
Element.NativeEvents =3D [=0A=
	'click', 'dblclick', 'mouseup', 'mousedown', //mouse buttons=0A=
	'mousewheel', 'DOMMouseScroll', //mouse wheel=0A=
	'mouseover', 'mouseout', 'mousemove', //mouse movement=0A=
	'keydown', 'keypress', 'keyup', //keys=0A=
	'load', 'unload', 'beforeunload', 'resize', 'move', //window=0A=
	'focus', 'blur', 'change', 'submit', 'reset', 'select', //forms elements=0A=
	'error', 'abort', 'contextmenu', 'scroll' //misc=0A=
];=0A=
=0A=
/*=0A=
Class: Function=0A=
	A collection of The Function Object prototype methods.=0A=
*/=0A=
=0A=
Function.extend({=0A=
=0A=
	/*=0A=
	Property: bindWithEvent=0A=
		automatically passes MooTools Event Class.=0A=
=0A=
	Arguments:=0A=
		bind - optional, the object that the "this" of the function will refer =
to.=0A=
		args - optional, an argument to pass to the function; if more than one =
argument, it must be an array of arguments.=0A=
=0A=
	Returns:=0A=
		a function with the parameter bind as its "this" and as a pre-passed =
argument event or window.event, depending on the browser.=0A=
=0A=
	Example:=0A=
		>function myFunction(event){=0A=
		>	alert(event.client.x) //returns the coordinates of the mouse..=0A=
		>};=0A=
		>myElement.addEvent('click', myFunction.bindWithEvent(myElement));=0A=
	*/=0A=
=0A=
	bindWithEvent: function(bind, args){=0A=
		return this.create({'bind': bind, 'arguments': args, 'event': Event});=0A=
	}=0A=
=0A=
});=0A=
=0A=
=0A=
/*=0A=
Script: Element.Filters.js=0A=
	add Filters capability to <Elements>.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Elements=0A=
	A collection of methods to be used with <$$> elements collections.=0A=
*/=0A=
=0A=
Elements.extend({=0A=
	=0A=
	/*=0A=
	Property: filterByTag=0A=
		Filters the collection by a specified tag name.=0A=
		Returns a new Elements collection, while the original remains =
untouched.=0A=
	*/=0A=
	=0A=
	filterByTag: function(tag){=0A=
		return new Elements(this.filter(function(el){=0A=
			return (Element.getTag(el) =3D=3D tag);=0A=
		}));=0A=
	},=0A=
	=0A=
	/*=0A=
	Property: filterByClass=0A=
		Filters the collection by a specified class name.=0A=
		Returns a new Elements collection, while the original remains =
untouched.=0A=
	*/=0A=
	=0A=
	filterByClass: function(className, nocash){=0A=
		var elements =3D this.filter(function(el){=0A=
			return (el.className && el.className.contains(className, ' '));=0A=
		});=0A=
		return (nocash) ? elements : new Elements(elements);=0A=
	},=0A=
	=0A=
	/*=0A=
	Property: filterById=0A=
		Filters the collection by a specified ID.=0A=
		Returns a new Elements collection, while the original remains =
untouched.=0A=
	*/=0A=
	=0A=
	filterById: function(id, nocash){=0A=
		var elements =3D this.filter(function(el){=0A=
			return (el.id =3D=3D id);=0A=
		});=0A=
		return (nocash) ? elements : new Elements(elements);=0A=
	},=0A=
	=0A=
	/*=0A=
	Property: filterByAttribute=0A=
		Filters the collection by a specified attribute.=0A=
		Returns a new Elements collection, while the original remains =
untouched.=0A=
		=0A=
	Arguments:=0A=
		name - the attribute name.=0A=
		operator - optional, the attribute operator.=0A=
		value - optional, the attribute value, only valid if the operator is =
specified.=0A=
	*/=0A=
	=0A=
	filterByAttribute: function(name, operator, value, nocash){=0A=
		var elements =3D this.filter(function(el){=0A=
			var current =3D Element.getProperty(el, name);=0A=
			if (!current) return false;=0A=
			if (!operator) return true;=0A=
			switch(operator){=0A=
				case '=3D': return (current =3D=3D value);=0A=
				case '*=3D': return (current.contains(value));=0A=
				case '^=3D': return (current.substr(0, value.length) =3D=3D value);=0A=
				case '$=3D': return (current.substr(current.length - value.length) =
=3D=3D value);=0A=
				case '!=3D': return (current !=3D value);=0A=
				case '~=3D': return current.contains(value, ' ');=0A=
			}=0A=
			return false;=0A=
		});=0A=
		return (nocash) ? elements : new Elements(elements);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Element.Selectors.js=0A=
	Css Query related functions and <Element> extensions=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/* Section: Utility Functions */=0A=
=0A=
/*=0A=
Function: $E=0A=
	Selects a single (i.e. the first found) Element based on the selector =
passed in and an optional filter element.=0A=
	Returns as <Element>.=0A=
=0A=
Arguments:=0A=
	selector - string; the css selector to match=0A=
	filter - optional; a DOM element to limit the scope of the selector =
match; defaults to document.=0A=
=0A=
Example:=0A=
	>$E('a', 'myElement') //find the first anchor tag inside the DOM =
element with id 'myElement'=0A=
=0A=
Returns:=0A=
	a DOM element - the first element that matches the selector=0A=
*/=0A=
=0A=
function $E(selector, filter){=0A=
	return ($(filter) || document).getElement(selector);=0A=
};=0A=
=0A=
/*=0A=
Function: $ES=0A=
	Returns a collection of Elements that match the selector passed in =
limited to the scope of the optional filter.=0A=
	See Also: <Element.getElements> for an alternate syntax.=0A=
	Returns as <Elements>.=0A=
=0A=
Returns:=0A=
	an array of dom elements that match the selector within the filter=0A=
=0A=
Arguments:=0A=
	selector - string; css selector to match=0A=
	filter - optional; a DOM element to limit the scope of the selector =
match; defaults to document.=0A=
=0A=
Examples:=0A=
	>$ES("a") //gets all the anchor tags; synonymous with $$("a")=0A=
	>$ES('a','myElement') //get all the anchor tags within $('myElement')=0A=
*/=0A=
=0A=
function $ES(selector, filter){=0A=
	return ($(filter) || document).getElementsBySelector(selector);=0A=
};=0A=
=0A=
$$.shared =3D {=0A=
=0A=
	'regexp': =
/^(\w*|\*)(?:#([\w-]+)|\.([\w-]+))?(?:\[(\w+)(?:([!*^$]?=3D)["']?([^"'\]]=
*)["']?)?])?$/,=0A=
	=0A=
	'xpath': {=0A=
=0A=
		getParam: function(items, context, param, i){=0A=
			var temp =3D [context.namespaceURI ? 'xhtml:' : '', param[1]];=0A=
			if (param[2]) temp.push('[@id=3D"', param[2], '"]');=0A=
			if (param[3]) temp.push('[contains(concat(" ", @class, " "), " ', =
param[3], ' ")]');=0A=
			if (param[4]){=0A=
				if (param[5] && param[6]){=0A=
					switch(param[5]){=0A=
						case '*=3D': temp.push('[contains(@', param[4], ', "', param[6], =
'")]'); break;=0A=
						case '^=3D': temp.push('[starts-with(@', param[4], ', "', =
param[6], '")]'); break;=0A=
						case '$=3D': temp.push('[substring(@', param[4], ', =
string-length(@', param[4], ') - ', param[6].length, ' + 1) =3D "', =
param[6], '"]'); break;=0A=
						case '=3D': temp.push('[@', param[4], '=3D"', param[6], '"]'); =
break;=0A=
						case '!=3D': temp.push('[@', param[4], '!=3D"', param[6], '"]');=0A=
					}=0A=
				} else {=0A=
					temp.push('[@', param[4], ']');=0A=
				}=0A=
			}=0A=
			items.push(temp.join(''));=0A=
			return items;=0A=
		},=0A=
		=0A=
		getItems: function(items, context, nocash){=0A=
			var elements =3D [];=0A=
			var xpath =3D document.evaluate('.//' + items.join('//'), context, =
$$.shared.resolver, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);=0A=
			for (var i =3D 0, j =3D xpath.snapshotLength; i < j; i++) =
elements.push(xpath.snapshotItem(i));=0A=
			return (nocash) ? elements : new Elements(elements.map($));=0A=
		}=0A=
=0A=
	},=0A=
	=0A=
	'normal': {=0A=
		=0A=
		getParam: function(items, context, param, i){=0A=
			if (i =3D=3D 0){=0A=
				if (param[2]){=0A=
					var el =3D context.getElementById(param[2]);=0A=
					if (!el || ((param[1] !=3D '*') && (Element.getTag(el) !=3D =
param[1]))) return false;=0A=
					items =3D [el];=0A=
				} else {=0A=
					items =3D $A(context.getElementsByTagName(param[1]));=0A=
				}=0A=
			} else {=0A=
				items =3D $$.shared.getElementsByTagName(items, param[1]);=0A=
				if (param[2]) items =3D Elements.filterById(items, param[2], true);=0A=
			}=0A=
			if (param[3]) items =3D Elements.filterByClass(items, param[3], true);=0A=
			if (param[4]) items =3D Elements.filterByAttribute(items, param[4], =
param[5], param[6], true);=0A=
			return items;=0A=
		},=0A=
=0A=
		getItems: function(items, context, nocash){=0A=
			return (nocash) ? items : $$.unique(items);=0A=
		}=0A=
=0A=
	},=0A=
=0A=
	resolver: function(prefix){=0A=
		return (prefix =3D=3D 'xhtml') ? 'http://www.w3.org/1999/xhtml' : =
false;=0A=
	},=0A=
=0A=
	getElementsByTagName: function(context, tagName){=0A=
		var found =3D [];=0A=
		for (var i =3D 0, j =3D context.length; i < j; i++) =
found.extend(context[i].getElementsByTagName(tagName));=0A=
		return found;=0A=
	}=0A=
=0A=
};=0A=
=0A=
$$.shared.method =3D (window.xpath) ? 'xpath' : 'normal';=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.Methods.Dom =3D {=0A=
=0A=
	/*=0A=
	Property: getElements=0A=
		Gets all the elements within an element that match the given (single) =
selector.=0A=
		Returns as <Elements>.=0A=
=0A=
	Arguments:=0A=
		selector - string; the css selector to match=0A=
=0A=
	Examples:=0A=
		>$('myElement').getElements('a'); // get all anchors within myElement=0A=
		>$('myElement').getElements('input[name=3Ddialog]') //get all input =
tags with name 'dialog'=0A=
		>$('myElement').getElements('input[name$=3Dlog]') //get all input tags =
with names ending with 'log'=0A=
=0A=
	Notes:=0A=
		Supports these operators in attribute selectors:=0A=
=0A=
		- =3D : is equal to=0A=
		- ^=3D : starts-with=0A=
		- $=3D : ends-with=0A=
		- !=3D : is not equal to=0A=
=0A=
		Xpath is used automatically for compliant browsers.=0A=
	*/=0A=
=0A=
	getElements: function(selector, nocash){=0A=
		var items =3D [];=0A=
		selector =3D selector.trim().split(' ');=0A=
		for (var i =3D 0, j =3D selector.length; i < j; i++){=0A=
			var sel =3D selector[i];=0A=
			var param =3D sel.match($$.shared.regexp);=0A=
			if (!param) break;=0A=
			param[1] =3D param[1] || '*';=0A=
			var temp =3D $$.shared[$$.shared.method].getParam(items, this, param, =
i);=0A=
			if (!temp) break;=0A=
			items =3D temp;=0A=
		}=0A=
		return $$.shared[$$.shared.method].getItems(items, this, nocash);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getElement=0A=
		Same as <Element.getElements>, but returns only the first. Alternate =
syntax for <$E>, where filter is the Element.=0A=
		Returns as <Element>.=0A=
=0A=
	Arguments:=0A=
		selector - string; css selector=0A=
	*/=0A=
=0A=
	getElement: function(selector){=0A=
		return $(this.getElements(selector, true)[0] || false);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getElementsBySelector=0A=
		Same as <Element.getElements>, but allows for comma separated =
selectors, as in css. Alternate syntax for <$$>, where filter is the =
Element.=0A=
		Returns as <Elements>.=0A=
=0A=
	Arguments:=0A=
		selector - string; css selector=0A=
	*/=0A=
=0A=
	getElementsBySelector: function(selector, nocash){=0A=
		var elements =3D [];=0A=
		selector =3D selector.split(',');=0A=
		for (var i =3D 0, j =3D selector.length; i < j; i++) elements =3D =
elements.concat(this.getElements(selector[i], true));=0A=
		return (nocash) ? elements : $$.unique(elements);=0A=
	}=0A=
=0A=
};=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: getElementById=0A=
		Targets an element with the specified id found inside the Element. =
Does not overwrite document.getElementById.=0A=
=0A=
	Arguments:=0A=
		id - string; the id of the element to find.=0A=
	*/=0A=
=0A=
	getElementById: function(id){=0A=
		var el =3D document.getElementById(id);=0A=
		if (!el) return false;=0A=
		for (var parent =3D el.parentNode; parent !=3D this; parent =3D =
parent.parentNode){=0A=
			if (!parent) return false;=0A=
		}=0A=
		return el;=0A=
	}/*compatibility*/,=0A=
	=0A=
	getElementsByClassName: function(className){ =0A=
		return this.getElements('.' + className); =0A=
	}=0A=
	=0A=
	/*end compatibility*/=0A=
=0A=
});=0A=
=0A=
document.extend(Element.Methods.Dom);=0A=
Element.extend(Element.Methods.Dom);=0A=
=0A=
/*=0A=
Script: Element.Form.js=0A=
	Contains Element prototypes to deal with Forms and their elements.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: getValue=0A=
		Returns the value of the Element, if its tag is textarea, select or =
input. getValue called on a multiple select will return an array.=0A=
	*/=0A=
=0A=
	getValue: function(){=0A=
		switch(this.getTag()){=0A=
			case 'select':=0A=
				var values =3D [];=0A=
				$each(this.options, function(option){=0A=
					if (option.selected) values.push($pick(option.value, option.text));=0A=
				});=0A=
				return (this.multiple) ? values : values[0];=0A=
			case 'input': if (!(this.checked && ['checkbox', =
'radio'].contains(this.type)) && !['hidden', 'text', =
'password'].contains(this.type)) break;=0A=
			case 'textarea': return this.value;=0A=
		}=0A=
		return false;=0A=
	},=0A=
=0A=
	getFormElements: function(){=0A=
		return $$(this.getElementsByTagName('input'), =
this.getElementsByTagName('select'), =
this.getElementsByTagName('textarea'));=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toQueryString=0A=
		Reads the children inputs of the Element and generates a query string, =
based on their values. Used internally in <Ajax>=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		<form id=3D"myForm" action=3D"submit.php">=0A=
		<input name=3D"email" value=3D"bob@bob.com">=0A=
		<input name=3D"zipCode" value=3D"90210">=0A=
		</form>=0A=
=0A=
		<script>=0A=
		 $('myForm').toQueryString()=0A=
		</script>=0A=
		(end)=0A=
=0A=
		Returns:=0A=
			email=3Dbob@bob.com&zipCode=3D90210=0A=
	*/=0A=
=0A=
	toQueryString: function(){=0A=
		var queryString =3D [];=0A=
		this.getFormElements().each(function(el){=0A=
			var name =3D el.name;=0A=
			var value =3D el.getValue();=0A=
			if (value =3D=3D=3D false || !name || el.disabled) return;=0A=
			var qs =3D function(val){=0A=
				queryString.push(name + '=3D' + encodeURIComponent(val));=0A=
			};=0A=
			if ($type(value) =3D=3D 'array') value.each(qs);=0A=
			else qs(value);=0A=
		});=0A=
		return queryString.join('&');=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Element.Dimensions.js=0A=
	Contains Element prototypes to deal with Element size and position in =
space.=0A=
=0A=
Note:=0A=
	The functions in this script require n XHTML doctype.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: scrollTo=0A=
		Scrolls the element to the specified coordinated (if the element has =
an overflow)=0A=
=0A=
	Arguments:=0A=
		x - the x coordinate=0A=
		y - the y coordinate=0A=
=0A=
	Example:=0A=
		>$('myElement').scrollTo(0, 100)=0A=
	*/=0A=
=0A=
	scrollTo: function(x, y){=0A=
		this.scrollLeft =3D x;=0A=
		this.scrollTop =3D y;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getSize=0A=
		Return an Object representing the size/scroll values of the element.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		$('myElement').getSize();=0A=
		(end)=0A=
=0A=
	Returns:=0A=
		(start code)=0A=
		{=0A=
			'scroll': {'x': 100, 'y': 100},=0A=
			'size': {'x': 200, 'y': 400},=0A=
			'scrollSize': {'x': 300, 'y': 500}=0A=
		}=0A=
		(end)=0A=
	*/=0A=
=0A=
	getSize: function(){=0A=
		return {=0A=
			'scroll': {'x': this.scrollLeft, 'y': this.scrollTop},=0A=
			'size': {'x': this.offsetWidth, 'y': this.offsetHeight},=0A=
			'scrollSize': {'x': this.scrollWidth, 'y': this.scrollHeight}=0A=
		};=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getPosition=0A=
		Returns the real offsets of the element.=0A=
=0A=
	Arguments:=0A=
		overflown - optional, an array of nested scrolling containers for =
scroll offset calculation, use this if your element is inside any =
element containing scrollbars=0A=
=0A=
	Example:=0A=
		>$('element').getPosition();=0A=
=0A=
	Returns:=0A=
		>{x: 100, y:500};=0A=
	*/=0A=
=0A=
	getPosition: function(overflown){=0A=
		overflown =3D overflown || [];=0A=
		var el =3D this, left =3D 0, top =3D 0;=0A=
		do {=0A=
			left +=3D el.offsetLeft || 0;=0A=
			top +=3D el.offsetTop || 0;=0A=
			el =3D el.offsetParent;=0A=
		} while (el);=0A=
		overflown.each(function(element){=0A=
			left -=3D element.scrollLeft || 0;=0A=
			top -=3D element.scrollTop || 0;=0A=
		});=0A=
		return {'x': left, 'y': top};=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getTop=0A=
		Returns the distance from the top of the window to the Element.=0A=
=0A=
	Arguments:=0A=
		overflown - optional, an array of nested scrolling containers, see =
Element::getPosition=0A=
	*/=0A=
=0A=
	getTop: function(overflown){=0A=
		return this.getPosition(overflown).y;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getLeft=0A=
		Returns the distance from the left of the window to the Element.=0A=
=0A=
	Arguments:=0A=
		overflown - optional, an array of nested scrolling containers, see =
Element::getPosition=0A=
	*/=0A=
=0A=
	getLeft: function(overflown){=0A=
		return this.getPosition(overflown).x;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getCoordinates=0A=
		Returns an object with width, height, left, right, top, and bottom, =
representing the values of the Element=0A=
=0A=
	Arguments:=0A=
		overflown - optional, an array of nested scrolling containers, see =
Element::getPosition=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		var myValues =3D $('myElement').getCoordinates();=0A=
		(end)=0A=
=0A=
	Returns:=0A=
		(start code)=0A=
		{=0A=
			width: 200,=0A=
			height: 300,=0A=
			left: 100,=0A=
			top: 50,=0A=
			right: 300,=0A=
			bottom: 350=0A=
		}=0A=
		(end)=0A=
	*/=0A=
=0A=
	getCoordinates: function(overflown){=0A=
		var position =3D this.getPosition(overflown);=0A=
		var obj =3D {=0A=
			'width': this.offsetWidth,=0A=
			'height': this.offsetHeight,=0A=
			'left': position.x,=0A=
			'top': position.y=0A=
		};=0A=
		obj.right =3D obj.left + obj.width;=0A=
		obj.bottom =3D obj.top + obj.height;=0A=
		return obj;=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Window.DomReady.js=0A=
	Contains the custom event domready, for window.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/* Section: Custom Events */=0A=
=0A=
/*=0A=
Event: domready=0A=
	executes a function when the dom tree is loaded, without waiting for =
images. Only works when called from window.=0A=
=0A=
Credits:=0A=
	(c) Dean Edwards/Matthias Miller/John Resig, remastered for MooTools.=0A=
=0A=
Arguments:=0A=
	fn - the function to execute when the DOM is ready=0A=
=0A=
Example:=0A=
	> window.addEvent('domready', function(){=0A=
	>	alert('the dom is ready');=0A=
	> });=0A=
*/=0A=
=0A=
Element.Events.domready =3D {=0A=
=0A=
	add: function(fn){=0A=
		if (window.loaded){=0A=
			fn.call(this);=0A=
			return;=0A=
		}=0A=
		var domReady =3D function(){=0A=
			if (window.loaded) return;=0A=
			window.loaded =3D true;=0A=
			window.timer =3D $clear(window.timer);=0A=
			this.fireEvent('domready');=0A=
		}.bind(this);=0A=
		if (document.readyState && window.webkit){=0A=
			window.timer =3D function(){=0A=
				if (['loaded','complete'].contains(document.readyState)) domReady();=0A=
			}.periodical(50);=0A=
		} else if (document.readyState && window.ie){=0A=
			if (!$('ie_ready')){=0A=
				var src =3D (window.location.protocol =3D=3D 'https:') ? '//:' : =
'javascript:void(0)';=0A=
				document.write('<script id=3D"ie_ready" defer src=3D"' + src + =
'"><\/script>');=0A=
				$('ie_ready').onreadystatechange =3D function(){=0A=
					if (this.readyState =3D=3D 'complete') domReady();=0A=
				};=0A=
			}=0A=
		} else {=0A=
			window.addListener("load", domReady);=0A=
			document.addListener("DOMContentLoaded", domReady);=0A=
		}=0A=
	}=0A=
=0A=
};=0A=
=0A=
/*compatibility*/=0A=
=0A=
window.onDomReady =3D function(fn){ =0A=
	return this.addEvent('domready', fn); =0A=
};=0A=
=0A=
/*end compatibility*/=0A=
=0A=
/*=0A=
Script: Window.Size.js=0A=
	Window cross-browser dimensions methods.=0A=
	=0A=
Note:=0A=
	The Functions in this script require an XHTML doctype.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: window=0A=
	Cross browser methods to get various window dimensions.=0A=
	Warning: All these methods require that the browser operates in strict =
mode, not quirks mode.=0A=
*/=0A=
=0A=
window.extend({=0A=
=0A=
	/*=0A=
	Property: getWidth=0A=
		Returns an integer representing the width of the browser window =
(without the scrollbar).=0A=
	*/=0A=
=0A=
	getWidth: function(){=0A=
		if (this.webkit419) return this.innerWidth;=0A=
		if (this.opera) return document.body.clientWidth;=0A=
		return document.documentElement.clientWidth;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getHeight=0A=
		Returns an integer representing the height of the browser window =
(without the scrollbar).=0A=
	*/=0A=
=0A=
	getHeight: function(){=0A=
		if (this.webkit419) return this.innerHeight;=0A=
		if (this.opera) return document.body.clientHeight;=0A=
		return document.documentElement.clientHeight;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getScrollWidth=0A=
		Returns an integer representing the scrollWidth of the window.=0A=
		This value is equal to or bigger than <getWidth>.=0A=
=0A=
	See Also:=0A=
		<http://developer.mozilla.org/en/docs/DOM:element.scrollWidth>=0A=
	*/=0A=
=0A=
	getScrollWidth: function(){=0A=
		if (this.ie) return Math.max(document.documentElement.offsetWidth, =
document.documentElement.scrollWidth);=0A=
		if (this.webkit) return document.body.scrollWidth;=0A=
		return document.documentElement.scrollWidth;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getScrollHeight=0A=
		Returns an integer representing the scrollHeight of the window.=0A=
		This value is equal to or bigger than <getHeight>.=0A=
=0A=
	See Also:=0A=
		<http://developer.mozilla.org/en/docs/DOM:element.scrollHeight>=0A=
	*/=0A=
=0A=
	getScrollHeight: function(){=0A=
		if (this.ie) return Math.max(document.documentElement.offsetHeight, =
document.documentElement.scrollHeight);=0A=
		if (this.webkit) return document.body.scrollHeight;=0A=
		return document.documentElement.scrollHeight;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getScrollLeft=0A=
		Returns an integer representing the scrollLeft of the window (the =
number of pixels the window has scrolled from the left).=0A=
=0A=
	See Also:=0A=
		<http://developer.mozilla.org/en/docs/DOM:element.scrollLeft>=0A=
	*/=0A=
=0A=
	getScrollLeft: function(){=0A=
		return this.pageXOffset || document.documentElement.scrollLeft;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getScrollTop=0A=
		Returns an integer representing the scrollTop of the window (the =
number of pixels the window has scrolled from the top).=0A=
=0A=
	See Also:=0A=
		<http://developer.mozilla.org/en/docs/DOM:element.scrollTop>=0A=
	*/=0A=
=0A=
	getScrollTop: function(){=0A=
		return this.pageYOffset || document.documentElement.scrollTop;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getSize=0A=
		Same as <Element.getSize>=0A=
	*/=0A=
=0A=
	getSize: function(){=0A=
		return {=0A=
			'size': {'x': this.getWidth(), 'y': this.getHeight()},=0A=
			'scrollSize': {'x': this.getScrollWidth(), 'y': =
this.getScrollHeight()},=0A=
			'scroll': {'x': this.getScrollLeft(), 'y': this.getScrollTop()}=0A=
		};=0A=
	},=0A=
=0A=
	//ignore=0A=
	getPosition: function(){return {'x': 0, 'y': 0};}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Fx.Base.js=0A=
	Contains <Fx.Base>, the foundamentals of the MooTools Effects.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
var Fx =3D {};=0A=
=0A=
/*=0A=
Class: Fx.Base=0A=
	Base class for the Effects.=0A=
=0A=
Options:=0A=
	transition - the equation to use for the effect see <Fx.Transitions>; =
default is <Fx.Transitions.Sine.easeInOut>=0A=
	duration - the duration of the effect in ms; 500 is the default.=0A=
	unit - the unit is 'px' by default (other values include things like =
'em' for fonts or '%').=0A=
	wait - boolean: to wait or not to wait for a current transition to end =
before running another of the same instance. defaults to true.=0A=
	fps - the frames per second for the transition; default is 50=0A=
	=0A=
Events:=0A=
	onStart - the function to execute as the effect begins; nothing =
(<Class.empty>) by default.=0A=
	onComplete - the function to execute after the effect has processed; =
nothing (<Class.empty>) by default.=0A=
	onCancel - the function to execute when you manually stop the effect.=0A=
*/=0A=
=0A=
Fx.Base =3D new Class({=0A=
=0A=
	options: {=0A=
		onStart: Class.empty,=0A=
		onComplete: Class.empty,=0A=
		onCancel: Class.empty,=0A=
		transition: function(p){=0A=
			return -(Math.cos(Math.PI * p) - 1) / 2;=0A=
		},=0A=
		duration: 500,=0A=
		unit: 'px',=0A=
		wait: true,=0A=
		fps: 50=0A=
	},=0A=
=0A=
	initialize: function(options){=0A=
		this.element =3D this.element || null;=0A=
		this.setOptions(options);=0A=
		if (this.options.initialize) this.options.initialize.call(this);=0A=
	},=0A=
=0A=
	step: function(){=0A=
		var time =3D $time();=0A=
		if (time < this.time + this.options.duration){=0A=
			this.delta =3D this.options.transition((time - this.time) / =
this.options.duration);=0A=
			this.setNow();=0A=
			this.increase();=0A=
		} else {=0A=
			this.stop(true);=0A=
			this.set(this.to);=0A=
			this.fireEvent('onComplete', this.element, 10);=0A=
			this.callChain();=0A=
		}=0A=
	},=0A=
=0A=
	/*=0A=
	Property: set=0A=
		Immediately sets the value with no transition.=0A=
=0A=
	Arguments:=0A=
		to - the point to jump to=0A=
=0A=
	Example:=0A=
		>var myFx =3D new Fx.Style('myElement', 'opacity').set(0); //will make =
it immediately transparent=0A=
	*/=0A=
=0A=
	set: function(to){=0A=
		this.now =3D to;=0A=
		this.increase();=0A=
		return this;=0A=
	},=0A=
=0A=
	setNow: function(){=0A=
		this.now =3D this.compute(this.from, this.to);=0A=
	},=0A=
=0A=
	compute: function(from, to){=0A=
		return (to - from) * this.delta + from;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: start=0A=
		Executes an effect from one position to the other.=0A=
=0A=
	Arguments:=0A=
		from - integer: staring value=0A=
		to - integer: the ending value=0A=
=0A=
	Examples:=0A=
		>var myFx =3D new Fx.Style('myElement', 'opacity').start(0,1); =
//display a transition from transparent to opaque.=0A=
	*/=0A=
=0A=
	start: function(from, to){=0A=
		if (!this.options.wait) this.stop();=0A=
		else if (this.timer) return this;=0A=
		this.from =3D from;=0A=
		this.to =3D to;=0A=
		this.change =3D this.to - this.from;=0A=
		this.time =3D $time();=0A=
		this.timer =3D this.step.periodical(Math.round(1000 / =
this.options.fps), this);=0A=
		this.fireEvent('onStart', this.element);=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: stop=0A=
		Stops the transition.=0A=
	*/=0A=
=0A=
	stop: function(end){=0A=
		if (!this.timer) return this;=0A=
		this.timer =3D $clear(this.timer);=0A=
		if (!end) this.fireEvent('onCancel', this.element);=0A=
		return this;=0A=
	}/*compatibility*/,=0A=
	=0A=
	custom: function(from, to){=0A=
		return this.start(from, to);=0A=
	},=0A=
=0A=
	clearTimer: function(end){=0A=
		return this.stop(end);=0A=
	}=0A=
=0A=
	/*end compatibility*/=0A=
=0A=
});=0A=
=0A=
Fx.Base.implement(new Chain, new Events, new Options);=0A=
=0A=
/*=0A=
Script: Fx.CSS.js=0A=
	Css parsing class for effects. Required by <Fx.Style>, <Fx.Styles>, =
<Fx.Elements>. No documentation needed, as its used internally.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
Fx.CSS =3D {=0A=
=0A=
	select: function(property, to){=0A=
		if (property.test(/color/i)) return this.Color;=0A=
		var type =3D $type(to);=0A=
		if ((type =3D=3D 'array') || (type =3D=3D 'string' && to.contains(' =
'))) return this.Multi;=0A=
		return this.Single;=0A=
	},=0A=
=0A=
	parse: function(el, property, fromTo){=0A=
		if (!fromTo.push) fromTo =3D [fromTo];=0A=
		var from =3D fromTo[0], to =3D fromTo[1];=0A=
		if (!$chk(to)){=0A=
			to =3D from;=0A=
			from =3D el.getStyle(property);=0A=
		}=0A=
		var css =3D this.select(property, to);=0A=
		return {'from': css.parse(from), 'to': css.parse(to), 'css': css};=0A=
	}=0A=
=0A=
};=0A=
=0A=
Fx.CSS.Single =3D {=0A=
=0A=
	parse: function(value){=0A=
		return parseFloat(value);=0A=
	},=0A=
=0A=
	getNow: function(from, to, fx){=0A=
		return fx.compute(from, to);=0A=
	},=0A=
=0A=
	getValue: function(value, unit, property){=0A=
		if (unit =3D=3D 'px' && property !=3D 'opacity') value =3D =
Math.round(value);=0A=
		return value + unit;=0A=
	}=0A=
=0A=
};=0A=
=0A=
Fx.CSS.Multi =3D {=0A=
=0A=
	parse: function(value){=0A=
		return value.push ? value : value.split(' ').map(function(v){=0A=
			return parseFloat(v);=0A=
		});=0A=
	},=0A=
=0A=
	getNow: function(from, to, fx){=0A=
		var now =3D [];=0A=
		for (var i =3D 0; i < from.length; i++) now[i] =3D fx.compute(from[i], =
to[i]);=0A=
		return now;=0A=
	},=0A=
=0A=
	getValue: function(value, unit, property){=0A=
		if (unit =3D=3D 'px' && property !=3D 'opacity') value =3D =
value.map(Math.round);=0A=
		return value.join(unit + ' ') + unit;=0A=
	}=0A=
=0A=
};=0A=
=0A=
Fx.CSS.Color =3D {=0A=
=0A=
	parse: function(value){=0A=
		return value.push ? value : value.hexToRgb(true);=0A=
	},=0A=
=0A=
	getNow: function(from, to, fx){=0A=
		var now =3D [];=0A=
		for (var i =3D 0; i < from.length; i++) now[i] =3D =
Math.round(fx.compute(from[i], to[i]));=0A=
		return now;=0A=
	},=0A=
=0A=
	getValue: function(value){=0A=
		return 'rgb(' + value.join(',') + ')';=0A=
	}=0A=
=0A=
};=0A=
=0A=
/*=0A=
Script: Fx.Style.js=0A=
	Contains <Fx.Style>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Fx.Style=0A=
	The Style effect, used to transition any css property from one value to =
another. Includes colors.=0A=
	Colors must be in hex format.=0A=
	Inherits methods, properties, options and events from <Fx.Base>.=0A=
=0A=
Arguments:=0A=
	el - the $(element) to apply the style transition to=0A=
	property - the property to transition=0A=
	options - the Fx.Base options (see: <Fx.Base>)=0A=
=0A=
Example:=0A=
	>var marginChange =3D new Fx.Style('myElement', 'margin-top', =
{duration:500});=0A=
	>marginChange.start(10, 100);=0A=
*/=0A=
=0A=
Fx.Style =3D Fx.Base.extend({=0A=
=0A=
	initialize: function(el, property, options){=0A=
		this.element =3D $(el);=0A=
		this.property =3D property;=0A=
		this.parent(options);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: hide=0A=
		Same as <Fx.Base.set> (0); hides the element immediately without =
transition.=0A=
	*/=0A=
=0A=
	hide: function(){=0A=
		return this.set(0);=0A=
	},=0A=
=0A=
	setNow: function(){=0A=
		this.now =3D this.css.getNow(this.from, this.to, this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: set=0A=
		Sets the element's css property (specified at instantiation) to the =
specified value immediately.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		var marginChange =3D new Fx.Style('myElement', 'margin-top', =
{duration:500});=0A=
		marginChange.set(10); //margin-top is set to 10px immediately=0A=
		(end)=0A=
	*/=0A=
=0A=
	set: function(to){=0A=
		this.css =3D Fx.CSS.select(this.property, to);=0A=
		return this.parent(this.css.parse(to));=0A=
	},=0A=
=0A=
	/*=0A=
	Property: start=0A=
		Displays the transition to the value/values passed in=0A=
=0A=
	Arguments:=0A=
		from - (integer; optional) the starting position for the transition=0A=
		to - (integer) the ending position for the transition=0A=
=0A=
	Note:=0A=
		If you provide only one argument, the transition will use the current =
css value for its starting value.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		var marginChange =3D new Fx.Style('myElement', 'margin-top', =
{duration:500});=0A=
		marginChange.start(10); //tries to read current margin top value and =
goes from current to 10=0A=
		(end)=0A=
	*/=0A=
=0A=
	start: function(from, to){=0A=
		if (this.timer && this.options.wait) return this;=0A=
		var parsed =3D Fx.CSS.parse(this.element, this.property, [from, to]);=0A=
		this.css =3D parsed.css;=0A=
		return this.parent(parsed.from, parsed.to);=0A=
	},=0A=
=0A=
	increase: function(){=0A=
		this.element.setStyle(this.property, this.css.getValue(this.now, =
this.options.unit, this.property));=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: effect=0A=
		Applies an <Fx.Style> to the Element; This a shortcut for <Fx.Style>.=0A=
=0A=
	Arguments:=0A=
		property - (string) the css property to alter=0A=
		options - (object; optional) key/value set of options (see <Fx.Style>)=0A=
=0A=
	Example:=0A=
		>var myEffect =3D $('myElement').effect('height', {duration: 1000, =
transition: Fx.Transitions.linear});=0A=
		>myEffect.start(10, 100);=0A=
		>//OR=0A=
		>$('myElement').effect('height', {duration: 1000, transition: =
Fx.Transitions.linear}).start(10,100);=0A=
	*/=0A=
=0A=
	effect: function(property, options){=0A=
		return new Fx.Style(this, property, options);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Fx.Styles.js=0A=
	Contains <Fx.Styles>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Fx.Styles=0A=
	Allows you to animate multiple css properties at once;=0A=
	Colors must be in hex format.=0A=
	Inherits methods, properties, options and events from <Fx.Base>.=0A=
=0A=
Arguments:=0A=
	el - the $(element) to apply the styles transition to=0A=
	options - the fx options (see: <Fx.Base>)=0A=
=0A=
Example:=0A=
	(start code)=0A=
	var myEffects =3D new Fx.Styles('myElement', {duration: 1000, =
transition: Fx.Transitions.linear});=0A=
=0A=
	//height from 10 to 100 and width from 900 to 300=0A=
	myEffects.start({=0A=
		'height': [10, 100],=0A=
		'width': [900, 300]=0A=
	});=0A=
=0A=
	//or height from current height to 100 and width from current width to =
300=0A=
	myEffects.start({=0A=
		'height': 100,=0A=
		'width': 300=0A=
	});=0A=
	(end)=0A=
*/=0A=
=0A=
Fx.Styles =3D Fx.Base.extend({=0A=
=0A=
	initialize: function(el, options){=0A=
		this.element =3D $(el);=0A=
		this.parent(options);=0A=
	},=0A=
=0A=
	setNow: function(){=0A=
		for (var p in this.from) this.now[p] =3D =
this.css[p].getNow(this.from[p], this.to[p], this);=0A=
	},=0A=
=0A=
	set: function(to){=0A=
		var parsed =3D {};=0A=
		this.css =3D {};=0A=
		for (var p in to){=0A=
			this.css[p] =3D Fx.CSS.select(p, to[p]);=0A=
			parsed[p] =3D this.css[p].parse(to[p]);=0A=
		}=0A=
		return this.parent(parsed);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: start=0A=
		Executes a transition for any number of css properties in tandem.=0A=
=0A=
	Arguments:=0A=
		obj - an object containing keys that specify css properties to alter =
and values that specify either the from/to values (as an array) or just =
the end value (an integer).=0A=
=0A=
	Example:=0A=
		see <Fx.Styles>=0A=
	*/=0A=
=0A=
	start: function(obj){=0A=
		if (this.timer && this.options.wait) return this;=0A=
		this.now =3D {};=0A=
		this.css =3D {};=0A=
		var from =3D {}, to =3D {};=0A=
		for (var p in obj){=0A=
			var parsed =3D Fx.CSS.parse(this.element, p, obj[p]);=0A=
			from[p] =3D parsed.from;=0A=
			to[p] =3D parsed.to;=0A=
			this.css[p] =3D parsed.css;=0A=
		}=0A=
		return this.parent(from, to);=0A=
	},=0A=
=0A=
	increase: function(){=0A=
		for (var p in this.now) this.element.setStyle(p, =
this.css[p].getValue(this.now[p], this.options.unit, p));=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: effects=0A=
		Applies an <Fx.Styles> to the Element; This a shortcut for <Fx.Styles>.=0A=
=0A=
	Example:=0A=
		>var myEffects =3D $(myElement).effects({duration: 1000, transition: =
Fx.Transitions.Sine.easeInOut});=0A=
 		>myEffects.start({'height': [10, 100], 'width': [900, 300]});=0A=
	*/=0A=
=0A=
	effects: function(options){=0A=
		return new Fx.Styles(this, options);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Fx.Elements.js=0A=
	Contains <Fx.Elements>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Fx.Elements=0A=
	Fx.Elements allows you to apply any number of styles transitions to a =
selection of elements. Includes colors (must be in hex format).=0A=
	Inherits methods, properties, options and events from <Fx.Base>.=0A=
=0A=
Arguments:=0A=
	elements - a collection of elements the effects will be applied to.=0A=
	options - same as <Fx.Base> options.=0A=
*/=0A=
=0A=
Fx.Elements =3D Fx.Base.extend({=0A=
=0A=
	initialize: function(elements, options){=0A=
		this.elements =3D $$(elements);=0A=
		this.parent(options);=0A=
	},=0A=
=0A=
	setNow: function(){=0A=
		for (var i in this.from){=0A=
			var iFrom =3D this.from[i], iTo =3D this.to[i], iCss =3D this.css[i], =
iNow =3D this.now[i] =3D {};=0A=
			for (var p in iFrom) iNow[p] =3D iCss[p].getNow(iFrom[p], iTo[p], =
this);=0A=
		}=0A=
	},=0A=
=0A=
	set: function(to){=0A=
		var parsed =3D {};=0A=
		this.css =3D {};=0A=
		for (var i in to){=0A=
			var iTo =3D to[i], iCss =3D this.css[i] =3D {}, iParsed =3D parsed[i] =
=3D {};=0A=
			for (var p in iTo){=0A=
				iCss[p] =3D Fx.CSS.select(p, iTo[p]);=0A=
				iParsed[p] =3D iCss[p].parse(iTo[p]);=0A=
			}=0A=
		}=0A=
		return this.parent(parsed);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: start=0A=
		Applies the passed in style transitions to each object named (see =
example). Each item in the collection is refered to as a numerical =
string ("1" for instance). The first item is "0", the second "1", etc.=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		var myElementsEffects =3D new Fx.Elements($$('a'));=0A=
		myElementsEffects.start({=0A=
			'0': { //let's change the first element's opacity and width=0A=
				'opacity': [0,1],=0A=
				'width': [100,200]=0A=
			},=0A=
			'4': { //and the fifth one's opacity=0A=
				'opacity': [0.2, 0.5]=0A=
			}=0A=
		});=0A=
		(end)=0A=
	*/=0A=
=0A=
	start: function(obj){=0A=
		if (this.timer && this.options.wait) return this;=0A=
		this.now =3D {};=0A=
		this.css =3D {};=0A=
		var from =3D {}, to =3D {};=0A=
		for (var i in obj){=0A=
			var iProps =3D obj[i], iFrom =3D from[i] =3D {}, iTo =3D to[i] =3D =
{}, iCss =3D this.css[i] =3D {};=0A=
			for (var p in iProps){=0A=
				var parsed =3D Fx.CSS.parse(this.elements[i], p, iProps[p]);=0A=
				iFrom[p] =3D parsed.from;=0A=
				iTo[p] =3D parsed.to;=0A=
				iCss[p] =3D parsed.css;=0A=
			}=0A=
		}=0A=
		return this.parent(from, to);=0A=
	},=0A=
=0A=
	increase: function(){=0A=
		for (var i in this.now){=0A=
			var iNow =3D this.now[i], iCss =3D this.css[i];=0A=
			for (var p in iNow) this.elements[i].setStyle(p, =
iCss[p].getValue(iNow[p], this.options.unit, p));=0A=
		}=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Fx.Scroll.js=0A=
	Contains <Fx.Scroll>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Fx.Scroll=0A=
	Scroll any element with an overflow, including the window element.=0A=
	Inherits methods, properties, options and events from <Fx.Base>.=0A=
=0A=
Note:=0A=
	Fx.Scroll requires an XHTML doctype.=0A=
=0A=
Arguments:=0A=
	element - the element to scroll=0A=
	options - optional, see Options below.=0A=
=0A=
Options:=0A=
	all the Fx.Base options and events, plus:=0A=
	offset - the distance for the scrollTo point/element. an Object with =
x/y properties.=0A=
	overflown - an array of nested scrolling containers, see =
<Element.getPosition>=0A=
*/=0A=
=0A=
Fx.Scroll =3D Fx.Base.extend({=0A=
=0A=
	options: {=0A=
		overflown: [],=0A=
		offset: {'x': 0, 'y': 0},=0A=
		wheelStops: true=0A=
	},=0A=
=0A=
	initialize: function(element, options){=0A=
		this.now =3D [];=0A=
		this.element =3D $(element);=0A=
		this.bound =3D {'stop': this.stop.bind(this, false)};=0A=
		this.parent(options);=0A=
		if (this.options.wheelStops){=0A=
			this.addEvent('onStart', function(){=0A=
				document.addEvent('mousewheel', this.bound.stop);=0A=
			}.bind(this));=0A=
			this.addEvent('onComplete', function(){=0A=
				document.removeEvent('mousewheel', this.bound.stop);=0A=
			}.bind(this));=0A=
		}=0A=
	},=0A=
=0A=
	setNow: function(){=0A=
		for (var i =3D 0; i < 2; i++) this.now[i] =3D =
this.compute(this.from[i], this.to[i]);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: scrollTo=0A=
		Scrolls the chosen element to the x/y coordinates.=0A=
=0A=
	Arguments:=0A=
		x - the x coordinate to scroll the element to=0A=
		y - the y coordinate to scroll the element to=0A=
	*/=0A=
=0A=
	scrollTo: function(x, y){=0A=
		if (this.timer && this.options.wait) return this;=0A=
		var el =3D this.element.getSize();=0A=
		var values =3D {'x': x, 'y': y};=0A=
		for (var z in el.size){=0A=
			var max =3D el.scrollSize[z] - el.size[z];=0A=
			if ($chk(values[z])) values[z] =3D ($type(values[z]) =3D=3D 'number') =
? values[z].limit(0, max) : max;=0A=
			else values[z] =3D el.scroll[z];=0A=
			values[z] +=3D this.options.offset[z];=0A=
		}=0A=
		return this.start([el.scroll.x, el.scroll.y], [values.x, values.y]);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toTop=0A=
		Scrolls the chosen element to its maximum top.=0A=
	*/=0A=
=0A=
	toTop: function(){=0A=
		return this.scrollTo(false, 0);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toBottom=0A=
		Scrolls the chosen element to its maximum bottom.=0A=
	*/=0A=
=0A=
	toBottom: function(){=0A=
		return this.scrollTo(false, 'full');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toLeft=0A=
		Scrolls the chosen element to its maximum left.=0A=
	*/=0A=
=0A=
	toLeft: function(){=0A=
		return this.scrollTo(0, false);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toRight=0A=
		Scrolls the chosen element to its maximum right.=0A=
	*/=0A=
=0A=
	toRight: function(){=0A=
		return this.scrollTo('full', false);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toElement=0A=
		Scrolls the specified element to the position the passed in element is =
found.=0A=
=0A=
	Arguments:=0A=
		el - the $(element) to scroll the window to=0A=
	*/=0A=
=0A=
	toElement: function(el){=0A=
		var parent =3D this.element.getPosition(this.options.overflown);=0A=
		var target =3D $(el).getPosition(this.options.overflown);=0A=
		return this.scrollTo(target.x - parent.x, target.y - parent.y);=0A=
	},=0A=
=0A=
	increase: function(){=0A=
		this.element.scrollTo(this.now[0], this.now[1]);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Fx.Slide.js=0A=
	Contains <Fx.Slide>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Fx.Slide=0A=
	The slide effect; slides an element in horizontally or vertically, the =
contents will fold inside.=0A=
	Inherits methods, properties, options and events from <Fx.Base>.=0A=
	=0A=
Note:=0A=
	Fx.Slide requires an XHTML doctype.=0A=
=0A=
Options:=0A=
	mode - set it to vertical or horizontal. Defaults to vertical.=0A=
	options - all the <Fx.Base> options=0A=
=0A=
Example:=0A=
	(start code)=0A=
	var mySlider =3D new Fx.Slide('myElement', {duration: 500});=0A=
	mySlider.toggle() //toggle the slider up and down.=0A=
	(end)=0A=
*/=0A=
=0A=
Fx.Slide =3D Fx.Base.extend({=0A=
=0A=
	options: {=0A=
		mode: 'vertical'=0A=
	},=0A=
=0A=
	initialize: function(el, options){=0A=
		this.element =3D $(el);=0A=
		this.wrapper =3D new Element('div', {'styles': =
$extend(this.element.getStyles('margin'), {'overflow': =
'hidden'})}).injectAfter(this.element).adopt(this.element);=0A=
		this.element.setStyle('margin', 0);=0A=
		this.setOptions(options);=0A=
		this.now =3D [];=0A=
		this.parent(this.options);=0A=
		this.open =3D true;=0A=
		this.addEvent('onComplete', function(){=0A=
			this.open =3D (this.now[0] =3D=3D=3D 0);=0A=
		});=0A=
		if (window.webkit419) this.addEvent('onComplete', function(){=0A=
			if (this.open) this.element.remove().inject(this.wrapper);=0A=
		});=0A=
	},=0A=
=0A=
	setNow: function(){=0A=
		for (var i =3D 0; i < 2; i++) this.now[i] =3D =
this.compute(this.from[i], this.to[i]);=0A=
	},=0A=
=0A=
	vertical: function(){=0A=
		this.margin =3D 'margin-top';=0A=
		this.layout =3D 'height';=0A=
		this.offset =3D this.element.offsetHeight;=0A=
	},=0A=
=0A=
	horizontal: function(){=0A=
		this.margin =3D 'margin-left';=0A=
		this.layout =3D 'width';=0A=
		this.offset =3D this.element.offsetWidth;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: slideIn=0A=
		Slides the elements in view horizontally or vertically.=0A=
=0A=
	Arguments:=0A=
		mode - (optional, string) 'horizontal' or 'vertical'; defaults to =
options.mode.=0A=
	*/=0A=
=0A=
	slideIn: function(mode){=0A=
		this[mode || this.options.mode]();=0A=
		return this.start([this.element.getStyle(this.margin).toInt(), =
this.wrapper.getStyle(this.layout).toInt()], [0, this.offset]);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: slideOut=0A=
		Sides the elements out of view horizontally or vertically.=0A=
=0A=
	Arguments:=0A=
		mode - (optional, string) 'horizontal' or 'vertical'; defaults to =
options.mode.=0A=
	*/=0A=
=0A=
	slideOut: function(mode){=0A=
		this[mode || this.options.mode]();=0A=
		return this.start([this.element.getStyle(this.margin).toInt(), =
this.wrapper.getStyle(this.layout).toInt()], [-this.offset, 0]);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: hide=0A=
		Hides the element without a transition.=0A=
=0A=
	Arguments:=0A=
		mode - (optional, string) 'horizontal' or 'vertical'; defaults to =
options.mode.=0A=
	*/=0A=
=0A=
	hide: function(mode){=0A=
		this[mode || this.options.mode]();=0A=
		this.open =3D false;=0A=
		return this.set([-this.offset, 0]);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: show=0A=
		Shows the element without a transition.=0A=
=0A=
	Arguments:=0A=
		mode - (optional, string) 'horizontal' or 'vertical'; defaults to =
options.mode.=0A=
	*/=0A=
=0A=
	show: function(mode){=0A=
		this[mode || this.options.mode]();=0A=
		this.open =3D true;=0A=
		return this.set([0, this.offset]);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: toggle=0A=
		Slides in or Out the element, depending on its state=0A=
=0A=
	Arguments:=0A=
		mode - (optional, string) 'horizontal' or 'vertical'; defaults to =
options.mode.=0A=
=0A=
	*/=0A=
=0A=
	toggle: function(mode){=0A=
		if (this.wrapper.offsetHeight =3D=3D 0 || this.wrapper.offsetWidth =
=3D=3D 0) return this.slideIn(mode);=0A=
		return this.slideOut(mode);=0A=
	},=0A=
=0A=
	increase: function(){=0A=
		this.element.setStyle(this.margin, this.now[0] + this.options.unit);=0A=
		this.wrapper.setStyle(this.layout, this.now[1] + this.options.unit);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Fx.Transitions.js=0A=
	Effects transitions, to be used with all the effects.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
=0A=
Credits:=0A=
	Easing Equations by Robert Penner, =
<http://www.robertpenner.com/easing/>, modified & optimized to be used =
with mootools.=0A=
*/=0A=
=0A=
/*=0A=
Class: Fx.Transitions=0A=
	A collection of tweening transitions for use with the <Fx.Base> classes.=0A=
=0A=
Example:=0A=
	>//Elastic.easeOut with default values:=0A=
	>new Fx.Style('margin', {transition: Fx.Transitions.Elastic.easeOut});=0A=
	>//Elastic.easeOut with user-defined value for elasticity.=0A=
	> var myTransition =3D new Fx.Transition(Fx.Transitions.Elastic, 3);=0A=
	>new Fx.Style('margin', {transition: myTransition.easeOut});=0A=
=0A=
See also:=0A=
	http://www.robertpenner.com/easing/=0A=
*/=0A=
=0A=
Fx.Transition =3D function(transition, params){=0A=
	params =3D params || [];=0A=
	if ($type(params) !=3D 'array') params =3D [params];=0A=
	return $extend(transition, {=0A=
		easeIn: function(pos){=0A=
			return transition(pos, params);=0A=
		},=0A=
		easeOut: function(pos){=0A=
			return 1 - transition(1 - pos, params);=0A=
		},=0A=
		easeInOut: function(pos){=0A=
			return (pos <=3D 0.5) ? transition(2 * pos, params) / 2 : (2 - =
transition(2 * (1 - pos), params)) / 2;=0A=
		}=0A=
	});=0A=
};=0A=
=0A=
Fx.Transitions =3D new Abstract({=0A=
=0A=
	/*=0A=
	Property: linear=0A=
		displays a linear transition.=0A=
=0A=
	Graph:=0A=
		(see Linear.png)=0A=
	*/=0A=
=0A=
	linear: function(p){=0A=
		return p;=0A=
	}=0A=
=0A=
});=0A=
=0A=
Fx.Transitions.extend =3D function(transitions){=0A=
	for (var transition in transitions){=0A=
		Fx.Transitions[transition] =3D new =
Fx.Transition(transitions[transition]);=0A=
		/*compatibility*/=0A=
		Fx.Transitions.compat(transition);=0A=
		/*end compatibility*/=0A=
	}=0A=
};=0A=
=0A=
/*compatibility*/=0A=
=0A=
Fx.Transitions.compat =3D function(transition){=0A=
	['In', 'Out', 'InOut'].each(function(easeType){=0A=
		Fx.Transitions[transition.toLowerCase() + easeType] =3D =
Fx.Transitions[transition]['ease' + easeType];=0A=
	});=0A=
};=0A=
=0A=
/*end compatibility*/=0A=
=0A=
Fx.Transitions.extend({=0A=
=0A=
	/*=0A=
	Property: Quad=0A=
		displays a quadratic transition. Must be used as Quad.easeIn or =
Quad.easeOut or Quad.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Quad.png)=0A=
	*/=0A=
=0A=
	//auto generated=0A=
=0A=
	/*=0A=
	Property: Cubic=0A=
		displays a cubicular transition. Must be used as Cubic.easeIn or =
Cubic.easeOut or Cubic.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Cubic.png)=0A=
	*/=0A=
=0A=
	//auto generated=0A=
=0A=
	/*=0A=
	Property: Quart=0A=
		displays a quartetic transition. Must be used as Quart.easeIn or =
Quart.easeOut or Quart.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Quart.png)=0A=
	*/=0A=
=0A=
	//auto generated=0A=
=0A=
	/*=0A=
	Property: Quint=0A=
		displays a quintic transition. Must be used as Quint.easeIn or =
Quint.easeOut or Quint.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Quint.png)=0A=
	*/=0A=
=0A=
	//auto generated=0A=
=0A=
	/*=0A=
	Property: Pow=0A=
		Used to generate Quad, Cubic, Quart and Quint.=0A=
		By default is p^6.=0A=
=0A=
	Graph:=0A=
		(see Pow.png)=0A=
	*/=0A=
=0A=
	Pow: function(p, x){=0A=
		return Math.pow(p, x[0] || 6);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: Expo=0A=
		displays a exponential transition. Must be used as Expo.easeIn or =
Expo.easeOut or Expo.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Expo.png)=0A=
	*/=0A=
=0A=
	Expo: function(p){=0A=
		return Math.pow(2, 8 * (p - 1));=0A=
	},=0A=
=0A=
	/*=0A=
	Property: Circ=0A=
		displays a circular transition. Must be used as Circ.easeIn or =
Circ.easeOut or Circ.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Circ.png)=0A=
	*/=0A=
=0A=
	Circ: function(p){=0A=
		return 1 - Math.sin(Math.acos(p));=0A=
	},=0A=
=0A=
=0A=
	/*=0A=
	Property: Sine=0A=
		displays a sineousidal transition. Must be used as Sine.easeIn or =
Sine.easeOut or Sine.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Sine.png)=0A=
	*/=0A=
=0A=
	Sine: function(p){=0A=
		return 1 - Math.sin((1 - p) * Math.PI / 2);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: Back=0A=
		makes the transition go back, then all forth. Must be used as =
Back.easeIn or Back.easeOut or Back.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Back.png)=0A=
	*/=0A=
=0A=
	Back: function(p, x){=0A=
		x =3D x[0] || 1.618;=0A=
		return Math.pow(p, 2) * ((x + 1) * p - x);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: Bounce=0A=
		makes the transition bouncy. Must be used as Bounce.easeIn or =
Bounce.easeOut or Bounce.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Bounce.png)=0A=
	*/=0A=
=0A=
	Bounce: function(p){=0A=
		var value;=0A=
		for (var a =3D 0, b =3D 1; 1; a +=3D b, b /=3D 2){=0A=
			if (p >=3D (7 - 4 * a) / 11){=0A=
				value =3D - Math.pow((11 - 6 * a - 11 * p) / 4, 2) + b * b;=0A=
				break;=0A=
			}=0A=
		}=0A=
		return value;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: Elastic=0A=
		Elastic curve. Must be used as Elastic.easeIn or Elastic.easeOut or =
Elastic.easeInOut=0A=
=0A=
	Graph:=0A=
		(see Elastic.png)=0A=
	*/=0A=
=0A=
	Elastic: function(p, x){=0A=
		return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) =
/ 3);=0A=
	}=0A=
=0A=
});=0A=
=0A=
['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){=0A=
	Fx.Transitions[transition] =3D new Fx.Transition(function(p){=0A=
		return Math.pow(p, [i + 2]);=0A=
	});=0A=
	=0A=
	/*compatibility*/=0A=
	Fx.Transitions.compat(transition);=0A=
	/*end compatibility*/=0A=
});=0A=
=0A=
/*=0A=
Script: Drag.Base.js=0A=
	Contains <Drag.Base>, <Element.makeResizable>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
var Drag =3D {};=0A=
=0A=
/*=0A=
Class: Drag.Base=0A=
	Modify two css properties of an element based on the position of the =
mouse.=0A=
	=0A=
Note:=0A=
	Drag.Base requires an XHTML doctype.=0A=
=0A=
Arguments:=0A=
	el - the $(element) to apply the transformations to.=0A=
	options - optional. The options object.=0A=
=0A=
Options:=0A=
	handle - the $(element) to act as the handle for the draggable element. =
defaults to the $(element) itself.=0A=
	modifiers - an object. see Modifiers Below.=0A=
	limit - an object, see Limit below.=0A=
	grid - optional, distance in px for snap-to-grid dragging=0A=
	snap - optional, the distance you have to drag before the element =
starts to respond to the drag. defaults to false=0A=
=0A=
	modifiers:=0A=
		x - string, the style you want to modify when the mouse moves in an =
horizontal direction. defaults to 'left'=0A=
		y - string, the style you want to modify when the mouse moves in a =
vertical direction. defaults to 'top'=0A=
=0A=
	limit:=0A=
		x - array with start and end limit relative to modifiers.x=0A=
		y - array with start and end limit relative to modifiers.y=0A=
		=0A=
Events:=0A=
	onStart - optional, function to execute when the user starts to drag =
(on mousedown);=0A=
	onComplete - optional, function to execute when the user completes the =
drag.=0A=
	onDrag - optional, function to execute at every step of the drag=0A=
*/=0A=
=0A=
Drag.Base =3D new Class({=0A=
=0A=
	options: {=0A=
		handle: false,=0A=
		unit: 'px',=0A=
		onStart: Class.empty,=0A=
		onBeforeStart: Class.empty,=0A=
		onComplete: Class.empty,=0A=
		onSnap: Class.empty,=0A=
		onDrag: Class.empty,=0A=
		limit: false,=0A=
		modifiers: {x: 'left', y: 'top'},=0A=
		grid: false,=0A=
		snap: 6=0A=
	},=0A=
=0A=
	initialize: function(el, options){=0A=
		this.setOptions(options);=0A=
		this.element =3D $(el);=0A=
		this.handle =3D $(this.options.handle) || this.element;=0A=
		this.mouse =3D {'now': {}, 'pos': {}};=0A=
		this.value =3D {'start': {}, 'now': {}};=0A=
		this.bound =3D {=0A=
			'start': this.start.bindWithEvent(this),=0A=
			'check': this.check.bindWithEvent(this),=0A=
			'drag': this.drag.bindWithEvent(this),=0A=
			'stop': this.stop.bind(this)=0A=
		};=0A=
		this.attach();=0A=
		if (this.options.initialize) this.options.initialize.call(this);=0A=
	},=0A=
=0A=
	attach: function(){=0A=
		this.handle.addEvent('mousedown', this.bound.start);=0A=
		return this;=0A=
	},=0A=
=0A=
	detach: function(){=0A=
		this.handle.removeEvent('mousedown', this.bound.start);=0A=
		return this;=0A=
	},=0A=
=0A=
	start: function(event){=0A=
		this.fireEvent('onBeforeStart', this.element);=0A=
		this.mouse.start =3D event.page;=0A=
		var limit =3D this.options.limit;=0A=
		this.limit =3D {'x': [], 'y': []};=0A=
		for (var z in this.options.modifiers){=0A=
			if (!this.options.modifiers[z]) continue;=0A=
			this.value.now[z] =3D =
this.element.getStyle(this.options.modifiers[z]).toInt();=0A=
			this.mouse.pos[z] =3D event.page[z] - this.value.now[z];=0A=
			if (limit && limit[z]){=0A=
				for (var i =3D 0; i < 2; i++){=0A=
					if ($chk(limit[z][i])) this.limit[z][i] =3D ($type(limit[z][i]) =
=3D=3D 'function') ? limit[z][i]() : limit[z][i];=0A=
				}=0A=
			}=0A=
		}=0A=
		if ($type(this.options.grid) =3D=3D 'number') this.options.grid =3D =
{'x': this.options.grid, 'y': this.options.grid};=0A=
		document.addListener('mousemove', this.bound.check);=0A=
		document.addListener('mouseup', this.bound.stop);=0A=
		this.fireEvent('onStart', this.element);=0A=
		event.stop();=0A=
	},=0A=
=0A=
	check: function(event){=0A=
		var distance =3D Math.round(Math.sqrt(Math.pow(event.page.x - =
this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, =
2)));=0A=
		if (distance > this.options.snap){=0A=
			document.removeListener('mousemove', this.bound.check);=0A=
			document.addListener('mousemove', this.bound.drag);=0A=
			this.drag(event);=0A=
			this.fireEvent('onSnap', this.element);=0A=
		}=0A=
		event.stop();=0A=
	},=0A=
=0A=
	drag: function(event){=0A=
		this.out =3D false;=0A=
		this.mouse.now =3D event.page;=0A=
		for (var z in this.options.modifiers){=0A=
			if (!this.options.modifiers[z]) continue;=0A=
			this.value.now[z] =3D this.mouse.now[z] - this.mouse.pos[z];=0A=
			if (this.limit[z]){=0A=
				if ($chk(this.limit[z][1]) && (this.value.now[z] > =
this.limit[z][1])){=0A=
					this.value.now[z] =3D this.limit[z][1];=0A=
					this.out =3D true;=0A=
				} else if ($chk(this.limit[z][0]) && (this.value.now[z] < =
this.limit[z][0])){=0A=
					this.value.now[z] =3D this.limit[z][0];=0A=
					this.out =3D true;=0A=
				}=0A=
			}=0A=
			if (this.options.grid[z]) this.value.now[z] -=3D (this.value.now[z] % =
this.options.grid[z]);=0A=
			this.element.setStyle(this.options.modifiers[z], this.value.now[z] + =
this.options.unit);=0A=
		}=0A=
		this.fireEvent('onDrag', this.element);=0A=
		event.stop();=0A=
	},=0A=
=0A=
	stop: function(){=0A=
		document.removeListener('mousemove', this.bound.check);=0A=
		document.removeListener('mousemove', this.bound.drag);=0A=
		document.removeListener('mouseup', this.bound.stop);=0A=
		this.fireEvent('onComplete', this.element);=0A=
	}=0A=
=0A=
});=0A=
=0A=
Drag.Base.implement(new Events, new Options);=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: makeResizable=0A=
		Makes an element resizable (by dragging) with the supplied options.=0A=
=0A=
	Arguments:=0A=
		options - see <Drag.Base> for acceptable options.=0A=
	*/=0A=
=0A=
	makeResizable: function(options){=0A=
		return new Drag.Base(this, $merge({modifiers: {x: 'width', y: =
'height'}}, options));=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Drag.Move.js=0A=
	Contains <Drag.Move>, <Element.makeDraggable>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Drag.Move=0A=
	Extends <Drag.Base>, has additional functionality for dragging an =
element, support snapping and droppables.=0A=
	Drag.move supports either position absolute or relative. If no position =
is found, absolute will be set.=0A=
	Inherits methods, properties, options and events from <Drag.Base>.=0A=
=0A=
Note:=0A=
	Drag.Move requires an XHTML doctype.=0A=
=0A=
Arguments:=0A=
	el - the $(element) to apply the drag to.=0A=
	options - optional. see Options below.=0A=
=0A=
Options:=0A=
	all the drag.Base options, plus:=0A=
	container - an element, will fill automatically limiting options based =
on the $(element) size and position. defaults to false (no limiting)=0A=
	droppables - an array of elements you can drop your draggable to.=0A=
	overflown - an array of nested scrolling containers, see =
Element::getPosition=0A=
*/=0A=
=0A=
Drag.Move =3D Drag.Base.extend({=0A=
=0A=
	options: {=0A=
		droppables: [],=0A=
		container: false,=0A=
		overflown: []=0A=
	},=0A=
=0A=
	initialize: function(el, options){=0A=
		this.setOptions(options);=0A=
		this.element =3D $(el);=0A=
		this.droppables =3D $$(this.options.droppables);=0A=
		this.container =3D $(this.options.container);=0A=
		this.position =3D {'element': this.element.getStyle('position'), =
'container': false};=0A=
		if (this.container) this.position.container =3D =
this.container.getStyle('position');=0A=
		if (!['relative', 'absolute', =
'fixed'].contains(this.position.element)) this.position.element =3D =
'absolute';=0A=
		var top =3D this.element.getStyle('top').toInt();=0A=
		var left =3D this.element.getStyle('left').toInt();=0A=
		if (this.position.element =3D=3D 'absolute' && !['relative', =
'absolute', 'fixed'].contains(this.position.container)){=0A=
			top =3D $chk(top) ? top : this.element.getTop(this.options.overflown);=0A=
			left =3D $chk(left) ? left : =
this.element.getLeft(this.options.overflown);=0A=
		} else {=0A=
			top =3D $chk(top) ? top : 0;=0A=
			left =3D $chk(left) ? left : 0;=0A=
		}=0A=
		this.element.setStyles({'top': top, 'left': left, 'position': =
this.position.element});=0A=
		this.parent(this.element);=0A=
	},=0A=
=0A=
	start: function(event){=0A=
		this.overed =3D null;=0A=
		if (this.container){=0A=
			var cont =3D this.container.getCoordinates();=0A=
			var el =3D this.element.getCoordinates();=0A=
			if (this.position.element =3D=3D 'absolute' && !['relative', =
'absolute', 'fixed'].contains(this.position.container)){=0A=
				this.options.limit =3D {=0A=
					'x': [cont.left, cont.right - el.width],=0A=
					'y': [cont.top, cont.bottom - el.height]=0A=
				};=0A=
			} else {=0A=
				this.options.limit =3D {=0A=
					'y': [0, cont.height - el.height],=0A=
					'x': [0, cont.width - el.width]=0A=
				};=0A=
			}=0A=
		}=0A=
		this.parent(event);=0A=
	},=0A=
=0A=
	drag: function(event){=0A=
		this.parent(event);=0A=
		var overed =3D this.out ? false : =
this.droppables.filter(this.checkAgainst, this).getLast();=0A=
		if (this.overed !=3D overed){=0A=
			if (this.overed) this.overed.fireEvent('leave', [this.element, this]);=0A=
			this.overed =3D overed ? overed.fireEvent('over', [this.element, =
this]) : null;=0A=
		}=0A=
		return this;=0A=
	},=0A=
=0A=
	checkAgainst: function(el){=0A=
		el =3D el.getCoordinates(this.options.overflown);=0A=
		var now =3D this.mouse.now;=0A=
		return (now.x > el.left && now.x < el.right && now.y < el.bottom && =
now.y > el.top);=0A=
	},=0A=
=0A=
	stop: function(){=0A=
		if (this.overed && !this.out) this.overed.fireEvent('drop', =
[this.element, this]);=0A=
		else this.element.fireEvent('emptydrop', this);=0A=
		this.parent();=0A=
		return this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: makeDraggable=0A=
		Makes an element draggable with the supplied options.=0A=
=0A=
	Arguments:=0A=
		options - see <Drag.Move> and <Drag.Base> for acceptable options.=0A=
	*/=0A=
=0A=
	makeDraggable: function(options){=0A=
		return new Drag.Move(this, options);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: XHR.js=0A=
	Contains the basic XMLHttpRequest Class Wrapper.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: XHR=0A=
	Basic XMLHttpRequest Wrapper.=0A=
=0A=
Arguments:=0A=
	options - an object with options names as keys. See options below.=0A=
=0A=
Options:=0A=
	method - 'post' or 'get' - the protocol for the request; optional, =
defaults to 'post'.=0A=
	async - boolean: asynchronous option; true uses asynchronous requests. =
Defaults to true.=0A=
	encoding - the encoding, defaults to utf-8.=0A=
	autoCancel - cancels the already running request if another one is =
sent. defaults to false.=0A=
	headers - accepts an object, that will be set to request headers.=0A=
	=0A=
Events:=0A=
	onRequest - function to execute when the XHR request is fired.=0A=
	onSuccess - function to execute when the XHR request completes.=0A=
	onStateChange - function to execute when the state of the =
XMLHttpRequest changes.=0A=
	onFailure - function to execute when the state of the XMLHttpRequest =
changes.=0A=
=0A=
Properties:=0A=
	running - true if the request is running.=0A=
	response - object, text and xml as keys. You can access this property =
in the onSuccess event.=0A=
=0A=
Example:=0A=
	>var myXHR =3D new XHR({method: =
'get'}).send('http://site.com/requestHandler.php', =
'name=3Djohn&lastname=3Ddorian');=0A=
*/=0A=
=0A=
var XHR =3D new Class({=0A=
=0A=
	options: {=0A=
		method: 'post',=0A=
		async: true,=0A=
		onRequest: Class.empty,=0A=
		onSuccess: Class.empty,=0A=
		onFailure: Class.empty,=0A=
		urlEncoded: true,=0A=
		encoding: 'utf-8',=0A=
		autoCancel: false,=0A=
		headers: {}=0A=
	},=0A=
=0A=
	setTransport: function(){=0A=
		this.transport =3D (window.XMLHttpRequest) ? new XMLHttpRequest() : =
(window.ie ? new ActiveXObject('Microsoft.XMLHTTP') : false);=0A=
		return this;=0A=
	},=0A=
=0A=
	initialize: function(options){=0A=
		this.setTransport().setOptions(options);=0A=
		this.options.isSuccess =3D this.options.isSuccess || this.isSuccess;=0A=
		this.headers =3D {};=0A=
		if (this.options.urlEncoded && this.options.method =3D=3D 'post'){=0A=
			var encoding =3D (this.options.encoding) ? '; charset=3D' + =
this.options.encoding : '';=0A=
			this.setHeader('Content-type', 'application/x-www-form-urlencoded' + =
encoding);=0A=
		}=0A=
		if (this.options.initialize) this.options.initialize.call(this);=0A=
	},=0A=
=0A=
	onStateChange: function(){=0A=
		if (this.transport.readyState !=3D 4 || !this.running) return;=0A=
		this.running =3D false;=0A=
		var status =3D 0;=0A=
		try {status =3D this.transport.status;} catch(e){};=0A=
		if (this.options.isSuccess.call(this, status)) this.onSuccess();=0A=
		else this.onFailure();=0A=
		this.transport.onreadystatechange =3D Class.empty;=0A=
	},=0A=
=0A=
	isSuccess: function(status){=0A=
		return ((status >=3D 200) && (status < 300));=0A=
	},=0A=
=0A=
	onSuccess: function(){=0A=
		this.response =3D {=0A=
			'text': this.transport.responseText,=0A=
			'xml': this.transport.responseXML=0A=
		};=0A=
		this.fireEvent('onSuccess', [this.response.text, this.response.xml]);=0A=
		this.callChain();=0A=
	},=0A=
=0A=
	onFailure: function(){=0A=
		this.fireEvent('onFailure', this.transport);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setHeader=0A=
		Add/modify an header for the request. It will not override headers =
from the options.=0A=
=0A=
	Example:=0A=
		>var myXhr =3D new XHR(url, {method: 'get', headers: {'X-Request': =
'JSON'}});=0A=
		>myXhr.setHeader('Last-Modified','Sat, 1 Jan 2005 05:00:00 GMT');=0A=
	*/=0A=
=0A=
	setHeader: function(name, value){=0A=
		this.headers[name] =3D value;=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: send=0A=
		Opens the XHR connection and sends the data. Data has to be null or a =
string.=0A=
=0A=
	Example:=0A=
		>var myXhr =3D new XHR({method: 'post'});=0A=
		>myXhr.send(url, querystring);=0A=
		>=0A=
		>var syncXhr =3D new XHR({async: false, method: 'post'});=0A=
		>syncXhr.send(url, null);=0A=
		>=0A=
	*/=0A=
=0A=
	send: function(url, data){=0A=
		if (this.options.autoCancel) this.cancel();=0A=
		else if (this.running) return this;=0A=
		this.running =3D true;=0A=
		if (data && this.options.method =3D=3D 'get'){=0A=
			url =3D url + (url.contains('?') ? '&' : '?') + data;=0A=
			data =3D null;=0A=
		}=0A=
		this.transport.open(this.options.method.toUpperCase(), url, =
this.options.async);=0A=
		this.transport.onreadystatechange =3D this.onStateChange.bind(this);=0A=
		if ((this.options.method =3D=3D 'post') && =
this.transport.overrideMimeType) this.setHeader('Connection', 'close');=0A=
		$extend(this.headers, this.options.headers);=0A=
		for (var type in this.headers) try =
{this.transport.setRequestHeader(type, this.headers[type]);} catch(e){};=0A=
		this.fireEvent('onRequest');=0A=
		this.transport.send($pick(data, null));=0A=
		return this;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: cancel=0A=
		Cancels the running request. No effect if the request is not running.=0A=
=0A=
	Example:=0A=
		>var myXhr =3D new XHR({method: 'get'}).send(url);=0A=
		>myXhr.cancel();=0A=
	*/=0A=
=0A=
	cancel: function(){=0A=
		if (!this.running) return this;=0A=
		this.running =3D false;=0A=
		this.transport.abort();=0A=
		this.transport.onreadystatechange =3D Class.empty;=0A=
		this.setTransport();=0A=
		this.fireEvent('onCancel');=0A=
		return this;=0A=
	}=0A=
=0A=
});=0A=
=0A=
XHR.implement(new Chain, new Events, new Options);=0A=
=0A=
/*=0A=
Script: Ajax.js=0A=
	Contains the <Ajax> class. Also contains methods to generate =
querystings from forms and Objects.=0A=
=0A=
Credits:=0A=
	Loosely based on the version from prototype.js =
<http://prototype.conio.net>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Ajax=0A=
	An Ajax class, For all your asynchronous needs.=0A=
	Inherits methods, properties, options and events from <XHR>.=0A=
=0A=
Arguments:=0A=
	url - the url pointing to the server-side script.=0A=
	options - optional, an object containing options.=0A=
=0A=
Options:=0A=
	data - you can write parameters here. Can be a querystring, an object =
or a Form element.=0A=
	update - $(element) to insert the response text of the XHR into, upon =
completion of the request.=0A=
	evalScripts - boolean; default is false. Execute scripts in the =
response text onComplete. When the response is javascript the whole =
response is evaluated.=0A=
	evalResponse - boolean; default is false. Force global evalulation of =
the whole response, no matter what content-type it is.=0A=
	=0A=
Events:=0A=
	onComplete - function to execute when the ajax request completes.=0A=
=0A=
Example:=0A=
	>var myAjax =3D new Ajax(url, {method: 'get'}).request();=0A=
*/=0A=
=0A=
var Ajax =3D XHR.extend({=0A=
=0A=
	options: {=0A=
		data: null,=0A=
		update: null,=0A=
		onComplete: Class.empty,=0A=
		evalScripts: false,=0A=
		evalResponse: false=0A=
	},=0A=
=0A=
	initialize: function(url, options){=0A=
		this.addEvent('onSuccess', this.onComplete);=0A=
		this.setOptions(options);=0A=
		/*compatibility*/=0A=
		this.options.data =3D this.options.data || this.options.postBody;=0A=
		/*end compatibility*/=0A=
		if (!['post', 'get'].contains(this.options.method)){=0A=
			this._method =3D '_method=3D' + this.options.method;=0A=
			this.options.method =3D 'post';=0A=
		}=0A=
		this.parent();=0A=
		this.setHeader('X-Requested-With', 'XMLHttpRequest');=0A=
		this.setHeader('Accept', 'text/javascript, text/html, application/xml, =
text/xml, */*');=0A=
		this.url =3D url;=0A=
	},=0A=
=0A=
	onComplete: function(){=0A=
		if (this.options.update) =
$(this.options.update).empty().setHTML(this.response.text);=0A=
		if (this.options.evalScripts || this.options.evalResponse) =
this.evalScripts();=0A=
		this.fireEvent('onComplete', [this.response.text, this.response.xml], =
20);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: request=0A=
		Executes the ajax request.=0A=
=0A=
	Example:=0A=
		>var myAjax =3D new Ajax(url, {method: 'get'});=0A=
		>myAjax.request();=0A=
=0A=
		OR=0A=
=0A=
		>new Ajax(url, {method: 'get'}).request();=0A=
	*/=0A=
=0A=
	request: function(data){=0A=
		data =3D data || this.options.data;=0A=
		switch($type(data)){=0A=
			case 'element': data =3D $(data).toQueryString(); break;=0A=
			case 'object': data =3D Object.toQueryString(data);=0A=
		}=0A=
		if (this._method) data =3D (data) ? [this._method, data].join('&') : =
this._method;=0A=
		return this.send(this.url, data);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: evalScripts=0A=
		Executes scripts in the response text=0A=
	*/=0A=
=0A=
	evalScripts: function(){=0A=
		var script, scripts;=0A=
		if (this.options.evalResponse || =
(/(ecma|java)script/).test(this.getHeader('Content-type'))) scripts =3D =
this.response.text;=0A=
		else {=0A=
			scripts =3D [];=0A=
			var regexp =3D /<script[^>]*>([\s\S]*?)<\/script>/gi;=0A=
			while ((script =3D regexp.exec(this.response.text))) =
scripts.push(script[1]);=0A=
			scripts =3D scripts.join('\n');=0A=
		}=0A=
		if (scripts) (window.execScript) ? window.execScript(scripts) : =
window.setTimeout(scripts, 0);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: getHeader=0A=
		Returns the given response header or null=0A=
	*/=0A=
=0A=
	getHeader: function(name){=0A=
		try {return this.transport.getResponseHeader(name);} catch(e){};=0A=
		return null;=0A=
	}=0A=
=0A=
});=0A=
=0A=
/* Section: Object related Functions */=0A=
=0A=
/*=0A=
Function: Object.toQueryString=0A=
	Generates a querystring from key/pair values in an object=0A=
=0A=
Arguments:=0A=
	source - the object to generate the querystring from.=0A=
=0A=
Returns:=0A=
	the query string.=0A=
=0A=
Example:=0A=
	>Object.toQueryString({apple: "red", lemon: "yellow"}); //returns =
"apple=3Dred&lemon=3Dyellow"=0A=
*/=0A=
=0A=
Object.toQueryString =3D function(source){=0A=
	var queryString =3D [];=0A=
	for (var property in source) =
queryString.push(encodeURIComponent(property) + '=3D' + =
encodeURIComponent(source[property]));=0A=
	return queryString.join('&');=0A=
};=0A=
=0A=
/*=0A=
Class: Element=0A=
	Custom class to allow all of its methods to be used with any DOM =
element via the dollar function <$>.=0A=
*/=0A=
=0A=
Element.extend({=0A=
=0A=
	/*=0A=
	Property: send=0A=
		Sends a form with an ajax post request=0A=
=0A=
	Arguments:=0A=
		options - option collection for ajax request. See <Ajax> for the =
options list.=0A=
=0A=
	Returns:=0A=
		The Ajax Class Instance=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		<form id=3D"myForm" action=3D"submit.php">=0A=
		<input name=3D"email" value=3D"bob@bob.com">=0A=
		<input name=3D"zipCode" value=3D"90210">=0A=
		</form>=0A=
		<script>=0A=
		$('myForm').send()=0A=
		</script>=0A=
		(end)=0A=
	*/=0A=
=0A=
	send: function(options){=0A=
		return new Ajax(this.getProperty('action'), $merge({data: =
this.toQueryString()}, options, {method: 'post'})).request();=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Cookie.js=0A=
	A cookie reader/creator=0A=
=0A=
Credits:=0A=
	based on the functions by Peter-Paul Koch (http://quirksmode.org)=0A=
*/=0A=
=0A=
/*=0A=
Class: Cookie=0A=
	Class for creating, getting, and removing cookies.=0A=
*/=0A=
=0A=
var Cookie =3D new Abstract({=0A=
=0A=
	options: {=0A=
		domain: false,=0A=
		path: false,=0A=
		duration: false,=0A=
		secure: false=0A=
	},=0A=
=0A=
	/*=0A=
	Property: set=0A=
		Sets a cookie in the browser.=0A=
=0A=
	Arguments:=0A=
		key - the key (name) for the cookie=0A=
		value - the value to set, cannot contain semicolons=0A=
		options - an object representing the Cookie options. See Options =
below. Default values are stored in Cookie.options.=0A=
=0A=
	Options:=0A=
		domain - the domain the Cookie belongs to. If you want to share the =
cookie with pages located on a different domain, you have to set this =
value. Defaults to the current domain.=0A=
		path - the path the Cookie belongs to. If you want to share the cookie =
with pages located in a different path, you have to set this value, for =
example to "/" to share the cookie with all pages on the domain. =
Defaults to the current path.=0A=
		duration - the duration of the Cookie before it expires, in days.=0A=
					If set to false or 0, the cookie will be a session cookie that =
expires when the browser is closed. This is default.=0A=
		secure - Stored cookie information can be accessed only from a secure =
environment.=0A=
=0A=
	Returns:=0A=
		An object with the options, the key and the value. You can give it as =
first parameter to Cookie.remove.=0A=
=0A=
	Example:=0A=
		>Cookie.set('username', 'Harald'); // session cookie (duration is =
false), or ...=0A=
		>Cookie.set('username', 'JackBauer', {duration: 1}); // save this for =
1 day=0A=
=0A=
	*/=0A=
=0A=
	set: function(key, value, options){=0A=
		options =3D $merge(this.options, options);=0A=
		value =3D encodeURIComponent(value);=0A=
		if (options.domain) value +=3D '; domain=3D' + options.domain;=0A=
		if (options.path) value +=3D '; path=3D' + options.path;=0A=
		if (options.duration){=0A=
			var date =3D new Date();=0A=
			date.setTime(date.getTime() + options.duration * 24 * 60 * 60 * 1000);=0A=
			value +=3D '; expires=3D' + date.toGMTString();=0A=
		}=0A=
		if (options.secure) value +=3D '; secure';=0A=
		document.cookie =3D key + '=3D' + value;=0A=
		return $extend(options, {'key': key, 'value': value});=0A=
	},=0A=
=0A=
	/*=0A=
	Property: get=0A=
		Gets the value of a cookie.=0A=
=0A=
	Arguments:=0A=
		key - the name of the cookie you wish to retrieve.=0A=
=0A=
	Returns:=0A=
		The cookie string value, or false if not found.=0A=
=0A=
	Example:=0A=
		>Cookie.get("username") //returns JackBauer=0A=
	*/=0A=
=0A=
	get: function(key){=0A=
		var value =3D document.cookie.match('(?:^|;)\\s*' + key.escapeRegExp() =
+ '=3D([^;]*)');=0A=
		return value ? decodeURIComponent(value[1]) : false;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: remove=0A=
		Removes a cookie from the browser.=0A=
=0A=
	Arguments:=0A=
		cookie - the name of the cookie to remove or a previous cookie (for =
domains)=0A=
		options - optional. you can also pass the domain and path here. Same =
as options in <Cookie.set>=0A=
=0A=
	Examples:=0A=
		>Cookie.remove('username') //bye-bye JackBauer, cya in 24 hours=0A=
		>=0A=
		>var myCookie =3D Cookie.set('username', 'Aaron', {domain: =
'mootools.net'}); // Cookie.set returns an object with all values need =
to remove the cookie=0A=
		>Cookie.remove(myCookie);=0A=
	*/=0A=
=0A=
	remove: function(cookie, options){=0A=
		if ($type(cookie) =3D=3D 'object') this.set(cookie.key, '', =
$merge(cookie, {duration: -1}));=0A=
		else this.set(cookie, '', $merge(options, {duration: -1}));=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Json.js=0A=
	Simple Json parser and Stringyfier, See: <http://www.json.org/>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Json=0A=
	Simple Json parser and Stringyfier, See: <http://www.json.org/>=0A=
*/=0A=
=0A=
var Json =3D {=0A=
=0A=
	/*=0A=
	Property: toString=0A=
		Converts an object to a string, to be passed in server-side scripts as =
a parameter. Although its not normal usage for this class, this method =
can also be used to convert functions and arrays to strings.=0A=
=0A=
	Arguments:=0A=
		obj - the object to convert to string=0A=
=0A=
	Returns:=0A=
		A json string=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		Json.toString({apple: 'red', lemon: 'yellow'}); =
'{"apple":"red","lemon":"yellow"}'=0A=
		(end)=0A=
	*/=0A=
=0A=
	toString: function(obj){=0A=
		switch($type(obj)){=0A=
			case 'string':=0A=
				return '"' + obj.replace(/(["\\])/g, '\\$1') + '"';=0A=
			case 'array':=0A=
				return '[' + obj.map(Json.toString).join(',') + ']';=0A=
			case 'object':=0A=
				var string =3D [];=0A=
				for (var property in obj) string.push(Json.toString(property) + ':' =
+ Json.toString(obj[property]));=0A=
				return '{' + string.join(',') + '}';=0A=
			case 'number':=0A=
				if (isFinite(obj)) break;=0A=
			case false:=0A=
				return 'null';=0A=
		}=0A=
		return String(obj);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: evaluate=0A=
		converts a json string to an javascript Object.=0A=
=0A=
	Arguments:=0A=
		str - the string to evaluate. if its not a string, it returns false.=0A=
		secure - optionally, performs syntax check on json string. Defaults to =
false.=0A=
=0A=
	Credits:=0A=
		Json test regexp is by Douglas Crockford <http://crockford.org>.=0A=
=0A=
	Example:=0A=
		>var myObject =3D Json.evaluate('{"apple":"red","lemon":"yellow"}');=0A=
		>//myObject will become {apple: 'red', lemon: 'yellow'}=0A=
	*/=0A=
=0A=
	evaluate: function(str, secure){=0A=
		return (($type(str) !=3D 'string') || (secure && =
!str.test(/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u =
\n\r\t])+?$/))) ? null : eval('(' + str + ')');=0A=
	}=0A=
=0A=
};=0A=
=0A=
/*=0A=
Script: Json.Remote.js=0A=
	Contains <Json.Remote>.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Json.Remote=0A=
	Wrapped XHR with automated sending and receiving of Javascript Objects =
in Json Format.=0A=
	Inherits methods, properties, options and events from <XHR>.=0A=
=0A=
Arguments:=0A=
	url - the url you want to send your object to.=0A=
	options - see <XHR> options=0A=
=0A=
Example:=0A=
	this code will send user information based on name/last name=0A=
	(start code)=0A=
	var jSonRequest =3D new Json.Remote("http://site.com/tellMeAge.php", =
{onComplete: function(person){=0A=
		alert(person.age); //is 25 years=0A=
		alert(person.height); //is 170 cm=0A=
		alert(person.weight); //is 120 kg=0A=
	}}).send({'name': 'John', 'lastName': 'Doe'});=0A=
	(end)=0A=
*/=0A=
=0A=
Json.Remote =3D XHR.extend({=0A=
=0A=
	initialize: function(url, options){=0A=
		this.url =3D url;=0A=
		this.addEvent('onSuccess', this.onComplete);=0A=
		this.parent(options);=0A=
		this.setHeader('X-Request', 'JSON');=0A=
	},=0A=
=0A=
	send: function(obj){=0A=
		return this.parent(this.url, 'json=3D' + Json.toString(obj));=0A=
	},=0A=
=0A=
	onComplete: function(){=0A=
		this.fireEvent('onComplete', [Json.evaluate(this.response.text, =
this.options.secure)]);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Assets.js=0A=
	provides dynamic loading for images, css and javascript files.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
var Asset =3D new Abstract({=0A=
=0A=
	/*=0A=
	Property: javascript=0A=
		Injects a javascript file in the page.=0A=
=0A=
	Arguments:=0A=
		source - the path of the javascript file=0A=
		properties - some additional attributes you might want to add to the =
script element=0A=
=0A=
	Example:=0A=
		> new Asset.javascript('/scripts/myScript.js', {id: 'myScript'});=0A=
	*/=0A=
=0A=
	javascript: function(source, properties){=0A=
		properties =3D $merge({=0A=
			'onload': Class.empty=0A=
		}, properties);=0A=
		var script =3D new Element('script', {'src': source}).addEvents({=0A=
			'load': properties.onload,=0A=
			'readystatechange': function(){=0A=
				if (this.readyState =3D=3D 'complete') this.fireEvent('load');=0A=
			}=0A=
		});=0A=
		delete properties.onload;=0A=
		return script.setProperties(properties).inject(document.head);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: css=0A=
		Injects a css file in the page.=0A=
=0A=
	Arguments:=0A=
		source - the path of the css file=0A=
		properties - some additional attributes you might want to add to the =
link element=0A=
=0A=
	Example:=0A=
		> new Asset.css('/css/myStyle.css', {id: 'myStyle', title: 'myStyle'});=0A=
	*/=0A=
=0A=
	css: function(source, properties){=0A=
		return new Element('link', $merge({=0A=
			'rel': 'stylesheet', 'media': 'screen', 'type': 'text/css', 'href': =
source=0A=
		}, properties)).inject(document.head);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: image=0A=
		Preloads an image and returns the img element. does not inject it to =
the page.=0A=
=0A=
	Arguments:=0A=
		source - the path of the image file=0A=
		properties - some additional attributes you might want to add to the =
img element=0A=
=0A=
	Example:=0A=
		> new Asset.image('/images/myImage.png', {id: 'myImage', title: =
'myImage', onload: myFunction});=0A=
=0A=
	Returns:=0A=
		the img element. you can inject it anywhere you want with =
<Element.injectInside>/<Element.injectAfter>/<Element.injectBefore>=0A=
	*/=0A=
=0A=
	image: function(source, properties){=0A=
		properties =3D $merge({=0A=
			'onload': Class.empty,=0A=
			'onabort': Class.empty,=0A=
			'onerror': Class.empty=0A=
		}, properties);=0A=
		var image =3D new Image();=0A=
		image.src =3D source;=0A=
		var element =3D new Element('img', {'src': source});=0A=
		['load', 'abort', 'error'].each(function(type){=0A=
			var event =3D properties['on' + type];=0A=
			delete properties['on' + type];=0A=
			element.addEvent(type, function(){=0A=
				this.removeEvent(type, arguments.callee);=0A=
				event.call(this);=0A=
			});=0A=
		});=0A=
		if (image.width && image.height) element.fireEvent('load', element, 1);=0A=
		return element.setProperties(properties);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: images=0A=
		Preloads an array of images (as strings) and returns an array of img =
elements. does not inject them to the page.=0A=
=0A=
	Arguments:=0A=
		sources - array, the paths of the image files=0A=
		options - object, see below=0A=
=0A=
	Options:=0A=
		onComplete - a function to execute when all image files are loaded in =
the browser's cache=0A=
		onProgress - a function to execute when one image file is loaded in =
the browser's cache=0A=
=0A=
	Example:=0A=
		(start code)=0A=
		new Asset.images(['/images/myImage.png', '/images/myImage2.gif'], {=0A=
			onComplete: function(){=0A=
				alert('all images loaded!');=0A=
			}=0A=
		});=0A=
		(end)=0A=
=0A=
	Returns:=0A=
		the img elements as $$. you can inject them anywhere you want with =
<Element.injectInside>/<Element.injectAfter>/<Element.injectBefore>=0A=
	*/=0A=
=0A=
	images: function(sources, options){=0A=
		options =3D $merge({=0A=
			onComplete: Class.empty,=0A=
			onProgress: Class.empty=0A=
		}, options);=0A=
		if (!sources.push) sources =3D [sources];=0A=
		var images =3D [];=0A=
		var counter =3D 0;=0A=
		sources.each(function(source){=0A=
			var img =3D new Asset.image(source, {=0A=
				'onload': function(){=0A=
					options.onProgress.call(this, counter);=0A=
					counter++;=0A=
					if (counter =3D=3D sources.length) options.onComplete();=0A=
				}=0A=
			});=0A=
			images.push(img);=0A=
		});=0A=
		return new Elements(images);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*
Script: Hash.js
	Contains the class Hash.

License:
	MIT-style license.
*/

/*
Class: Hash
	It wraps an object that it uses internally as a map. The user must use =
set(), get(), and remove() to add/change, retrieve and remove values, it =
must not access the internal object directly. null/undefined values are =
allowed.

Note:
	Each hash instance has the length property.

Arguments:
	obj - an object to convert into a Hash instance.

Example:
	(start code)
	var hash =3D new Hash({a: 'hi', b: 'world', c: 'howdy'});
	hash.remove('b'); // b is removed.
	hash.set('c', 'hello');
	hash.get('c'); // returns 'hello'
	hash.length // returns 2 (a and c)
	(end)
*/

var Hash =3D new Class({

	length: 0,

	initialize: function(object){
		this.obj =3D object || {};
		this.setLength();
	},

	/*
	Property: get
		Retrieves a value from the hash.

	Arguments:
		key - The key

	Returns:
		The value
	*/

	get: function(key){
		return (this.hasKey(key)) ? this.obj[key] : null;
	},

	/*
	Property: hasKey
		Check the presence of a specified key-value pair in the hash.

	Arguments:
		key - The key

	Returns:
		True if the Hash contains a value for the specified key, otherwise =
false
	*/

	hasKey: function(key){
		return (key in this.obj);
	},

	/*
	Property: set
		Adds a key-value pair to the hash or replaces a previous value =
associated with the key.

	Arguments:
		key - The key
		value - The value
	*/

	set: function(key, value){
		if (!this.hasKey(key)) this.length++;
		this.obj[key] =3D value;
		return this;
	},

	setLength: function(){
		this.length =3D 0;
		for (var p in this.obj) this.length++;
		return this;
	},

	/*
	Property: remove
		Removes a key-value pair from the hash.

	Arguments:
		key - The key
	*/

	remove: function(key){
		if (this.hasKey(key)){
			delete this.obj[key];
			this.length--;
		}
		return this;
	},

	/*
	Property: each
		Calls a function for each key-value pair. The first argument passed to =
the function will be the value, the second one will be the key, like =
$each.

	Arguments:
		fn - The function to call for each key-value pair
		bind - Optional, the object that will be referred to as "this" in the =
function
	*/

	each: function(fn, bind){
		$each(this.obj, fn, bind);
	},

	/*
	Property: extend
		Extends the current hash with an object containing key-value pairs. =
Values for duplicate keys will be replaced by the new ones.

	Arguments:
		obj - An object containing key-value pairs
	*/

	extend: function(obj){
		$extend(this.obj, obj);
		return this.setLength();
	},

	/*
	Property: merge
		Merges the current hash with multiple objects.
	*/

	merge: function(){
		this.obj =3D $merge.apply(null, [this.obj].extend(arguments));
		return this.setLength();
	},

	/*
	Property: empty
		Empties all hash values properties and values.
	*/

	empty: function(){
		this.obj =3D {};
		this.length =3D 0;
		return this;
	},

	/*
	Property: keys
		Returns an array containing all the keys, in the same order as the =
values returned by <Hash.values>.

	Returns:
		An array containing all the keys of the hash
	*/

	keys: function(){
		var keys =3D [];
		for (var property in this.obj) keys.push(property);
		return keys;
	},

	/*
	Property: values
		Returns an array containing all the values, in the same order as the =
keys returned by <Hash.keys>.

	Returns:
		An array containing all the values of the hash
	*/

	values: function(){
		var values =3D [];
		for (var property in this.obj) values.push(this.obj[property]);
		return values;
	}

});

/* Section: Utility Functions */

/*
Function: $H
	Shortcut to create a Hash from an Object.
*/

function $H(obj){
	return new Hash(obj);
};=0A=
=0A=
/*
Script: Hash.Cookie.js
	Stores and loads an Hash as a cookie using Json format.
*/

/*
Class: Hash.Cookie
	Inherits all the methods from <Hash>, additional methods are save and =
load.
	Hash json string has a limit of 4kb (4096byte), so be careful with your =
Hash size.
	Creating a new instance automatically loads the data from the Cookie =
into the Hash.
	If the Hash is emptied, the cookie is also removed.

Arguments:
	name - the key (name) for the cookie
	options - options are identical to <Cookie> and are simply passed along =
to it.
		In addition, it has the autoSave option, to save the cookie at every =
operation. defaults to true.

Example:
	(start code)
	var fruits =3D new Hash.Cookie('myCookieName', {duration: 3600});
	fruits.extend({
		'lemon': 'yellow',
		'apple': 'red'
	});
	fruits.set('melon', 'green');
	fruits.get('lemon'); // yellow

	// ... on another page ... values load automatically

	var fruits =3D new Hash.Cookie('myCookieName', {duration: 365});
	fruits.get('melon'); // green

	fruits.erase(); // delete cookie
	(end)
*/

Hash.Cookie =3D Hash.extend({

	initialize: function(name, options){
		this.name =3D name;
		this.options =3D $extend({'autoSave': true}, options || {});
		this.load();
	},

	/*
	Property: save
		Saves the Hash to the cookie. If the hash is empty, removes the =
cookie.

	Returns:
		Returns false when the JSON string cookie is too long (4kb), otherwise =
true.

	Example:
		(start code)
		var login =3D new Hash.Cookie('userstatus', {autoSave: false});

		login.extend({
			'username': 'John',
			'credentials': [4, 7, 9]
		});
		login.set('last_message', 'User logged in!');

		login.save(); // finally save the Hash
		(end)
	*/

	save: function(){
		if (this.length =3D=3D 0){
			Cookie.remove(this.name, this.options);
			return true;
		}
		var str =3D Json.toString(this.obj);
		if (str.length > 4096) return false; //cookie would be truncated!
		Cookie.set(this.name, str, this.options);
		return true;
	},
=09
	/*
	Property: load
		Loads the cookie and assigns it to the Hash.
	*/

	load: function(){
		this.obj =3D Json.evaluate(Cookie.get(this.name), true) || {};
		this.setLength();
	}

});

Hash.Cookie.Methods =3D {};
['extend', 'set', 'merge', 'empty', 'remove'].each(function(method){
	Hash.Cookie.Methods[method] =3D function(){
		Hash.prototype[method].apply(this, arguments);
		if (this.options.autoSave) this.save();
		return this;
	};
});
Hash.Cookie.implement(Hash.Cookie.Methods);=0A=
=0A=
/*=0A=
Script: Color.js=0A=
	Contains the Color class.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Color=0A=
	Creates a new Color Object, which is an array with some color specific =
methods.=0A=
Arguments:=0A=
	color - the hex, the RGB array or the HSB array of the color to create. =
For HSB colors, you need to specify the second argument.=0A=
	type - a string representing the type of the color to create. needs to =
be specified if you intend to create the color with HSB values, or an =
array of HEX values. Can be 'rgb', 'hsb' or 'hex'.=0A=
=0A=
Example:=0A=
	(start code)=0A=
	var black =3D new Color('#000');=0A=
	var purple =3D new Color([255,0,255]);=0A=
	// mix black with white and purple, each time at 10% of the new color=0A=
	var darkpurple =3D black.mix('#fff', purple, 10);=0A=
	$('myDiv').setStyle('background-color', darkpurple);=0A=
	(end)=0A=
*/=0A=
=0A=
var Color =3D new Class({=0A=
=0A=
	initialize: function(color, type){=0A=
		type =3D type || (color.push ? 'rgb' : 'hex');=0A=
		var rgb, hsb;=0A=
		switch(type){=0A=
			case 'rgb':=0A=
				rgb =3D color;=0A=
				hsb =3D rgb.rgbToHsb();=0A=
				break;=0A=
			case 'hsb':=0A=
				rgb =3D color.hsbToRgb();=0A=
				hsb =3D color;=0A=
				break;=0A=
			default:=0A=
				rgb =3D color.hexToRgb(true);=0A=
				hsb =3D rgb.rgbToHsb();=0A=
		}=0A=
		rgb.hsb =3D hsb;=0A=
		rgb.hex =3D rgb.rgbToHex();=0A=
		return $extend(rgb, Color.prototype);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: mix=0A=
		Mixes two or more colors with the Color.=0A=
		=0A=
	Arguments:=0A=
		color - a color to mix. you can use as arguments how many colors as =
you want to mix with the original one.=0A=
		alpha - if you use a number as the last argument, it will be threated =
as the amount of the color to mix.=0A=
	*/=0A=
=0A=
	mix: function(){=0A=
		var colors =3D $A(arguments);=0A=
		var alpha =3D ($type(colors[colors.length - 1]) =3D=3D 'number') ? =
colors.pop() : 50;=0A=
		var rgb =3D this.copy();=0A=
		colors.each(function(color){=0A=
			color =3D new Color(color);=0A=
			for (var i =3D 0; i < 3; i++) rgb[i] =3D Math.round((rgb[i] / 100 * =
(100 - alpha)) + (color[i] / 100 * alpha));=0A=
		});=0A=
		return new Color(rgb, 'rgb');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: invert=0A=
		Inverts the Color.=0A=
	*/=0A=
=0A=
	invert: function(){=0A=
		return new Color(this.map(function(value){=0A=
			return 255 - value;=0A=
		}));=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setHue=0A=
		Modifies the hue of the Color, and returns a new one.=0A=
	=0A=
	Arguments:=0A=
		value - the hue to set=0A=
	*/=0A=
=0A=
	setHue: function(value){=0A=
		return new Color([value, this.hsb[1], this.hsb[2]], 'hsb');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setSaturation=0A=
		Changes the saturation of the Color, and returns a new one.=0A=
	=0A=
	Arguments:=0A=
		percent - the percentage of the saturation to set=0A=
	*/=0A=
=0A=
	setSaturation: function(percent){=0A=
		return new Color([this.hsb[0], percent, this.hsb[2]], 'hsb');=0A=
	},=0A=
=0A=
	/*=0A=
	Property: setBrightness=0A=
		Changes the brightness of the Color, and returns a new one.=0A=
	=0A=
	Arguments:=0A=
		percent - the percentage of the brightness to set=0A=
	*/=0A=
=0A=
	setBrightness: function(percent){=0A=
		return new Color([this.hsb[0], this.hsb[1], percent], 'hsb');=0A=
	}=0A=
=0A=
});=0A=
=0A=
/* Section: Utility Functions */=0A=
=0A=
/*=0A=
Function: $RGB=0A=
	Shortcut to create a new color, based on red, green, blue values.=0A=
=0A=
Arguments:=0A=
	r - (integer) red value (0-255)=0A=
	g - (integer) green value (0-255)=0A=
	b - (integer) blue value (0-255)=0A=
=0A=
*/=0A=
=0A=
function $RGB(r, g, b){=0A=
	return new Color([r, g, b], 'rgb');=0A=
};=0A=
=0A=
/*=0A=
Function: $HSB=0A=
	Shortcut to create a new color, based on hue, saturation, brightness =
values.=0A=
=0A=
Arguments:=0A=
	h - (integer) hue value (0-100)=0A=
	s - (integer) saturation value (0-100)=0A=
	b - (integer) brightness value (0-100)=0A=
*/=0A=
=0A=
function $HSB(h, s, b){=0A=
	return new Color([h, s, b], 'hsb');=0A=
};=0A=
=0A=
/*=0A=
Class: Array=0A=
	A collection of The Array Object prototype methods.=0A=
*/=0A=
=0A=
Array.extend({=0A=
	=0A=
	/*=0A=
	Property: rgbToHsb=0A=
		Converts a RGB array to an HSB array.=0A=
=0A=
	Returns:=0A=
		the HSB array.=0A=
	*/=0A=
=0A=
	rgbToHsb: function(){=0A=
		var red =3D this[0], green =3D this[1], blue =3D this[2];=0A=
		var hue, saturation, brightness;=0A=
		var max =3D Math.max(red, green, blue), min =3D Math.min(red, green, =
blue);=0A=
		var delta =3D max - min;=0A=
		brightness =3D max / 255;=0A=
		saturation =3D (max !=3D 0) ? delta / max : 0;=0A=
		if (saturation =3D=3D 0){=0A=
			hue =3D 0;=0A=
		} else {=0A=
			var rr =3D (max - red) / delta;=0A=
			var gr =3D (max - green) / delta;=0A=
			var br =3D (max - blue) / delta;=0A=
			if (red =3D=3D max) hue =3D br - gr;=0A=
			else if (green =3D=3D max) hue =3D 2 + rr - br;=0A=
			else hue =3D 4 + gr - rr;=0A=
			hue /=3D 6;=0A=
			if (hue < 0) hue++;=0A=
		}=0A=
		return [Math.round(hue * 360), Math.round(saturation * 100), =
Math.round(brightness * 100)];=0A=
	},=0A=
=0A=
	/*=0A=
	Property: hsbToRgb=0A=
		Converts an HSB array to an RGB array.=0A=
=0A=
	Returns:=0A=
		the RGB array.=0A=
	*/=0A=
=0A=
	hsbToRgb: function(){=0A=
		var br =3D Math.round(this[2] / 100 * 255);=0A=
		if (this[1] =3D=3D 0){=0A=
			return [br, br, br];=0A=
		} else {=0A=
			var hue =3D this[0] % 360;=0A=
			var f =3D hue % 60;=0A=
			var p =3D Math.round((this[2] * (100 - this[1])) / 10000 * 255);=0A=
			var q =3D Math.round((this[2] * (6000 - this[1] * f)) / 600000 * 255);=0A=
			var t =3D Math.round((this[2] * (6000 - this[1] * (60 - f))) / 600000 =
* 255);=0A=
			switch(Math.floor(hue / 60)){=0A=
				case 0: return [br, t, p];=0A=
				case 1: return [q, br, p];=0A=
				case 2: return [p, br, t];=0A=
				case 3: return [p, q, br];=0A=
				case 4: return [t, p, br];=0A=
				case 5: return [br, p, q];=0A=
			}=0A=
		}=0A=
		return false;=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Scroller.js=0A=
	Contains the <Scroller>.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Scroller=0A=
	The Scroller is a class to scroll any element with an overflow =
(including the window) when the mouse cursor reaches certain buondaries =
of that element.=0A=
	You must call its start method to start listening to mouse movements.=0A=
=0A=
Note:=0A=
	The Scroller requires an XHTML doctype.=0A=
=0A=
Arguments:=0A=
	element - required, the element to scroll.=0A=
	options - optional, see options below, and <Fx.Base> options.=0A=
=0A=
Options:=0A=
	area - integer, the necessary boundaries to make the element scroll.=0A=
	velocity - integer, velocity ratio, the modifier for the window =
scrolling speed.=0A=
=0A=
Events:=0A=
	onChange - optionally, when the mouse reaches some boundaries, you can =
choose to alter some other values, instead of the scrolling offsets.=0A=
		Automatically passes as parameters x and y values.=0A=
*/=0A=
=0A=
var Scroller =3D new Class({=0A=
=0A=
	options: {=0A=
		area: 20,=0A=
		velocity: 1,=0A=
		onChange: function(x, y){=0A=
			this.element.scrollTo(x, y);=0A=
		}=0A=
	},=0A=
=0A=
	initialize: function(element, options){=0A=
		this.setOptions(options);=0A=
		this.element =3D $(element);=0A=
		this.mousemover =3D ([window, document].contains(element)) ? =
$(document.body) : this.element;=0A=
	},=0A=
=0A=
	/*=0A=
	Property: start=0A=
		The scroller starts listening to mouse movements.=0A=
	*/=0A=
=0A=
	start: function(){=0A=
		this.coord =3D this.getCoords.bindWithEvent(this);=0A=
		this.mousemover.addListener('mousemove', this.coord);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: stop=0A=
		The scroller stops listening to mouse movements.=0A=
	*/=0A=
=0A=
	stop: function(){=0A=
		this.mousemover.removeListener('mousemove', this.coord);=0A=
		this.timer =3D $clear(this.timer);=0A=
	},=0A=
=0A=
	getCoords: function(event){=0A=
		this.page =3D (this.element =3D=3D window) ? event.client : event.page;=0A=
		if (!this.timer) this.timer =3D this.scroll.periodical(50, this);=0A=
	},=0A=
=0A=
	scroll: function(){=0A=
		var el =3D this.element.getSize();=0A=
		var pos =3D this.element.getPosition();=0A=
=0A=
		var change =3D {'x': 0, 'y': 0};=0A=
		for (var z in this.page){=0A=
			if (this.page[z] < (this.options.area + pos[z]) && el.scroll[z] !=3D =
0)=0A=
				change[z] =3D (this.page[z] - this.options.area - pos[z]) * =
this.options.velocity;=0A=
			else if (this.page[z] + this.options.area > (el.size[z] + pos[z]) && =
el.scroll[z] + el.size[z] !=3D el.scrollSize[z])=0A=
				change[z] =3D (this.page[z] - el.size[z] + this.options.area - =
pos[z]) * this.options.velocity;=0A=
		}=0A=
		if (change.y || change.x) this.fireEvent('onChange', [el.scroll.x + =
change.x, el.scroll.y + change.y]);=0A=
	}=0A=
=0A=
});=0A=
=0A=
Scroller.implement(new Events, new Options);=0A=
=0A=
/*=0A=
Script: Slider.js=0A=
	Contains <Slider>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Slider=0A=
	Creates a slider with two elements: a knob and a container. Returns the =
values.=0A=
	=0A=
Note:=0A=
	The Slider requires an XHTML doctype.=0A=
=0A=
Arguments:=0A=
	element - the knob container=0A=
	knob - the handle=0A=
	options - see Options below=0A=
=0A=
Options:=0A=
	steps - the number of steps for your slider.=0A=
	mode - either 'horizontal' or 'vertical'. defaults to horizontal.=0A=
	offset - relative offset for knob position. default to 0.=0A=
	=0A=
Events:=0A=
	onChange - a function to fire when the value changes.=0A=
	onComplete - a function to fire when you're done dragging.=0A=
	onTick - optionally, you can alter the onTick behavior, for example =
displaying an effect of the knob moving to the desired position.=0A=
		Passes as parameter the new position.=0A=
*/=0A=
=0A=
var Slider =3D new Class({=0A=
=0A=
	options: {=0A=
		onChange: Class.empty,=0A=
		onComplete: Class.empty,=0A=
		onTick: function(pos){=0A=
			this.knob.setStyle(this.p, pos);=0A=
		},=0A=
		mode: 'horizontal',=0A=
		steps: 100,=0A=
		offset: 0=0A=
	},=0A=
=0A=
	initialize: function(el, knob, options){=0A=
		this.element =3D $(el);=0A=
		this.knob =3D $(knob);=0A=
		this.setOptions(options);=0A=
		this.previousChange =3D -1;=0A=
		this.previousEnd =3D -1;=0A=
		this.step =3D -1;=0A=
		this.element.addEvent('mousedown', =
this.clickedElement.bindWithEvent(this));=0A=
		var mod, offset;=0A=
		switch(this.options.mode){=0A=
			case 'horizontal':=0A=
				this.z =3D 'x';=0A=
				this.p =3D 'left';=0A=
				mod =3D {'x': 'left', 'y': false};=0A=
				offset =3D 'offsetWidth';=0A=
				break;=0A=
			case 'vertical':=0A=
				this.z =3D 'y';=0A=
				this.p =3D 'top';=0A=
				mod =3D {'x': false, 'y': 'top'};=0A=
				offset =3D 'offsetHeight';=0A=
		}=0A=
		this.max =3D this.element[offset] - this.knob[offset] + =
(this.options.offset * 2);=0A=
		this.half =3D this.knob[offset]/2;=0A=
		this.getPos =3D this.element['get' + =
this.p.capitalize()].bind(this.element);=0A=
		this.knob.setStyle('position', 'relative').setStyle(this.p, - =
this.options.offset);=0A=
		var lim =3D {};=0A=
		lim[this.z] =3D [- this.options.offset, this.max - =
this.options.offset];=0A=
		this.drag =3D new Drag.Base(this.knob, {=0A=
			limit: lim,=0A=
			modifiers: mod,=0A=
			snap: 0,=0A=
			onStart: function(){=0A=
				this.draggedKnob();=0A=
			}.bind(this),=0A=
			onDrag: function(){=0A=
				this.draggedKnob();=0A=
			}.bind(this),=0A=
			onComplete: function(){=0A=
				this.draggedKnob();=0A=
				this.end();=0A=
			}.bind(this)=0A=
		});=0A=
		if (this.options.initialize) this.options.initialize.call(this);=0A=
	},=0A=
=0A=
	/*=0A=
	Property: set=0A=
		The slider will get the step you pass.=0A=
=0A=
	Arguments:=0A=
		step - one integer=0A=
	*/=0A=
=0A=
	set: function(step){=0A=
		this.step =3D step.limit(0, this.options.steps);=0A=
		this.checkStep();=0A=
		this.end();=0A=
		this.fireEvent('onTick', this.toPosition(this.step));=0A=
		return this;=0A=
	},=0A=
=0A=
	clickedElement: function(event){=0A=
		var position =3D event.page[this.z] - this.getPos() - this.half;=0A=
		position =3D position.limit(-this.options.offset, this.max =
-this.options.offset);=0A=
		this.step =3D this.toStep(position);=0A=
		this.checkStep();=0A=
		this.end();=0A=
		this.fireEvent('onTick', position);=0A=
	},=0A=
=0A=
	draggedKnob: function(){=0A=
		this.step =3D this.toStep(this.drag.value.now[this.z]);=0A=
		this.checkStep();=0A=
	},=0A=
=0A=
	checkStep: function(){=0A=
		if (this.previousChange !=3D this.step){=0A=
			this.previousChange =3D this.step;=0A=
			this.fireEvent('onChange', this.step);=0A=
		}=0A=
	},=0A=
=0A=
	end: function(){=0A=
		if (this.previousEnd !=3D=3D this.step){=0A=
			this.previousEnd =3D this.step;=0A=
			this.fireEvent('onComplete', this.step + '');=0A=
		}=0A=
	},=0A=
=0A=
	toStep: function(position){=0A=
		return Math.round((position + this.options.offset) / this.max * =
this.options.steps);=0A=
	},=0A=
=0A=
	toPosition: function(step){=0A=
		return this.max * step / this.options.steps;=0A=
	}=0A=
=0A=
});=0A=
=0A=
Slider.implement(new Events);=0A=
Slider.implement(new Options);=0A=
=0A=
/*=0A=
Script: SmoothScroll.js=0A=
	Contains <SmoothScroll>=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: SmoothScroll=0A=
	Auto targets all the anchors in a page and display a smooth scrolling =
effect upon clicking them.=0A=
	Inherits methods, properties, options and events from <Fx.Scroll>.=0A=
=0A=
Note:=0A=
	SmoothScroll requires an XHTML doctype.=0A=
=0A=
Arguments:=0A=
	options - the Fx.Scroll options (see: <Fx.Scroll>) plus links, a =
collection of elements you want your smoothscroll on. Defaults to =
document.links.=0A=
=0A=
Example:=0A=
	>new SmoothScroll();=0A=
*/=0A=
=0A=
var SmoothScroll =3D Fx.Scroll.extend({=0A=
=0A=
	initialize: function(options){=0A=
		this.parent(window, options);=0A=
		this.links =3D (this.options.links) ? $$(this.options.links) : =
$$(document.links);=0A=
		var location =3D window.location.href.match(/^[^#]*/)[0] + '#';=0A=
		this.links.each(function(link){=0A=
			if (link.href.indexOf(location) !=3D 0) return;=0A=
			var anchor =3D link.href.substr(location.length);=0A=
			if (anchor && $(anchor)) this.useLink(link, anchor);=0A=
		}, this);=0A=
		if (!window.webkit419) this.addEvent('onComplete', function(){=0A=
			window.location.hash =3D this.anchor;=0A=
		});=0A=
	},=0A=
=0A=
	useLink: function(link, anchor){=0A=
		link.addEvent('click', function(event){=0A=
			this.anchor =3D anchor;=0A=
			this.toElement(anchor);=0A=
			event.stop();=0A=
		}.bindWithEvent(this));=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*=0A=
Script: Sortables.js=0A=
	Contains <Sortables> Class.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Sortables=0A=
	Creates an interface for <Drag.Base> and drop, resorting of a list.=0A=
=0A=
Note:=0A=
	The Sortables require an XHTML doctype.=0A=
=0A=
Arguments:=0A=
	list - required, the list that will become sortable.=0A=
	options - an Object, see options below.=0A=
=0A=
Options:=0A=
	handles - a collection of elements to be used for drag handles. =
defaults to the elements.=0A=
	=0A=
Events:=0A=
	onStart - function executed when the item starts dragging=0A=
	onComplete - function executed when the item ends dragging=0A=
*/=0A=
=0A=
var Sortables =3D new Class({=0A=
=0A=
	options: {=0A=
		handles: false,=0A=
		onStart: Class.empty,=0A=
		onComplete: Class.empty,=0A=
		ghost: true,=0A=
		snap: 3,=0A=
		onDragStart: function(element, ghost){=0A=
			ghost.setStyle('opacity', 0.7);=0A=
			element.setStyle('opacity', 0.7);=0A=
		},=0A=
		onDragComplete: function(element, ghost){=0A=
			element.setStyle('opacity', 1);=0A=
			ghost.remove();=0A=
			this.trash.remove();=0A=
		}=0A=
	},=0A=
=0A=
	initialize: function(list, options){=0A=
		this.setOptions(options);=0A=
		this.list =3D $(list);=0A=
		this.elements =3D this.list.getChildren();=0A=
		this.handles =3D (this.options.handles) ? $$(this.options.handles) : =
this.elements;=0A=
		this.bound =3D {=0A=
			'start': [],=0A=
			'moveGhost': this.moveGhost.bindWithEvent(this)=0A=
		};=0A=
		for (var i =3D 0, l =3D this.handles.length; i < l; i++){=0A=
			this.bound.start[i] =3D this.start.bindWithEvent(this, =
this.elements[i]);=0A=
		}=0A=
		this.attach();=0A=
		if (this.options.initialize) this.options.initialize.call(this);=0A=
		this.bound.move =3D this.move.bindWithEvent(this);=0A=
		this.bound.end =3D this.end.bind(this);=0A=
	},=0A=
=0A=
	attach: function(){=0A=
		this.handles.each(function(handle, i){=0A=
			handle.addEvent('mousedown', this.bound.start[i]);=0A=
		}, this);=0A=
	},=0A=
=0A=
	detach: function(){=0A=
		this.handles.each(function(handle, i){=0A=
			handle.removeEvent('mousedown', this.bound.start[i]);=0A=
		}, this);=0A=
	},=0A=
=0A=
	start: function(event, el){=0A=
		this.active =3D el;=0A=
		this.coordinates =3D this.list.getCoordinates();=0A=
		if (this.options.ghost){=0A=
			var position =3D el.getPosition();=0A=
			this.offset =3D event.page.y - position.y;=0A=
			this.trash =3D new Element('div').inject(document.body);=0A=
			this.ghost =3D el.clone().inject(this.trash).setStyles({=0A=
				'position': 'absolute',=0A=
				'left': position.x,=0A=
				'top': event.page.y - this.offset=0A=
			});=0A=
			document.addListener('mousemove', this.bound.moveGhost);=0A=
			this.fireEvent('onDragStart', [el, this.ghost]);=0A=
		}=0A=
		document.addListener('mousemove', this.bound.move);=0A=
		document.addListener('mouseup', this.bound.end);=0A=
		this.fireEvent('onStart', el);=0A=
		event.stop();=0A=
	},=0A=
=0A=
	moveGhost: function(event){=0A=
		var value =3D event.page.y - this.offset;=0A=
		value =3D value.limit(this.coordinates.top, this.coordinates.bottom - =
this.ghost.offsetHeight);=0A=
		this.ghost.setStyle('top', value);=0A=
		event.stop();=0A=
	},=0A=
=0A=
	move: function(event){=0A=
		var now =3D event.page.y;=0A=
		this.previous =3D this.previous || now;=0A=
		var up =3D ((this.previous - now) > 0);=0A=
		var prev =3D this.active.getPrevious();=0A=
		var next =3D this.active.getNext();=0A=
		if (prev && up && now < prev.getCoordinates().bottom) =
this.active.injectBefore(prev);=0A=
		if (next && !up && now > next.getCoordinates().top) =
this.active.injectAfter(next);=0A=
		this.previous =3D now;=0A=
	},=0A=
=0A=
	serialize: function(converter){=0A=
		return this.list.getChildren().map(converter || function(el){=0A=
			return this.elements.indexOf(el);=0A=
		}, this);=0A=
	},=0A=
=0A=
	end: function(){=0A=
		this.previous =3D null;=0A=
		document.removeListener('mousemove', this.bound.move);=0A=
		document.removeListener('mouseup', this.bound.end);=0A=
		if (this.options.ghost){=0A=
			document.removeListener('mousemove', this.bound.moveGhost);=0A=
			this.fireEvent('onDragComplete', [this.active, this.ghost]);=0A=
		}=0A=
		this.fireEvent('onComplete', this.active);=0A=
	}=0A=
=0A=
});=0A=
=0A=
Sortables.implement(new Events, new Options);=0A=
=0A=
/*=0A=
Script: Tips.js=0A=
	Tooltips, BubbleTips, whatever they are, they will appear on mouseover=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
=0A=
Credits:=0A=
	The idea behind Tips.js is based on Bubble Tooltips =
(<http://web-graphics.com/mtarchive/001717.php>) by Alessandro =
Fulcitiniti <http://web-graphics.com>=0A=
*/=0A=
=0A=
/*=0A=
Class: Tips=0A=
	Display a tip on any element with a title and/or href.=0A=
=0A=
Note:=0A=
	Tips requires an XHTML doctype.=0A=
=0A=
Arguments:=0A=
	elements - a collection of elements to apply the tooltips to on =
mouseover.=0A=
	options - an object. See options Below.=0A=
=0A=
Options:=0A=
	maxTitleChars - the maximum number of characters to display in the =
title of the tip. defaults to 30.=0A=
	showDelay - the delay the onShow method is called. (defaults to 100 ms)=0A=
	hideDelay - the delay the onHide method is called. (defaults to 100 ms)=0A=
=0A=
	className - the prefix for your tooltip classNames. defaults to 'tool'.=0A=
=0A=
		the whole tooltip will have as classname: tool-tip=0A=
=0A=
		the title will have as classname: tool-title=0A=
=0A=
		the text will have as classname: tool-text=0A=
=0A=
	offsets - the distance of your tooltip from the mouse. an Object with =
x/y properties.=0A=
	fixed - if set to true, the toolTip will not follow the mouse.=0A=
	=0A=
Events:=0A=
	onShow - optionally you can alter the default onShow behaviour with =
this option (like displaying a fade in effect);=0A=
	onHide - optionally you can alter the default onHide behaviour with =
this option (like displaying a fade out effect);=0A=
=0A=
Example:=0A=
	(start code)=0A=
	<img src=3D"/images/i.png" title=3D"The body of the tooltip is stored =
in the title" class=3D"toolTipImg"/>=0A=
	<script>=0A=
		var myTips =3D new Tips($$('.toolTipImg'), {=0A=
			maxTitleChars: 50	//I like my captions a little long=0A=
		});=0A=
	</script>=0A=
	(end)=0A=
=0A=
Note:=0A=
	The title of the element will always be used as the tooltip body. If =
you put :: on your title, the text before :: will become the tooltip =
title.=0A=
*/=0A=
=0A=
var Tips =3D new Class({=0A=
=0A=
	options: {=0A=
		onShow: function(tip){=0A=
			tip.setStyle('visibility', 'visible');=0A=
		},=0A=
		onHide: function(tip){=0A=
			tip.setStyle('visibility', 'hidden');=0A=
		},=0A=
		maxTitleChars: 30,=0A=
		showDelay: 100,=0A=
		hideDelay: 100,=0A=
		className: 'tool',=0A=
		offsets: {'x': 16, 'y': 16},=0A=
		fixed: false=0A=
	},=0A=
=0A=
	initialize: function(elements, options){=0A=
		this.setOptions(options);=0A=
		this.toolTip =3D new Element('div', {=0A=
			'class': this.options.className + '-tip',=0A=
			'styles': {=0A=
				'position': 'absolute',=0A=
				'top': '0',=0A=
				'left': '0',=0A=
				'visibility': 'hidden'=0A=
			}=0A=
		}).inject(document.body);=0A=
		this.wrapper =3D new Element('div').inject(this.toolTip);=0A=
		$$(elements).each(this.build, this);=0A=
		if (this.options.initialize) this.options.initialize.call(this);=0A=
	},=0A=
=0A=
	build: function(el){=0A=
		el.$tmp.myTitle =3D (el.href && el.getTag() =3D=3D 'a') ? =
el.href.replace('http://', '') : (el.rel || false);=0A=
		if (el.title){=0A=
			var dual =3D el.title.split('::');=0A=
			if (dual.length > 1){=0A=
				el.$tmp.myTitle =3D dual[0].trim();=0A=
				el.$tmp.myText =3D dual[1].trim();=0A=
			} else {=0A=
				el.$tmp.myText =3D el.title;=0A=
			}=0A=
			el.removeAttribute('title');=0A=
		} else {=0A=
			el.$tmp.myText =3D false;=0A=
		}=0A=
		if (el.$tmp.myTitle && el.$tmp.myTitle.length > =
this.options.maxTitleChars) el.$tmp.myTitle =3D =
el.$tmp.myTitle.substr(0, this.options.maxTitleChars - 1) + "&hellip;";=0A=
		el.addEvent('mouseenter', function(event){=0A=
			this.start(el);=0A=
			if (!this.options.fixed) this.locate(event);=0A=
			else this.position(el);=0A=
		}.bind(this));=0A=
		if (!this.options.fixed) el.addEvent('mousemove', =
this.locate.bindWithEvent(this));=0A=
		var end =3D this.end.bind(this);=0A=
		el.addEvent('mouseleave', end);=0A=
		el.addEvent('trash', end);=0A=
	},=0A=
=0A=
	start: function(el){=0A=
		this.wrapper.empty();=0A=
		if (el.$tmp.myTitle){=0A=
			this.title =3D new Element('span').inject(new Element('div', =
{'class': this.options.className + =
'-title'}).inject(this.wrapper)).setHTML(el.$tmp.myTitle);=0A=
		}=0A=
		if (el.$tmp.myText){=0A=
			this.text =3D new Element('span').inject(new Element('div', {'class': =
this.options.className + =
'-text'}).inject(this.wrapper)).setHTML(el.$tmp.myText);=0A=
		}=0A=
		$clear(this.timer);=0A=
		this.timer =3D this.show.delay(this.options.showDelay, this);=0A=
	},=0A=
=0A=
	end: function(event){=0A=
		$clear(this.timer);=0A=
		this.timer =3D this.hide.delay(this.options.hideDelay, this);=0A=
	},=0A=
=0A=
	position: function(element){=0A=
		var pos =3D element.getPosition();=0A=
		this.toolTip.setStyles({=0A=
			'left': pos.x + this.options.offsets.x,=0A=
			'top': pos.y + this.options.offsets.y=0A=
		});=0A=
	},=0A=
=0A=
	locate: function(event){=0A=
		var win =3D {'x': window.getWidth(), 'y': window.getHeight()};=0A=
		var scroll =3D {'x': window.getScrollLeft(), 'y': =
window.getScrollTop()};=0A=
		var tip =3D {'x': this.toolTip.offsetWidth, 'y': =
this.toolTip.offsetHeight};=0A=
		var prop =3D {'x': 'left', 'y': 'top'};=0A=
		for (var z in prop){=0A=
			var pos =3D event.page[z] + this.options.offsets[z];=0A=
			if ((pos + tip[z] - scroll[z]) > win[z]) pos =3D event.page[z] - =
this.options.offsets[z] - tip[z];=0A=
			this.toolTip.setStyle(prop[z], pos);=0A=
		};=0A=
	},=0A=
=0A=
	show: function(){=0A=
		if (this.options.timeout) this.timer =3D =
this.hide.delay(this.options.timeout, this);=0A=
		this.fireEvent('onShow', [this.toolTip]);=0A=
	},=0A=
=0A=
	hide: function(){=0A=
		this.fireEvent('onHide', [this.toolTip]);=0A=
	}=0A=
=0A=
});=0A=
=0A=
Tips.implement(new Events, new Options);=0A=
=0A=
/*=0A=
Script: Group.js=0A=
	For Grouping Classes or Elements Events. The Event added to the Group =
will fire when all of the events of the items of the group are fired.=0A=
=0A=
License:=0A=
	MIT-style license.=0A=
*/=0A=
=0A=
/*=0A=
Class: Group=0A=
	An "Utility" Class.=0A=
=0A=
Arguments:=0A=
	List of Class instances=0A=
=0A=
Example:=0A=
	(start code)=0A=
	xhr1 =3D new Ajax('data.js', {evalScript: true});=0A=
	xhr2 =3D new Ajax('abstraction.js', {evalScript: true});=0A=
	xhr3 =3D new Ajax('template.js', {evalScript: true});=0A=
=0A=
	var group =3D new Group(xhr1, xhr2, xhr3);=0A=
	group.addEvent('onComplete', function(){=0A=
		alert('All Scripts loaded');=0A=
	});=0A=
=0A=
	xhr1.request();=0A=
	xhr2.request();=0A=
	xhr3.request();=0A=
	(end)=0A=
=0A=
*/=0A=
=0A=
var Group =3D new Class({=0A=
=0A=
	initialize: function(){=0A=
		this.instances =3D $A(arguments);=0A=
		this.events =3D {};=0A=
		this.checker =3D {};=0A=
	},=0A=
=0A=
	/*=0A=
	Property: addEvent=0A=
		adds an event to the stack of events of the Class instances.=0A=
=0A=
	Arguments:=0A=
		type - string; the event name (e.g. 'onComplete')=0A=
		fn - function to execute when all instances fired this event=0A=
	*/=0A=
=0A=
	addEvent: function(type, fn){=0A=
		this.checker[type] =3D this.checker[type] || {};=0A=
		this.events[type] =3D this.events[type] || [];=0A=
		if (this.events[type].contains(fn)) return false;=0A=
		else this.events[type].push(fn);=0A=
		this.instances.each(function(instance, i){=0A=
			instance.addEvent(type, this.check.bind(this, [type, instance, i]));=0A=
		}, this);=0A=
		return this;=0A=
	},=0A=
=0A=
	check: function(type, instance, i){=0A=
		this.checker[type][i] =3D true;=0A=
		var every =3D this.instances.every(function(current, j){=0A=
			return this.checker[type][j] || false;=0A=
		}, this);=0A=
		if (!every) return;=0A=
		this.checker[type] =3D {};=0A=
		this.events[type].each(function(event){=0A=
			event.call(this, this.instances, instance);=0A=
		}, this);=0A=
	}=0A=
=0A=
});=0A=
=0A=
/*
Script: Accordion.js
	Contains <Accordion>

License:
	MIT-style license.
*/

/*
Class: Accordion
	The Accordion class creates a group of elements that are toggled when =
their handles are clicked. When one elements toggles in, the others =
toggles back.
	Inherits methods, properties, options and events from <Fx.Elements>.
=09
Note:
	The Accordion requires an XHTML doctype.

Arguments:
	togglers - required, a collection of elements, the elements handlers =
that will be clickable.
	elements - required, a collection of elements the transitions will be =
applied to.
	options - optional, see options below, and <Fx.Base> options and =
events.

Options:
	show - integer, the Index of the element to show at start.
	display - integer, the Index of the element to show at start (with a =
transition). defaults to 0.
	fixedHeight - integer, if you want the elements to have a fixed height. =
defaults to false.
	fixedWidth - integer, if you want the elements to have a fixed width. =
defaults to false.
	height - boolean, will add a height transition to the accordion if =
true. defaults to true.
	opacity - boolean, will add an opacity transition to the accordion if =
true. defaults to true.
	width - boolean, will add a width transition to the accordion if true. =
defaults to false, css mastery is required to make this work!
	alwaysHide - boolean, will allow to hide all elements if true, instead =
of always keeping one element shown. defaults to false.
=09
Events:
	onActive - function to execute when an element starts to show
	onBackground - function to execute when an element starts to hide
*/

var Accordion =3D Fx.Elements.extend({

	options: {
		onActive: Class.empty,
		onBackground: Class.empty,
		display: 0,
		show: false,
		height: true,
		width: false,
		opacity: true,
		fixedHeight: false,
		fixedWidth: false,
		wait: false,
		alwaysHide: false
	},

	initialize: function(){
		var options, togglers, elements, container;
		$each(arguments, function(argument, i){
			switch($type(argument)){
				case 'object': options =3D argument; break;
				case 'element': container =3D $(argument); break;
				default:
					var temp =3D $$(argument);
					if (!togglers) togglers =3D temp;
					else elements =3D temp;
			}
		});
		this.togglers =3D togglers || [];
		this.elements =3D elements || [];
		this.container =3D $(container);
		this.setOptions(options);
		this.previous =3D -1;
		if (this.options.alwaysHide) this.options.wait =3D true;
		if ($chk(this.options.show)){
			this.options.display =3D false;
			this.previous =3D this.options.show;
		}
		if (this.options.start){
			this.options.display =3D false;
			this.options.show =3D false;
		}
		this.effects =3D {};
		if (this.options.opacity) this.effects.opacity =3D 'fullOpacity';
		if (this.options.width) this.effects.width =3D this.options.fixedWidth =
? 'fullWidth' : 'offsetWidth';
		if (this.options.height) this.effects.height =3D =
this.options.fixedHeight ? 'fullHeight' : 'scrollHeight';
		for (var i =3D 0, l =3D this.togglers.length; i < l; i++) =
this.addSection(this.togglers[i], this.elements[i]);
		this.elements.each(function(el, i){
			if (this.options.show =3D=3D=3D i){
				this.fireEvent('onActive', [this.togglers[i], el]);
			} else {
				for (var fx in this.effects) el.setStyle(fx, 0);
			}
		}, this);
		this.parent(this.elements);
		if ($chk(this.options.display)) this.display(this.options.display);
	},

	/*
	Property: addSection
		Dynamically adds a new section into the accordion at the specified =
position.

	Arguments:
		toggler - (dom element) the element that toggles the accordion section =
open.
		element - (dom element) the element that stretches open when the =
toggler is clicked.
		pos - (integer) the index where these objects are to be inserted =
within the accordion.
	*/

	addSection: function(toggler, element, pos){
		toggler =3D $(toggler);
		element =3D $(element);
		var test =3D this.togglers.contains(toggler);
		var len =3D this.togglers.length;
		this.togglers.include(toggler);
		this.elements.include(element);
		if (len && (!test || pos)){
			pos =3D $pick(pos, len - 1);
			toggler.injectBefore(this.togglers[pos]);
			element.injectAfter(toggler);
		} else if (this.container && !test){
			toggler.inject(this.container);
			element.inject(this.container);
		}
		var idx =3D this.togglers.indexOf(toggler);
		toggler.addEvent('click', this.display.bind(this, idx));
		if (this.options.height) element.setStyles({'padding-top': 0, =
'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'});
		if (this.options.width) element.setStyles({'padding-left': 0, =
'border-left': 'none', 'padding-right': 0, 'border-right': 'none'});
		element.fullOpacity =3D 1;
		if (this.options.fixedWidth) element.fullWidth =3D =
this.options.fixedWidth;
		if (this.options.fixedHeight) element.fullHeight =3D =
this.options.fixedHeight;
		element.setStyle('overflow', 'hidden');
		if (!test){
			for (var fx in this.effects) element.setStyle(fx, 0);
		}
		return this;
	},

	/*
	Property: display
		Shows a specific section and hides all others. Useful when triggering =
an accordion from outside.

	Arguments:
		index - integer, the index of the item to show, or the actual element =
to show.
	*/

	display: function(index){
		index =3D ($type(index) =3D=3D 'element') ? =
this.elements.indexOf(index) : index;
		if ((this.timer && this.options.wait) || (index =3D=3D=3D =
this.previous && !this.options.alwaysHide)) return this;
		this.previous =3D index;
		var obj =3D {};
		this.elements.each(function(el, i){
			obj[i] =3D {};
			var hide =3D (i !=3D index) || (this.options.alwaysHide && =
(el.offsetHeight > 0));
			this.fireEvent(hide ? 'onBackground' : 'onActive', [this.togglers[i], =
el]);
			for (var fx in this.effects) obj[i][fx] =3D hide ? 0 : =
el[this.effects[fx]];
		}, this);
		return this.start(obj);
	},

	showThisHideOpen: function(index){return this.display(index);}

});

Fx.Accordion =3D Accordion;=0A=

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/js/mootabs.js

var mootabs =3D new Class({=0A=
	=0A=
	initialize: function(element, options) {=0A=
		this.options =3D Object.extend({=0A=
			width:				'300px',=0A=
			height:				'200px',=0A=
			changeTransition:	Fx.Transitions.Bounce.easeOut,=0A=
			duration:			1000,=0A=
			mouseOverClass:		'active',=0A=
			activateOnLoad:		'first',=0A=
			useAjax: 			false,=0A=
			ajaxUrl: 			'',=0A=
			ajaxOptions: 		{method:'get'},=0A=
			ajaxLoadingText: 	'Loading...'=0A=
		}, options || {});=0A=
		=0A=
		this.el =3D $(element);=0A=
		this.elid =3D element;=0A=
		=0A=
		this.el.setStyles({=0A=
			height: this.options.height,=0A=
			width: this.options.width=0A=
		});=0A=
		=0A=
		this.titles =3D $$('#' + this.elid + ' ul.mootabs_title li');=0A=
		this.panelHeight =3D this.el.getSize().size.y - =
(this.titles[0].getSize().size.y + 4);=0A=
		this.panels =3D $$('#' + this.elid + ' .mootabs_panel');=0A=
=0A=
		=0A=
		//this.panels.setStyle('height', this.panelHeight);=0A=
		=0A=
		this.titles.each(function(item) {=0A=
			item.addEvent('click', function(){=0A=
					item.removeClass(this.options.mouseOverClass);=0A=
					this.activate(item);=0A=
				}.bind(this)=0A=
			);=0A=
			=0A=
			item.addEvent('mouseover', function() {=0A=
				if(item !=3D this.activeTitle)=0A=
				{=0A=
					item.addClass(this.options.mouseOverClass);=0A=
				}=0A=
			}.bind(this));=0A=
			=0A=
			item.addEvent('mouseout', function() {=0A=
				if(item !=3D this.activeTitle)=0A=
				{=0A=
					item.removeClass(this.options.mouseOverClass);=0A=
				}=0A=
			}.bind(this));=0A=
		}.bind(this));=0A=
		=0A=
		=0A=
		if(this.options.activateOnLoad !=3D 'none')=0A=
		{=0A=
			if(this.options.activateOnLoad =3D=3D 'first')=0A=
			{=0A=
				this.activate(this.titles[0], true);=0A=
			}=0A=
			else=0A=
			{=0A=
				this.activate(this.options.activateOnLoad, true);	=0A=
			}=0A=
		}=0A=
	},=0A=
	=0A=
	activate: function(tab, skipAnim){=0A=
		if(! $defined(skipAnim))=0A=
		{=0A=
			skipAnim =3D false;=0A=
		}=0A=
		if($type(tab) =3D=3D 'string') =0A=
		{=0A=
			myTab =3D $$('#' + this.elid + ' ul li').filterByAttribute('title', =
'=3D', tab)[0];=0A=
			tab =3D myTab;=0A=
		}=0A=
		=0A=
		if($type(tab) =3D=3D 'element')=0A=
		{=0A=
			var newTab =3D tab.getProperty('title');=0A=
			this.panels.removeClass('active');=0A=
			=0A=
			// Begin auto scroll=0A=
			this.panels.setStyle("display", "none");=0A=
			// End auto scroll=0A=
			=0A=
			this.activePanel =3D this.panels.filterById(newTab)[0];=0A=
			=0A=
			this.activePanel.addClass('active');=0A=
			=0A=
			// Begin auto scroll=0A=
			this.activePanel.setStyle("display", "block");=0A=
			this.el.setStyle("height", this.activePanel.getSize().size.y+80);=0A=
			// End auto scroll=0A=
			=0A=
			if(this.options.changeTransition !=3D 'none' && skipAnim=3D=3Dfalse)=0A=
			{=0A=
				//this.panels.filterById(newTab).setStyle('height', 0);=0A=
				// Begin auto scroll=0A=
				this.panels.filterById(newTab).setStyle('opacity', 0);=0A=
				// End auto scroll=0A=
				=0A=
				var changeEffect =3D new Fx.Elements(this.panels.filterById(newTab), =
{duration: this.options.duration, transition: =
this.options.changeTransition});=0A=
				/*changeEffect.start({=0A=
					'0': {=0A=
						'height': [0, this.panelHeight]=0A=
					}=0A=
				});*/=0A=
				// Begin auto scroll=0A=
				changeEffect.start({=0A=
                    '0': {=0A=
                        'opacity': [0, 1]=0A=
                    }=0A=
                });=0A=
				// End auto scroll=0A=
			}=0A=
			=0A=
			this.titles.removeClass('active');=0A=
			=0A=
			tab.addClass('active');=0A=
			=0A=
			this.activeTitle =3D tab;=0A=
			=0A=
			if(this.options.useAjax)=0A=
			{=0A=
				this._getContent();=0A=
			}=0A=
		}=0A=
	},=0A=
	=0A=
	_getContent: function(){=0A=
		this.activePanel.setHTML(this.options.ajaxLoadingText);=0A=
		var newOptions =3D {update: this.activePanel.getProperty('id')};=0A=
		this.options.ajaxOptions =3D Object.extend(this.options.ajaxOptions, =
newOptions || {});=0A=
		var tabRequest =3D new Ajax(this.options.ajaxUrl + '?tab=3D' + =
this.activeTitle.getProperty('title'), this.options.ajaxOptions);=0A=
		tabRequest.request();=0A=
	},=0A=
	=0A=
	addTab: function(title, label, content){=0A=
		//the new title=0A=
		var newTitle =3D new Element('li', {=0A=
			'title': title=0A=
		});=0A=
		newTitle.appendText(label);=0A=
		this.titles.include(newTitle);=0A=
		$$('#' + this.elid + ' ul').adopt(newTitle);=0A=
		newTitle.addEvent('click', function() {=0A=
			this.activate(newTitle);=0A=
		}.bind(this));=0A=
		=0A=
		newTitle.addEvent('mouseover', function() {=0A=
			if(newTitle !=3D this.activeTitle)=0A=
			{=0A=
				newTitle.addClass(this.options.mouseOverClass);=0A=
			}=0A=
		}.bind(this));=0A=
		newTitle.addEvent('mouseout', function() {=0A=
			if(newTitle !=3D this.activeTitle)=0A=
			{=0A=
				newTitle.removeClass(this.options.mouseOverClass);=0A=
			}=0A=
		}.bind(this));=0A=
		//the new panel=0A=
		var newPanel =3D new Element('div', {=0A=
			'style': {'height': this.options.panelHeight},=0A=
			'id': title,=0A=
			'class': 'mootabs_panel'=0A=
		});=0A=
		if(!this.options.useAjax)=0A=
		{=0A=
			newPanel.setHTML(content);=0A=
		}=0A=
		this.panels.include(newPanel);=0A=
		this.el.adopt(newPanel);=0A=
	},=0A=
	=0A=
	removeTab: function(title){=0A=
		if(this.activeTitle.title =3D=3D title)=0A=
		{=0A=
			this.activate(this.titles[0]);=0A=
		}=0A=
		$$('#' + this.elid + ' ul li').filterByAttribute('title', '=3D', =
title)[0].remove();=0A=
		=0A=
		$$('#' + this.elid + ' .mootabs_panel').filterById(title)[0].remove();=0A=
	},=0A=
	=0A=
	next: function(){=0A=
		var nextTab =3D this.activeTitle.getNext();=0A=
		if(!nextTab) {=0A=
			nextTab =3D this.titles[0];=0A=
		}=0A=
		this.activate(nextTab);=0A=
	},=0A=
	=0A=
	previous: function(){=0A=
		var previousTab =3D this.activeTitle.getPrevious();=0A=
		if(!previousTab) {=0A=
			previousTab =3D this.titles[this.titles.length - 1];=0A=
		}=0A=
		this.activate(previousTab);=0A=
	}=0A=
});
------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/js/searchbox.js

function startSearchTabs(activeTab) {=0A=
 /* search_tabs */=0A=
 var searchTabs =3D new mootabs('search_tabs', {=0A=
  width:'405px',=0A=
  height:'250px',=0A=
  changeTransition: 'none',=0A=
  mouseOverClass:'over'=0A=
 });=0A=
=0A=
 /* Set the focus on the search field when the tab is clicked */=0A=
 $$('#tabs_titles li').filterByAttribute('title', '=3D', =
'docs_tab')[0].addEvent('click', function(event) {=0A=
  var docSearchBox =3D $$('#docs_tab form =
input').filterByAttribute('name', '=3D', 'q')[0];=0A=
  =0A=
  // If the auth search box has text bring it here.=0A=
  var authSearchBox =3D $$('#auth_tab form =
input').filterByAttribute('name', '=3D', 'q')[0];=0A=
  if (authSearchBox.getProperty('value') !=3D '') {=0A=
    docSearchBox.setProperty('value', =
authSearchBox.getProperty('value'));=0A=
    authSearchBox.setProperty('value', '');=0A=
  }=0A=
  =0A=
  // Set focus on input field=0A=
  docSearchBox.focus();=0A=
 });=0A=
=0A=
 $$('#tabs_titles li').filterByAttribute('title', '=3D', =
'auth_tab')[0].addEvent('click', function(event) {=0A=
  var authSearchBox =3D $$('#auth_tab form =
input').filterByAttribute('name', '=3D', 'q')[0];=0A=
  =0A=
  // If the doc search box has text bring it here.=0A=
  var docSearchBox =3D $$('#docs_tab form =
input').filterByAttribute('name', '=3D', 'q')[0];=0A=
=0A=
  if (docSearchBox.getProperty('value') !=3D '') {=0A=
    authSearchBox.setProperty('value', =
docSearchBox.getProperty('value'));=0A=
    docSearchBox.value =3D '';=0A=
  }=0A=
  =0A=
  // Set focus on input field=0A=
  authSearchBox.focus();=0A=
 });=0A=
 =0A=
 // Set defaul tab.=0A=
 searchTabs.activate(activeTab);=0A=
}
------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/js/metacart.js

function addToCartProxy(cid) {=0A=
 var spanid =3D 'cmsg_'+cid;=0A=
 document.getElementById(spanid).innerHTML =3D "processing...";=0A=
 MetadataCartJS.addToCart(cid, {=0A=
  callback:function(data) {=0A=
   cartCallback(data,spanid);=0A=
  }=0A=
 });=0A=
}=0A=
function cartCallback(data, spanid) {=0A=
 document.getElementById(spanid).innerHTML =3D data;=0A=
}=0A=

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/js/correctionutils.js

/**=0A=
* Utilities for copying, adding, and removing authors on the document=0A=
* correction form. - Isaac Councill=0A=
*/=0A=
repeatCounter_id =3D "repeatCounter";=0A=
=0A=
function repeat(blockid) {=0A=
 var counterNode =3D document.getElementById(repeatCounter_id);=0A=
 var counter =3D counterNode.innerHTML;=0A=
 =0A=
 var block =3D document.getElementById(blockid);=0A=
 block.appendChild(createAuthorElement(counter));=0A=
 counterNode.innerHTML =3D parseInt(counter)+1;=0A=
}=0A=
=0A=
function createAuthorElement(num) {=0A=
 var authElt =3D document.createElement("fieldset");=0A=
 authElt.setAttribute("id", "author_"+num);=0A=
=0A=
 var moveSpan =3D document.createElement("span");=0A=
 moveSpan.className=3D"removeLink";=0A=
=0A=
 var upSpan =3D document.createElement("span");=0A=
 upSpan.className=3D"actionspan";=0A=
 upSpan.setAttribute("onClick", 'moveAuthor('+num+', "up")');=0A=
 upSpan.appendChild(document.createTextNode("Move Up"));=0A=
=0A=
 var downSpan =3D document.createElement("span");=0A=
 downSpan.className=3D"actionspan";=0A=
 downSpan.setAttribute("onClick", 'moveAuthor('+num+', "down")');=0A=
 downSpan.appendChild(document.createTextNode("Move Down"));=0A=
=0A=
 moveSpan.appendChild(upSpan);=0A=
 moveSpan.appendChild(document.createTextNode(" | "));=0A=
 moveSpan.appendChild(downSpan);=0A=
 authElt.appendChild(moveSpan);=0A=
 =0A=
 var fields =3D ["name", "affil", "address", "email"];=0A=
 var fieldLabels =3D ["Name:", "Affiliation:", "Address:", "Email:"];=0A=
 var reqFields =3D [true, false, false, false];=0A=
 for (i=3D0; i<fields.length; i++) {=0A=
  var inputID =3D "authors["+num+"]."+fields[i];=0A=
  var field =3D document.createElement("span");=0A=
  field.className=3D"oneField";=0A=
=0A=
  var label =3D document.createElement("label");=0A=
  label.setAttribute("for", inputID);=0A=
  label.className=3D"preField";=0A=
  label.appendChild(document.createTextNode(fieldLabels[i]));=0A=
  field.appendChild(label);=0A=
  =0A=
  if (reqFields[i]) {=0A=
   label.appendChild(document.createTextNode(" "));=0A=
   var req =3D document.createElement("span");=0A=
   req.className=3D"reqMark";=0A=
   req.appendChild(document.createTextNode("*"));=0A=
   label.appendChild(req);=0A=
  }=0A=
=0A=
  var input =3D document.createElement("input");=0A=
  input.setAttribute("type", "text");=0A=
  input.setAttribute("size", "40");=0A=
  input.setAttribute("id", inputID);=0A=
  input.setAttribute("name", inputID);=0A=
  input.setAttribute("value", "");=0A=
  field.appendChild(input);=0A=
  authElt.appendChild(field);=0A=
 }=0A=
=0A=
 var ordInput =3D document.createElement("input");=0A=
 ordInput.setAttribute("type", "hidden");=0A=
 ordInput.setAttribute("id", "authors["+num+"].order");=0A=
 ordInput.setAttribute("name", "authors["+num+"].order");=0A=
 ordInput.setAttribute("value", parseInt(num)+1);=0A=
 authElt.appendChild(ordInput);=0A=
=0A=
 var delInput =3D document.createElement("input");=0A=
 delInput.setAttribute("type", "hidden");=0A=
 delInput.setAttribute("id", "authors["+num+"].deleted");=0A=
 delInput.setAttribute("name", "authors["+num+"].deleted");=0A=
 delInput.setAttribute("value", "false");=0A=
 authElt.appendChild(delInput);=0A=
=0A=
 var delSection =3D document.createElement("span");=0A=
 delSection.className=3D"duplicateLink actionspan";=0A=
 delSection.setAttribute("onclick", 'deleteSection("author_'+num+'", =
"authors['+num+'].deleted")');=0A=
 delSection.appendChild(document.createTextNode("Remove This Author"));=0A=
 authElt.appendChild(delSection);=0A=
 =0A=
 return authElt;=0A=
}=0A=
 =0A=
function deleteSection(sectionid, deleteid) {=0A=
 var section =3D document.getElementById(sectionid);=0A=
 section.style.display =3D "none";=0A=
 document.getElementById(deleteid).value =3D "true";=0A=
}=0A=
=0A=
function replaceAll(str, from, to) {=0A=
 var i=3Dstr.indexOf(from);=0A=
 while(i>-1) {=0A=
  str=3Dstr.replace(from,to);=0A=
  i=3Dstr.indexOf(from);=0A=
 }=0A=
 return str;=0A=
}=0A=
=0A=
function moveAuthor(authNum, direction) {=0A=
 var counter =3D =
parseInt(document.getElementById(repeatCounter_id).innerHTML);=0A=
 var to =3D authNum;=0A=
 if (direction=3D=3D'up' && authNum>0) {=0A=
  while(--to>=3D0) {=0A=
   var delid =3D 'authors['+to+'].deleted';=0A=
   try { if(document.getElementById(delid).value=3D=3D'false') break;=0A=
   } catch (err) { return; }=0A=
  }=0A=
 }=0A=
 if (direction=3D=3D'down') {=0A=
  while(++to<counter) {=0A=
   var id =3D 'authors['+to+'].deleted';=0A=
   try { if(document.getElementById(id).value=3D=3D'false') break;=0A=
   } catch (err) { }=0A=
  }=0A=
  if (to=3D=3Dcounter) repeat('repeat_block');=0A=
 }=0A=
 if (to !=3D authNum) {=0A=
  var fromElts =3D =
['authors['+authNum+'].name','authors['+authNum+'].affil',=0A=
                  =
'authors['+authNum+'].address','authors['+authNum+'].email',=0A=
                  'authors['+authNum+'].deleted'];=0A=
  var toElts =3D ['authors['+to+'].name','authors['+to+'].affil',=0A=
                  'authors['+to+'].address','authors['+to+'].email',=0A=
                  'authors['+to+'].deleted'];=0A=
  var tmp;=0A=
  for (i=3D0; i<fromElts.length; i++) {=0A=
   tmp =3D document.getElementById(toElts[i]).value;=0A=
   document.getElementById(toElts[i]).value =3D =
document.getElementById(fromElts[i]).value;=0A=
   document.getElementById(fromElts[i]).value =3D tmp;=0A=
  }=0A=
 }=0A=
}=0A=
  =0A=

------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/js/mousedout.js

/* Javascript for IE. It applies the 'sfhover' class to li elements in =
the 'nav' id'd ul element when they are 'moused over' and removes it, =
using a regular expression, when 'moused out'. */
sfHover =3D function() {
     var sfEls =3D =
document.getElementById("secondary_tabs").getElementsByTagName("LI");
     for (var i=3D0; i<sfEls.length; i++) {
         sfEls[i].onmouseover=3Dfunction() {
             this.className+=3D" sfhover";        =20
		}        =20
		sfEls[i].onmouseout=3Dfunction() {
             this.className=3Dthis.className.replace(new RegExp(" =
sfhover\\b"), "");
		}
     }
}
if (window.attachEvent) window.attachEvent("onload", sfHover); 
------=_NextPart_000_00B9_01C96238.AE9BB360
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://citeseerx.ist.psu.edu/js/niftycube.js

/* Nifty Corners Cube - rounded corners with CSS and Javascript
Copyright 2006 Alessandro Fulciniti (a.fulciniti@html.it)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  =
USA
*/

var niftyOk=3D(document.getElementById && document.createElement && =
Array.prototype.push);
var niftyCss=3Dfalse;

String.prototype.find=3Dfunction(what){
return(this.indexOf(what)>=3D0 ? true : false);
}

var oldonload=3Dwindow.onload;
if(typeof(NiftyLoad)!=3D'function') NiftyLoad=3Dfunction(){};
if(typeof(oldonload)=3D=3D'function')
    window.onload=3Dfunction(){oldonload();AddCss();NiftyLoad()};
else window.onload=3Dfunction(){AddCss();NiftyLoad()};

function AddCss(){
niftyCss=3Dtrue;
var l=3DCreateEl("link");
l.setAttribute("type","text/css");
l.setAttribute("rel","stylesheet");
l.setAttribute("href","../css/niftyCorners.css");
l.setAttribute("media","screen");
document.getElementsByTagName("head")[0].appendChild(l);
}

function Nifty(selector,options){
if(niftyOk=3D=3Dfalse) return;
if(niftyCss=3D=3Dfalse) AddCss();
var i,v=3Dselector.split(","),h=3D0;
if(options=3D=3Dnull) options=3D"";
if(options.find("fixed-height"))
    h=3DgetElementsBySelector(v[0])[0].offsetHeight;
for(i=3D0;i<v.length;i++)
    Rounded(v[i],options);
if(options.find("height")) SameHeight(selector,h);
}

function Rounded(selector,options){
var i,top=3D"",bottom=3D"",v=3Dnew Array();
if(options!=3D""){
    options=3Doptions.replace("left","tl bl");
    options=3Doptions.replace("right","tr br");
    options=3Doptions.replace("top","tr tl");
    options=3Doptions.replace("bottom","br bl");
    options=3Doptions.replace("transparent","alias");
    if(options.find("tl")){
        top=3D"both";
        if(!options.find("tr")) top=3D"left";
        }
    else if(options.find("tr")) top=3D"right";
    if(options.find("bl")){
        bottom=3D"both";
        if(!options.find("br")) bottom=3D"left";
        }
    else if(options.find("br")) bottom=3D"right";
    }
if(top=3D=3D"" && bottom=3D=3D"" && =
!options.find("none")){top=3D"both";bottom=3D"both";}
v=3DgetElementsBySelector(selector);
for(i=3D0;i<v.length;i++){
    FixIE(v[i]);
    if(top!=3D"") AddTop(v[i],top,options);
    if(bottom!=3D"") AddBottom(v[i],bottom,options);
    }
}

function AddTop(el,side,options){
var d=3DCreateEl("b"),lim=3D4,border=3D"",p,i,btype=3D"r",bk,color;
d.style.marginLeft=3D"-"+getPadding(el,"Left")+"px";
d.style.marginRight=3D"-"+getPadding(el,"Right")+"px";
if(options.find("alias") || (color=3DgetBk(el))=3D=3D"transparent"){
    color=3D"transparent";bk=3D"transparent"; =
border=3DgetParentBk(el);btype=3D"t";
    }
else{
    bk=3DgetParentBk(el); border=3DMix(color,bk);
    }
d.style.background=3Dbk;
d.className=3D"niftycorners";
p=3DgetPadding(el,"Top");
if(options.find("small")){
    d.style.marginBottom=3D(p-2)+"px";
    btype+=3D"s"; lim=3D2;
    }
else if(options.find("big")){
    d.style.marginBottom=3D(p-10)+"px";
    btype+=3D"b"; lim=3D8;
    }
else d.style.marginBottom=3D(p-5)+"px";
for(i=3D1;i<=3Dlim;i++)
    d.appendChild(CreateStrip(i,side,color,border,btype));
el.style.paddingTop=3D"0";
el.insertBefore(d,el.firstChild);
}

function AddBottom(el,side,options){
var d=3DCreateEl("b"),lim=3D4,border=3D"",p,i,btype=3D"r",bk,color;
d.style.marginLeft=3D"-"+getPadding(el,"Left")+"px";
d.style.marginRight=3D"-"+getPadding(el,"Right")+"px";
if(options.find("alias") || (color=3DgetBk(el))=3D=3D"transparent"){
    color=3D"transparent";bk=3D"transparent"; =
border=3DgetParentBk(el);btype=3D"t";
    }
else{
    bk=3DgetParentBk(el); border=3DMix(color,bk);
    }
d.style.background=3Dbk;
d.className=3D"niftycorners";
p=3DgetPadding(el,"Bottom");
if(options.find("small")){
    d.style.marginTop=3D(p-2)+"px";
    btype+=3D"s"; lim=3D2;
    }
else if(options.find("big")){
    d.style.marginTop=3D(p-10)+"px";
    btype+=3D"b"; lim=3D8;
    }
else d.style.marginTop=3D(p-5)+"px";
for(i=3Dlim;i>0;i--)
    d.appendChild(CreateStrip(i,side,color,border,btype));
el.style.paddingBottom=3D0;
el.appendChild(d);
}

function CreateStrip(index,side,color,border,btype){
var x=3DCreateEl("b");
x.className=3Dbtype+index;
x.style.backgroundColor=3Dcolor;
x.style.borderColor=3Dborder;
if(side=3D=3D"left"){
    x.style.borderRightWidth=3D"0";
    x.style.marginRight=3D"0";
    }
else if(side=3D=3D"right"){
    x.style.borderLeftWidth=3D"0";
    x.style.marginLeft=3D"0";
    }
return(x);
}

function CreateEl(x){
return(document.createElement(x));
}

function FixIE(el){
if(el.currentStyle!=3Dnull && el.currentStyle.hasLayout!=3Dnull && =
el.currentStyle.hasLayout=3D=3Dfalse)
    el.style.display=3D"inline-block";
}

function SameHeight(selector,maxh){
var i,v=3Dselector.split(","),t,j,els=3D[],gap;
for(i=3D0;i<v.length;i++){
    t=3DgetElementsBySelector(v[i]);
    els=3Dels.concat(t);
    }
for(i=3D0;i<els.length;i++){
    if(els[i].offsetHeight>maxh) maxh=3Dels[i].offsetHeight;
    els[i].style.height=3D"auto";
    }
for(i=3D0;i<els.length;i++){
    gap=3Dmaxh-els[i].offsetHeight;
    if(gap>0){
        =
t=3DCreateEl("b");t.className=3D"niftyfill";t.style.height=3Dgap+"px";
        nc=3Dels[i].lastChild;
        if(nc.className=3D=3D"niftycorners")
            els[i].insertBefore(t,nc);
        else els[i].appendChild(t);
        }
    }
}

function getElementsBySelector(selector){
var =
i,j,selid=3D"",selclass=3D"",tag=3Dselector,tag2=3D"",v2,k,f,a,s=3D[],obj=
list=3D[],c;
if(selector.find("#")){ //id selector like "tag#id"
    if(selector.find(" ")){  //descendant selector like "tag#id tag"
        s=3Dselector.split(" ");
        var fs=3Ds[0].split("#");
        if(fs.length=3D=3D1) return(objlist);
        f=3Ddocument.getElementById(fs[1]);
        if(f){
            v=3Df.getElementsByTagName(s[1]);
            for(i=3D0;i<v.length;i++) objlist.push(v[i]);
            }
        return(objlist);
        }
    else{
        s=3Dselector.split("#");
        tag=3Ds[0];
        selid=3Ds[1];
        if(selid!=3D""){
            f=3Ddocument.getElementById(selid);
            if(f) objlist.push(f);
            return(objlist);
            }
        }
    }
if(selector.find(".")){      //class selector like "tag.class"
    s=3Dselector.split(".");
    tag=3Ds[0];
    selclass=3Ds[1];
    if(selclass.find(" ")){   //descendant selector like tag1.classname =
tag2
        s=3Dselclass.split(" ");
        selclass=3Ds[0];
        tag2=3Ds[1];
        }
    }
var v=3Ddocument.getElementsByTagName(tag);  // tag selector like "tag"
if(selclass=3D=3D""){
    for(i=3D0;i<v.length;i++) objlist.push(v[i]);
    return(objlist);
    }
for(i=3D0;i<v.length;i++){
    c=3Dv[i].className.split(" ");
    for(j=3D0;j<c.length;j++){
        if(c[j]=3D=3Dselclass){
            if(tag2=3D=3D"") objlist.push(v[i]);
            else{
                v2=3Dv[i].getElementsByTagName(tag2);
                for(k=3D0;k<v2.length;k++) objlist.push(v2[k]);
                }
            }
        }
    }
return(objlist);
}

function getParentBk(x){
var el=3Dx.parentNode,c;
while(el.tagName.toUpperCase()!=3D"HTML" && =
(c=3DgetBk(el))=3D=3D"transparent")
    el=3Del.parentNode;
if(c=3D=3D"transparent") c=3D"#fff";
return(c);
}

function getBk(x){
var c=3DgetStyleProp(x,"backgroundColor");
if(c=3D=3Dnull || c=3D=3D"transparent" || c.find("rgba(0, 0, 0, 0)"))
    return("transparent");
if(c.find("rgb")) c=3Drgb2hex(c);
return(c);
}

function getPadding(x,side){
var p=3DgetStyleProp(x,"padding"+side);
if(p=3D=3Dnull || !p.find("px")) return(0);
return(parseInt(p));
}

function getStyleProp(x,prop){
if(x.currentStyle)
    return(x.currentStyle[prop]);
if(document.defaultView.getComputedStyle)
    return(document.defaultView.getComputedStyle(x,'')[prop]);
return(null);
}

function rgb2hex(value){
var hex=3D"",v,h,i;
var regexp=3D/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;
var h=3Dregexp.exec(value);
for(i=3D1;i<4;i++){
    v=3DparseInt(h[i]).toString(16);
    if(v.length=3D=3D1) hex+=3D"0"+v;
    else hex+=3Dv;
    }
return("#"+hex);
}

function Mix(c1,c2){
var i,step1,step2,x,y,r=3Dnew Array(3);
if(c1.length=3D=3D4)step1=3D1;
else step1=3D2;
if(c2.length=3D=3D4) step2=3D1;
else step2=3D2;
for(i=3D0;i<3;i++){
    x=3DparseInt(c1.substr(1+step1*i,step1),16);
    if(step1=3D=3D1) x=3D16*x+x;
    y=3DparseInt(c2.substr(1+step2*i,step2),16);
    if(step2=3D=3D1) y=3D16*y+y;
    r[i]=3DMath.floor((x*50+y*50)/100);
    r[i]=3Dr[i].toString(16);
    if(r[i].length=3D=3D1) r[i]=3D"0"+r[i];
    }
return("#"+r[0]+r[1]+r[2]);
}

window.onload=3Dfunction(){
		Nifty("ul#secondary_nav a","transparent");
		Nifty("ul.button_nav a","transparent");
	}
------=_NextPart_000_00B9_01C96238.AE9BB360--