mime-version: 1.0
date: Tue, 25 Jan 2011 12:39:19 -0500
x-mimeole: Produced By Microsoft MimeOLE V6.1.7600.16543
from: "Saved by Windows Internet Explorer 8"
subject: Indiana 4-H
content-type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0033_01CBBC8C.E2776570"





This is a multi-part message in MIME format.

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: text/html;
	charset="utf-8"
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/ind_4h/scholarships.cfm

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h=
ttp://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns=3D"http://www.w3.org/1999/xhtml" xmlns:mso=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:msdt=3D"uuid:C2F41010-65B3-11d1-A29F-00AA00=
C14882"><HEAD><TITLE>Indiana 4-H Scholarships</TITLE><!-- InstanceBegin te=
mplate=3D"/Templates/4H.dwt" codeOutsideHTMLIsLocked=3D"false" -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.four-h.purdue.edu/CFIDE/scripts/cfform.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.four-h.purdue.edu/CFIDE/scripts/masks.js"></SCRIPT>

<META content=3D"text/html; charset=3Dutf-8" http-equiv=3DContent-Type><LI=
NK=20
rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.four-h.purdue.edu/styles/master.css"><LINK rel=3Dstyles=
heet=20
type=3Dtext/css href=3D"http://www.four-h.purdue.edu/styles/master_support=
.css"=20
;><LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.four-h.purdue.edu/styles/navigation2.css"><LINK rel=3Ds=
tylesheet=20
type=3Dtext/css href=3D"http://www.four-h.purdue.edu/styles/print.css" med=
ia=3Dprint><!-- InstanceBeginEditable name=3D"doctitle" -->
<STYLE type=3Dtext/css>#content {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; BACKGROUND: #=
fff; HEIGHT: 125%; COLOR: #000; PADDING-TOP: 5px
}
</STYLE>
<LINK rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://www.four-h.purdue.edu/ind_4h/styles/lightwindow.css">
<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.four-h.purdue.edu/ind_4h/lightwindow/javascript/prototyp=
e.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.four-h.purdue.edu/ind_4h/lightwindow/javascript/effects.=
js"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.four-h.purdue.edu/ind_4h/lightwindow/javascript/lightwin=
dow.js"></SCRIPT>
<!-- InstanceEndEditable -->
<STYLE type=3Dtext/css>.textBoxSmall {
	FONT-SIZE: 40%
}
</STYLE>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://www.four-h.purdue.edu/Scripts/swfobject_modified.js"></SCRIP=
T>

<SCRIPT language=3Djavascript>
sfHover =3D function() {
    var sfEls =3D document.getElementById("nav").getElementsByTagName("LI"=
);
    for (var i=3D0; i<sfEls.length; i++) {
        sfEls[i].onmouseover=3Dfunction() {
            this.className+=3D" sfhover";
        }
        sfEls[i].onmouseout=3Dfunction() {
            this.className=3Dthis.className.replace(new RegExp(" sfhover\\=
b"), "");
        }
    }
}
if (window.attachEvent) window.attachEvent("onload", sfHover);
	function MM_openBrWindow(theURL,winName,features) { //v2.0
  		window.open(theURL,winName,features);
}

function ShowPopup(hoveritem) {
	hp =3D document.getElementById("hoverpopup");
	// Set position of hover-over popup
	hp.style.top =3D hoveritem.offsetTop - 150;
	hp.style.left =3D hoveritem.offsetLeft - 250;

	// Set popup to visible
	hp.style.visibility =3D "Visible";
}

function HidePopup() {
	hp =3D document.getElementById("hoverpopup");
	hp.style.visibility =3D "Hidden";
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

</SCRIPT>
<!-- InstanceBeginEditable name=3D"head" --><!-- InstanceEndEditable -->
<SCRIPT type=3Dtext/javascript>
<!--
    _CF_checkformsearch =3D function(_CF_this)
    {
        //reset on submit
        _CF_error_exists =3D false;
        _CF_error_messages =3D new Array();
        _CF_error_fields =3D new Object();
        _CF_FirstErrorField =3D null;


        //display error messages and return success
        if( _CF_error_exists )
        {
            if( _CF_error_messages.length > 0 )
            {
                // show alert() message
                _CF_onErrorAlert(_CF_error_messages);
                // set focus to first form error, if the field supports js=
 focus().
                if( _CF_this[_CF_FirstErrorField].type =3D=3D "text" )
                { _CF_this[_CF_FirstErrorField].focus(); }

            }
            return false;
        }else {
            return true;
        }
    }
//-->
</SCRIPT>

<META name=3DGENERATOR content=3D"MSHTML 8.00.7600.16700">
<!--[if gte mso 9]><xml>
<mso:CustomDocumentProperties>
<mso:ContentType msdt:dt=3D"string">Document</mso:ContentType>
<mso:Category msdt:dt=3D"string">4-H Youth</mso:Category>
</mso:CustomDocumentProperties>
</xml><![endif]-->
</HEAD>
<BODY>
<DIV id=3Dcontainer>
<DIV id=3Dheader>
<DIV id=3Dpurdue></DIV>
<DIV id=3Dtextbox>Indiana<IMG alt=3D4-H=20
src=3D"http://www.four-h.purdue.edu/images/clover.jpg" width=3D45 height=
=3D45>
<TABLE>
  <TBODY>
  <TR>
    <TD vAlign=3Dtop>4-H</TD>
    <TD>
      <TABLE>
        <TBODY>
        <TR class=3DtextBoxSmall>
          <TD>Youth</TD></TR>
        <TR class=3DtextBoxSmall>
          <TD>Development</TD></TR></TBODY></TABLE></TD></TR></TBODY></TAB=
LE></DIV>
<DIV id=3Dindiana>
<OBJECT id=3DFlashID2 title=3D"Indiana 4-H County Offices"=20
classid=3Dclsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=3D226 height=3D=
250><PARAM NAME=3D"movie" VALUE=3D"../swf/in.swf"><PARAM NAME=3D"quality" =
VALUE=3D"high"><PARAM NAME=3D"wmode" VALUE=3D"transparent"><PARAM NAME=3D"=
swfversion" VALUE=3D"6.0.65.0"><PARAM NAME=3D"expressinstall" VALUE=3D"../=
Scripts/expressInstall.swf">
                 	          	           	          	   <div>        	     =
=20
<h4>Content on this page requires a newer version of Adobe Flash Player.</=
h4>   =20
    	      <p><a href=3D"http://www.adobe.com/go/getflashplayer"><img=20
src=3D"http://www.adobe.com/images/shared/download_buttons/get_flash_playe=
r.gif"=20
alt=3D"Get Adobe Flash player" width=3D"112" height=3D"33" /></a></p>     =
 	</div>    =20
   </OBJECT></DIV>
<DIV id=3Dsearch>
<FORM id=3Dformsearch onsubmit=3D"return _CF_checkformsearch(this)" method=
=3Dpost=20
name=3Dformsearch action=3Dhttp://www.four-h.purdue.edu/ind_4h/scholarship=
s.cfm>
<SCRIPT language=3DJavaScript>eng =3D 'http://www.google.com/u/4H?q=3D';</=
SCRIPT>
<INPUT id=3DDescription onfocus=3D"if(this.value=3D=3D'search4-H'){this.va=
lue=3D'';}"=20
value=3Dsearch4-H maxLength=3D60 align=3Dtop size=3D28 height=3D25 name=3D=
Description> <A=20
onclick=3D"window.location =3D eng + escape(document.getElementById('Descr=
iption').value); return false;"=20
href=3D"javascript:document.formsearch.submit();"><IMG border=3D0 alt=3D"S=
earch Now"=20
align=3Dtop src=3D"http://www.four-h.purdue.edu/images/search_icon.jpg" wi=
dth=3D24=20
height=3D24></A> <INPUT onclick=3D"eng =3D this.value;"=20
value=3D4-H_search/4h_searchresult.cfm?forms_begin=3D1&amp;urlsearch=3Ddes=
cription&amp;description=3D=20
type=3Dradio name=3Dsengines><SPAN class=3Dtext>4H</SPAN> <INPUT=20
onclick=3D"eng =3D this.value;" value=3Dhttp://www.google.com/u/4H?q=3D CH=
ECKED=20
type=3Dradio name=3Dsengines><SPAN class=3Dtext>Web</SPAN> &nbsp;<SPAN cla=
ss=3Dtext><A=20
href=3D"http://www.four-h.purdue.edu/4-H_search/4h_search.cfm">Advance=20
Search</A></SPAN> </FORM></DIV>
<DIV id=3Dnavigation>
<UL class=3D"pureCssMenu ">
  <LI><A href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Schol=
arships.mht#"><SPAN>WHO=20
  WE ARE</SPAN><![if gt IE 6]></A><![endif]><!--[if lte IE 6]><table><tr><=
td><![endif]-->=20

  <UL>
    <LI><A href=3D"http://www.four-h.purdue.edu/ind_4h/4hmission.cfm">4-H=
=20
    Purpose</A>=20
    <LI><A href=3D"http://www.four-h.purdue.edu/ind_4h/faq.cfm">4-H FAQ</A=
>=20
    <LI><A href=3D"http://www.ag.purdue.edu/ydae/Pages/directory.aspx">4-H=
=20
    Staff</A> </LI></UL><!--[if lte IE 6]></td></tr></table></a><![endif]-=
-></LI>
  <LI><A href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Schol=
arships.mht#"><SPAN>GET=20
  INVOLVED</SPAN><![if gt IE 6]></A><![endif]><!--[if lte IE 6]><table><tr=
><td><![endif]-->=20

  <UL>
    <LI><A href=3D"http://www.four-h.purdue.edu/ind_4h/index.cfm">Join 4-H=
</A>=20
    <LI><A href=3D"http://www.four-h.purdue.edu/volunteer/index.cfm">Volun=
teer</A>=20

    <LI><A=20
    href=3D"http://www.four-h.purdue.edu/ext_ed/calendar/index.cfm">Calend=
ar</A>=20
    <LI><A href=3D"http://www.four-h.purdue.edu/giving/index.cfm">Donate N=
ow</A>=20
    <LI><A href=3D"http://www.four-h.purdue.edu/state_fair/index.cfm">Stat=
e=20
    Fair</A>=20
    <LI><A href=3D"http://www.four-h.purdue.edu/ext_ed/new/index.cfm">What=
's=20
    New</A> </LI></UL><!--[if lte IE 6]></td></tr></table></a><![endif]-->=
</LI>
  <LI><A=20
  href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholarships=
.mht#"><SPAN>OPPORTUNITIES</SPAN><![if gt IE 6]></A><![endif]><!--[if lte =
IE 6]><table><tr><td><![endif]-->=20

  <UL>
    <LI><A href=3D"http://www.four-h.purdue.edu/ind_4h/scholarships.cfm">A=
wards,=20
    Trips, Scholarships, Workshops</A>=20
    <LI><A href=3D"http://www.four-h.purdue.edu/projects/index.cfm">Projec=
t=20
    Support</A>=20
    <LI><A href=3D"http://www.four-h.purdue.edu/cde/index.cfm">Career Deve=
lopment=20
    Experiences (CDE)</A> </LI></UL><!--[if lte IE 6]></td></tr></table></=
a><![endif]--></LI>
  <LI><A href=3D"http://www.four-h.purdue.edu/projects/index.cfm">PROJECTS=
</A>=20
  </LI>
  <LI><A href=3D"http://www.four-h.purdue.edu/contactus.cfm">CONTACT US</A=
>=20
</LI></UL></DIV></DIV>
<DIV id=3Dbreadcrumb><A href=3D"http://www.four-h.purdue.edu/index.cfm">Ho=
me</A>=20
&gt; <!-- InstanceBeginEditable name=3D"Breadcrumb" -->Scholarships/Awards=
/Trip=20
Packets<!-- InstanceEndEditable --></DIV>
<DIV id=3Dcontent><!-- InstanceBeginEditable name=3D"Page Content" --><SPA=
N=20
class=3DpageHeader>State 4-H Scholarships/Awards/Trip Packets</SPAN>=20
<HR>
<A=20
onclick=3D"document.getElementById('scholarship').style.display=3D'none';d=
ocument.getElementById('awards').style.display=3D'block';document.getEleme=
ntById('trips').style.display=3D'none';document.getElementById('workshops'=
).style.display=3D'none'"=20
href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholarships.m=
ht#">Awards</A>=20
<DIV=20
style=3D"MARGIN: 0px; PADDING-LEFT: 40px; WIDTH: 850px; DISPLAY: none; OVE=
RFLOW: visible"=20
id=3Dawards>
<TABLE width=3D"100%">
  <TBODY>
  <TR>
    <TD width=3D"65%"></TD>
    <TD class=3DpagesubHeader width=3D"35%">Due Date</TD></TR></TBODY></TA=
BLE>
<TABLE width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_award_info.cfm?pro=
j_key=3D71"=20
      params=3D"lightwindow_height=3D500">Key Club Award</A> </TD>
    <TD class=3DpageText width=3D"5%"></TD>
    <TD class=3DpageText width=3D"35%">June 15, 2010=20
</TD></TR></TBODY></TABLE></DIV><BR><BR><A=20
onclick=3D"document.getElementById('scholarship').style.display=3D'block';=
document.getElementById('awards').style.display=3D'none';document.getEleme=
ntById('trips').style.display=3D'none';document.getElementById('workshops'=
).style.display=3D'none'"=20
href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholarships.m=
ht#">Scholarships</A>=20
<DIV=20
style=3D"MARGIN: 0px; PADDING-LEFT: 40px; WIDTH: 850px; DISPLAY: none; OVE=
RFLOW: visible"=20
id=3Dscholarship>
<TABLE width=3D"100%">
  <TBODY>
  <TR>
    <TD width=3D"65%"></TD>
    <TD class=3DpagesubHeader width=3D"35%">Due Date</TD></TR></TBODY></TA=
BLE>
<TABLE width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_scholarship_info.c=
fm?proj_key=3D72"=20
      params=3D"lightwindow_height=3D500">Indiana 4-H Accomplishments Scho=
larship=20
      (Word doc)</A> * </TD>
    <TD class=3DpageText width=3D"5%"></TD>
    <TD class=3DpageText width=3D"35%">January 15, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_scholarship_info.c=
fm?proj_key=3D69"=20
      params=3D"lightwindow_height=3D500">2011 Scholarship General Informa=
tion Total=20
      Packet(pdf)</A> * </TD>
    <TD class=3DpageText width=3D"5%"></TD>
    <TD class=3DpageText width=3D"35%">No Date Available </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_scholarship_info.c=
fm?proj_key=3D77"=20
      params=3D"lightwindow_height=3D500">4-H Club Scholarship (pdf)</A> *=
 </TD>
    <TD class=3DpageText width=3D"5%"></TD>
    <TD class=3DpageText width=3D"35%">January 15, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_scholarship_info.c=
fm?proj_key=3D78"=20
      params=3D"lightwindow_height=3D500">4-H Foundation Scholarship-Senio=
r Year=20
      (Word doc)</A> * </TD>
    <TD class=3DpageText width=3D"5%"></TD>
    <TD class=3DpageText width=3D"35%">January 15, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_scholarship_info.c=
fm?proj_key=3D74"=20
      params=3D"lightwindow_height=3D500">Mike Lancaster 4-H Horsemanship =
Camp=20
      Scholarships</A> * </TD>
    <TD class=3DpageText width=3D"5%"></TD>
    <TD class=3DpageText width=3D"35%">May 1, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_scholarship_info.c=
fm?proj_key=3D69"=20
      params=3D"lightwindow_height=3D500">4-H Sample Scholarship Interview=
s=20
      Podcast</A> * </TD>
    <TD class=3DpageText width=3D"5%"></TD>
    <TD class=3DpageText width=3D"35%">No Date Available </TD></TR>
  <TR>
    <TD class=3DpageText height=3D10 colSpan=3D3><I>* Scholarships &amp; A=
wards are=20
      not based on financial need or academic achievement</I> </TD></TR>
  <TR>
    <TD height=3D10 olspan=3D"3"></TD></TR>
  <TR>
    <TD class=3DpagesubHeader width=3D"100%" colSpan=3D3>Other Scholarship=
=20
    Resources</TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">National 4-H Congress Trip (MS Word=
) </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/National%204-H%20Yout=
h%20Congress/2011%20National%204-H%20Congress%20Trip.doc"><IMG=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/word2.gif" wid=
th=3D16=20
      height=3D16></A> </TD>
    <TD class=3DpageText width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2011 State 4-H Scholarship / Trip=20
      Application (MS Word) </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/State%204-H%20Scholar=
ship/Trip%20Application/2011%204-H%20Foundation%20Senior%20Scholarship%20T=
rip%20Application.doc"><IMG=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/word2.gif" wid=
th=3D16=20
      height=3D16></A> </TD>
    <TD class=3DpageText width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">National 4-H Conference Trip (MS Wo=
rd) </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/National%204-H%20Conf=
erence/2011%204-H%20National%204-H%20Conference%20Trip.doc"><IMG=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/word2.gif" wid=
th=3D16=20
      height=3D16></A> </TD>
    <TD class=3DpageText width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2011 4-H Scholarship Summary Chart =
</TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/S=
cholarship General Information/2011 Summary of Scholarships.pdf','','statu=
s=3Dyes,scrollbars=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD class=3DpageText width=3D"35%"></TD></TR></TBODY></TABLE></DIV><BR=
><BR><A=20
onclick=3D"document.getElementById('scholarship').style.display=3D'none';d=
ocument.getElementById('awards').style.display=3D'none';document.getElemen=
tById('trips').style.display=3D'block';document.getElementById('workshops'=
).style.display=3D'none'"=20
href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholarships.m=
ht#">Trips</A>=20
<DIV=20
style=3D"MARGIN: 0px; PADDING-LEFT: 40px; WIDTH: 850px; DISPLAY: none; OVE=
RFLOW: visible"=20
id=3Dtrips>
<TABLE width=3D"100%">
  <TBODY>
  <TR>
    <TD width=3D"65%"></TD>
    <TD class=3DpagesubHeader width=3D"35%">Due Date</TD></TR></TBODY></TA=
BLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D81&amp;ID=3D51"=20
      params=3D"lightwindow_height=3D500">All 4-H Scholarship and national=
 trip=20
      applications</A></TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">January 15, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D137&amp;ID=3D115"=20
      params=3D"lightwindow_height=3D500">Citizenship Washington Focus</A>=
</TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">June 26 - July 3, 2010 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D86&amp;ID=3D30"=20
      params=3D"lightwindow_height=3D500">Electric Workshop, State 4-H</A>=
</TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">June 17 - 19, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D139&amp;ID=3D126"=20
      params=3D"lightwindow_height=3D500">Indiana 4-H Adult Congress</A></=
TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">October 10, 2009 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D139&amp;ID=3D37"=20
      params=3D"lightwindow_height=3D500">Indiana 4-H Youth &amp; Adult=20
    Congress</A></TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">October 2, 2010 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D64&amp;ID=3D14"=20
      params=3D"lightwindow_height=3D500">International Programs</A></TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">January 1 2009 - December 31, 2009 =
</TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D145&amp;ID=3D39"=20
      params=3D"lightwindow_height=3D500">Junior Leader Conference, State =
4-H</A></TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">June 14 - 17, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D80&amp;ID=3D41"=20
      params=3D"lightwindow_height=3D500">National 4-H Conference</A></TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">April 2 - 7, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D80&amp;ID=3D108"=20
      params=3D"lightwindow_height=3D500">National 4-H Conference (Intervi=
ew=20
      Date)</A></TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">December 11, 2010 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D13&amp;ID=3D43"=20
      params=3D"lightwindow_height=3D500">National 4-H Dairy Conference</A=
></TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">October 2 - 6, 2011 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D79&amp;ID=3D42"=20
      params=3D"lightwindow_height=3D500">National 4-H Youth Congress</A><=
/TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">November 27 - December 1, 2009 </TD=
></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D133&amp;ID=3D98"=20
      params=3D"lightwindow_height=3D500">State Fair Achievement Trip</A><=
/TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">October 27 - 31, 2010 </TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_trip_info.cfm?proj=
_key=3D144&amp;ID=3D48"=20
      params=3D"lightwindow_height=3D500">State Fair Youth Leadership=20
    Conference</A></TD>
    <TD width=3D"5%"></TD>
    <TD class=3DpageText width=3D"40%">August 2 - 6, 2011 </TD></TR>
  <TR>
    <TD height=3D10 colSpan=3D3></TD></TR>
  <TR>
    <TD class=3DpagesubHeader colSpan=3D3>Other Trip Resources</TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2010 Indiana 4-H Adult Congress Fli=
er </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/I=
ndiana Congress/2010 4-H Adult Congress Flyer.pdf','','status=3Dyes,scroll=
bars=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2010 Indiana 4-H Youth Congress Fli=
er </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/I=
ndiana Congress/2010 4-H Youth Congress Flyer.pdf','','status=3Dyes,scroll=
bars=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2011 4-H Scholarship Summary Chart =
</TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/S=
cholarship General Information/2011 Summary of Scholarships.pdf','','statu=
s=3Dyes,scrollbars=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2011 4-H Trips &amp; Conferences Br=
ochure=20
    </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/S=
cholarship General Information/2011 Trips Brochure.pdf','','status=3Dyes,s=
crollbars=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2011 4-H Trips Powerpoint </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/Scholarship%20General=
%20Information/Trips%20Promotion%20PPT%202011.ppt"><IMG=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/ppt.gif" width=
=3D16=20
      height=3D16> </A></TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2011 State 4-H Scholarship / Trip=20
      Application (MS Word) </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/State%204-H%20Scholar=
ship/Trip%20Application/2011%204-H%20Foundation%20Senior%20Scholarship%20T=
rip%20Application.doc"><IMG=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/word2.gif" wid=
th=3D16=20
      height=3D16> </A></TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">2011- Science Workshop Brochure </T=
D>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/A=
nimal Science/ScienceWorkshop brochure, 2011.pdf','','status=3Dyes,scrollb=
ars=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">Citizenship Washington Focus Brochu=
re 2011=20
    </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/C=
itizenship Washington Focus/CWF Brochure 11.pdf','','status=3Dyes,scrollba=
rs=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">Citizenship Washington Focus regist=
ration=20
    </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/C=
itizenship Washington Focus/citizenship_washington_focus 11.pdf','','statu=
s=3Dyes,scrollbars=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">Electric/Robotics Workshop Delegate=
 form 10=20
    </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/E=
lectric/4h_electric_workshop delegate 10.pdf','','status=3Dyes,scrollbars=
=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">Exhibit Hall, Centennial Hall/Ag-Ho=
rt=20
      Worker Application </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/S=
tate Fair/exhibit_hall_workers_app 11.pdf','','status=3Dyes,scrollbars=3Dy=
es,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">National 4-H Conference Trip (MS Wo=
rd) </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/National%204-H%20Conf=
erence/2011%204-H%20National%204-H%20Conference%20Trip.doc"><IMG=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/word2.gif" wid=
th=3D16=20
      height=3D16> </A></TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">National 4-H Congress Trip (MS Word=
) </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/National%204-H%20Yout=
h%20Congress/2011%20National%204-H%20Congress%20Trip.doc"><IMG=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/word2.gif" wid=
th=3D16=20
      height=3D16> </A></TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">National 4-H Dairy Conference </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholars=
hips.mht#"><IMG=20
      onclick=3D"MM_openBrWindow('http://www.four-h.purdue.edu/downloads/N=
ational 4-H Dairy Conference/National Dairy_conference 11.pdf','','status=
=3Dyes,scrollbars=3Dyes,resizable=3Dyes,width=3D760,height=3D420')"=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/pdf.gif" width=
=3D16=20
      height=3D16></A> </TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">State 4-H Junior Leader Conference=
=20
      Registration </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/Junior%20Leader%20Con=
ference/Junior%20Leader%20Conference%20Registration%20Form%202011.xls"><IM=
G=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/xls.gif" width=
=3D16=20
      height=3D16> </A></TD>
    <TD width=3D"35%"></TD></TR>
  <TR>
    <TD class=3DpageText width=3D"60%">State Fair Youth Leadership Confere=
nce </TD>
    <TD class=3DpageText width=3D"5%"><A=20
      href=3D"http://www.four-h.purdue.edu/downloads/State%20Fair%20Youth%=
20Leadership%20Conference/ISFYLC%20Registration%20Form%202011.xls"><IMG=20
      border=3D0 src=3D"http://www.four-h.purdue.edu/images/xls.gif" width=
=3D16=20
      height=3D16> </A></TD>
    <TD width=3D"35%"></TD></TR></TBODY></TABLE></DIV><BR><BR><A=20
onclick=3D"document.getElementById('scholarship').style.display=3D'none';d=
ocument.getElementById('awards').style.display=3D'none';document.getElemen=
tById('trips').style.display=3D'none';document.getElementById('workshops')=
.style.display=3D'block'"=20
href=3D"http://www.four-h.purdue.edu/ind_4h/Indiana%204-H%20Scholarships.m=
ht#">Workshops</A>=20
<DIV=20
style=3D"MARGIN: 0px; PADDING-LEFT: 40px; WIDTH: 850px; DISPLAY: none; OVE=
RFLOW: visible"=20
id=3Dworkshops>
<TABLE width=3D"96%">
  <TBODY>
  <TR>
    <TD class=3DpageText colSpan=3D4>4-H Science Workshops is a program he=
ld at=20
      Purdue University specifically designed to offer 4-H members and oth=
er=20
      students a hands-on, realistic, and exciting opportunity to learn ab=
out=20
      Science, Technology, Agriculture, Engineering, and Mathematics (STEA=
M)=20
      careers. As a participant, you'll have an opportunity to meet with a=
nd=20
      learn from Professors, Graduate Students, and other experts in these=
=20
      fields and participate in hands-on activities and experiments in the=
=20
      laboratories and classrooms at Purdue University. You will stay in t=
he=20
      Purdue Residence Halls for the three days that you are at the Worksh=
ops,=20
      so you=C3=A2=E2=82=AC=E2=84=A2ll be able to explore the Purdue campu=
s and meet other students=20
      who share your interest in STEAM careers. You"ll have learning sessi=
ons=20
      and activities based around your area of interest throughout the day=
 and=20
      in the evenings you'll be able to take advantage of Purdue's recreat=
ional=20
      facilities and have social time. The workshops are designed so that =
you=20
      will leave campus not only with a better understanding of your impac=
t on=20
      science but also of your role in society.<BR><BR>If you would like t=
o=20
      participate in Science Workshops, use this list to help you narrow d=
own=20
      which area of science you are most interested in. You can only parti=
cipate=20
      in one of the Workshops below. <BR><BR></TD></TR>
  <TR>
    <TD width=3D"33%"></TD>
    <TD class=3DpagesubHeader width=3D"20%" align=3Dmiddle>Registration Fo=
rm</TD>
    <TD class=3DpagesubHeader width=3D"25%" align=3Dmiddle>Delegate Enroll=
ment=20
    Form</TD>
    <TD class=3DpagesubHeader width=3D"22%"=20
      align=3Dleft>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;Dates</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DAerospace&amp;proj_key=3D82"=20
      params=3D"lightwindow_height=3D500">Aerospace</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 8 - 10,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DAmbassador&amp;proj_key=3D83"=20
      params=3D"lightwindow_height=3D500">Ambassador</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 8 - 10,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DAnimal Science&amp;proj_key=3D84"=20
      params=3D"lightwindow_height=3D500">Animal=20
      Science</A><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aquatic=20
      Science<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beef<BR>&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;Dairy<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Goat<BR>&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;Horses<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Poultry<BR>&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;Domestic=20
      Rabbit<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheep<BR>&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;Swine<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Veterinary=20
      Sciences - Large Animal<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Veterinary=
=20
      Sciences - Small Animal<BR></TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 8 - 10,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DComputer&amp;proj_key=3D85"=20
      params=3D"lightwindow_height=3D500">Computer</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 8 - 10,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DElectric&amp;proj_key=3D86"=20
      params=3D"lightwindow_height=3D500">Electric</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 17 - 19,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DEngineering Science&amp;proj_key=3D87"=20
      params=3D"lightwindow_height=3D500">Engineering Science</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 8 - 10,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DFood Science &amp; Nutrition&amp;proj_key=3D89"=20
      params=3D"lightwindow_height=3D500">Food Science &amp; Nutrition</A>=
 </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 8 - 10,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DPINE (Plant, Insects, Natural resources, Environment)&amp;proj_=
key=3D90"=20
      params=3D"lightwindow_height=3D500">PINE (Plant, Insects, Natural re=
sources,=20
      Environment)</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 8 - 10,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DBand&amp;proj_key=3D91"=20
      params=3D"lightwindow_height=3D500">Band</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 18 - 20,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DChorus&amp;proj_key=3D92"=20
      params=3D"lightwindow_height=3D500">Chorus</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 18 - 22,=20
2011</TD></TR></TBODY></TABLE>
<TABLE border=3D0 width=3D"100%">
  <TBODY>
  <TR>
    <TD class=3DpageText width=3D"33%"><A class=3Dlightwindow=20
      href=3D"http://www.four-h.purdue.edu/ind_4h/print_workshop_info.cfm?=
category=3DRound-Up&amp;proj_key=3D108"=20
      params=3D"lightwindow_height=3D500">Round-Up</A> </TD>
    <TD vAlign=3Dtop width=3D"20%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD vAlign=3Dtop width=3D"25%" align=3Dmiddle><SPAN=20
      class=3DpageText>unavailable</SPAN> </TD>
    <TD class=3DpageText vAlign=3Dtop width=3D"22%">June 21 - 23,=20
2010</TD></TR></TBODY></TABLE></DIV><!-- InstanceEndEditable --></DIV>
<DIV id=3Dfooter>
<TABLE width=3D"95%">
  <TBODY>
  <TR>
    <TD vAlign=3Dtop>4-H Youth Development, 615 West State Street,<BR>West=
=20
      Lafayette, IN 47907-2053 USA, (765) 494-8422<BR>=C2=A9 2008 Purdue U=
niversity.=20
      An equal access, equal opportunity university.<BR>If you have troubl=
e=20
      accessing this page because of a disability, please contact webmaste=
r at=20
      <A href=3D"mailto:4h@four-h.purdue.edu">4h@four-h.purdue.edu</A></TD>
    <TD vAlign=3Dtop><A=20
      href=3D"http://www.four-h.purdue.edu/NAENGR/NAENGR.html">NAENGR</A> =
| <A=20
      href=3D"http://www.four-h.purdue.edu/omk/" target=3D_blank>OMK</A> |=
 <A=20
      href=3D"http://www.ag.purdue.edu/ydae/Pages/facstaff.aspx">Staff</A>=
 | <A=20
      href=3D"http://www.four-h.purdue.edu/4-H_search/4h_search.cfm">Searc=
h</A> |=20
      <A href=3D"mailto:cpersone@purdue.edu">Contact Webmaster</A> | <A=20
      href=3D"http://www.purdue.edu/" target=3D_blank>Purdue University</A=
></TD>
    <TD><A href=3D"http://www.four-h.purdue.edu/ext_ed/index.cfm"><IMG bor=
der=3D0=20
      alt=3D"Extension Educatoins Sign In" align=3Dtop=20
      src=3D"http://www.four-h.purdue.edu/images/intranetunlockIcon.jpg" w=
idth=3D80=20
      height=3D40> </A></TD></TR></TBODY></TABLE></DIV></DIV>
<SCRIPT type=3Dtext/javascript>
swfobject.registerObject("FlashID");
</SCRIPT>
<!-- InstanceEnd --></BODY></HTML>

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: image/jpeg
content-transfer-encoding: base64
content-location: http://www.four-h.purdue.edu/images/clover.jpg

/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAtAC0DASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+ZbwH
8OvEPj3UYIdOtJo9JS6jh1PWnQLZ2MQ2POFdyi3F2sLK0VnCXlZpImkEULNMn6x3H7K3i34f/Azw
B8Wrr4aRx/BT4iajr3hjwz4yVNG1rS9W1/w1PJZazpPiOSymvLnSNema2uZ7Ww8T2+m3us2Vpd32
k293p1nNLDxH7L/ijwf8P2+D/jS68B+GviV4W8O3Xh7Xtd8A+JnvYfD/AIx+xTRS69o2uTaVPb3Q
+23kd3DcPuuLdblQt7Y6lYLPptz/AEH+J/iJ8Bf2df2XtC8R/s/fBiX46/sH/tV+NJ4v2m9H8e/E
TUb7x/8AC74hQpq134c+C+i6Pp622l/CrxV8PdL+xeJPB/xRnsfE2sfEa60PSp7/AFmHRrLQJNQ/
HskyjDQw861SrF1JUVOUnFycFJQ5XGCpycqF5ONVxkpRVqjuoxpy/wAqeJs/r+J2P4npZnna4Xyb
gxZhDC5dh3mM8xw+Mo47DYTCcQ5xgMLgMXPM8ujiHUweZ/UquHr8N4er/aSji5QWDzb+Q/4yfCm3
0LxN4fPha3W3sfF96umwWG9jDZa1JcwxLHETuaOzuluonhhHmeQ0Nyq7YvIiX7M+DXwIe71Xw38O
vhz4RvPGXjrxZqGn6Hp1lpumNqfiHxRrt7IsNva2lsizSqsk7nyLSErbWsW6WViVnuXxvi9pmk6p
4m8KS+E7XVRoFl8Vre+0SPXJLe71u28NQx63cWI1mbTba30+fVIrKKy/tG6tbS1szdpLLbRW8DLG
P2B/4JzfHPR/hN4h0Hwp8GP2etZ+M/7Xnxh8dXPw6i1bU/Fc3hjS/DvwT1vw+bXxDp3wp13QbzTt
b+H/AMUNbkn1WfWfijqL3Nl4H8MaJFe2IeC/16GOMvy3DLMcQ5KNOMqlNQkoSm4qUU5xowjGTc6k
37qS0TsrRun83LijMuNss4A4RzzirEYHAc+Op51jMPHH5hmGcSoZssHldClhMDQxGMzPMKlFU6GX
UalJxrYmTxeJUp01Nfh/+1z+y74w+GvjzxX4buvDNrpfj/wBr2qeFfiF4X0S+0nWVTV9JuXtrqWx
uvD13qGk6ndWdwkttenTLu5M4EZUNLb3APwG6sjMjqyOjFXRwVZWUkMrKQCrKQQQQCCCCM1/Tv8A
tz6D+yR8H9f1P4A/s1rqXxT13w7451PXviL+0X4o8RvrV7d6hjUbW0+E/gNNF/szwvqPhXwpFfBP
Fvjm40i51Pxz4zsWvtHk0bw7YWtnffz1fHmPSIviTq66UsaO1vZSasIceWdXlh825YBflEjwvbPc
7eTdNO0n74yV5PEGW0sLUlXpTgnKqoVKcZKcVNpv3JqMFKUeW1RxjySleUWle/7J4S8XZnQz/MfD
PMKuHzenkOGxeIwea4LMJ5s8vo0MXSpyyTMMz+rYXDZnPAfWYYWOY4KjDCSq0nQw6q0PZTp63wY8
Q/E+wmubHwdo7eItG8zzL6wvXW30y1uHXPnQ6lPNbxWF3IiZaJZZBcopLWk0iRPH9a2ni/4otatp
9x8PRbWk1xBdT28fjzT5LCW6toZ4oLuW2WyAM8Md1dQwOYZpYYrmZFlCTS5+iv2Uv2dLb4r+JNC+
GXhrxf4B+HPhiw0G98WeLfiL8QPEOmeHPDXh7whotvb3XiPxffSXlzDe+IdRFvIk1p4f0KK/1rVJ
pIobW2g022uryw/Uv4+fsfeCfGfws+HV/wDsbeE/Auq/s2eAvh74z+IXj39uL4g+LtQ8L6r4z8a6
fLFpfiH4ffESw1z+y9N+G+vDW4PDuifC34SReHtV1zVYPEmieJ7bXjY614zvbD2cuynFQwiksVWf
Ik1Th7KSd3FTjSjKlVmqdNSvOq5RpLRNxlNRf5LxFXq+IuK4i4oyjgbh5YTCznRwjxDz+HEue+xr
4fD4vGTwOR5tg4ewwVCvDEZpmuPwdPLMtjKjgcZmlTFVsPTqfjRGzvHG8kZidkVniLK5jdlBaMuh
KMUJKllJViMqSCDWJe674v0bU7efw1oLXbWvk3MGqx+JItDura8Ryym1C2s9xG8G2N0uVlicSEhF
AQO2F4o8bx+GptVjOnS3/wDZHhS68UXAim8pikV9FZW1qMxSKguCLuV5yW8pLViInBJH3B+zR+zx
8T/jQvij4gfCnwj4M+MN/wDBSfwt44134G6jqt1d+MviN4Sj1F7jVp9C8A6Le6X4o8aeE9NNpZ6b
41g8MapZa9DbeItNi0hZ7i6kls94J4ibo0Zz9rFpy9nFSmkua9lKnNStyyuoxbTjZWej/IMpyLNq
mLy2dPIlmUc0WLlgsM/r1d1I4OhSxuKrU8PlGMoZm54XB1IYmFNSc61KV6VOvOyX5yeOvE/xitdG
um0LwNaWR2SLLqFnrUPiLUbeFlYedaabHaWDi4Thgwh1NEzkwkAuvwXcS3E9xPPdyzTXU0sktzNc
O8lxLPI5aWSeSQtI8ryFmkeQl2cksSxJr+tH9uP9kf4N6RbeMPiv8BfE3gbwH4r8Caf4R1L9pr9j
6/8AHdnqPiT9n/xR4yXTYrix8A+ItYi0e3+Ivh3R/EWs6d4W8UeGtAk1nxH8O/Ft2dCvFnsx9n0X
+aH9onR9K0rx5HNpqRQS6vpFvqepwRBVQX73V5bNcbEwsb3cVvFLMu0NJN5ly5Z7hmPh8Q5dXw9q
lTETqxhLl5ZOHJaTcealyQppPmjy1ITgqkZJqfLKDiv6q8Jcb/qtxVj+Acbw1keAxWLwtfMcFn3D
9THYijmmHwNapRnHF1czxWMx8FSq08VRlhsRPB4nK8fQxOW4/LMLjo14U+n+AvxRvLPUrXwTr9+r
aRdRPDoU92yhrC/DBodPFw5H+iXamWK2ikZvLuvs9vb7Um2D9c/j/wDtfePPjR4K8BfDabTfCHwk
+Bvwo0Ozh8NfCL4cQX+g/D+01q2sSmu+P/EA1bVNV1TxH4w1yd7y8v8AxH4n1fU721huZ4oLhHud
Tu9R/ns6dK6O98YeKtS05dJ1DxHrV7piiNRY3OpXc1qViwYleKSVkkWMgGNXDBCqlQCoxx4HPKuE
w1TDzjOomkotTSbjGzjSm2nL2cZK6SbWkU4vli17nG3gzXz7N8ZjuG87pcNYHiKGGpcV4Kjg/wDk
YLDYiWI9vSlQdKU/rE3Cti8DUnSwuLxmHw+NxEqlenCVP6e07xPB8SfHXxT03T2E1tqPgDUND8PS
sWCzpp0hijmjGFYpdahqU9/CpCsICodNwcV9C/swfHTxN4bPgzxz8PPF+qeEPif8OptPltdY0W/a
y1zS9R0sLDa6nEVctPZ6jAgS6jnjlsL5Zb3Tb2Ce3aeB/gn4NaxcaN8R/DUkCh11C8Gj3MZbaHt9
TBtixIBOYJWiulXA3vAqEqrEjc+L+mN4B+JV1c+Gr+80yTULeLXomsppLSWxm1Ce5W6t4JYHRjbv
PbyTJHhESKYWxRkiDPeGx9alSWPtzOOIq068VLlklVlGtSqU5dHTlzxSu9GloveXzXEPh3gMXxFH
gXAYyvk2KhkORcQ8IZvT5qlTD43h6lUyTMaOLdGVKtCeMoUstxn1mi6UoYnD+3hKpNfV5fqF+3f+
2KnxU1WT43eIfAPw78BfEbVPC+naN4mPgTTrjSLD4pfEaG51GbVPibrHh83b2Nn4k16K8tZvEdvo
cen6bfXmnpcRwx6jqz+Z+KOoajq3ijVb/wAS+Jbia71nVmiNwzykLHBbh47WKNI4bURKkLD90YlE
QxEiRIgjXT1rWtW8SXEV1r+o3ms3ECokE2pXEl48KxuZIxCZ2fygkjM67NuHYuPmJNZlcmZZrUx8
3K0oJu7vLVvRuTUbR55P4pWbskk03Nz/AFrw+4EjwhRzHMc0xVDOeLs8xNXEZzn0cNToTqQnKlKO
Ew/LCEo0p1KSxWLqyjGrjcZKVeunKNNR/9k=

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: image/jpeg
content-transfer-encoding: base64
content-location: http://www.four-h.purdue.edu/images/search_icon.jpg

/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAZABkDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD8z6/Z
34IfAj9kT9lz9kX4e/tgftqfDnxH8dPF37QXiHxDpfwF+AmleKr/AMF6YvhLwtM1nrHjzxNqWm3V
hqEoa4WJocvqenW2n674WkTRb261eW90T8ZoopZ5Y4II5JpppEihhiRpJZZZGCRxxxoC8kkjkKiK
CzMQqgkgV/T78Qf2J9d+Pv7An7E37Pfxm+Jfwr/Z9/bK+GehfEbXPgx8L/iR4rt9Gu/HPwv8SazY
3Fxo/ijTkiOoeEfFZ0nS/Dktssdlr80d14cv9P1Ozs7+68S/8If/AJc+GOS4jMp8VY/BZRhM2zXJ
+H418ipZthsNicnWcYrNsswcIYiljk8vxOYzy6rmU8mwGMVSnjMdRioUK1WnCD/xm8HeHsVm9TjX
MsuyLA55nWQ8LwxHDdDO8JhMXkKz7G55lGBp08VRzJPK8XmtTKq2bVMgyzHxq08fmVCEaeHr1qVO
m/k2y+FX7Df/AAUR+F/xjs/2S/gTrv7K/wC078EvA178UtB8D3Hj7VvHXhL4y+BdAb/io9It5tXu
Xex8T2ct3bwWb2+naawvdQ0JLm91PSpdTfw9+GFf0GfDL4X+EP8Agj34M+MHxg+Mvxh+GnxA/ar+
J/wq8W/Cf4G/BX4Sa63i+Dw9aeKJNOa5+JPj3VLqx04WVhaX+l2r21lc6ZFYXunWV/Y6bqGs6zqV
xa+F/wCfOsvETDqhQ4blmmAyrKuMamFzB8SZdlGFwGAo0cPHFU3kdbHZdlUYZfgM1xGGlifrOGoU
qFR4WngK+JoQr15yqYeKuEWGw/CUs5yzJck49rYPNHxblORYPLMsw9DDRxtN8O4jMcqyWFPK8szv
FYSeL+t4TD0cNVeCpZZicXhqeJxNSdX9kP2Obz9lL9jH4Fab+3F8S9d8F/Hj9pTXNV13Rf2cP2d7
C+F5a/DjxN4enFtcfEP4s2pSO60y/wBKlltNU0RJIljgsLvS7/wzcX/iDVINY8EfmJ8a/jX8S/2h
viX4n+Lnxc8T3vizxx4svTd6lqV2QkFtAg2WOkaRYpi20nQ9JtgllpOk2SRWljaRJFEmdzN5VRXz
GacT4nMMoyvh/C4ahleS5ZCFWeBwbqWzLN5UlTxed5nVqN1MXjq+tOgqj9jl+E5cJg6dOHtZVvjs
64wxeaZFkvC+DwmGybh/J6dOvPLcBKq45tns6Kp47iLN69WUquOzLE+9Swyqt4fK8DyYHAU6VP20
65RRRXzJ8gf/2Q==

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: image/gif
content-transfer-encoding: base64
content-location: http://www.four-h.purdue.edu/images/word2.gif

R0lGODlhEAAQAOYAAP////T3/u/1/fDy+ujw/eHs/Nzo+9fl+tzi9NPi+tPi+87e+Nbc6sfa+MnS
4rfI9LrF1LLC2Kq+8a6+1K+836W83K260Kq5z5243qi2zZW04o+x44yv5JOr5pCu1pyrwIWs5pmo
vpamu4Gn54ml6Yuk3Xul6JOit3ij64Ce5oOc2nyX2HOU1meK1XeKnGCBzWd+s1h+0V99w1V7zlJ3
yl11q0l0zFVtpEJuxE1qp0RquTppuEBmtDhhripitzJbtjpamCFMmjdLZQlLsig+bQZCmwg8iAgv
iwEyeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
BAQUAP8ALAAAAAAQABAAAAfIgACCEYQThhcZiYIAHR0kKSstMTQ4PgECH0KCHYudAEOXIhCaJBIq
LwwvCDcloAInQrEpCCoyCDoIOS5DHh4EFRVCLAAsOhRBJUAORQG+BcEtADA6NUY/RADMzhhCMwA3
QA9GRhYARgIeBQXcNgBHPQNGPIJGvQUGGkI7notIBPcHNgjxMaRgkYPjkPQ6cICDJkEhCEiUCPDA
AhAPAYhQ16ujhwULRmQUYcAAwwMKFIBsYCLjiQQYMGjQwIEDiBEmUGSMxbNnz0AAOw==

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: image/gif
content-transfer-encoding: base64
content-location: http://www.four-h.purdue.edu/images/pdf.gif

R0lGODlhEAAQAKIAAP///8zMzIiIiERERP8AAAAAAAAAAAAAACH5BAUUAAAALAAAAAAQABAAAANF
CFrcXuvJQiAlOGepew0g42kFGEySCS1mMAztqQClOQjxSrd3Ptegl48VfMFUP1tAYBQIdLWXc+l8
/pzHmGwh1YZ+KEcCADs=

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: image/gif
content-transfer-encoding: base64
content-location: http://www.four-h.purdue.edu/images/ppt.gif

R0lGODlhEAAQAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBmAABmMwBm
ZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/MwD/ZgD/
mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNmZjNmmTNm
zDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/mTP/zDP/
/2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZmzGZm/2aZ
AGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkA
M5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZAJmZM5mZ
ZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswA
mcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZZsyZmcyZ
zMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A
//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+ZzP+Z///M
AP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///////wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAANgALAAAAAAQABAA
AAjHALEJbCWrFatZrAy2QiQQGzRoz0pFjAgN2zVWgboIhPjwGURkpa5dazXrikaPqyKWKpWs1Kxo
CVtdQcTKY6k5q5KpKkXSmqAuXQJ59PQsjyeWIUXOGhlIoidVwjqVIpVUZLRWTZ8989TJIylACg+2
OlQKmc5kpEh52jNLYdtA0FY2LbWHFCul1942vNvqYthE0RAJ2pu3lcFErBDPShRo78ulS0kaZuxY
IaKFiVtRFpgwIeJEoAUlGtSYsyBEgQIJSr0aNauAAAA7

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: image/gif
content-transfer-encoding: base64
content-location: http://www.four-h.purdue.edu/images/xls.gif

R0lGODlhEAAQAOYAADV4LMbXxo6dsYCbeTdbjNrh6GmRVrXI5qu+2e/x8DdRbrvT+Y21fMbV7azN
q1ikUUdjhd3n9aS0yZe1lnWPc0R3P5e9+8PPusjT4IWggs3d+GF1jaW3qP///97k7c/d8GepXLnA
xkeLOrXQ+UmJQ3OudWaEae71/5ivz52z1JGvhJm3i0RihtHlzdvu273O6ZnMmYCpbtTg9sPN29XY
3eDs/3CdbMfa+I3Ai6W51cLM2WuBm9zp1527kLrGvFmERomigneWetnk9dTf8EVeeHSzbYird018
RKzFon+dcKCuwK7NpN7o/5O0hEprhJOqk9bn0unw5tTc6L/W/Pn4/z5fiu/26+ns+lODNcXR47jM
54qofM7W583iyW6ZW6/B3J6zk1SPTZS1jKW61s7e/+bp7Zy13p67jtbe/7XO/8Xe/9/m39fk/8PZ
+7TQqX2Yeoqse4yguo6niS+GKoehfu/y9XORcYOhhrTB0Zevi9be3lZ/QpG7gU9nhefw/////yH5
BAUUAH8ALAAAAAAQABAAAAf0gH9/VFlDhkNcMzN4eoJ/bks9PSsqW0kXHR0eEjSCfFBWUTyjcHcn
HQVMnH8MLTAOaxMTK3InJxg5XzshMVA4RWFzJT1yTEJlSnFxRF5RLg8gAA5NGTIf1x01fQZdNhUk
IkdGQGxCQg0dMhA/LQkJAU8cRm8aGh8vVOp7PUiSklgUbjQY0oCKBhZg8tAZECSIHRM+zGnRcuJG
FUFUrjBhwoYMkxRDDow5MeXinzIFGnxo8GIIAjMHvvhZYLKMFJUftHzI0UBkjREEBJXhouHFC5Ep
kqKQAVRolggy6tVrM2XKCAtB/9QRsKEPBBZgq4glQEBBIAA7

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: image/jpeg
content-transfer-encoding: base64
content-location: http://www.four-h.purdue.edu/images/intranetunlockIcon.jpg

/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAoAFADASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD97v2j
vGnxp8A/CDxX4g/Z5+DbfHb4xC3isPA/gG48W+EvBGhyavqD/Z4td8WeIfGHiLw1aweFfD4Y6nrF
lo93c+I9WhhTS9HtY57xtR0/+UjUf+CR3/BXX9sDxX4v+Jv7TfxD8LeFPFM+sslpZ/F7416vrVvc
wzK963/CvPA/wUj+I3w++HfgLTJLyXTtG0SDUtH1Zp01C4v9FaSd9b1n+ymiuLF4GljXBV6uJ9lB
O9CjiKmGp1JtpxqVJYd0q83BJqMHW9j7zlKlKahKPHisFTxjgq1TEeyipXoUq9TD05ybVp1JUHTr
TcEmowdX2WrlKnKajKP8QniXw7/wUv8A+CIPxC+Hfiy88Z2PjX4MeM9ZXSotC0nx9448Z/s7+NtZ
a11DWdZ+HuueG/FdlomqfC74kX+jabrGs+GvGOgaLDFfiwkuZb7xHHp2r+Fn/sL/AGa/j94I/ak+
BHww/aA+HRvE8JfE/wAMW2v2NjqSwpq2hX8c9xpniHwvrSW8k1smueE/Edhq3hrW1tZ7i0XVdJvB
a3NxbiOaT4S/4Lc+HNC17/gmd+0Xe63Hp6t4NPwv8daPqGoTRWw0nVvDXxd8C3a3lpdS4EF1dac+
o6MUVka/tdVutLZhHfSA+H/8G9Hi6PxP/wAE/bixtb9NR0zwf+0D8YNA0q4t7mC7sfsurXOg+Prh
dPmt2dDbnVPGuoyTAu7G/kvGBCMiLyYWnPBZhLAwnXqYKrg/rNBV6lWu8NVpVo0atKOIqynUlTqx
q0qkKdSpOVOUKnI+SShDlw1OeDx0sHCVaeDqYR4iiq06lZ4erSqxpVaUa9WU6kqdSNWnOFOpOTpy
hU5GoSUY/T/7NH7Tnx4+Jfg7Tvil43u7Dxdo918N9W8ez/Cb4YfsS/tD+A/Ed1Nb26z22h+DPjx8
TvjZqXwg8e6lHuEVjaaRpNtL40bL6A9mitjo7j/goh8M4dfg11/D3iS1/Z9k+FHxE+JVr8cNQj0a
00jxND4M+Ifw9+HGlXfhHQpNeHia+8LeKfEnjVtE0PXdU0LShq9//ZOr6fBJ4Kvh4qPtXh/9kn4c
+F/B8nw+0XxV8ZbPwM3hbU/BcHhSP4w+O10jT/DmrafcaXPYaUiaslzpj29lcyx6de2NzBf6bJ5d
xY3MFxFHKlIfsT/s6R2y6ZbeC77TtAhh8Z2lj4a0fxV4o0PQdH03x34h8G+NNa0vw9ZaLq1g3hqx
tPHngLw74+8Mr4fm0yfwj4zhvtf8Mz6VeapqDXH9d4/ir6OGacTZxmea8O8VVMmxeZYihlOX5Jk3
DmQzynhWvh8z9yjSyStkGX1uKcFiamUrJcfmeEzbDUaMc0fEOI4lnLK3gcoUM4hQpwhWoKpGEXUn
UqVqqqV06erdVVZqhKKqe1hCVNtuHsVR9/m85sf+ChHwq1+01GTwR4E+JHxH1Pw9YfEjV/GGjfD3
V/gb4pPhDRvhfoXw58TeIdW1PxRY/Go/D/V7W50X4qeD7jS4vBvjHxRfyXtzfaFqFnpviHTLzSYt
XU/24fh3eeIfi94I8MWPiKPXfhN4an8Qarr95Z+AtbsUWODwxe2wk+G9v8W/Dnxcs7XVdO8U2N/o
Gr+LvDHgTwp4ltIrmbQPFWoEWcd97lF8APADTarearN4u8S6lrfhj4geD9T1TxN4z8R61ezeHvib
Y/D7TfFmnWwur82uk291ZfC/wbHaw6Na6dBY3NjqGqW8S6vr+vX+pc9qH7Kvwg1i9vLvWbHxNrMN
xaavZ2Gm6t4y8S6jp3hyLxBpel6Prg8Lw3eoyy6BFqlnpMRnsdPni02G6vNVvbOytbrVL6ab52hn
f0evbwlPhLizCxp4OtLmhj3mds0nmuFxUZxp4vG4bD4zA0MFQr5fgMPisLhXTwmOq182/tnHYSgq
+zp5tZr29CV5L7HI+RQcWvdjJxm5Pnm4ykuaKVP2cZO3nes/tyfDfRrMarJ4C+LV9oetP4vt/hpr
enaP4MmsfjBf+BvGWmeBvEOn+A4ZvHlvqdjcJrGqR3OkS/ETT/AVh4m0S2u9a8NXmrafHHNL9FfD
D4lWnxO0bWNRTwz4n8F6t4c8Uax4P8S+EvGI8Ntr+ha5o/2adoLq58H+JPF/ha9gvtMv9M1mwutE
8S6rA1jqVvDdvZ6pDf6dZ+Zr+yT8Dlk0wHw7q8mn+Hr3xDqHhLQ7jxb4nutC8GXni3xlpfj3xPN4
U0y51WaDR11bxJo9jKlvCGttD0gXfhnwzDonhrUNQ0i59v8ADvhLQ/Cs/ia40W1ktpfF3iW68W66
0lzcXAutcvdP0zS7i6jWeSQW0b2ej2EYtrcR26NE0ixh5ZGb5Pi7HeElbJ1huDMm4iwubfWsZW/t
DNqjs8LTzGFHKMJKjHN8bhlOrkEnieIKscPefFEKjyapg8glSwK3w8MeqnNialGVPliuSmvtOF6k
runGVlVvGkubSg17RSq3kf5v37aGv6/8Vf21f2wbnx14o8Z69qPw4/ag/aB+D+l6jP418T2sl74Y
8DfF/wAZL4Ze4s9M1PT9M0+bTdH1K30KKx0Gy0nQ1tNMhuo9Jj1G71C7urv7KP7Bnxd/bW+I+pfC
74CJbS67oPhx/FvibW/iF8Z/iJ4S8I+G9B/tC20q1uNSvtHHjDxFc3Wpajci102y0Xwrq0spgu57
o2drbSXA5v8AaL/5PS/4KC/9n7/tXf8Aq19cr9Z/+CAnhX4k+IP269e8ReENe1HQvh78O/gr4hu/
jHBax282m+LovGepW2i/DPwPqyXEFx9nml8Qabrvj/TNRtDZanbN8OrzTob8aXrmtafqX8nRpSxv
G1fL608XLBrEVlKjQxFWjGNOlhnKPNKnOEowU4xU3GUZyvZScmk/zqNOWM4wrYGrPEywir1lKjRr
1KMY06WHco8zpzg4wU1HmcZKcr2Tcmr/AI1fGL9m/wAV/AD4q+Ovgl8WbPXdA+JXw21TT9H8XaRp
fxT8Ya/pttc6v4d0Txdo1zp2s2mvwxahp+seF/Emha7YTNb2l2tnqcEWoWOn6hHdWNv+lX/BC/4j
/Ej4bf8ABSP4S/CXw1498WD4VfGfwb8aW8beAtT8Qa5q+h32reD/AIev4l0fXvI1HU7lJNWs7vRN
NtrG8uY559PsX1e2tpVi1edY/ln9uPQfij4V/bT/AGqPDPxq8Ral4v8AiZpXxj11tW8XavFbW+oe
KfC2pWGl6p8Kdde1soLWxtLaf4SXfgazsrDTraDTNKgsV0bT447fTUjT3b/gjd/yli/ZM/7FT9pP
/wBU3q9cuAq4jCcYrA062Ljho5jPDqjiK0qz9jGTlBXnKej5YShNPndNpSk+aV+bBVK+G4sWDhVx
UcPHMJ0FRr1Z1X7KMnKCvOUrp8sZQmnzOm0nKSlLm/pq8W/DH4a6h+2d8fvGHxR8A/AnUJn+IXwY
vvCut/F39ivxb8dvGF/o+k/B74aQ3Mvw7+LOm67pmmeELSz1u01K0tUGk60uh+J7e91adJ2L2K6F
74y+P9j8QrT4j674g+Iuo+N/Cfw2/aXi8T+ELX4Q2V14c+Fnh8ftSfsuQabofhW+0PwFLd+LJ9Z+
EPhvxHrMMuo65431vxfp1hc+K/B8Gk21s0B+29J/aw+G+r618KfD8WleMrXVPi147+NHw806C70v
SVTwnrvwH8Tav4J8bS+N5rfXriLStNn8a6bp/hPw9dac2syatrfirwrEbe1ttTkurTs/An7QPwr8
faf4CuLTxXovh/WPifYahrPgDwb4p17w1pfjbxboFlcagIPEGgeGodbvb7VtI1TS9PbxFp1zp4uW
/sG5tru+isZxc2tt/o/jvEDjjAYbh+rxL4YZhm+D4Y4YyrhKjTzj+x8zwuEyvhnh7iDw/wA3w2WW
4TrYvKstzV8J8RYjiOE8Xja8sXw/ShUzOlk+Hr4TMvvYYXCzlV9jjYU5Vq88RJ0/aQcp1qtHFU5V
P36jUnD29GNF8sVy1XaDqNSh8gar8b/i54n1TxRd6X4n+L3gPwJFf/GbVvh94n0L9ne78Wah4nvf
Cll8IrXwB4IuvCuv+Am1e80XWbrxB471fTNLWTwj4y+JqwbfCHxC0rTfCuss/wA6fGH4oftR/EST
41aNpWrfGnw34H1f4f8AxZvNM0nTPBGj2XiTwP4g+Ef7RHwj07R7bRbbS/gxqE+kXniv4UT/ABHv
LjStd+M/xi1L4j6Bptz4p8P+Efhvbxw6Rdfqd4J+P/wm8caR4CvrTxr4c0PWviL8NfDvxZ0HwJ4l
8R+GtM8fxeCfEuixa7aarqHheLWbu7jtrO0eWLUb6ze+0m3urO9SLUp4rdpiN+0Z+z2vhqPxo3x3
+DS+DptZn8Ow+LG+J/ggeGpfEFtaW+oXOhR66dc/st9Zt7C7tb2fTFujexWlzb3MkCwzRu3nZFxv
W4WzfL3h/o+YLG4/IcZhaODo47I8Dj6sMZQzDE1cFWq4mhwbHEZlmOJxOWcssTicRisPiJ5djYZV
hcBg6+NwrurhlXpyvm0owqxbk41ZxTi4RUkk8RaEEp/DFRkvaRdSU5KLPz98SfGP9rePwz411rwl
rHj+68d3vhn9sqGbwDq3wa0h/DXwos/hvofxCP7OHxC8KajH4H0rVPGOs+MtX8O/Dto7PV/E3jXw
38S18ca7e+FvC+j6ZpaW2hfqN4U0fVPD/h3SNG1rxZrnjrVdPtFgv/F3iS08M2Gua7cb3d73ULLw
b4f8LeGLaY7xEsWj+H9MtlijjBhebzZ5eRtvjd8GL3w1rXjOz+Lvwwu/B/hu7Fh4h8V23j7wpP4a
0G+MgiFlrWuxas+l6XdmUiMW19dQTeYQmzcQK9A0rVdL13S9N1vRNSsNZ0XWbCz1XSNX0q8t9Q0v
VdL1C3ju7DUtNv7SSa0vrC+tJorqzvLWWW3ubeWOaGR43Vj+X+InElbO8Dl+Eh4bZVwJh8tzTNI4
rEYLh/B5fi8ZjMTU+u4XK8VmFPJctxShkmX4uGGwuCqVqlfEYKWDxubSx+YRWY1u3CUVSlKTxk8V
KcIOKlVlOMYpcsqkYOpOP72ceZySSjLmjT5YPkX8eH7Qn/Bv7+334z/aD+PvxT+F3xc/ZAvPDXxo
+NfxN+MJT4gav8ZfDuv21/8AEbxXqPie6hn0zw18NfFOm2ghfUPsy2sWuakkEdtGEvLgu7DwbUf+
Db3/AIKPaxcC71bxb/wTs1S6Eawi51HXvjte3AiQsyRCa5+BksgjRncqm7apZiACxyUV+IPIcqlW
liJ4SE8TUu6mIcpxrVG7Juc4Sg5NpJNvWVrybk23i8kyyVWWIlhYSxFRt1K7lONWd7X5pwlFt2ST
b1lZOTcrt2tN/wCDcz/gpZosUkGj+Ov+Ce2kwSyedLDpvif4+WEUku1U82SO1+B8SPJsVU3spbaq
rnAAH6Of8Evv+CJ37TH7K37XXhr9qH9pr4qfA/WE+G/gvxpongLwh8Dr/wAf6xFea/460q48M6pq
HiO88eeDPCBtLG08P3t20Kaet7Nd6j9iDra29nI94UUU8hymjXhiqWCpU8RCcZqsuaVTmi01ec3J
9FdpptLlvytpunkuV0q8cTSwdKGIhJTVZc0ql42teU3J9FdpptLlvytp/sD4j/Y01S/8T/tKeLvD
vxKi0HVvivd+APEvwcjm8O3l9Y/BPxz4Q1nQ/Hmv62YYPEmnzeJ9O+IXxT8J+F/GHirS4bjQHnh0
2XSortYrp5Rh6f8AsD+H/D3xJm8R6D4jnfwPceO/2evGtl4R1DxJ8YtMg8KQ/s3+Dfhl4V8F6Bp/
h7wb8WPDHw38WWr3Hwo8Pa9YXnjPwPfyaFq2peI2v7bxdpd7p2j6UUV+54bx18VMFQrYbB8WYrCU
cRleDyeusJhMvwk62Cy/A8K4DBKrWwuEo16mIoR4LyDFPFTqPE4nMaWZ5hi6uIxfEHEFXNNZZZgZ
NOVCMnGpKpHmlOVpSlXlKylJpJ/WKseW3LGDhCKjGlSUMq6/YV8VX3wS174DTfFPwinhnxV4U8K6
TqXiS6+FMOueK9E1Twt+y74X/ZxRfDD6n4qGn2Wmarc+GIfFuo3Zgj1seHta8Y/Dq1urdPFSeMNB
9Cl/ZK1XXvi9qfxm8W+KPCkmv6jb2unJoegeEbmz0DT7TR/hN8RPhjpWp2n9oa1f3p1+5X4kaxc6
ldSSGKLQLLR/C9qriwl1i+KKMR45+JmJpYulUz3CxjjsBmeWYqdDIeH8NWrYLOaWTUc1pSrYfLKV
VvHUuHsjp16zm63LllHkqQdXFvECyzBxcWqUnyShOKdWrJKVN1HTdpTa9x1allt77unZW821r/gn
9JfeJPhz4l074hDSl+GHh/4D6PoXh3RP+E48C2N3/wAKc+E/xt+FVwsPiH4aeO/BvivwsdRsPjAL
3QrzQ9Tkj0S30e90PUdJ1/S9enjtftT4JfDO2+D3wu8J/Dq1lt5xoFvqMl3PZ3Piq8tJ9U1zWdR8
Q6zPa3PjjxT428WS282rateyQHXPFWs3ixMqG6WJY4IiivI4t8V+PuOMqweScT8QYjMsqwE8vqYX
AujhsNh6dTKsLjsHgKsqOEo0KdWvh6GaZlFYqtCeKqfXayq1qkVTjT0oYHC4apKrRpKFSakpSvKU
mpyjKSvJtpNwg+VWiuVWS1v/AP/Z

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: text/css;
	charset="iso-8859-1"
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/styles/master.css

BODY {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; FONT: 1em Verdana, Arial, Helvetica, =
sans-serif; BACKGROUND: url(../images/bkg.jpg) #123f08 repeat-x; HEIGHT: =
100%; COLOR: #000000; PADDING-TOP: 0px
}
A:link {
	COLOR: #0c3d00; TEXT-DECORATION: none
}
A:hover {
	COLOR: #093
}
A:visited {
	COLOR: #0c3d00; TEXT-DECORATION: none
}
#container {
	TEXT-ALIGN: left; MARGIN: 0px auto; WIDTH: 850px; BACKGROUND: #123f08; =
HEIGHT: 100%
}
#content {
	WIDTH: 850px; BACKGROUND: #fff; HEIGHT: 475px; COLOR: #000
}
#content LI {
	BACKGROUND-IMAGE: url(../images/clover_bullet.jpg); LIST-STYLE-TYPE: =
none; PADDING-LEFT: 18px; BACKGROUND-REPEAT: no-repeat; =
BACKGROUND-POSITION: 0px 2px; MARGIN-BOTTOM: 6px; MARGIN-LEFT: -40px
}
#header {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
BACKGROUND: url(../images/header_bkg.jpg) #123f08 no-repeat center 50%; =
HEIGHT: 146px; PADDING-TOP: 0px
}
#purdue {
	BACKGROUND-IMAGE: url(../images/PU_signature.jpg); POSITION: relative; =
WIDTH: 143px; BACKGROUND-REPEAT: no-repeat; HEIGHT: 48px; TOP: 25px
}
#textbox {
	POSITION: absolute; WIDTH: 225px; HEIGHT: 98px; COLOR: #fff; =
MARGIN-LEFT: 175px; FONT-SIZE: 2.6em; TOP: 5px
}
#indiana {
	Z-INDEX: 600; POSITION: absolute; WIDTH: 226px; DISPLAY: inline; =
HEIGHT: 250px; MARGIN-LEFT: 365px; TOP: 5px
}
#search {
	POSITION: absolute; WIDTH: 245px; FLOAT: right; HEIGHT: 50px; =
MARGIN-LEFT: 595px; TOP: 40px
}
#search A:link {
	COLOR: #fff
}
#search A:hover {
	COLOR: #ff0
}
#search A:visited {
	COLOR: #fff
}
.text {
	COLOR: #fff; FONT-SIZE: 75%
}
#footer {
	PADDING-LEFT: 5px; WIDTH: 850px; PADDING-RIGHT: 5px; FONT-FAMILY: =
Arial, Helvetica, sans-serif; BACKGROUND: #ccc; HEIGHT: 85px; FONT-SIZE: =
60%
}
#footerlinks {
	POSITION: fixed; WIDTH: 405px; FLOAT: right; HEIGHT: 40px; MARGIN-LEFT: =
455px; TOP: 860px
}
.pageHeader {
	FONT-SIZE: 100%; FONT-WEIGHT: bold
}
.pagesubHeader {
	FONT-SIZE: 85%; FONT-WEIGHT: bold
}
.pageText {
	FONT-SIZE: 85%
}
.smallerpageText {
	FONT-SIZE: 75%
}

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: text/css;
	charset="iso-8859-1"
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/styles/master_support.css

#breadcrumb {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; BACKGROUND: =
#123f08; HEIGHT: 25px; COLOR: #fff; FONT-SIZE: 75%; PADDING-TOP: 5px
}
#breadcrumb A:link {
	COLOR: #ff0; TEXT-DECORATION: underline
}
#breadcrumb A:visited {
	COLOR: #ff0; TEXT-DECORATION: underline
}
.boxHeaders {
	MARGIN: 3px 4px; COLOR: #000; FONT-SIZE: 80%; FONT-WEIGHT: bold
}
.boxsubheaders {
	MARGIN: 3px 4px; COLOR: #000; FONT-SIZE: 85%; FONT-WEIGHT: bold
}

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: text/css;
	charset="iso-8859-1"
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/styles/navigation2.css

#navigation {
	BACKGROUND-IMAGE: url(../images/nav_bkg.jpg); Z-INDEX: 500; POSITION: =
absolute; WIDTH: 960px; BACKGROUND-REPEAT: no-repeat; FLOAT: left; =
MARGIN-LEFT: -10px; TOP: 106px
}
#pcm {
	DISPLAY: none
}
UL.pureCssMenu UL {
	DISPLAY: none
}
UL.pureCssMenu LI:hover > UL {
	DISPLAY: block
}
UL.pureCssMenu UL {
	POSITION: absolute; TOP: 98%; LEFT: -1px
}
UL.pureCssMenu UL UL {
	POSITION: absolute; TOP: -2px; LEFT: 98%
}
UL.pureCssMenu UL {
	PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #006633; LIST-STYLE-TYPE: none; =
MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px
}
UL.pureCssMenu {
	PADDING-BOTTOM: 10px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 5px; PADDING-TOP: 5px
}
UL.pureCssMenu TABLE {
	BORDER-COLLAPSE: collapse
}
UL.pureCssMenu {
	DISPLAY: block; FLOAT: left
}
UL.pureCssMenu UL {
	WIDTH: 323px
}
UL.pureCssMenu UL LI A {
	BORDER-RIGHT-WIDTH: 0px
}
UL.pureCssMenu LI {
	MARGIN: 2px 2px 0px; DISPLAY: block; FONT-SIZE: 0px
}
UL.pureCssMenu A {
	TEXT-ALIGN: left; PADDING-BOTTOM: 4px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 10px; DISPLAY: block; FONT: 14px Verdana; COLOR: #ffffff; =
VERTICAL-ALIGN: middle; BORDER-RIGHT: #fff 1px solid; TEXT-DECORATION: =
none; PADDING-TOP: 4px
}
UL.pureCssMenu LI.dis A:hover {
	TEXT-ALIGN: left; PADDING-BOTTOM: 4px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 10px; DISPLAY: block; FONT: 14px Verdana; COLOR: #ffffff; =
VERTICAL-ALIGN: middle; BORDER-RIGHT: #fff 1px solid; TEXT-DECORATION: =
none; PADDING-TOP: 4px
}
UL.pureCssMenu LI.sep A:hover {
	TEXT-ALIGN: left; PADDING-BOTTOM: 4px; PADDING-LEFT: 5px; =
PADDING-RIGHT: 10px; DISPLAY: block; FONT: 14px Verdana; COLOR: #ffffff; =
VERTICAL-ALIGN: middle; BORDER-RIGHT: #fff 1px solid; TEXT-DECORATION: =
none; PADDING-TOP: 4px
}
UL.pureCssMenu SPAN {
	OVERFLOW: hidden
}
UL.pureCssMenu LI {
	FLOAT: left
}
UL.pureCssMenu UL LI {
	FLOAT: none
}
UL.pureCssMenu UL A {
	TEXT-ALIGN: left; WHITE-SPACE: nowrap
}
UL.pureCssMenu LI.sep {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0px; LINE-HEIGHT: 0; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; HEIGHT: 100%; PADDING-TOP: 0px
}
UL.pureCssMenu LI.sep SPAN {
	BACKGROUND-IMAGE: none; BACKGROUND-COLOR: #aaaaaa; WIDTH: 5px; =
PADDING-RIGHT: 0px; DISPLAY: inline-block; FLOAT: none; HEIGHT: 16px
}
UL.pureCssMenu UL LI.sep SPAN {
	WIDTH: 80%; HEIGHT: 3px
}
UL.pureCssMenu LI:hover {
	POSITION: relative
}
UL.pureCssMenu LI:hover > A {
	BACKGROUND-COLOR: #00cc00; FONT: 14px Verdana; COLOR: #ffffff; =
TEXT-DECORATION: none
}
UL.pureCssMenu LI A:hover {
	POSITION: relative; BACKGROUND-COLOR: #00cc00; FONT: 14px Verdana; =
COLOR: #ffffff; TEXT-DECORATION: none
}
UL.pureCssMenu LI.dis A {
	COLOR: #aaaaaa !important
}
UL.pureCssMenu IMG {
	BORDER-BOTTOM-STYLE: none; BORDER-RIGHT-STYLE: none; WIDTH: 16px; =
BORDER-TOP-STYLE: none; FLOAT: left; HEIGHT: 16px; BORDER-LEFT-STYLE: =
none; MARGIN-RIGHT: 4px
}
UL.pureCssMenu UL IMG {
	WIDTH: 16px; HEIGHT: 16px
}
UL.pureCssMenu IMG.over {
	DISPLAY: none
}
UL.pureCssMenu LI.dis A:hover IMG.over {
	DISPLAY: none !important
}
UL.pureCssMenu LI.dis A:hover IMG.def {
	DISPLAY: inline !important
}
UL.pureCssMenu LI:hover > A IMG.def {
	DISPLAY: none
}
UL.pureCssMenu LI:hover > A IMG.over {
	DISPLAY: inline
}
UL.pureCssMenu A:hover IMG.over {
	DISPLAY: inline
}
UL.pureCssMenu A:hover UL IMG.def {
	DISPLAY: inline
}
UL.pureCssMenu A:hover A:hover IMG.over {
	DISPLAY: inline
}
UL.pureCssMenu A:hover IMG.def {
	DISPLAY: none
}
UL.pureCssMenu A:hover UL IMG.over {
	DISPLAY: none
}
UL.pureCssMenu A:hover A:hover IMG.def {
	DISPLAY: none
}
UL.pureCssMenu A:hover UL {
	DISPLAY: block
}
.pureCssMenu UL SPAN {
	PADDING-RIGHT: 11px; DISPLAY: block
}
.pureCssMenu UL LI:hover > A > SPAN {
=09
}
#navigation UL.pureCssMenu A:hover SPAN {
=09
}
#navigation UL.pureCssMenu UL SPAN {
=09
}
UL.pureCssMenu A:hover TABLE SPAN {
=09
}
#navigation UL.pureCssMenu UL LI:hover > A SPAN {
=09
}
#navigation UL.pureCssMenu TABLE A:hover SPAN {
=09
}

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: text/css;
	charset="iso-8859-1"
content-transfer-encoding: 7bit
content-location: http://www.four-h.purdue.edu/styles/print.css

#indiana {
	DISPLAY: none
}

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: text/css;
	charset="iso-8859-1"
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/ind_4h/styles/lightwindow.css

#lightwindow_overlay {
	Z-INDEX: 500; POSITION: absolute; WIDTH: 100%; DISPLAY: none; HEIGHT: =
100px; VISIBILITY: hidden; TOP: 0px; LEFT: 0px
}
#lightwindow {
	Z-INDEX: 999; POSITION: absolute; LINE-HEIGHT: 0px; DISPLAY: none; =
VISIBILITY: hidden
}
#lightwindow_container {
	POSITION: absolute; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; DISPLAY: none; VISIBILITY: hidden; PADDING-TOP: =
0px
}
* HTML #lightwindow_container {
	OVERFLOW: hidden
}
#lightwindow_contents {
	Z-INDEX: 0; BORDER-BOTTOM: #ffffff 10px solid; POSITION: relative; =
BORDER-LEFT: #ffffff 10px solid; BACKGROUND-COLOR: #ffffff; OVERFLOW: =
hidden; BORDER-TOP: #ffffff 10px solid; BORDER-RIGHT: #ffffff 10px solid
}
#lightwindow_loading {
	Z-INDEX: 9999; POSITION: absolute; PADDING-BOTTOM: 10px; =
BACKGROUND-COLOR: #f0f0f0; PADDING-LEFT: 10px; WIDTH: 100%; =
PADDING-RIGHT: 10px; HEIGHT: 100%; TOP: 0px; PADDING-TOP: 10px; LEFT: =
0px
}
#lightwindow_loading_shim {
	POSITION: absolute; WIDTH: 100%; DISPLAY: none; HEIGHT: 100%; TOP: 0px; =
LEFT: 0px
}
#lightwindow_loading SPAN {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 32px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 10px; FLOAT: left; COLOR: #444444; FONT-SIZE: 12px; =
PADDING-TOP: 0px
}
#lightwindow_loading SPAN A {
	COLOR: #09f; CURSOR: pointer; TEXT-DECORATION: none
}
#lightwindow_loading SPAN A:link {
	COLOR: #09f; CURSOR: pointer; TEXT-DECORATION: none
}
#lightwindow_loading SPAN A:visited {
	COLOR: #09f; CURSOR: pointer; TEXT-DECORATION: none
}
#lightwindow_loading SPAN A:hover {
	TEXT-DECORATION: underline
}
#lightwindow_loading SPAN A:active {
	TEXT-DECORATION: underline
}
#lightwindow_loading IMG {
	MARGIN: 0px 10px 0px 0px; FLOAT: left
}
#lightwindow_navigation {
	POSITION: absolute; DISPLAY: none; TOP: 0px; LEFT: 0px
}
#lightwindow_navigation_shim {
	POSITION: absolute; WIDTH: 100%; DISPLAY: none; HEIGHT: 100%; TOP: 0px; =
LEFT: 0px
}
#lightwindow_navigation A {
	OUTLINE-STYLE: none
}
#lightwindow_navigation A:link {
	OUTLINE-STYLE: none
}
#lightwindow_navigation A:visited {
	OUTLINE-STYLE: none
}
#lightwindow_navigation A:hover {
	OUTLINE-STYLE: none
}
#lightwindow_navigation A:active {
	OUTLINE-STYLE: none
}
#lightwindow_previous {
	WIDTH: 49%; DISPLAY: block; BACKGROUND: url(images/blank.gif) =
no-repeat; HEIGHT: 100%
}
#lightwindow_next {
	WIDTH: 49%; DISPLAY: block; BACKGROUND: url(images/blank.gif) =
no-repeat; HEIGHT: 100%
}
#lightwindow_previous {
	FLOAT: left; LEFT: 0px
}
#lightwindow_next {
	FLOAT: right; RIGHT: 0px
}
#lightwindow_previous:hover {
	BACKGROUND: url(images/prevlabel.gif) no-repeat left 15%
}
#lightwindow_previous:active {
	BACKGROUND: url(images/prevlabel.gif) no-repeat left 15%
}
#lightwindow_next:hover {
	BACKGROUND: url(images/nextlabel.gif) no-repeat right 15%
}
#lightwindow_next:active {
	BACKGROUND: url(images/nextlabel.gif) no-repeat right 15%
}
#lightwindow_previous_title {
	DISPLAY: none
}
#lightwindow_next_title {
	DISPLAY: none
}
#lightwindow_galleries {
	Z-INDEX: 50; POSITION: absolute; MARGIN: 0px 0px 0px 10px; WIDTH: 100%; =
BOTTOM: 0px; DISPLAY: none; OVERFLOW: hidden; LEFT: 0px
}
#lightwindow_galleries_tab_container {
	WIDTH: 100%; HEIGHT: 0px; OVERFLOW: hidden
}
A#lightwindow_galleries_tab {
	LINE-HEIGHT: 22px; WIDTH: 77px; DISPLAY: block; BACKGROUND: =
url(images/black-70.png) 0px 0px; FLOAT: right; HEIGHT: 20px; COLOR: =
#ffffbe; FONT-SIZE: 11px; CURSOR: pointer; FONT-WEIGHT: bold; =
TEXT-DECORATION: none
}
A#lightwindow_galleries_tab:link {
	LINE-HEIGHT: 22px; WIDTH: 77px; DISPLAY: block; BACKGROUND: =
url(images/black-70.png) 0px 0px; FLOAT: right; HEIGHT: 20px; COLOR: =
#ffffbe; FONT-SIZE: 11px; CURSOR: pointer; FONT-WEIGHT: bold; =
TEXT-DECORATION: none
}
A#lightwindow_galleries_tab:visited {
	LINE-HEIGHT: 22px; WIDTH: 77px; DISPLAY: block; BACKGROUND: =
url(images/black-70.png) 0px 0px; FLOAT: right; HEIGHT: 20px; COLOR: =
#ffffbe; FONT-SIZE: 11px; CURSOR: pointer; FONT-WEIGHT: bold; =
TEXT-DECORATION: none
}
* HTML A#lightwindow_galleries_tab {
	FILTER: alpha(opacity=3D70); BACKGROUND: #000000; opacity: .70
}
* HTML A#lightwindow_galleries_tab:link {
	FILTER: alpha(opacity=3D70); BACKGROUND: #000000; opacity: .70
}
* HTML A#lightwindow_galleries_tab:visited {
	FILTER: alpha(opacity=3D70); BACKGROUND: #000000; opacity: .70
}
A#lightwindow_galleries_tab:hover {
	COLOR: #ffffbe
}
A#lightwindow_galleries_tab:active {
	COLOR: #ffffbe
}
#lightwindow_galleries_tab_span {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 7px; WIDTH: 63px; PADDING-RIGHT: =
7px; DISPLAY: block; HEIGHT: 20px; PADDING-TOP: 0px
}
#lightwindow_galleries_tab .up {
	BACKGROUND: url(images/arrow-up.gif) no-repeat 60px 5px
}
#lightwindow_galleries_tab .down {
	BACKGROUND: url(images/arrow-down.gif) no-repeat 60px 6px
}
#lightwindow_galleries_list {
	BACKGROUND: url(images/black-70.png) 0px 0px; HEIGHT: 0px; OVERFLOW: =
hidden
}
* HTML #lightwindow_galleries_list {
	FILTER: alpha(opacity=3D70); BACKGROUND: #000000; opacity: .70
}
.lightwindow_galleries_list {
	PADDING-BOTTOM: 10px; MARGIN: 0px 0px 10px; PADDING-LEFT: 10px; WIDTH: =
200px; PADDING-RIGHT: 10px; FLOAT: left; PADDING-TOP: 10px
}
.lightwindow_galleries_list H1 {
	PADDING-BOTTOM: 5px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: =
#09f; FONT-SIZE: 16px; CURSOR: pointer; FONT-WEIGHT: bold; =
TEXT-DECORATION: none; PADDING-TOP: 10px
}
.lightwindow_galleries_list LI {
	LIST-STYLE-TYPE: none; MARGIN: 5px 0px
}
.lightwindow_galleries_list A {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 0px; DISPLAY: block; COLOR: #ffffff; FONT-SIZE: 11px; =
CURSOR: pointer; FONT-WEIGHT: bold; TEXT-DECORATION: none; PADDING-TOP: =
0px
}
.lightwindow_galleries_list A:link {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 0px; DISPLAY: block; COLOR: #ffffff; FONT-SIZE: 11px; =
CURSOR: pointer; FONT-WEIGHT: bold; TEXT-DECORATION: none; PADDING-TOP: =
0px
}
.lightwindow_galleries_list A:visited {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 0px; DISPLAY: block; COLOR: #ffffff; FONT-SIZE: 11px; =
CURSOR: pointer; FONT-WEIGHT: bold; TEXT-DECORATION: none; PADDING-TOP: =
0px
}
.lightwindow_galleries_list A:hover {
	BORDER-LEFT: #ffffbe 3px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 7px; =
PADDING-RIGHT: 0px; BACKGROUND: #000000; COLOR: #ffffbe; PADDING-TOP: =
0px
}
.lightwindow_galleries_list A:active {
	BORDER-LEFT: #ffffbe 3px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 7px; =
PADDING-RIGHT: 0px; BACKGROUND: #000000; COLOR: #ffffbe; PADDING-TOP: =
0px
}
#lightwindow_data {
	POSITION: absolute
}
#lightwindow_data_slide {
	POSITION: relative
}
#lightwindow_data_slide_inner {
	PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #ffffff; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; PADDING-TOP: 0px
}
#lightwindow_data_caption {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 25px; BACKGROUND-COLOR: #ffffff; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #666666; CLEAR: both; =
PADDING-TOP: 10px
}
#lightwindow_data_details {
	PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #f0f0f0; PADDING-LEFT: 10px; =
PADDING-RIGHT: 10px; HEIGHT: 20px; PADDING-TOP: 0px
}
#lightwindow_data_author_container {
	TEXT-ALIGN: right; LINE-HEIGHT: 20px; FONT-STYLE: italic; WIDTH: 40%; =
FLOAT: right; COLOR: #666666; FONT-SIZE: 10px; OVERFLOW: hidden
}
#lightwindow_data_gallery_container {
	TEXT-ALIGN: left; LINE-HEIGHT: 20px; WIDTH: 40%; FLOAT: left; COLOR: =
#666666; FONT-SIZE: 10px; OVERFLOW: hidden
}
#lightwindow_title_bar {
	HEIGHT: 25px; OVERFLOW: hidden
}
#lightwindow_title_bar_title {
	TEXT-ALIGN: left; LINE-HEIGHT: 25px; FLOAT: left; COLOR: #ffffbe; =
FONT-SIZE: 14px
}
A#lightwindow_title_bar_close_link {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; LINE-HEIGHT: 25px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FLOAT: right; COLOR: #ffffbe; =
CURSOR: pointer; PADDING-TOP: 0px
}
A#lightwindow_title_bar_close_link:link {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; LINE-HEIGHT: 25px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FLOAT: right; COLOR: #ffffbe; =
CURSOR: pointer; PADDING-TOP: 0px
}
A#lightwindow_title_bar_close_link:visited {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; LINE-HEIGHT: 25px; MARGIN: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FLOAT: right; COLOR: #ffffbe; =
CURSOR: pointer; PADDING-TOP: 0px
}
A#lightwindow_title_bar_close_link:hover {
	COLOR: #ffffff
}
A#lightwindow_title_bar_close_link:active {
	COLOR: #ffffff
}
#lightwindow P {
	PADDING-RIGHT: 10px; COLOR: #000000
}

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: application/octet-stream
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/CFIDE/scripts/cfform.js

/*ADOBE SYSTEMS INCORPORATED=0A=
Copyright 2007 Adobe Systems Incorporated=0A=
All Rights Reserved.=0A=
=0A=
NOTICE:  Adobe permits you to use, modify, and distribute this file in =
accordance with the=0A=
terms of the Adobe license agreement accompanying it.  If you have =
received this file from a=0A=
source other than Adobe, then your use, modification, or distribution of =
it requires the prior=0A=
written permission of Adobe.*/=0A=
var _CF_error_messages=3Dnew Array();=0A=
var _CF_error_fields=3Dnew Object();=0A=
var _CF_FirstErrorField=3Dnull;=0A=
var _CF_submit_status=3Dnew Array();=0A=
_CF_signalLoad=3Dfunction(){=0A=
_CF_loaded=3D1;=0A=
};=0A=
_CF_onError=3Dfunction(_1,_2,_3,_4){=0A=
if(_CF_error_fields[_2]=3D=3Dnull){=0A=
if(_CF_FirstErrorField=3D=3Dnull){=0A=
_CF_FirstErrorField=3D_2;=0A=
}=0A=
_CF_error_exists=3Dtrue;=0A=
_CF_error_fields[_2]=3D_4;=0A=
_CF_error_messages[_CF_error_messages.length]=3D_4;=0A=
}=0A=
};=0A=
_CF_onErrorAlert=3Dfunction(_5){=0A=
var _6=3D"";=0A=
for(var i=3D0;i<_5.length;i++){=0A=
_6+=3D_5[i]+"\n";=0A=
}=0A=
alert(_6);=0A=
return false;=0A=
};=0A=
updateHiddenValue=3Dfunction(_8,_9,_a){=0A=
if(_9=3D=3Dnull||_9=3D=3D""){=0A=
_9=3D0;=0A=
}=0A=
if(document.forms[_9]=3D=3Dnull||document.forms[_9][_a]=3D=3Dnull){=0A=
return;=0A=
}=0A=
document.forms[_9][_a].value=3D_8;=0A=
};=0A=
_CF_hasValue=3Dfunction(_b,_c,_d){=0A=
if(_c=3D=3D"TEXT"||_c=3D=3D"FILE"||_c=3D=3D"PASSWORD"||_c=3D=3D"CFTEXTARE=
A"||_c=3D=3D"TEXTAREA"||_c=3D=3D"CFTEXTINPUT"||_c=3D=3D"DATEFIELD"){=0A=
if(_b.value.length=3D=3D0){=0A=
return false;=0A=
}else{=0A=
if(_d){=0A=
str=3D_b.value.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(str.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}=0A=
}=0A=
return true;=0A=
}else{=0A=
if(_c=3D=3D"SELECT"){=0A=
for(i=3D0;i<_b.length;i++){=0A=
if(_b.options[i].selected&&_b.options[i].value.length>0){=0A=
return true;=0A=
}=0A=
}=0A=
return false;=0A=
}else{=0A=
if(_c=3D=3D"SINGLE_VALUE_RADIO"||_c=3D=3D"SINGLE_VALUE_CHECKBOX"){=0A=
if(_b.checked){=0A=
return true;=0A=
}else{=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_c=3D=3D"RADIO"||_c=3D=3D"CHECKBOX"){=0A=
if(_b.length=3D=3Dundefined&&_b.checked){=0A=
return true;=0A=
}else{=0A=
for(i=3D0;i<_b.length;i++){=0A=
if(_b[i].checked){=0A=
return true;=0A=
}=0A=
}=0A=
}=0A=
return false;=0A=
}else{=0A=
if(_c=3D=3D"CFTREE"){=0A=
if(_b["value"].length>0){=0A=
return true;=0A=
}else{=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_c=3D=3D"RICHTEXT"){=0A=
var _e=3DFCKeditorAPI.GetInstance(_b.id);=0A=
var _f=3D_e.GetXHTML();=0A=
if(_f.length=3D=3D0){=0A=
return false;=0A=
}else{=0A=
if(_d){=0A=
str=3D_f.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(str.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}=0A=
return true;=0A=
}=0A=
}else{=0A=
return true;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
};=0A=
_CF_checkdate=3Dfunction(_10,_11){=0A=
_10=3D_10.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
_10=3D_10=3D_10.replace(/{d \'/,"").replace(/'}/,"");=0A=
if(_11){=0A=
if(_10.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_10.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
if(_10.length=3D=3D0){=0A=
return true;=0A=
}=0A=
isplit=3D_10.indexOf("/");=0A=
splitchr=3D"/";=0A=
if(isplit=3D=3D-1){=0A=
isplit=3D_10.indexOf(".");=0A=
splitchr=3D".";=0A=
}=0A=
if(isplit=3D=3D-1){=0A=
isplit=3D_10.indexOf("-");=0A=
splitchr=3D"-";=0A=
}=0A=
if(isplit=3D=3D-1||isplit=3D=3D_10.length){=0A=
return false;=0A=
}=0A=
var _12=3D_10.substring(0,isplit);=0A=
if(_12.length=3D=3D4){=0A=
sYear=3D_10.substring(0,isplit);=0A=
isplit=3D_10.indexOf(splitchr,isplit+1);=0A=
if(isplit=3D=3D-1||(isplit+1)=3D=3D_10.length){=0A=
return false;=0A=
}=0A=
sMonth=3D_10.substring((sYear.length+1),isplit);=0A=
sDay=3D_10.substring(isplit+1);=0A=
}else{=0A=
sMonth=3D_10.substring(0,isplit);=0A=
isplit=3D_10.indexOf(splitchr,isplit+1);=0A=
if(isplit=3D=3D-1||(isplit+1)=3D=3D_10.length){=0A=
return false;=0A=
}=0A=
sDay=3D_10.substring((sMonth.length+1),isplit);=0A=
sYear=3D_10.substring(isplit+1);=0A=
}=0A=
if((sDay.length=3D=3D0)||(sMonth.length=3D=3D0)||(sYear.length=3D=3D0)){=0A=
return false;=0A=
}=0A=
if(!_CF_checkinteger(sMonth)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkrange(sMonth,1,12)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkinteger(sYear)){=0A=
return false;=0A=
}else{=0A=
if(sYear.length!=3D1&&sYear.length!=3D2&&sYear.length!=3D4){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkrange(sYear,0,9999)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkinteger(sDay)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkday(sYear,sMonth,sDay)){=0A=
return false;=0A=
}else{=0A=
return true;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
};=0A=
_CF_checkeurodate=3Dfunction(_13,_14){=0A=
_13=3D_13.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
_13=3D_13=3D_13.replace(/{d \'/,"").replace(/'}/,"");=0A=
if(_14){=0A=
if(_13.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_13.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
isplit=3D_13.indexOf("/");=0A=
splitchr=3D"/";=0A=
if(isplit=3D=3D-1){=0A=
isplit=3D_13.indexOf(".");=0A=
splitchr=3D".";=0A=
}=0A=
if(isplit=3D=3D-1){=0A=
isplit=3D_13.indexOf("-");=0A=
splitchr=3D"-";=0A=
}=0A=
if(isplit=3D=3D-1||isplit=3D=3D_13.length){=0A=
return false;=0A=
}=0A=
var _15=3D_13.substring(0,isplit);=0A=
if(_15.length=3D=3D4){=0A=
sYear=3D_13.substring(0,isplit);=0A=
isplit=3D_13.indexOf(splitchr,isplit+1);=0A=
if(isplit=3D=3D-1||(isplit+1)=3D=3D_13.length){=0A=
return false;=0A=
}=0A=
sMonth=3D_13.substring((sYear.length+1),isplit);=0A=
sDay=3D_13.substring(isplit+1);=0A=
}else{=0A=
sDay=3D_13.substring(0,isplit);=0A=
isplit=3D_13.indexOf(splitchr,isplit+1);=0A=
if(isplit=3D=3D-1||(isplit+1)=3D=3D_13.length){=0A=
return false;=0A=
}=0A=
sMonth=3D_13.substring((sDay.length+1),isplit);=0A=
sYear=3D_13.substring(isplit+1);=0A=
}=0A=
if(!_CF_checkinteger(sMonth)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkrange(sMonth,1,12)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkinteger(sYear)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkrange(sYear,0,null)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkinteger(sDay)){=0A=
return false;=0A=
}else{=0A=
if(!_CF_checkday(sYear,sMonth,sDay)){=0A=
return false;=0A=
}else{=0A=
return true;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
};=0A=
_CF_checkday=3Dfunction(_16,_17,_18){=0A=
maxDay=3D31;=0A=
if(_17=3D=3D4||_17=3D=3D6||_17=3D=3D9||_17=3D=3D11){=0A=
maxDay=3D30;=0A=
}else{=0A=
if(_17=3D=3D2){=0A=
if(_16%4>0){=0A=
maxDay=3D28;=0A=
}else{=0A=
if(_16%100=3D=3D0&&_16%400>0){=0A=
maxDay=3D28;=0A=
}else{=0A=
maxDay=3D29;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
return _CF_checkrange(_18,1,maxDay);=0A=
};=0A=
_CF_checkinteger=3Dfunction(_19,_1a){=0A=
_19=3D_19.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
_19=3D_19.replace(/[$=C2=A3=C2=A5=E2=82=AC,~+]?/g,"");=0A=
if(_1a){=0A=
if(_19.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_19.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
var _1b=3D".";=0A=
var _1c=3D_19.indexOf(_1b);=0A=
if(_1c=3D=3D-1){=0A=
return _CF_checknumber(_19);=0A=
}else{=0A=
return false;=0A=
}=0A=
};=0A=
_CF_numberrange=3Dfunction(_1d,_1e,_1f,_20){=0A=
if(_20){=0A=
if(_1d.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_1d.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
if(_1e!=3Dnull){=0A=
if(_1d<_1e){=0A=
return false;=0A=
}=0A=
}=0A=
if(_1f!=3Dnull){=0A=
if(_1d>_1f){=0A=
return false;=0A=
}=0A=
}=0A=
return true;=0A=
};=0A=
_CF_checknumber=3Dfunction(_21,_22){=0A=
var _23=3D" .+-0123456789";=0A=
var _24=3D" .0123456789";=0A=
var _25;=0A=
var _26=3Dfalse;=0A=
var _27=3Dfalse;=0A=
var _28=3Dfalse;=0A=
_21=3D_21.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
_21=3D_21.replace(/[$=C2=A3=C2=A5=E2=82=AC,~+]?/g,"");=0A=
if(_22){=0A=
if(_21.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_21.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
_25=3D_23.indexOf(_21.charAt(0));=0A=
if(_25=3D=3D1){=0A=
_26=3Dtrue;=0A=
}else{=0A=
if(_25<1){=0A=
return false;=0A=
}=0A=
}=0A=
for(var i=3D1;i<_21.length;i++){=0A=
_25=3D_24.indexOf(_21.charAt(i));=0A=
if(_25<0){=0A=
return false;=0A=
}else{=0A=
if(_25=3D=3D1){=0A=
if(_26){=0A=
return false;=0A=
}else{=0A=
_26=3Dtrue;=0A=
}=0A=
}else{=0A=
if(_25=3D=3D0){=0A=
if(_26||_28){=0A=
_27=3Dtrue;=0A=
}=0A=
}else{=0A=
if(_27){=0A=
return false;=0A=
}else{=0A=
_28=3Dtrue;=0A=
}=0A=
}=0A=
}=0A=
}=0A=
}=0A=
return true;=0A=
};=0A=
_CF_checkrange=3Dfunction(_2a,_2b,_2c,_2d){=0A=
_2a=3D_2a.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_2d){=0A=
if(_2a.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_2a.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
if(!_CF_checknumber(_2a)){=0A=
return false;=0A=
}else{=0A=
return (_CF_numberrange((eval(_2a)),_2b,_2c));=0A=
}=0A=
return true;=0A=
};=0A=
_CF_checktime=3Dfunction(_2e,_2f){=0A=
_2e=3D_2e.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
_2e=3D_2e.replace(/\s+:\s+/,":");=0A=
_2e=3D_2e=3D_2e.replace(/{t \'/,"").replace(/'}/,"");=0A=
if(_2f){=0A=
if(_2e.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_2e.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
var =
_30=3D_CF_checkregex(_2e,/^((([0-1]?\d)|(2[0-3])):[0-5]?\d)?(:[0-5]?\d)? =
?([AP]M|[AP]m|[ap]m|[ap]M)?$/,_2f);=0A=
return _30;=0A=
};=0A=
_CF_checkphone=3Dfunction(_31,_32){=0A=
_31=3D_31.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_32){=0A=
if(_31.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_31.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
if(_31.length=3D=3D0){=0A=
return true;=0A=
}=0A=
return _CF_checkregex(_31,/^(((1))?[ =
,\-,\.]?([\\(]?([1-9][0-9]{2})[\\)]?))?[ ,\-,\.]?([^0-1]){1}([0-9]){2}[ =
,\-,\.]?([0-9]){4}(( )((x){0,1}([0-9]){1,5}){0,1})?$/,_32);=0A=
};=0A=
_CF_checkzip=3Dfunction(_33,_34){=0A=
_33=3D_33.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_34){=0A=
if(_33.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_33.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
return _CF_checkregex(_33,/^([0-9]){5,5}$|(([0-9]){5,5}(-| =
){1}([0-9]){4,4}$)/,_34);=0A=
};=0A=
_CF_checkcreditcard=3Dfunction(_35,_36){=0A=
_35=3D_35.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_36){=0A=
if(_35.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_35.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
if(_35.length=3D=3D0){=0A=
return true;=0A=
}=0A=
var _37=3D" -";=0A=
var _38=3D"";=0A=
var _39;=0A=
for(var i=3D0;i<_35.length;i++){=0A=
_39=3D_37.indexOf(_35.charAt(i));=0A=
if(_39<0){=0A=
_38+=3D_35.substring(i,(i+1));=0A=
}=0A=
}=0A=
if(_38.length<13||_38.length>19){=0A=
return false;=0A=
}=0A=
if(_38.charAt(0)=3D=3D"+"){=0A=
return false;=0A=
}=0A=
if(!_CF_checkinteger(_38)){=0A=
return false;=0A=
}=0A=
var _3b=3D_38.length%2=3D=3D1?false:true;=0A=
var _3c=3D0;=0A=
var _3d;=0A=
for(var i=3D0;i<_38.length;i++){=0A=
_3d=3Deval(_38.charAt(i));=0A=
if(_3b){=0A=
_3d*=3D2;=0A=
_3c+=3D(_3d%10);=0A=
if((_3d/10)>=3D1){=0A=
_3c++;=0A=
}=0A=
_3b=3Dfalse;=0A=
}else{=0A=
_3c+=3D_3d;=0A=
_3b=3Dtrue;=0A=
}=0A=
}=0A=
return (_3c%10)=3D=3D0?true:false;=0A=
};=0A=
_CF_checkssn=3Dfunction(_3e,_3f){=0A=
_3e=3D_3e.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_3f){=0A=
if(_3e.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_3e.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
return _CF_checkregex(_3e,/^[0-9]{3}(-| )[0-9]{2}(-| )[0-9]{4}$/,_3f);=0A=
};=0A=
_CF_checkEmail=3Dfunction(_40,_41){=0A=
_40=3D_40.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_41){=0A=
if(_40.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_40.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
return =
_CF_checkregex(_40,/^[a-zA-Z_0-9-'\+~]+(\.[a-zA-Z_0-9-'\+~]+)*@([a-zA-Z_0=
-9-]+\.)+[a-zA-Z]{2,7}$/,_41);=0A=
};=0A=
_CF_checkURL=3Dfunction(_42,_43){=0A=
_42=3D_42.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_43){=0A=
if(_42.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_42.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
return =
_CF_checkregex(_42.toLowerCase(),/^((http|https|ftp|file)\:\/\/([a-zA-Z0-=
0]*:[a-zA-Z0-0]*(@))?[a-zA-Z0-9-\.]+(\.[a-zA-Z]{2,3})?(:[a-zA-Z0-9]*)?\/?=
([a-zA-Z0-9-\._\?\,\'\/\+&amp;%\$#\=3D~])*)|((mailto)\:[a-zA-Z0-9-]+(\.[a=
-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,7})|((news)\:[a-zA-Z0-9\.]*=
)$/,_43);=0A=
};=0A=
_CF_checkUUID=3Dfunction(_44,_45){=0A=
_44=3D_44.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_45){=0A=
if(_44.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_44.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
return =
_CF_checkregex(_44,/[A-Fa-f0-9]{8,8}-[A-Fa-f0-9]{4,4}-[A-Fa-f0-9]{4,4}-[A=
-Fa-f0-9]{16,16}/,_45);=0A=
};=0A=
_CF_checkGUID=3Dfunction(_46,_47){=0A=
_46=3D_46.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_47){=0A=
if(_46.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_46.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
return =
_CF_checkregex(_46,/[A-Fa-f0-9]{8,8}-[A-Fa-f0-9]{4,4}-[A-Fa-f0-9]{4,4}-[A=
-Fa-f0-9]{4,4}-[A-Fa-f0-9]{12,12}/,_47);=0A=
};=0A=
_CF_checkBoolean=3Dfunction(_48,_49){=0A=
_48=3D_48.replace(/^\s+/,"").replace(/\s+$/,"");=0A=
if(_49){=0A=
if(_48.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_48.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
if(_48.toUpperCase()=3D=3D"TRUE"||_48.toUpperCase()=3D=3D"YES"||(_CF_chec=
knumber(_48)&&_48!=3D"0")){=0A=
return true;=0A=
}else{=0A=
if(_48.toUpperCase()=3D=3D"FALSE"||_48.toUpperCase()=3D=3D"NO"||_48=3D=3D=
"0"){=0A=
return true;=0A=
}else{=0A=
return false;=0A=
}=0A=
}=0A=
};=0A=
_CF_setFormParam=3Dfunction(_4a,_4b,_4c){=0A=
var _4d=3D"document['"+_4a+"']['"+_4b+"']";=0A=
var obj=3Deval(_4d);=0A=
if(obj=3D=3Dundefined){=0A=
return false;=0A=
}else{=0A=
obj.value=3D_4c;=0A=
return true;=0A=
}=0A=
};=0A=
_CF_checkregex=3Dfunction(_4f,_50,_51){=0A=
if(_51){=0A=
if(_4f.length=3D=3D0){=0A=
return false;=0A=
}=0A=
}else{=0A=
if(_4f.length=3D=3D0){=0A=
return true;=0A=
}=0A=
}=0A=
return _50.test(_4f);=0A=
};=0A=

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: application/octet-stream
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/CFIDE/scripts/masks.js

/*ADOBE SYSTEMS INCORPORATED=0A=
Copyright 2007 Adobe Systems Incorporated=0A=
All Rights Reserved.=0A=
=0A=
NOTICE:  Adobe permits you to use, modify, and distribute this file in =
accordance with the=0A=
terms of the Adobe license agreement accompanying it.  If you have =
received this file from a=0A=
source other than Adobe, then your use, modification, or distribution of =
it requires the prior=0A=
written permission of Adobe.*/=0A=
var KT_focusedEl=3Dnull;=0A=
KT_validateSingle=3Dfunction(_52,_53){=0A=
var _54=3D_52.charCodeAt(0);=0A=
switch(_53){=0A=
case "9":=0A=
if(_54<58&&_54>47){=0A=
return true;=0A=
}=0A=
break;=0A=
case "A":=0A=
if((_54<91&&_54>64)||(_54<123&&_54>96)){=0A=
return true;=0A=
}=0A=
break;=0A=
case "X":=0A=
if((_54<91&&_54>64)||(_54<123&&_54>96)||(_54<58&&_54>47)){=0A=
return true;=0A=
}=0A=
break;=0A=
case "?":=0A=
return true;=0A=
break;=0A=
default:=0A=
return true;=0A=
break;=0A=
}=0A=
};=0A=
KT_maskDefaultValue=3Dfunction(_55){=0A=
switch(_55){=0A=
case "9":=0A=
return "0";=0A=
break;=0A=
case "A":=0A=
return "a";=0A=
break;=0A=
case "X":=0A=
return "0";=0A=
break;=0A=
case "?":=0A=
return "0";=0A=
break;=0A=
default:=0A=
return "0";=0A=
break;=0A=
}=0A=
};=0A=
KT_isSpecialChar=3Dfunction(_56){=0A=
if(_56=3D=3D"9"||_56=3D=3D"A"||_56=3D=3D"X"||_56=3D=3D"?"){=0A=
return true;=0A=
}else{=0A=
return false;=0A=
}=0A=
};=0A=
mask_onValueChanged=3Dfunction(){=0A=
if((typeof window.getSelection=3D=3D"undefined"&&typeof =
document.selection=3D=3D"undefined")){=0A=
return;=0A=
}=0A=
if(KT_focusedEl=3D=3Dnull||KT_focusedEl.mask=3D=3Dnull||KT_focusedEl.mask=
=3D=3D""){=0A=
return;=0A=
}=0A=
var _57=3DKT_focusedEl.mask;=0A=
var val=3DKT_focusedEl.value;=0A=
var i=3D0;=0A=
var _5a=3Dfalse;=0A=
if(val=3D=3DKT_focusedEl.oldText){=0A=
return;=0A=
}=0A=
if(val.length>_57.length){=0A=
val=3Dval.substr(0,_57.length);=0A=
_5a=3Dtrue;=0A=
}=0A=
for(;i<_57.length;i++){=0A=
if(val.charCodeAt(i).toString()!=3D"NaN"){=0A=
if(KT_isSpecialChar(_57.charAt(i))){=0A=
if(KT_validateSingle(val.charAt(i),_57.charAt(i))){=0A=
continue;=0A=
}else{=0A=
val=3DKT_focusedEl.oldText;=0A=
i=3D_57.length;=0A=
break;=0A=
}=0A=
}else{=0A=
if(val.charAt(i)!=3D_57.charAt(i)){=0A=
if(i=3D=3Dval.length-1){=0A=
var _5b=3Dval.substr(val.length-1,val.length);=0A=
val=3Dval.substr(0,val.length-1)+_57.charAt(i)+_5b;=0A=
_5a=3Dtrue;=0A=
continue;=0A=
}else{=0A=
val=3DKT_focusedEl.oldText;=0A=
i=3D_57.length;=0A=
}=0A=
break;=0A=
}=0A=
}=0A=
}else{=0A=
if(val.length<KT_focusedEl.oldText.length){=0A=
break;=0A=
}=0A=
for(;i<_57.length;i++){=0A=
if(!KT_isSpecialChar(_57.charAt(i))){=0A=
val+=3D_57.charAt(i);=0A=
_5a=3Dtrue;=0A=
}else{=0A=
break;=0A=
}=0A=
}=0A=
break;=0A=
}=0A=
}=0A=
if(val.length>_57.length){=0A=
val=3Dval.substr(0,_57.length);=0A=
_5a=3Dtrue;=0A=
}=0A=
if(KT_focusedEl.value!=3Dval){=0A=
KT_focusedEl.value=3Dval;=0A=
}=0A=
KT_focusedEl.oldText=3Dval;=0A=
if(_5a){=0A=
}=0A=
};=0A=
mask_parseFirstTime=3Dfunction(_5c,_5d){=0A=
var _5e=3D"";=0A=
var _5f=3D"";=0A=
cond=3D1;=0A=
imask=3D0;=0A=
ival=3D0;=0A=
cnt=3D0;=0A=
while(cond=3D=3D1){=0A=
cond=3D1;=0A=
if(!KT_isSpecialChar(_5d.charAt(imask))){=0A=
if(_5c.charCodeAt(ival).toString()!=3D"NaN"){=0A=
if(_5d.charAt(imask)=3D=3D_5c.charAt(ival)){=0A=
imask++;=0A=
ival++;=0A=
}else{=0A=
_5c=3D_5c.substr(0,ival)+_5d.charAt(imask)+_5c.substr(ival,_5c.length);=0A=
imask=3D0;=0A=
ival=3D0;=0A=
cond=3D1;=0A=
}=0A=
}else{=0A=
_5c+=3DKT_maskDefaultValue(_5d.charAt(imask));=0A=
}=0A=
}else{=0A=
imask++;=0A=
ival++;=0A=
}=0A=
if(imask>=3D_5d.length||ival>=3D_5c.length){=0A=
cond=3D0;=0A=
}=0A=
}=0A=
for(i=3D0;i<_5d.length;i++){=0A=
if(KT_isSpecialChar(_5d.charAt(i))){=0A=
_5e+=3D_5d.charAt(i);=0A=
if(_5c.charCodeAt(i).toString()!=3D"NaN"){=0A=
_5f+=3D_5c.charAt(i);=0A=
}else{=0A=
_5f+=3DKT_maskDefaultValue(_5d.charAt(i));=0A=
}=0A=
}=0A=
}=0A=
oldvalue=3D_5c;=0A=
_5c=3D_5f;=0A=
var _60=3D"";=0A=
for(i=3D0;i<_5e.length;i++){=0A=
if(!KT_validateSingle(_5c.charAt(i),_5e.charAt(i))){=0A=
_60+=3DKT_maskDefaultValue(_5e.charAt(i));=0A=
}else{=0A=
_60+=3D_5c.charAt(i);=0A=
}=0A=
}=0A=
var _61=3D"";=0A=
var j=3D0;=0A=
for(i=3D0;i<_5d.length;i++){=0A=
if(KT_isSpecialChar(_5d.charAt(i))){=0A=
_61+=3D_60.charAt(j++);=0A=
}else{=0A=
_61+=3D_5d.charAt(i);=0A=
}=0A=
}=0A=
return _61;=0A=
};=0A=
mask_onSetFocus=3Dfunction(obj,_64){=0A=
if((typeof window.getSelection=3D=3D"undefined"&&typeof =
document.selection=3D=3D"undefined")){=0A=
return;=0A=
}=0A=
if(typeof obj.mask=3D=3D"undefined"){=0A=
ret=3D"";=0A=
if(obj.value!=3D""){=0A=
ret=3Dmask_parseFirstTime(obj.value,_64);=0A=
}=0A=
obj.value=3Dret;=0A=
obj.mask=3D_64;=0A=
}=0A=
KT_focusedEl=3Dobj;=0A=
if(typeof KT_focusedEl.oldText=3D=3D"undefined"){=0A=
KT_focusedEl.oldText=3Dobj.value;=0A=
mask_onValueChanged();=0A=
}=0A=
};=0A=
mask_onKillFocus=3Dfunction(){=0A=
if((typeof window.getSelection=3D=3D"undefined"&&typeof =
document.selection=3D=3D"undefined")){=0A=
return;=0A=
}=0A=
mask_onValueChanged();=0A=
KT_focusedEl=3Dnull;=0A=
};=0A=

------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: application/octet-stream
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/ind_4h/lightwindow/javascript/prototype.js

/*  Prototype JavaScript framework, version 1.5.1.1
 *  (c) 2005-2007 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style =
license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
/*-----------------------------------------------------------------------=
---*/

var Prototype =3D {
  Version: '1.5.1.1',

  Browser: {
    IE:     !!(window.attachEvent && !window.opera),
    Opera:  !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && =
navigator.userAgent.indexOf('KHTML') =3D=3D -1
  },

  BrowserFeatures: {
    XPath: !!document.evaluate,
    ElementExtensions: !!window.HTMLElement,
    SpecificElementExtensions:
      (document.createElement('div').__proto__ !=3D=3D
       document.createElement('form').__proto__)
  },

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,

  emptyFunction: function() { },
  K: function(x) { return x }
}

var Class =3D {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Abstract =3D new Object();

Object.extend =3D function(destination, source) {
  for (var property in source) {
    destination[property] =3D source[property];
  }
  return destination;
}

Object.extend(Object, {
  inspect: function(object) {
    try {
      if (object =3D=3D=3D undefined) return 'undefined';
      if (object =3D=3D=3D null) return 'null';
      return object.inspect ? object.inspect() : object.toString();
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  },

  toJSON: function(object) {
    var type =3D typeof object;
    switch(type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': return object.toString();
    }
    if (object =3D=3D=3D null) return 'null';
    if (object.toJSON) return object.toJSON();
    if (object.ownerDocument =3D=3D=3D document) return;
    var results =3D [];
    for (var property in object) {
      var value =3D Object.toJSON(object[property]);
      if (value !=3D=3D undefined)
        results.push(property.toJSON() + ': ' + value);
    }
    return '{' + results.join(', ') + '}';
  },

  keys: function(object) {
    var keys =3D [];
    for (var property in object)
      keys.push(property);
    return keys;
  },

  values: function(object) {
    var values =3D [];
    for (var property in object)
      values.push(object[property]);
    return values;
  },

  clone: function(object) {
    return Object.extend({}, object);
  }
});

Function.prototype.bind =3D function() {
  var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener =3D function(object) {
  var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();
  return function(event) {
    return __method.apply(object, [event || window.event].concat(args));
  }
}

Object.extend(Number.prototype, {
  toColorPart: function() {
    return this.toPaddedString(2, 16);
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  },

  toPaddedString: function(length, radix) {
    var string =3D this.toString(radix || 10);
    return '0'.times(length - string.length) + string;
  },

  toJSON: function() {
    return isFinite(this) ? this.toString() : 'null';
  }
});

Date.prototype.toJSON =3D function() {
  return '"' + this.getFullYear() + '-' +
    (this.getMonth() + 1).toPaddedString(2) + '-' +
    this.getDate().toPaddedString(2) + 'T' +
    this.getHours().toPaddedString(2) + ':' +
    this.getMinutes().toPaddedString(2) + ':' +
    this.getSeconds().toPaddedString(2) + '"';
};

var Try =3D {
  these: function() {
    var returnValue;

    for (var i =3D 0, length =3D arguments.length; i < length; i++) {
      var lambda =3D arguments[i];
      try {
        returnValue =3D lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
}

/*-----------------------------------------------------------------------=
---*/

var PeriodicalExecuter =3D Class.create();
PeriodicalExecuter.prototype =3D {
  initialize: function(callback, frequency) {
    this.callback =3D callback;
    this.frequency =3D frequency;
    this.currentlyExecuting =3D false;

    this.registerCallback();
  },

  registerCallback: function() {
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);
  },

  stop: function() {
    if (!this.timer) return;
    clearInterval(this.timer);
    this.timer =3D null;
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting =3D true;
        this.callback(this);
      } finally {
        this.currentlyExecuting =3D false;
      }
    }
  }
}
Object.extend(String, {
  interpret: function(value) {
    return value =3D=3D null ? '' : String(value);
  },
  specialChar: {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '\\': '\\\\'
  }
});

Object.extend(String.prototype, {
  gsub: function(pattern, replacement) {
    var result =3D '', source =3D this, match;
    replacement =3D arguments.callee.prepareReplacement(replacement);

    while (source.length > 0) {
      if (match =3D source.match(pattern)) {
        result +=3D source.slice(0, match.index);
        result +=3D String.interpret(replacement(match));
        source  =3D source.slice(match.index + match[0].length);
      } else {
        result +=3D source, source =3D '';
      }
    }
    return result;
  },

  sub: function(pattern, replacement, count) {
    replacement =3D this.gsub.prepareReplacement(replacement);
    count =3D count =3D=3D=3D undefined ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  },

  scan: function(pattern, iterator) {
    this.gsub(pattern, iterator);
    return this;
  },

  truncate: function(length, truncation) {
    length =3D length || 30;
    truncation =3D truncation =3D=3D=3D undefined ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : this;
  },

  strip: function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  },

  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), =
'');
  },

  extractScripts: function() {
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(function(script) { return =
eval(script) });
  },

  escapeHTML: function() {
    var self =3D arguments.callee;
    self.text.data =3D this;
    return self.div.innerHTML;
  },

  unescapeHTML: function() {
    var div =3D document.createElement('div');
    div.innerHTML =3D this.stripTags();
    return div.childNodes[0] ? (div.childNodes.length > 1 ?
      $A(div.childNodes).inject('', function(memo, node) { return =
memo+node.nodeValue }) :
      div.childNodes[0].nodeValue) : '';
  },

  toQueryParams: function(separator) {
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return {};

    return match[1].split(separator || '&').inject({}, function(hash, =
pair) {
      if ((pair =3D pair.split('=3D'))[0]) {
        var key =3D decodeURIComponent(pair.shift());
        var value =3D pair.length > 1 ? pair.join('=3D') : pair[0];
        if (value !=3D undefined) value =3D decodeURIComponent(value);

        if (key in hash) {
          if (hash[key].constructor !=3D Array) hash[key] =3D =
[hash[key]];
          hash[key].push(value);
        }
        else hash[key] =3D value;
      }
      return hash;
    });
  },

  toArray: function() {
    return this.split('');
  },

  succ: function() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  },

  times: function(count) {
    var result =3D '';
    for (var i =3D 0; i < count; i++) result +=3D this;
    return result;
  },

  camelize: function() {
    var parts =3D this.split('-'), len =3D parts.length;
    if (len =3D=3D 1) return parts[0];

    var camelized =3D this.charAt(0) =3D=3D '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i =3D 1; i < len; i++)
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);

    return camelized;
  },

  capitalize: function() {
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();
  },

  underscore: function() {
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();
  },

  dasherize: function() {
    return this.gsub(/_/,'-');
  },

  inspect: function(useDoubleQuotes) {
    var escapedString =3D this.gsub(/[\x00-\x1f\\]/, function(match) {
      var character =3D String.specialChar[match[0]];
      return character ? character : '\\u00' + =
match[0].charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') =
+ '"';
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  },

  toJSON: function() {
    return this.inspect(true);
  },

  unfilterJSON: function(filter) {
    return this.sub(filter || Prototype.JSONFilter, '#{1}');
  },

  isJSON: function() {
    var str =3D this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
  },

  evalJSON: function(sanitize) {
    var json =3D this.unfilterJSON();
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + =
this.inspect());
  },

  include: function(pattern) {
    return this.indexOf(pattern) > -1;
  },

  startsWith: function(pattern) {
    return this.indexOf(pattern) =3D=3D=3D 0;
  },

  endsWith: function(pattern) {
    var d =3D this.length - pattern.length;
    return d >=3D 0 && this.lastIndexOf(pattern) =3D=3D=3D d;
  },

  empty: function() {
    return this =3D=3D '';
  },

  blank: function() {
    return /^\s*$/.test(this);
  }
});

if (Prototype.Browser.WebKit || Prototype.Browser.IE) =
Object.extend(String.prototype, {
  escapeHTML: function() {
    return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  },
  unescapeHTML: function() {
    return =
this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
  }
});

String.prototype.gsub.prepareReplacement =3D function(replacement) {
  if (typeof replacement =3D=3D 'function') return replacement;
  var template =3D new Template(replacement);
  return function(match) { return template.evaluate(match) };
}

String.prototype.parseQuery =3D String.prototype.toQueryParams;

Object.extend(String.prototype.escapeHTML, {
  div:  document.createElement('div'),
  text: document.createTextNode('')
});

with (String.prototype.escapeHTML) div.appendChild(text);

var Template =3D Class.create();
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;
Template.prototype =3D {
  initialize: function(template, pattern) {
    this.template =3D template.toString();
    this.pattern  =3D pattern || Template.Pattern;
  },

  evaluate: function(object) {
    return this.template.gsub(this.pattern, function(match) {
      var before =3D match[1];
      if (before =3D=3D '\\') return match[2];
      return before + String.interpret(object[match[3]]);
    });
  }
}

var $break =3D {}, $continue =3D new Error('"throw $continue" is =
deprecated, use "return" instead');

var Enumerable =3D {
  each: function(iterator) {
    var index =3D 0;
    try {
      this._each(function(value) {
        iterator(value, index++);
      });
    } catch (e) {
      if (e !=3D $break) throw e;
    }
    return this;
  },

  eachSlice: function(number, iterator) {
    var index =3D -number, slices =3D [], array =3D this.toArray();
    while ((index +=3D number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.map(iterator);
  },

  all: function(iterator) {
    var result =3D true;
    this.each(function(value, index) {
      result =3D result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator) {
    var result =3D false;
    this.each(function(value, index) {
      if (result =3D !!(iterator || Prototype.K)(value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator) {
    var results =3D [];
    this.each(function(value, index) {
      results.push((iterator || Prototype.K)(value, index));
    });
    return results;
  },

  detect: function(iterator) {
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result =3D value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator) {
    var results =3D [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(pattern, iterator) {
    var results =3D [];
    this.each(function(value, index) {
      var stringValue =3D value.toString();
      if (stringValue.match(pattern))
        results.push((iterator || Prototype.K)(value, index));
    })
    return results;
  },

  include: function(object) {
    var found =3D false;
    this.each(function(value) {
      if (value =3D=3D object) {
        found =3D true;
        throw $break;
      }
    });
    return found;
  },

  inGroupsOf: function(number, fillWith) {
    fillWith =3D fillWith =3D=3D=3D undefined ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  },

  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo =3D iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args =3D $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value =3D (iterator || Prototype.K)(value, index);
      if (result =3D=3D undefined || value >=3D result)
        result =3D value;
    });
    return result;
  },

  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value =3D (iterator || Prototype.K)(value, index);
      if (result =3D=3D undefined || value < result)
        result =3D value;
    });
    return result;
  },

  partition: function(iterator) {
    var trues =3D [], falses =3D [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results =3D [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator) {
    var results =3D [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator) {
    return this.map(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a =3D left.criteria, b =3D right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.map();
  },

  zip: function() {
    var iterator =3D Prototype.K, args =3D $A(arguments);
    if (typeof args.last() =3D=3D 'function')
      iterator =3D args.pop();

    var collections =3D [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  },

  size: function() {
    return this.toArray().length;
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
}

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});
var $A =3D Array.from =3D function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results =3D [];
    for (var i =3D 0, length =3D iterable.length; i < length; i++)
      results.push(iterable[i]);
    return results;
  }
}

if (Prototype.Browser.WebKit) {
  $A =3D Array.from =3D function(iterable) {
    if (!iterable) return [];
    if (!(typeof iterable =3D=3D 'function' && iterable =3D=3D '[object =
NodeList]') &&
      iterable.toArray) {
      return iterable.toArray();
    } else {
      var results =3D [];
      for (var i =3D 0, length =3D iterable.length; i < length; i++)
        results.push(iterable[i]);
      return results;
    }
  }
}

Object.extend(Array.prototype, Enumerable);

if (!Array.prototype._reverse)
  Array.prototype._reverse =3D Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i =3D 0, length =3D this.length; i < length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length =3D 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value !=3D null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(value && value.constructor =3D=3D Array ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values =3D $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  indexOf: function(object) {
    for (var i =3D 0, length =3D this.length; i < length; i++)
      if (this[i] =3D=3D object) return i;
    return -1;
  },

  reverse: function(inline) {
    return (inline !=3D=3D false ? this : this.toArray())._reverse();
  },

  reduce: function() {
    return this.length > 1 ? this : this[0];
  },

  uniq: function(sorted) {
    return this.inject([], function(array, value, index) {
      if (0 =3D=3D index || (sorted ? array.last() !=3D value : =
!array.include(value)))
        array.push(value);
      return array;
    });
  },

  clone: function() {
    return [].concat(this);
  },

  size: function() {
    return this.length;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  },

  toJSON: function() {
    var results =3D [];
    this.each(function(object) {
      var value =3D Object.toJSON(object);
      if (value !=3D=3D undefined) results.push(value);
    });
    return '[' + results.join(', ') + ']';
  }
});

Array.prototype.toArray =3D Array.prototype.clone;

function $w(string) {
  string =3D string.strip();
  return string ? string.split(/\s+/) : [];
}

if (Prototype.Browser.Opera){
  Array.prototype.concat =3D function() {
    var array =3D [];
    for (var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {
      if (arguments[i].constructor =3D=3D Array) {
        for (var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)
          array.push(arguments[i][j]);
      } else {
        array.push(arguments[i]);
      }
    }
    return array;
  }
}
var Hash =3D function(object) {
  if (object instanceof Hash) this.merge(object);
  else Object.extend(this, object || {});
};

Object.extend(Hash, {
  toQueryString: function(obj) {
    var parts =3D [];
    parts.add =3D arguments.callee.addPair;

    this.prototype._each.call(obj, function(pair) {
      if (!pair.key) return;
      var value =3D pair.value;

      if (value && typeof value =3D=3D 'object') {
        if (value.constructor =3D=3D Array) value.each(function(value) {
          parts.add(pair.key, value);
        });
        return;
      }
      parts.add(pair.key, value);
    });

    return parts.join('&');
  },

  toJSON: function(object) {
    var results =3D [];
    this.prototype._each.call(object, function(pair) {
      var value =3D Object.toJSON(pair.value);
      if (value !=3D=3D undefined) results.push(pair.key.toJSON() + ': ' =
+ value);
    });
    return '{' + results.join(', ') + '}';
  }
});

Hash.toQueryString.addPair =3D function(key, value, prefix) {
  key =3D encodeURIComponent(key);
  if (value =3D=3D=3D undefined) this.push(key);
  else this.push(key + '=3D' + (value =3D=3D null ? '' : =
encodeURIComponent(value)));
}

Object.extend(Hash.prototype, Enumerable);
Object.extend(Hash.prototype, {
  _each: function(iterator) {
    for (var key in this) {
      var value =3D this[key];
      if (value && value =3D=3D Hash.prototype[key]) continue;

      var pair =3D [key, value];
      pair.key =3D key;
      pair.value =3D value;
      iterator(pair);
    }
  },

  keys: function() {
    return this.pluck('key');
  },

  values: function() {
    return this.pluck('value');
  },

  merge: function(hash) {
    return $H(hash).inject(this, function(mergedHash, pair) {
      mergedHash[pair.key] =3D pair.value;
      return mergedHash;
    });
  },

  remove: function() {
    var result;
    for(var i =3D 0, length =3D arguments.length; i < length; i++) {
      var value =3D this[arguments[i]];
      if (value !=3D=3D undefined){
        if (result =3D=3D=3D undefined) result =3D value;
        else {
          if (result.constructor !=3D Array) result =3D [result];
          result.push(value)
        }
      }
      delete this[arguments[i]];
    }
    return result;
  },

  toQueryString: function() {
    return Hash.toQueryString(this);
  },

  inspect: function() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  },

  toJSON: function() {
    return Hash.toJSON(this);
  }
});

function $H(object) {
  if (object instanceof Hash) return object;
  return new Hash(object);
};

// Safari iterates over shadowed properties
if (function() {
  var i =3D 0, Test =3D function(value) { this.key =3D value };
  Test.prototype.key =3D 'foo';
  for (var property in new Test('bar')) i++;
  return i > 1;
}()) Hash.prototype._each =3D function(iterator) {
  var cache =3D [];
  for (var key in this) {
    var value =3D this[key];
    if ((value && value =3D=3D Hash.prototype[key]) || =
cache.include(key)) continue;
    cache.push(key);
    var pair =3D [key, value];
    pair.key =3D key;
    pair.value =3D value;
    iterator(pair);
  }
};
ObjectRange =3D Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
  initialize: function(start, end, exclusive) {
    this.start =3D start;
    this.end =3D end;
    this.exclusive =3D exclusive;
  },

  _each: function(iterator) {
    var value =3D this.start;
    while (this.include(value)) {
      iterator(value);
      value =3D value.succ();
    }
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <=3D this.end;
  }
});

var $R =3D function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var Ajax =3D {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
}

Ajax.Responders =3D {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responder) {
    if (!this.include(responder))
      this.responders.push(responder);
  },

  unregister: function(responder) {
    this.responders =3D this.responders.without(responder);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (typeof responder[callback] =3D=3D 'function') {
        try {
          responder[callback].apply(responder, [request, transport, =
json]);
        } catch (e) {}
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;
  },
  onComplete: function() {
    Ajax.activeRequestCount--;
  }
});

Ajax.Base =3D function() {};
Ajax.Base.prototype =3D {
  setOptions: function(options) {
    this.options =3D {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      encoding:     'UTF-8',
      parameters:   ''
    }
    Object.extend(this.options, options || {});

    this.options.method =3D this.options.method.toLowerCase();
    if (typeof this.options.parameters =3D=3D 'string')
      this.options.parameters =3D =
this.options.parameters.toQueryParams();
  }
}

Ajax.Request =3D Class.create();
Ajax.Request.Events =3D
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Request.prototype =3D Object.extend(new Ajax.Base(), {
  _complete: false,

  initialize: function(url, options) {
    this.transport =3D Ajax.getTransport();
    this.setOptions(options);
    this.request(url);
  },

  request: function(url) {
    this.url =3D url;
    this.method =3D this.options.method;
    var params =3D Object.clone(this.options.parameters);

    if (!['get', 'post'].include(this.method)) {
      // simulate other verbs over post
      params['_method'] =3D this.method;
      this.method =3D 'post';
    }

    this.parameters =3D params;

    if (params =3D Hash.toQueryString(params)) {
      // when GET, append parameters to URL
      if (this.method =3D=3D 'get')
        this.url +=3D (this.url.include('?') ? '&' : '?') + params;
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
        params +=3D '&_=3D';
    }

    try {
      if (this.options.onCreate) this.options.onCreate(this.transport);
      Ajax.Responders.dispatch('onCreate', this, this.transport);

      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);

      if (this.options.asynchronous)
        setTimeout(function() { this.respondToReadyState(1) =
}.bind(this), 10);

      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);
      this.setRequestHeaders();

      this.body =3D this.method =3D=3D 'post' ? (this.options.postBody =
|| params) : null;
      this.transport.send(this.body);

      /* Force Firefox to handle ready state 4 for synchronous requests =
*/
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();

    }
    catch (e) {
      this.dispatchException(e);
    }
  },

  onStateChange: function() {
    var readyState =3D this.transport.readyState;
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))
      this.respondToReadyState(this.transport.readyState);
  },

  setRequestHeaders: function() {
    var headers =3D {
      'X-Requested-With': 'XMLHttpRequest',
      'X-Prototype-Version': Prototype.Version,
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'
    };

    if (this.method =3D=3D 'post') {
      headers['Content-type'] =3D this.options.contentType +
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');

      /* Force "Connection: close" for older Mozilla browsers to work
       * around a bug where XMLHttpRequest sends an incorrect
       * Content-length header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType &&
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)
            headers['Connection'] =3D 'close';
    }

    // user-defined headers
    if (typeof this.options.requestHeaders =3D=3D 'object') {
      var extras =3D this.options.requestHeaders;

      if (typeof extras.push =3D=3D 'function')
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D =
2)
          headers[extras[i]] =3D extras[i+1];
      else
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });
    }

    for (var name in headers)
      this.transport.setRequestHeader(name, headers[name]);
  },

  success: function() {
    return !this.transport.status
        || (this.transport.status >=3D 200 && this.transport.status < =
300);
  },

  respondToReadyState: function(readyState) {
    var state =3D Ajax.Request.Events[readyState];
    var transport =3D this.transport, json =3D this.evalJSON();

    if (state =3D=3D 'Complete') {
      try {
        this._complete =3D true;
        (this.options['on' + this.transport.status]
         || this.options['on' + (this.success() ? 'Success' : =
'Failure')]
         || Prototype.emptyFunction)(transport, json);
      } catch (e) {
        this.dispatchException(e);
      }

      var contentType =3D this.getHeader('Content-type');
      if (contentType && contentType.strip().
        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
          this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(transport, =
json);
      Ajax.Responders.dispatch('on' + state, this, transport, json);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state =3D=3D 'Complete') {
      // avoid memory leak in MSIE: clean up
      this.transport.onreadystatechange =3D Prototype.emptyFunction;
    }
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name);
    } catch (e) { return null }
  },

  evalJSON: function() {
    try {
      var json =3D this.getHeader('X-JSON');
      return json ? json.evalJSON() : null;
    } catch (e) { return null }
  },

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Updater =3D Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype, =
Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.container =3D {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : =
container))
    }

    this.transport =3D Ajax.getTransport();
    this.setOptions(options);

    var onComplete =3D this.options.onComplete || =
Prototype.emptyFunction;
    this.options.onComplete =3D (function(transport, param) {
      this.updateContent();
      onComplete(transport, param);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'];
    var response =3D this.transport.responseText;

    if (!this.options.evalScripts) response =3D response.stripScripts();

    if (receiver =3D $(receiver)) {
      if (this.options.insertion)
        new this.options.insertion(receiver, response);
      else
        receiver.update(response);
    }

    if (this.success()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});

Ajax.PeriodicalUpdater =3D Class.create();
Ajax.PeriodicalUpdater.prototype =3D Object.extend(new Ajax.Base(), {
  initialize: function(container, url, options) {
    this.setOptions(options);
    this.onComplete =3D this.options.onComplete;

    this.frequency =3D (this.options.frequency || 2);
    this.decay =3D (this.options.decay || 1);

    this.updater =3D {};
    this.container =3D container;
    this.url =3D url;

    this.start();
  },

  start: function() {
    this.options.onComplete =3D this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete =3D undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(request) {
    if (this.options.decay) {
      this.decay =3D (request.responseText =3D=3D this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText =3D request.responseText;
    }
    this.timer =3D setTimeout(this.onTimerEvent.bind(this),
      this.decay * this.frequency * 1000);
  },

  onTimerEvent: function() {
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);
  }
});
function $(element) {
  if (arguments.length > 1) {
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (typeof element =3D=3D 'string')
    element =3D document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath =3D function(expression, parentElement) {
    var results =3D [];
    var query =3D document.evaluate(expression, $(parentElement) || =
document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)
      results.push(query.snapshotItem(i));
    return results;
  };

  document.getElementsByClassName =3D function(className, parentElement) =
{
    var q =3D ".//*[contains(concat(' ', @class, ' '), ' " + className + =
" ')]";
    return document._getElementsByXPath(q, parentElement);
  }

} else document.getElementsByClassName =3D function(className, =
parentElement) {
  var children =3D ($(parentElement) || =
document.body).getElementsByTagName('*');
  var elements =3D [], child, pattern =3D new RegExp("(^|\\s)" + =
className + "(\\s|$)");
  for (var i =3D 0, length =3D children.length; i < length; i++) {
    child =3D children[i];
    var elementClassName =3D child.className;
    if (elementClassName.length =3D=3D 0) continue;
    if (elementClassName =3D=3D className || =
elementClassName.match(pattern))
      elements.push(Element.extend(child));
  }
  return elements;
};

/*-----------------------------------------------------------------------=
---*/

if (!window.Element) var Element =3D {};

Element.extend =3D function(element) {
  var F =3D Prototype.BrowserFeatures;
  if (!element || !element.tagName || element.nodeType =3D=3D 3 ||
   element._extended || F.SpecificElementExtensions || element =3D=3D =
window)
    return element;

  var methods =3D {}, tagName =3D element.tagName, cache =3D =
Element.extend.cache,
   T =3D Element.Methods.ByTag;

  // extend methods for all tags (Safari doesn't need this)
  if (!F.ElementExtensions) {
    Object.extend(methods, Element.Methods),
    Object.extend(methods, Element.Methods.Simulated);
  }

  // extend methods for specific tags
  if (T[tagName]) Object.extend(methods, T[tagName]);

  for (var property in methods) {
    var value =3D methods[property];
    if (typeof value =3D=3D 'function' && !(property in element))
      element[property] =3D cache.findOrStore(value);
  }

  element._extended =3D Prototype.emptyFunction;
  return element;
};

Element.extend.cache =3D {
  findOrStore: function(value) {
    return this[value] =3D this[value] || function() {
      return value.apply(null, [this].concat($A(arguments)));
    }
  }
};

Element.Methods =3D {
  visible: function(element) {
    return $(element).style.display !=3D 'none';
  },

  toggle: function(element) {
    element =3D $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },

  hide: function(element) {
    $(element).style.display =3D 'none';
    return element;

  },

  show: function(element) {
    $(element).style.display =3D '';
    return element;
  },

  remove: function(element) {
    element =3D $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: function(element, html) {
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();
    $(element).innerHTML =3D html.stripScripts();
    setTimeout(function() {html.evalScripts()}, 10);
    return element;
  },

  replace: function(element, html) {
    element =3D $(element);
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();
    if (element.outerHTML) {
      element.outerHTML =3D html.stripScripts();
    } else {
      var range =3D element.ownerDocument.createRange();
      range.selectNodeContents(element);
      element.parentNode.replaceChild(
        range.createContextualFragment(html.stripScripts()), element);
    }
    setTimeout(function() {html.evalScripts()}, 10);
    return element;
  },

  inspect: function(element) {
    element =3D $(element);
    var result =3D '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property =3D pair.first(), attribute =3D pair.last();
      var value =3D (element[property] || '').toString();
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property) {
    element =3D $(element);
    var elements =3D [];
    while (element =3D element[property])
      if (element.nodeType =3D=3D 1)
        elements.push(Element.extend(element));
    return elements;
  },

  ancestors: function(element) {
    return $(element).recursivelyCollect('parentNode');
  },

  descendants: function(element) {
    return =
$A($(element).getElementsByTagName('*')).each(Element.extend);
  },

  firstDescendant: function(element) {
    element =3D $(element).firstChild;
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;
    return $(element);
  },

  immediateDescendants: function(element) {
    if (!(element =3D $(element).firstChild)) return [];
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;
    if (element) return [element].concat($(element).nextSiblings());
    return [];
  },

  previousSiblings: function(element) {
    return $(element).recursivelyCollect('previousSibling');
  },

  nextSiblings: function(element) {
    return $(element).recursivelyCollect('nextSibling');
  },

  siblings: function(element) {
    element =3D $(element);
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());
  },

  match: function(element, selector) {
    if (typeof selector =3D=3D 'string')
      selector =3D new Selector(selector);
    return selector.match($(element));
  },

  up: function(element, expression, index) {
    element =3D $(element);
    if (arguments.length =3D=3D 1) return $(element.parentNode);
    var ancestors =3D element.ancestors();
    return expression ? Selector.findElement(ancestors, expression, =
index) :
      ancestors[index || 0];
  },

  down: function(element, expression, index) {
    element =3D $(element);
    if (arguments.length =3D=3D 1) return element.firstDescendant();
    var descendants =3D element.descendants();
    return expression ? Selector.findElement(descendants, expression, =
index) :
      descendants[index || 0];
  },

  previous: function(element, expression, index) {
    element =3D $(element);
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.previousElementSibling(element));
    var previousSiblings =3D element.previousSiblings();
    return expression ? Selector.findElement(previousSiblings, =
expression, index) :
      previousSiblings[index || 0];
  },

  next: function(element, expression, index) {
    element =3D $(element);
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.nextElementSibling(element));
    var nextSiblings =3D element.nextSiblings();
    return expression ? Selector.findElement(nextSiblings, expression, =
index) :
      nextSiblings[index || 0];
  },

  getElementsBySelector: function() {
    var args =3D $A(arguments), element =3D $(args.shift());
    return Selector.findChildElements(element, args);
  },

  getElementsByClassName: function(element, className) {
    return document.getElementsByClassName(className, element);
  },

  readAttribute: function(element, name) {
    element =3D $(element);
    if (Prototype.Browser.IE) {
      if (!element.attributes) return null;
      var t =3D Element._attributeTranslations;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name])  name =3D t.names[name];
      var attribute =3D element.attributes[name];
      return attribute ? attribute.nodeValue : null;
    }
    return element.getAttribute(name);
  },

  getHeight: function(element) {
    return $(element).getDimensions().height;
  },

  getWidth: function(element) {
    return $(element).getDimensions().width;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element =3D $(element))) return;
    var elementClassName =3D element.className;
    if (elementClassName.length =3D=3D 0) return false;
    if (elementClassName =3D=3D className ||
        elementClassName.match(new RegExp("(^|\\s)" + className + =
"(\\s|$)")))
      return true;
    return false;
  },

  addClassName: function(element, className) {
    if (!(element =3D $(element))) return;
    Element.classNames(element).add(className);
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element =3D $(element))) return;
    Element.classNames(element).remove(className);
    return element;
  },

  toggleClassName: function(element, className) {
    if (!(element =3D $(element))) return;
    Element.classNames(element)[element.hasClassName(className) ? =
'remove' : 'add'](className);
    return element;
  },

  observe: function() {
    Event.observe.apply(Event, arguments);
    return $A(arguments).first();
  },

  stopObserving: function() {
    Event.stopObserving.apply(Event, arguments);
    return $A(arguments).first();
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element =3D $(element);
    var node =3D element.firstChild;
    while (node) {
      var nextNode =3D node.nextSibling;
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node =3D nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.blank();
  },

  descendantOf: function(element, ancestor) {
    element =3D $(element), ancestor =3D $(ancestor);
    while (element =3D element.parentNode)
      if (element =3D=3D ancestor) return true;
    return false;
  },

  scrollTo: function(element) {
    element =3D $(element);
    var pos =3D Position.cumulativeOffset(element);
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element =3D $(element);
    style =3D style =3D=3D 'float' ? 'cssFloat' : style.camelize();
    var value =3D element.style[style];
    if (!value) {
      var css =3D document.defaultView.getComputedStyle(element, null);
      value =3D css ? css[style] : null;
    }
    if (style =3D=3D 'opacity') return value ? parseFloat(value) : 1.0;
    return value =3D=3D 'auto' ? null : value;
  },

  getOpacity: function(element) {
    return $(element).getStyle('opacity');
  },

  setStyle: function(element, styles, camelized) {
    element =3D $(element);
    var elementStyle =3D element.style;

    for (var property in styles)
      if (property =3D=3D 'opacity') =
element.setOpacity(styles[property])
      else
        elementStyle[(property =3D=3D 'float' || property =3D=3D =
'cssFloat') ?
          (elementStyle.styleFloat =3D=3D=3D undefined ? 'cssFloat' : =
'styleFloat') :
          (camelized ? property : property.camelize())] =3D =
styles[property];

    return element;
  },

  setOpacity: function(element, value) {
    element =3D $(element);
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :
      (value < 0.00001) ? 0 : value;
    return element;
  },

  getDimensions: function(element) {
    element =3D $(element);
    var display =3D $(element).getStyle('display');
    if (display !=3D 'none' && display !=3D null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display =
none,
    // so enable the element temporarily
    var els =3D element.style;
    var originalVisibility =3D els.visibility;
    var originalPosition =3D els.position;
    var originalDisplay =3D els.display;
    els.visibility =3D 'hidden';
    els.position =3D 'absolute';
    els.display =3D 'block';
    var originalWidth =3D element.clientWidth;
    var originalHeight =3D element.clientHeight;
    els.display =3D originalDisplay;
    els.position =3D originalPosition;
    els.visibility =3D originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element =3D $(element);
    var pos =3D Element.getStyle(element, 'position');
    if (pos =3D=3D 'static' || !pos) {
      element._madePositioned =3D true;
      element.style.position =3D 'relative';
      // Opera returns the offset relative to the positioning context, =
when an
      // element is position relative but top and left have not been =
defined
      if (window.opera) {
        element.style.top =3D 0;
        element.style.left =3D 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element =3D $(element);
    if (element._madePositioned) {
      element._madePositioned =3D undefined;
      element.style.position =3D
        element.style.top =3D
        element.style.left =3D
        element.style.bottom =3D
        element.style.right =3D '';
    }
    return element;
  },

  makeClipping: function(element) {
    element =3D $(element);
    if (element._overflow) return element;
    element._overflow =3D element.style.overflow || 'auto';
    if ((Element.getStyle(element, 'overflow') || 'visible') !=3D =
'hidden')
      element.style.overflow =3D 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element =3D $(element);
    if (!element._overflow) return element;
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;
    element._overflow =3D null;
    return element;
  }
};

Object.extend(Element.Methods, {
  childOf: Element.Methods.descendantOf,
  childElements: Element.Methods.immediateDescendants
});

if (Prototype.Browser.Opera) {
  Element.Methods._getStyle =3D Element.Methods.getStyle;
  Element.Methods.getStyle =3D function(element, style) {
    switch(style) {
      case 'left':
      case 'top':
      case 'right':
      case 'bottom':
        if (Element._getStyle(element, 'position') =3D=3D 'static') =
return null;
      default: return Element._getStyle(element, style);
    }
  };
}
else if (Prototype.Browser.IE) {
  Element.Methods.getStyle =3D function(element, style) {
    element =3D $(element);
    style =3D (style =3D=3D 'float' || style =3D=3D 'cssFloat') ? =
'styleFloat' : style.camelize();
    var value =3D element.style[style];
    if (!value && element.currentStyle) value =3D =
element.currentStyle[style];

    if (style =3D=3D 'opacity') {
      if (value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))
        if (value[1]) return parseFloat(value[1]) / 100;
      return 1.0;
    }

    if (value =3D=3D 'auto') {
      if ((style =3D=3D 'width' || style =3D=3D 'height') && =
(element.getStyle('display') !=3D 'none'))
        return element['offset'+style.capitalize()] + 'px';
      return null;
    }
    return value;
  };

  Element.Methods.setOpacity =3D function(element, value) {
    element =3D $(element);
    var filter =3D element.getStyle('filter'), style =3D element.style;
    if (value =3D=3D 1 || value =3D=3D=3D '') {
      style.filter =3D filter.replace(/alpha\([^\)]*\)/gi,'');
      return element;
    } else if (value < 0.00001) value =3D 0;
    style.filter =3D filter.replace(/alpha\([^\)]*\)/gi, '') +
      'alpha(opacity=3D' + (value * 100) + ')';
    return element;
  };

  // IE is missing .innerHTML support for TABLE-related elements
  Element.Methods.update =3D function(element, html) {
    element =3D $(element);
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();
    var tagName =3D element.tagName.toUpperCase();
    if (['THEAD','TBODY','TR','TD'].include(tagName)) {
      var div =3D document.createElement('div');
      switch (tagName) {
        case 'THEAD':
        case 'TBODY':
          div.innerHTML =3D '<table><tbody>' +  html.stripScripts() + =
'</tbody></table>';
          depth =3D 2;
          break;
        case 'TR':
          div.innerHTML =3D '<table><tbody><tr>' +  html.stripScripts() =
+ '</tr></tbody></table>';
          depth =3D 3;
          break;
        case 'TD':
          div.innerHTML =3D '<table><tbody><tr><td>' +  =
html.stripScripts() + '</td></tr></tbody></table>';
          depth =3D 4;
      }
      $A(element.childNodes).each(function(node) { =
element.removeChild(node) });
      depth.times(function() { div =3D div.firstChild });
      $A(div.childNodes).each(function(node) { element.appendChild(node) =
});
    } else {
      element.innerHTML =3D html.stripScripts();
    }
    setTimeout(function() { html.evalScripts() }, 10);
    return element;
  }
}
else if (Prototype.Browser.Gecko) {
  Element.Methods.setOpacity =3D function(element, value) {
    element =3D $(element);
    element.style.opacity =3D (value =3D=3D 1) ? 0.999999 :
      (value =3D=3D=3D '') ? '' : (value < 0.00001) ? 0 : value;
    return element;
  };
}

Element._attributeTranslations =3D {
  names: {
    colspan:   "colSpan",
    rowspan:   "rowSpan",
    valign:    "vAlign",
    datetime:  "dateTime",
    accesskey: "accessKey",
    tabindex:  "tabIndex",
    enctype:   "encType",
    maxlength: "maxLength",
    readonly:  "readOnly",
    longdesc:  "longDesc"
  },
  values: {
    _getAttr: function(element, attribute) {
      return element.getAttribute(attribute, 2);
    },
    _flag: function(element, attribute) {
      return $(element).hasAttribute(attribute) ? attribute : null;
    },
    style: function(element) {
      return element.style.cssText.toLowerCase();
    },
    title: function(element) {
      var node =3D element.getAttributeNode('title');
      return node.specified ? node.nodeValue : null;
    }
  }
};

(function() {
  Object.extend(this, {
    href: this._getAttr,
    src:  this._getAttr,
    type: this._getAttr,
    disabled: this._flag,
    checked:  this._flag,
    readonly: this._flag,
    multiple: this._flag
  });
}).call(Element._attributeTranslations.values);

Element.Methods.Simulated =3D {
  hasAttribute: function(element, attribute) {
    var t =3D Element._attributeTranslations, node;
    attribute =3D t.names[attribute] || attribute;
    node =3D $(element).getAttributeNode(attribute);
    return node && node.specified;
  }
};

Element.Methods.ByTag =3D {};

Object.extend(Element, Element.Methods);

if (!Prototype.BrowserFeatures.ElementExtensions &&
 document.createElement('div').__proto__) {
  window.HTMLElement =3D {};
  window.HTMLElement.prototype =3D =
document.createElement('div').__proto__;
  Prototype.BrowserFeatures.ElementExtensions =3D true;
}

Element.hasAttribute =3D function(element, attribute) {
  if (element.hasAttribute) return element.hasAttribute(attribute);
  return Element.Methods.Simulated.hasAttribute(element, attribute);
};

Element.addMethods =3D function(methods) {
  var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;

  if (!methods) {
    Object.extend(Form, Form.Methods);
    Object.extend(Form.Element, Form.Element.Methods);
    Object.extend(Element.Methods.ByTag, {
      "FORM":     Object.clone(Form.Methods),
      "INPUT":    Object.clone(Form.Element.Methods),
      "SELECT":   Object.clone(Form.Element.Methods),
      "TEXTAREA": Object.clone(Form.Element.Methods)
    });
  }

  if (arguments.length =3D=3D 2) {
    var tagName =3D methods;
    methods =3D arguments[1];
  }

  if (!tagName) Object.extend(Element.Methods, methods || {});
  else {
    if (tagName.constructor =3D=3D Array) tagName.each(extend);
    else extend(tagName);
  }

  function extend(tagName) {
    tagName =3D tagName.toUpperCase();
    if (!Element.Methods.ByTag[tagName])
      Element.Methods.ByTag[tagName] =3D {};
    Object.extend(Element.Methods.ByTag[tagName], methods);
  }

  function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent =3D onlyIfAbsent || false;
    var cache =3D Element.extend.cache;
    for (var property in methods) {
      var value =3D methods[property];
      if (!onlyIfAbsent || !(property in destination))
        destination[property] =3D cache.findOrStore(value);
    }
  }

  function findDOMClass(tagName) {
    var klass;
    var trans =3D {
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": =
"DList",
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": =
"Heading",
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", =
"CAPTION":
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", =
"THEAD":
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", =
"TR":
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
      "FrameSet", "IFRAME": "IFrame"
    };
    if (trans[tagName]) klass =3D 'HTML' + trans[tagName] + 'Element';
    if (window[klass]) return window[klass];
    klass =3D 'HTML' + tagName + 'Element';
    if (window[klass]) return window[klass];
    klass =3D 'HTML' + tagName.capitalize() + 'Element';
    if (window[klass]) return window[klass];

    window[klass] =3D {};
    window[klass].prototype =3D =
document.createElement(tagName).__proto__;
    return window[klass];
  }

  if (F.ElementExtensions) {
    copy(Element.Methods, HTMLElement.prototype);
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
  }

  if (F.SpecificElementExtensions) {
    for (var tag in Element.Methods.ByTag) {
      var klass =3D findDOMClass(tag);
      if (typeof klass =3D=3D "undefined") continue;
      copy(T[tag], klass.prototype);
    }
  }

  Object.extend(Element, Element.Methods);
  delete Element.ByTag;
};

var Toggle =3D { display: Element.toggle };

/*-----------------------------------------------------------------------=
---*/

Abstract.Insertion =3D function(adjacency) {
  this.adjacency =3D adjacency;
}

Abstract.Insertion.prototype =3D {
  initialize: function(element, content) {
    this.element =3D $(element);
    this.content =3D content.stripScripts();

    if (this.adjacency && this.element.insertAdjacentHTML) {
      try {
        this.element.insertAdjacentHTML(this.adjacency, this.content);
      } catch (e) {
        var tagName =3D this.element.tagName.toUpperCase();
        if (['TBODY', 'TR'].include(tagName)) {
          this.insertContent(this.contentFromAnonymousTable());
        } else {
          throw e;
        }
      }
    } else {
      this.range =3D this.element.ownerDocument.createRange();
      if (this.initializeRange) this.initializeRange();
      =
this.insertContent([this.range.createContextualFragment(this.content)]);
    }

    setTimeout(function() {content.evalScripts()}, 10);
  },

  contentFromAnonymousTable: function() {
    var div =3D document.createElement('div');
    div.innerHTML =3D '<table><tbody>' + this.content + =
'</tbody></table>';
    return $A(div.childNodes[0].childNodes[0].childNodes);
  }
}

var Insertion =3D new Object();

Insertion.Before =3D Class.create();
Insertion.Before.prototype =3D Object.extend(new =
Abstract.Insertion('beforeBegin'), {
  initializeRange: function() {
    this.range.setStartBefore(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment, this.element);
    }).bind(this));
  }
});

Insertion.Top =3D Class.create();
Insertion.Top.prototype =3D Object.extend(new =
Abstract.Insertion('afterBegin'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(true);
  },

  insertContent: function(fragments) {
    fragments.reverse(false).each((function(fragment) {
      this.element.insertBefore(fragment, this.element.firstChild);
    }).bind(this));
  }
});

Insertion.Bottom =3D Class.create();
Insertion.Bottom.prototype =3D Object.extend(new =
Abstract.Insertion('beforeEnd'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.appendChild(fragment);
    }).bind(this));
  }
});

Insertion.After =3D Class.create();
Insertion.After.prototype =3D Object.extend(new =
Abstract.Insertion('afterEnd'), {
  initializeRange: function() {
    this.range.setStartAfter(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment,
        this.element.nextSibling);
    }).bind(this));
  }
});

/*-----------------------------------------------------------------------=
---*/

Element.ClassNames =3D Class.create();
Element.ClassNames.prototype =3D {
  initialize: function(element) {
    this.element =3D $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className =3D className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);
/* Portions of the Selector class are derived from Jack =
Slocum=C3=A2=E2=82=AC=E2=84=A2s DomQuery,
 * part of YUI-Ext version 0.40, distributed under the terms of an =
MIT-style
 * license.  Please see http://www.yui-ext.com/ for more information. */

var Selector =3D Class.create();

Selector.prototype =3D {
  initialize: function(expression) {
    this.expression =3D expression.strip();
    this.compileMatcher();
  },

  compileMatcher: function() {
    // Selectors with namespaced attributes can't use the XPath version
    if (Prototype.BrowserFeatures.XPath && =
!(/\[[\w-]*?:/).test(this.expression))
      return this.compileXPathMatcher();

    var e =3D this.expression, ps =3D Selector.patterns, h =3D =
Selector.handlers,
        c =3D Selector.criteria, le, p, m;

    if (Selector._cache[e]) {
      this.matcher =3D Selector._cache[e]; return;
    }
    this.matcher =3D ["this.matcher =3D function(root) {",
                    "var r =3D root, h =3D Selector.handlers, c =3D =
false, n;"];

    while (e && le !=3D e && (/\S/).test(e)) {
      le =3D e;
      for (var i in ps) {
        p =3D ps[i];
        if (m =3D e.match(p)) {
          this.matcher.push(typeof c[i] =3D=3D 'function' ? c[i](m) :
    	      new Template(c[i]).evaluate(m));
          e =3D e.replace(m[0], '');
          break;
        }
      }
    }

    this.matcher.push("return h.unique(n);\n}");
    eval(this.matcher.join('\n'));
    Selector._cache[this.expression] =3D this.matcher;
  },

  compileXPathMatcher: function() {
    var e =3D this.expression, ps =3D Selector.patterns,
        x =3D Selector.xpath, le,  m;

    if (Selector._cache[e]) {
      this.xpath =3D Selector._cache[e]; return;
    }

    this.matcher =3D ['.//*'];
    while (e && le !=3D e && (/\S/).test(e)) {
      le =3D e;
      for (var i in ps) {
        if (m =3D e.match(ps[i])) {
          this.matcher.push(typeof x[i] =3D=3D 'function' ? x[i](m) :
            new Template(x[i]).evaluate(m));
          e =3D e.replace(m[0], '');
          break;
        }
      }
    }

    this.xpath =3D this.matcher.join('');
    Selector._cache[this.expression] =3D this.xpath;
  },

  findElements: function(root) {
    root =3D root || document;
    if (this.xpath) return document._getElementsByXPath(this.xpath, =
root);
    return this.matcher(root);
  },

  match: function(element) {
    return this.findElements(document).include(element);
  },

  toString: function() {
    return this.expression;
  },

  inspect: function() {
    return "#<Selector:" + this.expression.inspect() + ">";
  }
};

Object.extend(Selector, {
  _cache: {},

  xpath: {
    descendant:   "//*",
    child:        "/*",
    adjacent:     "/following-sibling::*[1]",
    laterSibling: '/following-sibling::*',
    tagName:      function(m) {
      if (m[1] =3D=3D '*') return '';
      return "[local-name()=3D'" + m[1].toLowerCase() +
             "' or local-name()=3D'" + m[1].toUpperCase() + "']";
    },
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
    id:           "[@id=3D'#{1}']",
    attrPresence: "[@#{1}]",
    attr: function(m) {
      m[3] =3D m[5] || m[6];
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
    },
    pseudo: function(m) {
      var h =3D Selector.xpath.pseudos[m[1]];
      if (!h) return '';
      if (typeof h =3D=3D=3D 'function') return h(m);
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
    },
    operators: {
      '=3D':  "[@#{1}=3D'#{3}']",
      '!=3D': "[@#{1}!=3D'#{3}']",
      '^=3D': "[starts-with(@#{1}, '#{3}')]",
      '$=3D': "[substring(@#{1}, (string-length(@#{1}) - =
string-length('#{3}') + 1))=3D'#{3}']",
      '*=3D': "[contains(@#{1}, '#{3}')]",
      '~=3D': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
      '|=3D': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
    },
    pseudos: {
      'first-child': '[not(preceding-sibling::*)]',
      'last-child':  '[not(following-sibling::*)]',
      'only-child':  '[not(preceding-sibling::* or =
following-sibling::*)]',
      'empty':       "[count(*) =3D 0 and (count(text()) =3D 0 or =
translate(text(), ' \t\r\n', '') =3D '')]",
      'checked':     "[@checked]",
      'disabled':    "[@disabled]",
      'enabled':     "[not(@disabled)]",
      'not': function(m) {
        var e =3D m[6], p =3D Selector.patterns,
            x =3D Selector.xpath, le, m, v;

        var exclusion =3D [];
        while (e && le !=3D e && (/\S/).test(e)) {
          le =3D e;
          for (var i in p) {
            if (m =3D e.match(p[i])) {
              v =3D typeof x[i] =3D=3D 'function' ? x[i](m) : new =
Template(x[i]).evaluate(m);
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
              e =3D e.replace(m[0], '');
              break;
            }
          }
        }
        return "[not(" + exclusion.join(" and ") + ")]";
      },
      'nth-child':      function(m) {
        return =
Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
      },
      'nth-last-child': function(m) {
        return =
Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
      },
      'nth-of-type':    function(m) {
        return Selector.xpath.pseudos.nth("position() ", m);
      },
      'nth-last-of-type': function(m) {
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", =
m);
      },
      'first-of-type':  function(m) {
        m[6] =3D "1"; return Selector.xpath.pseudos['nth-of-type'](m);
      },
      'last-of-type':   function(m) {
        m[6] =3D "1"; return =
Selector.xpath.pseudos['nth-last-of-type'](m);
      },
      'only-of-type':   function(m) {
        var p =3D Selector.xpath.pseudos; return p['first-of-type'](m) + =
p['last-of-type'](m);
      },
      nth: function(fragment, m) {
        var mm, formula =3D m[6], predicate;
        if (formula =3D=3D 'even') formula =3D '2n+0';
        if (formula =3D=3D 'odd')  formula =3D '2n+1';
        if (mm =3D formula.match(/^(\d+)$/)) // digit only
          return '[' + fragment + "=3D " + mm[1] + ']';
        if (mm =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
          if (mm[1] =3D=3D "-") mm[1] =3D -1;
          var a =3D mm[1] ? Number(mm[1]) : 1;
          var b =3D mm[2] ? Number(mm[2]) : 0;
          predicate =3D "[((#{fragment} - #{b}) mod #{a} =3D 0) and " +
          "((#{fragment} - #{b}) div #{a} >=3D 0)]";
          return new Template(predicate).evaluate({
            fragment: fragment, a: a, b: b });
        }
      }
    }
  },

  criteria: {
    tagName:      'n =3D h.tagName(n, r, "#{1}", c);   c =3D false;',
    className:    'n =3D h.className(n, r, "#{1}", c); c =3D false;',
    id:           'n =3D h.id(n, r, "#{1}", c);        c =3D false;',
    attrPresence: 'n =3D h.attrPresence(n, r, "#{1}"); c =3D false;',
    attr: function(m) {
      m[3] =3D (m[5] || m[6]);
      return new Template('n =3D h.attr(n, r, "#{1}", "#{3}", "#{2}"); c =
=3D false;').evaluate(m);
    },
    pseudo:       function(m) {
      if (m[6]) m[6] =3D m[6].replace(/"/g, '\\"');
      return new Template('n =3D h.pseudo(n, "#{1}", "#{6}", r, c); c =
=3D false;').evaluate(m);
    },
    descendant:   'c =3D "descendant";',
    child:        'c =3D "child";',
    adjacent:     'c =3D "adjacent";',
    laterSibling: 'c =3D "laterSibling";'
  },

  patterns: {
    // combinators must be listed first
    // (and descendant needs to be last combinator)
    laterSibling: /^\s*~\s*/,
    child:        /^\s*>\s*/,
    adjacent:     /^\s*\+\s*/,
    descendant:   /^\s/,

    // selectors follow
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
    id:           /^#([\w\-\*]+)(\b|$)/,
    className:    /^\.([\w\-\*]+)(\b|$)/,
    pseudo:       =
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis=
)abled|not)(\((.*?)\))?(\b|$|\s|(?=3D:))/,
    attrPresence: /^\[([\w]+)\]/,
    attr:         =
/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\]]*?)\4|([^'"][^=
\]]*?)))?\]/
  },

  handlers: {
    // UTILITY FUNCTIONS
    // joins two collections
    concat: function(a, b) {
      for (var i =3D 0, node; node =3D b[i]; i++)
        a.push(node);
      return a;
    },

    // marks an array of nodes for counting
    mark: function(nodes) {
      for (var i =3D 0, node; node =3D nodes[i]; i++)
        node._counted =3D true;
      return nodes;
    },

    unmark: function(nodes) {
      for (var i =3D 0, node; node =3D nodes[i]; i++)
        node._counted =3D undefined;
      return nodes;
    },

    // mark each child node with its position (for nth calls)
    // "ofType" flag indicates whether we're indexing for nth-of-type
    // rather than nth-child
    index: function(parentNode, reverse, ofType) {
      parentNode._counted =3D true;
      if (reverse) {
        for (var nodes =3D parentNode.childNodes, i =3D nodes.length - =
1, j =3D 1; i >=3D 0; i--) {
          node =3D nodes[i];
          if (node.nodeType =3D=3D 1 && (!ofType || node._counted)) =
node.nodeIndex =3D j++;
        }
      } else {
        for (var i =3D 0, j =3D 1, nodes =3D parentNode.childNodes; node =
=3D nodes[i]; i++)
          if (node.nodeType =3D=3D 1 && (!ofType || node._counted)) =
node.nodeIndex =3D j++;
      }
    },

    // filters out duplicates and extends all nodes
    unique: function(nodes) {
      if (nodes.length =3D=3D 0) return nodes;
      var results =3D [], n;
      for (var i =3D 0, l =3D nodes.length; i < l; i++)
        if (!(n =3D nodes[i])._counted) {
          n._counted =3D true;
          results.push(Element.extend(n));
        }
      return Selector.handlers.unmark(results);
    },

    // COMBINATOR FUNCTIONS
    descendant: function(nodes) {
      var h =3D Selector.handlers;
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        h.concat(results, node.getElementsByTagName('*'));
      return results;
    },

    child: function(nodes) {
      var h =3D Selector.handlers;
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        for (var j =3D 0, children =3D [], child; child =3D =
node.childNodes[j]; j++)
          if (child.nodeType =3D=3D 1 && child.tagName !=3D '!') =
results.push(child);
      }
      return results;
    },

    adjacent: function(nodes) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        var next =3D this.nextElementSibling(node);
        if (next) results.push(next);
      }
      return results;
    },

    laterSibling: function(nodes) {
      var h =3D Selector.handlers;
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        h.concat(results, Element.nextSiblings(node));
      return results;
    },

    nextElementSibling: function(node) {
      while (node =3D node.nextSibling)
	      if (node.nodeType =3D=3D 1) return node;
      return null;
    },

    previousElementSibling: function(node) {
      while (node =3D node.previousSibling)
        if (node.nodeType =3D=3D 1) return node;
      return null;
    },

    // TOKEN FUNCTIONS
    tagName: function(nodes, root, tagName, combinator) {
      tagName =3D tagName.toUpperCase();
      var results =3D [], h =3D Selector.handlers;
      if (nodes) {
        if (combinator) {
          // fastlane for ordinary descendant combinators
          if (combinator =3D=3D "descendant") {
            for (var i =3D 0, node; node =3D nodes[i]; i++)
              h.concat(results, node.getElementsByTagName(tagName));
            return results;
          } else nodes =3D this[combinator](nodes);
          if (tagName =3D=3D "*") return nodes;
        }
        for (var i =3D 0, node; node =3D nodes[i]; i++)
          if (node.tagName.toUpperCase() =3D=3D tagName) =
results.push(node);
        return results;
      } else return root.getElementsByTagName(tagName);
    },

    id: function(nodes, root, id, combinator) {
      var targetNode =3D $(id), h =3D Selector.handlers;
      if (!nodes && root =3D=3D document) return targetNode ? =
[targetNode] : [];
      if (nodes) {
        if (combinator) {
          if (combinator =3D=3D 'child') {
            for (var i =3D 0, node; node =3D nodes[i]; i++)
              if (targetNode.parentNode =3D=3D node) return =
[targetNode];
          } else if (combinator =3D=3D 'descendant') {
            for (var i =3D 0, node; node =3D nodes[i]; i++)
              if (Element.descendantOf(targetNode, node)) return =
[targetNode];
          } else if (combinator =3D=3D 'adjacent') {
            for (var i =3D 0, node; node =3D nodes[i]; i++)
              if (Selector.handlers.previousElementSibling(targetNode) =
=3D=3D node)
                return [targetNode];
          } else nodes =3D h[combinator](nodes);
        }
        for (var i =3D 0, node; node =3D nodes[i]; i++)
          if (node =3D=3D targetNode) return [targetNode];
        return [];
      }
      return (targetNode && Element.descendantOf(targetNode, root)) ? =
[targetNode] : [];
    },

    className: function(nodes, root, className, combinator) {
      if (nodes && combinator) nodes =3D this[combinator](nodes);
      return Selector.handlers.byClassName(nodes, root, className);
    },

    byClassName: function(nodes, root, className) {
      if (!nodes) nodes =3D Selector.handlers.descendant([root]);
      var needle =3D ' ' + className + ' ';
      for (var i =3D 0, results =3D [], node, nodeClassName; node =3D =
nodes[i]; i++) {
        nodeClassName =3D node.className;
        if (nodeClassName.length =3D=3D 0) continue;
        if (nodeClassName =3D=3D className || (' ' + nodeClassName + ' =
').include(needle))
          results.push(node);
      }
      return results;
    },

    attrPresence: function(nodes, root, attr) {
      var results =3D [];
      for (var i =3D 0, node; node =3D nodes[i]; i++)
        if (Element.hasAttribute(node, attr)) results.push(node);
      return results;
    },

    attr: function(nodes, root, attr, value, operator) {
      if (!nodes) nodes =3D root.getElementsByTagName("*");
      var handler =3D Selector.operators[operator], results =3D [];
      for (var i =3D 0, node; node =3D nodes[i]; i++) {
        var nodeValue =3D Element.readAttribute(node, attr);
        if (nodeValue =3D=3D=3D null) continue;
        if (handler(nodeValue, value)) results.push(node);
      }
      return results;
    },

    pseudo: function(nodes, name, value, root, combinator) {
      if (nodes && combinator) nodes =3D this[combinator](nodes);
      if (!nodes) nodes =3D root.getElementsByTagName("*");
      return Selector.pseudos[name](nodes, value, root);
    }
  },

  pseudos: {
    'first-child': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        if (Selector.handlers.previousElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'last-child': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        if (Selector.handlers.nextElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'only-child': function(nodes, value, root) {
      var h =3D Selector.handlers;
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (!h.previousElementSibling(node) && =
!h.nextElementSibling(node))
          results.push(node);
      return results;
    },
    'nth-child':        function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root);
    },
    'nth-last-child':   function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true);
    },
    'nth-of-type':      function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, false, true);
    },
    'nth-last-of-type': function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true, true);
    },
    'first-of-type':    function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, false, true);
    },
    'last-of-type':     function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, true, true);
    },
    'only-of-type':     function(nodes, formula, root) {
      var p =3D Selector.pseudos;
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), =
formula, root);
    },

    // handles the an+b logic
    getIndices: function(a, b, total) {
      if (a =3D=3D 0) return b > 0 ? [b] : [];
      return $R(1, total).inject([], function(memo, i) {
        if (0 =3D=3D (i - b) % a && (i - b) / a >=3D 0) memo.push(i);
        return memo;
      });
    },

    // handles nth(-last)-child, nth(-last)-of-type, and =
(first|last)-of-type
    nth: function(nodes, formula, root, reverse, ofType) {
      if (nodes.length =3D=3D 0) return [];
      if (formula =3D=3D 'even') formula =3D '2n+0';
      if (formula =3D=3D 'odd')  formula =3D '2n+1';
      var h =3D Selector.handlers, results =3D [], indexed =3D [], m;
      h.mark(nodes);
      for (var i =3D 0, node; node =3D nodes[i]; i++) {
        if (!node.parentNode._counted) {
          h.index(node.parentNode, reverse, ofType);
          indexed.push(node.parentNode);
        }
      }
      if (formula.match(/^\d+$/)) { // just a number
        formula =3D Number(formula);
        for (var i =3D 0, node; node =3D nodes[i]; i++)
          if (node.nodeIndex =3D=3D formula) results.push(node);
      } else if (m =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // =
an+b
        if (m[1] =3D=3D "-") m[1] =3D -1;
        var a =3D m[1] ? Number(m[1]) : 1;
        var b =3D m[2] ? Number(m[2]) : 0;
        var indices =3D Selector.pseudos.getIndices(a, b, nodes.length);
        for (var i =3D 0, node, l =3D indices.length; node =3D nodes[i]; =
i++) {
          for (var j =3D 0; j < l; j++)
            if (node.nodeIndex =3D=3D indices[j]) results.push(node);
        }
      }
      h.unmark(nodes);
      h.unmark(indexed);
      return results;
    },

    'empty': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        // IE treats comments as element nodes
        if (node.tagName =3D=3D '!' || (node.firstChild && =
!node.innerHTML.match(/^\s*$/))) continue;
        results.push(node);
      }
      return results;
    },

    'not': function(nodes, selector, root) {
      var h =3D Selector.handlers, selectorType, m;
      var exclusions =3D new Selector(selector).findElements(root);
      h.mark(exclusions);
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (!node._counted) results.push(node);
      h.unmark(exclusions);
      return results;
    },

    'enabled': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (!node.disabled) results.push(node);
      return results;
    },

    'disabled': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (node.disabled) results.push(node);
      return results;
    },

    'checked': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (node.checked) results.push(node);
      return results;
    }
  },

  operators: {
    '=3D':  function(nv, v) { return nv =3D=3D v; },
    '!=3D': function(nv, v) { return nv !=3D v; },
    '^=3D': function(nv, v) { return nv.startsWith(v); },
    '$=3D': function(nv, v) { return nv.endsWith(v); },
    '*=3D': function(nv, v) { return nv.include(v); },
    '~=3D': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + =
' '); },
    '|=3D': function(nv, v) { return ('-' + nv.toUpperCase() + =
'-').include('-' + v.toUpperCase() + '-'); }
  },

  matchElements: function(elements, expression) {
    var matches =3D new Selector(expression).findElements(), h =3D =
Selector.handlers;
    h.mark(matches);
    for (var i =3D 0, results =3D [], element; element =3D elements[i]; =
i++)
      if (element._counted) results.push(element);
    h.unmark(matches);
    return results;
  },

  findElement: function(elements, expression, index) {
    if (typeof expression =3D=3D 'number') {
      index =3D expression; expression =3D false;
    }
    return Selector.matchElements(elements, expression || '*')[index || =
0];
  },

  findChildElements: function(element, expressions) {
    var exprs =3D expressions.join(','), expressions =3D [];
    exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
      expressions.push(m[1].strip());
    });
    var results =3D [], h =3D Selector.handlers;
    for (var i =3D 0, l =3D expressions.length, selector; i < l; i++) {
      selector =3D new Selector(expressions[i].strip());
      h.concat(results, selector.findElements(element));
    }
    return (l > 1) ? h.unique(results) : results;
  }
});

function $$() {
  return Selector.findChildElements(document, $A(arguments));
}
var Form =3D {
  reset: function(form) {
    $(form).reset();
    return form;
  },

  serializeElements: function(elements, getHash) {
    var data =3D elements.inject({}, function(result, element) {
      if (!element.disabled && element.name) {
        var key =3D element.name, value =3D $(element).getValue();
        if (value !=3D null) {
         	if (key in result) {
            if (result[key].constructor !=3D Array) result[key] =3D =
[result[key]];
            result[key].push(value);
          }
          else result[key] =3D value;
        }
      }
      return result;
    });

    return getHash ? data : Hash.toQueryString(data);
  }
};

Form.Methods =3D {
  serialize: function(form, getHash) {
    return Form.serializeElements(Form.getElements(form), getHash);
  },

  getElements: function(form) {
    return $A($(form).getElementsByTagName('*')).inject([],
      function(elements, child) {
        if (Form.Element.Serializers[child.tagName.toLowerCase()])
          elements.push(Element.extend(child));
        return elements;
      }
    );
  },

  getInputs: function(form, typeName, name) {
    form =3D $(form);
    var inputs =3D form.getElementsByTagName('input');

    if (!typeName && !name) return $A(inputs).map(Element.extend);

    for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i =
< length; i++) {
      var input =3D inputs[i];
      if ((typeName && input.type !=3D typeName) || (name && input.name =
!=3D name))
        continue;
      matchingInputs.push(Element.extend(input));
    }

    return matchingInputs;
  },

  disable: function(form) {
    form =3D $(form);
    Form.getElements(form).invoke('disable');
    return form;
  },

  enable: function(form) {
    form =3D $(form);
    Form.getElements(form).invoke('enable');
    return form;
  },

  findFirstElement: function(form) {
    return $(form).getElements().find(function(element) {
      return element.type !=3D 'hidden' && !element.disabled &&
        ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    form =3D $(form);
    form.findFirstElement().activate();
    return form;
  },

  request: function(form, options) {
    form =3D $(form), options =3D Object.clone(options || {});

    var params =3D options.parameters;
    options.parameters =3D form.serialize(true);

    if (params) {
      if (typeof params =3D=3D 'string') params =3D =
params.toQueryParams();
      Object.extend(options.parameters, params);
    }

    if (form.hasAttribute('method') && !options.method)
      options.method =3D form.method;

    return new Ajax.Request(form.readAttribute('action'), options);
  }
}

/*-----------------------------------------------------------------------=
---*/

Form.Element =3D {
  focus: function(element) {
    $(element).focus();
    return element;
  },

  select: function(element) {
    $(element).select();
    return element;
  }
}

Form.Element.Methods =3D {
  serialize: function(element) {
    element =3D $(element);
    if (!element.disabled && element.name) {
      var value =3D element.getValue();
      if (value !=3D undefined) {
        var pair =3D {};
        pair[element.name] =3D value;
        return Hash.toQueryString(pair);
      }
    }
    return '';
  },

  getValue: function(element) {
    element =3D $(element);
    var method =3D element.tagName.toLowerCase();
    return Form.Element.Serializers[method](element);
  },

  clear: function(element) {
    $(element).value =3D '';
    return element;
  },

  present: function(element) {
    return $(element).value !=3D '';
  },

  activate: function(element) {
    element =3D $(element);
    try {
      element.focus();
      if (element.select && (element.tagName.toLowerCase() !=3D 'input' =
||
        !['button', 'reset', 'submit'].include(element.type)))
        element.select();
    } catch (e) {}
    return element;
  },

  disable: function(element) {
    element =3D $(element);
    element.blur();
    element.disabled =3D true;
    return element;
  },

  enable: function(element) {
    element =3D $(element);
    element.disabled =3D false;
    return element;
  }
}

/*-----------------------------------------------------------------------=
---*/

var Field =3D Form.Element;
var $F =3D Form.Element.Methods.getValue;

/*-----------------------------------------------------------------------=
---*/

Form.Element.Serializers =3D {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
      default:
        return Form.Element.Serializers.textarea(element);
    }
  },

  inputSelector: function(element) {
    return element.checked ? element.value : null;
  },

  textarea: function(element) {
    return element.value;
  },

  select: function(element) {
    return this[element.type =3D=3D 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var index =3D element.selectedIndex;
    return index >=3D 0 ? this.optionValue(element.options[index]) : =
null;
  },

  selectMany: function(element) {
    var values, length =3D element.length;
    if (!length) return null;

    for (var i =3D 0, values =3D []; i < length; i++) {
      var opt =3D element.options[i];
      if (opt.selected) values.push(this.optionValue(opt));
    }
    return values;
  },

  optionValue: function(opt) {
    // extend element because hasAttribute may not be native
    return Element.extend(opt).hasAttribute('value') ? opt.value : =
opt.text;
  }
}

/*-----------------------------------------------------------------------=
---*/

Abstract.TimedObserver =3D function() {}
Abstract.TimedObserver.prototype =3D {
  initialize: function(element, frequency, callback) {
    this.frequency =3D frequency;
    this.element   =3D $(element);
    this.callback  =3D callback;

    this.lastValue =3D this.getValue();
    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    var value =3D this.getValue();
    var changed =3D ('string' =3D=3D typeof this.lastValue && 'string' =
=3D=3D typeof value
      ? this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value));
    if (changed) {
      this.callback(this.element, value);
      this.lastValue =3D value;
    }
  }
}

Form.Element.Observer =3D Class.create();
Form.Element.Observer.prototype =3D Object.extend(new =
Abstract.TimedObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer =3D Class.create();
Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), =
{
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*-----------------------------------------------------------------------=
---*/

Abstract.EventObserver =3D function() {}
Abstract.EventObserver.prototype =3D {
  initialize: function(element, callback) {
    this.element  =3D $(element);
    this.callback =3D callback;

    this.lastValue =3D this.getValue();
    if (this.element.tagName.toLowerCase() =3D=3D 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value =3D this.getValue();
    if (this.lastValue !=3D value) {
      this.callback(this.element, value);
      this.lastValue =3D value;
    }
  },

  registerFormCallbacks: function() {
    =
Form.getElements(this.element).each(this.registerCallback.bind(this));
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));
          break;
        default:
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));
          break;
      }
    }
  }
}

Form.Element.EventObserver =3D Class.create();
Form.Element.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver =3D Class.create();
Form.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) {
  var Event =3D new Object();
}

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,
  KEY_HOME:     36,
  KEY_END:      35,
  KEY_PAGEUP:   33,
  KEY_PAGEDOWN: 34,

  element: function(event) {
    return $(event.target || event.srcElement);
  },

  isLeftClick: function(event) {
    return (((event.which) && (event.which =3D=3D 1)) ||
            ((event.button) && (event.button =3D=3D 1)));
  },

  pointerX: function(event) {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || =
document.body.scrollLeft));
  },

  pointerY: function(event) {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },

  stop: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue =3D false;
      event.cancelBubble =3D true;
    }
  },

  // find the first node with the given tagName, starting from the
  // node the event was triggered on; traverses the DOM upwards
  findElement: function(event, tagName) {
    var element =3D Event.element(event);
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() !=3D tagName.toUpperCase())))
      element =3D element.parentNode;
    return element;
  },

  observers: false,

  _observeAndCache: function(element, name, observer, useCapture) {
    if (!this.observers) this.observers =3D [];
    if (element.addEventListener) {
      this.observers.push([element, name, observer, useCapture]);
      element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
      this.observers.push([element, name, observer, useCapture]);
      element.attachEvent('on' + name, observer);
    }
  },

  unloadCache: function() {
    if (!Event.observers) return;
    for (var i =3D 0, length =3D Event.observers.length; i < length; =
i++) {
      Event.stopObserving.apply(this, Event.observers[i]);
      Event.observers[i][0] =3D null;
    }
    Event.observers =3D false;
  },

  observe: function(element, name, observer, useCapture) {
    element =3D $(element);
    useCapture =3D useCapture || false;

    if (name =3D=3D 'keypress' &&
      (Prototype.Browser.WebKit || element.attachEvent))
      name =3D 'keydown';

    Event._observeAndCache(element, name, observer, useCapture);
  },

  stopObserving: function(element, name, observer, useCapture) {
    element =3D $(element);
    useCapture =3D useCapture || false;

    if (name =3D=3D 'keypress' &&
        (Prototype.Browser.WebKit || element.attachEvent))
      name =3D 'keydown';

    if (element.removeEventListener) {
      element.removeEventListener(name, observer, useCapture);
    } else if (element.detachEvent) {
      try {
        element.detachEvent('on' + name, observer);
      } catch (e) {}
    }
  }
});

/* prevent memory leaks in IE */
if (Prototype.Browser.IE)
  Event.observe(window, 'unload', Event.unloadCache, false);
var Position =3D {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every =
time the
  // page is scrolled
  prepare: function() {
    this.deltaX =3D  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =3D  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  realOffset: function(element) {
    var valueT =3D 0, valueL =3D 0;
    do {
      valueT +=3D element.scrollTop  || 0;
      valueL +=3D element.scrollLeft || 0;
      element =3D element.parentNode;
    } while (element);
    return [valueL, valueT];
  },

  cumulativeOffset: function(element) {
    var valueT =3D 0, valueL =3D 0;
    do {
      valueT +=3D element.offsetTop  || 0;
      valueL +=3D element.offsetLeft || 0;
      element =3D element.offsetParent;
    } while (element);
    return [valueL, valueT];
  },

  positionedOffset: function(element) {
    var valueT =3D 0, valueL =3D 0;
    do {
      valueT +=3D element.offsetTop  || 0;
      valueL +=3D element.offsetLeft || 0;
      element =3D element.offsetParent;
      if (element) {
        if(element.tagName=3D=3D'BODY') break;
        var p =3D Element.getStyle(element, 'position');
        if (p =3D=3D 'relative' || p =3D=3D 'absolute') break;
      }
    } while (element);
    return [valueL, valueT];
  },

  offsetParent: function(element) {
    if (element.offsetParent) return element.offsetParent;
    if (element =3D=3D document.body) return element;

    while ((element =3D element.parentNode) && element !=3D =
document.body)
      if (Element.getStyle(element, 'position') !=3D 'static')
        return element;

    return document.body;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp =3D x;
    this.ycomp =3D y;
    this.offset =3D this.cumulativeOffset(element);

    return (y >=3D this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >=3D this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache =3D this.realOffset(element);

    this.xcomp =3D x + offsetcache[0] - this.deltaX;
    this.ycomp =3D y + offsetcache[1] - this.deltaY;
    this.offset =3D this.cumulativeOffset(element);

    return (this.ycomp >=3D this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >=3D this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode =3D=3D 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode =3D=3D 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  page: function(forElement) {
    var valueT =3D 0, valueL =3D 0;

    var element =3D forElement;
    do {
      valueT +=3D element.offsetTop  || 0;
      valueL +=3D element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent =3D=3D document.body)
        if (Element.getStyle(element,'position')=3D=3D'absolute') break;

    } while (element =3D element.offsetParent);

    element =3D forElement;
    do {
      if (!window.opera || element.tagName=3D=3D'BODY') {
        valueT -=3D element.scrollTop  || 0;
        valueL -=3D element.scrollLeft || 0;
      }
    } while (element =3D element.parentNode);

    return [valueL, valueT];
  },

  clone: function(source, target) {
    var options =3D Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || {})

    // find page position of source
    source =3D $(source);
    var p =3D Position.page(source);

    // find coordinate system to use
    target =3D $(target);
    var delta =3D [0, 0];
    var parent =3D null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(target,'position') =3D=3D 'absolute') {
      parent =3D Position.offsetParent(target);
      delta =3D Position.page(parent);
    }

    // correct by body offsets (fixes Safari)
    if (parent =3D=3D document.body) {
      delta[0] -=3D document.body.offsetLeft;
      delta[1] -=3D document.body.offsetTop;
    }

    // set position
    if(options.setLeft)   target.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';
    if(options.setTop)    target.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';
    if(options.setWidth)  target.style.width =3D source.offsetWidth + =
'px';
    if(options.setHeight) target.style.height =3D source.offsetHeight + =
'px';
  },

  absolutize: function(element) {
    element =3D $(element);
    if (element.style.position =3D=3D 'absolute') return;
    Position.prepare();

    var offsets =3D Position.positionedOffset(element);
    var top     =3D offsets[1];
    var left    =3D offsets[0];
    var width   =3D element.clientWidth;
    var height  =3D element.clientHeight;

    element._originalLeft   =3D left - parseFloat(element.style.left  || =
0);
    element._originalTop    =3D top  - parseFloat(element.style.top || =
0);
    element._originalWidth  =3D element.style.width;
    element._originalHeight =3D element.style.height;

    element.style.position =3D 'absolute';
    element.style.top    =3D top + 'px';
    element.style.left   =3D left + 'px';
    element.style.width  =3D width + 'px';
    element.style.height =3D height + 'px';
  },

  relativize: function(element) {
    element =3D $(element);
    if (element.style.position =3D=3D 'relative') return;
    Position.prepare();

    element.style.position =3D 'relative';
    var top  =3D parseFloat(element.style.top  || 0) - =
(element._originalTop || 0);
    var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);

    element.style.top    =3D top + 'px';
    element.style.left   =3D left + 'px';
    element.style.height =3D element._originalHeight;
    element.style.width  =3D element._originalWidth;
  }
}

// Safari returns margins on body which is incorrect if the child is =
absolutely
// positioned.  For performance reasons, redefine =
Position.cumulativeOffset for
// KHTML/WebKit only.
if (Prototype.Browser.WebKit) {
  Position.cumulativeOffset =3D function(element) {
    var valueT =3D 0, valueL =3D 0;
    do {
      valueT +=3D element.offsetTop  || 0;
      valueL +=3D element.offsetLeft || 0;
      if (element.offsetParent =3D=3D document.body)
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;

      element =3D element.offsetParent;
    } while (element);

    return [valueL, valueT];
  }
}

Element.addMethods();
------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: application/octet-stream
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/ind_4h/lightwindow/javascript/effects.js

// script.aculo.us effects.js v1.7.1_beta2, Sat Apr 28 15:20:12 CEST 2007=0A=
=0A=
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// Contributors:=0A=
//  Justin Palmer (http://encytemedia.com/)=0A=
//  Mark Pilgrim (http://diveintomark.org/)=0A=
//  Martin Bialasinki=0A=
// =0A=
// script.aculo.us is freely distributable under the terms of an =
MIT-style license.=0A=
// For details, see the script.aculo.us web site: =
http://script.aculo.us/ =0A=
=0A=
// converts rgb() and #xxx to #xxxxxx format,  =0A=
// returns self (or first argument) if not convertable  =0A=
String.prototype.parseColor =3D function() {  =0A=
  var color =3D '#';=0A=
  if(this.slice(0,4) =3D=3D 'rgb(') {  =0A=
    var cols =3D this.slice(4,this.length-1).split(',');  =0A=
    var i=3D0; do { color +=3D parseInt(cols[i]).toColorPart() } while =
(++i<3);  =0A=
  } else {  =0A=
    if(this.slice(0,1) =3D=3D '#') {  =0A=
      if(this.length=3D=3D4) for(var i=3D1;i<4;i++) color +=3D =
(this.charAt(i) + this.charAt(i)).toLowerCase();  =0A=
      if(this.length=3D=3D7) color =3D this.toLowerCase();  =0A=
    }  =0A=
  }  =0A=
  return(color.length=3D=3D7 ? color : (arguments[0] || this));  =0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.collectTextNodes =3D function(element) {  =0A=
  return $A($(element).childNodes).collect( function(node) {=0A=
    return (node.nodeType=3D=3D3 ? node.nodeValue : =0A=
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));=0A=
  }).flatten().join('');=0A=
}=0A=
=0A=
Element.collectTextNodesIgnoreClass =3D function(element, className) {  =0A=
  return $A($(element).childNodes).collect( function(node) {=0A=
    return (node.nodeType=3D=3D3 ? node.nodeValue : =0A=
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? =0A=
        Element.collectTextNodesIgnoreClass(node, className) : ''));=0A=
  }).flatten().join('');=0A=
}=0A=
=0A=
Element.setContentZoom =3D function(element, percent) {=0A=
  element =3D $(element);  =0A=
  element.setStyle({fontSize: (percent/100) + 'em'});   =0A=
  if(Prototype.Browser.WebKit) window.scrollBy(0,0);=0A=
  return element;=0A=
}=0A=
=0A=
Element.getInlineOpacity =3D function(element){=0A=
  return $(element).style.opacity || '';=0A=
}=0A=
=0A=
Element.forceRerendering =3D function(element) {=0A=
  try {=0A=
    element =3D $(element);=0A=
    var n =3D document.createTextNode(' ');=0A=
    element.appendChild(n);=0A=
    element.removeChild(n);=0A=
  } catch(e) { }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Array.prototype.call =3D function() {=0A=
  var args =3D arguments;=0A=
  this.each(function(f){ f.apply(this, args) });=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Effect =3D {=0A=
  _elementDoesNotExistError: {=0A=
    name: 'ElementDoesNotExistError',=0A=
    message: 'The specified DOM element does not exist, but is required =
for this effect to operate'=0A=
  },=0A=
  tagifyText: function(element) {=0A=
    if(typeof Builder =3D=3D 'undefined')=0A=
      throw("Effect.tagifyText requires including script.aculo.us' =
builder.js library");=0A=
      =0A=
    var tagifyStyle =3D 'position:relative';=0A=
    if(Prototype.Browser.IE) tagifyStyle +=3D ';zoom:1';=0A=
    =0A=
    element =3D $(element);=0A=
    $A(element.childNodes).each( function(child) {=0A=
      if(child.nodeType=3D=3D3) {=0A=
        child.nodeValue.toArray().each( function(character) {=0A=
          element.insertBefore(=0A=
            Builder.node('span',{style: tagifyStyle},=0A=
              character =3D=3D ' ' ? String.fromCharCode(160) : =
character), =0A=
              child);=0A=
        });=0A=
        Element.remove(child);=0A=
      }=0A=
    });=0A=
  },=0A=
  multiple: function(element, effect) {=0A=
    var elements;=0A=
    if(((typeof element =3D=3D 'object') || =0A=
        (typeof element =3D=3D 'function')) && =0A=
       (element.length))=0A=
      elements =3D element;=0A=
    else=0A=
      elements =3D $(element).childNodes;=0A=
      =0A=
    var options =3D Object.extend({=0A=
      speed: 0.1,=0A=
      delay: 0.0=0A=
    }, arguments[2] || {});=0A=
    var masterDelay =3D options.delay;=0A=
=0A=
    $A(elements).each( function(element, index) {=0A=
      new effect(element, Object.extend(options, { delay: index * =
options.speed + masterDelay }));=0A=
    });=0A=
  },=0A=
  PAIRS: {=0A=
    'slide':  ['SlideDown','SlideUp'],=0A=
    'blind':  ['BlindDown','BlindUp'],=0A=
    'appear': ['Appear','Fade']=0A=
  },=0A=
  toggle: function(element, effect) {=0A=
    element =3D $(element);=0A=
    effect =3D (effect || 'appear').toLowerCase();=0A=
    var options =3D Object.extend({=0A=
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }=0A=
    }, arguments[2] || {});=0A=
    Effect[element.visible() ? =0A=
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, =
options);=0A=
  }=0A=
};=0A=
=0A=
var Effect2 =3D Effect; // deprecated=0A=
=0A=
/* ------------- transitions ------------- */=0A=
=0A=
Effect.Transitions =3D {=0A=
  linear: Prototype.K,=0A=
  sinoidal: function(pos) {=0A=
    return (-Math.cos(pos*Math.PI)/2) + 0.5;=0A=
  },=0A=
  reverse: function(pos) {=0A=
    return 1-pos;=0A=
  },=0A=
  flicker: function(pos) {=0A=
    var pos =3D ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;=0A=
    return (pos > 1 ? 1 : pos);=0A=
  },=0A=
  wobble: function(pos) {=0A=
    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;=0A=
  },=0A=
  pulse: function(pos, pulses) { =0A=
    pulses =3D pulses || 5; =0A=
    return (=0A=
      Math.round((pos % (1/pulses)) * pulses) =3D=3D 0 ? =0A=
            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : =0A=
        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))=0A=
      );=0A=
  },=0A=
  none: function(pos) {=0A=
    return 0;=0A=
  },=0A=
  full: function(pos) {=0A=
    return 1;=0A=
  }=0A=
};=0A=
=0A=
/* ------------- core effects ------------- */=0A=
=0A=
Effect.ScopedQueue =3D Class.create();=0A=
Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {=0A=
  initialize: function() {=0A=
    this.effects  =3D [];=0A=
    this.interval =3D null;    =0A=
  },=0A=
  _each: function(iterator) {=0A=
    this.effects._each(iterator);=0A=
  },=0A=
  add: function(effect) {=0A=
    var timestamp =3D new Date().getTime();=0A=
    =0A=
    var position =3D (typeof effect.options.queue =3D=3D 'string') ? =0A=
      effect.options.queue : effect.options.queue.position;=0A=
    =0A=
    switch(position) {=0A=
      case 'front':=0A=
        // move unstarted effects after this effect  =0A=
        this.effects.findAll(function(e){ return e.state=3D=3D'idle' =
}).each( function(e) {=0A=
            e.startOn  +=3D effect.finishOn;=0A=
            e.finishOn +=3D effect.finishOn;=0A=
          });=0A=
        break;=0A=
      case 'with-last':=0A=
        timestamp =3D this.effects.pluck('startOn').max() || timestamp;=0A=
        break;=0A=
      case 'end':=0A=
        // start effect after last queued effect has finished=0A=
        timestamp =3D this.effects.pluck('finishOn').max() || timestamp;=0A=
        break;=0A=
    }=0A=
    =0A=
    effect.startOn  +=3D timestamp;=0A=
    effect.finishOn +=3D timestamp;=0A=
=0A=
    if(!effect.options.queue.limit || (this.effects.length < =
effect.options.queue.limit))=0A=
      this.effects.push(effect);=0A=
    =0A=
    if(!this.interval)=0A=
      this.interval =3D setInterval(this.loop.bind(this), 15);=0A=
  },=0A=
  remove: function(effect) {=0A=
    this.effects =3D this.effects.reject(function(e) { return =
e=3D=3Deffect });=0A=
    if(this.effects.length =3D=3D 0) {=0A=
      clearInterval(this.interval);=0A=
      this.interval =3D null;=0A=
    }=0A=
  },=0A=
  loop: function() {=0A=
    var timePos =3D new Date().getTime();=0A=
    for(var i=3D0, len=3Dthis.effects.length;i<len;i++) =0A=
      this.effects[i] && this.effects[i].loop(timePos);=0A=
  }=0A=
});=0A=
=0A=
Effect.Queues =3D {=0A=
  instances: $H(),=0A=
  get: function(queueName) {=0A=
    if(typeof queueName !=3D 'string') return queueName;=0A=
    =0A=
    if(!this.instances[queueName])=0A=
      this.instances[queueName] =3D new Effect.ScopedQueue();=0A=
      =0A=
    return this.instances[queueName];=0A=
  }=0A=
}=0A=
Effect.Queue =3D Effect.Queues.get('global');=0A=
=0A=
Effect.DefaultOptions =3D {=0A=
  transition: Effect.Transitions.sinoidal,=0A=
  duration:   1.0,   // seconds=0A=
  fps:        100,   // 100=3D assume 66fps max.=0A=
  sync:       false, // true for combining=0A=
  from:       0.0,=0A=
  to:         1.0,=0A=
  delay:      0.0,=0A=
  queue:      'parallel'=0A=
}=0A=
=0A=
Effect.Base =3D function() {};=0A=
Effect.Base.prototype =3D {=0A=
  position: null,=0A=
  start: function(options) {=0A=
    function codeForEvent(options,eventName){=0A=
      return (=0A=
        (options[eventName+'Internal'] ? =
'this.options.'+eventName+'Internal(this);' : '') +=0A=
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')=0A=
      );=0A=
    }=0A=
    if(options.transition =3D=3D=3D false) options.transition =3D =
Effect.Transitions.linear;=0A=
    this.options      =3D =
Object.extend(Object.extend({},Effect.DefaultOptions), options || {});=0A=
    this.currentFrame =3D 0;=0A=
    this.state        =3D 'idle';=0A=
    this.startOn      =3D this.options.delay*1000;=0A=
    this.finishOn     =3D this.startOn+(this.options.duration*1000);=0A=
    this.fromToDelta  =3D this.options.to-this.options.from;=0A=
    this.totalTime    =3D this.finishOn-this.startOn;=0A=
    this.totalFrames  =3D this.options.fps*this.options.duration;=0A=
    =0A=
    eval('this.render =3D function(pos){ '+=0A=
      'if(this.state=3D=3D"idle"){this.state=3D"running";'+=0A=
      codeForEvent(options,'beforeSetup')+=0A=
      (this.setup ? 'this.setup();':'')+ =0A=
      codeForEvent(options,'afterSetup')+=0A=
      '};if(this.state=3D=3D"running"){'+=0A=
      =
'pos=3Dthis.options.transition(pos)*'+this.fromToDelta+'+'+this.options.f=
rom+';'+=0A=
      'this.position=3Dpos;'+=0A=
      codeForEvent(options,'beforeUpdate')+=0A=
      (this.update ? 'this.update(pos);':'')+=0A=
      codeForEvent(options,'afterUpdate')+=0A=
      '}}');=0A=
    =0A=
    this.event('beforeStart');=0A=
    if(!this.options.sync)=0A=
      Effect.Queues.get(typeof this.options.queue =3D=3D 'string' ? =0A=
        'global' : this.options.queue.scope).add(this);=0A=
  },=0A=
  loop: function(timePos) {=0A=
    if(timePos >=3D this.startOn) {=0A=
      if(timePos >=3D this.finishOn) {=0A=
        this.render(1.0);=0A=
        this.cancel();=0A=
        this.event('beforeFinish');=0A=
        if(this.finish) this.finish(); =0A=
        this.event('afterFinish');=0A=
        return;  =0A=
      }=0A=
      var pos   =3D (timePos - this.startOn) / this.totalTime,=0A=
          frame =3D Math.round(pos * this.totalFrames);=0A=
      if(frame > this.currentFrame) {=0A=
        this.render(pos);=0A=
        this.currentFrame =3D frame;=0A=
      }=0A=
    }=0A=
  },=0A=
  cancel: function() {=0A=
    if(!this.options.sync)=0A=
      Effect.Queues.get(typeof this.options.queue =3D=3D 'string' ? =0A=
        'global' : this.options.queue.scope).remove(this);=0A=
    this.state =3D 'finished';=0A=
  },=0A=
  event: function(eventName) {=0A=
    if(this.options[eventName + 'Internal']) this.options[eventName + =
'Internal'](this);=0A=
    if(this.options[eventName]) this.options[eventName](this);=0A=
  },=0A=
  inspect: function() {=0A=
    var data =3D $H();=0A=
    for(property in this)=0A=
      if(typeof this[property] !=3D 'function') data[property] =3D =
this[property];=0A=
    return '#<Effect:' + data.inspect() + ',options:' + =
$H(this.options).inspect() + '>';=0A=
  }=0A=
}=0A=
=0A=
Effect.Parallel =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Parallel.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(effects) {=0A=
    this.effects =3D effects || [];=0A=
    this.start(arguments[1]);=0A=
  },=0A=
  update: function(position) {=0A=
    this.effects.invoke('render', position);=0A=
  },=0A=
  finish: function(position) {=0A=
    this.effects.each( function(effect) {=0A=
      effect.render(1.0);=0A=
      effect.cancel();=0A=
      effect.event('beforeFinish');=0A=
      if(effect.finish) effect.finish(position);=0A=
      effect.event('afterFinish');=0A=
    });=0A=
  }=0A=
});=0A=
=0A=
Effect.Event =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Event.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function() {=0A=
    var options =3D Object.extend({=0A=
      duration: 0=0A=
    }, arguments[0] || {});=0A=
    this.start(options);=0A=
  },=0A=
  update: Prototype.emptyFunction=0A=
});=0A=
=0A=
Effect.Opacity =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Opacity.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if(!this.element) throw(Effect._elementDoesNotExistError);=0A=
    // make this work on IE on elements without 'layout'=0A=
    if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))=0A=
      this.element.setStyle({zoom: 1});=0A=
    var options =3D Object.extend({=0A=
      from: this.element.getOpacity() || 0.0,=0A=
      to:   1.0=0A=
    }, arguments[1] || {});=0A=
    this.start(options);=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setOpacity(position);=0A=
  }=0A=
});=0A=
=0A=
Effect.Move =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Move.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if(!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      x:    0,=0A=
      y:    0,=0A=
      mode: 'relative'=0A=
    }, arguments[1] || {});=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    // Bug in Opera: Opera returns the "real" position of a static =
element or=0A=
    // relative element that does not have top/left explicitly set.=0A=
    // =3D=3D> Always set top and left for position relative elements in =
your stylesheets =0A=
    // (to 0 if you do not need them) =0A=
    this.element.makePositioned();=0A=
    this.originalLeft =3D parseFloat(this.element.getStyle('left') || =
'0');=0A=
    this.originalTop  =3D parseFloat(this.element.getStyle('top')  || =
'0');=0A=
    if(this.options.mode =3D=3D 'absolute') {=0A=
      // absolute movement, so we need to calc deltaX and deltaY=0A=
      this.options.x =3D this.options.x - this.originalLeft;=0A=
      this.options.y =3D this.options.y - this.originalTop;=0A=
    }=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setStyle({=0A=
      left: Math.round(this.options.x  * position + this.originalLeft) + =
'px',=0A=
      top:  Math.round(this.options.y  * position + this.originalTop)  + =
'px'=0A=
    });=0A=
  }=0A=
});=0A=
=0A=
// for backwards compatibility=0A=
Effect.MoveBy =3D function(element, toTop, toLeft) {=0A=
  return new Effect.Move(element, =0A=
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));=0A=
};=0A=
=0A=
Effect.Scale =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Scale.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(element, percent) {=0A=
    this.element =3D $(element);=0A=
    if(!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      scaleX: true,=0A=
      scaleY: true,=0A=
      scaleContent: true,=0A=
      scaleFromCenter: false,=0A=
      scaleMode: 'box',        // 'box' or 'contents' or {} with =
provided values=0A=
      scaleFrom: 100.0,=0A=
      scaleTo:   percent=0A=
    }, arguments[2] || {});=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    this.restoreAfterFinish =3D this.options.restoreAfterFinish || false;=0A=
    this.elementPositioning =3D this.element.getStyle('position');=0A=
    =0A=
    this.originalStyle =3D {};=0A=
    ['top','left','width','height','fontSize'].each( function(k) {=0A=
      this.originalStyle[k] =3D this.element.style[k];=0A=
    }.bind(this));=0A=
      =0A=
    this.originalTop  =3D this.element.offsetTop;=0A=
    this.originalLeft =3D this.element.offsetLeft;=0A=
    =0A=
    var fontSize =3D this.element.getStyle('font-size') || '100%';=0A=
    ['em','px','%','pt'].each( function(fontSizeType) {=0A=
      if(fontSize.indexOf(fontSizeType)>0) {=0A=
        this.fontSize     =3D parseFloat(fontSize);=0A=
        this.fontSizeType =3D fontSizeType;=0A=
      }=0A=
    }.bind(this));=0A=
    =0A=
    this.factor =3D (this.options.scaleTo - this.options.scaleFrom)/100;=0A=
    =0A=
    this.dims =3D null;=0A=
    if(this.options.scaleMode=3D=3D'box')=0A=
      this.dims =3D [this.element.offsetHeight, =
this.element.offsetWidth];=0A=
    if(/^content/.test(this.options.scaleMode))=0A=
      this.dims =3D [this.element.scrollHeight, =
this.element.scrollWidth];=0A=
    if(!this.dims)=0A=
      this.dims =3D [this.options.scaleMode.originalHeight,=0A=
                   this.options.scaleMode.originalWidth];=0A=
  },=0A=
  update: function(position) {=0A=
    var currentScale =3D (this.options.scaleFrom/100.0) + (this.factor * =
position);=0A=
    if(this.options.scaleContent && this.fontSize)=0A=
      this.element.setStyle({fontSize: this.fontSize * currentScale + =
this.fontSizeType });=0A=
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * =
currentScale);=0A=
  },=0A=
  finish: function(position) {=0A=
    if(this.restoreAfterFinish) =
this.element.setStyle(this.originalStyle);=0A=
  },=0A=
  setDimensions: function(height, width) {=0A=
    var d =3D {};=0A=
    if(this.options.scaleX) d.width =3D Math.round(width) + 'px';=0A=
    if(this.options.scaleY) d.height =3D Math.round(height) + 'px';=0A=
    if(this.options.scaleFromCenter) {=0A=
      var topd  =3D (height - this.dims[0])/2;=0A=
      var leftd =3D (width  - this.dims[1])/2;=0A=
      if(this.elementPositioning =3D=3D 'absolute') {=0A=
        if(this.options.scaleY) d.top =3D this.originalTop-topd + 'px';=0A=
        if(this.options.scaleX) d.left =3D this.originalLeft-leftd + =
'px';=0A=
      } else {=0A=
        if(this.options.scaleY) d.top =3D -topd + 'px';=0A=
        if(this.options.scaleX) d.left =3D -leftd + 'px';=0A=
      }=0A=
    }=0A=
    this.element.setStyle(d);=0A=
  }=0A=
});=0A=
=0A=
Effect.Highlight =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Highlight.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if(!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({ startcolor: '#ffff99' }, =
arguments[1] || {});=0A=
    this.start(options);=0A=
  },=0A=
  setup: function() {=0A=
    // Prevent executing on elements not in the layout flow=0A=
    if(this.element.getStyle('display')=3D=3D'none') { this.cancel(); =
return; }=0A=
    // Disable background image during the effect=0A=
    this.oldStyle =3D {};=0A=
    if (!this.options.keepBackgroundImage) {=0A=
      this.oldStyle.backgroundImage =3D =
this.element.getStyle('background-image');=0A=
      this.element.setStyle({backgroundImage: 'none'});=0A=
    }=0A=
    if(!this.options.endcolor)=0A=
      this.options.endcolor =3D =
this.element.getStyle('background-color').parseColor('#ffffff');=0A=
    if(!this.options.restorecolor)=0A=
      this.options.restorecolor =3D =
this.element.getStyle('background-color');=0A=
    // init color calculations=0A=
    this._base  =3D $R(0,2).map(function(i){ return =
parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));=0A=
    this._delta =3D $R(0,2).map(function(i){ return =
parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] =
}.bind(this));=0A=
  },=0A=
  update: function(position) {=0A=
    this.element.setStyle({backgroundColor: =
$R(0,2).inject('#',function(m,v,i){=0A=
      return =
m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); =
}.bind(this)) });=0A=
  },=0A=
  finish: function() {=0A=
    this.element.setStyle(Object.extend(this.oldStyle, {=0A=
      backgroundColor: this.options.restorecolor=0A=
    }));=0A=
  }=0A=
});=0A=
=0A=
Effect.ScrollTo =3D Class.create();=0A=
Object.extend(Object.extend(Effect.ScrollTo.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    this.start(arguments[1] || {});=0A=
  },=0A=
  setup: function() {=0A=
    Position.prepare();=0A=
    var offsets =3D Position.cumulativeOffset(this.element);=0A=
    if(this.options.offset) offsets[1] +=3D this.options.offset;=0A=
    var max =3D window.innerHeight ? =0A=
      window.height - window.innerHeight :=0A=
      document.body.scrollHeight - =0A=
        (document.documentElement.clientHeight ? =0A=
          document.documentElement.clientHeight : =
document.body.clientHeight);=0A=
    this.scrollStart =3D Position.deltaY;=0A=
    this.delta =3D (offsets[1] > max ? max : offsets[1]) - =
this.scrollStart;=0A=
  },=0A=
  update: function(position) {=0A=
    Position.prepare();=0A=
    window.scrollTo(Position.deltaX, =0A=
      this.scrollStart + (position*this.delta));=0A=
  }=0A=
});=0A=
=0A=
/* ------------- combination effects ------------- */=0A=
=0A=
Effect.Fade =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldOpacity =3D element.getInlineOpacity();=0A=
  var options =3D Object.extend({=0A=
  from: element.getOpacity() || 1.0,=0A=
  to:   0.0,=0A=
  afterFinishInternal: function(effect) { =0A=
    if(effect.options.to!=3D0) return;=0A=
    effect.element.hide().setStyle({opacity: oldOpacity}); =0A=
  }}, arguments[1] || {});=0A=
  return new Effect.Opacity(element,options);=0A=
}=0A=
=0A=
Effect.Appear =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
  from: (element.getStyle('display') =3D=3D 'none' ? 0.0 : =
element.getOpacity() || 0.0),=0A=
  to:   1.0,=0A=
  // force Safari to render floated elements properly=0A=
  afterFinishInternal: function(effect) {=0A=
    effect.element.forceRerendering();=0A=
  },=0A=
  beforeSetup: function(effect) {=0A=
    effect.element.setOpacity(effect.options.from).show(); =0A=
  }}, arguments[1] || {});=0A=
  return new Effect.Opacity(element,options);=0A=
}=0A=
=0A=
Effect.Puff =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D { =0A=
    opacity: element.getInlineOpacity(), =0A=
    position: element.getStyle('position'),=0A=
    top:  element.style.top,=0A=
    left: element.style.left,=0A=
    width: element.style.width,=0A=
    height: element.style.height=0A=
  };=0A=
  return new Effect.Parallel(=0A=
   [ new Effect.Scale(element, 200, =0A=
      { sync: true, scaleFromCenter: true, scaleContent: true, =
restoreAfterFinish: true }), =0A=
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], =0A=
     Object.extend({ duration: 1.0, =0A=
      beforeSetupInternal: function(effect) {=0A=
        Position.absolutize(effect.effects[0].element)=0A=
      },=0A=
      afterFinishInternal: function(effect) {=0A=
         effect.effects[0].element.hide().setStyle(oldStyle); }=0A=
     }, arguments[1] || {})=0A=
   );=0A=
}=0A=
=0A=
Effect.BlindUp =3D function(element) {=0A=
  element =3D $(element);=0A=
  element.makeClipping();=0A=
  return new Effect.Scale(element, 0,=0A=
    Object.extend({ scaleContent: false, =0A=
      scaleX: false, =0A=
      restoreAfterFinish: true,=0A=
      afterFinishInternal: function(effect) {=0A=
        effect.element.hide().undoClipping();=0A=
      } =0A=
    }, arguments[1] || {})=0A=
  );=0A=
}=0A=
=0A=
Effect.BlindDown =3D function(element) {=0A=
  element =3D $(element);=0A=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, 100, Object.extend({ =0A=
    scaleContent: false, =0A=
    scaleX: false,=0A=
    scaleFrom: 0,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makeClipping().setStyle({height: '0px'}).show(); =0A=
    },  =0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.undoClipping();=0A=
    }=0A=
  }, arguments[1] || {}));=0A=
}=0A=
=0A=
Effect.SwitchOff =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldOpacity =3D element.getInlineOpacity();=0A=
  return new Effect.Appear(element, Object.extend({=0A=
    duration: 0.4,=0A=
    from: 0,=0A=
    transition: Effect.Transitions.flicker,=0A=
    afterFinishInternal: function(effect) {=0A=
      new Effect.Scale(effect.element, 1, { =0A=
        duration: 0.3, scaleFromCenter: true,=0A=
        scaleX: false, scaleContent: false, restoreAfterFinish: true,=0A=
        beforeSetup: function(effect) { =0A=
          effect.element.makePositioned().makeClipping();=0A=
        },=0A=
        afterFinishInternal: function(effect) {=0A=
          =
effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: =
oldOpacity});=0A=
        }=0A=
      })=0A=
    }=0A=
  }, arguments[1] || {}));=0A=
}=0A=
=0A=
Effect.DropOut =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    top: element.getStyle('top'),=0A=
    left: element.getStyle('left'),=0A=
    opacity: element.getInlineOpacity() };=0A=
  return new Effect.Parallel(=0A=
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), =0A=
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],=0A=
    Object.extend(=0A=
      { duration: 0.5,=0A=
        beforeSetup: function(effect) {=0A=
          effect.effects[0].element.makePositioned(); =0A=
        },=0A=
        afterFinishInternal: function(effect) {=0A=
          =
effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);=0A=
        } =0A=
      }, arguments[1] || {}));=0A=
}=0A=
=0A=
Effect.Shake =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    top: element.getStyle('top'),=0A=
    left: element.getStyle('left') };=0A=
    return new Effect.Move(element, =0A=
      { x:  20, y: 0, duration: 0.05, afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: =
function(effect) {=0A=
    new Effect.Move(effect.element,=0A=
      { x: -20, y: 0, duration: 0.05, afterFinishInternal: =
function(effect) {=0A=
        effect.element.undoPositioned().setStyle(oldStyle);=0A=
  }}) }}) }}) }}) }}) }});=0A=
}=0A=
=0A=
Effect.SlideDown =3D function(element) {=0A=
  element =3D $(element).cleanWhitespace();=0A=
  // SlideDown need to have the content of the element wrapped in a =
container element with fixed height!=0A=
  var oldInnerBottom =3D element.down().getStyle('bottom');=0A=
  var elementDimensions =3D element.getDimensions();=0A=
  return new Effect.Scale(element, 100, Object.extend({ =0A=
    scaleContent: false, =0A=
    scaleX: false, =0A=
    scaleFrom: window.opera ? 0 : 1,=0A=
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: =
elementDimensions.width},=0A=
    restoreAfterFinish: true,=0A=
    afterSetup: function(effect) {=0A=
      effect.element.makePositioned();=0A=
      effect.element.down().makePositioned();=0A=
      if(window.opera) effect.element.setStyle({top: ''});=0A=
      effect.element.makeClipping().setStyle({height: '0px'}).show(); =0A=
    },=0A=
    afterUpdateInternal: function(effect) {=0A=
      effect.element.down().setStyle({bottom:=0A=
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); =0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.undoClipping().undoPositioned();=0A=
      effect.element.down().undoPositioned().setStyle({bottom: =
oldInnerBottom}); }=0A=
    }, arguments[1] || {})=0A=
  );=0A=
}=0A=
=0A=
Effect.SlideUp =3D function(element) {=0A=
  element =3D $(element).cleanWhitespace();=0A=
  var oldInnerBottom =3D element.down().getStyle('bottom');=0A=
  return new Effect.Scale(element, window.opera ? 0 : 1,=0A=
   Object.extend({ scaleContent: false, =0A=
    scaleX: false, =0A=
    scaleMode: 'box',=0A=
    scaleFrom: 100,=0A=
    restoreAfterFinish: true,=0A=
    beforeStartInternal: function(effect) {=0A=
      effect.element.makePositioned();=0A=
      effect.element.down().makePositioned();=0A=
      if(window.opera) effect.element.setStyle({top: ''});=0A=
      effect.element.makeClipping().show();=0A=
    },  =0A=
    afterUpdateInternal: function(effect) {=0A=
      effect.element.down().setStyle({bottom:=0A=
        (effect.dims[0] - effect.element.clientHeight) + 'px' });=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      =
effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: =
oldInnerBottom});=0A=
      effect.element.down().undoPositioned();=0A=
    }=0A=
   }, arguments[1] || {})=0A=
  );=0A=
}=0A=
=0A=
// Bug in opera makes the TD containing this element expand for a =
instance after finish =0A=
Effect.Squish =3D function(element) {=0A=
  return new Effect.Scale(element, window.opera ? 1 : 0, { =0A=
    restoreAfterFinish: true,=0A=
    beforeSetup: function(effect) {=0A=
      effect.element.makeClipping(); =0A=
    },  =0A=
    afterFinishInternal: function(effect) {=0A=
      effect.element.hide().undoClipping(); =0A=
    }=0A=
  });=0A=
}=0A=
=0A=
Effect.Grow =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
    direction: 'center',=0A=
    moveTransition: Effect.Transitions.sinoidal,=0A=
    scaleTransition: Effect.Transitions.sinoidal,=0A=
    opacityTransition: Effect.Transitions.full=0A=
  }, arguments[1] || {});=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    height: element.style.height,=0A=
    width: element.style.width,=0A=
    opacity: element.getInlineOpacity() };=0A=
=0A=
  var dims =3D element.getDimensions();    =0A=
  var initialMoveX, initialMoveY;=0A=
  var moveX, moveY;=0A=
  =0A=
  switch (options.direction) {=0A=
    case 'top-left':=0A=
      initialMoveX =3D initialMoveY =3D moveX =3D moveY =3D 0; =0A=
      break;=0A=
    case 'top-right':=0A=
      initialMoveX =3D dims.width;=0A=
      initialMoveY =3D moveY =3D 0;=0A=
      moveX =3D -dims.width;=0A=
      break;=0A=
    case 'bottom-left':=0A=
      initialMoveX =3D moveX =3D 0;=0A=
      initialMoveY =3D dims.height;=0A=
      moveY =3D -dims.height;=0A=
      break;=0A=
    case 'bottom-right':=0A=
      initialMoveX =3D dims.width;=0A=
      initialMoveY =3D dims.height;=0A=
      moveX =3D -dims.width;=0A=
      moveY =3D -dims.height;=0A=
      break;=0A=
    case 'center':=0A=
      initialMoveX =3D dims.width / 2;=0A=
      initialMoveY =3D dims.height / 2;=0A=
      moveX =3D -dims.width / 2;=0A=
      moveY =3D -dims.height / 2;=0A=
      break;=0A=
  }=0A=
  =0A=
  return new Effect.Move(element, {=0A=
    x: initialMoveX,=0A=
    y: initialMoveY,=0A=
    duration: 0.01, =0A=
    beforeSetup: function(effect) {=0A=
      effect.element.hide().makeClipping().makePositioned();=0A=
    },=0A=
    afterFinishInternal: function(effect) {=0A=
      new Effect.Parallel(=0A=
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, =
from: 0.0, transition: options.opacityTransition }),=0A=
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: =
true, transition: options.moveTransition }),=0A=
          new Effect.Scale(effect.element, 100, {=0A=
            scaleMode: { originalHeight: dims.height, originalWidth: =
dims.width }, =0A=
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: =
options.scaleTransition, restoreAfterFinish: true})=0A=
        ], Object.extend({=0A=
             beforeSetup: function(effect) {=0A=
               effect.effects[0].element.setStyle({height: =
'0px'}).show(); =0A=
             },=0A=
             afterFinishInternal: function(effect) {=0A=
               =
effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldSty=
le); =0A=
             }=0A=
           }, options)=0A=
      )=0A=
    }=0A=
  });=0A=
}=0A=
=0A=
Effect.Shrink =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options =3D Object.extend({=0A=
    direction: 'center',=0A=
    moveTransition: Effect.Transitions.sinoidal,=0A=
    scaleTransition: Effect.Transitions.sinoidal,=0A=
    opacityTransition: Effect.Transitions.none=0A=
  }, arguments[1] || {});=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    height: element.style.height,=0A=
    width: element.style.width,=0A=
    opacity: element.getInlineOpacity() };=0A=
=0A=
  var dims =3D element.getDimensions();=0A=
  var moveX, moveY;=0A=
  =0A=
  switch (options.direction) {=0A=
    case 'top-left':=0A=
      moveX =3D moveY =3D 0;=0A=
      break;=0A=
    case 'top-right':=0A=
      moveX =3D dims.width;=0A=
      moveY =3D 0;=0A=
      break;=0A=
    case 'bottom-left':=0A=
      moveX =3D 0;=0A=
      moveY =3D dims.height;=0A=
      break;=0A=
    case 'bottom-right':=0A=
      moveX =3D dims.width;=0A=
      moveY =3D dims.height;=0A=
      break;=0A=
    case 'center':  =0A=
      moveX =3D dims.width / 2;=0A=
      moveY =3D dims.height / 2;=0A=
      break;=0A=
  }=0A=
  =0A=
  return new Effect.Parallel(=0A=
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, =
transition: options.opacityTransition }),=0A=
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, =
transition: options.scaleTransition, restoreAfterFinish: true}),=0A=
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, =
transition: options.moveTransition })=0A=
    ], Object.extend({            =0A=
         beforeStartInternal: function(effect) {=0A=
           effect.effects[0].element.makePositioned().makeClipping(); =0A=
         },=0A=
         afterFinishInternal: function(effect) {=0A=
           =
effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle=
(oldStyle); }=0A=
       }, options)=0A=
  );=0A=
}=0A=
=0A=
Effect.Pulsate =3D function(element) {=0A=
  element =3D $(element);=0A=
  var options    =3D arguments[1] || {};=0A=
  var oldOpacity =3D element.getInlineOpacity();=0A=
  var transition =3D options.transition || Effect.Transitions.sinoidal;=0A=
  var reverser   =3D function(pos){ return =
transition(1-Effect.Transitions.pulse(pos, options.pulses)) };=0A=
  reverser.bind(transition);=0A=
  return new Effect.Opacity(element, =0A=
    Object.extend(Object.extend({  duration: 2.0, from: 0,=0A=
      afterFinishInternal: function(effect) { =
effect.element.setStyle({opacity: oldOpacity}); }=0A=
    }, options), {transition: reverser}));=0A=
}=0A=
=0A=
Effect.Fold =3D function(element) {=0A=
  element =3D $(element);=0A=
  var oldStyle =3D {=0A=
    top: element.style.top,=0A=
    left: element.style.left,=0A=
    width: element.style.width,=0A=
    height: element.style.height };=0A=
  element.makeClipping();=0A=
  return new Effect.Scale(element, 5, Object.extend({   =0A=
    scaleContent: false,=0A=
    scaleX: false,=0A=
    afterFinishInternal: function(effect) {=0A=
    new Effect.Scale(element, 1, { =0A=
      scaleContent: false, =0A=
      scaleY: false,=0A=
      afterFinishInternal: function(effect) {=0A=
        effect.element.hide().undoClipping().setStyle(oldStyle);=0A=
      } });=0A=
  }}, arguments[1] || {}));=0A=
};=0A=
=0A=
Effect.Morph =3D Class.create();=0A=
Object.extend(Object.extend(Effect.Morph.prototype, =
Effect.Base.prototype), {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
    if(!this.element) throw(Effect._elementDoesNotExistError);=0A=
    var options =3D Object.extend({=0A=
      style: {}=0A=
    }, arguments[1] || {});=0A=
    if (typeof options.style =3D=3D 'string') {=0A=
      if(options.style.indexOf(':') =3D=3D -1) {=0A=
        var cssText =3D '', selector =3D '.' + options.style;=0A=
        $A(document.styleSheets).reverse().each(function(styleSheet) {=0A=
          if (styleSheet.cssRules) cssRules =3D styleSheet.cssRules;=0A=
          else if (styleSheet.rules) cssRules =3D styleSheet.rules;=0A=
          $A(cssRules).reverse().each(function(rule) {=0A=
            if (selector =3D=3D rule.selectorText) {=0A=
              cssText =3D rule.style.cssText;=0A=
              throw $break;=0A=
            }=0A=
          });=0A=
          if (cssText) throw $break;=0A=
        });=0A=
        this.style =3D cssText.parseStyle();=0A=
        options.afterFinishInternal =3D function(effect){=0A=
          effect.element.addClassName(effect.options.style);=0A=
          effect.transforms.each(function(transform) {=0A=
            if(transform.style !=3D 'opacity')=0A=
              effect.element.style[transform.style] =3D '';=0A=
          });=0A=
        }=0A=
      } else this.style =3D options.style.parseStyle();=0A=
    } else this.style =3D $H(options.style)=0A=
    this.start(options);=0A=
  },=0A=
  setup: function(){=0A=
    function parseColor(color){=0A=
      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) =
color =3D '#ffffff';=0A=
      color =3D color.parseColor();=0A=
      return $R(0,2).map(function(i){=0A=
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) =0A=
      });=0A=
    }=0A=
    this.transforms =3D this.style.map(function(pair){=0A=
      var property =3D pair[0], value =3D pair[1], unit =3D null;=0A=
=0A=
      if(value.parseColor('#zzzzzz') !=3D '#zzzzzz') {=0A=
        value =3D value.parseColor();=0A=
        unit  =3D 'color';=0A=
      } else if(property =3D=3D 'opacity') {=0A=
        value =3D parseFloat(value);=0A=
        if(Prototype.Browser.IE && =
(!this.element.currentStyle.hasLayout))=0A=
          this.element.setStyle({zoom: 1});=0A=
      } else if(Element.CSS_LENGTH.test(value)) {=0A=
          var components =3D value.match(/^([\+\-]?[0-9\.]+)(.*)$/);=0A=
          value =3D parseFloat(components[1]);=0A=
          unit =3D (components.length =3D=3D 3) ? components[2] : null;=0A=
      }=0A=
=0A=
      var originalValue =3D this.element.getStyle(property);=0A=
      return { =0A=
        style: property.camelize(), =0A=
        originalValue: unit=3D=3D'color' ? parseColor(originalValue) : =
parseFloat(originalValue || 0), =0A=
        targetValue: unit=3D=3D'color' ? parseColor(value) : value,=0A=
        unit: unit=0A=
      };=0A=
    }.bind(this)).reject(function(transform){=0A=
      return (=0A=
        (transform.originalValue =3D=3D transform.targetValue) ||=0A=
        (=0A=
          transform.unit !=3D 'color' &&=0A=
          (isNaN(transform.originalValue) || =
isNaN(transform.targetValue))=0A=
        )=0A=
      )=0A=
    });=0A=
  },=0A=
  update: function(position) {=0A=
    var style =3D {}, transform, i =3D this.transforms.length;=0A=
    while(i--)=0A=
      style[(transform =3D this.transforms[i]).style] =3D =0A=
        transform.unit=3D=3D'color' ? '#'+=0A=
          (Math.round(transform.originalValue[0]+=0A=
            =
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorP=
art() +=0A=
          (Math.round(transform.originalValue[1]+=0A=
            =
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorP=
art() +=0A=
          (Math.round(transform.originalValue[2]+=0A=
            =
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorP=
art() :=0A=
        transform.originalValue + Math.round(=0A=
          ((transform.targetValue - transform.originalValue) * position) =
* 1000)/1000 + transform.unit;=0A=
    this.element.setStyle(style, true);=0A=
  }=0A=
});=0A=
=0A=
Effect.Transform =3D Class.create();=0A=
Object.extend(Effect.Transform.prototype, {=0A=
  initialize: function(tracks){=0A=
    this.tracks  =3D [];=0A=
    this.options =3D arguments[1] || {};=0A=
    this.addTracks(tracks);=0A=
  },=0A=
  addTracks: function(tracks){=0A=
    tracks.each(function(track){=0A=
      var data =3D $H(track).values().first();=0A=
      this.tracks.push($H({=0A=
        ids:     $H(track).keys().first(),=0A=
        effect:  Effect.Morph,=0A=
        options: { style: data }=0A=
      }));=0A=
    }.bind(this));=0A=
    return this;=0A=
  },=0A=
  play: function(){=0A=
    return new Effect.Parallel(=0A=
      this.tracks.map(function(track){=0A=
        var elements =3D [$(track.ids) || $$(track.ids)].flatten();=0A=
        return elements.map(function(e){ return new track.effect(e, =
Object.extend({ sync:true }, track.options)) });=0A=
      }).flatten(),=0A=
      this.options=0A=
    );=0A=
  }=0A=
});=0A=
=0A=
Element.CSS_PROPERTIES =3D $w(=0A=
  'backgroundColor backgroundPosition borderBottomColor =
borderBottomStyle ' + =0A=
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +=0A=
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +=0A=
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +=0A=
  'fontSize fontWeight height left letterSpacing lineHeight ' +=0A=
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight =
'+=0A=
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +=0A=
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +=0A=
  'right textIndent top width wordSpacing zIndex');=0A=
  =0A=
Element.CSS_LENGTH =3D =
/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;=0A=
=0A=
String.prototype.parseStyle =3D function(){=0A=
  var element =3D document.createElement('div');=0A=
  element.innerHTML =3D '<div style=3D"' + this + '"></div>';=0A=
  var style =3D element.childNodes[0].style, styleRules =3D $H();=0A=
  =0A=
  Element.CSS_PROPERTIES.each(function(property){=0A=
    if(style[property]) styleRules[property] =3D style[property]; =0A=
  });=0A=
  if(Prototype.Browser.IE && this.indexOf('opacity') > -1) {=0A=
    styleRules.opacity =3D =
this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];=0A=
  }=0A=
  return styleRules;=0A=
};=0A=
=0A=
Element.morph =3D function(element, style) {=0A=
  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] =
|| {}));=0A=
  return element;=0A=
};=0A=
=0A=
['getInlineOpacity','forceRerendering','setContentZoom',=0A=
 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( =0A=
  function(f) { Element.Methods[f] =3D Element[f]; }=0A=
);=0A=
=0A=
Element.Methods.visualEffect =3D function(element, effect, options) {=0A=
  s =3D effect.dasherize().camelize();=0A=
  effect_class =3D s.charAt(0).toUpperCase() + s.substring(1);=0A=
  new Effect[effect_class](element, options);=0A=
  return $(element);=0A=
};=0A=
=0A=
Element.addMethods();
------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: application/octet-stream
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/ind_4h/lightwindow/javascript/lightwindow.js

// lightwindow.js v2.0
//
// Copyright (c) 2007 stickmanlabs
// Author: Kevin P Miller | http://www.stickmanlabs.com
//=20
// LightWindow is freely distributable under the terms of an MIT-style =
license.
//
// I don't care what you think about the file size...
//   Be a pro:=20
//	    =
http://www.thinkvitamin.com/features/webapps/serving-javascript-fast
//      =
http://rakaz.nl/item/make_your_pages_load_faster_by_combining_and_compres=
sing_javascript_and_css_files
//

/*-----------------------------------------------------------------------=
------------------------*/

if(typeof Effect =3D=3D 'undefined')
  throw("lightwindow.js requires including script.aculo.us' effects.js =
library!");

// This will stop image flickering in IE6 when elements with images are =
moved
try {
	document.execCommand("BackgroundImageCache", false, true);
} catch(e) {}

var lightwindow =3D Class.create();=09
lightwindow.prototype =3D {
	//
	//	Setup Variables
	//
	element : null,
	contentToFetch : null,
	windowActive : false,
	dataEffects : [],
	dimensions : {
		cruft : null,
		container : null,
		viewport : {
			height : null,
			width : null,
			offsetTop : null,
			offsetLeft : null
		}
	},
	pagePosition : {
		x : 0,
		y : 0
	},
	pageDimensions : {
		width : null,
		height : null
	},
	preloadImage : [],
	preloadedImage : [],
	galleries : [],
	resizeTo : {
		height : null,
		heightPercent : null,
		width : null,
		widthPercent : null,
		fixedTop : null,
		fixedLeft : null
	},
	scrollbarOffset : 18,
	navigationObservers : {
		previous : null,
		next : null
	},
	containerChange : {
		height : 0,
		width : 0
	},
	activeGallery : false,
	galleryLocation : {
		current : 0,
		total : 0
	},
	//
	//	Initialize the lightwindow.
	//
	initialize : function(options) {
		this.options =3D Object.extend({
			resizeSpeed : 8,
			contentOffset : {
				height : 20,
				width : 20
			},
			dimensions : {
				image : {height : 250, width : 250},
				page : {height : 250, width : 250},
				inline : {height : 250, width : 250},
				media : {height : 250, width : 250},
				external : {height : 250, width : 250},
				titleHeight : 25
			},
			classNames : {=09
				standard : 'lightwindow',
				action : 'lightwindow_action'
			},
			fileTypes : {
				page : ['asp', 'aspx', 'cgi', 'cfm', 'htm', 'html', 'pl', 'php4', =
'php3', 'php', 'php5', 'phtml', 'rhtml', 'shtml', 'txt', 'vbs', 'rb'],
				media : ['aif', 'aiff', 'asf', 'avi', 'divx', 'm1v', 'm2a', 'm2v', =
'm3u', 'mid', 'midi', 'mov', 'moov', 'movie', 'mp2', 'mp3', 'mpa', =
'mpa', 'mpe', 'mpeg', 'mpg', 'mpg', 'mpga', 'pps', 'qt', 'rm', 'ram', =
'swf', 'viv', 'vivo', 'wav'],
				image : ['bmp', 'gif', 'jpg', 'png', 'tiff']
			},
			mimeTypes : {
				avi : 'video/avi',
				aif : 'audio/aiff',
				aiff : 'audio/aiff',
				gif : 'image/gif',
				bmp : 'image/bmp',
				jpeg : 'image/jpeg',
				m1v : 'video/mpeg',
				m2a : 'audio/mpeg',
				m2v : 'video/mpeg',
				m3u : 'audio/x-mpequrl',
				mid : 'audio/x-midi',
				midi : 'audio/x-midi',
				mjpg : 'video/x-motion-jpeg',
				moov : 'video/quicktime',
				mov : 'video/quicktime',
				movie : 'video/x-sgi-movie',
				mp2 : 'audio/mpeg',
				mp3 : 'audio/mpeg3',
				mpa : 'audio/mpeg',
				mpa : 'video/mpeg',
				mpe : 'video/mpeg',
				mpeg : 'video/mpeg',
				mpg : 'audio/mpeg',
				mpg : 'video/mpeg',
				mpga : 'audio/mpeg',
				pdf : 'application/pdf',
				png : 'image/png',
				pps : 'application/mspowerpoint',
				qt : 'video/quicktime',
				ram : 'audio/x-pn-realaudio-plugin',
				rm : 'application/vnd.rn-realmedia',
				swf	: 'application/x-shockwave-flash',
				tiff : 'image/tiff',
				viv : 'video/vivo',
				vivo : 'video/vivo',
				wav : 'audio/wav',
				wmv : 'application/x-mplayer2'		=09
			},=09
			classids : {
				mov : 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
				swf : 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
				wmv : 'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6'
			},
			codebases : {
				mov : =
'http://www.apple.com/qtactivex/qtplugin.cab#version=3D6,0,2,0',
				swf : =
'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#ve=
rsion=3D7,0,0,0',
				wmv : =
'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Ve=
rsion=3D6,4,5,715'
			},=09
			viewportPadding : 10,
			EOLASFix : 'swf,wmv,fla,flv',
			overlay : {
				opacity : 0.7,
				image : 'images/black.png',
				presetImage : 'images/black-70.png'
			},
			skin : 	{
				main : 	'<div id=3D"lightwindow_container" >'+
							'<div id=3D"lightwindow_title_bar" >'+
								'<div id=3D"lightwindow_title_bar_inner" >'+
									'<span id=3D"lightwindow_title_bar_title"></span>'+
									'<a id=3D"lightwindow_title_bar_close_link" >close</a>'+
								'</div>'+
							'</div>'+
							'<div id=3D"lightwindow_stage" >'+
								'<div id=3D"lightwindow_contents" >'+
								'</div>'+
								'<div id=3D"lightwindow_navigation" >'+
									'<a href=3D"#" id=3D"lightwindow_previous" >'+
										'<span id=3D"lightwindow_previous_title"></span>'+
									'</a>'+
									'<a href=3D"#" id=3D"lightwindow_next" >'+
										'<span id=3D"lightwindow_next_title"></span>'+
									'</a>'+
									'<iframe name=3D"lightwindow_navigation_shim" =
id=3D"lightwindow_navigation_shim" src=3D"javascript:false;" =
frameBorder=3D"0" scrolling=3D"no"></iframe>'+
								'</div>'+							=09
								'<div id=3D"lightwindow_galleries">'+
									'<div id=3D"lightwindow_galleries_tab_container" >'+
										'<a href=3D"#" id=3D"lightwindow_galleries_tab" >'+
											'<span id=3D"lightwindow_galleries_tab_span" class=3D"up" =
>Galleries</span>'+
										'</a>'+
									'</div>'+
									'<div id=3D"lightwindow_galleries_list" >'+
									'</div>'+
								'</div>'+
							'</div>'+
							'<div id=3D"lightwindow_data_slide" >'+
								'<div id=3D"lightwindow_data_slide_inner" >'+
									'<div id=3D"lightwindow_data_details" >'+
										'<div id=3D"lightwindow_data_gallery_container" >'+
											'<span id=3D"lightwindow_data_gallery_current"></span>'+
											' of '+
											'<span id=3D"lightwindow_data_gallery_total"></span>'+
										'</div>'+
										'<div id=3D"lightwindow_data_author_container" >'+
											'by <span id=3D"lightwindow_data_author"></span>'+
										'</div>'+
									'</div>'+
									'<div id=3D"lightwindow_data_caption" >'+
									'</div>'+
								'</div>'+
							'</div>'+
						'</div>',=09
				loading : 	'<div id=3D"lightwindow_loading" >'+
								'<img src=3D"/images/ajax-loading.gif" alt=3D"loading" />'+
								'<span>Loading or <a href=3D"javascript: =
myLightWindow.deactivate();">Cancel</a></span>'+
								'<iframe name=3D"lightwindow_loading_shim" =
id=3D"lightwindow_loading_shim" src=3D"javascript:false;" =
frameBorder=3D"0" scrolling=3D"no"></iframe>'+
							'</div>',
				iframe : 	'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" =
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'+
							'<html xmlns=3D"http://www.w3.org/1999/xhtml">'+
								'<body>'+
									'{body_replace}'+
								'</body>'+
							'</html>',
				gallery : {
					top :		'<div class=3D"lightwindow_galleries_list">'+
									'<h1>{gallery_title_replace}</h1>'+
									'<ul>',
					middle : 			'<li>'+
											'{gallery_link_replace}'+
										'</li>',
					bottom : 		'</ul>'+
								'</div>'
				}
			},
			formMethod : 'get',
			hideFlash : false,
			hideGalleryTab : false,
			showTitleBar : true,
			animationHandler : false,
			navigationHandler : false,
			transitionHandler : false,
			finalAnimationHandler : false,
			formHandler : false,
			galleryAnimationHandler : false,
			showGalleryCount : true
		}, options || {});
		this.duration =3D ((11-this.options.resizeSpeed)*0.15);
		this._setupLinks();
		this._getScroll();
		this._getPageDimensions();
		this._browserDimensions();
		this._addLightWindowMarkup(false);
		this._setupDimensions();=20
		this.buildGalleryList();
	},
	//
	//	Activate the lightwindow.
	//
	activate : function(e, link){	=09
		// Clear out the window Contents
		this._clearWindowContents(true);
		=09
		// Add back in out loading panel
		this._addLoadingWindowMarkup();

		// Setup the element properties
		this._setupWindowElements(link);
	=09
		// Setup everything
		this._getScroll();
		this._browserDimensions();
		this._setupDimensions();
		this._toggleTroubleElements('hidden', false);
		this._displayLightWindow('block', 'hidden');
		this._setStatus(true);
		this._monitorKeyboard(true);
		this._prepareIE(true);
		this._loadWindow();
	},
	//
	//	Turn off the window
	//
	deactivate : function(){
		// The window is not active
		this.windowActive =3D false;
	=09
		// There is no longer a gallery active
		this.activeGallery =3D false;
		if (!this.options.hideGalleryTab) {
			this._handleGalleryAnimation(false);
		}
	=09
		// Kill the animation
		this.animating =3D false;
	=09
		// Clear our element
		this.element =3D null;
	=09
		// hide the window.
		this._displayLightWindow('none', 'visible');
	=09
		// Clear out the window Contents
		this._clearWindowContents(false);
	=09
		// Stop all animation
		var queue =3D =
Effect.Queues.get('lightwindowAnimation').each(function(e){e.cancel();});=

	=09
		// Undo the setup
		this._prepareIE(false);
		this._setupDimensions();
		this._toggleTroubleElements('visible', false);=09
		this._monitorKeyboard(false);=09
	},
	//
	//  Initialize specific window
	//
	createWindow : function(element, attributes) {
		this._processLink($(element));
	},
	//
	//  Open a Window from a hash of attributes
	//
	activateWindow : function(options) {
		this.element =3D Object.extend({
			href : null,
			title : null,
			author : null,
			caption : null,
			rel : null,
			top : null,
			left : null,
			type : null,
			showImages : null,
			height : null,
			width : null,
			loadingAnimation : null,
			iframeEmbed : null,
			form : null
		}, options || {});
	=09
		// Set the window type
		this.contentToFetch =3D this.element.href;
		this.windowType =3D this.element.type ? this.element.type : =
this._fileType(this.element.href);=09
	=09
		// Clear out the window Contents
		this._clearWindowContents(true);
		=09
		// Add back in out loading panel
		this._addLoadingWindowMarkup();
	=09
		// Setup everything
		this._getScroll();
		this._browserDimensions();
		this._setupDimensions();
		this._toggleTroubleElements('hidden', false);
		this._displayLightWindow('block', 'hidden');
		this._setStatus(true);
		this._monitorKeyboard(true);
		this._prepareIE(true);
		this._loadWindow();
	},
	//
	//  Fire off our Form handler
	//
	submitForm : function(e) {
		if (this.options.formHandler) {
			this.options.formHandler(e);
		} else {
			this._defaultFormHandler(e);
		}
	},
	//
	//	Reload the window with another location
	//
	openWindow : function(element) {
		var element =3D $(element);

		// The window is active
		this.windowActive =3D true;
	=09
		// Clear out the window Contents
		this._clearWindowContents(true);
	=09
		// Add back in out loading panel
		this._addLoadingWindowMarkup();
	=09
		// Setup the element properties
		this._setupWindowElements(element);

		this._setStatus(true);
		this._handleTransition();
	},
	//
	//  Navigate the window
	//
	navigateWindow : function(direction) {
		this._handleNavigation(false);
		if (direction =3D=3D 'previous') {
			this.openWindow(this.navigationObservers.previous);
		} else if (direction =3D=3D 'next'){=20
			this.openWindow(this.navigationObservers.next);
		}
	},
	//
	//  Build the Gallery List and Load it
	//
	buildGalleryList : function() {
		var output =3D '';
		var galleryLink;
		for (i in this.galleries) {
			if (typeof this.galleries[i] =3D=3D 'object') {
				output +=3D =
(this.options.skin.gallery.top).replace('{gallery_title_replace}', =
unescape(i));
				for (j in this.galleries[i]) {
					if (typeof this.galleries[i][j] =3D=3D 'object') {					=09
						galleryLink =3D '<a href=3D"#" =
id=3D"lightwindow_gallery_'+i+'_'+j+'" >'+unescape(j)+'</a>';
						output +=3D =
(this.options.skin.gallery.middle).replace('{gallery_link_replace}', =
galleryLink);
					}
				}
				output +=3D this.options.skin.gallery.bottom;
			}
		}
		new Insertion.Top('lightwindow_galleries_list', output);
	=09
		// Attach Events
		for (i in this.galleries) {
			if (typeof this.galleries[i] =3D=3D 'object') {
				for (j in this.galleries[i]) {
					if (typeof this.galleries[i][j] =3D=3D 'object') {
						Event.observe($('lightwindow_gallery_'+i+'_'+j), 'click', =
this.openWindow.bind(this, this.galleries[i][j][0]), false);
						$('lightwindow_gallery_'+i+'_'+j).onclick =3D function() {return =
false;};=09
					}
				}
			}
		}
	},
	//=20
	//  Set Links Up
	//
	_setupLinks : function() {
		var links =3D $$('.'+this.options.classNames.standard);
		links.each(function(link) {
			this._processLink(link);
		}.bind(this));=09
	},
	//
	//  Process a Link
	//
	_processLink : function(link) {
		if ((this._fileType(link.getAttribute('href')) =3D=3D 'image' || =
this._fileType(link.getAttribute('href')) =3D=3D 'media')) {
			if (gallery =3D this._getGalleryInfo(link.rel)) {
				if (!this.galleries[gallery[0]]) {
					this.galleries[gallery[0]] =3D new Array();
				}
				if (!this.galleries[gallery[0]][gallery[1]]) {
					this.galleries[gallery[0]][gallery[1]] =3D new Array();
				}
				this.galleries[gallery[0]][gallery[1]].push(link);
			}
		}
	=09
		// Take care of our inline content
		var url =3D link.getAttribute('href');
		if (url.indexOf('?') > -1) {
			url =3D url.substring(0, url.indexOf('?'));
		}
	=09
		var container =3D url.substring(url.indexOf('#')+1);
		if($(container)) {
			$(container).setStyle({
				display : 'none'
			});
		}
	=09
		Event.observe(link, 'click', this.activate.bindAsEventListener(this, =
link), false);
		link.onclick =3D function() {return false;};	=09
	},
	//
	//	Setup our actions
	//
	_setupActions : function() {
		var links =3D $$('#lightwindow_container =
.'+this.options.classNames.action);
		links.each(function(link) {
			Event.observe(link, 'click', =
this[link.getAttribute('rel')].bindAsEventListener(this, link), false);
			link.onclick =3D function() {return false;};
		}.bind(this));
	},
	//
	//	Add the markup to the page.
	//
	_addLightWindowMarkup : function(rebuild) {
		var overlay =3D Element.extend(document.createElement('div'));
		overlay.setAttribute('id', 'lightwindow_overlay');	=09
		// FF Mac has a problem with putting Flash above a layer without a =
100% opacity background, so we need to use a pre-made
		if (Prototype.Browser.Gecko) {
			overlay.setStyle({
				backgroundImage: 'url('+this.options.overlay.presetImage+')',
				backgroundRepeat: 'repeat',
				height: this.pageDimensions.height+'px'
			});		=09
		} else {
			overlay.setStyle({
				opacity: this.options.overlay.opacity,
				backgroundImage: 'url('+this.options.overlay.image+')',
				backgroundRepeat: 'repeat',
				height: this.pageDimensions.height+'px'
			});
		}
	=09
		var lw =3D document.createElement('div');
		lw.setAttribute('id', 'lightwindow');
		lw.innerHTML =3D this.options.skin.main;
	=09
		var body =3D document.getElementsByTagName('body')[0];
		body.appendChild(overlay);
		body.appendChild(lw);=09
			=09
		if ($('lightwindow_title_bar_close_link')) {
			Event.observe('lightwindow_title_bar_close_link', 'click', =
this.deactivate.bindAsEventListener(this));
			$('lightwindow_title_bar_close_link').onclick =3D function() {return =
false;};
		}
		=09
		Event.observe($('lightwindow_previous'), 'click', =
this.navigateWindow.bind(this, 'previous'), false);
		$('lightwindow_previous').onclick =3D function() {return false;};	=09
		Event.observe($('lightwindow_next'), 'click', =
this.navigateWindow.bind(this, 'next'), false);
		$('lightwindow_next').onclick =3D function() {return false;};

		if (!this.options.hideGalleryTab) {
			Event.observe($('lightwindow_galleries_tab'), 'click', =
this._handleGalleryAnimation.bind(this, true), false);
			$('lightwindow_galleries_tab').onclick =3D function() {return =
false;};
		}
	=09
		// Because we use position absolute, kill the scroll Wheel on =
animations
		if (Prototype.Browser.IE) {
			Event.observe(document, 'mousewheel', =
this._stopScrolling.bindAsEventListener(this), false);
		} else {
			Event.observe(window, 'DOMMouseScroll', =
this._stopScrolling.bindAsEventListener(this), false);
		}
			=09
		Event.observe(overlay, 'click', =
this.deactivate.bindAsEventListener(this), false);
		overlay.onclick =3D function() {return false;};
	},
	//
	//  Add loading window markup
	//
	_addLoadingWindowMarkup : function() {
		$('lightwindow_contents').innerHTML +=3D this.options.skin.loading;
	},
	//
	//  Setup the window elements
	//
	_setupWindowElements : function(link) {
		this.element =3D link;
		this.element.title =3D null ? '' : link.getAttribute('title');
		this.element.author =3D null ? '' : link.getAttribute('author');
		this.element.caption =3D null ? '' : link.getAttribute('caption');
		this.element.rel =3D null ? '' : link.getAttribute('rel');
		this.element.params =3D null ? '' : link.getAttribute('params');

		// Set the window type
		this.contentToFetch =3D this.element.href;
		this.windowType =3D this._getParameter('lightwindow_type') ? =
this._getParameter('lightwindow_type') : =
this._fileType(this.contentToFetch);=09
	},
	//
	//  Clear the window contents out
	//
	_clearWindowContents : function(contents) {
		// If there is an iframe, its got to go
		if ($('lightwindow_iframe')) {
			Element.remove($('lightwindow_iframe'));
		}

		// Stop playing an object if its still around
		if ($('lightwindow_media_primary')) {
			try {
				$('lightwindow_media_primary').Stop();
			} catch(e) {}
			Element.remove($('lightwindow_media_primary'));
		}

		// Stop playing an object if its still around	=09
		if ($('lightwindow_media_secondary')) {
			try {
				$('lightwindow_media_secondary').Stop();
			} catch(e) {}
			Element.remove($('lightwindow_media_secondary'));
		}
	=09
		this.activeGallery =3D false;
		this._handleNavigation(this.activeGallery);
	=09
		if (contents) {
			// Empty the contents
			$('lightwindow_contents').innerHTML =3D '';
		=09
			// Reset the scroll bars
			$('lightwindow_contents').setStyle({
				overflow: 'hidden'
			});	=09
		=09
			if (!this.windowActive) {
				$('lightwindow_data_slide_inner').setStyle({
					display: 'none'
				});

				$('lightwindow_title_bar_title').innerHTML =3D '';
			}

			// Because of browser differences and to maintain flexible captions =
we need to reset this height at close
			$('lightwindow_data_slide').setStyle({
				height: 'auto'
			});
		}
	=09
		this.resizeTo.height =3D null;
		this.resizeTo.width =3D null;
	},
	//
	//	Set the status of our animation to keep things from getting clunky
	//
	_setStatus : function(status) {
		this.animating =3D status;
		if (status) {
			Element.show('lightwindow_loading');
		}
		if (!(/MSIE 6./i.test(navigator.userAgent))) {
			this._fixedWindow(status);
		}
	},
	//
	//  Make this window Fixed
	//
	_fixedWindow : function(status) {
		if (status) {
			if (this.windowActive) {
				this._getScroll();
				$('lightwindow').setStyle({
					position: 'absolute',
					top: =
parseFloat($('lightwindow').getStyle('top'))+this.pagePosition.y+'px',
					left: =
parseFloat($('lightwindow').getStyle('left'))+this.pagePosition.x+'px'
				});	=09
			} else {
				$('lightwindow').setStyle({
					position: 'absolute'
				});					=09
			}
		} else {
			if (this.windowActive) {
				this._getScroll();
				$('lightwindow').setStyle({
					position: 'fixed',
					top: =
parseFloat($('lightwindow').getStyle('top'))-this.pagePosition.y+'px',
					left: =
parseFloat($('lightwindow').getStyle('left'))-this.pagePosition.x+'px'
				});	=09
			} else {
				if ($('lightwindow_iframe')) {
					// Ideally here we would set a 50% value for top and left, but =
Safari rears it ugly head again and we need to do it by pixels
					this._browserDimensions();
				}
				$('lightwindow').setStyle({
					position: 'fixed',
					top: (parseFloat(this._getParameter('lightwindow_top')) ? =
parseFloat(this._getParameter('lightwindow_top'))+'px' : =
this.dimensions.viewport.height/2+'px'),
					left: (parseFloat(this._getParameter('lightwindow_left')) ? =
parseFloat(this._getParameter('lightwindow_left'))+'px' : =
this.dimensions.viewport.width/2+'px')
				});
			}
		}
	},
	//
	//	Prepare the window for IE.
	//
	_prepareIE : function(setup) {
		if (Prototype.Browser.IE) {
			var height, overflowX, overflowY;
			if (setup) {=20
				var height =3D '100%';
			} else {
				var height =3D 'auto';
			}
			var body =3D document.getElementsByTagName('body')[0];
			var html =3D document.getElementsByTagName('html')[0];
			html.style.height =3D body.style.height =3D height;
		}
	},
	_stopScrolling : function(e) {
		if (this.animating) {
			if (e.preventDefault) {
				e.preventDefault();
			}
			e.returnValue =3D false;	=09
		}
	},
	//
	//	Get the scroll for the page.
	//
	_getScroll : function(){
      	if(typeof(window.pageYOffset) =3D=3D 'number') {
        	this.pagePosition.x =3D window.pageXOffset;
        	this.pagePosition.y =3D window.pageYOffset;
      	} else if(document.body && (document.body.scrollLeft || =
document.body.scrollTop)) {
	       	this.pagePosition.x =3D document.body.scrollLeft;
        	this.pagePosition.y =3D document.body.scrollTop;
		} else if(document.documentElement) {
        	this.pagePosition.x =3D document.documentElement.scrollLeft;
        	this.pagePosition.y =3D document.documentElement.scrollTop;
      	}
	},
	//
	//	Reset the scroll.
	//
	_setScroll : function(x, y) {
		document.documentElement.scrollLeft =3D x;=20
		document.documentElement.scrollTop =3D y;=20
	},
	//
	//	Hide Selects from the page because of IE.
	//     We could use iframe shims instead here but why add all the extra =
markup for one browser when this is much easier and cleaner
	//
	_toggleTroubleElements : function(visibility, content){
	=09
		if (content) {
			var selects =3D =
$('lightwindow_contents').getElementsByTagName('select');
		} else {
			var selects =3D document.getElementsByTagName('select');
		}
	=09
		for(var i =3D 0; i < selects.length; i++) {
			selects[i].style.visibility =3D visibility;
		}
	=09
		if (!content) {
			if (this.options.hideFlash){
				var objects =3D document.getElementsByTagName('object');
				for (i =3D 0; i !=3D objects.length; i++) {
					objects[i].style.visibility =3D visibility;
				}
				var embeds =3D document.getElementsByTagName('embed');
				for (i =3D 0; i !=3D embeds.length; i++) {
					embeds[i].style.visibility =3D visibility;
				}
			}
			var iframes =3D document.getElementsByTagName('iframe');
			for (i =3D 0; i !=3D iframes.length; i++) {
				iframes[i].style.visibility =3D visibility;
			}
		}
	},
	//=20
	//  Get the actual page size
	//
	_getPageDimensions : function() {
		var xScroll, yScroll;
		if (window.innerHeight && window.scrollMaxY) {=09
			xScroll =3D document.body.scrollWidth;
			yScroll =3D window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){=20
			xScroll =3D document.body.scrollWidth;
			yScroll =3D document.body.scrollHeight;
		} else {=20
			xScroll =3D document.body.offsetWidth;
			yScroll =3D document.body.offsetHeight;
		}

		var windowWidth, windowHeight;
		if (self.innerHeight) {=09
			windowWidth =3D self.innerWidth;
			windowHeight =3D self.innerHeight;
		} else if (document.documentElement && =
document.documentElement.clientHeight) {=20
			windowWidth =3D document.documentElement.clientWidth;
			windowHeight =3D document.documentElement.clientHeight;
		} else if (document.body) {=20
			windowWidth =3D document.body.clientWidth;
			windowHeight =3D document.body.clientHeight;
		}=09

		if(yScroll < windowHeight){
			this.pageDimensions.height =3D windowHeight;
		} else {=20
			this.pageDimensions.height =3D yScroll;
		}

		if(xScroll < windowWidth){=09
			this.pageDimensions.width =3D windowWidth;
		} else {
			this.pageDimensions.width =3D xScroll;
		}
	},
	//
	//	Display the lightWindow.
	//
	_displayLightWindow : function(display, visibility) {
		$('lightwindow_overlay').style.display =3D =
$('lightwindow').style.display =3D =
$('lightwindow_container').style.display =3D display;=09
		$('lightwindow_overlay').style.visibility =3D =
$('lightwindow').style.visibility =3D =
$('lightwindow_container').style.visibility =3D visibility;
	},
	//
	//	Setup Dimensions of lightwindow.

	//
	_setupDimensions : function() {

		var originalHeight, originalWidth;
		switch (this.windowType) {
			case 'page' :
				originalHeight =3D this.options.dimensions.page.height;
				originalWidth =3D this.options.dimensions.page.width;
				break;

			case 'image' :
				originalHeight =3D this.options.dimensions.image.height;
				originalWidth =3D this.options.dimensions.image.width;
				break;
			=09
			case 'media' :
				originalHeight =3D this.options.dimensions.media.height;
				originalWidth =3D this.options.dimensions.media.width;
				break;
		=09
			case 'external' :=20
				originalHeight =3D this.options.dimensions.external.height;
				originalWidth =3D this.options.dimensions.external.width;
				break;
			=09
			case 'inline' :
				originalHeight =3D this.options.dimensions.inline.height;
				originalWidth =3D this.options.dimensions.inline.width;
				break;
			=09
			default :
				originalHeight =3D this.options.dimensions.page.height;
				originalWidth =3D this.options.dimensions.page.width;
				break;
			=09
		}

		var offsetHeight =3D this._getParameter('lightwindow_top') ? =
parseFloat(this._getParameter('lightwindow_top'))+this.pagePosition.y : =
this.dimensions.viewport.height/2+this.pagePosition.y;
		var offsetWidth =3D this._getParameter('lightwindow_left') ? =
parseFloat(this._getParameter('lightwindow_left'))+this.pagePosition.x : =
this.dimensions.viewport.width/2+this.pagePosition.x;
	=09
		// So if a theme has say shadowed edges, they should be consistant and =
take care of in the contentOffset
		$('lightwindow').setStyle({
			top: offsetHeight+'px',
			left: offsetWidth+'px'
		});
	=09
		$('lightwindow_container').setStyle({
			height: originalHeight+'px',
			width: originalWidth+'px',
			left: -(originalWidth/2)+'px',
			top: -(originalHeight/2)+'px'
		});

		$('lightwindow_contents').setStyle({
			height: originalHeight+'px',
			width: originalWidth+'px'
		});
	},
	//
	//	Get the type of file.
	//
	_fileType : function(url) {
		var image =3D new =
RegExp("[^\.]\.("+this.options.fileTypes.image.join('|')+")\s*$", "i");
		if (image.test(url)) return 'image';
		if (url.indexOf('#') > -1 && (document.domain =3D=3D =
this._getDomain(url))) return 'inline';	=09
		if (url.indexOf('?') > -1) url =3D url.substring(0, url.indexOf('?'));
		var type =3D 'unknown';
		var page =3D new =
RegExp("[^\.]\.("+this.options.fileTypes.page.join('|')+")\s*$", "i");
		var media =3D new =
RegExp("[^\.]\.("+this.options.fileTypes.media.join('|')+")\s*$", "i");
		if (document.domain !=3D this._getDomain(url)) type =3D 'external';
	  	if (media.test(url)) type =3D 'media';
		if (type =3D=3D 'external' || type =3D=3D 'media') return type;
	  	if (page.test(url) || url.substr((url.length-1), url.length) =3D=3D =
'/') type =3D 'page';
		return type;
	},
	//
	//  Get file Extension
	//
	_fileExtension : function(url) {
		if (url.indexOf('?') > -1) {
			url =3D url.substring(0, url.indexOf('?'));
		}
		var extenstion =3D '';
		for (var x =3D (url.length-1); x > -1; x--) {
			if (url.charAt(x) =3D=3D '.') {
				return extenstion;
			}
			extenstion =3D url.charAt(x)+extenstion;
		}
	},
	//
	//	Monitor the keyboard while this lightwindow is up
	//
	_monitorKeyboard : function(status) {
		if (status) document.onkeydown =3D this._eventKeypress.bind(this);=20
		else document.onkeydown =3D '';
	},
	//
	//  Perform keyboard actions
	//
	_eventKeypress : function(e) {
		if (e =3D=3D null) {
			var keycode =3D event.keyCode;
		} else {
			var keycode =3D e.which;
		}
	=09
		switch (keycode) {=20
			case 27:=20
				this.deactivate();=20
				break;
		=09
			case 13:
				return;
			=09
			default:
				break;
		}
=09
		// Gotta stop those quick fingers
		if (this.animating) {
			return false;
		}
	=09
		switch (String.fromCharCode(keycode).toLowerCase()) {
			case 'p':
				if (this.navigationObservers.previous) {
					this.navigateWindow('previous');
				}
				break;
			=09
			case 'n':
				if (this.navigationObservers.next) {
					this.navigateWindow('next');
				}
				break;
			=09
			default:
				break;
		}
	},
	//
	//	Get Gallery Information
	//
	_getGalleryInfo : function(rel) {
		if (!rel) return false;
		if (rel.indexOf('[') > -1) {
			return new Array(escape(rel.substring(0, rel.indexOf('['))), =
escape(rel.substring(rel.indexOf('[')+1, rel.indexOf(']'))));
		} else {
			return false;
		}
	},
	//
	//	Get the domain from a string.
	//
	_getDomain : function(url) {   =20
        var leadSlashes =3D url.indexOf('//');
        var domainStart =3D leadSlashes+2;
        var withoutResource =3D url.substring(domainStart, url.length);
        var nextSlash =3D withoutResource.indexOf('/');
        var domain =3D withoutResource.substring(0, nextSlash);
		if (domain.indexOf(':') > -1){
			var portColon =3D domain.indexOf(':');
			domain =3D domain.substring(0, portColon);
       	}
		return domain;
    },
	//
	//	Get the value from the params attribute string.
	//
	_getParameter : function(parameter, parameters) {
		if (!this.element) return false;
		if (parameter =3D=3D 'lightwindow_top' && this.element.top) {
			return unescape(this.element.top);
		} else if (parameter =3D=3D 'lightwindow_left' && this.element.left) {
			return unescape(this.element.left);
		} else if (parameter =3D=3D 'lightwindow_type' && this.element.type) {
			return unescape(this.element.type);
		} else if (parameter =3D=3D 'lightwindow_show_images' && =
this.element.showImages) {
			return unescape(this.element.showImages);
		} else if (parameter =3D=3D 'lightwindow_height' && =
this.element.height) {
			return unescape(this.element.height);
		} else if (parameter =3D=3D 'lightwindow_width' && this.element.width) =
{
			return unescape(this.element.width);
		} else if (parameter =3D=3D 'lightwindow_loading_animation' && =
this.element.loadingAnimation) {
			return unescape(this.element.loadingAnimation);
		} else if (parameter =3D=3D 'lightwindow_iframe_embed' && =
this.element.iframeEmbed) {
			return unescape(this.element.iframeEmbed);
		} else if (parameter =3D=3D 'lightwindow_form' && this.element.form) {
			return unescape(this.element.form);
		} else {
			if (!parameters) {
				if (this.element.params) parameters =3D this.element.params;
				else return;
			}
			var value;
			var parameterArray =3D parameters.split(',');
			var compareString =3D parameter+'=3D';
			var compareLength =3D compareString.length;
			for (var i =3D 0; i < parameterArray.length; i++) {
				if (parameterArray[i].substr(0, compareLength) =3D=3D compareString) =
{
					var currentParameter =3D parameterArray[i].split('=3D');
					value =3D currentParameter[1];
					break;
				}
			}
			if (!value) return false;
			else return unescape(value);
		}
	},
	//
	//  Get the Browser Viewport Dimensions
	//
	_browserDimensions : function() {
		if (Prototype.Browser.IE) {
            this.dimensions.viewport.height =3D =
document.documentElement.clientHeight;
            this.dimensions.viewport.width =3D =
document.documentElement.clientWidth;  =20
        } else {
            this.dimensions.viewport.height =3D window.innerHeight;
            this.dimensions.viewport.width =3D document.width || =
document.body.offsetWidth;
        }
	},
	//
	//  Get the scrollbar offset, I don't like this method but there is =
really no other way I can find.
	//
	_getScrollerWidth : function() {
	    var scrollDiv =3D Element.extend(document.createElement('div'));
		scrollDiv.setAttribute('id', 'lightwindow_scroll_div');
		scrollDiv.setStyle({
			position: 'absolute',
			top: '-10000px',
			left: '-10000px',
			width: '100px',
			height: '100px',
			overflow: 'hidden'
		});



	    var contentDiv =3D Element.extend(document.createElement('div'));
		contentDiv.setAttribute('id', 'lightwindow_content_scroll_div');
		contentDiv.setStyle({
			width: '100%',
			height: '200px'
		});

	    scrollDiv.appendChild(contentDiv);

		var body =3D document.getElementsByTagName('body')[0];
		body.appendChild(scrollDiv);

	    var noScroll =3D $('lightwindow_content_scroll_div').offsetWidth;
	    scrollDiv.style.overflow =3D 'auto';
    	var withScroll =3D $('lightwindow_content_scroll_div').offsetWidth;

	   	Element.remove($('lightwindow_scroll_div'));

	    this.scrollbarOffset =3D noScroll-withScroll;
	},
=09

	//
	//  Add a param to an object dynamically created
	//
	_addParamToObject : function(name, value, object, id) {
		var param =3D document.createElement('param');
		param.setAttribute('value', value);
		param.setAttribute('name', name);
		if (id) {
			param.setAttribute('id', id);
		}
		object.appendChild(param);
		return object;
	},
	//
	//  Get the outer HTML of an object CROSS BROWSER
	//
	_outerHTML : function(object) {
 		if (Prototype.Browser.IE) {
			return object.outerHTML;
		} else {
			var clone =3D object.cloneNode(true);
			var cloneDiv =3D document.createElement('div');
			cloneDiv.appendChild(clone);
			return cloneDiv.innerHTML;
		}
	},
	//
	//  Convert an object to markup
	//
	_convertToMarkup : function(object, closeTag) {
		var markup =3D this._outerHTML(object).replace('</'+closeTag+'>', '');
		if (Prototype.Browser.IE) {
			for (var i =3D 0; i < object.childNodes.length; i++){
				markup +=3D this._outerHTML(object.childNodes[i]);
			}
			markup +=3D '</'+closeTag+'>';
		}
		return markup;
	},
	//
	//  Depending what type of browser it is we have to append the object =
differently... DAMN YOU IE!!
	//
	_appendObject : function(object, closeTag, appendTo) {
		if (Prototype.Browser.IE) {
			appendTo.innerHTML +=3D this._convertToMarkup(object, closeTag);
		=09
			// Fix the Eolas activate thing but only for specified media, for =
example doing this to a quicktime film breaks it.
			if (this.options.EOLASFix.indexOf(this._fileType(this.element.href)) =
> -1) {
				var objectElements =3D document.getElementsByTagName('object');
				for (var i =3D 0; i < objectElements.length; i++) {
					if (objectElements[i].getAttribute("data")) =
objectElements[i].removeAttribute('data');
					objectElements[i].outerHTML =3D objectElements[i].outerHTML;
					objectElements[i].style.visibility =3D "visible";
				}
			}
		} else {
			appendTo.appendChild(object);=09
		}=09
	},
	//
	//  Add in iframe
	//
	_appendIframe : function(scroll) {
		var iframe =3D document.createElement('iframe');
		iframe.setAttribute('id', 'lightwindow_iframe');
		iframe.setAttribute('name', 'lightwindow_iframe');
		iframe.setAttribute('src', 'about:blank');
		iframe.setAttribute('height', '100%');
		iframe.setAttribute('width', '100%');
		iframe.setAttribute('frameborder', '0');
		iframe.setAttribute('marginwidth', '0');
		iframe.setAttribute('marginheight', '0');
		iframe.setAttribute('scrolling', scroll);=09
	=09
		this._appendObject(iframe, 'iframe', $('lightwindow_contents'));
	},
	//
	//  Write Content to the iframe using the skin
	//
	_writeToIframe : function(content) {
		var template =3D this.options.skin.iframe;
		template =3D template.replace('{body_replace}', content);=20
		if ($('lightwindow_iframe').contentWindow){
			$('lightwindow_iframe').contentWindow.document.open();
			$('lightwindow_iframe').contentWindow.document.write(template);
			$('lightwindow_iframe').contentWindow.document.close();
		} else {
			$('lightwindow_iframe').contentDocument.open();
			$('lightwindow_iframe').contentDocument.write(template);
			$('lightwindow_iframe').contentDocument.close();
		}
	},
	//
	//  Load the window Information
	// =20
	_loadWindow : function() {
		switch (this.windowType) {
			case 'image' :

				var current =3D 0;
				var images =3D [];
				this.checkImage =3D [];
				this.resizeTo.height =3D this.resizeTo.width =3D 0;
				this.imageCount =3D this._getParameter('lightwindow_show_images') ? =
parseInt(this._getParameter('lightwindow_show_images')) : 1;

				// If there is a gallery get it
				if (gallery =3D this._getGalleryInfo(this.element.rel)) {=09
					for (current =3D 0; current < =
this.galleries[gallery[0]][gallery[1]].length; current++) {
						if =
(this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][curre=
nt].href) > -1) {
							break;
						}
					}
					if =
(this.galleries[gallery[0]][gallery[1]][current-this.imageCount]) {
						this.navigationObservers.previous =3D =
this.galleries[gallery[0]][gallery[1]][current-this.imageCount];
					} else {
						this.navigationObservers.previous =3D false;
					}
					if =
(this.galleries[gallery[0]][gallery[1]][current+this.imageCount]) {
						this.navigationObservers.next =3D =
this.galleries[gallery[0]][gallery[1]][current+this.imageCount];
					} else {
						this.navigationObservers.next =3D false;
					}
				=09
					this.activeGallery =3D true;
				} else {
					this.navigationObservers.previous =3D false;
					this.navigationObservers.next =3D false;				=09

					this.activeGallery =3D false;
				}
			=09
				for (var i =3D current; i < (current+this.imageCount); i++) {
	=09
					if (gallery && this.galleries[gallery[0]][gallery[1]][i]) {
						this.contentToFetch =3D =
this.galleries[gallery[0]][gallery[1]][i].href;
					=09
						this.galleryLocation =3D {current: (i+1)/this.imageCount, total: =
(this.galleries[gallery[0]][gallery[1]].length)/this.imageCount};
										=09
						if (!this.galleries[gallery[0]][gallery[1]][i+this.imageCount]) {
							$('lightwindow_next').setStyle({
								display: 'none'
							});
						} else {
							$('lightwindow_next').setStyle({
								display: 'block'
							});
							$('lightwindow_next_title').innerHTML =3D =
this.galleries[gallery[0]][gallery[1]][i+this.imageCount].title;
						}
					=09
						if (!this.galleries[gallery[0]][gallery[1]][i-this.imageCount]) {
							$('lightwindow_previous').setStyle({
								display: 'none'
							});
						} else {
							$('lightwindow_previous').setStyle({
								display: 'block'
							});
							$('lightwindow_previous_title').innerHTML =3D =
this.galleries[gallery[0]][gallery[1]][i-this.imageCount].title;
						}
					}

					images[i] =3D document.createElement('img');
					images[i].setAttribute('id', 'lightwindow_image_'+i);
					images[i].setAttribute('border', '0');
					images[i].setAttribute('src', this.contentToFetch);
					$('lightwindow_contents').appendChild(images[i]);

					// We have to do this instead of .onload=20
					this.checkImage[i] =3D new PeriodicalExecuter(function(i) {
						if (!(typeof $('lightwindow_image_'+i).naturalWidth !=3D =
"undefined" && $('lightwindow_image_'+i).naturalWidth =3D=3D 0)) {
=09
							this.checkImage[i].stop();
=09
							var imageHeight =3D $('lightwindow_image_'+i).getHeight();
							if (imageHeight > this.resizeTo.height) {
								this.resizeTo.height =3D imageHeight;
							}
							this.resizeTo.width +=3D $('lightwindow_image_'+i).getWidth();
							this.imageCount--;
=09
							$('lightwindow_image_'+i).setStyle({
								height: '100%'
							});
=09
						 	if (this.imageCount =3D=3D 0) {
								this._processWindow();
						 	}
						}
				=09
					}.bind(this, i), 1);		=09
				}


			break;
	=09
		case 'media' :		=09
	=09
			var current =3D 0;
			this.resizeTo.height =3D this.resizeTo.width =3D 0;

			// If there is a gallery get it
			if (gallery =3D this._getGalleryInfo(this.element.rel)) {=09
				for (current =3D 0; current < =
this.galleries[gallery[0]][gallery[1]].length; current++) {
					if =
(this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][curre=
nt].href) > -1) {
						break;
					}
				}
			=09
				if (this.galleries[gallery[0]][gallery[1]][current-1]) {
					this.navigationObservers.previous =3D =
this.galleries[gallery[0]][gallery[1]][current-1];
				} else {
					this.navigationObservers.previous =3D false;
				}
				if (this.galleries[gallery[0]][gallery[1]][current+1]) {
					this.navigationObservers.next =3D =
this.galleries[gallery[0]][gallery[1]][current+1];
				} else {
					this.navigationObservers.next =3D false;
				}
	=09
				this.activeGallery =3D true;
			} else {
				this.navigationObservers.previous =3D false;
				this.navigationObservers.next =3D false;
			=09
				this.activeGallery =3D false;
			}
	=09

			if (gallery && this.galleries[gallery[0]][gallery[1]][current]) {
				this.contentToFetch =3D =
this.galleries[gallery[0]][gallery[1]][current].href;

				this.galleryLocation =3D {current: current+1, total: =
this.galleries[gallery[0]][gallery[1]].length};
			=09
				if (!this.galleries[gallery[0]][gallery[1]][current+1]) {
					$('lightwindow_next').setStyle({
						display: 'none'
					});
				} else {
					$('lightwindow_next').setStyle({
						display: 'block'
					});
					$('lightwindow_next_title').innerHTML =3D =
this.galleries[gallery[0]][gallery[1]][current+1].title;
				}
			=09
				if (!this.galleries[gallery[0]][gallery[1]][current-1]) {
					$('lightwindow_previous').setStyle({
						display: 'none'
					});
				} else {
					$('lightwindow_previous').setStyle({
						display: 'block'
					});
					$('lightwindow_previous_title').innerHTML =3D =
this.galleries[gallery[0]][gallery[1]][current-1].title;
				}
			}
		=09
			if (this._getParameter('lightwindow_iframe_embed')) {
				this.resizeTo.height =3D this.dimensions.viewport.height;
				this.resizeTo.width =3D this.dimensions.viewport.width;=09
			} else {
				this.resizeTo.height =3D this._getParameter('lightwindow_height');
				this.resizeTo.width =3D this._getParameter('lightwindow_width');			=09
			}
		=09
			this._processWindow();
		=09
			break;

		case 'external' :	=09

			this._appendIframe('auto');

			this.resizeTo.height =3D this.dimensions.viewport.height;
			this.resizeTo.width =3D this.dimensions.viewport.width;
					=09
			this._processWindow();

			break;
			=09
		case 'page' :=09
		=09
			var newAJAX =3D new Ajax.Request(
				this.contentToFetch, {
					method: 'get',=20
					parameters: '',=20
					onComplete: function(response) {
						$('lightwindow_contents').innerHTML +=3D response.responseText;
						this.resizeTo.height =3D =
$('lightwindow_contents').scrollHeight+(this.options.contentOffset.height=
);
						this.resizeTo.width =3D =
$('lightwindow_contents').scrollWidth+(this.options.contentOffset.width);=

						this._processWindow();
					}.bind(this)
				}
			);
		=09
			break;
		=09
		case 'inline' :=20
	=09
			var content =3D this.contentToFetch;
			if (content.indexOf('?') > -1) {
				content =3D content.substring(0, content.indexOf('?'));
			}
			content =3D content.substring(content.indexOf('#')+1);
		=09
			new Insertion.Top($('lightwindow_contents'), $(content).innerHTML);
		=09
			this.resizeTo.height =3D =
$('lightwindow_contents').scrollHeight+(this.options.contentOffset.height=
);
			this.resizeTo.width =3D =
$('lightwindow_contents').scrollWidth+(this.options.contentOffset.width);=

		=09
			this._toggleTroubleElements('hidden', true); 		=09
			this._processWindow();
		=09
			break;
		=09
		default :=20
			throw("Page Type could not be determined, please amend this =
lightwindow URL "+this.contentToFetch);
			break;
		}
	},
	//
	//  Resize the Window to fit the viewport if necessary
	//
	_resizeWindowToFit : function() {
		if (this.resizeTo.height+this.dimensions.cruft.height > =
this.dimensions.viewport.height) {
			var heightRatio =3D this.resizeTo.height/this.resizeTo.width;
			this.resizeTo.height =3D =
this.dimensions.viewport.height-this.dimensions.cruft.height-(2*this.opti=
ons.viewportPadding);
			// We only care about ratio's with this window type		=09
			if (this.windowType =3D=3D 'image' || (this.windowType =3D=3D 'media' =
&& !this._getParameter('lightwindow_iframe_embed'))) {
				this.resizeTo.width =3D this.resizeTo.height/heightRatio;
				$('lightwindow_data_slide_inner').setStyle({
					width: this.resizeTo.width+'px'
				});		=09
			}
		}=20
		if (this.resizeTo.width+this.dimensions.cruft.width > =
this.dimensions.viewport.width) {
			var widthRatio =3D this.resizeTo.width/this.resizeTo.height;
			this.resizeTo.width =3D =
this.dimensions.viewport.width-2*this.dimensions.cruft.width-(2*this.opti=
ons.viewportPadding);
			// We only care about ratio's with this window type
			if (this.windowType =3D=3D 'image' || (this.windowType =3D=3D 'media' =
&& !this._getParameter('lightwindow_iframe_embed'))) {
				this.resizeTo.height =3D this.resizeTo.width/widthRatio;
				$('lightwindow_data_slide_inner').setStyle({
					height: this.resizeTo.height+'px'
				});
			}
		}
		=09
	},
	//
	//  Set the Window to a preset size
	//
	_presetWindowSize : function() {
		if (this._getParameter('lightwindow_height')) {
			this.resizeTo.height =3D =
parseFloat(this._getParameter('lightwindow_height'));
		}
		if (this._getParameter('lightwindow_width')) {
			this.resizeTo.width =3D =
parseFloat(this._getParameter('lightwindow_width'));
		}
	},
	//
	//  Process the Window
	//
	_processWindow : function() {
		// Clean out our effects
		this.dimensions.dataEffects =3D [];

		// Set up the data-slide if we have caption information
		if (this.element.caption || this.element.author || (this.activeGallery =
&& this.options.showGalleryCount)) {
			if (this.element.caption) {
				$('lightwindow_data_caption').innerHTML =3D this.element.caption;
				$('lightwindow_data_caption').setStyle({
					display: 'block'
				});
			} else {
				$('lightwindow_data_caption').setStyle({
					display: 'none'
				});			=09
			}
			if (this.element.author) {
				$('lightwindow_data_author').innerHTML =3D this.element.author;
				$('lightwindow_data_author_container').setStyle({
					display: 'block'
				});
			} else {
				$('lightwindow_data_author_container').setStyle({
					display: 'none'
				});			=09
			}
			if (this.activeGallery && this.options.showGalleryCount) {
				$('lightwindow_data_gallery_current').innerHTML =3D =
this.galleryLocation.current;
				$('lightwindow_data_gallery_total').innerHTML =3D =
this.galleryLocation.total;
				$('lightwindow_data_gallery_container').setStyle({
					display: 'block'
				});
			} else {
				$('lightwindow_data_gallery_container').setStyle({
					display: 'none'
				});			=09
			}

			$('lightwindow_data_slide_inner').setStyle({
				width: this.resizeTo.width+'px',
				height: 'auto',
				visibility: 'visible',
				display: 'block'
			});
			$('lightwindow_data_slide').setStyle({
				height: $('lightwindow_data_slide').getHeight()+'px',
				width: '1px',
				overflow: 'hidden',
				display: 'block'
			});
		} else {
			$('lightwindow_data_slide').setStyle({
				display: 'none',
				width: 'auto'
			});
			$('lightwindow_data_slide_inner').setStyle({
				display: 'none',
				visibility: 'hidden',
				width: this.resizeTo.width+'px',
				height: '0px'
			});
		}
			=09
		if (this.element.title !=3D 'null') {	=09
			$('lightwindow_title_bar_title').innerHTML =3D this.element.title;
		} else {
			$('lightwindow_title_bar_title').innerHTML =3D '';
		}
	=09
		var originalContainerDimensions =3D {height: =
$('lightwindow_container').getHeight(), width: =
$('lightwindow_container').getWidth()};
		// Position the window
    	$('lightwindow_container').setStyle({
			height: 'auto',
			// We need to set the width to a px not auto as opera has problems =
with it
			width: =
$('lightwindow_container').getWidth()+this.options.contentOffset.width-(t=
his.windowActive ? this.options.contentOffset.width : 0)+'px'
		});
		var newContainerDimensions =3D {height: =
$('lightwindow_container').getHeight(), width: =
$('lightwindow_container').getWidth()};
 	=09
		// We need to record the container dimension changes
		this.containerChange =3D {height: =
originalContainerDimensions.height-newContainerDimensions.height, width: =
originalContainerDimensions.width-newContainerDimensions.width};

		// Get out general dimensions
		this.dimensions.container =3D {height: =
$('lightwindow_container').getHeight(), width: =
$('lightwindow_container').getWidth()};
		this.dimensions.cruft =3D {height: =
this.dimensions.container.height-$('lightwindow_contents').getHeight()+th=
is.options.contentOffset.height, width: =
this.dimensions.container.width-$('lightwindow_contents').getWidth()+this=
.options.contentOffset.width};
	=09
		// Set Sizes if we need too
		this._presetWindowSize();
		this._resizeWindowToFit(); // Even if the window is preset we still =
don't want it to go outside of the viewport

		if (!this.windowActive) {
			// Position the window
		   	$('lightwindow_container').setStyle({
				left: -(this.dimensions.container.width/2)+'px',
				top: -(this.dimensions.container.height/2)+'px'
			});
		}
	   	$('lightwindow_container').setStyle({
			height: this.dimensions.container.height+'px',
			width: this.dimensions.container.width+'px'
		});
	=09
		// We are ready, lets show this puppy off!
		this._displayLightWindow('block', 'visible');
		this._animateLightWindow();
	},
	//
	//  Fire off our animation handler
	//
	_animateLightWindow : function() {
		if (this.options.animationHandler) {
			this.options.animationHandler().bind(this);
		} else {
			this._defaultAnimationHandler();
		}
	},
	//
	//  Fire off our transition handler
	//
	_handleNavigation : function(display) {
		if (this.options.navigationHandler) {
			this.options.navigationHandler().bind(this, display);
		} else {
			this._defaultDisplayNavigation(display);
		}
	},
	//
	//  Fire off our transition handler
	//
	_handleTransition : function() {
		if (this.options.transitionHandler) {
			this.options.transitionHandler().bind(this);
		} else {
			this._defaultTransitionHandler();
		}
	},
	//
	//  Handle the finish of the window animation
	//=20
	_handleFinalWindowAnimation : function(delay) {
		if (this.options.finalAnimationHandler) {
			this.options.finalAnimationHandler().bind(this, delay);
		} else {
			this._defaultfinalWindowAnimationHandler(delay);
		}	=09
	},
	//
	//  Handle the gallery Animation
	//=20
	_handleGalleryAnimation : function(list) {
		if (this.options.galleryAnimationHandler) {
			this.options.galleryAnimationHandler().bind(this, list);
		} else {
			this._defaultGalleryAnimationHandler(list);
		}	=09
	},
	//
	//  Display the navigation=20
	//
	_defaultDisplayNavigation : function(display) {
		if (display) {
			$('lightwindow_navigation').setStyle({
				display: 'block',
				height: $('lightwindow_contents').getHeight()+'px',
				width: '100%',
				marginTop: this.options.dimensions.titleHeight+'px'
			});		=09
		} else {
			$('lightwindow_navigation').setStyle({
				display: 'none',
				height: 'auto',
				width: 'auto'
			});		=09
		}
	},
	//
	//  This is the default animation handler for LightWindow
	//
	_defaultAnimationHandler : function() {=09
		// Now that we have figures out the cruft lets make the caption go =
away and add its effects
		if (this.element.caption || this.element.author || (this.activeGallery =
&& this.options.showGalleryCount)) {
			$('lightwindow_data_slide').setStyle({
				display: 'none',
				width: 'auto'
			});
			this.dimensions.dataEffects.push(
				new Effect.SlideDown('lightwindow_data_slide', {sync: true}),
				new Effect.Appear('lightwindow_data_slide', {sync: true, from: 0.0, =
to: 1.0})
			);
		}

		// Set up the Title if we have one
		$('lightwindow_title_bar_inner').setStyle({
			height: '0px',
			marginTop: this.options.dimensions.titleHeight+'px'
		});
	=09
		// We always want the title bar as well
		this.dimensions.dataEffects.push(
			new Effect.Morph('lightwindow_title_bar_inner', {sync: true, style: =
{height: this.options.dimensions.titleHeight+'px', marginTop: '0px'}}),
		 	new Effect.Appear('lightwindow_title_bar_inner', {sync: true, from: =
0.0, to: 1.0})
		);	=09
	=09
		if (!this.options.hideGalleryTab) {
			this._handleGalleryAnimation(false);
			if ($('lightwindow_galleries_tab_container').getHeight() =3D=3D 0) {
				this.dimensions.dataEffects.push(
					new Effect.Morph('lightwindow_galleries_tab_container', {sync: =
true, style: {height: '20px', marginTop: '0px'}})
				);
				$('lightwindow_galleries').setStyle({
					width: '0px'
				});
			}
		}
	=09
		var resized =3D false;
		var ratio =3D =
this.dimensions.container.width-$('lightwindow_contents').getWidth()+this=
.resizeTo.width+this.options.contentOffset.width;
		if (ratio !=3D $('lightwindow_container').getWidth()) {
			new Effect.Parallel([
					new Effect.Scale('lightwindow_contents', =
100*(this.resizeTo.width/$('lightwindow_contents').getWidth()), =
{scaleFrom: =
100*($('lightwindow_contents').getWidth()/($('lightwindow_contents').getW=
idth()+(this.options.contentOffset.width))), sync: true,  scaleY: false, =
scaleContent: false}),
					new Effect.Scale('lightwindow_container', =
100*(ratio/(this.dimensions.container.width)), {sync: true, scaleY: =
false, scaleFromCenter: true, scaleContent: false})
				], {
					duration: this.duration,=20
					delay: 0.25,
					queue: {position: 'end', scope: 'lightwindowAnimation'}
				}
			);	=09
		}
	=09
		ratio =3D =
this.dimensions.container.height-$('lightwindow_contents').getHeight()+th=
is.resizeTo.height+this.options.contentOffset.height;
		if (ratio !=3D $('lightwindow_container').getHeight()) {
			new Effect.Parallel([
					new Effect.Scale('lightwindow_contents', =
100*(this.resizeTo.height/$('lightwindow_contents').getHeight()), =
{scaleFrom: =
100*($('lightwindow_contents').getHeight()/($('lightwindow_contents').get=
Height()+(this.options.contentOffset.height))), sync: true, scaleX: =
false, scaleContent: false}),
					new Effect.Scale('lightwindow_container', =
100*(ratio/(this.dimensions.container.height)), {sync: true, scaleX: =
false, scaleFromCenter: true, scaleContent: false})
				], {
					duration: this.duration,=20
					afterFinish: function() {			=09
						if (this.dimensions.dataEffects.length > 0) {
							if (!this.options.hideGalleryTab) {
								$('lightwindow_galleries').setStyle({
									width: this.resizeTo.width+'px'
								});
							}
							new Effect.Parallel(this.dimensions.dataEffects, {
									duration: this.duration,
									afterFinish: function() {
										this._finishWindow();
									}.bind(this),
									queue: {position: 'end', scope: 'lightwindowAnimation'}=20
								}
							);
						}
					}.bind(this),=20
					queue: {position: 'end', scope: 'lightwindowAnimation'}=20
				}
			);
			resized =3D true;
		}
	=09
		// We need to do our data effect since there was no resizing
		if (!resized && this.dimensions.dataEffects.length > 0) {=09
			new Effect.Parallel(this.dimensions.dataEffects, {
					duration: this.duration,
					beforeStart: function() {
						if (!this.options.hideGalleryTab) {
							$('lightwindow_galleries').setStyle({
								width: this.resizeTo.width+'px'
							});
						}
						if (this.containerChange.height !=3D 0 || =
this.containerChange.width !=3D 0) {
							new Effect.MoveBy('lightwindow_container', =
this.containerChange.height, this.containerChange.width, {transition: =
Effect.Transitions.sinoidal});
						}
					}.bind(this),		=09
					afterFinish: function() {
						this._finishWindow();
					}.bind(this),
					queue: {position: 'end', scope: 'lightwindowAnimation'}=20
				}
			);
		}		=09
	=09
	},
	//
	//  Finish up Window Animation
	//
	_defaultfinalWindowAnimationHandler : function(delay) {
		if (this.windowType =3D=3D 'media' || =
this._getParameter('lightwindow_loading_animation')) {=09
			// Because of major flickering with the overlay we just hide it in =
this case
			Element.hide('lightwindow_loading');
			this._handleNavigation(this.activeGallery);
			this._setStatus(false);
		} else {
			Effect.Fade('lightwindow_loading', {
				duration: 0.75,
				delay: 1.0,=20
				afterFinish: function() {
					// Just in case we need some scroll goodness (this also avoids the =
swiss cheese effect)
					if (this.windowType !=3D 'image' && this.windowType !=3D 'media' && =
this.windowType !=3D 'external') {
						$('lightwindow_contents').setStyle({
							overflow: 'auto'
						});
					}
					this._handleNavigation(this.activeGallery);
					this._defaultGalleryAnimationHandler();
					this._setStatus(false);
				}.bind(this),
				queue: {position: 'end', scope: 'lightwindowAnimation'}
			});
		}
	},
	//
	//  Handle the gallery Animation
	//
	_defaultGalleryAnimationHandler : function(list) {
		if (this.activeGallery) {
			$('lightwindow_galleries').setStyle({
				display: 'block',
				marginBottom: =
$('lightwindow_data_slide').getHeight()+this.options.contentOffset.height=
/2+'px'
			});
			$('lightwindow_navigation').setStyle({
				height: $('lightwindow_contents').getHeight()-20+'px'
			});
		} else {
			$('lightwindow_galleries').setStyle({
				display: 'none'
			});=09
			$('lightwindow_galleries_tab_container').setStyle({
				height: '0px',
				marginTop: '20px'
			});
			$('lightwindow_galleries_list').setStyle({
				height: '0px'
			});
			return false;
		}
	=09
		if (list) {
			if ($('lightwindow_galleries_list').getHeight() =3D=3D 0) {
				var height =3D $('lightwindow_contents').getHeight()*0.80;
				$('lightwindow_galleries_tab_span').className =3D 'down';
			} else {
				var height =3D 0;
				$('lightwindow_galleries_tab_span').className =3D 'up';
			}

			new Effect.Morph('lightwindow_galleries_list', {
				duration: this.duration,
				transition: Effect.Transitions.sinoidal,
				style: {height: height+'px'},
				beforeStart: function() {
					$('lightwindow_galleries_list').setStyle({
						overflow: 'hidden'
					});				=09
				},
				afterFinish: function() {
					$('lightwindow_galleries_list').setStyle({
						overflow: 'auto'
					});
				},
				queue: {position: 'end', scope: 'lightwindowAnimation'}
			});=09
		}
	=09
	=09
	},
	//
	//  Default Transition Handler
	//
	_defaultTransitionHandler : function() {
		// Clean out our effects
		this.dimensions.dataEffects =3D [];

		// Now that we have figures out the cruft lets make the caption go =
away and add its effects
		if ($('lightwindow_data_slide').getStyle('display') !=3D 'none') {
			this.dimensions.dataEffects.push(
				new Effect.SlideUp('lightwindow_data_slide', {sync: true}),
				new Effect.Fade('lightwindow_data_slide', {sync: true, from: 1.0, =
to: 0.0})
			);
		}
	=09
		if (!this.options.hideGalleryTab) {
			if ($('lightwindow_galleries').getHeight() !=3D 0 && =
!this.options.hideGalleryTab) {
				this.dimensions.dataEffects.push(
					new Effect.Morph('lightwindow_galleries_tab_container', {sync: =
true, style: {height: '0px', marginTop: '20px'}})
				);
			}
		=09
			if ($('lightwindow_galleries_list').getHeight() !=3D 0) {
				$('lightwindow_galleries_tab_span').className =3D 'up';
				this.dimensions.dataEffects.push(
					new Effect.Morph('lightwindow_galleries_list', {
						sync: true,=20
						style: {height: '0px'},
						transition: Effect.Transitions.sinoidal,
						beforeStart: function() {
							$('lightwindow_galleries_list').setStyle({
								overflow: 'hidden'
							});				=09
						},
						afterFinish: function() {
							$('lightwindow_galleries_list').setStyle({
								overflow: 'auto'
							});
						}
					})
				);
			}
		}
	=09
		// We always want the title bar as well
		this.dimensions.dataEffects.push(
			new Effect.Morph('lightwindow_title_bar_inner', {sync: true, style: =
{height: '0px', marginTop: this.options.dimensions.titleHeight+'px'}}),
		 	new Effect.Fade('lightwindow_title_bar_inner', {sync: true, from: =
1.0, to: 0.0})
		);

		new Effect.Parallel(this.dimensions.dataEffects, {
				duration: this.duration,
				afterFinish: function() {
					this._loadWindow();
				}.bind(this),
				queue: {position: 'end', scope: 'lightwindowAnimation'}=20
			}
		);=09
	},
	//
	//	Default Form handler for LightWindow
	//
	_defaultFormHandler : function(e) {
		var element =3D Event.element(e).parentNode;
		var parameterString =3D =
Form.serialize(this._getParameter('lightwindow_form', =
element.getAttribute('params')));
		if (this.options.formMethod =3D=3D 'post') {
			var newAJAX =3D new Ajax.Request(element.href, {=20
				method: 'post',=20
				postBody: parameterString,=20
				onComplete: this.openWindow.bind(this, element)
			});
		} else if (this.options.formMethod =3D=3D 'get') {
			var newAJAX =3D new Ajax.Request(element.href, {=20
				method: 'get',=20
				parameters: parameterString,=20
				onComplete: this.openWindow.bind(this, element)
			});
		}
	},
	//=20
	//  Wrap everything up
	//
	_finishWindow : function() {
		if (this.windowType =3D=3D 'external') {
			// We set the externals source here because it allows for a much =
smoother animation
			$('lightwindow_iframe').setAttribute('src', this.element.href);
			this._handleFinalWindowAnimation(1);=09
		} else if (this.windowType =3D=3D 'media') {

			var outerObject =3D document.createElement('object');
			outerObject.setAttribute('classid', =
this.options.classids[this._fileExtension(this.contentToFetch)]);
			outerObject.setAttribute('codebase', =
this.options.codebases[this._fileExtension(this.contentToFetch)]);
			outerObject.setAttribute('id', 'lightwindow_media_primary');
			outerObject.setAttribute('name', 'lightwindow_media_primary');
			outerObject.setAttribute('width', this.resizeTo.width);
			outerObject.setAttribute('height', this.resizeTo.height);
			outerObject =3D this._addParamToObject('movie', this.contentToFetch, =
outerObject);
			outerObject =3D this._addParamToObject('src', this.contentToFetch, =
outerObject);
			outerObject =3D this._addParamToObject('controller', 'true', =
outerObject);
			outerObject =3D this._addParamToObject('wmode', 'transparent', =
outerObject);
			outerObject =3D this._addParamToObject('cache', 'false', =
outerObject);
			outerObject =3D this._addParamToObject('quality', 'high', =
outerObject);

			if (!Prototype.Browser.IE) {
				var innerObject =3D document.createElement('object');
				innerObject.setAttribute('type', =
this.options.mimeTypes[this._fileExtension(this.contentToFetch)]);
				innerObject.setAttribute('data', this.contentToFetch);
				innerObject.setAttribute('id', 'lightwindow_media_secondary');
				innerObject.setAttribute('name', 'lightwindow_media_secondary');
				innerObject.setAttribute('width', this.resizeTo.width);
				innerObject.setAttribute('height', this.resizeTo.height);
				innerObject =3D this._addParamToObject('controller', 'true', =
innerObject);
				innerObject =3D this._addParamToObject('wmode', 'transparent', =
innerObject);
				innerObject =3D this._addParamToObject('cache', 'false', =
innerObject);
				innerObject =3D this._addParamToObject('quality', 'high', =
innerObject);
		=09
				outerObject.appendChild(innerObject);
			}=09
		=09
			if (this._getParameter('lightwindow_iframe_embed')) {
				this._appendIframe('no');
				this._writeToIframe(this._convertToMarkup(outerObject, 'object'));
			} else {
				this._appendObject(outerObject, 'object', =
$('lightwindow_contents'));
			}

			this._handleFinalWindowAnimation(0);
		} else {
			this._handleFinalWindowAnimation(0);
		}

		// Initialize any actions
		this._setupActions();
	}
}

/*-----------------------------------------------------------------------=
------------------------*/

Event.observe(window, 'load', lightwindowInit, false);

//
//	Set up all of our links
//
var myLightWindow =3D null;
function lightwindowInit() {
	myLightWindow =3D new lightwindow();
}
------=_NextPart_000_0033_01CBBC8C.E2776570
mime-version: 1.0
content-type: application/octet-stream
content-transfer-encoding: quoted-printable
content-location: http://www.four-h.purdue.edu/Scripts/swfobject_modified.js

/*!	SWFObject v2.0 <http://code.google.com/p/swfobject/>
	Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der =
Sluis
	This software is released under the MIT License =
<http://www.opensource.org/licenses/mit-license.php>
*/

var swfobject =3D function() {
=09
	var UNDEF =3D "undefined",
		OBJECT =3D "object",
		SHOCKWAVE_FLASH =3D "Shockwave Flash",
		SHOCKWAVE_FLASH_AX =3D "ShockwaveFlash.ShockwaveFlash",
		FLASH_MIME_TYPE =3D "application/x-shockwave-flash",
		EXPRESS_INSTALL_ID =3D "SWFObjectExprInst",
	=09
		win =3D window,
		doc =3D document,
		nav =3D navigator,
	=09
		domLoadFnArr =3D [],
		regObjArr =3D [],
		timer =3D null,
		storedAltContent =3D null,
		storedAltContentId =3D null,
		isDomLoaded =3D false,
		isExpressInstallActive =3D false;
=09
	/* Centralized function for browser feature detection
		- Proprietary feature detection (conditional compiling) is used to =
detect Internet Explorer's features
		- User agent string detection is only used when no alternative is =
possible
		- Is executed directly for optimal performance
	*/=09
	var ua =3D function() {
		var w3cdom =3D typeof doc.getElementById !=3D UNDEF && typeof =
doc.getElementsByTagName !=3D UNDEF && typeof doc.createElement !=3D =
UNDEF && typeof doc.appendChild !=3D UNDEF && typeof doc.replaceChild =
!=3D UNDEF && typeof doc.removeChild !=3D UNDEF && typeof doc.cloneNode =
!=3D UNDEF,
			playerVersion =3D [0,0,0],
			d =3D null;
		if (typeof nav.plugins !=3D UNDEF && typeof =
nav.plugins[SHOCKWAVE_FLASH] =3D=3D OBJECT) {
			d =3D nav.plugins[SHOCKWAVE_FLASH].description;
			if (d) {
				d =3D d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
				playerVersion[0] =3D parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
				playerVersion[1] =3D parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), =
10);
				playerVersion[2] =3D /r/.test(d) ? parseInt(d.replace(/^.*r(.*)$/, =
"$1"), 10) : 0;
			}
		}
		else if (typeof win.ActiveXObject !=3D UNDEF) {
			var a =3D null, fp6Crash =3D false;
			try {
				a =3D new ActiveXObject(SHOCKWAVE_FLASH_AX + ".7");
			}
			catch(e) {
				try {=20
					a =3D new ActiveXObject(SHOCKWAVE_FLASH_AX + ".6");
					playerVersion =3D [6,0,21];
					a.AllowScriptAccess =3D "always";  // Introduced in fp6.0.47
				}
				catch(e) {
					if (playerVersion[0] =3D=3D 6) {
						fp6Crash =3D true;
					}
				}
				if (!fp6Crash) {
					try {
						a =3D new ActiveXObject(SHOCKWAVE_FLASH_AX);
					}
					catch(e) {}
				}
			}
			if (!fp6Crash && a) { // a will return null when ActiveX is disabled
				try {
					d =3D a.GetVariable("$version");  // Will crash fp6.0.21/23/29
					if (d) {
						d =3D d.split(" ")[1].split(",");
						playerVersion =3D [parseInt(d[0], 10), parseInt(d[1], 10), =
parseInt(d[2], 10)];
					}
				}
				catch(e) {}
			}
		}
		var u =3D nav.userAgent.toLowerCase(),
			p =3D nav.platform.toLowerCase(),
			webkit =3D /webkit/.test(u) ? =
parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // =
returns either the webkit version or false if not webkit
			ie =3D false,
			windows =3D p ? /win/.test(p) : /win/.test(u),
			mac =3D p ? /mac/.test(p) : /mac/.test(u);
		/*@cc_on
			ie =3D true;
			@if (@_win32)
				windows =3D true;
			@elif (@_mac)
				mac =3D true;
			@end
		@*/
		return { w3cdom:w3cdom, pv:playerVersion, webkit:webkit, ie:ie, =
win:windows, mac:mac };
	}();

	/* Cross-browser onDomLoad
		- Based on Dean Edwards' solution: =
http://dean.edwards.name/weblog/2006/06/again/
		- Will fire an event as soon as the DOM of a page is loaded (supported =
by Gecko based browsers - like Firefox -, IE, Opera9+, Safari)
	*/=20
	var onDomLoad =3D function() {
		if (!ua.w3cdom) {
			return;
		}
		addDomLoadEvent(main);
		if (ua.ie && ua.win) {
			try {  // Avoid a possible Operation Aborted error
				doc.write("<scr" + "ipt id=3D__ie_ondomload defer=3Dtrue =
src=3D//:></scr" + "ipt>"); // String is split into pieces to avoid =
Norton AV to add code that can cause errors=20
				var s =3D getElementById("__ie_ondomload");
				if (s) {
					s.onreadystatechange =3D function() {
						if (this.readyState =3D=3D "complete") {
							this.parentNode.removeChild(this);
							callDomLoadFunctions();
						}
					};
				}
			}
			catch(e) {}
		}
		if (ua.webkit && typeof doc.readyState !=3D UNDEF) {
			timer =3D setInterval(function() { if =
(/loaded|complete/.test(doc.readyState)) { callDomLoadFunctions(); }}, =
10);
		}
		if (typeof doc.addEventListener !=3D UNDEF) {
			doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, null);
		}
		addLoadEvent(callDomLoadFunctions);
	}();
=09
	function callDomLoadFunctions() {
		if (isDomLoaded) {
			return;
		}
		if (ua.ie && ua.win) { // Test if we can really add elements to the =
DOM; we don't want to fire it too early
			var s =3D createElement("span");
			try { // Avoid a possible Operation Aborted error
				var t =3D doc.getElementsByTagName("body")[0].appendChild(s);
				t.parentNode.removeChild(t);
			}
			catch (e) {
				return;
			}
		}
		isDomLoaded =3D true;
		if (timer) {
			clearInterval(timer);
			timer =3D null;
		}
		var dl =3D domLoadFnArr.length;
		for (var i =3D 0; i < dl; i++) {
			domLoadFnArr[i]();
		}
	}
=09
	function addDomLoadEvent(fn) {
		if (isDomLoaded) {
			fn();
		}
		else {=20
			domLoadFnArr[domLoadFnArr.length] =3D fn; // Array.push() is only =
available in IE5.5+
		}
	}
=09
	/* Cross-browser onload
		- Based on James Edwards' solution: =
http://brothercake.com/site/resources/scripts/onload/
		- Will fire an event as soon as a web page including all of its assets =
are loaded=20
	 */
	function addLoadEvent(fn) {
		if (typeof win.addEventListener !=3D UNDEF) {
			win.addEventListener("load", fn, false);
		}
		else if (typeof doc.addEventListener !=3D UNDEF) {
			doc.addEventListener("load", fn, false);
		}
		else if (typeof win.attachEvent !=3D UNDEF) {
			win.attachEvent("onload", fn);
		}
		else if (typeof win.onload =3D=3D "function") {
			var fnOld =3D win.onload;
			win.onload =3D function() {
				fnOld();
				fn();
			};
		}
		else {
			win.onload =3D fn;
		}
	}
=09
	/* Main function
		- Will preferably execute onDomLoad, otherwise onload (as a fallback)
	*/
	function main() { // Static publishing only
		var rl =3D regObjArr.length;
		for (var i =3D 0; i < rl; i++) { // For each registered object element
			var id =3D regObjArr[i].id;
			if (ua.pv[0] > 0) {
				var obj =3D getElementById(id);
				if (obj) {
					regObjArr[i].width =3D obj.getAttribute("width") ? =
obj.getAttribute("width") : "0";
					regObjArr[i].height =3D obj.getAttribute("height") ? =
obj.getAttribute("height") : "0";
					if (hasPlayerVersion(regObjArr[i].swfVersion)) { // Flash plug-in =
version >=3D Flash content version: Houston, we have a match!
						if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore =
the object element's nested param elements
							fixParams(obj);
						}
						setVisibility(id, true);
					}
					else if (regObjArr[i].expressInstall && !isExpressInstallActive && =
hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) { // Show the Adobe =
Express Install dialog if set by the web page author and if supported =
(fp6.0.65+ on Win/Mac OS only)
						showExpressInstall(regObjArr[i]);
					}
					else { // Flash plug-in and Flash content version mismatch: display =
alternative content instead of Flash content
						displayAltContent(obj);
					}
				}
			}
			else {  // If no fp is installed, we let the object element do its =
job (show alternative content)
				setVisibility(id, true);
			}
		}
	}
=09
	/* Fix nested param elements, which are ignored by older webkit engines
		- This includes Safari up to and including version 1.2.2 on Mac OS =
10.3
		- Fall back to the proprietary embed element
	*/
	function fixParams(obj) {
		var nestedObj =3D obj.getElementsByTagName(OBJECT)[0];
		if (nestedObj) {
			var e =3D createElement("embed"), a =3D nestedObj.attributes;
			if (a) {
				var al =3D a.length;
				for (var i =3D 0; i < al; i++) {
					if (a[i].nodeName.toLowerCase() =3D=3D "data") {
						e.setAttribute("src", a[i].nodeValue);
					}
					else {
						e.setAttribute(a[i].nodeName, a[i].nodeValue);
					}
				}
			}
			var c =3D nestedObj.childNodes;
			if (c) {
				var cl =3D c.length;
				for (var j =3D 0; j < cl; j++) {
					if (c[j].nodeType =3D=3D 1 && c[j].nodeName.toLowerCase() =3D=3D =
"param") {
						e.setAttribute(c[j].getAttribute("name"), =
c[j].getAttribute("value"));
					}
				}
			}
			obj.parentNode.replaceChild(e, obj);
		}
	}
=09
	/* Fix hanging audio/video threads and force open sockets and =
NetConnections to disconnect
		- Occurs when unloading a web page in IE using fp8+ and =
innerHTML/outerHTML
		- Dynamic publishing only
	*/
	function fixObjectLeaks(id) {
		if (ua.ie && ua.win && hasPlayerVersion("8.0.0")) {
			win.attachEvent("onunload", function () {
				var obj =3D getElementById(id);
				if (obj) {
					for (var i in obj) {
						if (typeof obj[i] =3D=3D "function") {
							obj[i] =3D function() {};
						}
					}
					obj.parentNode.removeChild(obj);
				}
			});
		}
	}
=09
	/* Show the Adobe Express Install dialog
		- Reference: =
http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=3D6a253b75
	*/
	function showExpressInstall(regObj) {
		isExpressInstallActive =3D true;
		var obj =3D getElementById(regObj.id);
		if (obj) {
			if (regObj.altContentId) {
				var ac =3D getElementById(regObj.altContentId);
				if (ac) {
					storedAltContent =3D ac;
					storedAltContentId =3D regObj.altContentId;
				}
			}
			else {
				storedAltContent =3D abstractAltContent(obj);
			}
			if (!(/%$/.test(regObj.width)) && parseInt(regObj.width, 10) < 310) {
				regObj.width =3D "310";
			}
			if (!(/%$/.test(regObj.height)) && parseInt(regObj.height, 10) < 137) =
{
				regObj.height =3D "137";
			}
			doc.title =3D doc.title.slice(0, 47) + " - Flash Player =
Installation";
			var pt =3D ua.ie && ua.win ? "ActiveX" : "PlugIn",
				dt =3D doc.title,
				fv =3D "MMredirectURL=3D" + win.location + "&MMplayerType=3D" + pt + =
"&MMdoctitle=3D" + dt,
				replaceId =3D regObj.id;
			// For IE when a SWF is loading (AND: not available in cache) wait =
for the onload event to fire to remove the original object element
			// In IE you cannot properly cancel a loading SWF file without =
breaking browser load references, also obj.onreadystatechange doesn't =
work
			if (ua.ie && ua.win && obj.readyState !=3D 4) {
				var newObj =3D createElement("div");
				replaceId +=3D "SWFObjectNew";
				newObj.setAttribute("id", replaceId);
				obj.parentNode.insertBefore(newObj, obj); // Insert placeholder div =
that will be replaced by the object element that loads =
expressinstall.swf
				obj.style.display =3D "none";
				win.attachEvent("onload", function() { =
obj.parentNode.removeChild(obj); });
			}
			createSWF({ data:regObj.expressInstall, id:EXPRESS_INSTALL_ID, =
width:regObj.width, height:regObj.height }, { flashvars:fv }, =
replaceId);
		}
	}
=09
	/* Functions to abstract and display alternative content
	*/
	function displayAltContent(obj) {
		if (ua.ie && ua.win && obj.readyState !=3D 4) {
			// For IE when a SWF is loading (AND: not available in cache) wait =
for the onload event to fire to remove the original object element
			// In IE you cannot properly cancel a loading SWF file without =
breaking browser load references, also obj.onreadystatechange doesn't =
work
			var el =3D createElement("div");
			obj.parentNode.insertBefore(el, obj); // Insert placeholder div that =
will be replaced by the alternative content
			el.parentNode.replaceChild(abstractAltContent(obj), el);
			obj.style.display =3D "none";
			win.attachEvent("onload", function() { =
obj.parentNode.removeChild(obj); });
		}
		else {
			obj.parentNode.replaceChild(abstractAltContent(obj), obj);
		}
	}=09

	function abstractAltContent(obj) {
		var ac =3D createElement("div");
		if (ua.win && ua.ie) {
			ac.innerHTML =3D obj.innerHTML;
		}
		else {
			var nestedObj =3D obj.getElementsByTagName(OBJECT)[0];
			if (nestedObj) {
				var c =3D nestedObj.childNodes;
				if (c) {
					var cl =3D c.length;
					for (var i =3D 0; i < cl; i++) {
						if (!(c[i].nodeType =3D=3D 1 && c[i].nodeName.toLowerCase() =3D=3D =
"param") && !(c[i].nodeType =3D=3D 8)) {
							ac.appendChild(c[i].cloneNode(true));
						}
					}
				}
			}
		}
		return ac;
	}
=09
	/* Cross-browser dynamic SWF creation
	*/
	function createSWF(attObj, parObj, id) {
		var r, el =3D getElementById(id);
		if (typeof attObj.id =3D=3D UNDEF) { // if no 'id' is defined for the =
object element, it will inherit the 'id' from the alternative content
			attObj.id =3D id;
		}
		if (ua.ie && ua.win) { // IE, the object element and W3C DOM methods =
do not combine: fall back to outerHTML
			var att =3D "";
			for (var i in attObj) {
				if (attObj[i] !=3D Object.prototype[i]) { // Filter out prototype =
additions from other potential libraries, like =
Object.prototype.toJSONString =3D function() {}
					if (i =3D=3D "data") {
						parObj.movie =3D attObj[i];
					}
					else if (i.toLowerCase() =3D=3D "styleclass") { // 'class' is an =
ECMA4 reserved keyword
						att +=3D ' class=3D"' + attObj[i] + '"';
					}
					else if (i !=3D "classid") {
						att +=3D ' ' + i + '=3D"' + attObj[i] + '"';
					}
				}
			}
			var par =3D "";
			for (var j in parObj) {
				if (parObj[j] !=3D Object.prototype[j]) { // Filter out prototype =
additions from other potential libraries
					par +=3D '<param name=3D"' + j + '" value=3D"' + parObj[j] + '" =
/>';
				}
			}
			el.outerHTML =3D '<object =
classid=3D"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + =
par + '</object>';
			fixObjectLeaks(attObj.id); // This bug affects dynamic publishing =
only
			r =3D getElementById(attObj.id);=09
		}
		else if (ua.webkit && ua.webkit < 312) { // Older webkit engines =
ignore the object element's nested param elements: fall back to the =
proprietary embed element
			var e =3D createElement("embed");
			e.setAttribute("type", FLASH_MIME_TYPE);
			for (var k in attObj) {
				if (attObj[k] !=3D Object.prototype[k]) { // Filter out prototype =
additions from other potential libraries
					if (k =3D=3D "data") {
						e.setAttribute("src", attObj[k]);
					}
					else if (k.toLowerCase() =3D=3D "styleclass") { // 'class' is an =
ECMA4 reserved keyword
						e.setAttribute("class", attObj[k]);
					}
					else if (k !=3D "classid") { // Filter out IE specific attribute
						e.setAttribute(k, attObj[k]);
					}
				}
			}
			for (var l in parObj) {
				if (parObj[l] !=3D Object.prototype[l]) { // Filter out prototype =
additions from other potential libraries
					if (l !=3D "movie") { // Filter out IE specific param element
						e.setAttribute(l, parObj[l]);
					}
				}
			}
			el.parentNode.replaceChild(e, el);
			r =3D e;
		}
		else { // Well-behaving browsers
			var o =3D createElement(OBJECT);
			o.setAttribute("type", FLASH_MIME_TYPE);
			for (var m in attObj) {
				if (attObj[m] !=3D Object.prototype[m]) { // Filter out prototype =
additions from other potential libraries
					if (m.toLowerCase() =3D=3D "styleclass") { // 'class' is an ECMA4 =
reserved keyword
						o.setAttribute("class", attObj[m]);
					}
					else if (m !=3D "classid") { // Filter out IE specific attribute
						o.setAttribute(m, attObj[m]);
					}
				}
			}
			for (var n in parObj) {
				if (parObj[n] !=3D Object.prototype[n] && n !=3D "movie") { // =
Filter out prototype additions from other potential libraries and IE =
specific param element
					createObjParam(o, n, parObj[n]);
				}
			}
			el.parentNode.replaceChild(o, el);
			r =3D o;
		}
		return r;
	}
=09
	function createObjParam(el, pName, pValue) {
		var p =3D createElement("param");
		p.setAttribute("name", pName);=09
		p.setAttribute("value", pValue);
		el.appendChild(p);
	}
=09
	function getElementById(id) {
		return doc.getElementById(id);
	}
=09
	function createElement(el) {
		return doc.createElement(el);
	}
=09
	function hasPlayerVersion(rv) {
		var pv =3D ua.pv, v =3D rv.split(".");
		v[0] =3D parseInt(v[0], 10);
		v[1] =3D parseInt(v[1], 10);
		v[2] =3D parseInt(v[2], 10);
		return (pv[0] > v[0] || (pv[0] =3D=3D v[0] && pv[1] > v[1]) || (pv[0] =
=3D=3D v[0] && pv[1] =3D=3D v[1] && pv[2] >=3D v[2])) ? true : false;
	}
=09
	/* Cross-browser dynamic CSS creation
		- Based on Bobby van der Sluis' solution: =
http://www.bobbyvandersluis.com/articles/dynamicCSS.php
	*/=09
	function createCSS(sel, decl) {
		if (ua.ie && ua.mac) {
			return;
		}
		var h =3D doc.getElementsByTagName("head")[0], s =3D =
createElement("style");
		s.setAttribute("type", "text/css");
		s.setAttribute("media", "screen");
		if (!(ua.ie && ua.win) && typeof doc.createTextNode !=3D UNDEF) {
			s.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
		}
		h.appendChild(s);
		if (ua.ie && ua.win && typeof doc.styleSheets !=3D UNDEF && =
doc.styleSheets.length > 0) {
			var ls =3D doc.styleSheets[doc.styleSheets.length - 1];
			if (typeof ls.addRule =3D=3D OBJECT) {
				ls.addRule(sel, decl);
			}
		}
	}
=09
	function setVisibility(id, isVisible) {
		var v =3D isVisible ? "visible" : "hidden";
		if (isDomLoaded) {
			getElementById(id).style.visibility =3D v;
		}
		else {
			createCSS("#" + id, "visibility:" + v);
		}
	}
=09
	function getTargetVersion(obj) {
	    if (!obj)
	        return 0;
		var c =3D obj.childNodes;
		var cl =3D c.length;
		for (var i =3D 0; i < cl; i++) {
			if (c[i].nodeType =3D=3D 1 && c[i].nodeName.toLowerCase() =3D=3D =
"object") {
			    c =3D c[i].childNodes;
			    cl =3D c.length;
			    i =3D 0;
			}    =20
			if (c[i].nodeType =3D=3D 1 && c[i].nodeName.toLowerCase() =3D=3D =
"param" && c[i].getAttribute("name") =3D=3D "swfversion") {
			   return c[i].getAttribute("value");=20
			}
		}
		return 0;
	}
   =20
	function getExpressInstall(obj) {
	    if (!obj)
	        return "";
		var c =3D obj.childNodes;
		var cl =3D c.length;
		for (var i =3D 0; i < cl; i++) {
			if (c[i].nodeType =3D=3D 1 && c[i].nodeName.toLowerCase() =3D=3D =
"object") {
			    c =3D c[i].childNodes;
			    cl =3D c.length;
			    i =3D 0;
			}    =20
			if (c[i].nodeType =3D=3D 1 && c[i].nodeName.toLowerCase() =3D=3D =
"param" && c[i].getAttribute("name") =3D=3D "expressinstall") {=20
			    return c[i].getAttribute("value");=20
			}	      =20
		}
		return "";
	}
   =20
	return {
		/* Public API
			- Reference: =
http://code.google.com/p/swfobject/wiki/SWFObject_2_0_documentation
		*/=20
		registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr) {
			if (!ua.w3cdom || !objectIdStr) {
				return;
			}
			var obj =3D document.getElementById(objectIdStr);
			var xi =3D getExpressInstall(obj);
			var regObj =3D {};
			regObj.id =3D objectIdStr;
			regObj.swfVersion =3D swfVersionStr ? swfVersionStr : =
getTargetVersion(obj);
			regObj.expressInstall =3D xiSwfUrlStr ? xiSwfUrlStr : ((xi !=3D "") ? =
xi : false);
			regObjArr[regObjArr.length] =3D regObj;
			setVisibility(objectIdStr, false);
		},
	=09
		getObjectById: function(objectIdStr) {
			var r =3D null;
			if (ua.w3cdom && isDomLoaded) {
				var o =3D getElementById(objectIdStr);
				if (o) {
					var n =3D o.getElementsByTagName(OBJECT)[0];
					if (!n || (n && typeof o.SetVariable !=3D UNDEF)) {
				    	r =3D o;
					}
					else if (typeof n.SetVariable !=3D UNDEF) {
						r =3D n;
					}
				}
			}
			return r;
		},
	=09
		embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, =
swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj) {
			if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr || !widthStr || =
!heightStr || !swfVersionStr) {
				return;
			}
			widthStr +=3D ""; // Auto-convert to string to make it idiot proof
			heightStr +=3D "";
			if (hasPlayerVersion(swfVersionStr)) {
				setVisibility(replaceElemIdStr, false);
				var att =3D (typeof attObj =3D=3D OBJECT) ? attObj : {};
				att.data =3D swfUrlStr;
				att.width =3D widthStr;
				att.height =3D heightStr;
				var par =3D (typeof parObj =3D=3D OBJECT) ? parObj : {};
				if (typeof flashvarsObj =3D=3D OBJECT) {
					for (var i in flashvarsObj) {
						if (flashvarsObj[i] !=3D Object.prototype[i]) { // Filter out =
prototype additions from other potential libraries
							if (typeof par.flashvars !=3D UNDEF) {
								par.flashvars +=3D "&" + i + "=3D" + flashvarsObj[i];
							}
							else {
								par.flashvars =3D i + "=3D" + flashvarsObj[i];
							}
						}
					}
				}
				addDomLoadEvent(function() {
					createSWF(att, par, replaceElemIdStr);
					if (att.id =3D=3D replaceElemIdStr) {
						setVisibility(replaceElemIdStr, true);
					}
				});
			}
			else if (xiSwfUrlStr && !isExpressInstallActive && =
hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
				setVisibility(replaceElemIdStr, false);
				addDomLoadEvent(function() {
					var regObj =3D {};
					regObj.id =3D regObj.altContentId =3D replaceElemIdStr;
					regObj.width =3D widthStr;
					regObj.height =3D heightStr;
					regObj.expressInstall =3D xiSwfUrlStr;
					showExpressInstall(regObj);
				});
			}
		},
	=09
		getFlashPlayerVersion: function() {
			return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
		},
	=09
		hasFlashPlayerVersion:hasPlayerVersion,
	=09
		createSWF: function(attObj, parObj, replaceElemIdStr) {
			if (ua.w3cdom && isDomLoaded) {
				return createSWF(attObj, parObj, replaceElemIdStr);
			}
			else {
				return undefined;
			}
		},
	=09
		createCSS: function(sel, decl) {
			if (ua.w3cdom) {
				createCSS(sel, decl);
			}
		},
	=09
		addDomLoadEvent:addDomLoadEvent,
	=09
		addLoadEvent:addLoadEvent,
	=09
		getQueryParamValue: function(param) {
			var q =3D doc.location.search || doc.location.hash;
			if (param =3D=3D null) {
				return q;
			}
		 	if(q) {
				var pairs =3D q.substring(1).split("&");
				for (var i =3D 0; i < pairs.length; i++) {
					if (pairs[i].substring(0, pairs[i].indexOf("=3D")) =3D=3D param) {
						return pairs[i].substring((pairs[i].indexOf("=3D") + 1));
					}
				}
			}
			return "";
		},
	=09
		// For internal usage only
		expressInstallCallback: function() {
			if (isExpressInstallActive && storedAltContent) {
				var obj =3D getElementById(EXPRESS_INSTALL_ID);
				if (obj) {
					obj.parentNode.replaceChild(storedAltContent, obj);
					if (storedAltContentId) {
						setVisibility(storedAltContentId, true);
						if (ua.ie && ua.win) {
							storedAltContent.style.display =3D "block";
						}
					}
					storedAltContent =3D null;
					storedAltContentId =3D null;
					isExpressInstallActive =3D false;
				}
			}=20
		}
	=09
	};

}();

------=_NextPart_000_0033_01CBBC8C.E2776570--
