From: <Saved by Windows Internet Explorer 7>
Subject: When disaster looms - Science
Date: Tue, 27 Mar 2007 16:19:40 -0400
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01C7708B.B87997D0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.www.thevarsity.ca/media/storage/paper285/news/2007/03/26/Science/When-Disaster.Looms-2791719.shtml

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>When disaster =
looms - Science</TITLE>
<SCRIPT language=3DJavascript>=0A=
				var story_id =3D 2791719;=0A=
				</SCRIPT>

<META content=3D"When disaster looms, " name=3Ddescription>
<META content=3D"When disaster looms, " name=3Dkeywords>
<SCRIPT language=3DJAVASCRIPT>=0A=
				var sectionname =3D 'Science';=0A=
				var sectioncategory =3D 'Other';=0A=
				var isectioncategoryid =3D '8,';=0A=
				</SCRIPT>

<META http-equiv=3Dcontent-type content=3D"text/html; charset=3Dutf-8">
<SCRIPT type=3Dtext/javascript>
/* <![CDATA[ */
var admanagerIsAvailable=3D0;
var clientBannersAvailable=3D0;
var bAdmanagerClientAlive=3D0;
var bAdmanagerNetworkAlive=3D0;
var bAdVariantBanners =3D 0;
var origserver =3D  window.document.location.host.toString();
if (typeof sectioncategory=3D=3D"undefined"){
var sectioncategory =3D '';}
if (typeof story_id=3D=3D"undefined"){
var story_id =3D '';
}
/* ]]> */
</SCRIPT>

<SCRIPT type=3Dtext/javascript>
/* <![CDATA[ */
document.write('<SCR'+'IPT =
SRC=3D'+'http://media.collegepublisher.com/media/scripts/commonFunctions.=
js?2>'+'</SCR'+'IPT>');
/* ]]> */
</SCRIPT>

<SCRIPT=20
src=3D"http://media.collegepublisher.com/media/scripts/coda/mtvi_reportin=
g.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT type=3Dtext/javascript>
//<![CDATA[
	function getPageName(){
		var defaultPageName =3D "index.cfm"
		return (location.pathname=3D=3D"" || =
location.pathname=3D=3D"/")?"/"+defaultPageName:location.pathname;
 	}
	function getHierarchy(argPageName){
		return =
(argPageName.charAt(0)=3D=3D"/")?argPageName.substring(1):argPageName;
	}
	var qString =3D com.mtvi.util.queryStringToHash(location.search);
	var refsource =3D =
(com.mtvi.util.isDefined(qString))?qString["refsource"]:"";
	var reffeature =3D =
(com.mtvi.util.isDefined(qString))?qString["reffeature"]:"";
	if(refsource !=3D null && refsource.length > 0) {
		SetCookie('refsourcekey', refsource);
	}
	// Reporting Account Config
	com.mtvi.reporting.Account=3D{
		name:"viay2m",
		filters: "javascript:,y2m.com"
	};
	var dispatcher=3Dcom.mtvi.reporting.Dispatcher;
	dispatcher.setAttribute('pageName',getPageName());
	dispatcher.setAttribute('hier1',getHierarchy(getPageName()));=20
	dispatcher.setAttribute('prop1','splitPage');
	dispatcher.setAttribute('prop2',sectioncategory);
	=
dispatcher.setAttribute('prop3','event=3DsplitPage&objectDisplayMode=3D2'=
);
	dispatcher.setAttribute('prop4',refsource);
	=
dispatcher.setAttribute('prop5',window.document.location.pathname.toStrin=
g() + window.document.location.search.toString());
	dispatcher.setAttribute('prop6',origserver);
	dispatcher.setAttribute('prop7','The Varsity');
	dispatcher.setAttribute('prop8','www.thevarsity.ca');
	dispatcher.setAttribute('prop9',story_id);
	dispatcher.setAttribute('prop10','285');
	dispatcher.setAttribute('prop11','home');
	dispatcher.setAttribute('prop12',GetCookie('refsourcekey'));
	dispatcher.setAttribute('prop13',reffeature);
	dispatcher.sendCall();
	//]]>
</SCRIPT>
<LINK media=3Dscreen=20
href=3D"http://media.collegepublisher.com/media/css/global.css?v43" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK title=3D"1024 x 768"=20
href=3D"http://media.collegepublisher.com/media/css/features_1024.css?v1"=
=20
type=3Dtext/css rel=3D"alternate stylesheet"><LINK media=3Dscreen=20
href=3D"http://media.collegepublisher.com/media/css/popup_new.css?v12"=20
type=3Dtext/css rel=3Dstylesheet><LINK media=3Dprint=20
href=3D"http://media.collegepublisher.com/media/css/print.css?v1" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK media=3Dscreen=20
href=3D"http://www.thevarsity.ca/media/paper285/styles.css?v13" =
type=3Dtext/css=20
rel=3Dstylesheet><LINK title=3D"RSS feed for The Varsity"=20
href=3D"http://www.thevarsity.ca/articles.rss" =
type=3Dapplication/rss+xml=20
rel=3Dalternate><!-- Some "Web 2.0" Resources. -->
<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/prototype.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/global.js?14"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/network_channel.js=
"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/event_listener.js"=
=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/resolution.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/scriptaculous.js" =

type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/window.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/youarehere.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/spry/xpath.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/spry/SpryData.js" =

type=3Dtext/javascript></SCRIPT>

<SCRIPT =
src=3D"http://media.collegepublisher.com/media/scripts/contentslider.js?1=
"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"http://media.collegepublisher.com/media/scripts/ufo.js?1" =

type=3Dtext/javascript></SCRIPT>

<META http-equiv=3Dpragma content=3Dno-cache>
<META http-equiv=3Dexpires content=3D-1>
<META content=3Dall name=3Drobots>
<META content=3D"7 Days" name=3Drevisit-after>
<META content=3Dtrue name=3DMSSmartTagsPreventParsing>
<META content=3D"The Staff of The Varsity" name=3Dauthor>
<META content=3D"The Varsity, a college media publication." =
name=3Ddescription>
<META content=3D"The Varsity, newspaper, college media, student media"=20
name=3Dkeywords>
<META content=3D"Copyright 2007 The Varsity." name=3Dcopyright>
<SCRIPT type=3Dtext/javascript>
/* <![CDATA[ */
var currentissuedate=3D'03/26/07';
var currentissuedayname=3D'Monday';
var currentissuemonthname=3D'March';
var currentissueday=3D'26';
var currentissuemonth=3D'3';
var currentissueyear=3D'2007';
var basehref=3D'http://www.thevarsity.ca/';
var paper_id=3D'285';
var paperzip=3D'00000';
var paper_name=3D'The Varsity';
var paper_domain=3D'www.thevarsity.ca';



var dart_paper_name =3D 'UniversityofToronto_285';

var dart_primary_section =3D sectioncategory =3D=3D''? 'home' : =
sectioncategory.toLowerCase();

var dart_ord =3D Math.random() * 10000000000000000;
var dart_tileNumber =3D 1;
dart_primary_section =3D =
dart_primary_section.replace(/^(\d.+?)$/,"_$1");
dart_primary_section =3D dart_primary_section.replace(/\s{1,}/g,"");
dart_primary_section =3D dart_primary_section.replace(/\/{1,}/g,"");


var =
slideshowpath=3D'http://www.thevarsity.ca/home/index.cfm?event=3DdisplayS=
lideShow&islides=3D';

// from query.
var aSectionNames =3D new Array();
var aSectionLinks =3D new Array();
aSectionNames[0] =3D 'Arts and Entertainment';
aSectionLinks[0]=3D'/news/2007/03/26/ArtsAndEntertainment/';
aSectionNames[1] =3D 'Comment';
aSectionLinks[1]=3D'/news/2007/03/26/Comment/';
aSectionNames[2] =3D 'News';
aSectionLinks[2]=3D'/news/2007/03/26/News/';
aSectionNames[3] =3D 'Science';
aSectionLinks[3]=3D'/news/2007/03/26/Science/';
aSectionNames[4] =3D 'Sports';
aSectionLinks[4]=3D'/news/2007/03/26/Sports/';

/* ]]> */
</SCRIPT>

<SCRIPT type=3Dtext/javascript>
/* <![CDATA[ */
pcdateobject=3Dnew Date();
pcrandom=3Dpcdateobject.getTime();
var section_id =3D '';
if (typeof section_name=3D=3D"undefined"){
var section_name =3D '';}
if (typeof isectioncategoryid=3D=3D"undefined"){
var isectioncategoryid =3D ',';}
if (section_name !=3D '') {
  for (i=3D0;i<aSectionNames.length;i++) {
    if (aSectionNames[i].toLowerCase() =3D=3D section_name) {
      section_id =3D aSectionLinks[i].replace(/^sections\/(\d+)\.html$/, =
'$1')
    }
  }
}

var result =3D document.location.href.match(/mkey(=3D|\/|%3D)(-9+)/);
if (result && result[1]) {
	var mkey =3D result[1];
	var nextyear=3Dnew Date();
	nextyear.setFullYear(nextyear.getFullYear() + 20);
	var cookieDomain=3D'www.thevarsity.ca';
	cookieDomain =3D cookieDomain.replace(/^www\./,"");
	cookieDomain =3D cookieDomain.replace(/^media.www\./,"");
	SetCookie('HASREGISTEREDORLOGGEDIN', mkey, nextyear, '/', =
cookieDomain);
}
document.write('<SCR'+'IPT =
SRC=3D'+'http://media.collegepublisher.com/media/admanagerStatus/isAdmana=
gerAlive.js?1>'+'</SCR'+'IPT>');
/* ]]> */
</SCRIPT>

<SCRIPT type=3Dtext/javascript>
/* <![CDATA[ */

var loggedIn=3D0;


var cpbppriv=3D0;

if (cpbppriv < 2) {
	if (document.cookie.indexOf("HASREGISTEREDORLOGGEDIN=3D") > -1) {
	  uid=3DGetCookie('HASREGISTEREDORLOGGEDIN');
	} else {
	  uid=3D'';
	}
	var myimageobject =3D new Image();
	=
myimageobject.src=3D"http://stats.broadbandpublisher.com/pageCounter.adp?=
iPaper_id=3D285&random=3D" + pcrandom + "&uid=3D" + uid;
}


if (GetCookie('activeSession') =3D=3D null) {
	SetCookie('activeSession', '1');
	var myimageobject2=3Dnew Image();
	=
myimageobject2.src=3D"http://stats.broadbandpublisher.com/pageCounter.adp=
?iPaper_id=3D285&random=3D" + pcrandom + '&isnewsession=3D1';
}


if (bAdmanagerClientAlive) {
	document.write('<SCR'+'IPT =
SRC=3D'+'http://localads.collegepublisher.com/jsc/285/local.js>'+'</SCR'+=
'IPT>');
=09
}




	if (bAdmanagerNetworkAlive) {
		document.write('<SCR'+'IPT =
SRC=3D'+'http://admanager3.collegepublisher.com/runtime/javascriptcache/n=
ational/285/national.js>'+'</SCR'+'IPT>');
	=09
	}




	=09



//  bigurl =3D basehref + =
"user/index.cfm?event=3Dpopupregistrationbox&amp;thereferer=3D" + =
escape(document.location) + "&amp;paperid=3D" + paper_id + =
"&amp;paper=3D" + escape(paper_name) + "&amp;domain=3D" + =
escape(paper_domain) + '&amp;verifytab=3D1';
  	// If this person has never registered or logged in, set the user's =
userid to -1 and their click count to 1.
		// the cookie's domain should be the same whether this page is served =
live, or from MirrorImage
		var cookieDomain =3D window.location.hostname;
		cookieDomain =3D cookieDomain.replace(/^www\./,"");
		cookieDomain =3D cookieDomain.replace(/^media.www\./,"");
	  if (document.cookie.indexOf("HASREGISTEREDORLOGGEDIN") =3D=3D -1) {
		  req =3D =
/(news\/\d+\.html|event[=3D\/]displayArticle|news\/\d{4}\/\d{2}\/\d{2}\/.=
+\/.*\.shtml)/i;
		  ex =3D /user/i;
		  curclicks =3D GetCookie('CLICKS');
		if (curclicks =3D=3D null)
			curclicks =3D 0;
		if (req.test(document.URL) && !ex.test(document.URL))
		  SetCookie('CLICKS',  1*curclicks+1, null, '/', cookieDomain);
		if (curclicks >=3D 2 && req.test(document.URL) && =
!ex.test(document.URL)) {
    		document.location.href =3D basehref + =
'user/index.cfm?event=3Ddisplayregistrationprompt&requiredregistration=3D=
1&thereferer=3D' + escape(document.location);  =20
		}
	}

/* ]]> */
</SCRIPT>

<META content=3D"MSHTML 6.00.6000.16414" name=3DGENERATOR></HEAD>
<BODY>
<DIV id=3Dnet_bar>
<DIV id=3Dnet_cp>
<UL id=3Dnet_cp_nav>
  <LI id=3Dnet_cp_a><A title=3D"College Publisher Network"=20
  href=3D"javascript:showhide_links();">College Publisher Network</A> =
</LI></UL>
<UL class=3Dhide id=3Dnet_cp_nav_list>
  <LI><A title=3D"Join the College Publisher Network"=20
  href=3D"http://cpsite.collegepublisher.com/join/index.html" =
target=3D_parent>Join=20
  the College Publisher Network</A> </LI>
  <LI><A title=3D"Advertise Across the Network"=20
  href=3D"http://www.mtvu.com/about/advertising/" =
target=3D_parent>Advertise Across=20
  the Network</A> </LI>
  <LI><A title=3D"View the entire list of College Publisher Network =
Affiliates"=20
  href=3D"http://www.thevarsity.ca/channel/network" =
target=3D_parent>View Network=20
  Affiliates</A> </LI></UL></DIV>
<DIV id=3Dnet_search>
<FORM id=3Dcpsearch name=3Dcpsearch action=3D/home/index.cfm =
method=3Dget=20
target=3D_parent>
<FIELDSET><INPUT id=3Dnet_search_input name=3Dq> <INPUT id=3Dev =
type=3Dhidden=20
value=3DdisplaySearchResults name=3Devent> <INPUT id=3Dbp type=3Dhidden =
value=3D1=20
name=3DbuttonPushed> <INPUT id=3Dclient type=3Dhidden =
value=3Dtesting-testing=20
name=3Dclient> <INPUT id=3Dforid type=3Dhidden value=3D1 name=3Dforid> =
<INPUT id=3Die=20
type=3Dhidden value=3DISO-8859-1 name=3Die> <INPUT id=3Doe type=3Dhidden =
value=3DISO-8859-1=20
name=3Doe> <INPUT id=3Dcof type=3Dhidden=20
value=3DGALT:#008000;GL:1;DIV:#666666;VLC:663399;AH:center;BGC:FFFFFF;LBG=
C:FFFFFF;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;LH:37;LW:3=
10;FORID:1;=20
name=3Dcof> <INPUT id=3Dhl type=3Dhidden value=3Den name=3Dhl>=20
<DIV id=3Dnet_search_choose>
<UL id=3Dnet_search_choose>
  <LI id=3Dnet_search_choose_link><A title=3D"Select your search method" =

  href=3D"javascript:showhide_search();">Select your search method</A> =
</LI>
  <LI id=3Dnet_search_choose_submit><A title=3DSearch=20
  href=3D"javascript:sesubmit();">Search</A> </LI></UL>
<UL class=3Dhide id=3Dnet_search_choose_options>
  <LI><INPUT id=3Dnet_search_paper onclick=3Dchange_search_this() =
tabIndex=3D2=20
  type=3Dradio CHECKED value=3Dpaper name=3Dcp1> <LABEL =
for=3Dnet_search_paper>Search=20
  This Paper</LABEL>=20
  <LI><INPUT id=3Dnet_search_google onclick=3Dchange_search_google() =
tabIndex=3D3=20
  type=3Dradio value=3Dweb name=3Dcp1> <LABEL =
for=3Dnet_search_google>Search=20
  Google</LABEL> </LI></UL></DIV><INPUT id=3Dfrombar type=3Dhidden =
value=3D1=20
name=3Dfrombar> </FIELDSET> </FORM></DIV>
<DIV id=3Dnet_channels>
<UL>
  <LI><A =
href=3D"http://media.www.thevarsity.ca/channel/collegeheadlines/"=20
  target=3D_parent>Top National College News</A> </LI>
  <LI><A href=3D"http://www.thevarsity.ca/books/" =
target=3D_parent>Books</A> </LI>
  <LI><A href=3D"http://www.thevarsity.ca/careers/" target=3D_parent>Job =
Search</A>=20
  </LI>
  <LI><A href=3D"http://www.thevarsity.ca/movies/" =
target=3D_parent>Movies</A>=20
</LI></UL></DIV>
<DIV id=3Dnet_weather><A href=3D"http://www.thevarsity.ca/home/weather/" =

target=3D_parent><IMG=20
src=3D"http://media.collegepublisher.com/media/weatherbug/weatherbugsforc=
hannelbar/00000.png"=20
border=3D0></A> </DIV><NOSCRIPT><IMG id=3Dflan_stat_img=20
src=3D"http://stats.broadbandpublisher.com/pageCounter.adp?iPaper_id=3D28=
5&amp;random=3D&amp;uid=3D"=20
border=3D0> </NOSCRIPT></DIV>
<DIV id=3Dflan_wrap>
<DIV id=3Dflan_header>
<DIV id=3Dflan_leader>
<SCRIPT language=3DJavascript>
				showNetworkBanner(11);
			</SCRIPT>
<NOSCRIPT><A=20
href=3D"http://admanager3.collegepublisher.com/runtime/noScriptClickThrou=
gh.cfm?iposition=3D11&amp;ipaper_id=3D285&amp;callingSite=3Dwww%2Ewww.the=
varsity.ca%2Ecom"=20
target=3Dnew><IMG=20
src=3D"http://admanager3.collegepublisher.com/runtime/noScriptAdImpDispla=
y.cfm?iposition=3D11&amp;ipaper_id=3D285"=20
border=3D0> </A></NOSCRIPT></DIV>
<DIV id=3Dflan_header_main>
<DIV class=3Dgutter>
<H1 id=3Dflan_logo><A class=3Dflan_header_home_link title=3D"The =
Varsity"=20
href=3D"http://www.thevarsity.ca/home/">The Varsity</A></H1>
<DIV class=3Dflan_article_clear></DIV></DIV></DIV>
<DIV id=3Dflan_header_meta>
<DIV class=3Dgutter>
<DIV id=3Dflan_meta_left>
<P>
<SCRIPT language=3DJAVASCRIPT>document.write(currentissuedayname + ', ' =
+ currentissuemonthname + ' ' + currentissueday + ', ' + =
currentissueyear);</SCRIPT>
</P></DIV>
<DIV id=3Dflan_meta_right>
<FORM id=3Dflan_header_search name=3Dflan_header_search =
action=3D/home/index.cfm=20
method=3Dget>
<FIELDSET><INPUT name=3Dq> <INPUT type=3Dsubmit value=3DSearch =
name=3Dflan_search>=20
<INPUT id=3Dev type=3Dhidden value=3DdisplaySearchResults name=3Devent> =
<INPUT id=3Dbp=20
type=3Dhidden value=3D1 name=3DbuttonPushed> <INPUT id=3Dclient =
type=3Dhidden=20
value=3Dtesting-testing name=3Dclient> <INPUT id=3Dforid type=3Dhidden =
value=3D1=20
name=3Dforid> <INPUT id=3Die type=3Dhidden value=3DISO-8859-1 name=3Die> =
<INPUT id=3Doe=20
type=3Dhidden value=3DISO-8859-1 name=3Doe> <INPUT id=3Dcof =
type=3Dhidden=20
value=3DGALT:#008000;GL:1;DIV:#666666;VLC:663399;AH:center;BGC:FFFFFF;LBG=
C:FFFFFF;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;LH:37;LW:3=
10;FORID:1;=20
name=3Dcof> <INPUT id=3Dhl type=3Dhidden value=3Den name=3Dhl> =
</FIELDSET>=20
</FORM></DIV></DIV></DIV></DIV>
<DIV id=3Dflan_body>
<DIV id=3Dflan_body_wrap>
<DIV id=3Dflan_content>
<DIV class=3Dgutter>
<SCRIPT language=3DJAVASCRIPT>
  if (GetCookie('CANSEELOGINBAR') =3D=3D 1) {
	document.write('<div id=3Dloggedin_controlbar><table width=3D100% =
cellspacing=3D0 cellpadding=3D0 border=3D0 id=3Dloggedin_bar>');
	document.write('<tr>');
	document.write('<td valign=3Dmiddle align=3Dleft>');
	document.write('<img src=3D/home/images/face.gif>');
	document.write('Welcome to www.thevarsity.ca</td>');
	document.write('<td align=3Dright valign=3Dmiddle>');
	document.write('<strong><a =
href=3D/user/index.cfm?event=3DeditUserPreferencesForm>MY ACCOUNT</a>'); =
=09
	document.write('&nbsp;&nbsp;&nbsp;&nbsp;<a =
href=3D/user/index.cfm?event=3DprocessLogout>LOG =
OUT</a></strong></td>');
	document.write('</tr>');
	document.write('</table></div>');
 }
</SCRIPT>

<DIV id=3Dbreadcrumb><A title=3D"Go back to front page"=20
href=3D"http://www.thevarsity.ca/home/">Home</A> &gt; <A title=3DScience =

href=3D"http://www.thevarsity.ca/news/2007/03/26/Science/">Science</A> =
</DIV>
<DIV id=3Darticle>
<H2>When disaster looms</H2>
<H3></H3>
<H4>Elvis Cela</A></H4>
<DIV id=3Dmeta><STRONG>Issue date:</STRONG> 3/26/07 =
<STRONG>Section:</STRONG> <A=20
title=3DScience=20
href=3D"http://www.thevarsity.ca/news/2007/03/26/Science/">Science</A></D=
IV>
<DIV class=3Dgoner id=3Dcp_article_top>
<UL id=3Dcp_article_top_left>
  <LI id=3Dcp_article_print><A title=3D"Print this article"=20
  =
href=3D"http://www.thevarsity.ca/home/index.cfm?event=3DdisplayArticlePri=
nterFriendly&amp;uStory_id=3D3f390409-4fa0-435e-8d55-0c8100d0b4b9">Print<=
/A>
  <LI id=3Dcp_article_email><A title=3D"Email this article"=20
  =
href=3D"http://www.thevarsity.ca/home/index.cfm?event=3DdisplayEmailArtic=
leForm&amp;uStory_id=3D3f390409-4fa0-435e-8d55-0c8100d0b4b9">Email</A>
  <SCRIPT language=3DJavascript>=0A=
document.write('<li id=3D"cp_article_more"><a href=3D"' + =
document.location.toString() + '#cp_article_tools">Article =
Tools</a></li>')=0A=
</SCRIPT>
   </LI></UL>
<UL id=3Dcp_article_top_right>
  <LI class=3Dcp_article_page>
  <DIV>Page <STRONG>1</STRONG> of 1 </DIV></LI></UL>
<DIV class=3Dcp_article_clear></DIV></DIV>
<SCRIPT language=3DJavascript>=0A=
		function goPage(newindex) {=0A=
			currentLocation =3D getThisPage();=0A=
			cleanedLocation =3D '';=0A=
			// If this is an SHTML request.=0A=
			if (currentLocation.indexOf(".shtml") > -1) {=0A=
				// Detect if this is a request that already has a page specification.=0A=
				if (currentLocation.indexOf("-page") > -1) {=0A=
					cleanedLocation =3D currentLocation.substring(0, =
currentLocation.indexOf("-page")) + '.shtml';=0A=
				} else {=0A=
					cleanedLocation =3D currentLocation;=0A=
				}=0A=
				// Only add the "-pageX" suffix when the page index is higher than 1.=0A=
				if (newindex !=3D 1) {=0A=
					cleanedLocation =3D cleanedLocation.substring(0, =
cleanedLocation.indexOf(".shtml")) + '-page' + newindex + '.shtml';=0A=
				}=0A=
			} else {=0A=
				// Only add the "-pageX" suffix when the page index is higher than 1.=0A=
				if (newindex !=3D 1) {=0A=
					cleanedLocation =3D currentLocation + '&page=3D' + newindex;=0A=
				} else {=0A=
					cleanedLocation =3D currentLocation;=0A=
				}=0A=
			}=0A=
			document.location =3D cleanedLocation;=0A=
		}=0A=
		function getThisPage() {=0A=
			currentURL =3D '' + window.document.location;=0A=
			thispageresult =3D '';=0A=
			if (currentURL.indexOf("?page=3D") > -1) {=0A=
				currentURL =3D currentURL.substring(0, =
currentURL.indexOf('?page=3D'));=0A=
				thispageresult =3D currentURL;=0A=
			} else if (currentURL.indexOf("&page=3D") > -1) {=0A=
				currentURL =3D currentURL.substring(0, =
currentURL.indexOf('&page=3D'));=0A=
				thispageresult =3D currentURL;=0A=
			} else {=0A=
				thispageresult =3D currentURL;=0A=
			}=0A=
			// Make sure the URL generated by this fuctnion is compatible with =
mirror image.=0A=
			thispageresult =3D thispageresult.substring(7, thispageresult.length);=0A=
			thispageresult =3D =
thispageresult.substring(thispageresult.indexOf('/')+1, =
thispageresult.length);=0A=
			thispageresult =3D basehref + thispageresult;=0A=
			if (thispageresult.indexOf('sourcedomain') > -1) {=0A=
				thispageresult =3D thispageresult.substring(0, =
thispageresult.indexOf('?'));=0A=
			}=0A=
			return thispageresult;=0A=
		}=0A=
		</SCRIPT>

<DIV id=3Dcp_story_text>No one likes being rear-ended by an inattentive =
driver,=20
but help may be on the way. A new study from U of T's Ergonomics in=20
Teleoperation and Control Laboratory may be able to make people react =
faster to=20
heavy braking. <BR><BR>By making vehicles appear larger than they really =
are,=20
industrial and mechanical engineers Zhonghai Li and Dr. Paul Milgram =
hope to=20
reduce or even eliminate the damage of rear-end collisions. <BR><BR>Li =
and=20
Milgram study the human factor in human-machine interactions. For his =
PhD thesis=20
under Milgram, Li (now a post-doctoral student) investigated the effects =
of=20
manipulating optical looming cues on human braking behaviour. Optical =
looming=20
cues help us perceive speed and distance, based on how large an image =
looms in=20
front of us, and guides our response. When a driver approaches a leading =
car=20
traveling at a slower speed, the image of the car on the driver's retina =
will=20
expand at an increasing rate, alerting the driver of a looming =
collision.=20
Normally, the driver instinctively hits the brakes.<BR><BR>"The study =
examined=20
the feasibility of reducing rear-end collisions by manipulating what the =
driver=20
in the following vehicle sees," said Milgram. <BR><BR>
<TABLE cellPadding=3D6 width=3D10 align=3Dcenter border=3D0>
  <TBODY>
  <TR>
    <TD align=3Dmiddle><IMG=20
      alt=3D"Driving at night often increases your chances of =
collisions. A new U of T study may reduce the number of crashes by =
making cars seem closer than they really are."=20
      =
src=3D"http://media.collegepublisher.com/media/paper285/stills/j8if9t47.j=
pg"=20
      border=3D0 name=3Dpictureposition1>
      <DIV class=3Dmediacredit>Media Credit: flickr.com</DIV>
      <DIV class=3Dcaption>Driving at night often increases your chances =
of=20
      collisions. A new U of T study may reduce the number of crashes by =
making=20
      cars seem closer than they really=20
are.</DIV></TD></TR></TBODY></TABLE><BR><BR>With the help of 40 =
participant=20
drivers, Li's study used a driving simulator under different =
conditions-for=20
example, clear, sunny conditions or stormy, night-time conditions. Since =
it is=20
impossible to physically change the size of a car should the study's =
findings be=20
applied in real life, the next best option was to change the apparent =
size of=20
the tail lights, which we also use as cues to judge distances. The study =
found=20
that an expanding triangle of taillights, whose lights spread apart and =
grow=20
larger with harder breaking and shrinks to a smaller triangle with =
lighter=20
breaking, prompted the driver to start braking earlier than normal. The =
largest=20
differences in breaking time were found under low visibility=20
conditions.<BR><BR>"If you change the separation distance of the [brake =
lights]=20
by spreading them out and making them appear bigger, they will affect =
the=20
following driver's braking," Milgram explained.<BR><BR>"The expansion of =
the=20
tail lights is imperceptible to following drivers, yet still reduces =
braking=20
time by 100-300 milliseconds" said Milgram. "That's a difference of =
several=20
metres when you're traveling at 80 km/h."<BR><BR>Time is a crucial =
factor in=20
determining the severity of a collision as even a fraction of a second =
can make=20
a substantial difference. Today's taillights do not convey any =
indication of=20
braking intensity. If drivers were aware of the intensity of braking up =
ahead,=20
they would have more time to respond, potentially preventing rear-end=20
collisions. The researchers hope to interest car manufacturers in brake =
lights=20
that can move and grow-an idea that may grow on grumpy drivers.<BR>
<DIV class=3Dcp_article_clear></DIV></DIV>
<DIV id=3Dcp_continued></DIV>
<DIV id=3Dcp_story_bot_nav>Page <STRONG>1</STRONG> of 1 </DIV>
<DIV id=3Dcp_article_tools>
<H4>Article Tools</H4>
<DIV id=3Dcp_at_content>
<DIV id=3Dcp_at_share>
<H5>Share:</H5>
<UL>
  <LI id=3Dcp_at_facebook><A=20
  onmouseover=3D"window.status=3D'Post to Facebook'; return true;"=20
  href=3D"javascript:var =
d=3Ddocument,f=3D'http://www.facebook.com/share',l=3Dd.location,e=3Dencod=
eURIComponent,p=3D'.php?src=3Dbm&amp;v=3D4&amp;i=3D1162578701&amp;u=3D'+e=
(l.href+'&amp;sourcedomain=3D'+paper_domain+'&amp;facebook')+'&amp;t=3D'+=
e(d.title);try{if(!/^(.*\.)?facebook\.[^.]*$/.test(l.host))throw(0);share=
_internal_bookmarklet(p)}catch(z){a=3Dfunction(){if(!window.open(f+'r'+p,=
'sharer','toolbar=3D0,status=3D0,resizable=3D0,width=3D626,height=3D436')=
)l.href=3Df+p};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);els=
e{a()}}void(0)">Facebook</A>=20

  <LI id=3Dcp_at_blog><A=20
  onmouseover=3D"window.status=3D'Post to Blogger'; return true;"=20
  =
href=3D"javascript:popw=3D'';Q=3D'';x=3Ddocument;y=3Dwindow;if(x.selectio=
n)%20{Q=3Dx.selection.createRange().text;}%20else%20if%20(y.getSelection)=
%20{Q=3Dy.getSelection();}%20else%20if%20(x.getSelection)%20{Q=3Dx.getSel=
ection();}popw%20=3D%20y.open('http://www.blogger.com/blog_this.pyra?t=3D=
'%20+%20escape(Q)%20+%20'&amp;u=3D'%20+%20escape(location.href)%20+%20'&a=
mp;n=3D'%20+%20escape(document.title),'bloggerForm','scrollbars=3Dno,widt=
h=3D475,height=3D300,top=3D175,left=3D75,status=3Dyes,resizable=3Dyes');i=
f%20(!document.all)%20T%20=3D%20setTimeout('popw.focus()',50);void(0);">B=
logger</A>=20

  <LI id=3Dcp_at_deli><A=20
  onmouseover=3D"window.status=3D'Post to del.icio.us'; return true;"=20
  =
href=3D"javascript:window.document.location=3D'http://del.icio.us/post?ur=
l=3D'+escape(document.location.toString());">del.icio.us</A>=20

  <LI id=3Dcp_at_digg><A onmouseover=3D"window.status=3D'Post to digg'; =
return true;"=20
  =
href=3D"javascript:window.document.location=3D'http://digg.com/submit?pha=
se=3D2&amp;url=3D'+escape(document.location.toString());">digg</A>=20

  <LI id=3Dcp_at_news><A=20
  onmouseover=3D"window.status=3D'Seed to newsvine'; return true;"=20
  =
href=3D"javascript:window.document.location=3D'http://www.newsvine.com/_t=
ools/seed&amp;save?u=3D'+escape(document.location.toString());">newsvine<=
/A>=20
  </LI></UL></DIV>
<DIV id=3Dcp_at_rss>
<H5>Subscribe:</H5>
<UL>
  <LI id=3Dcp_at_yaho><A=20
  onmouseover=3D"window.status=3D'Post to My Yahoo'; return true;"=20
  =
href=3D"javascript:window.document.location=3D'http://add.my.yahoo.com/rs=
s?url=3Dhttp://www.thevarsity.ca/articles.rss';"=20
  target=3D_blank>My Yahoo!</A>=20
  <LI id=3Dcp_at_goog><A=20
  onmouseover=3D"window.status=3D'Post to Google Home Page'; return =
true;"=20
  =
href=3D"javascript:window.document.location=3D'http://fusion.google.com/a=
dd?feedurl=3Dhttp://www.thevarsity.ca/articles.rss';"=20
  target=3D_blank>Google</A> </LI></UL></DIV></DIV></DIV>
<SCRIPT language=3DJavascript>=0A=
strycountimg =3D new Image();=0A=
strycountimg.src=3D"http://admanager2.broadbandpublisher.com/storyImage.a=
dp?iStory_ID=3D2791719&cb=3D"+pcrandom;=0A=
</SCRIPT>
<NOSCRIPT><IMG height=3D1=20
src=3D"http://admanager2.broadbandpublisher.com/storyImage.adp?iStory_ID=3D=
2791719"=20
width=3D1> </NOSCRIPT></DIV>
<DIV id=3Drelated_stories>
<UL></UL></DIV>
<DIV id=3Dcomments>
<P></P>
<SCRIPT language=3DJavascript>=0A=
Effect.OpenUp =3D function(element) {=0A=
     element =3D $(element);=0A=
     new Effect.BlindDown(element, arguments[1] || {});=0A=
}=0A=
Effect.CloseDown =3D function(element) {=0A=
     element =3D $(element);=0A=
     new Effect.BlindUp(element, arguments[1] || {});=0A=
}=0A=
function toggleNotifyOption(ecb) {=0A=
	if (GetCookie('ISLOGGEDIN') =3D=3D 0 || GetCookie('ISLOGGEDIN') =3D=3D =
null) {=0A=
		if (!ecb.checked) {=0A=
			Effect.CloseDown('notloggedinlabel', {duration: .1});=0A=
		} else {=0A=
			Effect.OpenUp('notloggedinlabel', {duration: .1});=0A=
		}=0A=
	}=0A=
}=0A=
</SCRIPT>

<DIV id=3Dpostform name=3D"postform"></DIV>
<H2>Be the first to comment on this story</H2>
<FORM name=3DcommentForm onsubmit=3Dthis.submitbutton.disabled=3Dtrue;=20
action=3D/home/index.cfm?event=3DsaveArticleComment method=3Dpost>
<DIV class=3Dgraybox>
<DIV class=3Dpost_comment_text>
<DIV class=3Dcp_form>
<UL class=3Dcp_clear>
  <LI><LABEL>Name: (required) </LABEL><INPUT class=3Dcp_text_input =
maxLength=3D75=20
  name=3DvchReaderName>=20
  <LI><LABEL>Email: (required)</LABEL> <INPUT class=3Dcp_text_input =
maxLength=3D255=20
  name=3DvchReaderEmail>=20
  <LI style=3D"PADDING-LEFT: 135px; FONT-SIZE: 0.9em; COLOR: #666">NOTE: =
Email=20
  address will not be published=20
  <LI><LABEL>Website: </LABEL><INPUT class=3Dcp_text_input =
maxLength=3D255=20
  name=3DvchReaderWebsite> </LI></UL></DIV>
<P class=3Dcp_check><INPUT id=3DbNotify =
onclick=3DtoggleNotifyOption(this);=20
type=3Dcheckbox value=3D1 name=3DbNotify> <LABEL for=3DbNotify>Notify me =
of followup=20
comments via e-mail</LABEL></P>
<DIV class=3Dcp_alert id=3Dnotloggedinlabel style=3D"DISPLAY: none">
<DIV align=3Dcenter><IMG alt=3D"Email notify doesn't work unless you are =
logged in."=20
src=3D"http://www.thevarsity.ca/media/assets/icons/alert.gif" =
align=3DabsMiddle>=20
Email notify will not work because you are not currently logged =
in.<BR><A=20
style=3D"TEXT-DECORATION: underline"=20
href=3D"http://www.thevarsity.ca/user/index.cfm?event=3DdisplayLogin&amp;=
successURL=3D%252Fhome%252Findex%252Ecfm%253Fevent%253DdisplayArticle%252=
6ustory%255Fid%253D3f390409%252D4fa0%252D435e%252D8d55%252D0c8100d0b4b9%2=
523postform">Click=20
here to quickly login or create a free account.</A></DIV></DIV>
<P>Type your comment below (html not allowed)</P>
<P><TEXTAREA class=3Dliquid name=3Dmessage_body rows=3D10 =
wrap=3Dvirtual></TEXTAREA></P>
<P><INPUT id=3DbNoSpamPolicy type=3Dcheckbox value=3D1 =
name=3DbNoSpamPolicy> &nbsp;=20
<STRONG><LABEL for=3DbNoSpamPolicy>I am not posting =
spam.</LABEL></STRONG> I=20
understand posting spam or other comments that are unrelated to this =
article=20
will cause my comment to be flagged for deletion and possibly cause my =
IP=20
address to be permanently banned from this server.</P></DIV></DIV>
<DIV class=3Dpost_comment_button><INPUT type=3Dsubmit value=3DPost =
name=3Dsubmitbutton>=20
</DIV><INPUT type=3Dhidden value=3D1 name=3DbuttonPushed> <INPUT =
type=3Dhidden=20
value=3D3f390409-4fa0-435e-8d55-0c8100d0b4b9 name=3Dustory_id> <INPUT =
type=3Dhidden=20
name=3Dparent_comment_id> <INPUT type=3Dhidden=20
value=3D/home/index.cfm?event=3DdisplayArticle&amp;ustory_id=3D3f390409-4=
fa0-435e-8d55-0c8100d0b4b9=20
name=3DstoryURL> </FORM></DIV>
<DIV class=3Dcp_banner_client id=3Dbanner_client_4>
<SCRIPT language=3DJAVASCRIPT>
	if (clientBannersAvailable =3D=3D 1) {
		showClientBanner(4);
	}
	</SCRIPT>
<NOSCRIPT><CFOUTPUT><A=20
href=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/clientC=
lickThrough.adp?iPosition=3D4&amp;iPaper_id=3D285&amp;javascriptIncludeMo=
de=3D0&amp;callingSite=3Dwww%2Ethevarsity%2Eca"=20
target=3Dnew><IMG=20
src=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/showAban=
ner.adp?vchSerialNumber=3D76680e2z33&amp;iSection_Id=3D&amp;iStory_Id=3D&=
amp;iPaper_Id=3D285&amp;javascriptIncludeMode=3D0&amp;iPosition=3D4"=20
border=3D0></A></CFOUTPUT> </NOSCRIPT></DIV>
<DIV class=3Dcp_banner_client id=3Dbanner_client_5>
<SCRIPT language=3DJAVASCRIPT>
	if (clientBannersAvailable =3D=3D 1) {
		showClientBanner(5);
	}
	</SCRIPT>
<NOSCRIPT><CFOUTPUT><A=20
href=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/clientC=
lickThrough.adp?iPosition=3D5&amp;iPaper_id=3D285&amp;javascriptIncludeMo=
de=3D0&amp;callingSite=3Dwww%2Ethevarsity%2Eca"=20
target=3Dnew><IMG=20
src=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/showAban=
ner.adp?vchSerialNumber=3D76680e2z33&amp;iSection_Id=3D&amp;iStory_Id=3D&=
amp;iPaper_Id=3D285&amp;javascriptIncludeMode=3D0&amp;iPosition=3D5"=20
border=3D0></A></CFOUTPUT> </NOSCRIPT></DIV>
<DIV id=3Dobject2971>
<DIV class=3Dcpfooter align=3Dcenter><A=20
href=3D"http://www.mtvu.com/about/advertising/" target=3D_blank>National =
College=20
Advertising and Marketing</A><BR><A=20
href=3D"http://www.thevarsity.ca/user/privacypolicy/">Privacy Policy</A> =
&nbsp;=20
&nbsp; <A href=3D"http://www.thevarsity.ca/syndication">Article =
Syndication</A>=20
&nbsp; &nbsp; <A href=3D"http://www.thevarsity.ca/user/rssterms" =
target=3D_blank>RSS=20
Terms of Use</A> </DIV></DIV></DIV></DIV>
<DIV id=3Dflan_ads>
<DIV class=3Dgutters>
<SCRIPT language=3DJavascript type=3Dtext/javascript>
	           // Pass in a number and this will return a random number =
between 0 and the whole integer you pass.
	           // This is useful for picking a random entry on an array.
	           function randomIndexNew(topRange) {
	               return Math.round(Math.random()*topRange);
	           }
	           aPools =3D new Array();
	           aTagsInSharedSpace =3D [13,14,15,16];
	           for (j=3D0;j<aTagsInSharedSpace.length;j++) {
	               for (i=3D0;i<getAdsInTag(aTagsInSharedSpace[j]);i++) {
	                   aPools[aPools.length] =3D aTagsInSharedSpace[j];
	               }
	           }
	           adTagToCall =3D aPools[randomIndexNew(aPools.length-1)];
	           switch(adTagToCall) {  =20
	               case 13:
	                   tagnum =3D adTagToCall;
	                   tagdivid =3D 'box_300_250';
	                   break;
	               case 14:
	                   tagnum =3D adTagToCall;
	                   tagdivid =3D 'box_120_600';
	                   break;
	               case 15:
	                   tagnum =3D adTagToCall;
	                   tagdivid =3D 'box_160_600';
	                   break;
	               case 16:
	                   tagnum =3D adTagToCall;
	                   tagdivid =3D 'box_120_240';
	                   break;
	               default:
	                   tagnum =3D '';
	                   tagdivid =3D '';
	                   break;
	           }
	           if (tagdivid !=3D '') {
=09
	               document.write('<div id=3D"' + tagdivid + '" =
class=3D"box">');
	               document.write('    <div class=3D"banner">');
	               document.write('        <scr' + 'ipt language=3D"Javasc' =
+ 'ript">');
	               document.write('            =
showNetworkBanner('+tagnum+');');
	               document.write('        <\/sc' + 'ript>');
	               document.write('    <\/div>');
=09
			   			if (tagdivid !=3D 'box_300_250') {
							document.write('    <div>');
		           			document.write('    <\/div>');
			   			}
				=09
					document.write('<\/div>');
				=09
				}
</SCRIPT>

<SCRIPT language=3DJavascript type=3Dtext/javascript>
	document.write('<scr'+'ipt =
src=3Dhttp://media.collegepublisher.com/media/paper' + paper_id + =
'/template/betapopularstories.js><\/scr'+'ipt>');
</SCRIPT>

<DIV class=3Dcontent>
<H4>Poll</H4>
<FORM name=3Dvoteform action=3D/poll/index.cfm?event=3DcastVote =
method=3Dpost>
<DIV class=3Dpollquestionstyle>A federal election may be around the =
corner. Is=20
that a good thing?</DIV>
<DIV id=3Dpoll_answers>
<DIV><INPUT id=3Dpoll_answer_93387 type=3Dradio value=3D93387 =
name=3Dpoll_answer_id>=20
<LABEL for=3Dpoll_answer_93387>Yes: time to get rid of Harper and give =
Dion (or=20
Layton?) a chance</LABEL> </DIV>
<DIV class=3Dpoll_even><INPUT id=3Dpoll_answer_93388 type=3Dradio =
value=3D93388=20
name=3Dpoll_answer_id> <LABEL for=3Dpoll_answer_93388>No: the =
Conservatives deserve=20
more time to prove themselves</LABEL> </DIV>
<DIV><INPUT id=3Dpoll_answer_93389 type=3Dradio value=3D93389 =
name=3Dpoll_answer_id>=20
<LABEL for=3Dpoll_answer_93389>Apathetic: it'll be the same old story no =
matter=20
who is in office</LABEL> </DIV></DIV><A class=3Dfaux_button=20
href=3D"javascript:document.voteform.submit();">Submit Vote</A>=20
<P id=3Dview_results><A=20
href=3D"http://www.thevarsity.ca/poll/index.cfm?event=3DdisplayPollResult=
s">View=20
Results</A></P></FORM></DIV>
<DIV class=3Dcp_banner_client id=3Dbanner_client_2>
<SCRIPT language=3DJAVASCRIPT>
	if (clientBannersAvailable =3D=3D 1) {
		showClientBanner(2);
	}
	</SCRIPT>
<NOSCRIPT><CFOUTPUT><A=20
href=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/clientC=
lickThrough.adp?iPosition=3D2&amp;iPaper_id=3D285&amp;javascriptIncludeMo=
de=3D0&amp;callingSite=3Dwww%2Ethevarsity%2Eca"=20
target=3Dnew><IMG=20
src=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/showAban=
ner.adp?vchSerialNumber=3D76680e2z33&amp;iSection_Id=3D&amp;iStory_Id=3D&=
amp;iPaper_Id=3D285&amp;javascriptIncludeMode=3D0&amp;iPosition=3D2"=20
border=3D0></A></CFOUTPUT> </NOSCRIPT></DIV>
<DIV class=3Dcp_banner_client id=3Dbanner_client_3>
<SCRIPT language=3DJAVASCRIPT>
	if (clientBannersAvailable =3D=3D 1) {
		showClientBanner(3);
	}
	</SCRIPT>
<NOSCRIPT><CFOUTPUT><A=20
href=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/clientC=
lickThrough.adp?iPosition=3D3&amp;iPaper_id=3D285&amp;javascriptIncludeMo=
de=3D0&amp;callingSite=3Dwww%2Ethevarsity%2Eca"=20
target=3Dnew><IMG=20
src=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/showAban=
ner.adp?vchSerialNumber=3D76680e2z33&amp;iSection_Id=3D&amp;iStory_Id=3D&=
amp;iPaper_Id=3D285&amp;javascriptIncludeMode=3D0&amp;iPosition=3D3"=20
border=3D0></A></CFOUTPUT> </NOSCRIPT></DIV>
<DIV class=3Dcontent_300>
<SCRIPT language=3DJavascript>
		showNetworkBanner(12);
	</SCRIPT>
<NOSCRIPT><A=20
href=3D"http://admanager3.collegepublisher.com/runtime/noScriptClickThrou=
gh.cfm?iposition=3D2&amp;ipaper_id=3D285&amp;callingSite=3Dwww.thevarsity=
.ca"=20
target=3Dnew><IMG=20
src=3D"http://admanager3.collegepublisher.com/runtime/noScriptAdImpDispla=
y.cfm?iposition=3D2&amp;ipaper_id=3D285"=20
border=3D0> </A></NOSCRIPT></DIV></DIV></DIV></DIV>
<DIV id=3Dflan_nav>
<DIV class=3Dgutter>
<H4>Sections</H4>
<UL id=3Dflan_sections>
  <LI><A title=3D"The Varsity Front Page"=20
  href=3D"http://www.thevarsity.ca/home">Front Page</A>=20
  <LI><A title=3D"The Varsity Arts and Entertainment Section"=20
  =
href=3D"http://www.thevarsity.ca/news/2007/03/26/ArtsAndEntertainment/">A=
rts and=20
  Entertainment</A>=20
  <LI><A title=3D"The Varsity Comment Section"=20
  href=3D"http://www.thevarsity.ca/news/2007/03/26/Comment/">Comment</A> =

  <LI><A title=3D"The Varsity News Section"=20
  href=3D"http://www.thevarsity.ca/news/2007/03/26/News/">News</A>=20
  <LI><A title=3D"The Varsity Science Section"=20
  href=3D"http://www.thevarsity.ca/news/2007/03/26/Science/">Science</A> =

  <LI><A title=3D"The Varsity Sports Section"=20
  href=3D"http://www.thevarsity.ca/news/2007/03/26/Sports/">Sports</A> =
</LI></UL>
<UL>
  <LI><A href=3D"http://www.thevarsity.ca/archive/">Archive</A> =
</LI></UL>
<H4>Options</H4>
<UL>
  <LI><A title=3DRegister =
href=3D"http://www.thevarsity.ca/register/">Register</A>=20
  <LI><A title=3Dlogin =
href=3D"http://www.thevarsity.ca/login/">Login</A>=20
  <LI><A href=3D"http://www.thevarsity.ca/generalinfo">About Us</A>=20
  <LI><A href=3D"http://www.thevarsity.ca/forums">Message Board</A>=20
  <LI><A href=3D"http://www.thevarsity.ca/calendar">Events Calendar</A>=20
  <LI><A href=3D"http://www.thevarsity.ca/lettertoeditor">Letter to the =
Editor</A>=20

  <LI><A href=3D"http://www.thevarsity.ca/classifieds">Classifieds</A>=20
  <LI><A href=3D"http://www.thevarsity.ca/archives">Back Issues</A>=20
  <LI><A href=3D"http://www.thevarsity.ca/search">Search</A> </LI></UL>
<UL class=3Dflan_pdf>
  <LI><A id=3Dprintpreview=20
  =
href=3D"http://media.collegepublisher.com/media/paper285/documents/9813y0=
l7.pdf"=20
  target=3D_blank><IMG alt=3D"Download Print Edition PDF"=20
  =
src=3D"http://media.collegepublisher.com/media/paper285/thumbs/t_9813y0l7=
.png"=20
  border=3Dnone> </A></LI></UL>
<H4>24 Hour News</H4>
<UL>
  <LI><A class=3Dchannelsstyle=20
  =
href=3D"http://www.thevarsity.ca/home/index.cfm?event=3DdisplayArticleFee=
d&amp;ucid=3Dcafcec6a-7730-4d46-a7f3-9611ce0a6dcd">World=20
  News</A>=20
  <LI><A class=3Dchannelsstyle=20
  =
href=3D"http://www.thevarsity.ca/home/index.cfm?event=3DdisplayArticleFee=
d&amp;ucid=3Dc3482f8c-7d8d-4bdf-b5eb-438db585dce0">Technology=20
  News</A>=20
  <LI><A class=3Dchannelsstyle=20
  =
href=3D"http://www.thevarsity.ca/home/index.cfm?event=3DdisplayArticleFee=
d&amp;ucid=3D4dfa0307-145a-4fe1-a0ca-84dbb23c08e5">Sports=20
  News</A> </LI></UL>
<H4>Links</H4>
<UL>
  <LI><A title=3D"Old Archives" =
href=3D"http://www.varsity.utoronto.ca/archives">Old=20
  Archives</A>
  <LI><A title=3D"Getting Involved"=20
  =
href=3D"http://www.thevarsity.ca/main.cfm?include=3DcustomPage&amp;name=3D=
volunteer">Getting=20
  Involved</A>
  <LI><A title=3DLetters/Op-eds=20
  =
href=3D"http://www.thevarsity.ca/main.cfm?include=3DcustomPage&amp;name=3D=
opinions">Letters/Op-eds</A>
  <LI><A title=3D"Events (TOstudent.com)" =
href=3D"http://tostudent.com/">Events=20
  (TOstudent.com)</A> </LI></UL>
<DIV class=3Dcp_banner_client id=3Dbanner_client_1>
<SCRIPT language=3DJAVASCRIPT>
	if (clientBannersAvailable =3D=3D 1) {
		showClientBanner(1);
	}
	</SCRIPT>
<NOSCRIPT><CFOUTPUT><A=20
href=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/clientC=
lickThrough.adp?iPosition=3D1&amp;iPaper_id=3D285&amp;javascriptIncludeMo=
de=3D0&amp;callingSite=3Dwww%2Ethevarsity%2Eca"=20
target=3D_blank><IMG alt=3DAdvertisement=20
src=3D"http://admanager2.broadbandpublisher.com/newspaperBanners/showAban=
ner.adp?vchSerialNumber=3D76680e2z33&amp;iSection_Id=3D&amp;iStory_Id=3D&=
amp;iPaper_Id=3D285&amp;javascriptIncludeMode=3D0&amp;iPosition=3D1"=20
border=3D0></A></CFOUTPUT> </NOSCRIPT></DIV></DIV></DIV></DIV>
<DIV id=3Dflan_footer>
<P>=C2=A9 2006 <A title=3D"The Varsity" =
href=3D"http://www.thevarsity.ca/"><STRONG>The=20
Varsity</STRONG></A></P>
<P>Powered by <A title=3D"Powered by College Publisher"=20
href=3D"http://collegepublisher.com/"><STRONG>College=20
Publisher</STRONG></A></STRONG></P></DIV></DIV><!--aftertable--><!--cpbpe=
of--></BODY></HTML>

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://media.collegepublisher.com/media/weatherbug/weatherbugsforchannelbar/00000.png

iVBORw0KGgoAAAANSUhEUgAAAG0AAAAgCAIAAACXXGGzAAADZElEQVR42u2ZTYoTQRSAc4PcIDfI
DXKD3CA3CLgUcgDBzaxEshpXmoUuZiHZ6EYws5CA6AT/FcWj+JEPH0V1ptPJdIcs6hGa6vrrrq/f
q3rvpfe3SBvSKwgKx8KxcCxSOJ4fx+Vyudls6ssN5eFWzgrKzZffL159vnj6gd/l1ebt+kdXHKfT
6Ww2s9zv99NyE46LxWI0GlmebeV8IL588/X+ozUcwff6+tuDJ+/vXbx7/Pzm+88/7XOcz+fj8VgF
hEiUh8OhBWqoV9FWq9VkMrEbTbIbDAZcAcqVr2IHbmN++1vDDExl504hwg5qoIwa8Iny2fJTJ/sj
qicRVig+ibBmbrmimKKhLD6u4NOW6WMTo+hG52j1I1FDKzUU6MnjYN01R6wYZChjpqFU8qtRyeM5
snj1TnWzrMrQpLVaEJwa1+v1auzaVuYRmWq72Er071TYEEW2/vgrU1J+NRvl8Rxdp5oIJtdsPRQW
/wXKmi2FIFXPUfoxg/p4Go5o4qk5aoYAcv8CqEtlzRpjdKMeU7VbcPQD7OTIrRsuonWfjKMoOV7S
GnZGIHL4dOU/smeFy+K5Ea6MWLlCUOLcopiSUuk8iKoc9QdihhNzzIQ9EYLZ4VP88IMFj2cvxMKx
0Xa5F2LhuCeqaQixcNyjjJkjeTBH/RXLq60ccZofNEo/3BPGQnVCmqo+bKc7Y+r9HMORc3OnX1Jd
RkRyGRSO8oMWGZhum3PnkR3ne0c++V3zPbyfAV/KEToRokTQtjNWYyAOIChVSVyfQEOB22rEbQSd
cgSrvpG+py6nLxDOVnC0Prz9VqS5MtZxhFREzZIKZEYsdjDwyIZDh8VHTkis0cRtNeIOdQuO4uMp
dNCFtGCNw+UYDzK7cUb5x4grUj85NaII4KoQNeo0/aOX7j4rtZqIO+bkqkoyWxZiZ69k4k7p1NKP
5BgadxBHALk5ykhDmyWiBt0WcTsnmsWjVTprajhyXSTSllFzzlxeberTjo04ponCTFNizVpf1aiz
dK+aqFamA9OIO+VoCi6+ZcbRVFOW14jzqsUwpppDO5KjRupbmnFQfF21Jt2SwqhjVWHaZsPSHEca
cWccxedBFBxVcwaGAxR2YzckNuK2Ej9N/lQofvge0yakudP+WKSdc6ZI4Vg4Fo5F/gHMxxK2mOvd
lwAAAABJRU5ErkJggg==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://stats.broadbandpublisher.com/pageCounter.adp?iPaper_id=285&random=&uid=

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://admanager3.collegepublisher.com/runtime/noScriptAdImpDisplay.cfm?iposition=11&ipaper_id=285

R0lGODlh2AJaAMQAAL21p3hyZv7+/qOaiZuThq2klE9FNHBpWlVQSLGqmjQxLIJ6aZKKewAAAIOA
e9fX1kI9NcK7rPyXAMPBvWJdVIuAa7VsAC4oHpqQfJGGcBkYFamfkLavoSEfHA8ODP///yH5BAX0
AR8ALAAAAADYAloAAAX/oAKNEGIgKEKt6+EGcOAsTu0wOEPs++BvwIJQmEhwjkiAUhlpAppQZ3Tq
fFKn1qw1suxqveCw2JskI8tKTtoMOLuPxfiwANz4fDxeDmerLf4xAS4uLCspKAYGJBAKjQoXFx2S
Ghoelg2YmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKzriIkhyiFL4E0fTc4BDo8P3VDcXFJal1S
V1BtSEZcWUlYVVFj2NnaS0di3d/fa+Bvb8dyQnV2d3nBewy+fwuBg4UUuCaLjo+Rk5SXtAADChxI
sKDBgwgTKgxoawQuXYN4+drD7k66OcfOtAFz7Ro0dAwyMPhRAEMFDMCK/2x4koWLNWfbYm7r9kxZ
FzU0uZHbaQSOuSHp7gxg1y4HPHkxBhFigetEPkeQ+FGq9G+h1atYs2rdyrXrwkUmUtSjsAvGjIk5
KhLbYKwAMjfLmHEowKEJB3VCCYjEQAAD2woBKggeqVddAiZPukljyWSxTJ0200RGs1FZTnI1d5b7
CbRO3jzufM1AmvQA2UJNFZHQB0lSB39VvcqeTbu27du4U4E9VO/FgRi9bFBUe5FIkZ1LqiUYkIBL
AgwZRIpkUGHB9JMFMiwY3Lf6BuoFrjVerNjxY5kcjIxJvySB22iQNbs5NocOkM+g9xwlLYge6qZP
NdJaP1TlZuCBCCao4P+CruyWiwotRBTDWcKlRVwQ7yHTxnHULBbBBBMAsMMG0FUHSABIxYOiXttl
4JdeDDzHwEosQVNXE+7R5QxM5/GYHBtOHGHHYXMZY1l68m1WxBzp4DWUHqHZEA9/StVziFOrQcXP
a7B5wOCXYIYp5phZ3XJCLr39BlxwNViYx1oY9YSTEHDouGFdO2QAA1K7uCDPAn4KkkF1Jkb3xwDQ
iTQAiRigVMGMSwLRXDOUVpEcFls0VuSNCdgREgH37RBSjEvKmSQ0SzJ53zrsRCnliTDQYxpTV6o2
AmtSdUnmrrz26quBXr5CwplisaCUmjKwKUxRRBWlgzCLDpBWDijhMOj/lKUdq20gsXL755Sk/RZP
BdEJ5uKTeDQ6DFt0WATUonTgMAAdg7qoXQU+aKciigGI1F9gIW3X6KAYHCYtAUPN21OO9d0Xah6N
VmvUWfsK0t+stB4Cga249mNJbL+GLPLIJLtCQQDBesBBB7A4MgKxEBprmoTczoNiH/KI1mYwbb7j
TgYzzKPtsRcPbfS2/5IGrtK8/CGYYE6be+12KT5tcYryGE0uoBKKm/UBW4sLw6OgovODEQUQM8wO
KLH9zg2iUelfxigwEmBrXYJc8t589733BgII4EADHkygQCwvFxshst6eVXPT/O3J756RY5vt0WT5
VvTRmhPdp5qwWlz0/+OQS74mIL8ptflSBwDaQuZGr/7CuH+KVN1ewPTAdlFwj0ZDzXPbgwsEFzQk
4CNcwka438w37/yYEwTugAcPUCBLCYpHGIhobr65aJPF1JehEaWm6paqq/rQqPr2Rlfu0/Av/Yea
fXabOudDyy67bzPjz7qs/vNPRI72L8qdLmixop8hxvIgRDCieALaUvJ0tYoaQAATFHCA9RrQgRp0
AAI1qA0IN6ggD4wgWM9LIYJMyDJOEEAAD4DAAx4wC5hBZHsyqNCyeoAh4/TkUlEA0YdANIEmCNGI
lRKPY3CCKjmYDx3oaJJQLDLFofCFbRGzYsS26L4ulqtcU4Ia1OLhv/9/GQ0i/zvNWGSGGkOcKRGJ
uIcibMUILUVlEsn7mN5K8QABbAATfaRhAygQOA84IHC1OeQEGASBwF1QhZDEzSH9+AkEBO6Psogj
mha3PR1WpBhvsQkSiUjKUk5ghqc0JSmNeEQfjUcy6TnHE8VnnChKcS1UrKIu78AXXm7xlxHrYqLc
NzAvGvOYg4Lf07CFOuEh4gRwVA0cF7GaOupjH67BY972SAoOCGCRDQicADAxyQaUkzaKZKQjI8lO
2nRAnODchMrEObhM8kZmnfTkML7HLg7lJIhDJOIDUgmigRZUlURkZRHFAwZyLCyWDKvPLBt2EYdZ
dJcYrWIWfZlFYOL/AVEJ2x1f1AXMkLgPfjgAzAFqtbFEbIyaML3mNSU4Qap8jBWHpGEj1wm4RU7S
kDUIlgL6EKwMUsADGQwAJ2qwQRDWswEIsEGwLEhOB1wwnea0agcPF9UaKLUTQA0qJ5wKVARw0AaZ
GKpUqwqBDsjArBAAnB83iFSvYsKpUH1qO/cKkElSUhOGFKf0ZoG9TWaOW33IXR4wFMp/BhShBJ3h
QA2K0EqtJz6okuhE2RUEO1jUYRlFlLrUFzGEgXSKGBDK+oDJ2l+aFJnRsZbUDBUACrwRmi+bJkxf
ak2ZYjObU9kmKyw5TkIGznrRI4A5A9fHwCm3AdETJwcwEb0ZitOs/5qILia8uch3CnaDgw2n4JYL
zsB5UwAQ8IBgBfBVTXSgueJcKnPFCV8BHA66gp2ueM8buA4KdpHEFSfLJtlTvhqYFgEQcCY6AKob
CFavr7ChLhCrwx3yc3w5eUIRhQhZUk6WwwklooYxZZcwIElJ7knxZsHH4qCE9qMIi3FfSAsdrv0m
ta3NcY5zYEyTkisDswpLWOYYzd0GaKZRicSWgqvHm6rCu/495OD6aL1JTsABzW3ATlEQuMNFdwNW
3kSC7duAPk4ZhggAnCDDO1is0tdwOQUhIjcR5xcKAIXkZK5frzzYLRP3cPS0swPcGrgAKMC7E5Ah
Jff83AM72hQyuP+vJhzwVbdeGYVyHa89szcziXBPBwnrZ2Mbo+EOf5jDj91wERGjBi7QRDPmaGJE
aWmfFrP4xW+KccJG6gMGrNSlBgjASHVcUneMSjrGjJ9t4fhMYumWtwGyZpKTnM2aNpkVjvQmIae7
zkkOGJFYTS5+BRm9eGJCAccVL6AFYD10C8CsbB7vB+/L3GBFr56Bw24mMnjBnT4yE+csNyba/E3q
CkC5lxz4eP2t5f42YMyBZe+jJ34KS1OWlOKUdJ4DZ+4IFzZm/TOLshRrWlBmRBkfKrWHBRrihVIB
AC6PD4fMgQya04fWnWnxLp0UWl2bdh3zqgACNiYgBNCY2BEzdrX/kO1Fc4XkANCEmbOl6VJqGg8q
+xgQcJmsR1ZELwB9DOcD3L3xsp8XRBzHLzgFvok+bmCnDXD3IwcbbwiLt9HMRbumN9HB5v677GpX
+ODOHt1F1r3h6H34nP39U4o7HtLr/e5SH2AJQcYCZiA/rMjPwgcLW0TFxwFiiamwUCWAqA0fcgnq
EdMen5RPlhPFuext7eIp8vzFIC0A1Hl7AQOklgFID37SfzYqk3DLtiWYIz5aanWrYz3r1XbNNvGM
CsCVM3qNFOQ5r89xIiqX7WzXhJoT/EeGi3dwh99EeMV7cRJi4r3zTfyk58z2wRbe++cXPOKvunhH
nvPxACgK0bVe//pFZxtkaPZELL0hOjnUC2/DM6AWLXRgJJexIepxKWlwGBFwBEGSBDPnevTBGZwh
eyRIUba2Fjq3c3WwbC+jAL63AT+He7vUF33BWsX3WgEzM/ZwW0Z2ZMdzR66RK9O3CgnWR4sEOICj
X9uHSOGXCeBXcJtgXIBjPeZHd5q2fpmwfljICd40duYHcPQHhfYHhZpweAx3Tow3ZwG4hp7gV4Kl
b5rAAUIFhw1yTxO2C0GDFsAABAjjWXRAPkfCRK0GBTRxHBd4BuSTiDbnRItIc7S2iCWIPsWRc7Um
Re+xASYwTQqAALZ0gjI4RRCTdM4CNFDza1XXgyIgU8UzbXcUXP82xU2ksFOLRk+AV07cZXCD84Qd
RziC1ULpJnd3x4t7l4V7F29/F4xfCHj1N163iF/od4ULt047xTJjtlzjBHCDxoZs6IbM5QkFSAsb
kz0rkECN0we5pgMweGEzRxewNA2W4U+IaCogCFGNWI+pYo/nEIn6SHtCMADRZACNQAHuQXu39onN
ghKNwmNSYlsO9DLV1Ah2oyURFEEEMoSqoF59dl21iEjGpQL5Fngg2XbdCEhopl3s5wDnZXfrp2YQ
YGfU53YQcF7HGHBiOF4d2ZH5l3/uNgEUgGg7NV3/J17HqI0Ux41/xXcPYAMtdHn3IDMSQiF6aGEj
wk+c9R5wkAz/d/IMzyAnNbcwM/cWjoiPIYiPsjdrtMaPQUAAQ6YaBwAAnRItnkWV0fKJ+IFFeyAd
DlABQQM7mXiK1nQrWBcVyLN1U3FtqyBO1uNdZGaNZUc9goVJutgJk9RoAZZuDWBnMLSFORl36+V+
mDBm37RO83eNyzg4jilOmJR+zbVImNlljEmMQ0mUj1ZfH+kJcVWbsCBkMeOUguAHwfE2v7BD+3Rh
cSKPp3KcsiaWyrmcYWkMITiB0Ck+bMEWCbAALeVSFMAc/fg9cBmXoeUZVUQUCfkzFKMiTOFSqZie
uPKD1VaYhqkKthAsJLBgI/B+9Uk4TqVvqXhujNAJW6YJTuUA/3DYVSbUVmNloAvWVRqnCVGFMiKw
lPb5SPupZQhqQjWgbyPQQhkaofeVQTVwXx/0d40Um7JpYIopWNTHCWQXCw+ROWTRODcTlURhET3k
nMh5o/PBnDq6o1YJUVdJBOdzlhtgBAzQl3NEAfhCF53CWQSZgjPIA+OpkHrpO5S2FHXjgxAEFdHH
dU6WIB10XinqeCNaoo5nlJYHCgwgABDaCi1qLN6yJ1DpDmpBleziQ8aJo0myo3q6nD1aAARAKBig
pClWS23hFm4pdHOUOAeQAXQRnUJKexkViuSpl5ZjpbeSJceDK0Donu95ILLYaGtIhmTqaBhJgKNw
SCSaCpjnlP9l8QdRKZwlN4l2eqfICYiAmJx7anMgqJxukR4DAGTKlwFH4JzvESd0sQG/NizSFADa
WaMm6KQYJakK+SpCYxpG2lurCEHUNkFNFqa40UFWJZvpNaoTZ5TD+AnRs6asIGG86WltEpzCiYLO
GmunYqsn9lAnRo+5qqv6Kpa9WgAVgHy3cgBjOahxggEU8FJ+aTcHsAFzUadMUomQGp7sIDHWQoqj
Ua1WqghIBgmDKX2c2nXkOrIkmxXuBmZ+laqZkH2btpuc5K490z0/1yRtQXP1yq/4iqv7urMpxgEI
K00j0JagN2spBgAYMHTKSnUG0HsVMKwQ26TgQ7FEcZcOADT/viM3hIAPmjptWzp93lqyYBu2tDBD
kgZloeBudjdc4jhA2zNyMisUssqv8rGISJKz/cqz+/oeQsd8G3MA6WGnGFEAbnkAFwBtfEt0CkAB
K+GoEgu1UgsxVDulFdMttuVbj5B121qReSO2nNu5skAAlLcJ3hQKxgWqEba2NBOjwgGv3kOjjiq3
sIaz96qzeLunvZoBRDYsBHAYNzcHR1CkfEtHHAuQBhAjjwq1t/ckFRu5vsMthMAxrDGRAtKeXPq1
nnu92PsJMpSiWPYJHdCFdPgKbQo7DOiqFQarNDqvNpuny0m7tbunHDAAB5Bbc5QBAACk90gHamCd
CtuDJLAA/xHAMMhbe49rl1JanlhrrdALkdhKvRaZvRAcwfL0AOpqTrvIQYIWEOOrOmuSWMMxnHBS
nI0Vu8q5q++bq3QCAAOQsPTLABsYKeHTqwcgAs9mZAoQAG6ZcwMcrRDTF1Sbl+CisecZUxEkQa7Y
qRKcxNlbPW0IYQqgZkclEHb4spQTpx88nLI6PvBIwifcxY1YHx9SpP9ovzk8kNPJFoN7nf77QAHw
twMctbpUsVEaElXrm5FTJdaKrYIJhJrbrUr8x9cLg9r7VBQwQwSwoACxwWWBIjTwmzLbA+kLsV48
yXmbj+fTKQtwrRSwAJBCnfVxv0hruDClCBcQADD8xgTMKv+Q+8OUOrlVYgjYakdGTAlcgsSAfMsl
aqBtDApa5QAbQAGILMWclrrx4MGPHMkiTMnKzKdBagwismxFFo6tMyNpAyqdMhcCS0c23LSN+8ZP
CqUWa1J5ebUaizEac3WH1gFLVr3Wi8vu7Hgd4CXjqr33qRCKzDiNbMwkB8khnMzLrKf6GNBASgDz
e53/eAu/sQLW8WPJKsq7JaztgoJ0GrXJK57hjLEmEjp4bCX4cIqXO8uv2M4lWqAiTZ+PhFddASKe
iRUbWgotTVWogNIqPUga5M5TzMGU47boi8ya9c8oLND62CnA/I9EfSvoaQtvtMbVhAF3YXvJa5DL
e5cYazn/l8PRKRDNgLnOfsy5yRgKS3iNXKGZVyHWn5B+p3BOY3jBEnzTxMwm8LrT/eycPm27QF2C
cTC/RD1N2jzKQOu/jWAAzMFzTw3Vq6yQU+3Kryw8zhQWmCog7FzSRNnVvDxnQakVML0VZO0JZm0K
2xeuTZhICdsAv8wJJzPPnnDIpCCgh0MAKx2fhqMKUww7+KzTwTCnVNnTkyzXPBrQMVyWwJvXuiVN
SC3Ke01NgA2edMnD0nrAGX3H/qG1UsexWYc8rviKCcFUdxVCmNBV03NW2QiuFQwBObSUakVp2NhW
bwVWUTV0NY0JdWXem3Cbc+XeHtpe+xZdVvVTa0U4fYDI/+AtA1GslJnw3koFro9kVFn1SNxt332g
sucmA0BF3jawoP71TU/F3dRX4Vd2fl2lbwsumZTt2d+kVtiFV1G13TZQ4iHE3U2l3diGkho0lBOw
ASDSCQrwfQ6ehVhWWwuqXiBiSCjE2qUQ2239qs3C07rtxUnOnHWtj/ELdcBddS4YTVO+CKrREDDV
e/OSPskdx3I8qeM8uUXjRg7BUoPJx9WbECZ5iyfKbvv35nQmWKFbmQKgX+bVi5yQac1I52vqhgC2
Xms6gIIzSfD1XG4YugAaf5H3VXy+X/o3WKVaaITDXzAUCoopkySJmvG9XhzUmZsuWOyH55EucXF+
jWNYX/9mRWAFx41Kpep6t12iqgroxQEeSgFoR11tDGYcsAMgQgDlVlAapNJY5rA8OXAyhABX5us1
Hk4HMHC2PgFjFgC9nn0OMAGmS+Q0Y74VVtute9v+fMLf7q9Nbtcc8NtEpte8dQLjuADF3YMXQAFR
1OXKjUUXPc7NncAYwxQumIlD51vqnEddahBjdjhmVmZopmZv3tU7BQNj+HbVpXCCk8HudUlYVnA+
6XZ8F+2HxnGKhklpJVdtZWUVP04YaVV9ZN+IJwAM0FxJaYSd/k0dP24vf0EEF0PlRFxD10cqq2a+
vE52djION+A79XYG/wBpVumANfQ0Lz0ZHGeV/ZpjOOj/GM9o4hUAO6VcjDbwBp+2p+BHD5BDidZI
1MUBDwBmE/BOI/Bui2TtNA4iNI5l77QBweJHicZnIAROxqVeh6RUV4ZlqGo4p7Sm2D7bOg3XKIjb
70tLljzujO+7KxzlvLWJnCwEoKzU+ZDrXC7vdVmDFhsd9k7OCZTvqGE3xOOCgKmlIGtTCeFu1uOa
v5hvDNfVLyRILu9BUP9XWwhxol1w06h4d/bp/eZwuj+aG/dt4wR3y3Wmb06Ti9T7EFdOxqV/96Zw
UYX0GVTBxKhc3nVB0ZOaB8cJ8dZuuEmM+Ib74zX94kWHaH3+SI/wk1Rp2i1w739u6eaarTBO0l4D
EzB0/2sHApAiOFMjQBBqTlA5TQ7lOA30cM3ZBKUjIEo63UMFoQgCMceDBjF1OIKhDmFFULLZAzfg
DSwWtDGjbCag0YP1YON2F+LxBL1uv+PzdDl/nugDBgoOEvIlbBwgGCwyMqZAHBBwFPxxDBgoQBik
ZD56dmZwuLGRlpqerqWlYZiVZTi8VjjIhi14cXFR5GpZPSooXPxmCgNfXHQga2h4MHtQPUNHS08T
CWyoTI2g6AiQYEPYdINTTQiYRCtsPHRzk7TXUElNNfyYBLCHb1N98+DzU/2YF1DHwHvmJqybN4Tf
wAbl7PkTh00BAXPvTgh4AKObAwTdHgToQK2BNnjiMP/CewiNI8mTKFe6e/ny48aYQxqyVEmPXUBn
VBDIM9FzyLpr+EYiNfdgBo1u5xA+ICAE6oQRJVzEMMe0AYcHG7ghVBCjnMZ2AjQIoICQQtd7Ewg8
oYfw2RUsWnR1+VJrjINWDFSlIfVmAyA9hg//KaR4MeNBdQJQUNSoEQQEBSIkvsyg0yYRnj2luAAB
w6ENqE6fBkwAAyszGV7DolGh1pcvuHTh7ixC2LFgvI0dS9aMGdLixnVsyHjv6z+O/P4N0fkzYcKL
Mm9a3Ck0or6FJxtCJ4iv4cCAMM4/Y4hPJfiT3dTGZEnzPIV+3TKOdOk+pvQhLJvb5F98A9YwHwz1
AYT/T07ZlXfUTh9Z1BByyllzHDUpiKSDBy7kQJIIVGwIgTO/pAdBhg1s6FMKPjXQAYcamjiEizqI
OMw+J1ZxxV14HVDbXmS0otoABKwxGGF9IJakHY0x2eRidACQyBWTLXIEHUUWAMACCugGmieLKIBA
G6OgViYpgGFAgF8MxDKLA7WEUVsAt/HyCTHA/AJccMksMxyLFgJKBRLWpJXPOM6dFJ5D2c1QXzcb
dIATgc/88IB4282jqHqZuoSdQOPx5CA0m+rAHnfglBPQoe6wBE0H8AmgADXvtQNOq/1dBCA8VLTa
K6sBQiNpDTo1qJA2AXhgqkINDJocgoGOhAAMskIb/+gL1FYLTV074uKjGGLQ4JeQRBb5RmFKKumk
uusiGWVdVG5CQQFvDMABAAFc0CVok0EiimlmAjykKqyVwRorbVYwG21y0slLXZLpdqcxyHSgjJ/Z
QuvBfQJkSKs2KXSDQAMedadDRZYuyoE2Igtr3RCDiqQSNiIZNGqi3dAs6oPifTpFzdql9916Fs1s
H89HyTegC9mtEwCzDoxDRVGGLvrVdQKaVOjHMGXdtUyd8nwRWRNaKqFBzigL4sY4Yty2229Hs+1d
3eoVBl8M9GVGmoEJZqQffiQpSB3sEu7kBglEUAEWVlCZAgKEwTEvAo9swiW8jGRAZsBlppmKwQUz
oP+wLWDQNvotuzj8rr67/UaxMhYTB7dx1BGVkbTsYBNDQlFX8R42IXUTwA0KTkqFNg8kBIVT2HRo
vFMUdLB8N80PYdA15LETvTfdEBD0Ng2ppH0L09N43zkvJVdERQJ4MGhltKYKTVD3gZNcWgx0g62A
TTSwzgO3L2t/BZpU+iCwvj/t7CXlsEZAviIh95EMU8+gnewqaMFsyU0LdPOC3cCVtzPsTQ2lMNKR
EoMuwWWmcCpUzOG0pDrKHCEO5rpECjZhw8sZAAEYmFeZyGWK1YiQXKsxWGtmw8EFvCYDCjvdAXa0
o4c5wk6/2dPrmnHBkQSke73bGIISkhGwVeM+D3D/hjzMQTyvPcN+OMjO+u6jv9pZpI35c9V9mtKz
CYkRgaRa1DnkGCsB2YQl2rhPfbSXx0XtagiDVFWLNlYhaOCPHSQjZDQiOQVf1WCQtKLUGRflxT9K
yANeTFuCBKDFK6IyldJ42Nw2SDq+fJABIVTFCAdjiBOuMJcsBEQJAwBFGMrLXAXAQJdwyAgKDICH
qBBhKXzIBjSwZkgEe03CFpAwV8wiTrho2F0W90t9EWNiroMdAlVZPiDsYwwiq54DkLUiaGyIBk7T
UKNsICJ7ZghD0VhRPV42hjfKiBM6YIoDAKqDTiAjBTpwUdQg0IN5PiNEzmDoQT800H8a7500ilGL
/4JQUEWOAVkH5Z+rPuSSSMlTGiEahwtosE54PgKfG81QBzxqUIrKdBgKoIEGFqpQGfVARArFqXfQ
ac6jqjKDW+hCj44IS7/MkpnlEibglqTLqzaGqvM6UgESEZkc8iuG/4oDBj5TQxxCgjA9TAXfgtia
gyUxibIkmBHlNKdtoi4LD5tSlXwRTnFWjJxIXagD5FHOwSJlKOU4JWIbi0qNJbId3cPGYR1rWWpE
yrCX3Sy0lMojOf0oXLEUUt8iJ4c8YDW1gyDhkWzZ1W9WSQHBNM3hGOAlYzqUh0Si5ZmkKrBVxDUD
shQhBkQXJ7veNRdNdCIUJ9cliVGxirFDKjZMyf9ZpFTXjdfdbrbKUc4F3sdq3B3vOa1L3vPSRUet
zItT+SJcqPJ2qii0qmrru1XWknBeUmJc4w7whw0Q4HAVqMwNcVuBQwxJYGYaImviOpvWsEmJcJrw
cW+R3LzqNTIvBA10o9unyl4RpbxD70JCCmISk1gBbNNQD5yAYu6K+MUkZuV6vWU3IAUphKXlqn2b
hF/8CuLHrI0DATQMMX751w0EoITwmlhgHGagAG1w5mkIxqaEZaBza8AANbGsxGrCiWF4VW439wrW
5/7Vw1aUMZvb7OY3wznOg6WxBl35rbtB9S9S9ZsMe8wYIec3EIDmMwOMfDmHJoANBeDAASBgi87/
GBjAAF7mEOMqywowYEih87KDwTxhMW8TN8xt7ur+SrHADkfOql41q1vtajfTmUdNbS+Oy6AaKvPZ
z7yEg2vvO+hfCxkAGTDykTujgADIkA0Y0EWxcbhDMnUOmsGdTQUw0AZWJKwCwe2ypz9dmzFjWK+w
lWKeAEvOE7863epeN7vbXZxYbxO0Nw4XVGdZy15nNdd/HrIcgO1v/CbAl2dunAIWMC/i/uEAT76c
taEJYVd8GYk+5DK3uZ1tCnv722N2IrH5qglyA2ecqXY3yUtu8pOzOofqrfOs6/ZUccWXDX6D3GKA
nO9A9/vfQkYFYRQ+cH4VXMqs2a2UKUAlyWhi/xEICDA0V5NtbRdsFFyO8NOr/nRrYp3CdgU3x0kN
TlOLfM0oHzvZy252aUTqPGpfO9vXvgGI5mjlS2UvGN6E5zP8RcenmDlW/S1oneMXFfpV+qFzq+Ai
EZNKTTzrIjIwgIOxKcLDXcO2v2z1y3d7YaAO9ahfiObWhX26Zx896Uuv7oA4MvWqT/2fVG4FbtnZ
brKIZd6ByLcdm3bXud/3r3UPeM2dJg4+R6ujpZzgNhSAAUfHgPCS3vghyjLTq5nrNEWnbcxjPPvI
5fpyU6c6L4GdTyM3PfnLb34Zo3716k99euUua289lfZR3Tu++ZDf3/fe14DfHPKHX/gMHAIQtf/B
AAQAlchLBtRQ0v0FCE3ftHXZl1lcNV0exjHMhXGT9/FXX/lVuZ3auZ3fB4JgCFpW+q1fCQaQ69lF
jdnY3QVJzOEe5ACbDP2e/e0f/+1dVxlTZ1SAlAlgMvmfJvhX4jHC0m2AwQxJEl3etmEe9mndt1lg
uHVcBpJbMYzTh6GbCGJhFmrhcZCgCapf+8kdXq1grdkaYJgCbQFekPldH+ycDQbM4fgfvKRAAPyW
DxmdDQFhoh2ZDj1e5Glbl1nTEkrg1WGdcXnb6IDbBYrbhnFYuamZ6G1hJJqcREmiBZHgeXihIz0D
CjpRvNXNncHCmtSeC8qczakhoOlfoKEhvfT/1u2ZCSuWYhx8VV9RiQIcQBFq2WocmSZUQDItQNIB
YcQ9oOWFgdUFojFWHQVu38Z1Hy90XBRxwhRV4fhVYjWum6JYY7aQ4BBMkuqhDHht4l7BHt2Rzo2J
YlThGs7h38zxGQmlhhsaicxt1QAWG4FRhrwYn7UNQAbsIgUE2AZkAKTZoh9GHhJSUy0IIhNq39Zt
3BMR25k1oiNOIyRmY0WuGjZaJKCk3/lgxBcuiqhw4nq13CuNgSy8wprMX4JR2Zj82Gqp4o/9kO3V
YTOdhmnRC4Mp0QAMGDDpxiYcQAGgAZlUgAE+XnFBGiTAlRIpJQSCWUIioyGGmcbhFcdFITRG/6NE
8smHZeRWus1O0QC1OEGkAJQLhAQN/MQY6JH9bMCzeJQDHJYH8EU5tRRcdkSLjAGNmKUN5CU9jME4
0OVX4iU8tJReuqVL2eVeNlb61QcBOIP9rF6p3Ec4xtr76UU50sB75ZgZ3tsa/huloYmWHd9mxuIo
qImEFWOWEUkCCGGVGEAFUMDHpQAFYIAtZBphFOBkHEDkLQAeGkAkMCWndZogWp4xFmPGMdFUPpGZ
aeBVFkN0USNXQudxfJLVTA8YDYoAyMNCOdKzHI1FGNImUUEHfFIAPYgXfZKsYM8UeEAZ4ceDfIQz
pGd5itHGGJQ5pZ9I/E9LOBIH0IAWgSMVKP+d+3ki/MHSB5HW7eUefRUC8LXirfnQbqkBgwLMa0xe
Kf5LG3DAatoQATpfmCTAJAwAmwxAHPbm0A3lxxmAbFKbxVVe1SnhBBZjXSGXbXBemX1TRFJh6F1h
dPKoybyHQYiEGFXFBJlDCeCD/zxOewJV8MgKkqZPsGSEAXUDAgVEE5hPQNRAfJLM5KyDiDhH0yRQ
sVipU2DpCIpRI1mNF3WPi2DLfw5BgLqfrLXcXmAm9WlmLBoOa7HVwPiWhWoOr10o8N3aghGJaSDg
WR2BljifJmBAEVaAF2AAiS4Ag71mlSBAxRkkNWVq5Q3nxcGJEZnO5iniMyIdyO0Jqoldj6r/ajSU
A3Va13tCw8owC/HUh6zug35oTcg8wwyAg6KAT3awRHxWykW5CKiUDahMwa+eQ6sk5n04zc+sTw5o
jK5+ZABpgjiK5JzOW2y0Ajo6E5lc6J466J3WJL201rmyIyw6aGoY4ZEMgCI43wJMQEA6ggFkWYRl
2QLsoSwJV6Te0KVemTXxqzU1GKdqagRmXpxUmIU1pI0y4gZyYFY+56pSrEyoBPdEg0H0KjtszdVQ
Tccya3gyARgp60Vo6UeEhA4YBAxUh7AOzbICC1KhHhnNkfbIikG0p5vqAAqm4NyNJJzYHaaJ4lyt
qxueoZ/ymAzmHI/9C69JE76upIXKXIL1/9sf3CEjHICi1qv04d3V5pCVEYDPJR2mSRg1eRUSUdwf
LuW0XV/C2kLpSGWNdtMzLifrhJzEpmrFUuytWETIFtU5UY3HPgeuRpZ4QkjJJJBOBCuyquzGHOtB
oIfLzoPixuxRVelGcdQ6dCdkikoNYavP2pgHhWJmuqI8/h3wseKgjcm8xEFMrgLk9WvpQo6iSRlX
jdUksEKGlioCBMCjOhfmWNlceS3AsgnzTUYAUJzBKm+nemqMJmzcIqfDKgLEmOoj7qjeZiTfmoDf
npNIYEPg+u3g6oPfSsEDZALJvqzJMu5CwcpO6YzkQibMRpbM0gpD/dQ9bG61pgdYeRZluv/c7Mkf
9XlrHZLWC9pkPD5TnwbGEEVoaAZluELOaswuaQ6JwmRAAVIOBfDrbdoQ1FFocV0tAkTCpoXOkSHv
8kLg8jYlhUEl9IabN3kexDbnRF4v9lZkq14E9zZSoUhKrYIRgPgw4mKsr6bvSwzF+gBN/yTBz/TT
EYfK5AKrO6DUYA2FYxZK9OSvztoAnIahGIauB50k7Q3qZvobzwFMWxXqACLfPO4dG7gmBdDhbJTB
6GTAbrJmbpaB4jRCBqwGhRKAvjaCbG4aHzda0h1A8qIw2ybjMa6wMjIjVSrnJ7BOjuJtDduwNdqP
Bs+RDmOERkSmEv/PAsXq84AyAEFDUUD/gDyMWMka8aOg3qyiAMlAD6JYVwO9Miv/h86gUj8pcXjp
AAeAwyB94ycvBIF51oCWo+hSaLeS4r3JIKCdsbiuZANv2d4RyWlxQKIV1+iQrRKFjjXlqyNQANmy
xpE5Xr/KksAp3QHwcR1XQNiiqGyubSIjoZclpHEeJxTC8PeZagcK1iVT7Hc+EidfZyRtESWdslOM
zHZCA84u0CoXMUt8Z3UI9Bg1gBVb9EQ/cfzmii5f0Q8E8Zkyi9UQwLRwrrUac5y6kmWapIHe2gCX
VukmsEw/kxrX5PGpge0FZRwAQE+z7sGxgj4Wl3BJYDTZ8SLgMR8zwJGFwTgTgIQdGRxn/xsDIEI8
I7Ly/iGnAaf1QeXCPmFe7RXjUG/1VrIlA3QlolQ7FfOKKZKJfG9g1mU0MBS1tFRca0s7eUAmsA1O
2YhMoYhL8bWJLcRDgQhgD9VP9bU+eQD+0q8z4Ox9iIwocSc8qFGJVMZkjpldAe0sDC0R6fQYn6Ge
nsLQocYbINj0WRscfCgAcMAkALUQfU6WPd4+ZlmaCJfwdMY4F0xAOl+P8O7UAfIQ9ggSrcFrJp08
46vy8ms9azW1uS0iNtUjZ1hYW+Uk321gWeFZa/eF6OqwZuQPDFYWyFZFFLI+kcQEQA+KjIOLRIVl
82wndsus/cjs1WnB6CMZ95qgFnAtqf9x1G5ZhFICAERAa7M2DxoMA3sOl3nZbGpbjHKwASCvrWFA
VFdAj0Dd8B7AihplIHNZwSZycivyIkflnFigqHXew05yjr6OVm53i8NT6nGnNarA/KYSQtBAjBsH
eO9D0k3mZxHoZXbr0I1rKTbToDYduQSeNHn2g0bTakcAa4OotRVXtRHR1H0Olu02F7gzAcxGX7Ez
GMjS8LIJnNyhZBwAQs7mZFCAUl4Zp7KJF1xfIDK3pzYvItJowzrju5QqxIrTik+si7d4WjsAW1fi
hiAWErBIJ3hAB4iUZ1DLsUFND6A0jx9z7IXWGLxCfevNW1X57Wmm09LW00LoSh6OvfT/tL08OYIV
yVMTTJUnN7ZxQbVdGsEWGhJBzAIAJGoO7zVdMGQ0ggg/aqyTaO9mNQqD+HBK2BEZF0NG79xGMo4C
FqpSJKBTe7V31/lUhD/+zzY4RVowwRiQwKSn9OuN48/KnpuYwejqjd483irkdJ+6LoTatGojTgTY
+6l/aDbrVppsc5a9Rmz3qxKBAafNVRJl+LJ1RgAUoRlQb2tWOBwvQCKc2ZnfVRbwpgFYUxN1gdpW
Hogr5NuO+J2PKnVbZZrRsLWjfMpDy1v4RyFhJ7eLDH8uhXjoeDFfK2Z78RFt62XSG8ypCWmBayoU
+W6lCbhSQh209r1PAhoqExu8F5tb/zlcBWxtF28SgUHaNkJuWt6RUTzIe22KZhsXhE6B9cjc9e48
A+emMq/Cat5XU2UU7jlz3q2fT7vK2/3dDwEBoMwJHEo52AqqSAF21DzmcnHPspy8vZIY0LemlyG5
huuestW870EyHX02t/YcGF8ywTYJ9+vQRf00sWjogEGnNRojIBs3c32Fx7pr/npuLoDoVzjZRzzF
D3xz276LinjIcx1zVeVydlhZmzXeCz9Aa4xt3YDTjEByiMA2ZMU8/cDg25Pn4vxK6zy4iMErjK7e
xZdbCdG3UgIHRAAMQDkA3AEPDhdqq8amAdFVfzCXgXOEKTheVNsFZ/jvypZpuqbzIf9AGJw5CGwM
hRimQQVLlR2lYkIXdRxrhVdLxucsDwz6FsSiMYAM1JZMivOJiEqjJ4jVqsgqLpeOVwP2iD2NsvmM
TqvX7Lb7DY/L5/S6/Y7P6/f8vv9v17ExMUFA+LDh8SDACNHw4ADxQBgg4CCAdmUAUTKF8PTEdJCU
RORQ4bDgkLHK4MpAQDCwsTHgioGbOxAbO+BbkAAQQUg4PBEBkJDAoVzgbLsA60uA2zuNI+uLoVPB
EISbQZSBkdFdfvNTgRGweUKxk8GAcXBiQgNPX0+jtEQSs4XABg4gCw6oKzcwiEKERHIUIUVKVD9Q
Tj55qnIFgpYtXLx0AKNhDBlAJEv/mjyJMqXKlSxbunyZEYKBTlIo0mBCaoEKVQ6k7ZpFoAAzAgNf
varmawMwDhwAAGh6jEMtZ7RoDcDgK6ktddl28ZrW4gADWwtx8FsBL2zahQMyUIhh4OC4AQuqxFBR
ol27FDpvoD3wNqBBIORWeMuh0Ae3xedWqHgMUaJNEhfzxtzIpcuXkGNeev4MOrTo0aRLmy6jIObM
mTVB4czZ14GDWUyBFWDQMxYG3bx6KV3WNILwCAl8Lfs5LSmBeLuzYpDXOxcDHPJ0ggOiA92KHt6m
jyO37TvhfAYOXD16wEqVCwfmmUjd7gB2whnaTqyxAGsuxfwVh9OOlhE6KcFPDZNV/3RRDJdlkZlm
IHEmxmkSTkhhhRZeiOEdqWVEU2uh7DMKErE5kA0Brjiw21GwOOMbbcZE0JRTwhVQyzTWZIXjLD/V
kstuJvKwgnTfMVAQPD94E44KzF3Hw3QNTfeWCRWIQA4P9Mi0Wlxk6eSCCQHtgCRz1IxTAWCsDYZV
Yw1ll92a5+Ag4ENIhCjKZJ7kpeAVmGm2mUgZ/glooIIOSqgeWWTEmoehIJFKKgHIZpRsJMZyYjyv
KDVAME/FKBwzNOYIaqi7SLcbLrfIQk2Vz70pT0JAyBMmD7kshJCVcLWnKgYLREkFCgJ9t2tro8AS
Tq44mClYALjAKSIRAbCpWJwCEoxYIGAH3gnXggx2tBmEhX4LbrjijjvahlfcSZENkjr6aKPr9oQb
vLBsoExTHAi3ab22jdqcjl51lZVu1TQnMC89ClnOdwfPyoKpszJHq3swUKCOPMt22aF8tph6TgC9
voMDOD3ywE8Uo8QjpwpwwolWs305G1kTFN3Z6ybacsQnSH6Sy3PPPv8MNBshAAAh+QQF9AEfACwj
AQoAbwFFAAAF/+D3NaRIlmdqrmzrvnBsqnJt3zeN73zv/8CgcCiEOBwoVerUgUCIQWdHRJgQoFib
Lsvter/gsEMgSJqX43K4RkZ+JmvwNk6v2+/Q9Hk5Iun3gIEzgiltJBQOFINLc4tzjJCOhHx9SpN4
mJmaeWQeRwEkHUcdDaIfHRRwHw5PlQ2IRxQpCkcOCiJHEAgOAaSwECcBtQilaaqIikYOng7Eokcl
u58psIkrkJHZ2HzajZvf4OE1aQ8fZAQNEGTA6gIQE2SGKWnxpA3l5gIbImTl8Q/xOJB4Eu+Dk4Jl
VK0SAbBfPgEKGniIRwZUA3pkpkjqxm2bx0viQooUl4aAA3gP0v+tU+lOwYZ1U05MFMCKA80GBMhQ
CJDx4QabVFSRgMMBgk0OHtpteAIPDjl6cAyNeWCEjMQ2Rm9unBTooytvI8OKvZPGV8Z27Fb+qdSO
lBFg8DaQOJcPCdqFfVa28lB3qACnK5rOvQnPDRkEbdOx2trVUmPHlMZKnhznT6uD7lgCWyszHoOI
g5E0EGzorh4F/SbgI7jKL+A+ghsYSg2PJl8yn1lA/sqR92OQlIML52HZHOa0mTmXgNAwo+ybo//2
NW2i3YMJ2Cfckif4T+zZAq5nl8WcnwCNvoFD3t17uPv3OIq7u6z5olVKHhC8FACKu/TSIjyhB1p8
+Peaa6E954b/K/ntZ1F6jPXG3m/wVWjhCmW9Yg56xCCg1n1s3feSQHElCGByVqFm0Ip5tfaGdN79
ZaJW67RDwogRpjfhRzuqd+GPIRnjQDnltDLBkCvxpM8TTIgQAHP6NLAfBQyQsd1NBAl4XzlFoTQY
Pt0FJqOCUoYHQU4CeDAFf1DuE6FXEOrIkY9A1rkJOfEo8kFzDY3QQTxunNCclaVQFOV0xq1yHwWG
XkBClVZ1d993N6FGkSz3GHrLm1z9RokOYNkpajhNQMBMK07ykpSpIiggBQvMHKGBCc/wUh0EpKzK
V6kmKAALXyKs+oSrt/D6AbEB4ipCB9Js+kGsDswqWaijVmst/w6RXSsHndp2ay213g7Bbbjklmvu
ueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAHLPDABBdsMLrgXjMuHQkz7GOPWlCYL7If
ICPSqywogB1o6kEMqxPA9kBxxhBsanHGG9/RcI47pPBMTAunG1ts4sizAoEre3zzSj7QLKYqPgfI
cx056xxDCncVfe2OM0vnTWRQSxiJPCi8/GkjPAKSNISgxqZC00IxMUqcLswpcbZygvr0citJnePV
MfODSxfr+UGkAx3Aod00rdbyLB/KMONMLSoI00x1tQSgppAqWJ3LLr28kgsurDSbgjTL+GGQKAHs
t4GemBOjGP8S0nhw0d2DIFlO3m/Qwksoo1zESgfCiH4KIr6ysgQsfsZ+bC2gTS47MGbkrjsJ0Jo+
PO3NnMHMkwH2gbnyWcOptMrdGPpinx+IXhsZAqmApzncg4amQw14WBBihqpAIEMF9Rl+PwWZrlGe
g9n0HxlOIQRKGvs4x3PiwaTB8OMde6IIMbL0HKD0JIHhAYhoTpCGiCiJBIOSC5k2iIJ2xCMiHcBH
PPJXEPSYQISrOYV5BICp6qXtenaoWzqIZKqobMAYBjmM+m6hAofw40jmIJ05CNAOWXCpKs/ix1Lc
NzR9OJABYevHEUSgCCLpJzwGvA4ClBSAKz1JgEJqyAzNRL3/MVLFAzbEIQMBhSYkMIomaZggCSwF
ipxMACc6URIpgjiCIKpgJhtQH2CogibTFaSNSfjTB0yiiifg44opeaGn4ia3uUWPCF7Rm1/KEZ3+
wSE6V8DQpN7Qx5tMRQQ2iWTFTmENDrItM3Ojzx/IsI9MBXCVKiJGP5THwGcgKEMxuiMjFEJKTgpm
jYcyRCrhJ8fByAUeoChRPtDhR1d2ryeQqpjuCETLBK3gjVPQE2sUkUuu9QiGeMjkGxDUyQ/oTxVO
M0EwS4kEm6hCDw0JJArmxkRYLkSWKzCQiloBHnQMZGjpe6d9yrBQdlICaKTsZH1wMSOgQWcGL0kJ
ofj4ojtW/5OP87iPEqbQEGDIw2a4uM9lBiq3ZnJKYejE3m402c521kZvi3TFPMmEU0WVIW/ro+dX
3vfP6M0SOnpLGngWlDR6AOSOfwgmJHqK03be5aSE0UphzPBGdXCSo6S5KHRK8AeX+aOkG0SpTw9q
EKUuhAYuJNtYOELTquLUa2fYKR97WtYzgU+o/TQpXowaUKS+wa1IoNpd6IhGGUV1UmMaBFUjekzj
pDWrbtrqEv6kjyhtMKyiqSZZVTrFVLpqJVhdUEr7eBnESjJb7QmL2kpA2Rng1J4jcAoazMFOPp7S
nTIKkIYYStHAkgmgauimLZ9DTtS25qCZUZLpJMXQtUS2Ev9gy62MkCkaQ2T0WVRLAff84qaCJnGs
IlDfFPQgQG5CR63gXOWKdNKATRWQtnGVq1hm2wD94a2upHwjAgQsPttGlI+KEAAB3giKcixlHyLc
UzOv2hoCHZUmbjLinhBQmwTNkX8U6KogG0pioOBtEP5l3Sc1SdTu3kRJqgnvCc6nvHxQaaMSNvEf
z1EegTg4Kwa5rGpPwT8kreiRYYNrbPUr29mqzx3Z9UAGabBTeQzqAXw5H30/ACniCi0zpeHZfei3
y/QZClPhbcgEpBwP6vrhPk9GFQniDLb6pFYiDeGABCFhHSYYqpbn6xN+F6mpBijpL6h9r1ZWsJ/w
rOTJW+b/r9kGPS203cpUFKNYUo5guxUYi2IY84DhMkeCURPvWU6QM6pZ9SpdncIJ5mmGqhDH6VuZ
sFTFEoapYG0sY7WVVSxItQcyXbJV8wVjUkAerDX7FbrQKnErKB3Ggm24kEFu2MpCtrJaIAzFgSxA
wxCXpfcb0zhYbwhqXVp0yjET0c0DTZ1+17jJTWl6l/sF6f7WQv/BG37P694HE4LwylUNPbUgFgFP
uMIXzvCGO/zhEI+4xCdO8Ypb/OIYz7jGN87xjnv84yB3TxVCWYNUEBMHvl6Bq2FK6YHvwNVWCznE
gwYD5dzA5jn0Z4TyXYO7bE3mDT9Zz6fYA5z/PE48l4HP/xEK9IWfrFYnDjY0rBbzgr+iNiwaAQQ8
pycPwOJBM2iD5dKLC7AHiOtoMRwPDT2MgUBjFxIhOsfM2ZF6N71CglHAoEguz+ro5UMUYR2gKoER
OED6FIyAXzz4MhN+mL3wBEGh1h+yIgCuEyNYnuS57/4eweSEKurTzYAsm6WZ1IQmLoFJJWhnji5y
dgLl0WAhKLdlcLuA9R/oYiu4ZFmiZEUgUCGA6aH0IBlunvPuEYw0iT6D0WcGLYl5C4ldQZ/ESNcV
ygXIPpjdvWBHjyDJsOz3g+V4rd9nKpo3GvIn43kQh6z5VmEgWmYigM9QUKRIi94F6zN7N4RVPJbk
dysif//GsSnXsRppoDwwFmPEZXxMtn7CIRgeoGV8NwLOhxxPACX1sFZDZVQqZVn9hyC0gR0Gd0kZ
mChZsnvZsTciZQwKkX74ZXcQSBk0owABMF7yFH+kxzMNUhEkZlzyQTwlYCB9MQfVh4LGQR8hxVDT
pxsxCDcsM4NjoXw3wVnOYoE6KAAdUiMi4k7Tl39+dx6GxlvY9wEapH38EFoucITPV4DjNzdqYGjn
t12JIDWUJIWaIBgZBQF6dA3OdyQlxVlP4mBjaIb3VV8iMAEU8HqtED6ztwpTYoZ7klNJtAKboogE
mBlHBAflUFacxQpgNCZ191J4yH7SAWmHAn990CdoNSiTEFEo/CRe/ENoBcExJ6B44cEXzlJ7M+AP
sIeEmWFwZOAoZVUm/2A6YyBMo0h3pTgZFIM5JZiDxNVtrgYtGnACrrJtLuMEJgM8TygF10YrljNo
pWAQCnBsjGcQfFFfvxIKTuA+3VYCTWCLt1iP9niHzTgSSBKHNaB+9yKD+fge8VCBR7Nk+HKPAWkh
fIMt86YvJRACACH5BAX0AR8ALCIBCwBXAUQAAAX/oPIpzedBkPetbIt2ZSvPJyTOeC43/No4Dohu
qIDAhqvOi4W6IZFK4XNKrVqv2Kx2y21NBJMSRCCQ5siOGDVAFnRbvFhJkMZ+68ixgLNSoLNfYR8O
ZG+Gh4iJiossgWJkZjhoalMcbU5dcT4TExSAdFRfAioEZCp2YCuEboytrq+wh44NekINUTZxkyIK
NTBxPStkDwIBMUW9KCVRTkVLt8oeCLRGwE0fcbgkPHcrNcozCGSexBstuN4oKjUnxA8pqx8okbH1
9vevs1K2xG0QPG7SfHnQT8A2YPLcsBH0YWDBDf0eJGnxAMYqT4Lo8CjFIk0DcW0eTGvQzYO5jjjc
/4GUoqDgqIRlYOrxt2pDG2P4curcqWUgEJvyPngaZOkBQI2iOJFhAKwHoQl6eogSIHEFwT4fzD1w
IHHDD2Fg5qQB+aHqkayrPN75SqcUKxkUyAz05o4rqFoy7W7tsOrBVJ6AAwuWMbWNPJIfCDTw4IbE
pLkfivbQJDGNm5EDPcQwt4/FNJBsT4pFHKbDBzodOJ1quIJCEMTmSDJswbjNULxuZeqetUpIvMHA
g99LOqHfP4kTgARs8DjVIDcITayYRkwx6zAx0uwzjfbk8w/cR6vC9mxxAORNG5x0EB7HqpdCC8nE
i5e3/N/C8+tXpM/NP1aGWYaUc6ukNxQCEEh2Hf8243UGFk0+RKjReJp8gIAlrGCnCSYPDEXDUh3J
Vwt9kDRE4H3y7afiij2FJRNzg5QATHOCFNjUSW24YdosDa5ATws2MjhhjNR0wN0GEPAIRwB8lKXD
H6qICAmJMdnHCn4sZqnlEP0dtlxDEzg2YFUcycGDO5yIghFr2QUlTyQKcPKdHKelIZFiYg21I5vA
ENBJUAK01wKUFpoS3yhUCmFllG7UsOWjkHYpBB9hgARDcwJQoAcHTfmRaRwSUcpmj4DGWGaQo2k1
wmkQsIFNbRrGwQenIhh0Bih9kKGYOzAhiaGikHjwWzxRQWosi5IWyoIAXjE3YI4CjBQHG2XEIcr/
gm12xgBcc8pYJy2nFSIRd8M0FJ2rLFQlCa4rFBatCdCWSG0ZwxZS7LH45ucaBTyYxt50fk5gDA9A
/BMIBZxIGwcCQFgDhAf7YlOwKv9+EMAGnOzTsIwF84BAwASccmFyCjgwsBoNBDzBBqvNMDELJqXp
YQccTMBByRUDwR4EG/OcBl945Cv00O06R/TRSCe9opJKN+300/b4aR3UVFdt9dVYZ6311lx37fXX
YIct9thkl2322WinrfbabLft9ttwxy333GJr4woKFZ8DhKBYsEPEPHzTTXSFhA9W4XttbJtIB/7s
EO6PU2iCFzbBWAtth5WrOPkh0WlNeOaCHY5G/3GsJmJTGS1jE2eYWUheIuVmkkSVn4VoluXmhnSe
9eeUhB5MPA1QW8c3kPcB+AwQuJNCFCYg4PcIx5ugzpunUFPE67zP8usy82Aiwzwp0KBOEdzNcwrx
TFRDPnjUBuAEOtKH76EOul+d3v0s4A/H/brjzz9CwNODR043icLlqCL5c1bjxgEGIcSEcSEhVzHa
wAf1hOt0tuCflf5Rlhxx0AeLwRAZmgQ7PRDQZrZZAQGh4ywCRERYOQpDS3KkAj1Qq3cg1J8Ok/a/
HhYuhz6EHe98CDxzGOQWbiCAW35xjDqdJIMEqwtfAAQVH2WlLHbhjDBIZ5BT+MU4QmyKIzzQD/8e
DMUBfDCKmVzlgGvlcCYuEQUfuKNEHSmwOGQIAAROsgEKeNEu2gkXEPfnwx/ysJAy2mEYEYkQRiKu
LJ74iholcrLprOx3YbRSsxxohs+cxk2BlIelglei/11rGNv4gmJqcxCpGGNycdADv1YBA0cQYpIW
c1ZGYtQZTqbsk1J4gGZAx0hDHjJ2QBwiIQepiSE2s3K/kwsrhKkeqgCBGLGC3RSJNBkrmQZcMSHD
BhxgRBRYUWMshCU0ZUcVCp6pIcrhZuX2iD0e1OIHLHSEquwSBigtZ3KFAKc5P/XDRj4zkcREmjIP
qsOFTmadi0xgdgLqQK/85TTZDJ5LPBKMRZH/h1UzAdBAhYBOBqkzdlbiF4AKUYc4eMCF4YoJCO9p
I0e4y1z+5GWJbMRJXxZ0nUF0mkMR2lCILhKZRWUU5TAqu4wGAyTsWU6FPCrQe7ouKCV9hEyzl87l
fOmopXhAAFaSQLzUNCw80gWu/rnTrpbBp8QEanSMebShRnQGdh2qMoGnArSGJWWdqJCqPsnRGFC1
pz5qwOrcRFIfuUoFZCUfSlkIVRjVgROtbEA5aFFPzgblrGGYhZ9UuladxgQkmvEEokpnz/AxM6lP
y6tRJfpaoh71qBOlAxq/RS0PmIagMRCVADPJpt8ItE1hZSxjPUWAJJVoLTn0iV0OQ6mP2BF2/5N4
HBw6A1pSmgCCpK0DWxOjgFrtyklw7exD13tXpRVTkbJ9LwDjRU0ITnOYMQDJfYiLHeP60i2s8EQv
rVgVD5qosNwoRBuapV9xrpcB0+wsd/NpLglSRTM59Ygb/CqfaaR3q/Klmnzrh9vaGjSIPtNZAFTA
g5JxImSLDEDCGKYwMzogkr5hAdB+cbGMLWNv4AGyB2p2MyC75h9NcY3ObqyJj3Giki71080C4ABM
3ALIPrPxUFw8gZAR7DWDeA0tgMCvmDWEX0EGz1LzVmL4utd/csVBfDsH57iy98TJlCvKMndiPOPW
ziNGKkPlzOf+wbfOfjZmURMqOMMxWqjrxf+hmxtN6WViLajtrbSmd/BoSNP105sOtahHTepSm/rU
qE61qlfN6la7+tWwjrWsZ03rWtv61ibOQTbMWQVFtzgXT/h0eQhpW1y3DdSExFKw7alepuk6c/5k
F7EzbeyzIVuiykZCLJtttCEYcK3Slmixq602Z0qaYGRYjDrUnYJfv+AW7RMBMALhix6gryknEOd/
UFMebfCghqk13rvzTG1yDy7ShoxDgR43h2pJoXaIi5XsrtIHHqwQwQ4M6ApESE3NLos8Cvmkfcty
hBAbfGgMTTi6heRw/zgrjcWgJ7MiaTkwiEIxEKxjoIAxRTAIqCH9MEZciEIVzsqnmlvZ7J//J33y
Rw0a0AuHRMNRQAYYIIxfm7OcGiVzS6sUA5oFlMtRBCKAVZLhehc+ymdYONfZNl1oKT/3yqc+dQhO
QGFZT3B/022TrfAT7BpxloZBgU3l0EGW/XLDOIGCZHN3+u1airvco97yaiGOA5rJe1PRLQB2xhDw
gw+9IGMahIA2PKbVcvzjIc8i1Sdhb/hkOQelrlgXjsPoZrDc3juvpM+FHdwCwrjpgdm7ObPeWJJX
gx6mUaB7AnN1CfaK5geykXSLNrBm+r3oC4hZqxIf+jXYs6Dlfnz9JH9QzEpe0U2YIP94igSW4JQe
CHADTYxjU6QcBXjTI5d9i94SlVJ1ViV4himzfmzXZqtXfsBxfo2wUtPQVw/yQTE1Em3AEAmWItNg
X8OAX7KicUTyB2RxGtJneg0AYS2AdQd4W9emgI4WO8QUMz7WL0SGMzCwOgkTS2SWQPuCMHfXA1zm
ZekBNHggBS/jZALTL7DXAz0GFT8WNCZGfiyILyQWhVT4BlNYhVjYOgmYNiEAACH5BAUyAB8ALCIB
CwBHAUEAAAX/YCN+nziSaGqqLGuebSy78EzX8Yuuds/7wKBwSCwaj0eeTvYDLpFMnFPaWj6FSip0
y+16v9jT9TZ8aaHNYDo6Gk/bZ7B8Tq/7xNnfynzmk/wlelZwgTBNgHlUOoeJhXyLcXaSk5RGjY54
j2uYmZpwnnudoqOIO4h+kKCllaytrmyop6o3grOqobeynFKyub6Rr8HCc7+4u7yff8apx6bFpMpV
scmp06vD2Nlez9zK1IndzbXIm86k1uLl2uvsYZ/ha93w3+bx197n3PTt/P02jfbQqdBnq8ayggPd
1DtGMJ2/h/4AQrtUjxnDg4a+CayoZVw6jSAhiuwn0VrBceAw/168eA2XoowgCaobSdNVyUEIn2A0
Sc+lz4AK8XFkOa+m0VaXdJ2EiZPoSqKb7gnFxxRnUx4QskJQcLTryJlejRIQQJYsASFkHYRdSwcs
W4gIyG5w8IAsWgFq3+rl4nYvv7ECSFAgCyGF1g4qPECQW5iE4qwe/EqeTPnDBAETSHRw4ADxB8Bp
VSwuG9gDB9KNK6tebZRsZhaDBWzYQDYyis2u1dIWwODya9bAg/Nz/YECZweFfX/wQDYAi9AfQscV
wFW49evBiF8OXTevchWhOxAmAR27+fN1zBZ3EBr69xShRzcuj76+fSjEyeONvt8y5uf7yadfXvcV
aGAQ2znGnf8AZ31QV4Pw7cecAAh8IB6FB2aoYQyAbQDBbmqdJkAH01UIHmaFueYBYLZt6CIlUm3h
hhsXltXdB6PZ+ISIgbFHGoQvBllHTknMuEkHHEwwAQEQIEcCAkpOwIEHT2zGGQlqKUlAUPxwKaRI
RFpiJDD/zBQmO15++VBSXK4iUz5UxcGmOm72Emecb5Kpph1zRlVnnkUl9M6dgo65VD4N7YnNTWMc
2lCghaaEg6OAVqqoMEVRJJRVTmU6z08chbQTVA5dygqkHyFaqZyQlmLRT6LuFKOpkzAK1K0oJeql
rZNSGtOor55J65BVsdqSqmlUoykZpUaaLLDk4MmTnsPKwav/QRP1yYyysPY6qKagbpptrN+iWq2M
n5Yb6rrdpiuPuqnG226q1J4rpruGrrQqvZLS0ii06FyrU732FmHGBRdo4MwFFhggjQgIK+xssSZ4
gDCV7Qb7R8Q/GOCxn3547HCw78DJ7VTNFvyFBBKMnIIBLNvAsstEXMDyBR/YLAHOK7fMggUSWFAE
0ELLQLTK1rFc9MsWLB2D0kfojLPUYECtQtNOB4H1DEcjPUkHF3gGNs8ahM1xzmFrlvDZCIudsAoz
l32BbXKnELbFPMd9sdqIlY0Cwm9rAHPLCN88dotjv/1B3RaTAPjcJOgN+eKKL5dw2Z6hvTflEuON
sONEQy53/9qWQz5y4hK3MDoJjPOccwd4Bwm0BJGzrDDRUGvAMu0fzJz77rXT3HvQu/M+u+O7D177
7DF/QDTQDjPvs/QW6Mx80boXH9ngMAs9uNVKF09C19+TX3zRR3sgvcPF7zz87lP7TrvOu7d4m/Tb
+y40/cq/2D/8zmvZ0ehXOw0MEHjDy1ztgjY7nPVvdsxbYNNuFsDdVU9px2OY0gxAP+Yh5nlHo571
BocYCzYwgELzAAahNkKWfTBoH+De8b5nAMHNLIPtG17DoJeY2XGvglCDIAJdlL3CzWx4F1De94wY
w5gtUWcsAB8Mj5c9h/0Phjqs4MjSd0Sq6cxhVKMgFAeHPv8sNq2EWAwiDAd3uzU274wojKPzykjH
5bjQepHRmcIM0DAVUG2GVqtiE3n3opl1L2gqpF0HbIc7j8FwkRIwIPEcmbXhbdGNtBtc/Hh3xDge
L3jjg6EXxXiz7O3wZrOzDRlTZ8lQCi2EzeveIC3ASli2rJZpDBoflfZF1vEyBv2TWipJoMmcNe9F
z2tZ0GxWNFQqc4LN3Bn0GIjFFFjNlsaUQB6bd80pVrOb+yOl+6RGv+Il8ZjqO9/yXOlJM8IwnRZk
pyQ3yM73FY+DFCTm+ew3SOTtrH/Z3CYhXdQ9oOnQnURb5AR5hjsLKBRorkNBJ4+mPJ0JFJTtXNpE
RSnOTRr/MaIV9CPzFLbRV7qxaLIE3e7auLRdvjGXwqPa/Xx4teYJ85gWzaaQOohCnw0ShsWTWPns
qbDYZbGdiqTgFevYNTmysKPZ/KiFmtZPYlI1kexDaBwHFxmKXvWIIeyjHp1qxurJtANUjSPmAtpP
gELSgccsJNS+5xn+AfFvyburTt93Tp8tNYJ8/WFTUznKoJUNqmqk3Sf7idXAgpWj1MSkHafnTaFB
8oU7S2c4I3lWF271kWo06UBXGFcX0ZSAElWq1RYIVyxC0Z4rDSkQP9k+28kxm/GUYGFxJj2/HhOS
2oOtbbt2PdC2r6uYzO0T27dZ19WWt+40Z1VDGb6Buohh/zW0akQ9hj0+bpePrPNueFFaPazVFbza
fa13zUvMj/0NaxZoURIbpr7sCi6+Vm0az7DLNPbGsLxwjKF7PcBHSZLXvyIbH3wx9t/sMqxpI7sv
4uC73wHDd2T8ZRoT++K1LaCVltOlDB/rSAQOT2whPviwBhqgPBN3+AjZI141RUxakL7BYLjyQYwh
mLIXb+HBEAbOiPV7L32d7MTiAHLDfDUvH794XvviV8kkNS0nP7lcU2aylh81KyubKmMAE9dGxCwt
c3n5y1h2Fa6y7C0yW+rM54LymN28ZTCzmWBwts+27CwvlTCrXxPDc54PtOc7h4vO++izof086C9Z
Ss3T8iFWld8l6EZb583/irS/qAwqYVnaQL3QlZQfFjBOodgEIQAAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: http://media.collegepublisher.com/media/paper285/stills/j8if9t47.jpg

/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADpAV4DASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDysLTs
CnAUAV6BzjcUuKdijFADcUYp+KMUDG4oxT8UYoAbijHNOxS4piGYoxT8UYpDGYoxT8UYoAZijFOx
RigBmKMYp+KMUWAZikxUmKTFIY3aDSY9qfijFIBmBSbafijHFAEe2kxUmKMUDI8UmKkxSYoAZikx
T8UmKQDcUmKfikxQAwikxT8UYpAR4pMVJikxSGRkUmKkIppFIBmKKdikpDG4pMU7FBFADCKaRTyK
TFAGmBTsU4LSha6LGNxmKXFP20u2nYLkeKULUm2jbRYLke2jbUuKNtFhXI9tG2pdtG2gCLbRipdt
G2iwyLbRtqTbRtosFyPFJipdtJikMjxRipNtJigCPFAAzycU/FGKVhkeKMVJikxSGMxSYp+KMUAM
xxSYp+KTFADcUmKfikxSGMIpMVJikxQAwikxUmKTFAEeKTFSYpMUgIyKTFPIpCKTAZikIp+KSgYw
imkVLimkUhkeKTFPIpCKQDMUhFPxSYpAa4FOxTgKdiuuxy3GLlTkfSlAp+2jFFguMxRipNtG2nYL
hEI/NXzg5jz8wTAbHtmmleuM47Zp+2l20Bcjx7UbalC0baLDuRYpdtSbaNtFguRbaMVLtpNtKw7k
WKTbUu2k20rDIsUhWpdtJtpDTIsUYqTbRtoGREUYqTbSbaQyPFGKk20m2kBHtoxT8UYosMjxwRgH
Pf0pNtSEUYpAR4pMVJijFIZFijFSbaTbQBHikxUm2kIoAjxTStS4puKQEZFNIqUikK0gIsUlSEUh
FIYzHGaZipMUmKBkZFIakIppHFIDcC07bUgWmyOItpI4JxmutuxxrUaRtGaYgcnn8qfLKqpkg8en
elt3eQAlMKeQc1PMm7FpNK44LS7KmCUuyrsRch2UuypglLsoC5Dto21Pso2UAQbKTbVgpxSbaBog
20hSp9lJtpDK+2jbU5Sk2UikV9tIVqwVppWkMg20bamKcUhWkMg20m2p9lIUpDIdtJtqbbSbaBkO
2k21NtpNtIZEVpNtS7aNvNICHFBWpdtGKQEOKMVJto20ARYpCKl200rQMiIpCKlK00ikBFikxUpW
m4pDI8U0ipCKQikMixTSKmxTStICIim1KVphFAHTBKbLEWjIUgH3qwSqnBYZxnHese51QhmjQ4cH
AG0kEf41vOpGK1OOEZN6FaebyrhYkBKscEL2NalnbFFBDgjpgdKwIlUXQ2H5CfmJ42//AFq6qxNu
6bICpI67Tn9e9Y0XeV2b1bqOg7ZS+XVoRH0pwh9q67nJcq+XSiP2q2IfaneT7UXGU/Lo8v2q75Pt
S+SfSi5SKHlUeX7Ve8k0nk+1JspIoGOk8ur5h9qaYT6VNykij5dIY6u+T7UnlUmykijspNlXTF7U
3ysUrhYpGOkKe1XDHTfLpXHYqFOKQpVox0hT2ouMq7Pak2Va8v2pPL9qVx2Kuyk2Va8v2pPLpXHY
rbflxgcnOe9N8urXl0hSlcCoUNGw+lWvLpPLouMq7TSbasmOk8ui4WK22kK1Z8umlKLhYrFKaVqy
UphWlcdiuVppWrBWmlKVx2ICtNK1MUpCtK4yArTSKmK0hWgCHFNK5qUrTStIDojc2hkjbYWd+AQM
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
RRQAUlLSUAFFFBoEFFLTe1MD/9k=

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://admanager2.broadbandpublisher.com/storyImage.adp?iStory_ID=2791719

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.thevarsity.ca/media/assets/icons/alert.gif

R0lGODlhEAAQANUvAKh0IdqnKxgYGP/ghP/MM/7KM+yzL/vGMvO7MPa/MeWpLvfAMfrGMtydLNiX
K+etLt+hLfjCMu60MPC5MO61L/nEMvzGMtORKuCkLeesLumuL/G6MP7KMuaqLffCMe+3MOOmLfrF
MuOnLv3KM+uwLvzJM96fLf3JMvS+MeKlLvO8MdmaK/zIM9aVK9ubK////wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC8ALAAAAAAQABAAAAZkwJdw
SCwahYHA8ZhcFgMDAsA5hEqpL+voMHVCBYJIlxkFJybj56AARkjS1SgL/CEp4NnBKQQ2ZFJwUAUW
HioUGiIQLmlQJRUoYB0YDQ5jUBwMCxsGDyAmKy0XXQEApaanplhGQQA7

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://admanager2.broadbandpublisher.com/newspaperBanners/showAbanner.adp?vchSerialNumber=76680e2z33&iSection_Id=&iStory_Id=&iPaper_Id=285&javascriptIncludeMode=0&iPosition=4

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://admanager2.broadbandpublisher.com/newspaperBanners/showAbanner.adp?vchSerialNumber=76680e2z33&iSection_Id=&iStory_Id=&iPaper_Id=285&javascriptIncludeMode=0&iPosition=5

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://admanager2.broadbandpublisher.com/newspaperBanners/showAbanner.adp?vchSerialNumber=76680e2z33&iSection_Id=&iStory_Id=&iPaper_Id=285&javascriptIncludeMode=0&iPosition=2

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://admanager2.broadbandpublisher.com/newspaperBanners/showAbanner.adp?vchSerialNumber=76680e2z33&iSection_Id=&iStory_Id=&iPaper_Id=285&javascriptIncludeMode=0&iPosition=3

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://admanager3.collegepublisher.com/runtime/noScriptAdImpDisplay.cfm?iposition=2&ipaper_id=285

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://media.collegepublisher.com/media/paper285/thumbs/t_9813y0l7.png

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
NlQbqg21klpJrazR1+hr9N7jvcd7jxdmYnMn5U7KnWRT29Q2tXSCdIJ0giRCEiGJsPvb/e3+KrPK
rDLT2+nt9HbpY+lj6eP6J/QET/D8D2RCsIMdWAiCIIiAEXADHvG3sQ2nEc5QBOuITSgD/bTO4o/z
RdxHXoRuKN8RRTTBbxUnIalpOqOw2/kzfC/eC1WicpTHfGXfcZnkbqIzsRS/Iim0kRqM/iZa6RA7
Gm48a/XhQs30sX91sLTRBNREdoqwdrjqGW2EyqUOLvhhDpPVIDkEAP4AmHMtUbozbArrhR/zC/ie
fE9iFNompjEJAI9xnzyFtSzysfKm/2x5ED3ZcSkA+KHefBQfRlwnvUkAmL5sxta5U5e4/fm96ELJ
tIrJOsPx1COTk4632fpww8++1o/gxM0gbuoWGSaH3G91u/n5e65Xui1OM3f/lJNyKHFzhdb8ibOY
xJl7oE+Dzk0oWTujyp5n3VXdurxHmssT23vX7InZ3fO2TWi1oMO0m4+GXGl8sI/4uXw88UhyV1Xo
3EAUA5WWZh4XvIK8pH6WoNDB62gC9XE80mba0BYrN1/59qTg15cY7ybqDtPocqvVtEOGpG1F0fZV
3Ae8KO9TxTjrfWSE9TCEaE9IybZ4DezFD4hjxHdiGveSvcsd4AZxE3lF6d/WEnbI+Y76S9LLzlud
ppmqNw05TZ61KPUNtgXYfO9YNnJIOUQ9Uj6fy+VyuVzYi67DZqIfcYNoJWj2JI4SR4mjUDIRKpPC
dKjgdMY/55/zz2WrZKtkq6TDpMOkw2QzZDNkM/Q+eh+9j+6A7oDuQPip8FPhp9BJdBKdJIeSQ8mh
olOiU6JTmtGa0ZrR+lP6U/pTaDqajqYrqhXVimq6Hd2ObuekclI5qWq+1Hyp+SLIgkgtqSW11GHq
MHVY2JjIH/kjf6RESqRUL1IvUi/CKTgFp1i1Vq1Vq36ifqJ+InkneSd5J1gPk13JrmRXryKvIq8i
4hRxijglShOlidLI9+R78r1okWiRaJF1uHW4dbjUWeosdeZYjuVY0R3RHdEd7RjtGO0Y+xf7F/sX
1AA1QA2sA6wDrAOqqquqq6qVicpEZaIwgE6lUClUSn3sCB4z/+P6l4Aw7Hv2CPsoh8mJyJGmN0qx
p4WP9Bq1f+QpCpObqALiDBqMckGDz+M9RDn4oWn0WnQT7ZJuJOYRJD8MYmCnxRObuB5mD24Lt99+
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
d4cb6LDItZXjD6PMMEB0yPe6b50yWk/qCtnE0soSVF2JclAleqR/wZxnrdxRbg03nXAlmhLJsBV2
oXMQh8t4O5oA08GViCcfUPtKPxY/0xeUXC84yfkF+EWM972UuOrt+XcjHToqO2ozG0xtcLaBlnFm
KKbHpdRLqZdSX+e+zn2di2RIhmQ1TWua1jSNqI2ojaiNOxN3Ju6MWWaWmWVHs49mH81OW5S2KG2R
l9nL7GW+1+Vel3tdmEXMImaR8xDnIc5D8k35pnzTpE6TOk3qlPMm503Om2t3r929djdiYMTAiIHn
R58ffX60/r3+vf599I3oG9E3sjZnbc7a3PVS10tdLwmCRCGbER+Jj8RHiIM4iLMWW4utxegQOoQO
qR+oH6gfuDq5Ork65U/Pn54/3Y134914cjg5nBxeF1wXXBesZbSMlhEfER8RH5FNk02TTRNlijJF
mcgduSN3fbo+XZ/u/8z/mf8zqbvUXequ66nrqeup1qq1am3d2bqzdWe177TvtO/ks+Wz5bONc4xz
jHMUpxWnFaeZZkwzphnrw/qwPgIgtT52ylE5Kv9PHEcloAFK0ESjajQF1hAZ1AZ0Av8gYvhOqAt+
TkbgxxABnXAvLhXe4hwMcIv/xU/iF9vDeday3PjK9MKwF27gN/g2fAMX2Muu5BLYVa2rW8Zpu+qf
2/9Y9Z9FnxKq7hEpxBRkRXUoAAKpG9RY6h6xjMwgBpqzjJtMf/mNi2npnuby2HWdapB9qG02XkM/
pBUEi4/iSpzFb8NSlsReeC7jzb/GV2AyrMMfsAP5mV8rDudVXF/8ie/B97aNYFLt6y3jmcW81X6N
/5tPhD5wE25TjYkIZCLb4V28gmvGXWIf2y9z3ykf22PiFTFNtBgO83N4N2D57fx+vJq/ToTzv7EO
QqEDfw02wHzUBPnjGXCLeoJT+R9cNG4B57hu+BXrz8VTK8WjJEmBA4Lsmm3F54rjyoaadhhumV9l
ffwTWZf75NfzK5VrOQs7h70lypIUiJ3gJzwlImE4yOAtI7M1Y0lYwc9je84UjT2DQ7ZPOVSDosEb
ZkAhv5Yfws/E83BP3A/pkAsiuRh2O3cFfqAA6EXEE5eIddwAdhu7kQyjTlOnSR+yE73UNsb+nCUN
TY0We67NZCuzPAQvpRe0BwWooRyOwBE40u5Juyftnggle9lu2W7Z7rqRdSPrRgqqAu/W3q29W7/r
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
8b+MvwIL5Sp91rpmMwAAAABJRU5ErkJggg==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://admanager2.broadbandpublisher.com/newspaperBanners/showAbanner.adp?vchSerialNumber=76680e2z33&iSection_Id=&iStory_Id=&iPaper_Id=285&javascriptIncludeMode=0&iPosition=1

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/css/global.css?v43

BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
A {
	TEXT-DECORATION: none
}
STRONG {
	FONT-WEIGHT: bold
}
#cprightcol A {
	DISPLAY: block
}
#cpleftcol A {
	DISPLAY: block
}
#cprightcol H2 {
	DISPLAY: none
}
#cpleftcol H2 {
	DISPLAY: none
}
A.subnav:link {
	PADDING-LEFT: 1em; FONT-SIZE: 11px
}
A.subnav:visited {
	PADDING-LEFT: 1em; FONT-SIZE: 11px
}
BODY {
	MARGIN: 0px
}
BODY {
	FONT: 12px/14px Arial, Helvetica, sans-serif; COLOR: #333
}
P {
	FONT: 12px/14px Arial, Helvetica, sans-serif; COLOR: #333
}
TD {
	FONT: 12px/14px Arial, Helvetica, sans-serif; COLOR: #333
}
LI {
	FONT: 12px/14px Arial, Helvetica, sans-serif; COLOR: #333
}
H1 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 0.2em; PADDING-TOP: 0px
}
H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 0.2em; PADDING-TOP: 0px
}
H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 4px; FONT: bold 18px/1.2em Arial, Helvetica, sans-serif; =
PADDING-TOP: 4px
}
H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 10px; PADDING-TOP: 0px
}
H5 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 10px; PADDING-TOP: 0px
}
P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 10px; PADDING-TOP: 0px
}
.smalltext {
	FONT-SIZE: 0.8em
}
.nobottommargin {
	MARGIN-TOP: 1em; MARGIN-BOTTOM: 0px
}
.graybox {
	PADDING-RIGHT: 8px; BORDER-TOP: #aaa 1px solid; PADDING-LEFT: 8px; =
BACKGROUND: #eee; PADDING-BOTTOM: 8px; MARGIN: 0px; PADDING-TOP: 8px; =
BORDER-BOTTOM: #aaa 1px solid
}
.note {
	BORDER-RIGHT: #aaa 1px dashed; PADDING-RIGHT: 8px; BORDER-TOP: #aaa 1px =
dashed; PADDING-LEFT: 8px; BACKGROUND: #fff; PADDING-BOTTOM: 8px; =
MARGIN: 0px; BORDER-LEFT: #aaa 1px dashed; PADDING-TOP: 8px; =
BORDER-BOTTOM: #aaa 1px dashed
}
.smallnote {
	BORDER-RIGHT: #aaa 1px dashed; PADDING-RIGHT: 8px; BORDER-TOP: #aaa 1px =
dashed; PADDING-LEFT: 8px; FONT-SIZE: 0.8em; BACKGROUND: #fff; =
PADDING-BOTTOM: 8px; MARGIN: 0px; BORDER-LEFT: #aaa 1px dashed; =
PADDING-TOP: 8px; BORDER-BOTTOM: #aaa 1px dashed
}
A.button:link {
	BORDER-RIGHT: #eee 1px outset; PADDING-RIGHT: 8px; BORDER-TOP: #eee 1px =
outset; DISPLAY: inline; PADDING-LEFT: 8px; BACKGROUND: #eee; =
PADDING-BOTTOM: 2px; MARGIN: 0px; BORDER-LEFT: #eee 1px outset; =
PADDING-TOP: 4px; BORDER-BOTTOM: #eee 1px outset; TEXT-ALIGN: center; =
TEXT-DECORATION: none
}
A.button:visited {
	BORDER-RIGHT: #eee 1px outset; PADDING-RIGHT: 8px; BORDER-TOP: #eee 1px =
outset; DISPLAY: inline; PADDING-LEFT: 8px; BACKGROUND: #eee; =
PADDING-BOTTOM: 2px; MARGIN: 0px; BORDER-LEFT: #eee 1px outset; =
PADDING-TOP: 4px; BORDER-BOTTOM: #eee 1px outset; TEXT-ALIGN: center; =
TEXT-DECORATION: none
}
A.button:hover {
	BACKGROUND: #ccc
}
A.button:active {
	BORDER-RIGHT: #eee 1px inset; BORDER-TOP: #eee 1px inset; BACKGROUND: =
#eee; BORDER-LEFT: #eee 1px inset; BORDER-BOTTOM: #eee 1px inset
}
INPUT.liquid {
	WIDTH: 95%
}
TEXTAREA.liquid {
	WIDTH: 95%
}
FORM TABLE.form_table TD {
	PADDING-BOTTOM: 5px
}
.form_error {
	BORDER-RIGHT: #cc0000 1px dotted; PADDING-RIGHT: 5px; BORDER-TOP: =
#cc0000 1px dotted; PADDING-LEFT: 5px; FONT-SIZE: 15px; PADDING-BOTTOM: =
5px; MARGIN: 5px 5px 15px; BORDER-LEFT: #cc0000 1px dotted; COLOR: =
black; PADDING-TOP: 5px; BORDER-BOTTOM: #cc0000 1px dotted
}
.validation_error {
	COLOR: #cc0000
}
.validation_note {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; BACKGROUND: #cc0000; =
MARGIN-BOTTOM: 4px; PADDING-BOTTOM: 2px; COLOR: #fff; PADDING-TOP: 2px
}
FORM {
	MARGIN-BOTTOM: 0px
}
.top_bar {
	BACKGROUND: #eeeeee; BORDER-BOTTOM: #999999 1px solid
}
.evenrow {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #edf3fe; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #999999 1px solid
}
TR.evenrow {
	BORDER-TOP: #aaa 1px solid; BORDER-BOTTOM: #aaa 1px solid
}
.oddrow {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #fff; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #999999 1px solid
}
.forumname {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 10px; COLOR: blue; PADDING-TOP: 0px
}
.adminbutton {
	FONT-SIZE: 12px; WIDTH: 85px; FONT-FAMILY: arial, verdana, sans-serif
}
#cp_pdf_results LI {
	PADDING-RIGHT: 10px; PADDING-LEFT: 30px; LIST-STYLE-POSITION: inside; =
FONT-SIZE: 1.1em; PADDING-BOTTOM: 10px; MARGIN: 0px; PADDING-TOP: 10px; =
BORDER-BOTTOM: #666 1px solid; LIST-STYLE-TYPE: none
}
LI.pdf_oddrow {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/pdfimage.gif) =
#f5f5f5 no-repeat 5px 50%
}
LI.pdf_evenrow {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/pdfimage.gif) =
#edf3fe no-repeat 5px 50%
}
H4.cp_link_underline {
	FONT-SIZE: 11px; COLOR: #666; TEXT-ALIGN: right
}
H4.cp_link_underline A {
	COLOR: #666; TEXT-DECORATION: underline
}
#calendar_header {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px
}
.calendar_dark {
	BACKGROUND: #666666; COLOR: #c9c9c9
}
#calendar_border {
	BORDER-BOTTOM: #aaa 1px solid
}
#forum .graybox {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 8px; =
PADDING-TOP: 8px
}
#forum .originalmessage {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; BACKGROUND: #eeeeee; =
PADDING-BOTTOM: 8px; MARGIN: 0px; PADDING-TOP: 8px; BORDER-BOTTOM: =
#999999 1px solid; TEXT-DECORATION: none
}
#forum .replymessage_even {
	PADDING-RIGHT: 8px; BORDER-TOP: black 1px solid; PADDING-LEFT: 8px; =
BACKGROUND: #eee; PADDING-BOTTOM: 8px; MARGIN: 0px; PADDING-TOP: 8px; =
TEXT-DECORATION: none
}
#forum .replymessage_odd {
	PADDING-RIGHT: 8px; BORDER-TOP: black 1px solid; PADDING-LEFT: 8px; =
BACKGROUND: #fff; PADDING-BOTTOM: 8px; MARGIN: 0px; PADDING-TOP: 8px; =
TEXT-DECORATION: none
}
.recordSetBrowser TH {
	BACKGROUND: #eee; TEXT-ALIGN: left
}
.hilite_table {
	BORDER-RIGHT: #666 1px solid; BORDER-TOP: #666 1px solid; BACKGROUND: =
#f3f3f3; BORDER-LEFT: #666 1px solid; BORDER-BOTTOM: #666 1px solid
}
#searchResults H1 {
	MARGIN: -4px 0px 4px; FONT: bold 13px arial, verdana, sans-serif
}
#searchResults H2 {
	MARGIN: 0px 0px 4px; FONT: bold 11px arial, verdana, sans-serif
}
#searchResults {
	MARGIN: 0px 0px 6px; FONT: 11px arial, verdana, sans-serif
}
#searchResults P {
	MARGIN: 0px 0px 6px; FONT: 11px arial, verdana, sans-serif
}
#searchResults TD {
	MARGIN: 0px 0px 6px; FONT: 11px arial, verdana, sans-serif
}
#searchResults .oddrow {
	BACKGROUND: #edf3fe
}
#searchResults .evenrow {
	BACKGROUND: #eee
}
#searchResults TD {
	PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 8px; =
PADDING-TOP: 8px
}
#searchResults TH {
	PADDING-LEFT: 7px; BACKGROUND: =
url(http://media.collegepublisher.com/media/images/search_header.gif) =
repeat-x 50% bottom; FONT: bold 11px arial, verdana, sans-serif; COLOR: =
#4b4b4b; HEIGHT: 18px; TEXT-ALIGN: left
}
#searchResults .scorebar {
	BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BACKGROUND: =
#fff; BORDER-LEFT: #999 1px solid; WIDTH: 50px; BORDER-BOTTOM: #999 1px =
solid
}
#post_form {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px
}
#post_form TD {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px
}
#post_form_inner {
	BORDER-RIGHT: #aaa 1px solid; BORDER-TOP: #aaa 1px solid; BORDER-LEFT: =
#aaa 1px solid; BORDER-BOTTOM: #aaa 1px solid
}
DL#post_form_inner {
	MARGIN: 0px 5px 5px
}
#post_form_inner DD {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px
}
#post_form_inner DT {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px
}
.graybox DL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
.graybox DT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
.graybox DD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; BORDER-TOP-STYLE: none; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
}
#search_directions_body {
	DISPLAY: none
}
.middletd {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px
}
.texttd {
	PADDING-RIGHT: 4px; BORDER-TOP: #fff 1px solid; PADDING-LEFT: 4px; =
FONT-SIZE: 11px; PADDING-BOTTOM: 4px; COLOR: #58595b; PADDING-TOP: 4px; =
FONT-FAMILY: Arial, Helvetica, sans-serif
}
.toptd {
	BORDER-RIGHT: #fff 1px solid; BORDER-TOP: #fff 1px solid; BORDER-LEFT: =
#fff 1px solid; BORDER-BOTTOM: #fff 1px solid; FONT-FAMILY: Arial, =
Helvetica, sans-serif
}
.buttons {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 3px
}
UL#address {
	MARGIN: 15px 0px
}
UL#address {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#address LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#login FIELDSET {
	BORDER-RIGHT: #666 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #666 1px =
solid; PADDING-LEFT: 10px; BACKGROUND: #ccc; PADDING-BOTTOM: 10px; =
BORDER-LEFT: #666 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #666 1px =
solid
}
#login DL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#login DT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#login DD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.graybox DL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.niceFont {
	FONT-SIZE: 10px; FONT-FAMILY: arial, helvetica, sans-serif
}
#fullcalendar {
	BORDER-RIGHT: #aaa 1px solid; BACKGROUND: #eee; BORDER-BOTTOM: #aaa 1px =
solid
}
#fullcalendar TD {
	BORDER-RIGHT: #aaa 1px; BORDER-TOP: #aaa 1px solid; FONT-SIZE: 10px; =
BORDER-LEFT: #aaa 1px solid; BORDER-BOTTOM: #aaa 1px; FONT-FAMILY: =
arial, helvetica, sans-serif
}
#fullcalendar TD TD {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
#cal_header {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; BACKGROUND: #666; =
PADDING-BOTTOM: 3px; COLOR: #ccc; PADDING-TOP: 3px
}
.dark_head {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; BACKGROUND: #666; =
PADDING-BOTTOM: 3px; COLOR: #ccc; PADDING-TOP: 3px
}
#cal_header STRONG {
	COLOR: #ccc
}
#cal_header A {
	COLOR: #fff
}
#loggedin_bar {
	BORDER-RIGHT: #eee 1px outset; BORDER-TOP: #eee 1px outset; BACKGROUND: =
#eee; BORDER-LEFT: #eee 1px outset; BORDER-BOTTOM: #eee 1px outset
}
#loggedin_bar IMG {
	PADDING-RIGHT: 4px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#loggedin_bar TD {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; =
PADDING-TOP: 2px
}
#ncbar {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; BORDER-BOTTOM: #fff 2px ridge
}
#agent99 {
	BORDER-RIGHT: #6a6a6a 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#6a6a6a 1px; PADDING-LEFT: 14px; Z-INDEX: 99; RIGHT: 444px; LEFT: 158px; =
VISIBILITY: hidden; PADDING-BOTTOM: 0px; BORDER-LEFT: #6a6a6a 1px solid; =
WIDTH: 291px; LINE-HEIGHT: 1.4em; PADDING-TOP: 10px; BORDER-BOTTOM: =
#6a6a6a 1px solid; POSITION: absolute; TOP: 31px; BACKGROUND-COLOR: =
#f0f0f0
}
#agent99 TABLE {
	FONT: 12px/14px Arial, Helvetica, sans-serif
}
#agent99 A:link {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
#agent99 A:hover {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
#agent99 A:active {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
#agent99 A:visited {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
#formtext {
	WIDTH: 202px
}
#search {
	WIDTH: 54px
}
#cp_extras {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; FONT: 11px =
Arial, Arial, Helvetica, sans-serif; PADDING-TOP: 6px
}
#cp_extras A:link {
	FONT-WEIGHT: bold; COLOR: #000
}
#cp_extras A:visited {
	FONT-WEIGHT: bold; COLOR: #000
}
#cp_extras A:active {
	FONT-WEIGHT: bold; COLOR: #000
}
#cp_extras A:hover {
	FONT-WEIGHT: bold; COLOR: #900
}
A#stafflogin {
	BORDER-RIGHT: #bbdff9 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#bbdff9 1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-SIZE: 16px; =
BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/over.jpg) #fff =
repeat-x left bottom; PADDING-BOTTOM: 5px; BORDER-LEFT: #bbdff9 1px =
solid; COLOR: #1a3787; LINE-HEIGHT: 24px; PADDING-TOP: 5px; =
BORDER-BOTTOM: #bbdff9 1px solid; TEXT-ALIGN: center; TEXT-DECORATION: =
none
}
A#stafflogin:hover {
	BORDER-RIGHT: #aaa 1px solid; BORDER-TOP: #aaa 1px solid; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/click.jpg) =
#fff repeat-x left bottom; BORDER-LEFT: #aaa 1px solid; COLOR: #666; =
BORDER-BOTTOM: #aaa 1px solid
}
#log_left {
	FLOAT: left; WIDTH: 230px
}
#log_right {
	FLOAT: left; MARGIN: 0px 0px 0px 10px; WIDTH: 230px
}
#log_both {
	FLOAT: left; MARGIN: 0px 0px 25px
}
FORM#login {
	MARGIN: 0px
}
A.faux_button {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px =
solid; PADDING-LEFT: 4px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/vote.gif) #fff =
repeat-x left bottom; PADDING-BOTTOM: 5px; FONT: 12px/12px =
arial,sans-serif; BORDER-LEFT: #ccc 1px solid; WIDTH: 75px; COLOR: #666; =
PADDING-TOP: 5px; BORDER-BOTTOM: #ccc 1px solid; TEXT-ALIGN: center; =
TEXT-DECORATION: none
}
A.faux_button:hover {
	BORDER-RIGHT: #aaa 1px solid; BORDER-TOP: #aaa 1px solid; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/click.jpg) =
#fff repeat-x left bottom; BORDER-LEFT: #aaa 1px solid; COLOR: #666; =
BORDER-BOTTOM: #aaa 1px solid
}
#poll A {
	MARGIN: 5px 5px 0px
}
.hidden {
	DISPLAY: none
}
#fplead {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 8px; MARGIN: 0px =
0px 8px; PADDING-TOP: 0px; BORDER-BOTTOM: gray 1px dashed
}
TD.fparticle {
	VERTICAL-ALIGN: top; TEXT-ALIGN: left
}
.lead_right .fparticle {
	PADDING-RIGHT: 8px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.lead_center .fparticle {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 8px
}
.fpimage P {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; MARGIN: =
0px; FONT: 10px/1.1em Arial, Helvetica, sans-serif; PADDING-TOP: 4px
}
.fpimage IMG {
	DISPLAY: block
}
#cpcentercol {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 10px
}
#fpaio_3 #sidebar IMG {
	BORDER-RIGHT: #aaa 1px solid; BORDER-TOP: #aaa 1px solid; BORDER-LEFT: =
#aaa 1px solid; BORDER-BOTTOM: #aaa 1px solid
}
#fp_feat_1 .fp_feat {
	CLEAR: left; FLOAT: left; MARGIN: 0px 0px 15px
}
#fp_feat_1 DL {
	BACKGROUND: #ddd; FLOAT: left; MARGIN: 0px 8px 0px 0px
}
#fp_feat_1 DD {
	BACKGROUND: #ddd; FLOAT: left; MARGIN: 0px 8px 0px 0px
}
#fp_feat_1 DT {
	BACKGROUND: #ddd; FLOAT: left; MARGIN: 0px 8px 0px 0px
}
#fp_feat_1 DD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#fp_feat_1 DT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#fptemplate2 #fplead {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 8px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: top; PADDING-TOP: 0px; TEXT-ALIGN: left; =
BORDER-RIGHT-WIDTH: 0px
}
#fptemplate2 #fpfeatured {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 8px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: top; PADDING-TOP: 0px; TEXT-ALIGN: left; =
BORDER-RIGHT-WIDTH: 0px
}
#fptemplate2 #fpfeatured {
	PADDING-RIGHT: 0px; PADDING-LEFT: 8px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#fptemplate2 #fpfeatured H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 4px; FONT: bold 16px/1.1em Arial, Helvetica, sans-serif; =
PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid
}
#fptemplate2 H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 20px; BACKGROUND: =
url(images/digiarrow.gif) no-repeat 0px 5px; PADDING-BOTTOM: 2px; =
MARGIN: 0px; FONT: bold 14px/1.1em Arial, Helvetica, sans-serif; =
PADDING-TOP: 2px
}
#fptemplate3 #fplead {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 8px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: top; PADDING-TOP: 0px; TEXT-ALIGN: left; =
BORDER-RIGHT-WIDTH: 0px
}
#fptemplate3 #fpfeatured {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 8px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; =
VERTICAL-ALIGN: top; PADDING-TOP: 0px; TEXT-ALIGN: left; =
BORDER-RIGHT-WIDTH: 0px
}
#fptemplate3 #fpfeatured {
	PADDING-RIGHT: 0px; PADDING-LEFT: 8px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#fptemplate3 #fpfeatured H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 4px; FONT: bold 16px/1.1em Arial, Helvetica, sans-serif; =
PADDING-TOP: 4px; BORDER-BOTTOM: black 1px solid
}
#fptemplate3 H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 20px; BACKGROUND: =
url(images/digiarrow.gif) no-repeat 0px 5px; PADDING-BOTTOM: 2px; =
MARGIN: 0px; FONT: bold 14px/1.1em Arial, Helvetica, sans-serif; =
PADDING-TOP: 2px
}
#fplead H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 4px; MARGIN: =
0px; FONT: bold 18px/1.1em Arial, Helvetica, sans-serif; PADDING-TOP: =
0px
}
#fplead P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0.5em; MARGIN: =
0px; FONT: 11px/1.1em Arial, Helvetica, sans-serif; PADDING-TOP: 0px
}
#fpfeatured H3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 4px; MARGIN: =
0px; FONT: bold 16px/1.1em Arial, Helvetica, sans-serif; PADDING-TOP: =
0px
}
#fpfeatured P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0.5em; MARGIN: =
0px; FONT: 11px/1.1em Arial, Helvetica, sans-serif; PADDING-TOP: 0px
}
.article_byline {
	FONT: 9px/1.1em Arial, Helvetica, sans-serif; COLOR: #666
}
.article_byline A .image_byline {
	FONT: 9px/1.1em Arial, Helvetica, sans-serif; COLOR: #666
}
.image_byline A {
	FONT: 9px/1.1em Arial, Helvetica, sans-serif; COLOR: #666
}
#profile_button {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; BACKGROUND: =
url(/media/assets/images/profile.gif) repeat-x; PADDING-BOTTOM: 3px; =
COLOR: white; PADDING-TOP: 3px
}
#fplead TD {
	PADDING-BOTTOM: 25px
}
.lead_left {
	MARGIN: 0px 0px 15px; TEXT-ALIGN: left
}
.lead_right {
	MARGIN: 0px 0px 15px; TEXT-ALIGN: left
}
.lead_center {
	MARGIN: 0px 0px 15px; TEXT-ALIGN: left
}
.lead_left TD + TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 8px; PADDING-BOTTOM: 0px; WIDTH: =
100%; PADDING-TOP: 0px
}
.lead_right TD {
	PADDING-RIGHT: 8px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; WIDTH: =
100%; PADDING-TOP: 0px
}
.lead_center .summary {
	MARGIN: 0px 0px 25px
}
.lead_center .fpimage {
	MARGIN: 0px 0px 8px
}
#fp_feat H4 {
	MARGIN: 0px 0px 7px
}
#fp_feat H5 {
	MARGIN: 0px 0px 7px
}
#fp_feat .article_byline {
	MARGIN: 0px 0px 7px
}
.article {
	CLEAR: left; FLOAT: left; MARGIN: 0px 0px 25px; WIDTH: 100%
}
#fp_feat_1 .summary {
	MARGIN: 0px 0px 0px 83px
}
.float_thumbnail {
	FLOAT: left; MARGIN: 0px 8px 0px 0px; WIDTH: 75px
}
#fp_feat_2 TD {
	PADDING-BOTTOM: 25px; WIDTH: 50%
}
#fp_feat_2 TD + TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#fp_feat_3 TD {
	PADDING-BOTTOM: 25px; WIDTH: 33%
}
#fp_feat_3 TD + TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#sidebar P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#sidebar H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#sidebar H5 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#sidebar H4 {
	MARGIN: 0px 0px 5px
}
#sidebar P {
	MARGIN: 0px 0px 5px
}
#sidebar H5 {
	MARGIN: 0px 0px 5px
}
#fpaio_3 TD {
	VERTICAL-ALIGN: top
}
#fpaio_3 TD + TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#fpaio_3 .fpimage {
	MARGIN: 0px 0px 15px
}
#fpaio_3 #sidebar UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 15px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#fpaio_3 #sidebar LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/images/digiarrow.gif) =
no-repeat left 3px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; =
LIST-STYLE-TYPE: none
}
#fpaio_3 .featured {
	MARGIN: 0px 0px 15px
}
#fpaio_2 TD {
	VERTICAL-ALIGN: top
}
#fpaio_2 TD + TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#fpaio_2 .fpimage {
	MARGIN: 0px 0px 15px
}
#fpaio_2 H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 4px; =
PADDING-TOP: 0px; BORDER-BOTTOM: #aaa 1px solid
}
#fpaio_2 #sidebar UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 25px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#fpaio_2 #sidebar LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/images/digiarrow.gif) =
no-repeat left 3px; PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.5em; =
PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#fpaio_2 .featured {
	MARGIN: 0px 0px 15px
}
#fpaio_1 TD {
	VERTICAL-ALIGN: top
}
#fpaio_1 TD + TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#fpaio_1 .fpimage {
	MARGIN: 0px 0px 15px
}
#fpaio_1 .featured {
	MARGIN: 0px 0px 15px
}
#article H2 {
	MARGIN: 0px 0px 7px
}
#article H4 {
	MARGIN: 0px 0px 7px
}
#meta {
	MARGIN: 0px 0px 7px
}
#article H3 {
	MARGIN: 0px 0px 7px; COLOR: #666
}
TD.toptd {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
.toptd A {
	COLOR: #666
}
#poll {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 1px =
solid; PADDING-LEFT: 5px; BACKGROUND: #eee; PADDING-BOTTOM: 5px; MARGIN: =
15px 5px 0px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 5px; =
BORDER-BOTTOM: #ccc 1px solid; TEXT-ALIGN: left
}
P#view_results {
	MARGIN: 5px 0px 0px
}
#cp_poll_legend {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 4px; =
PADDING-TOP: 4px
}
#cp_poll_legend TD {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; BACKGROUND: white; =
PADDING-BOTTOM: 4px; VERTICAL-ALIGN: top; PADDING-TOP: 4px; TEXT-ALIGN: =
left
}
.cp_poll_color DIV {
	BORDER-RIGHT: #666 1px solid; BORDER-TOP: #666 1px solid; BORDER-LEFT: =
#666 1px solid; WIDTH: 1em; BORDER-BOTTOM: #666 1px solid; HEIGHT: 1em
}
#cp_poll_color_1 {
	BACKGROUND: #bc0303
}
#cp_poll_color_2 {
	BACKGROUND: #0064d1
}
#cp_poll_color_3 {
	BACKGROUND: #ff9800
}
#cp_poll_color_4 {
	BACKGROUND: #108b00
}
#cp_poll_color_5 {
	BACKGROUND: #6435b1
}
#cp_poll_color_6 {
	BACKGROUND: #0614ca
}
#cp_poll_color_7 {
	BACKGROUND: #36c947
}
#cp_poll_color_8 {
	BACKGROUND: #b23da8
}
#cp_poll_color_9 {
	BACKGROUND: #746137
}
#cp_poll_color_10 {
	BACKGROUND: #ec008c
}
#object9975 {
	TEXT-ALIGN: center
}
#object9974 {
	TEXT-ALIGN: center
}
#object9973 {
	TEXT-ALIGN: center
}
#banner_client_1 {
	TEXT-ALIGN: center
}
#banner_network_6 {
	TEXT-ALIGN: center
}
#weather {
	BORDER-RIGHT: #666 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #666 1px =
solid; PADDING-LEFT: 1px; BACKGROUND: #fff; PADDING-BOTTOM: 1px; MARGIN: =
0px auto; BORDER-LEFT: #666 1px solid; WIDTH: 120px; PADDING-TOP: 1px; =
BORDER-BOTTOM: #666 1px solid
}
#weatherblock {
	PADDING-RIGHT: 3px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 3px; =
PADDING-BOTTOM: 3px; MARGIN: 1px 0px 0px; PADDING-TOP: 3px
}
.art {
	MARGIN: 0px 0px 15px
}
#breadcrumb {
	FONT-SIZE: 10px; MARGIN: 0px 0px 7px
}
#breadcrumb A {
	FONT-SIZE: 10px; MARGIN: 0px 0px 7px
}
#banner_network_1 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 0px
}
#loggedin_controlbar {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 0px
}
#article {
	TEXT-ALIGN: left
}
#article H2 {
	LINE-HEIGHT: 1.2em
}
UL#user_art_list_but {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
0px 15px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
.user_art_list UL {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #ccc 1px =
solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 15px; =
BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #ccc 1px =
solid
}
.user_art_list STRONG {
	MARGIN: 0px 0px 5px
}
.user_art_list LI {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 3px; =
PADDING-TOP: 3px; LIST-STYLE-TYPE: none
}
.user_art_list LI.even {
	BACKGROUND: #f5f5f5
}
.arch_group A {
	COLOR: #333
}
.arch_group {
	BORDER-TOP: #aaa 1px solid; BORDER-BOTTOM: #aaa 1px solid; TEXT-ALIGN: =
left
}
.arch_group STRONG {
	DISPLAY: block
}
.arch_group .evenrow {
	CLEAR: left; PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
.arch_group .oddrow {
	CLEAR: left; PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
H2 {
	LINE-HEIGHT: 1.2em; TEXT-ALIGN: left
}
H3 {
	LINE-HEIGHT: 1.2em; TEXT-ALIGN: left
}
#banner_loc_3 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.textad-container .textad {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px =
solid; PADDING-LEFT: 4px; BACKGROUND: #eee; PADDING-BOTTOM: 4px; =
BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ccc 1px =
solid; TEXT-ALIGN: left
}
.textad-container .textad H1 {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; DISPLAY: block; =
PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 12px/1.1em Arial, Helvetica, =
sans-serif; COLOR: #00f; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px; =
TEXT-DECORATION: underline
}
.textad-container .textad H1 A {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; DISPLAY: block; =
PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 12px/1.1em Arial, Helvetica, =
sans-serif; COLOR: #00f; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px; =
TEXT-DECORATION: underline
}
.textad-container .textad P {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; DISPLAY: block; =
PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 12px/1.1em Arial, Helvetica, =
sans-serif; COLOR: #000; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px; =
TEXT-DECORATION: none
}
.textad-container .textad P A {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; DISPLAY: block; =
PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 12px/1.1em Arial, Helvetica, =
sans-serif; COLOR: #000; PADDING-TOP: 0px; BORDER-RIGHT-WIDTH: 0px; =
TEXT-DECORATION: none
}
.textad-container .textad P.url {
	COLOR: #3f9f3f; TEXT-DECORATION: none
}
.textad-container .textad P.url A {
	COLOR: #3f9f3f; TEXT-DECORATION: none
}
.textad-container .caption A {
	FONT: 10px/1.1em Arial, Helvetica, sans-serif; COLOR: #999
}
#flan_article_top {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px 0px 15px; PADDING-TOP: 10px! =
important; BORDER-BOTTOM: #ccc 1px solid
}
#flan_article_top UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#flan_article_tools UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#flan_article_bottom UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#flan_article_bottom {
	MARGIN: 15px 0px
}
#flan_article_top UL {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px; PADDING-TOP: 0px! important
}
#flan_article_top LI {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#flan_article_bottom LI {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#flan_story_bot_nav {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#flan_article_top LI A {
	COLOR: #333333! important
}
#flan_article_bottom LI A {
	COLOR: #333333! important
}
#flan_story_bot_nav A {
	COLOR: #333333! important
}
#flan_article_top LI A:hover {
	COLOR: #000000! important
}
#flan_article_bottom A:hover {
	COLOR: #000000! important
}
#flan_article_top_left {
	FLOAT: left; WIDTH: 230px
}
#flan_article_top_left LI {
	DISPLAY: inline; MARGIN: 0px 5px 0px 0px
}
#flan_article_top_right {
	FLOAT: right; WIDTH: 190px; TEXT-ALIGN: right
}
#flan_article_bottom_right {
	FLOAT: right; WIDTH: 190px; TEXT-ALIGN: right
}
LI#flan_article_discuss A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/discuss.gif) =
no-repeat left -1px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#flan_article_print A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/print.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#flan_article_email A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/email.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#flan_article_more A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/down.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#flan_article_blog A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/blogger.gif) =
no-repeat left 50%
}
LI#flan_article_live A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/livejournal.gif)=
 no-repeat left 50%
}
LI#flan_article_digg A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/digg.gif) =
no-repeat left 50%
}
LI#flan_article_news A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/newsvine.gif) =
no-repeat left 50%
}
LI#flan_article_deli A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/delicious.gif) =
no-repeat left 50%
}
LI#flan_article_yaho A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/yahoo.gif) =
no-repeat left 50%
}
LI#flan_article_goog A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/google.gif) =
no-repeat left 0px
}
LI.flan_article_page DIV {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/page.gif) =
no-repeat left center; FLOAT: right; PADDING-BOTTOM: 0px; PADDING-TOP: =
0px
}
#flan_story_text {
	MARGIN: 0px 0px 15px
}
#flan_article_tools {
	BORDER-TOP: #ccc 1px solid; BACKGROUND: #f5f5f5; MARGIN: 0px 0px 25px
}
P.flan_article_more_tools {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
FONT-WEIGHT: bold! important; FONT-SIZE: 12px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px; PADDING-TOP: 0px! important
}
P.flan_article_tools_header {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
FONT-WEIGHT: bold! important; FONT-SIZE: 11px; PADDING-BOTTOM: 0px! =
important; MARGIN: 0px 0px 8px; PADDING-TOP: 0px! important
}
#flan_article_tools .flan_article_gutter {
	PADDING-RIGHT: 5px! important; PADDING-LEFT: 5px! important; =
PADDING-BOTTOM: 5px! important; PADDING-TOP: 5px! important
}
#flan_article_tools UL {
	PADDING-RIGHT: 0px! important; DISPLAY: inline! important; =
PADDING-LEFT: 0px! important; PADDING-BOTTOM: 0px! important; MARGIN: =
0px; PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none! important
}
#flan_article_tools LI {
	PADDING-RIGHT: 0px! important; DISPLAY: inline! important; =
PADDING-LEFT: 0px! important; PADDING-BOTTOM: 0px! important; MARGIN: =
0px; PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none! important
}
#flan_article_tools LI A {
	PADDING-RIGHT: 0px! important; DISPLAY: inline! important; =
PADDING-LEFT: 17px! important; FONT-SIZE: 10px! important; =
PADDING-BOTTOM: 3px! important; MARGIN: 0px 3px 0px 0px; PADDING-TOP: =
3px! important
}
#flan_article_tools LI A {
	DISPLAY: inline! important; FONT-SIZE: 10px! important
}
#flan_article_tools_book {
	MARGIN: 0px 0px 0px 85px; BORDER-LEFT: #fff 1px solid
}
#flan_article_tools_blog {
	FLOAT: left! important; WIDTH: 85px! important
}
#flan_article_tools_rss {
	FLOAT: right! important; BORDER-LEFT: #fff 1px solid; WIDTH: 150px! =
important
}
#flan_story_bot_nav {
	MARGIN: 0px 0px 15px; TEXT-ALIGN: right
}
#flan_continued {
	FONT-SIZE: 11px; MARGIN: 0px 0px 15px; LINE-HEIGHT: 17px
}
* HTML #flan_article_tools {
	HEIGHT: 47px
}
#cp_article_top {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px 0px 15px; PADDING-TOP: 10px! =
important; BORDER-BOTTOM: #ccc 1px solid
}
#cp_article_top UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#cp_article_tools UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#cp_article_bottom UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#cp_article_bottom {
	MARGIN: 15px 0px
}
#cp_article_top UL {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px; PADDING-TOP: 0px! important
}
#cp_article_top LI {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#cp_article_bottom LI {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#cp_story_bot_nav {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#cp_article_top LI A {
	COLOR: #333333! important
}
#cp_article_bottom LI A {
	COLOR: #333333! important
}
#cp_story_bot_nav A {
	COLOR: #333333! important
}
#cp_article_top LI A:hover {
	COLOR: #000000! important
}
#cp_article_bottom A:hover {
	COLOR: #000000! important
}
#cp_article_top_left {
	FLOAT: left; WIDTH: 60%
}
#cp_article_top_left LI {
	DISPLAY: inline; MARGIN: 0px 5px 0px 0px
}
#cp_article_top_right {
	FLOAT: right; WIDTH: 190px; TEXT-ALIGN: right
}
#cp_article_bottom_right {
	FLOAT: right; WIDTH: 190px; TEXT-ALIGN: right
}
LI#cp_article_discuss A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/discuss.gif) =
no-repeat left -1px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#cp_article_print A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/print.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#cp_article_email A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/email.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#cp_article_more A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/down.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
#cp_article_tools {
	MARGIN: 1em 0px 25px
}
#cp_article_tools H4 {
	MARGIN: 0px
}
#cp_article_tools H5 {
	FONT-SIZE: 11px; MARGIN: 0px
}
#cp_at_content {
	PADDING-RIGHT: 0px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 0px; =
BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/article_bkg.gif=
) #f5f5f5 repeat-x right bottom; PADDING-BOTTOM: 7px; PADDING-TOP: 5px
}
#cp_at_share {
	PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FLOAT: left; PADDING-BOTTOM: =
0px; WIDTH: 70%; PADDING-TOP: 0px
}
#cp_at_rss {
	PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#cp_article_tools #cp_at_content UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#cp_at_content LI {
	DISPLAY: inline; MARGIN: 0px 8px 0px 0px; LIST-STYLE-TYPE: none
}
#cp_at_content LI A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; FONT-SIZE: 10px; =
PADDING-BOTTOM: 3px; PADDING-TOP: 3px
}
LI#cp_at_blog A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/blogger.gif) =
no-repeat left 50%
}
LI#cp_at_facebook A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/facebook.gif) =
no-repeat left 50%
}
LI#cp_at_live A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/livejournal.gif)=
 no-repeat left 50%
}
LI#cp_at_digg A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/digg.gif) =
no-repeat left 50%
}
LI#cp_at_news A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/newsvine.gif) =
no-repeat left 50%
}
LI#cp_at_deli A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/delicious.gif) =
no-repeat left 50%
}
LI#cp_at_yaho A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/yahoo.gif) =
no-repeat left 50%
}
LI#cp_at_goog A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/google.gif) =
no-repeat left 0px
}
#net_bar * {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; TEXT-ALIGN: left
}
#net_bar A {
	outline: none
}
#net_bar A:active {
	outline: none
}
:focus {
	-moz-outline-style: none
}
#net_bar UL {
	LIST-STYLE-TYPE: none
}
#net_bar LI {
	LIST-STYLE-TYPE: none
}
#net_bar FIELDSET {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
.hide {
	DISPLAY: none
}
.show {
	DISPLAY: block
}
#net_bar {
	BACKGROUND: #e0e0e0; FONT: 12px/1em Trebuchet MS, arial, verdana, =
sans-serif; BORDER-BOTTOM: #7d87a2 1px solid; HEIGHT: 33px
}
#net_cp_a {
	Z-INDEX: 2; LEFT: 5px; WIDTH: 165px; TEXT-INDENT: -1000px; LINE-HEIGHT: =
26px; POSITION: absolute; TOP: 4px; HEIGHT: 26px
}
#net_cp_a A {
	DISPLAY: block; BACKGROUND: =
url(http://media.collegepublisher.com/media/images/net_cp2.gif) =
no-repeat left top; WIDTH: 165px; TEXT-INDENT: -1000px; LINE-HEIGHT: =
26px; HEIGHT: 26px
}
#net_cp_a A:hover {
	BACKGROUND-POSITION: 0px -26px
}
.unselected#net_cp_a A:hover {
	BACKGROUND-POSITION: 0px -26px
}
.selected#net_cp_a A {
	BACKGROUND-POSITION: 0px -52px
}
.selected#net_cp_a A:hover {
	BACKGROUND-POSITION: 0px -52px
}
#net_cp_a A:active {
	BACKGROUND-POSITION: 0px -52px
}
.unselected#net_cp_a A {
	BACKGROUND-POSITION: 0px 0px
}
#net_cp_nav_list {
	Z-INDEX: 1; LEFT: 5px; POSITION: absolute; TOP: 28px
}
UL#net_cp_nav_list {
	BORDER-RIGHT: #7d87a2 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#7d87a2 1px solid; PADDING-LEFT: 5px; BACKGROUND: #fff; PADDING-BOTTOM: =
3px; BORDER-LEFT: #7d87a2 1px solid; WIDTH: 225px; PADDING-TOP: 5px; =
BORDER-BOTTOM: #7d87a2 1px solid; LIST-STYLE-TYPE: none
}
UL#net_cp_nav_list LI A {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 1px =
solid; DISPLAY: block; PADDING-LEFT: 5px; BACKGROUND: #f5f5f5; =
PADDING-BOTTOM: 5px; MARGIN: 0px 0px 5px; FONT: 12px/1em Trebuchet MS, =
arial, verdana, sans-serif; BORDER-LEFT: #ccc 1px solid; COLOR: #666; =
PADDING-TOP: 5px; BORDER-BOTTOM: #ccc 1px solid; TEXT-DECORATION: none
}
UL#net_cp_nav_list LI A:hover {
	BACKGROUND: #fff; COLOR: #303030
}
#net_search {
	VISIBILITY: visible
}
#net_search_input {
	FONT-SIZE: 12px; LEFT: 180px; WIDTH: 125px; POSITION: absolute; TOP: =
7px
}
#net_search_choose_link {
	Z-INDEX: 2; LEFT: 313px; WIDTH: 16px; TEXT-INDENT: -1000px; =
LINE-HEIGHT: 22px; POSITION: absolute; TOP: 6px; HEIGHT: 23px
}
#net_search_choose_link A {
	DISPLAY: block; BACKGROUND: =
url(http://media.collegepublisher.com/media/images/dropdown.png) =
no-repeat left top; WIDTH: 16px; TEXT-INDENT: -1000px; LINE-HEIGHT: =
22px; HEIGHT: 22px
}
#net_search_choose_link A:hover {
	BACKGROUND-POSITION: 0px -22px
}
#net_bar .unselected#net_search_choose_link A:hover {
	BACKGROUND-POSITION: 0px -22px
}
#net_bar .selected#net_search_choose_link A {
	BACKGROUND-POSITION: 0px -44px
}
#net_bar .selected#net_search_choose_link A:hover {
	BACKGROUND-POSITION: 0px -44px
}
#net_bar #net_search_choose_link A:active {
	BACKGROUND-POSITION: 0px -44px
}
#net_bar .unselected#net_search_choose_link A {
	BACKGROUND-POSITION: 0px 0px
}
#net_search_choose_options {
	Z-INDEX: 1; LEFT: 313px; POSITION: absolute; TOP: 25px
}
UL#net_search_choose_options {
	BORDER-RIGHT: #7d87a2 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: =
#7d87a2 1px solid; PADDING-LEFT: 5px; BACKGROUND: #fff; PADDING-BOTTOM: =
0px; BORDER-LEFT: #7d87a2 1px solid; WIDTH: 175px; PADDING-TOP: 5px; =
BORDER-BOTTOM: #7d87a2 1px solid; LIST-STYLE-TYPE: none
}
UL#net_search_choose_options LI {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 1px =
solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px 0px 5px; =
FONT: 12px/1em Trebuchet MS, arial, verdana, sans-serif; BORDER-LEFT: =
#ccc 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #ccc 1px solid
}
#net_search_choose_submit {
	Z-INDEX: 2; BACKGROUND: =
url(http://media.collegepublisher.com/media/images/button_bg.png) =
no-repeat right top; LEFT: 329px; OVERFLOW: hidden; POSITION: absolute; =
TOP: 6px
}
#net_search_choose_submit A {
	MARGIN: 0px 6px 0px 4px; FONT: 11px/21px Trebuchet MS, arial, verdana, =
sans-serif; COLOR: #333; TEXT-DECORATION: none
}
#net_channels {
	RIGHT: 200px; WIDTH: 375px; POSITION: absolute; TOP: 12px
}
#net_channels {
	WIDTH: auto
}
#net_channels UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
}
#net_channels LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(http://media.collegepublisher.com/media/images/nav_right_1.png) =
no-repeat right top; FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px 0px =
0px 2px; PADDING-TOP: 0px
}
#net_channels A {
	PADDING-RIGHT: 4px; DISPLAY: block; PADDING-LEFT: 4px; BACKGROUND: =
url(http://media.collegepublisher.com/media/images/nav_left_1.png) =
no-repeat left top; FLOAT: left; PADDING-BOTTOM: 4px; FONT: 11px/1em =
Trebuchet MS, arial, verdana, sans-serif; COLOR: #303030; PADDING-TOP: =
4px; TEXT-DECORATION: none
}
#net_channels A {
	FLOAT: none
}
UL#net_cp_nav_list LI {
	MARGIN: 0px 0px -3px; HEIGHT: 1%
}
#net_weather {
	RIGHT: 0px; POSITION: absolute; TOP: 0px
}
#flan_pods H2 {
	MARGIN: 0px 0px 1em
}
#flan_pods .flan_pods_channels {
	MARGIN: 0px 0px 1em
}
#flan_pods .flan_pods_gutter {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: #f5f5f5; =
PADDING-BOTTOM: 10px; PADDING-TOP: 10px
}
#flan_pods UL {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px; PADDING-TOP: 0px! important
}
#flan_pods UL LI {
	LIST-STYLE-POSITION: outside; LIST-STYLE-TYPE: none
}
#flan_pods H3 {
	MARGIN: 0px 0px 0.5em
}
#flan_pods H5 {
	FONT-SIZE: 10px; MARGIN: 0px 0px 3px; TEXT-TRANSFORM: uppercase; COLOR: =
#999; BORDER-BOTTOM: #999 1px solid
}
#flan_pods IMG {
	BORDER-RIGHT: #d8d8d8 1px solid; BORDER-TOP: #d8d8d8 1px solid; FLOAT: =
right; MARGIN: 0px 0em 1em 1em; BORDER-LEFT: #d8d8d8 1px solid; =
BORDER-BOTTOM: #d8d8d8 1px solid
}
.flan_pods_info {
	CLEAR: both; MARGIN: 0px 0px 1em
}
.flan_pods_tracklist {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.flan_pods_list_even {
	BACKGROUND: #edf3fe
}
.flan_pods_list_odd {
	BACKGROUND: #fff
}
.flan_pods_list_odd:hover {
	BACKGROUND: #ffc
}
.flan_pods_list_even:hover {
	BACKGROUND: #ffc
}
.flan_pods_tracklist LI {
	PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; =
PADDING-BOTTOM: 8px; PADDING-TOP: 10px
}
.flan_pods_tracklist LI P.flan_pods_title {
	DISPLAY: inline; FLOAT: left; MARGIN: 0px; LINE-HEIGHT: 17px
}
.flan_pods_tracklist LI P.flan_pods_description {
	FONT-SIZE: 0.9em; MARGIN: 0.5em 0px 0px
}
A.flan_pods_listen {
	DISPLAY: block; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/podcast.gif) =
no-repeat left top; FLOAT: right; MARGIN: 0px; WIDTH: 37px; TEXT-INDENT: =
-1000em; HEIGHT: 17px
}
A.flan_pods_listen:hover {
	BACKGROUND-POSITION: left bottom
}
.flan_pods_channels .more {
	FONT-SIZE: 1.2em; MARGIN: 0.5em 0px 0px; TEXT-ALIGN: right
}
.flan_pods_channels .more A {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
LINE-HEIGHT: 1.2em; PADDING-TOP: 5px
}
.flan_pods_subscription_links {
	TEXT-ALIGN: right
}
.flan_pods_subscription_links LI {
	DISPLAY: inline; MARGIN: 0px 10px 0px 0px
}
.flan_pods_subscription_links LI A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.flan_pods_rss A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/rss11.gif) =
no-repeat left center
}
.flan_pods_m3u A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/plus.gif) =
no-repeat left center
}
.flan_pods_rss_itunes A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/podcast_icon_ori=
ginal.png) no-repeat left center
}
.flan_pods_subscription_links LI.flan_pods_xspf {
	MARGIN: 0px
}
.flan_pods_xspf A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/plus.gif) =
no-repeat left center
}
.flan_pods_all A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/arrow_right.gif)=
 no-repeat left center
}
HTML > BODY .flan_pods_tracklist LI P.flan_pods_title {
	FLOAT: none
}
#flan_ads {
	FLOAT: right; WIDTH: 300px
}
.box {
	CLEAR: both; MARGIN: 0px 0px 10px; WIDTH: 300px
}
#flan_ads .cp_ad {
	CLEAR: both; MARGIN: 0px 0px 10px; WIDTH: 300px
}
#flan_ads .content .gutter {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px
}
#flan_ads .gutter P {
	MARGIN: 0px 0px 10px
}
#advertisements {
	MARGIN: 0px 0px 10px
}
#flan_ads .content {
	CLEAR: both; BORDER-RIGHT: #d8d8d8 1px solid; BORDER-TOP: #d8d8d8 1px =
solid; MARGIN: 0px 0px 10px; FONT: 90%/1.2em arial, verdana, sans-serif; =
BORDER-LEFT: #d8d8d8 1px solid; BORDER-BOTTOM: #d8d8d8 1px solid
}
#advertisements {
	CLEAR: both; BORDER-RIGHT: #d8d8d8 1px solid; BORDER-TOP: #d8d8d8 1px =
solid; MARGIN: 0px 0px 10px; FONT: 90%/1.2em arial, verdana, sans-serif; =
BORDER-LEFT: #d8d8d8 1px solid; BORDER-BOTTOM: #d8d8d8 1px solid
}
#flan_ads .content_300 {
	CLEAR: both; MARGIN: 0px 0px 10px; FONT: 90%/1.2em arial, verdana, =
sans-serif
}
#advertisements {
	CLEAR: both; MARGIN: 0px 0px 10px; FONT: 90%/1.2em arial, verdana, =
sans-serif
}
#flan_ads .content H4 {
	PADDING-RIGHT: 3px; PADDING-LEFT: 7px; BACKGROUND: #f5f5f5; =
PADDING-BOTTOM: 3px; FONT: 14px/1em arial, verdana, sans-serif; =
TEXT-TRANSFORM: uppercase; COLOR: #333333; PADDING-TOP: 3px; =
BORDER-BOTTOM: #d8d8d8 1px solid
}
#advertisements H4 {
	PADDING-RIGHT: 3px; PADDING-LEFT: 7px; BACKGROUND: #f5f5f5; =
PADDING-BOTTOM: 3px; FONT: 14px/1em arial, verdana, sans-serif; =
TEXT-TRANSFORM: uppercase; COLOR: #333333; PADDING-TOP: 3px; =
BORDER-BOTTOM: #d8d8d8 1px solid
}
#flan_ads .content A {
	COLOR: #333; BORDER-BOTTOM: #ccc 1px solid; TEXT-DECORATION: none
}
#flan_ads .content A:hover {
	BACKGROUND: #ffc
}
#flan_ads .content OL {
	LIST-STYLE-POSITION: inside
}
#flan_ads .content OL LI {
	MARGIN: 0px 0px 5px; LINE-HEIGHT: 1.2em
}
#box_120_240 {
	BACKGROUND: #f5f5f5
}
#box_120_240 .banner {
	BORDER-RIGHT: #fff 10px solid; FLOAT: left; MARGIN: 0px 10px 0px 0px; =
WIDTH: 120px
}
#box_120_600_loc .banner {
	BORDER-RIGHT: #fff 10px solid; FLOAT: left; MARGIN: 0px 10px 0px 0px; =
WIDTH: 120px
}
#box_120_600 {
	BACKGROUND: #f5f5f5
}
#box_120_600 .banner {
	BORDER-RIGHT: #fff 10px solid; FLOAT: left; MARGIN: 0px 10px 0px 0px; =
WIDTH: 120px
}
#box_120_600_loc .banner {
	BORDER-RIGHT: #fff 10px solid; FLOAT: left; MARGIN: 0px 10px 0px 0px; =
WIDTH: 120px
}
#box_160_600 {
	BACKGROUND: #f5f5f5
}
#box_160_600 .banner {
	BORDER-RIGHT: #fff 10px solid; FLOAT: left; MARGIN: 0px 10px 0px 0px; =
WIDTH: 160px
}
#box_160_600_loc .banner {
	BORDER-RIGHT: #fff 10px solid; FLOAT: left; MARGIN: 0px 10px 0px 0px; =
WIDTH: 160px
}
#advertisements * {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#advertisements H4 {
	MARGIN: 0px 0px 10px
}
#advertisements {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
10px; WIDTH: 298px; PADDING-TOP: 0px
}
#advertisements .left {
	BORDER-RIGHT: #e1e1e1 1px solid; FLOAT: left; WIDTH: 150px; TEXT-ALIGN: =
center
}
#advertisements .right {
	TEXT-ALIGN: center
}
#flan_ads .content * {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#flan_nav .content * {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#flan_ads .content FORM {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: =
0px; PADDING-TOP: 10px
}
#flan_ads .content DIV {
	MARGIN: 0px 0px 5px
}
#flan_ads .pollquestionstyle {
	FONT: bold 13px/1.2em arial, verdana, sans-serif
}
#flan_ads .content_answers {
	FONT-SIZE: 11px; MARGIN: 7px 0px 0px
}
#flan_ads .content_answers DIV {
	MARGIN: 0px 0px 7px
}
#flan_ads .content A.faux_button {
	PADDING-RIGHT: 3px; DISPLAY: block; PADDING-LEFT: 3px; PADDING-BOTTOM: =
3px; MARGIN: 7px 0px 0px; PADDING-TOP: 3px
}
#flan_ads .content P#view_results {
	MARGIN: 7px 0px 0px
}
#flan_content UL {
	MARGIN: 1em
}
#dn_content UL {
	MARGIN: 1em
}
#flan_content OL {
	MARGIN: 1em
}
#dn_content OL {
	MARGIN: 1em
}
#flan_content P {
	MARGIN: 0px 0px 1em
}
#dn_content P {
	MARGIN: 0px 0px 1em
}
#flan_text_ads * {
	MARGIN: 0px
}
#flan_text_ads {
	BORDER-RIGHT: #999999 1px solid; BORDER-TOP: #999999 1px solid; MARGIN: =
0px 0px 10px; BORDER-LEFT: #999999 1px solid; BORDER-BOTTOM: #999999 1px =
solid
}
.flan_text_ad {
	BORDER-BOTTOM: #d8d8d8 1px solid
}
.flan_text_ad_title {
	COLOR: blue; TEXT-DECORATION: underline
}
.flan_text_ad_action {
	COLOR: blue
}
.flan_text_ad A {
	PADDING-RIGHT: 5px! important; DISPLAY: block; PADDING-LEFT: 5px! =
important; BACKGROUND: #fff; PADDING-BOTTOM: 5px! important; =
PADDING-TOP: 5px! important
}
.flan_text_ad A:hover {
	BACKGROUND: #f5f5f5
}
.flan_text_ad_bar {
	PADDING-RIGHT: 3px! important; PADDING-LEFT: 3px! important; FONT-SIZE: =
0.9em! important; BACKGROUND: #d8d8d8; PADDING-BOTTOM: 3px! important; =
PADDING-TOP: 3px! important; TEXT-ALIGN: center! important
}
.flan_comment {
	BACKGROUND: #edf3fe; MARGIN: 0px 0px 0.5em; OVERFLOW: auto
}
.flan_comment_response {
	BACKGROUND: #f5f5f5; MARGIN: 0px 0px 0.5em
}
.flan_comment_response BLOCKQUOTE {
	BORDER-RIGHT: #ffcc33 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#ffcc33 1px solid; PADDING-LEFT: 10px; BACKGROUND: #ffff99; =
PADDING-BOTTOM: 10px; MARGIN: 0px 0px 1em; BORDER-LEFT: #ffcc33 1px =
solid; PADDING-TOP: 10px; BORDER-BOTTOM: #ffcc33 1px solid
}
.flan_comment_gutter {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px
}
.flan_comment_body {
	MARGIN: 0px 0px 1em
}
.flan_comment_reply {
	TEXT-ALIGN: right
}
.flan_comment_read {
	TEXT-ALIGN: right
}
.flan_comment_reply A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 13px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/plus.gif) =
no-repeat left center; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.flan_comment_post A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 13px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/plus.gif) =
no-repeat left center; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.flan_comment_article A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 12px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/page.gif) =
no-repeat left center; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.flan_comment_all A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 12px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/arrow_right.gif)=
 no-repeat left center; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.flan_comment_read A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 12px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/arrow_right.gif)=
 no-repeat left center; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
UL.flan_comment_nav {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px 0px 1em; PADDING-TOP: 0px! =
important
}
#maincontent UL.flan_comment_nav {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px 0px 1em; PADDING-TOP: 0px! =
important
}
UL.flan_comment_nav LI.previous {
	PADDING-RIGHT: 0px; PADDING-LEFT: 13px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/minus.gif) =
no-repeat left center; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
UL.flan_comment_nav LI.next {
	PADDING-RIGHT: 0px; PADDING-LEFT: 13px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/plus.gif) =
no-repeat left center; LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; =
POSITION: relative; TEXT-ALIGN: right
}
.flan_comment_nav LI {
	DISPLAY: inline; MARGIN: 0px 1em 0px 0px
}
.flan_comment_valid_img {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0.5em; =
PADDING-TOP: 0px
}
.flan_comment_valid FIELDSET {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
.flan_comment_valid LABEL {
	DISPLAY: block; MARGIN: 0px 0px 0.5em
}
.flan_comment_valid INPUT {
	DISPLAY: block; MARGIN: 0px 0px 0.5em
}
.flan_disabled {
	COLOR: #999
}
.post_comment_button {
	MARGIN: 1.5em 0px; TEXT-ALIGN: center
}
.post_comment_no {
	PADDING-RIGHT: 4px; PADDING-LEFT: 4px; BACKGROUND: #cc0000; =
PADDING-BOTTOM: 2px; MARGIN: 0px 0px 1.5em; COLOR: #fff; PADDING-TOP: =
2px
}
.post_comment_no A {
	COLOR: #fff! important; TEXT-DECORATION: underline
}
.cpfooter {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 80%; PADDING-BOTTOM: =
2em; PADDING-TOP: 2em
}
UL.flan_breadcrumb {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px 0px 1em; PADDING-TOP: 0px! =
important; LIST-STYLE-TYPE: none
}
.flan_breadcrumb LI {
	DISPLAY: inline; FONT-SIZE: 0.9em; MARGIN: 0px 1px 0px 0px
}
.flan_breadcrumb LI.flan_breadcrumb_parent {
	DISPLAY: inline; BACKGROUND: url(/media/assets/icons/arrow_right.gif) =
no-repeat left center
}
.flan_breadcrumb LI {
	DISPLAY: inline; BACKGROUND: =
url(/media/assets/icons/arrow_right_light.gif) no-repeat left center
}
#flan_syndication_feeds LI {
	LIST-STYLE-TYPE: none
}
.flan_rss {
	PADDING-RIGHT: 0px; PADDING-LEFT: 14px; BACKGROUND: =
url(/media/assets/icons/rss11.gif) no-repeat left center; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.flan_article_clear {
	CLEAR: both
}
.flan_clear {
	CLEAR: both
}
.cp_clear {
	CLEAR: both
}
.cp_article_clear {
	CLEAR: both
}
.flan_clear_auto:unknown {
	CLEAR: both; DISPLAY: block; VISIBILITY: hidden; HEIGHT: 0px; content: =
"."
}
.cp_clear:unknown {
	CLEAR: both; DISPLAY: block; VISIBILITY: hidden; HEIGHT: 0px; content: =
"."
}
.flan_clear_auto {
	DISPLAY: inline-block
}
.cp_clear {
	DISPLAY: inline-block
}
.flan_clear_auto {
	DISPLAY: block
}
.cp_clear {
	DISPLAY: block
}
* HTML .flan_clear_auto {
	HEIGHT: 1%
}
* HTML .cp_clear {
	HEIGHT: 1%
}
.cp_light {
	COLOR: #999999
}
.cp_light P {
	COLOR: #999999
}
.cp_small {
	FONT-SIZE: 0.9em; LINE-HEIGHT: 1.4em
}
.cp_small P {
	FONT-SIZE: 0.9em; LINE-HEIGHT: 1.4em
}
.cp_medium {
	FONT-SIZE: 1em; LINE-HEIGHT: 1.4em
}
.cp_medium P {
	FONT-SIZE: 1em; LINE-HEIGHT: 1.4em
}
.cp_large {
	FONT-SIZE: 1.3em; LINE-HEIGHT: 1.4em
}
.cp_large P {
	FONT-SIZE: 1.3em; LINE-HEIGHT: 1.4em
}
.cp_rss {
	PADDING-RIGHT: 0px; PADDING-LEFT: 14px; BACKGROUND: =
url(/media/assets/icons/rss11.gif) no-repeat left center; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.cp_table {
	BORDER-RIGHT: #d8d8d8 1px solid; BORDER-TOP: #d8d8d8 1px solid; MARGIN: =
0px 0px 1em; BORDER-LEFT: #d8d8d8 1px solid; WIDTH: 100%; BORDER-BOTTOM: =
#d8d8d8 1px solid
}
.cp_table TH {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; BACKGROUND: #cccccc; =
PADDING-BOTTOM: 7px; PADDING-TOP: 7px; TEXT-ALIGN: left
}
.cp_table TD {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; =
PADDING-TOP: 7px
}
.cp_table P {
	MARGIN: 0px 0px 0.5em
}
.cp_even {
	BACKGROUND: #f5f5f5
}
.cp_odd {
	BACKGROUND: #edf3fe
}
BLOCKQUOTE {
	BORDER-RIGHT: #d8d8d8 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#d8d8d8 1px solid; PADDING-LEFT: 10px; BACKGROUND: #ffffff; =
PADDING-BOTTOM: 10px; MARGIN: 0px 0px 1em; BORDER-LEFT: #d8d8d8 1px =
solid; PADDING-TOP: 10px; BORDER-BOTTOM: #d8d8d8 1px solid
}
BLOCKQUOTE EM {
	DISPLAY: block; FONT-WEIGHT: bold; MARGIN: 0px 0px 0.3em; =
BORDER-BOTTOM: #e9e9e9 1px solid
}
.cp_left_right {
	MARGIN: 0px 0px 1em
}
.cp_left {
	FLOAT: left
}
.cp_right {
	FLOAT: right
}
.callout_left {
	FLOAT: left; MARGIN: 0px 1em 1em 0px; WIDTH: 33%
}
.callout_right {
	FLOAT: right; MARGIN: 0px 0px 1em 1em; WIDTH: 33%
}
A.cp_reply {
	PADDING-RIGHT: 0px; PADDING-LEFT: 13px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/plus.gif) =
no-repeat left center; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.cp_warn {
	PADDING-RIGHT: 5px; PADDING-LEFT: 27px; BACKGROUND: =
url(/media/assets/icons/alert.gif) #ffff99 no-repeat 5px 4px; =
PADDING-BOTTOM: 5px; MARGIN: 0px 0px 1em; FONT: 1em/1.2em arial, =
verdana, sans-serif; PADDING-TOP: 5px
}
.cp_warn STRONG {
	COLOR: #af0000! important
}
.cp_warn P {
	MARGIN: 0px; COLOR: #000000! important
}
.cp_alert {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: #ffff99; =
PADDING-BOTTOM: 5px; MARGIN: 0px 0px 1em; FONT: 1em/1.2em arial, =
verdana, sans-serif; COLOR: #af0000; PADDING-TOP: 5px
}
.cp_hide {
	DISPLAY: none
}
.cp_forum_trail {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px 0px 1em; PADDING-TOP: 0px! =
important
}
.cp_forum_trail LI {
	DISPLAY: inline; FONT-SIZE: 1.2em
}
.cp_forum_trail LI.cp_forum_trail_parent {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.cp_form FIELDSET {
	BORDER-RIGHT: #d8d8d8 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: =
#d8d8d8 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 0px =
0px 1em; BORDER-LEFT: #d8d8d8 1px solid; PADDING-TOP: 5px; =
BORDER-BOTTOM: #d8d8d8 1px solid
}
.cp_form LEGEND {
	PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; =
PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 15px; COLOR: #000000; =
PADDING-TOP: 0px
}
.cp_form UL {
	LIST-STYLE-TYPE: none
}
.cp_form LI {
	CLEAR: left; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: =
5px; MARGIN: 0px 0px 5px; PADDING-TOP: 5px
}
.cp_form LABEL {
	PADDING-RIGHT: 10px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
0px; WIDTH: 120px; PADDING-TOP: 3px; TEXT-ALIGN: right
}
.cp_form INPUT {
	FLOAT: left; MARGIN: 0px 0px 3px; WIDTH: 250px
}
.cp_form SELECT {
	FLOAT: left; MARGIN: 0px 0px 3px; WIDTH: 250px
}
.cp_form TEXTAREA {
	FLOAT: left; MARGIN: 0px 0px 3px; WIDTH: 250px
}
.cp_small_form INPUT {
	MARGIN: 0px 3px; WIDTH: 500px
}
.cp_small_form SELECT {
	MARGIN: 0px 3px; WIDTH: 500px
}
.cp_form IMG {
	FLOAT: left; MARGIN: 1px 0px 0px 3px
}
.cp_form .cp_alert {
	CLEAR: both; MARGIN: 0px 0px 0px 130px; WIDTH: 240px
}
.cp_form .cp_radio {
	FLOAT: left; MARGIN: 0px 0px 3px; WIDTH: 250px; BORDER-TOP-STYLE: none; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: =
none
}
.cp_form .cp_radio INPUT {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: =
0px; MARGIN: 0px; WIDTH: auto; PADDING-TOP: 0px
}
.cp_form .cp_check INPUT {
	FLOAT: none; MARGIN: 0px 5px 0px 0px; WIDTH: auto
}
.cp_form .cp_image_verify IMG {
	MARGIN: 0px 10px 0px 0px
}
.cp_form .cp_image_verify LI {
	LIST-STYLE-POSITION: outside
}
.cp_form .cp_image_verify INPUT {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FLOAT: =
none; PADDING-BOTTOM: 0px! important; MARGIN: 0px; WIDTH: 250px; =
PADDING-TOP: 0px! important; TEXT-ALIGN: left
}
.cp_form .cp_image_verify LABEL {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FLOAT: =
none; PADDING-BOTTOM: 0px! important; MARGIN: 0px; WIDTH: 250px; =
PADDING-TOP: 0px! important; TEXT-ALIGN: left
}
.cp_form .cp_submit {
	TEXT-ALIGN: center
}
.cp_form .cp_submit INPUT {
	FLOAT: none; WIDTH: auto
}
#cp_staff {
	BORDER-TOP: #ccc 1px solid
}
#cp_staff .staff_member {
	CLEAR: left; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; =
PADDING-BOTTOM: 1em; WIDTH: 100%; PADDING-TOP: 1em; BORDER-BOTTOM: #ccc =
1px solid
}
#cp_staff .staff_member IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; FLOAT: left; =
BORDER-BOTTOM-WIDTH: 0px; MARGIN: 0px 1em 0px 0px; WIDTH: 75px; =
BORDER-RIGHT-WIDTH: 0px
}
#cp_staff .staff_member .cp_staff_name {
	FLOAT: left; WIDTH: 50%
}
#cp_staff .staff_member .cp_staff_name DT {
	FONT-SIZE: 1.5em; MARGIN: 0px 0px 0.2em
}
#cp_staff .staff_member .cp_staff_name DD {
	FONT-SIZE: 1.2em
}
#cp_staff .staff_member .cp_staff_contact {
	FLOAT: left
}
#cp_staff .staff_member .cp_staff_contact DT {
	FONT-WEIGHT: bold
}
#cp_staff .staff_member .cp_staff_contact DD {
	MARGIN: 0px 0px 0.2em
}
IFRAME {
	BORDER-TOP-WIDTH: 0px! important; BORDER-LEFT-WIDTH: 0px! important; =
BORDER-BOTTOM-WIDTH: 0px! important; OVERFLOW: hidden! important; =
BORDER-RIGHT-WIDTH: 0px! important
}
#cp_bn_wrap {
	FONT: 1em/1.4em arial, sans-serif
}
#cp_bn_wrap * {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#cp_bn_wrap A {
	BORDER-RIGHT: #900000 5px solid; BORDER-TOP: #900000 5px solid; =
DISPLAY: block; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/breaking_news_b=
kg.jpg) #900000 repeat-x 0px 0px; MARGIN: 0px 0px 10px; BORDER-LEFT: =
#900000 5px solid; BORDER-BOTTOM: #900000 5px solid; TEXT-DECORATION: =
none
}
#cp_bn_wrap A:hover {
	BORDER-RIGHT: #de0000 5px solid; BORDER-TOP: #de0000 5px solid; =
BACKGROUND: #de0000; BORDER-LEFT: #de0000 5px solid; BORDER-BOTTOM: =
#de0000 5px solid
}
#cp_bn_wrap A .gutter {
	BORDER-RIGHT: #fff 1px solid; PADDING-RIGHT: 7px; BORDER-TOP: #fff 1px =
solid; PADDING-LEFT: 7px; BACKGROUND: none transparent scroll repeat 0% =
0%; PADDING-BOTTOM: 7px; MARGIN: 0px; BORDER-LEFT: #fff 1px solid; =
PADDING-TOP: 7px; BORDER-BOTTOM: #fff 1px solid; POSITION: relative
}
#cp_bn_wrap A H2 {
	COLOR: #fff
}
#cp_bn_wrap A H3 {
	COLOR: #fff
}
#cp_bn_wrap A H4 {
	COLOR: #fff
}
#cp_bn_wrap A P {
	COLOR: #fff
}
#cp_bn_wrap A H2 {
	FONT-SIZE: 18px; MARGIN: 0px 0px 0.5em; TEXT-TRANSFORM: uppercase; =
FONT-FAMILY: "Trebuchet MS", serif
}
#cp_bn_wrap A H3 {
	FONT-SIZE: 22px; MARGIN: 0px 0px 0.25em; FONT-STYLE: italic
}
#cp_bn_wrap A H4 {
	FONT-SIZE: 16px; MARGIN: 0px 0px 0.5em
}
#cp_bn_wrap A P {
	FONT-SIZE: 11px; MARGIN: 0px; LINE-HEIGHT: 13px
}
#cp_bn_wrap A .with_img {
	FLOAT: left; WIDTH: 65%
}
#cp_bn_wrap A IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; FLOAT: right; =
BORDER-BOTTOM-WIDTH: 0px; MARGIN: 0px; WIDTH: 32%; BORDER-RIGHT-WIDTH: =
0px
}
#cp_bn_article_header {
	FONT-SIZE: 20px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/breaking_news_b=
kg.jpg) #de0000 repeat-x 0px 0px; TEXT-TRANSFORM: uppercase; COLOR: =
#fff; TEXT-INDENT: 0.3em; LINE-HEIGHT: 40px; FONT-FAMILY: 'trebuchet =
ms', serif
}
BLOCKQUOTE.cp_pullquote {
	BORDER-TOP: #000 3px double; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM: =
#000 3px double; BORDER-RIGHT-WIDTH: 0px
}
BLOCKQUOTE.cp_pullquote P {
	MARGIN: 0px; FONT: 18px/22px georgia, serif
}
BLOCKQUOTE.cp_pullquote P:first-letter {
	TEXT-TRANSFORM: uppercase
}
#cp_article_top {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px 0px 15px; PADDING-TOP: 10px! =
important; BORDER-BOTTOM: #ccc 1px solid
}
#cp_article_top UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#cp_article_tools UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#cp_article_bottom UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#flan_ads .cp_ad H4.ad_slug {
	DISPLAY: none; BACKGROUND: none transparent scroll repeat 0% 0%; FONT: =
10px/14px 'trebuchet ms', arial, sans-serif; TEXT-TRANSFORM: uppercase; =
COLOR: #aaa; TEXT-ALIGN: center
}
#cp_article_bottom {
	MARGIN: 15px 0px
}
#cp_article_top UL {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px; PADDING-TOP: 0px! important
}
#cp_article_top LI {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#cp_article_bottom LI {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#cp_story_bot_nav {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FONT-SIZE: =
11px; PADDING-BOTTOM: 0px! important; MARGIN: 0px; LINE-HEIGHT: 17px; =
PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none
}
#cp_article_top LI A {
	COLOR: #333333! important
}
#cp_article_bottom LI A {
	COLOR: #333333! important
}
#cp_story_bot_nav A {
	COLOR: #333333! important
}
#cp_article_top LI A:hover {
	COLOR: #000000! important
}
#cp_article_bottom A:hover {
	COLOR: #000000! important
}
#cp_article_top_left {
	FLOAT: left; WIDTH: 230px
}
#cp_article_top_left LI {
	DISPLAY: inline; MARGIN: 0px 5px 0px 0px
}
#cp_article_top_right {
	FLOAT: right; WIDTH: 190px; TEXT-ALIGN: right
}
#cp_article_bottom_right {
	FLOAT: right; WIDTH: 190px; TEXT-ALIGN: right
}
LI#cp_article_discuss A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/discuss.gif) =
no-repeat left -1px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#cp_article_print A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/print.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#cp_article_email A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/email.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#cp_article_more A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/down.gif) =
no-repeat left 50%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
LI#cp_article_blog A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/blogger.gif) =
no-repeat left 50%
}
LI#cp_article_facebook A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/facebook.gif) =
no-repeat left 50%
}
LI#cp_article_live A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/livejournal.gif)=
 no-repeat left 50%
}
LI#cp_article_digg A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/digg.gif) =
no-repeat left 50%
}
LI#cp_article_news A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/newsvine.gif) =
no-repeat left 50%
}
LI#cp_article_deli A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/delicious.gif) =
no-repeat left 50%
}
LI#cp_article_yaho A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/yahoo.gif) =
no-repeat left 50%
}
LI#cp_article_goog A {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/google.gif) =
no-repeat left 0px
}
LI.cp_article_page DIV {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/page.gif) =
no-repeat left center; FLOAT: right; PADDING-BOTTOM: 0px; PADDING-TOP: =
0px
}
#cp_story_text {
	MARGIN: 0px 0px 15px
}
#cp_article_tools {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; MARGIN: 0px =
0px 25px; PADDING-TOP: 0px
}
P.cp_article_more_tools {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
FONT-WEIGHT: bold! important; FONT-SIZE: 12px! important; =
PADDING-BOTTOM: 0px! important; MARGIN: 0px; PADDING-TOP: 0px! important
}
P.cp_article_tools_header {
	PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; =
FONT-WEIGHT: bold! important; FONT-SIZE: 11px; PADDING-BOTTOM: 0px! =
important; MARGIN: 0px 0px 8px; PADDING-TOP: 0px! important
}
#cp_article_tools .cp_article_gutter {
	PADDING-RIGHT: 5px! important; PADDING-LEFT: 5px! important; =
PADDING-BOTTOM: 5px! important; PADDING-TOP: 5px! important
}
#cp_article_tools UL {
	PADDING-RIGHT: 0px! important; DISPLAY: inline! important; =
PADDING-LEFT: 0px! important; PADDING-BOTTOM: 0px! important; MARGIN: =
0px; PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none! important
}
#cp_article_tools LI {
	PADDING-RIGHT: 0px! important; DISPLAY: inline! important; =
PADDING-LEFT: 0px! important; PADDING-BOTTOM: 0px! important; MARGIN: =
0px; PADDING-TOP: 0px! important; LIST-STYLE-TYPE: none! important
}
#cp_article_tools LI A {
	PADDING-RIGHT: 0px! important; DISPLAY: inline! important; =
PADDING-LEFT: 17px! important; FONT-SIZE: 10px! important; =
PADDING-BOTTOM: 3px! important; MARGIN: 0px 3px 0px 0px; PADDING-TOP: =
3px! important
}
#cp_article_tools LI A {
	DISPLAY: inline! important; FONT-SIZE: 10px! important
}
#cp_article_tools_book {
	CLEAR: left; MARGIN: -12px 0px 0px 5px
}
HTML > BODY #cp_article_tools_book {
	LEFT: 5px; MARGIN: 27px 0px 0px; POSITION: relative; TOP: -5px
}
#cp_article_tools_blog {
	FLOAT: left! important; WIDTH: 0px! important
}
#cp_article_tools_rss {
	FLOAT: right! important; BORDER-LEFT: #fff 1px solid; WIDTH: 140px! =
important
}
HTML > BODY #cp_article_tools_rss {
	WIDTH: 160px! important
}
#cp_story_bot_nav {
	MARGIN: 0px 0px 15px; TEXT-ALIGN: right
}
#cp_continued {
	FONT-SIZE: 11px; MARGIN: 0px 0px 15px; LINE-HEIGHT: 17px
}
* HTML #cp_article_tools {
	HEIGHT: 47px
}
.RSSItemListRow {
	PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 4px; COLOR: =
#000; LINE-HEIGHT: 1.1em; PADDING-TOP: 4px
}
#slider2_wrap .slider2_hot {
	DISPLAY: block; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/lightning.pn=
g) no-repeat left center; FLOAT: left; WIDTH: 19px; TEXT-INDENT: =
-1000em; HEIGHT: 16px
}
.RSSItemListSchool {
	FONT-SIZE: 10px; COLOR: #666; LINE-HEIGHT: 1.3em
}
.FlippyEvenRow {
	BACKGROUND-COLOR: #eee
}
.ListBoxItemHover {
	CURSOR: pointer; COLOR: #000; BACKGROUND-COLOR: #ff9
}
.SelectedListBoxItem {
	BACKGROUND: #ff0; COLOR: #000
}
.RSSItemListFeedback {
	MARGIN: 75px auto auto; HEIGHT: 32px
}
.RSSItemListFeedback TD {
	FONT: 0.9em/1.4em trebuchet ms; COLOR: #666
}
.ClearAll {
	CLEAR: both; FONT-SIZE: 0px; LINE-HEIGHT: 0; HEIGHT: 0px
}
.SpryHiddenRegion {
	VISIBILITY: hidden
}
#slider2_wrap {
	CLEAR: left; MARGIN: 10px 0px; WIDTH: 300px
}
#slider2_wrap H3 A {
	PADDING-RIGHT: 20px; DISPLAY: block; BACKGROUND: =
url(/media/assets/icons/fff/bullet_go.png) no-repeat right center; =
COLOR: #333! important; BORDER-BOTTOM: #ccc 1px dashed
}
#slider2_wrap H3 A:hover {
	BACKGROUND-COLOR: #ff9
}
#slider2_wrap .lead_wrap {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #ccc 1px; =
PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #ccc 1px solid; =
PADDING-TOP: 0px; BORDER-BOTTOM: #ccc 1px solid
}
#slider2_wrap .contentslide {
	PADDING-RIGHT: 1px; PADDING-LEFT: 1px; BACKGROUND: #fff; =
PADDING-BOTTOM: 1px; PADDING-TOP: 1px; POSITION: relative
}
#slider2_wrap .contentdiv_scroller {
	PADDING-RIGHT: 9px; PADDING-LEFT: 5px; BACKGROUND: #fff; =
PADDING-BOTTOM: 0px; OVERFLOW: auto; PADDING-TOP: 5px; POSITION: =
relative; HEIGHT: 230px
}
#slider2_wrap .linkbar {
	PADDING-RIGHT: 4px; BORDER-TOP: #ddd 1px solid; MARGIN-TOP: 1px; =
PADDING-LEFT: 4px; FONT-SIZE: 0.95em; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/box_gradient.gi=
f) #fff repeat-x; PADDING-BOTTOM: 0px; VERTICAL-ALIGN: middle; COLOR: =
#666; LINE-HEIGHT: 20px; PADDING-TOP: 0px; TEXT-ALIGN: right
}
#slider2_wrap .linkbar IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; VERTICAL-ALIGN: middle; BORDER-RIGHT-WIDTH: 0px
}
#slider2_wrap .linkbar A {
	COLOR: #fff
}
#slider2_wrap .linkbar A:hover {
	BACKGROUND: #ff9
}
#slider2_wrap .contentslide .contentdiv {
	DISPLAY: none
}
#slider2_wrap .contentslide A {
	COLOR: #000
}
#slider2_wrap .contentdiv_scroller A:hover * {
	DISPLAY: block; COLOR: #000; BACKGROUND-COLOR: #ff9
}
#slider2_wrap DIV.pagination_wrap {
	PADDING-RIGHT: 0px; PADDING-LEFT: 6px; FONT-SIZE: 11px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/bottom_line.gif=
) #eee repeat-x left bottom; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
#slider2_wrap .pagination {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; OVERFLOW: hidden; PADDING-TOP: 0px; TEXT-ALIGN: left
}
#slider2_wrap .pagination UL {
	DISPLAY: inline
}
#slider2_wrap .pagination LI {
	DISPLAY: inline
}
#slider2_wrap .pagination A {
	BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px =
solid; DISPLAY: block; PADDING-LEFT: 4px; FLOAT: left; PADDING-BOTTOM: =
3px; FONT: 11px/20px arial, helvetica, sans-serif; BORDER-LEFT: #ccc 1px =
solid; WIDTH: 16px; COLOR: #333; MARGIN-RIGHT: 3px; PADDING-TOP: 3px; =
BORDER-BOTTOM: #ccc 1px solid; HEIGHT: 16px; TEXT-DECORATION: none
}
#slider2_wrap .pagination A SPAN {
	DISPLAY: block; TEXT-INDENT: -1000em
}
#slider2_wrap .pagination A#tab_mp SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/newspaper_po=
p.png) no-repeat left top
}
#slider2_wrap .pagination A#tab_me SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/email_go.png=
) no-repeat left top
}
#slider2_wrap .pagination A#tab_mc SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/user_comment=
.png) no-repeat left top
}
#slider2_wrap .pagination A#tab_pc SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/ipod.png) =
no-repeat left top
}
#slider2_wrap .pagination A#tab_ce SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/date.png) =
no-repeat left top
}
#slider2_wrap .pagination A#tab_mb SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/comments.png=
) no-repeat left top
}
#slider2_wrap .pagination A#tab_ci SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/newspaper_ad=
d.png) no-repeat left top
}
#slider2_wrap .pagination A#tab_rc SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/transmit.png=
) no-repeat left top
}
#slider2_wrap .pagination A#tab_nc SPAN {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/transmit_blu=
e.png) no-repeat left top
}
#slider2_wrap .pagination A:hover {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/box_gradient.gi=
f) #fff repeat-x 0px 1px; BORDER-BOTTOM: #fff 1px solid
}
#slider2_wrap .pagination A.selected {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/box_gradient.gi=
f) #fff repeat-x 0px 1px; BORDER-BOTTOM: #fff 1px solid
}
#slider2_wrap .pagination A:hover {
	BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: =
#ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
}
#slider2_wrap .pagination A.selected:hover {
	BORDER-BOTTOM: #fff 1px solid
}
#slider2_wrap .pagination A.pagination_next {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; FONT: 16px/22px arial, =
helvetica, sans-serif; COLOR: #fff; BORDER-TOP-STYLE: none; PADDING-TOP: =
5px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; TEXT-DECORATION: =
none; BORDER-BOTTOM-STYLE: none
}
#slider2_wrap .pagination A.pagination_next:hover {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: none transparent =
scroll repeat 0% 0%; PADDING-BOTTOM: 0px; FONT: 16px/22px arial, =
helvetica, sans-serif; COLOR: #fff; BORDER-TOP-STYLE: none; PADDING-TOP: =
5px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; TEXT-DECORATION: =
none; BORDER-BOTTOM-STYLE: none
}
#slider2_wrap .pagination IMG {
	PADDING-BOTTOM: 2px; VERTICAL-ALIGN: middle; BORDER-TOP-STYLE: none; =
BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: =
none
}
.safari .box {
	FLOAT: none! important
}
.ie6 #slider2_wrap .pagination A {
	WIDTH: 16px; LINE-HEIGHT: 16px
}
.cp_local_ad {
	OVERFLOW: hidden
}
.cp_banner_client {
	OVERFLOW: hidden
}
.carousel-component {
	VISIBILITY: hidden; OVERFLOW: hidden; POSITION: relative
}
.carousel-component UL.carousel-list {
	Z-INDEX: 1; WIDTH: 10000000px; POSITION: relative
}
.carousel-component .carousel-list LI {
	FLOAT: left; OVERFLOW: hidden; LIST-STYLE-TYPE: none
}
.carousel-component .carousel-vertical LI {
	FLOAT: none; MARGIN-BOTTOM: 0px
}
.carousel-component UL.carousel-vertical {
	WIDTH: auto
}
.carousel-component .carousel-clip-region {
	MARGIN: 0px auto; OVERFLOW: hidden; POSITION: relative
}
#roo_component_wrapper {
	MARGIN: 0px 0px 10px; WIDTH: 300px
}
#roo_component_header {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #eee; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: =
#c2c2c2 1px solid
}
#roo_component_header LI {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; BACKGROUND: =
#eee; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
}
#roo_component_header LI A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; FONT: =
10px/23px arial, helvetica, sans-serif; COLOR: #609fdf; PADDING-TOP: 0px
}
#roo_component_header LI H5 {
	BORDER-RIGHT: #c2c2c2 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: =
#c2c2c2 1px solid; PADDING-LEFT: 26px; BACKGROUND: =
url(http://collegepublisher.com/media/assets/icons/fff/television.png) =
#fff no-repeat 6px 1px; FLOAT: left; PADDING-BOTTOM: 3px; MARGIN: 0px =
0px 0px 6px; FONT: bold 14px/1.2em Arial, Helvetica, sans-serif; =
BORDER-LEFT: #c2c2c2 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #fff =
1px solid
}
.ie6 #roo_component_header LI H5 {
	MARGIN: 0px 0px 0px 3px
}
.safari #roo_component_header LI H5 {
	PADDING-RIGHT: 6px; PADDING-LEFT: 26px; PADDING-BOTTOM: 4px; =
PADDING-TOP: 2px; BORDER-BOTTOM: #fff 1px solid
}
#roo_component {
	BORDER-RIGHT: #c2c2c2 1px solid; BORDER-TOP: #c2c2c2 0px solid; =
BORDER-LEFT: #c2c2c2 1px solid; WIDTH: 298px; BORDER-BOTTOM: #c2c2c2 1px =
solid
}
.carousel-component {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; =
BORDER-LEFT-WIDTH: 0px; BACKGROUND: #fff; BORDER-BOTTOM-WIDTH: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px auto; COLOR: #618cbe; PADDING-TOP: 0px; =
BORDER-RIGHT-WIDTH: 0px; -moz-border-radius: 0px
}
.carousel-component UL.carousel-list {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.carousel-component .carousel-prev {
	Z-INDEX: 3; LEFT: 0px; CURSOR: pointer; POSITION: absolute; TOP: 27px
}
.carousel-component .carousel-next {
	Z-INDEX: 3; RIGHT: 0px; CURSOR: pointer; POSITION: absolute; TOP: 27px
}
#roo_component .carousel-button {
	DISPLAY: block; WIDTH: 16px; TEXT-INDENT: -1000em; HEIGHT: 16px
}
#roo_component #prev-arrow {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/control_star=
t_blue.png)
}
#roo_component #next-arrow {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/icons/fff/control_end_=
blue.png)
}
.carousel-component .carousel-list LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 4px; MARGIN: 4px =
0px 0px; FONT: 9px verdana,arial,sans-serif; WIDTH: 130px; COLOR: #666; =
PADDING-TOP: 0px; TEXT-ALIGN: center
}
.carousel-component .carousel-vertical LI {
=09
}
.carousel-component UL.carousel-vertical {
=09
}
.carousel-component .carousel-list LI A {
	BORDER-RIGHT: #fff 2px solid; BORDER-TOP: #fff 2px solid; DISPLAY: =
block; BORDER-LEFT: #fff 2px solid; BORDER-BOTTOM: #fff 2px solid; =
HEIGHT: 55px; TEXT-DECORATION: none! important; outline: none; =
-moz-outline: none
}
.carousel-component .carousel-list LI A:hover {
	BORDER-RIGHT: #fffccc 2px solid; BORDER-TOP: #fffccc 2px solid; =
BACKGROUND: #fffccc; BORDER-LEFT: #fffccc 2px solid; BORDER-BOTTOM: =
#fffccc 2px solid; TEXT-DECORATION: none! important
}
.carousel-component .carousel-list LI.active A {
	BORDER-RIGHT: #708fc7 2px solid; BORDER-TOP: #708fc7 2px solid; =
BORDER-LEFT: #708fc7 2px solid; BORDER-BOTTOM: #708fc7 2px solid
}
.carousel-component .carousel-list LI STRONG {
	DISPLAY: block
}
.carousel-component .carousel-list LI {
	POSITION: relative
}
.carousel-component .carousel-list LI IMG {
	BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; DISPLAY: =
block; LEFT: 2px; BORDER-LEFT: #999 1px solid; WIDTH: 50px; =
BORDER-BOTTOM: #999 1px solid; POSITION: absolute; TOP: 2px; HEIGHT: =
50px
}
.carousel-component .carousel-list LI DIV.roo_module_title {
	Z-INDEX: 4; RIGHT: 0px; OVERFLOW: hidden; WIDTH: 70px; COLOR: black; =
LINE-HEIGHT: 1em; POSITION: absolute; TOP: 2px; TEXT-ALIGN: left; =
TEXT-DECORATION: none
}
.carousel-component .carousel-list LI SPAN.roo_module_play {
	DISPLAY: block; TEXT-TRANSFORM: uppercase; COLOR: #609fdf! important; =
TEXT-DECORATION: none
}
.carousel-component .carousel-list LI A:hover SPAN.roo_module_play {
	TEXT-DECORATION: underline
}
#cp_video {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #e1e1e1; =
PADDING-BOTTOM: 1em; MARGIN: 0px; FONT: 16px/18px "trebuchet ms", =
helvetica, arial, sans-serif; COLOR: #000; PADDING-TOP: 0px; TEXT-ALIGN: =
center
}
#cp_video #cp_video_wrap {
	BORDER-RIGHT: #888 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #888 1px =
solid; PADDING-LEFT: 0px; BACKGROUND: #fff; PADDING-BOTTOM: 0px; MARGIN: =
0px auto; BORDER-LEFT: #888 1px solid; WIDTH: 987px; PADDING-TOP: 0px; =
BORDER-BOTTOM: #888 1px solid; TEXT-ALIGN: left
}
#cp_video .leaderboard {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #eee; =
PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; TEXT-ALIGN: center
}
#cp_video .leaderboard IMG {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px
}
#cp_video #header {
	MARGIN: 0px 0px 1.5em; WIDTH: 100%
}
#cp_video #header H1 {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/paper869/template/templatemed=
ia/flag.jpg) no-repeat 0px 0px; WIDTH: 100%; TEXT-INDENT: -1000em
}
#cp_video #header H1 A {
	DISPLAY: block; HEIGHT: 107px
}
#cp_video #top_bar {
	FONT-SIZE: 80%; BACKGROUND: #2b004d; MARGIN: 10px 10px 0px; OVERFLOW: =
hidden; WIDTH: 967px
}
#cp_video #top_bar A {
	COLOR: #fff; TEXT-DECORATION: underline
}
#cp_video #top_bar A:visited {
	COLOR: #fff; TEXT-DECORATION: underline
}
#cp_video #top_bar H3 {
	PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 10px; =
PADDING-BOTTOM: 0px; FONT: 1.1em/27px arial, helvetica, sans-serif; =
COLOR: #fff; PADDING-TOP: 0px
}
#cp_video #video_iframe {
	PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px 0px 1em; PADDING-TOP: 0px
}
#cp_video #roo_frame {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px; OVERFLOW: hidden; BORDER-TOP-STYLE: none; PADDING-TOP: =
0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; =
BORDER-BOTTOM-STYLE: none
}
#cp_video #video_feed {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: =
url(http://media.collegepublisher.com/media/assets/images/feed_gradient.g=
if) #fff repeat-y left top; FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: =
0px; OVERFLOW: hidden; WIDTH: 200px; PADDING-TOP: 0px; HEIGHT: 920px
}
#cp_video #video_feed H2 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0.5em; BACKGROUND: #e7e7e7; =
PADDING-BOTTOM: 0px; FONT: bold 12px/1.6em arial, helvetica, sans-serif; =
WIDTH: 100%; COLOR: #666; PADDING-TOP: 0px
}
#cp_video #video_feed UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 13px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#cp_video #video_feed LI {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
5px; MARGIN: 0px; PADDING-TOP: 5px; BORDER-BOTTOM: #c2c2c2 1px solid; =
LIST-STYLE-TYPE: none
}
#cp_video #video_feed LI:hover {
	BACKGROUND: #fffccc
}
#cp_video #video_feed IMG {
	BORDER-RIGHT: #c2c2c2 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: =
#c2c2c2 1px solid; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: 0px; =
MARGIN: 0px 5px 0px 0px; BORDER-LEFT: #c2c2c2 1px solid; PADDING-TOP: =
0px; BORDER-BOTTOM: #c2c2c2 1px solid
}
#cp_video #video_feed LI H3 {
	FLOAT: left; FONT: bold 1em/1.2em arial, helvetica, sans-serif; =
TEXT-TRANSFORM: none; WIDTH: 45%; COLOR: #666
}
#cp_video #video_feed LI H3 SPAN {
	DISPLAY: block; TEXT-TRANSFORM: uppercase; COLOR: #22b267
}
#cp_video #video_feed LI A:hover SPAN {
	TEXT-DECORATION: underline
}
#cp_video .cp_clear {
	CLEAR: both
}
#cp_video #footer {
	BORDER-TOP: #2b004d 4px solid; BACKGROUND: #fff; WIDTH: 100%; =
TEXT-ALIGN: left
}
#cp_video #footer P {
	FONT-SIZE: 11px; MARGIN: 0.5em; COLOR: #666
}
#cp_video #footer P A {
	FONT-WEIGHT: bold; COLOR: #2b004d; TEXT-DECORATION: none
}

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
Content-Location: http://media.collegepublisher.com/media/css/features_1024.css?v1

#net_search {
	VISIBILITY: hidden
}

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/css/popup_new.css?v12

.dialog {
	DISPLAY: block; POSITION: absolute; TEXT-ALIGN: left! important
}
.dialog TABLE.table_window {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; WIDTH: 100%; PADDING-TOP: 0px; BORDER-COLLAPSE: collapse; =
border-spacing: 0
}
.dialog TABLE.table_window TD {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.dialog TABLE.table_window TH {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.dialog .title_window {
	-moz-user-select: none
}
.dialog_close {
	Z-INDEX: 2000; BACKGROUND: url(/media/assets/icons/close.gif) no-repeat =
0px 0px; LEFT: 97%; WIDTH: 14px; CURSOR: pointer; POSITION: absolute; =
TOP: 22px; HEIGHT: 14px
}
.overlay_popup {
	FILTER: alpha(opacity=3D50); BACKGROUND-COLOR: #000000; -moz-opacity: =
0.50; opacity: 0.50
}
.overlay_dialog {
	FILTER: alpha(opacity=3D70); BACKGROUND-COLOR: #000000; -moz-opacity: =
0.7; opacity: 0.7
}
.overlay_dialog IFRAME {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}
.overlay___invisible__ {
	FILTER: alpha(opacity=3D0); BACKGROUND-COLOR: #000000; -moz-opacity: 0; =
opacity: 0
}

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/css/print.css?v1

* {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
#topbar {
	DISPLAY: none
}
#topsearchform {
	DISPLAY: none
}
#cpleftcol {
	DISPLAY: none
}
#cprightcol {
	DISPLAY: none
}
#banner_network_5 {
	DISPLAY: none
}
#cpheader {
	DISPLAY: none
}
#cpleftcol {
	DISPLAY: none
}
#cprightcol {
	DISPLAY: none
}
#issuesummary {
	DISPLAY: none
}
#ncbar {
	DISPLAY: none
}
.goner {
	DISPLAY: none
}
#cpfooter {
	DISPLAY: none
}
#ncbar TD {
	DISPLAY: none
}
#agent99 {
	DISPLAY: none
}
#loggedin_bar {
	DISPLAY: none
}
#maincontent {
	DISPLAY: block
}
#cpcentercol {
	WIDTH: 100%
}
#left_cell {
	DISPLAY: none
}
IFRAME {
	DISPLAY: none
}
#banner_network_2 {
	DISPLAY: none
}
#right_cell {
	DISPLAY: none
}
#topbar {
	DISPLAY: none
}
#cpheader {
	DISPLAY: none
}
#cpfooter {
	DISPLAY: none
}
.goner {
	DISPLAY: none
}
#banner_client_1 {
	DISPLAY: none
}
#flan_header {
	DISPLAY: none
}
#flan_ads {
	DISPLAY: none
}
#flan_nav {
	DISPLAY: none
}
#weatherm {
	DISPLAY: none
}
#flan_footer {
	DISPLAY: none
}
#topbar {
	DISPLAY: none
}
#flan_content {
	WIDTH: 100%
}

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.thevarsity.ca/media/paper285/styles.css?v13

A {
	COLOR: #18618e
}
#flan_header_meta {
	BORDER-TOP: #ccc 1px solid; BACKGROUND: =
url(http://media.collegepublisher.com/media/paper285/template/templatemed=
ia/cp_meta.jpg) #610400 repeat-x 0px 0px; BORDER-BOTTOM: #999 1px solid
}
#flan_header_meta * {
	COLOR: #ffffff
}
#flan_nav H4 {
	BACKGROUND: #18618e; COLOR: #ffffff
}
#flan_nav LI A {
	BACKGROUND: #ffffff; COLOR: #18618e; BORDER-BOTTOM: #dddddd 1px solid
}
#flan_nav LI A:hover {
	BACKGROUND: #f5f5f5
}
* {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
BODY {
	FONT: 12px/16px arial, verdana, sans-serif
}
#flan_wrap {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/paper285/template/templatemed=
ia/cp_nav.jpg) repeat-y -120px 0px; WIDTH: 1000px
}
#flan_header * {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#flan_header {
	FLOAT: left; POSITION: relative
}
#flan_header_main {
	BACKGROUND: =
url(http://media.collegepublisher.com/media/paper285/template/templatemed=
ia/cp_header.jpg) no-repeat 0px 0px; POSITION: relative; HEIGHT: 92px
}
#flan_header_meta {
	FLOAT: left; WIDTH: 1000px
}
#flan_header_meta * {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: =
12px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; text-shadow: =
2px 2px 1px #000
}
#flan_meta_left {
	PADDING-RIGHT: 0px; PADDING-LEFT: 7px; FLOAT: left; PADDING-BOTTOM: =
0px; WIDTH: 466px; PADDING-TOP: 8px; TEXT-ALIGN: left
}
#flan_meta_right {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; FLOAT: right; PADDING-BOTTOM: =
6px; WIDTH: 466px; PADDING-TOP: 6px; TEXT-ALIGN: right
}
#flan_meta_right FIELDSET {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
#flan_meta_right INPUT {
	FONT-SIZE: 10px; COLOR: #000000! important
}
H1#flan_logo {
	WIDTH: 1000px; TEXT-INDENT: 0px; LINE-HEIGHT: 92px; HEIGHT: 92px
}
H1#flan_logo A {
	DISPLAY: block; WIDTH: 1000px; TEXT-INDENT: -1000px; LINE-HEIGHT: 92px; =
HEIGHT: 92px
}
#flan_body {
	FLOAT: left
}
#flan_nav {
	FLOAT: left; WIDTH: 180px
}
#flan_body_wrap {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: =
0px; WIDTH: 820px; PADDING-TOP: 10px
}
#flan_leader {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: #ccc; =
PADDING-BOTTOM: 5px; PADDING-TOP: 5px; TEXT-ALIGN: center
}
#flan_content {
	FLOAT: left; WIDTH: 520px
}
#flan_content .gutter {
	MARGIN: 0px 10px 10px
}
.flan_lead {
	MARGIN: 0px 0px 20px
}
.flan_lead H2 {
	TEXT-TRANSFORM: uppercase
}
.flan_lead IMG {
	FLOAT: left; MARGIN: 0px 10px 10px 0px
}
.flan_fp_section {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; MARGIN: =
0px 0px 20px; PADDING-TOP: 0px; BORDER-BOTTOM: #d8d8d8 1px solid
}
.flan_fp_section IMG {
	FLOAT: left; MARGIN: 0px 5px 5px 0px
}
.flan_fp_section H4 {
	FONT-SIZE: 1.5em; MARGIN: 0px; LINE-HEIGHT: 1.4em
}
.flan_fp_section H3 {
	PADDING-RIGHT: 0px; BORDER-TOP: #d8d8d8 1px solid; PADDING-LEFT: 5px; =
FONT-SIZE: 1.2em; BACKGROUND: =
url(http://media.collegepublisher.com/media/paper285/template/templatemed=
ia/section_bg.jpg) #ececec repeat-x left top; PADDING-BOTTOM: 0px; =
MARGIN: 0px 0px 10px; TEXT-TRANSFORM: uppercase; LINE-HEIGHT: 1.8em; =
PADDING-TOP: 0px; BORDER-BOTTOM: #d8d8d8 1px solid
}
.flan_section_lead {
	FLOAT: left; WIDTH: 300px
}
.flan_section_lead IMG {
	BORDER-RIGHT: #d8d8d8 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: =
#d8d8d8 1px solid; PADDING-LEFT: 3px; FLOAT: left! important; =
PADDING-BOTTOM: 3px; MARGIN: 0px 5px 0px 0px; BORDER-LEFT: #d8d8d8 1px =
solid; PADDING-TOP: 3px; BORDER-BOTTOM: #d8d8d8 1px solid
}
.flan_fp_section UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: =
0px; MARGIN: 0px; WIDTH: 155px; PADDING-TOP: 0px
}
.flan_fp_section LI {
	LIST-STYLE-POSITION: inside; FONT-SIZE: 14px; MARGIN: 0px 0px 5px; =
LIST-STYLE-TYPE: disc
}
.flan_section_more {
	TEXT-ALIGN: right
}
.flan_clear {
	CLEAR: both
}
.flan_section {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 15px; MARGIN: =
0px 0px 15px; PADDING-TOP: 0px; BORDER-BOTTOM: #999 1px dotted
}
.flan_section_title {
	FONT-SIZE: 22px; MARGIN: 0px 0px 15px; LINE-HEIGHT: 1.2em; =
BORDER-BOTTOM: #666 1px solid
}
.flan_section H2 {
	FONT-SIZE: 18px; MARGIN: 0px 0px 2px; LINE-HEIGHT: 1.2em
}
.flan_section H3 {
	FONT-WEIGHT: normal; FONT-SIZE: 14px; MARGIN: 0px 0px 5px; LINE-HEIGHT: =
1.2em
}
.flan_section H5 {
	MARGIN: 0px 0px 5px; FONT: 14px/1.2em Georgia, Times New Roman, serif
}
.flan_section P {
	MARGIN: 0px
}
.flan_author {
	TEXT-TRANSFORM: uppercase
}
#flan_footer {
	CLEAR: both; PADDING-RIGHT: 10px; BORDER-TOP: #dddddd 4px solid; =
PADDING-LEFT: 10px; BACKGROUND: #e5e5e5; PADDING-BOTTOM: 10px; FONT: =
11px/15px arial, verdana, sans-serif; PADDING-TOP: 10px; POSITION: =
relative; TOP: 33px
}
#flan_footer A {
	COLOR: #000
}
#flan_footer A:hover {
	COLOR: #000; TEXT-DECORATION: underline
}
#flan_nav H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 7px; PADDING-BOTTOM: 0px; MARGIN: =
0px; FONT: 13px/25px arial, verdana, sans-serif; TEXT-TRANSFORM: =
uppercase; PADDING-TOP: 0px; text-shadow: 2px 2px 1px #000000
}
#flan_nav LI {
	DISPLAY: inline; LIST-STYLE-TYPE: none
}
#flan_nav LI A {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 7px; PADDING-BOTTOM: =
0px; FONT: 13px/25px arial, verdana, sans-serif; PADDING-TOP: 0px; =
TEXT-DECORATION: none
}
#flan_nav LI UL A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 14px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
#flan_nav LI UL A:unknown {
	content: "- "
}
#banner_client_1 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px; TEXT-ALIGN: center
}

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/coda/mtvi_reporting.js

/*Build Date: Wed Jan 24, 2007 13:39:48*/=0A=
=0A=
var =
com=3D{mtvi:{util:{},logger:{},config:{},ads:{},reporting:{}}};String.pro=
totype.trim=3Dfunction(){return this.replace(/^\\s+|\\s+$/g,'');}=0A=
String.prototype.chop=3Dfunction(n){if(isNaN(n)){n=3Dthis.length-1;}retur=
n(this.substring(0,n));}=0A=
String.prototype.ucFirst=3Dfunction(){return(this.charAt(0).toUpperCase()=
+this.substr(1,this.length));}=0A=
if(typeof =
document.getElementsByClassName=3D=3D"undefined"){document.getElementsByC=
lassName=3Dfunction(s){var nodes=3D[];var name=3Dnew =
RegExp('\\b'+s+'\\b');var elems=3Dthis.getElementsByTagName('*');for(var =
i=3D0;i<elems.length;i++){if(name.test(elems[i].className)){nodes.push(el=
ems[i])};}=0A=
return nodes;};}=0A=
Math.getRnd=3Dfunction(a_numA,a_numB){if(!com.mtvi.utils.isDefined(a_numA=
)||isNaN(a_numA)||parseInt(a_numA)<0){a_numA=3D1;}=0A=
if(!com.mtvi.utils.isDefined(a_numB)||isNaN(a_numB)||parseInt(a_numB)<0){=
a_numB=3D0;}=0A=
if(a_numA<a_numB){var tempNum=3Da_numA;a_numA=3Da_numB;a_numB=3DtempNum;}=0A=
return(parseInt(Math.random()*(a_numA-a_numB+1)+a_numB));};com.mtvi.util=3D=
{isDefined:function(v){if(typeof =
v=3D=3D=3D'undefined'||v=3D=3D=3Dnull||v=3D=3D=3D''||v=3D=3D=3D'undefined=
'){return false}else{return =
true};},queryStringToHash:function(str){try{var qs=3D[];var =
a=3Dstr.split("?")[1].split("&");for(var x=3D0;x<a.length;x++){var =
b=3Da[x].split("=3D");qs[b[0]]=3Db[1];}=0A=
return =
qs;}catch(e){}},addOnloadEvent:function(func){try{if(window.attachEvent){=
window.attachEvent("onload",func);}=0A=
if(window.addEventListener){window.addEventListener("load",func,false);}=0A=
return this;}catch(e){}},setProperties:function(o){try{for(var i in =
o.properties){if(typeof o[i]!=3D"object"){var =
name=3Di.ucFirst();eval("o.get"+name+"=3Dfunction(){return =
this.properties['"+i+"'];}");eval("o.set"+name+"=3Dfunction(v){this.prope=
rties['"+i+"']=3Dthis.isDefined(v)?v:'';}");}}}catch(e){try{com.mtvi.logg=
er.JsError(e);}catch(e){}}},debug:function(msg){try{var =
c=3Ddocument.getElementById("debug");if(!c){c=3Ddocument.createElement("d=
iv");c.setAttribute("id","debug");document.getElementsByTagName("body")[0=
].appendChild(c);}=0A=
c.innerHTML=3Dc.innerHTML+msg+"<br>";}catch(e){}}};com.mtvi.logger=3D{url=
:"http://viarnd.112.2o7.net/b/ss/viarnd/1/EMAIL?",send:function(msg){if(M=
TVi.util.isDefined(msg)){var img=3Dnew =
Image();img.src=3Dmsg;}},JsError:function(e){try{var =
map=3D{message:'c21',name:'c22',stack:'c23'};var =
msg=3Dthis.url+"pageName=3DJS_ER-"+window.location;if(!MTVi.util.isDefine=
d(e.stack)){e.stack=3Dwindow.location.href;}=0A=
for(var i in =
map){if(MTVi.util.isDefined(e[i])){msg+=3D"&"+map[i]+"=3D"+e[i];}}=0A=
this.send(msg);}catch(e){try{this.send(this.url+"pageName=3DJS_ER-"+"com.=
mtvi.logger =
error:"+e.message);}catch(e){}}}};com.mtvi.reporting.Widget=3Ds_gi('none'=
);com.mtvi.reporting.Widget.setAttribute=3Dfunction(k,v){try{if(com.mtvi.=
util.isDefined(k)){this[k]=3Dcom.mtvi.util.isDefined(v)?v:'';}}catch(e){}=
};com.mtvi.reporting.Widget.getAttribute=3Dfunction(k){try{if(com.mtvi.ut=
il.isDefined(k)){return =
this[k];}else{return;}}catch(e){}};com.mtvi.reporting.Widget.setAccount=3D=
function(v){try{this.setAttribute("un",v);}catch(e){}};com.mtvi.reporting=
.Widget.getAccount=3Dfunction(v){try{this.getAttribute("un");}catch(e){}}=
;com.mtvi.reporting.Widget.appendCall=3Dfunction(s){try{document.write('<=
div style=3D"display:none;">'+s+'</div>');}catch(e){}};var =
s_objectID;function s_c2fe(f){var =
x=3D'',s=3D0,e,a,b,c;while(1){e=3Df.indexOf('"',s);b=3Df.indexOf('\\',s);=
c=3Df.indexOf("\n",s);if(e<0||(b>=3D0&&b<e))e=3Db;if(e<0||(c>=3D0&&c<e))e=
=3Dc;if(e>=3D0){x+=3D(e>s?f.substring(s,e):'')+(e=3D=3Dc?'\\n':'\\'+f.sub=
string(e,e+1));s=3De+1}else return x=0A=
+f.substring(s)}return f}function s_c2fa(f){var =
s=3Df.indexOf('(')+1,e=3Df.indexOf(')'),a=3D'',c;while(s>=3D0&&s<e){c=3Df=
.substring(s,s+1);if(c=3D=3D',')=0A=
a+=3D'","';else if(("\n\r\t ").indexOf(c)<0)a+=3Dc;s++}return =
a?'"'+a+'"':a}function s_c2f(cc){cc=3D''+cc;var fc=3D'var f=3Dnew =
Function(',s=3Dcc.indexOf(';',cc.indexOf('{')),e=3Dcc.lastIndexOf('}'),o,=
a,d,q,c,f,h,x=0A=
fc+=3Ds_c2fa(cc)+',"var s=3Dnew =
Object;';c=3Dcc.substring(s+1,e);s=3Dc.indexOf('function');while(s>=3D0){=
d=3D1;q=3D'';x=3D0;f=3Dc.substring(s);a=3Ds_c2fa(f);e=3Do=3Dc.indexOf('{'=
,s);e++;while(d>0){h=3Dc.substring(e,e+1);if(q){if(h=3D=3Dq&&!x)q=3D'';if=
(h=3D=3D'\\')x=3Dx?0:1;else =
x=3D0}else{if(h=3D=3D'"'||h=3D=3D"'")q=3Dh;if(h=3D=3D'{')d++;if(h=3D=3D'}=
')d--}if(d>0)e++}c=3Dc.substring(0,s)=0A=
+'new Function('+(a?a+',':'')+'"'+s_c2fe(c.substring(o+1,e))+'")'=0A=
+c.substring(e+1);s=3Dc.indexOf('function')}fc+=3Ds_c2fe(c)+';return =
s");'=0A=
eval(fc);return f}function s_gi(un,pg,ss){var c=3D"function s_c(un,pg,s"=0A=
+"s){var s=3Dthis;s.wd=3Dwindow;if(!s.wd.s_c_in){s.wd.s_c_il=3Dnew =
Array;s."=0A=
+"wd.s_c_in=3D0;}s._il=3Ds.wd.s_c_il;s._in=3Ds.wd.s_c_in;s._il[s._in]=3Ds=
;s.w"=0A=
+"d.s_c_in++;s.m=3Dfunction(m){return =
(''+m).indexOf('{')<0};s.fl=3Dfunct"=0A=
+"ion(x,l){return x?(''+x).substring(0,l):x};s.co=3Dfunction(o){if(!o)r"=0A=
+"eturn o;var n=3Dnew Object,x;for(x in o)if(x.indexOf('select')<0&&x.i"=0A=
+"ndexOf('filter')<0)n[x]=3Do[x];return =
n};s.num=3Dfunction(x){x=3D''+x;for"=0A=
+"(var p=3D0;p<x.length;p++)if(('0123456789').indexOf(x.substring(p,p+1"=0A=
+"))<0)return 0;return 1};s.rep=3Dfunction(x,o,n){var =
i=3Dx.indexOf(o),l=3D"=0A=
+"n.length>0?n.length:1;while(x&&i>=3D0){x=3Dx.substring(0,i)+n+x.substri=
"=0A=
+"ng(i+o.length);i=3Dx.indexOf(o,i+l)}return x};s.ape=3Dfunction(x){var =
s"=0A=
+"=3Dthis,i;x=3Dx?s.rep(escape(''+x),'+','%2B'):x;if(x&&s.charSet&&s.em=3D=
=3D"=0A=
+"1&&x.indexOf('%u')<0&&x.indexOf('%U')<0){i=3Dx.indexOf('%');while(i>=3D=
"=0A=
+"0){i++;if(('89ABCDEFabcdef').indexOf(x.substring(i,i+1))>=3D0)return "=0A=
+"x.substring(0,i)+'u00'+x.substring(i);i=3Dx.indexOf('%',i)}}return x}"=0A=
+";s.epa=3Dfunction(x){var s=3Dthis;return x?unescape(s.rep(''+x,'+',' =
')"=0A=
+"):x};s.pt=3Dfunction(x,d,f,a){var =
s=3Dthis,t=3Dx,z=3D0,y,r;while(t){y=3Dt.ind"=0A=
+"exOf(d);y=3Dy<0?t.length:y;t=3Dt.substring(0,y);r=3Ds.m(f)?s[f](t,a):f(=
t,"=0A=
+"a);if(r)return =
r;z+=3Dy+d.length;t=3Dx.substring(z,x.length);t=3Dz<x.leng"=0A=
+"th?t:''}return ''};s.isf=3Dfunction(t,a){var =
c=3Da.indexOf(':');if(c>=3D0"=0A=
+")a=3Da.substring(0,c);if(t.substring(0,2)=3D=3D's_')t=3Dt.substring(2);=
retu"=0A=
+"rn (t!=3D''&&t=3D=3Da)};s.fsf=3Dfunction(t,a){var =
s=3Dthis;if(s.pt(a,',','isf"=0A=
+"',t))s.fsg+=3D(s.fsg!=3D''?',':'')+t;return =
0};s.fs=3Dfunction(x,f){var s"=0A=
+"=3Dthis;s.fsg=3D'';s.pt(x,',','fsf',f);return =
s.fsg};s.c_d=3D'';s.c_gdf=3Df"=0A=
+"unction(t,a){var s=3Dthis;if(!s.num(t))return 1;return =
0};s.c_gd=3Dfunc"=0A=
+"tion(){var =
s=3Dthis,d=3Ds.wd.location.hostname,n=3Ds.cookieDomainPeriods,"=0A=
+"p;if(d&&!s.c_d){n=3Dn?parseInt(n):2;n=3Dn>2?n:2;p=3Dd.lastIndexOf('.');=
wh"=0A=
+"ile(p>=3D0&&n>1){p=3Dd.lastIndexOf('.',p-1);n--}s.c_d=3Dp>0&&s.pt(d,'.'=
,'"=0A=
+"c_gdf',0)?d.substring(p):''}return s.c_d};s.c_r=3Dfunction(k){var =
s=3Dt"=0A=
+"his;k=3Ds.ape(k);var c=3D' '+s.d.cookie,i=3Dc.indexOf(' =
'+k+'=3D'),e=3Di<0?i:"=0A=
+"c.indexOf(';',i),v=3Di<0?'':s.epa(c.substring(i+2+k.length,e<0?c.leng"=0A=
+"th:e));return v!=3D'[[B]]'?v:''};s.c_w=3Dfunction(k,v,e){var =
s=3Dthis,d=3Ds"=0A=
+".c_gd(),l=3Ds.cookieLifetime,t;v=3D''+v;l=3Dl?(''+l).toUpperCase():'';i=
f("=0A=
+"e&&l!=3D'SESSION'&&l!=3D'NONE'){t=3D(v!=3D''?parseInt(l?l:0):-60);if(t)=
{e=3Dn"=0A=
+"ew Date;e.setTime(e.getTime()+(t*1000))}}if(k&&l!=3D'NONE'){s.d.cooki"=0A=
+"e=3Dk+'=3D'+s.ape(v!=3D''?v:'[[B]]')+'; =
path=3D/;'+(e&&l!=3D'SESSION'?' expir"=0A=
+"es=3D'+e.toGMTString()+';':'')+(d?' domain=3D'+d+';':'');return =
s.c_r(k"=0A=
+")=3D=3Dv}return 0};s.eh=3Dfunction(o,e,r,f){var =
s=3Dthis,b=3D's_'+e+'_'+s._in"=0A=
+",n=3D-1,l,i,x;if(!s.ehl)s.ehl=3Dnew =
Array;l=3Ds.ehl;for(i=3D0;i<l.length&&n"=0A=
+"<0;i++){if(l[i].o=3D=3Do&&l[i].e=3D=3De)n=3Di}if(n<0){n=3Di;l[n]=3Dnew =
Object}x=3Dl"=0A=
+"[n];x.o=3Do;x.e=3De;f=3Dr?x.b:f;if(r||f){x.b=3Dr?0:o[e];x.o[e]=3Df}if(x=
.b){x."=0A=
+"o[b]=3Dx.b;return b}return 0};s.cet=3Dfunction(f,a,t,o,b){var =
s=3Dthis,r;"=0A=
+"if(s.isie&&a.apv>=3D5)eval('try{r=3Ds.m(f)?s[f](a):f(a)}catch(e){r=3Ds.=
m("=0A=
+"t)?s[t](e):t(e)}');else{if(s.ismac&&s.u.indexOf('MSIE =
4')>=3D0)r=3Ds.m("=0A=
+"b)?s[b](a):b(a);else{s.eh(s.wd,'onerror',0,o);r=3Ds.m(f)?s[f](a):f(a)"=0A=
+";s.eh(s.wd,'onerror',1)}}return r};s.gtfset=3Dfunction(e){var =
s=3Dthis;"=0A=
+"return s.tfs};s.gtfsoe=3Dnew Function('e','var =
s=3Ds_c_il['+s._in+'];s."=0A=
+"eh(window,\"onerror\",1);s.etfs=3D1;var =
c=3Ds.t();if(c)s.d.write(c);s.e"=0A=
+"tfs=3D0;return true');s.gtfsfb=3Dfunction(a){return =
window};s.gtfsf=3Dfun"=0A=
+"ction(w){var =
s=3Dthis,p=3Dw.parent,l=3Dw.location;s.tfs=3Dw;if(p&&p.locatio"=0A=
+"n!=3Dl&&p.location.host=3D=3Dl.host){s.tfs=3Dp;return =
s.gtfsf(s.tfs)}return"=0A=
+" s.tfs};s.gtfs=3Dfunction(){var =
s=3Dthis;if(!s.tfs){s.tfs=3Ds.wd;if(!s.et"=0A=
+"fs)s.tfs=3Ds.cet('gtfsf',s.tfs,'gtfset',s.gtfsoe,'gtfsfb')}return s.t"=0A=
+"fs};s.ca=3Dfunction(){var =
s=3Dthis,imn=3D's_i_'+s.fun;if(s.d.images&&s.ap"=0A=
+"v>=3D3&&!s.isopera&&(s.ns6<0||s.apv>=3D6.1)){s.ios=3D1;if(!s.d.images[i=
mn"=0A=
+"]&&(!s.isns||(s.apv<4||s.apv>=3D5))){s.d.write('<div><im'+'g =
name=3D\"'+imn+"=0A=
+"'\" height=3D1 width=3D1 border=3D0 =
alt=3D\"\"></div>');if(!s.d.images[imn])s.ios"=0A=
+"=3D0}}};s.mr=3Dfunction(sess,q,ta){var =
s=3Dthis,ns=3Ds.visitorNamespace,unc"=0A=
+"=3Ds.rep(s.fun,'_','-'),imn=3D's_i_'+s.fun,im,b,e,rs=3D'http'+(s.ssl?'s=
':"=0A=
+"'')+'://'+(ns?ns:(s.ssl?'102':unc))+'.112.2O7.net/b/ss/'+s.un+'/1/H"=0A=
+".1-pdv-2/'+sess+'?[AQB]&ndh=3D1'+(q?q:'')+(s.q?s.q:'')+'&[AQE]';if(s."=0A=
+"isie&&!s.ismac){if(s.apv>5.5)rs=3Ds.fl(rs,4095);else =
rs=3Ds.fl(rs,2047)"=0A=
+"}if(s.ios){im=3Ds.wd[imn]?s.wd[imn]:s.d.images[imn];if(!im)im=3Ds.wd[im=
"=0A=
+"n]=3Dnew =
Image;im.src=3Drs;if(rs.indexOf('&pe=3D')>=3D0&&(!ta||ta=3D=3D'_self'|"=0A=
+"|ta=3D=3D'_top'||(s.wd.name&&ta=3D=3Ds.wd.name))){b=3De=3Dnew =
Date;while(e.getT"=0A=
+"ime()-b.getTime()<500)e=3Dnew Date}return ''}return '<im'+'g sr'+'c=3D"=0A=
+"\"'+rs+'\" width=3D1 height=3D1 border=3D0 =
alt=3D\"\">'};s.gg=3Dfunction(v){v"=0A=
+"ar s=3Dthis;return =
s.wd['s_'+v]};s.glf=3Dfunction(t,a){if(t.substring(0"=0A=
+",2)=3D=3D's_')t=3Dt.substring(2);var =
s=3Dthis,v=3Ds.gg(t);if(v)s[t]=3Dv};s.gl=3Df"=0A=
+"unction(v){var s=3Dthis;s.pt(v,',','glf',0)};s.gv=3Dfunction(v){var =
s=3Dt"=0A=
+"his;return s['vpm_'+v]?s['vpv_'+v]:s[v]};s.havf=3Dfunction(t,a){var s"=0A=
+"=3Dthis,b=3Dt.substring(0,4),x=3Dt.substring(4),n=3DparseInt(x),k=3D'g_=
'+t,m=3D"=0A=
+"'vpm_'+t,q=3Dt,v=3Ds.linkTrackVars,e=3Ds.linkTrackEvents;s[k]=3Ds.gv(t)=
;if("=0A=
+"s.lnk||s.eo){v=3Dv?v+','+s.vl_l:'';if(v&&!s.pt(v,',','isf',t))s[k]=3D''=
"=0A=
+";if(t=3D=3D'events'&&e)s[k]=3Ds.fs(s[k],e)}s[m]=3D0;if(t=3D=3D'pageURL'=
)q=3D'g';e"=0A=
+"lse if(t=3D=3D'referrer')q=3D'r';else =
if(t=3D=3D'charSet'){q=3D'ce';if(s[k]&&s."=0A=
+"em=3D=3D2)s[k]=3D'UTF-8'}else =
if(t=3D=3D'visitorNamespace')q=3D'ns';else if(t=3D=3D"=0A=
+"'cookieDomainPeriods')q=3D'cdp';else =
if(t=3D=3D'cookieLifetime')q=3D'cl';el"=0A=
+"se if(t=3D=3D'visitVariableProvider')q=3D'vvp';else =
if(t=3D=3D'currencyCode')"=0A=
+"q=3D'cc';else if(t=3D=3D'channel')q=3D'ch';else =
if(t=3D=3D'campaign')q=3D'v0';els"=0A=
+"e if(s.num(x)) {if(b=3D=3D'prop')q=3D'c'+n;else =
if(b=3D=3D'eVar')q=3D'v'+n;else"=0A=
+" =
if(b=3D=3D'hier'){q=3D'h'+n;s[k]=3Ds.fl(s[k],255)}}if(s[k]&&t!=3D'linkNam=
e'&"=0A=
+"&t!=3D'linkType')s.qav+=3D'&'+q+'=3D'+s.ape(s[k]);return =
''};s.hav=3Dfuncti"=0A=
+"on(){var s=3Dthis;s.qav=3D'';s.pt(s.vl_t,',','havf',0);return =
s.qav};s."=0A=
+"lnf=3Dfunction(t,h){t=3Dt?t.toLowerCase():'';h=3Dh?h.toLowerCase():'';v=
ar"=0A=
+" =
te=3Dt.indexOf('=3D');if(t&&te>0&&h.indexOf(t.substring(te+1))>=3D0)retu"=0A=
+"rn t.substring(0,te);return ''};s.ln=3Dfunction(h){var =
s=3Dthis,n=3Ds.lin"=0A=
+"kNames;if(n)return s.pt(n,',','lnf',h);return ''};s.ltdf=3Dfunction(t"=0A=
+",h){t=3Dt?t.toLowerCase():'';h=3Dh?h.toLowerCase():'';var =
qi=3Dh.indexOf("=0A=
+"'?');h=3Dqi>=3D0?h.substring(0,qi):h;if(t&&h.substring(h.length-(t.leng=
"=0A=
+"th+1))=3D=3D'.'+t)return 1;return =
0};s.ltef=3Dfunction(t,h){t=3Dt?t.toLower"=0A=
+"Case():'';h=3Dh?h.toLowerCase():'';if(t&&h.indexOf(t)>=3D0)return =
1;ret"=0A=
+"urn 0};s.lt=3Dfunction(h){var =
s=3Dthis,lft=3Ds.linkDownloadFileTypes,lef=3D"=0A=
+"s.linkExternalFilters,lif=3Ds.linkInternalFilters;lif=3Dlif?lif:s.wd.lo=
"=0A=
+"cation.hostname;h=3Dh.toLowerCase();if(s.trackDownloadLinks&&lft&&s.p"=0A=
+"t(lft,',','ltdf',h))return 'd';if(s.trackExternalLinks&&(lef||lif)&"=0A=
+"&(!lef||s.pt(lef,',','ltef',h))&&(!lif||!s.pt(lif,',','ltef',h)))re"=0A=
+"turn 'e';return ''};s.lc=3Dnew Function('e','var =
s=3Ds_c_il['+s._in+'],"=0A=
+"b=3Ds.eh(this,\"onclick\");s.lnk=3Ds.co(this);s.t();s.lnk=3D0;if(b)retu=
rn"=0A=
+" this[b](e);return true');s.bc=3Dnew Function('e','var =
s=3Ds_c_il['+s._"=0A=
+"in+'];if(s.d&&s.d.all&&s.d.all.cppXYctnr)return;s.eo=3De.srcElement?e"=0A=
+".srcElement:e.target;s.t();s.eo=3D0');s.ot=3Dfunction(o){var =
a=3Do.type,b"=0A=
+"=3Do.tagName;return (a&&a.toUpperCase?a:b&&b.toUpperCase?b:o.href?'A'"=0A=
+":'').toUpperCase()};s.oid=3Dfunction(o){var =
s=3Dthis,t=3Ds.ot(o),p=3Do.prot"=0A=
+"ocol,c=3Do.onclick,n=3D'',x=3D0;if(!o.s_oid){if(o.href&&(t=3D=3D'A'||t=3D=
=3D'AREA"=0A=
+"')&&(!c||!p||p.toLowerCase().indexOf('javascript')<0))n=3Do.href;else"=0A=
+" if(c){n=3Ds.rep(s.rep(s.rep(s.rep(''+c,\"\\r\",''),\"\\n\",''),\"\\t"=0A=
+"\",''),' ','');x=3D2}else =
if(o.value&&(t=3D=3D'INPUT'||t=3D=3D'SUBMIT')){n=3Do."=0A=
+"value;x=3D3}else =
if(o.src&&t=3D=3D'IMAGE')n=3Do.src;if(n){o.s_oid=3Ds.fl(n,10"=0A=
+"0);o.s_oidt=3Dx}}return o.s_oid};s.rqf=3Dfunction(t,un){var =
s=3Dthis,e=3Dt."=0A=
+"indexOf('=3D'),u=3De>=3D0?','+t.substring(0,e)+',':'';return =
u&&u.indexOf"=0A=
+"(','+un+',')>=3D0?s.epa(t.substring(e+1)):''};s.rq=3Dfunction(un){var =
s"=0A=
+"=3Dthis,c=3Dun.indexOf(','),v=3Ds.c_r('s_sq'),q=3D'';if(c<0)return =
s.pt(v,'"=0A=
+"&','rqf',un);return s.pt(un,',','rq',0)};s.sqp=3Dfunction(t,a){var =
s=3D"=0A=
+"this,e=3Dt.indexOf('=3D'),q=3De<0?'':s.epa(t.substring(e+1));s.sqq[q]=3D=
'';"=0A=
+"if(e>=3D0)s.pt(t.substring(0,e),',','sqs',q);return =
0};s.sqs=3Dfunction"=0A=
+"(un,q){var s=3Dthis;s.squ[un]=3Dq;return 0};s.sq=3Dfunction(q){var =
s=3Dthis"=0A=
+",k=3D's_sq',v=3Ds.c_r(k),x,c=3D0;s.sqq=3Dnew Object;s.squ=3Dnew =
Object;s.sqq["=0A=
+"q]=3D'';s.pt(v,'&','sqp',0);s.pt(s.un,',','sqs',q);v=3D'';for(x in =
s.sq"=0A=
+"u)s.sqq[s.squ[x]]+=3D(s.sqq[s.squ[x]]?',':'')+x;for(x in s.sqq)if(x&&"=0A=
+"s.sqq[x]&&(x=3D=3Dq||c<2)){v+=3D(v?'&':'')+s.sqq[x]+'=3D'+s.ape(x);c++}=
retu"=0A=
+"rn s.c_w(k,v,0)};s.wdl=3Dnew Function('e','var =
s=3Ds_c_il['+s._in+'],r=3D"=0A=
+"true,b=3Ds.eh(s.wd,\"onload\"),i,o,oc;if(b)r=3Dthis[b](e);for(i=3D0;i<s=
.d"=0A=
+".links.length;i++){o=3Ds.d.links[i];oc=3Do.onclick?\"\"+o.onclick:\"\";=
"=0A=
+"if((oc.indexOf(\"s_gs(\")<0||oc.indexOf(\".s_oc(\")>=3D0)&&oc.indexOf"=0A=
+"(\".tl(\")<0)s.eh(o,\"onclick\",0,s.lc);}return r');s.wds=3Dfunction("=0A=
+"){var =
s=3Dthis;if(s.apv>3&&(!s.isie||!s.ismac||s.apv>=3D5)){if(s.b&&s.b"=0A=
+".attachEvent)s.b.attachEvent('onclick',s.bc);else if(s.b&&s.b.addEv"=0A=
+"entListener)s.b.addEventListener('click',s.bc,false);else s.eh(s.wd"=0A=
+",'onload',0,s.wdl)}};s.vs=3Dfunction(x){var =
s=3Dthis,v=3Ds.visitorSamplin"=0A=
+"g,g=3Ds.visitorSamplingGroup,k=3D's_vsn_'+s.un+(g?'_'+g:''),n=3Ds.c_r(k=
),"=0A=
+"e=3Dnew =
Date,y=3De.getYear();e.setYear(y+10+(y<1900?1900:0));if(v){v*=3D1"=0A=
+"00;if(!n){if(!s.c_w(k,x,e))return 0;n=3Dx}if(n%10000>v)return 0}retur"=0A=
+"n 1};s.dyasmf=3Dfunction(t,m){if(t&&m&&m.indexOf(t)>=3D0)return =
1;retur"=0A=
+"n 0};s.dyasf=3Dfunction(t,m){var =
s=3Dthis,i=3Dt?t.indexOf('=3D'):-1,n,x;if("=0A=
+"i>=3D0&&m){var =
n=3Dt.substring(0,i),x=3Dt.substring(i+1);if(s.pt(x,',','d"=0A=
+"yasmf',m))return n}return 0};s.uns=3Dfunction(){var =
s=3Dthis,x=3Ds.dynami"=0A=
+"cAccountSelection,l=3Ds.dynamicAccountList,m=3Ds.dynamicAccountMatch,n,=
"=0A=
+"i;s.un.toLowerCase();if(x&&l){if(!m)m=3Ds.wd.location.host;if(!m.toLo"=0A=
+"werCase)m=3D''+m;l=3Dl.toLowerCase();m=3Dm.toLowerCase();n=3Ds.pt(l,';'=
,'dy"=0A=
+"asf',m);if(n)s.un=3Dn}i=3Ds.un.indexOf(',');s.fun=3Di<0?s.un:s.un.subst=
ri"=0A=
+"ng(0,i)};s.t=3Dfunction(){var s=3Dthis,trk=3D1,tm=3Dnew =
Date,sed=3DMath&&Math"=0A=
+".random?Math.floor(Math.random()*10000000000000):tm.getTime(),sess=3D"=0A=
+"'s'+Math.floor(tm.getTime()/10800000)%10+sed,yr=3Dtm.getYear(),vt=3Dtm.=
"=0A=
+"getDate()+'/'+tm.getMonth()+'/'+(yr<1900?yr+1900:yr)+' '+tm.getHour"=0A=
+"s()+':'+tm.getMinutes()+':'+tm.getSeconds()+' '+tm.getDay()+' '+tm."=0A=
+"getTimezoneOffset(),tfs=3Ds.gtfs(),ta=3D'',q=3D'',qs=3D'';s.uns();if(!s=
.q){"=0A=
+"var =
tl=3Dtfs.location,x=3D'',c=3D'',v=3D'',p=3D'',bw=3D'',bh=3D'',j=3D'1.0',k=
=3Ds.c_w"=0A=
+"('s_cc','true',0)?'Y':'N',hp=3D'',ct=3D'',pn=3D0,ps;if(s.apv>=3D4)x=3Ds=
creen."=0A=
+"width+'x'+screen.height;if(s.isns||s.isopera){if(s.apv>=3D3){j=3D'1.1';=
"=0A=
+"v=3Ds.n.javaEnabled()?'Y':'N';if(s.apv>=3D4){j=3D'1.2';c=3Dscreen.pixel=
Dept"=0A=
+"h;bw=3Ds.wd.innerWidth;bh=3Ds.wd.innerHeight;if(s.apv>=3D4.06)j=3D'1.3'=
}}s."=0A=
+"pl=3Ds.n.plugins}else =
if(s.isie){if(s.apv>=3D4){v=3Ds.n.javaEnabled()?'Y'"=0A=
+":'N';j=3D'1.2';c=3Dscreen.colorDepth;if(s.apv>=3D5){bw=3Ds.d.documentEl=
emen"=0A=
+"t.offsetWidth;bh=3Ds.d.documentElement.offsetHeight;j=3D'1.3';if(!s.ism=
"=0A=
+"ac&&s.b){s.b.addBehavior('#default#homePage');hp=3Ds.b.isHomePage(tl)"=0A=
+"?\"Y\":\"N\";s.b.addBehavior('#default#clientCaps');ct=3Ds.b.connecti"=0A=
+"onType}}}else =
r=3D''}if(s.pl)while(pn<s.pl.length&&pn<30){ps=3Ds.fl(s.p"=0A=
+"l[pn].name,100)+';';if(p.indexOf(ps)<0)p+=3Dps;pn++}s.q=3D(x?'&s=3D'+s.=
ap"=0A=
+"e(x):'')+(c?'&c=3D'+s.ape(c):'')+(j?'&j=3D'+j:'')+(v?'&v=3D'+v:'')+(k?'=
&k"=0A=
+"=3D'+k:'')+(bw?'&bw=3D'+bw:'')+(bh?'&bh=3D'+bh:'')+(ct?'&ct=3D'+s.ape(c=
t):'"=0A=
+"')+(hp?'&hp=3D'+hp:'')+(p?'&p=3D'+s.ape(p):'')}if(s.usePlugins)s.doPlug=
"=0A=
+"ins(s);var =
l=3Ds.wd.location,r=3Dtfs.document.referrer;if(!s.pageURL)s."=0A=
+"pageURL=3Ds.fl(l?l:'',255);if(!s.referrer)s.referrer=3Ds.fl(r?r:'',255)=
"=0A=
+";if(s.lnk||s.eo){var o=3Ds.eo?s.eo:s.lnk;if(!o)return '';var =
p=3Ds.gv('"=0A=
+"pageName'),w=3D1,t=3Ds.ot(o),n=3Ds.oid(o),x=3Do.s_oidt,h,l,i,oc;if(s.eo=
&&o=3D"=0A=
+"=3Ds.eo){while(o&&!n&&t!=3D'BODY'){o=3Do.parentElement?o.parentElement:=
o."=0A=
+"parentNode;if(!o)return =
'';t=3Ds.ot(o);n=3Ds.oid(o);x=3Do.s_oidt}oc=3Do.onc"=0A=
+"lick?''+o.onclick:'';if((oc.indexOf(\"s_gs(\")>=3D0&&oc.indexOf(\".s_"=0A=
+"oc(\")<0)||oc.indexOf(\".tl(\")>=3D0)return =
''}ta=3Do.target;h=3Do.href?o"=0A=
+".href:'';i=3Dh.indexOf('?');h=3Ds.linkLeaveQueryString||i<0?h:h.substri=
"=0A=
+"ng(0,i);l=3Ds.linkName?s.linkName:s.ln(h);t=3Ds.linkType?s.linkType.toL=
"=0A=
+"owerCase():s.lt(h);if(t&&(h||l))q+=3D'&pe=3Dlnk_'+(t=3D=3D'd'||t=3D=3D'=
e'?s.ape"=0A=
+"(t):'o')+(h?'&pev1=3D'+s.ape(h):'')+(l?'&pev2=3D'+s.ape(l):'');else =
trk"=0A=
+"=3D0;if(s.trackInlineStats){if(!p){p=3Ds.gv('pageURL');w=3D0}t=3Ds.ot(o=
);i=3D"=0A=
+"o.sourceIndex;if(s.gg('objectID')){n=3Ds.gg('objectID');x=3D1;i=3D1}if(=
p&"=0A=
+"&n&&t)qs=3D'&pid=3D'+s.ape(s.fl(p,255))+(w?'&pidt=3D'+w:'')+'&oid=3D'+s=
.ape"=0A=
+"(s.fl(n,100))+(x?'&oidt=3D'+x:'')+'&ot=3D'+s.ape(t)+(i?'&oi=3D'+i:'')}}=
if"=0A=
+"(!trk&&!qs)return '';var =
code=3D'';if(trk&&s.vs(sed))code=3Ds.mr(sess,("=0A=
+"vt?'&t=3D'+s.ape(vt):'')+s.hav()+q+(qs?qs:s.rq(s.un)),ta);s.sq(trk?''"=0A=
+":qs);s.lnk=3Ds.eo=3Ds.linkName=3Ds.linkType=3Ds.wd.s_objectID=3D'';retu=
rn cod"=0A=
+"e};s.tl=3Dfunction(o,t,n){var =
s=3Dthis;s.lnk=3Ds.co(o);s.linkType=3Dt;s.lin"=0A=
+"kName=3Dn;s.t()};s.ssl=3D(s.wd.location.protocol.toLowerCase().indexOf(=
"=0A=
+"'https')>=3D0);s.d=3Ddocument;s.b=3Ds.d.body;s.n=3Dnavigator;s.u=3Ds.n.=
userAg"=0A=
+"ent;s.ns6=3Ds.u.indexOf('Netscape6/');var =
apn=3Ds.n.appName,v=3Ds.n.appVe"=0A=
+"rsion,ie=3Dv.indexOf('MSIE =
'),i;if(v.indexOf('Opera')>=3D0||s.u.indexOf"=0A=
+"('Opera')>=3D0)apn=3D'Opera';s.isie=3D(apn=3D=3D'Microsoft Internet =
Explorer'"=0A=
+");s.isns=3D(apn=3D=3D'Netscape');s.isopera=3D(apn=3D=3D'Opera');s.ismac=
=3D(s.u.in"=0A=
+"dexOf('Mac')>=3D0);if(ie>0){s.apv=3DparseInt(i=3Dv.substring(ie+5));if(=
s."=0A=
+"apv>3)s.apv=3DparseFloat(i)}else =
if(s.ns6>0)s.apv=3DparseFloat(s.u.subs"=0A=
+"tring(s.ns6+10));else =
s.apv=3DparseFloat(v);s.em=3D0;if(String.fromChar"=0A=
+"Code){i=3Descape(String.fromCharCode(256)).toUpperCase();s.em=3D(i=3D=3D=
'%C"=0A=
+"4%80'?2:(i=3D=3D'%U0100'?1:0))}s.un=3Dun;s.uns();s.vl_l=3D'charSet,visi=
torN"=0A=
+"amespace,cookieDomainPeriods,cookieLifetime,visitVariableProvider,p"=0A=
+"ageName,pageURL,referrer,currencyCode,purchaseID';s.vl_t=3Ds.vl_l+',c"=0A=
+"hannel,server,pageType,campaign,state,zip,events,products,linkName,"=0A=
+"linkType';for(var =
n=3D1;n<51;n++)s.vl_t+=3D',prop'+n+',eVar'+n+',hier'+"=0A=
+"n;s.vl_g=3Ds.vl_t+',trackDownloadLinks,trackExternalLinks,trackInline"=0A=
+"Stats,linkLeaveQueryString,linkDownloadFileTypes,linkExternalFilter"=0A=
+"s,linkInternalFilters,linkNames';if(pg)s.gl(s.vl_g);if(!ss){s.wds()"=0A=
+";s.ca()}}",l=3Dwindow.s_c_il,n=3Dnavigator,u=3Dn.userAgent,v=3Dn.appVer=
sion,e=3Dv.indexOf('MSIE =
'),m=3Du.indexOf('Netscape6/'),a,i,s;if(l)for(i=3D0;i<l.length;i++){s=3Dl=
[i];s.uns();if(s.un=3D=3Dun)return s;else =
if(s.pt(s.un,',','isf',un)){s=3Ds.co(s);s.un=3Dun;s.uns();return =
s}}if(e>0){a=3DparseInt(i=3Dv.substring(e=0A=
+5));if(a>3)a=3DparseFloat(i)}else =
if(m>0)a=3DparseFloat(u.substring(m+10));else =
a=3DparseFloat(v);if(a>=3D5&&v.indexOf('Opera')<0&&u.indexOf('Opera')<0){=
eval(c);return new s_c(un,pg,ss)}else s=3Ds_c2f(c);return =
s(un,pg,ss)}com.mtvi.reporting.Dispatcher=3Dnew =
function(){this.version=3D"2.0";try{this.widget=3Dcom.mtvi.reporting.Widg=
et;}catch(e){}=0A=
this.send=3Dfunction(){try{if(com.mtvi.util.isDefined(this.widget.un)){va=
r =
hcode=3Dthis.widget.t();}}catch(e){try{com.mtvi.logger.JsError(e);}catch(=
e){}}};this.setAccountVars=3Dfunction(o){try{this.widget.setAccount(o.nam=
e);this.widget.setAttribute("dynamicAccountSelection",o.dynamic);this.wid=
get.setAttribute("dynamicAccountList",o.list);this.widget.setAttribute("l=
inkInternalFilters",o.filters);}catch(e){}};this.setValues=3Dfunction(o){=
try{for(var i in =
o){this.widget.setAttribute(i,o[i]);}}catch(e){}};this.config=3Dfunction(=
){try{this.setAccountVars(com.mtvi.reporting.Account);}catch(e){}=0A=
try{this.setValues(com.mtvi.reporting.Map());}catch(e){}};this.sendCall=3D=
function(){try{this.setAccountVars(com.mtvi.reporting.Account);try{this.s=
etValues(com.mtvi.reporting.Map());}catch(e){}=0A=
try{this.setValues(com.mtvi.config.SectionSetup);}catch(e){}=0A=
this.send();}catch(e){try{com.mtvi.logger.JsError(e);}catch(e){}}};this.s=
etDefaultData=3Dfunction(){try{var =
pn=3Dlocation.href;pn=3Dpn.replace(/^.*www\.(.*)\.com/g,"");pn=3Dpn.repla=
ce(/^.*(.*)\.com/g,"");pn=3Dcom.mtvi.config.Get.channel+pn;this.widget.se=
tAttribute("pageName","/"+pn);this.widget.setAttribute("hier1",pn);this.w=
idget.setAttribute("channel",com.mtvi.config.Get.channel);this.widget.set=
Attribute(com.mtvi.config.Get.site,com.mtvi.config.Get.channel);}catch(e)=
{try{com.mtvi.logger.JsError(e);}catch(e){}}};this.sendThirdPartyCall=3Df=
unction(){try{this.setAccountVars(com.mtvi.config.Get);this.setThirdParty=
Data();try{this.setValues(com.mtvi.reporting.Map());}catch(e){}=0A=
this.send();}catch(e){try{com.mtvi.logger.JsError(e);}catch(e){}}};this.s=
endLinkEvent=3Dfunction(name){try{var =
hier2=3Dthis.widget.getAttribute("hier2");this.widget=3Dcom.mtvi.reportin=
g.Widget;this.config();this.setValues({linkType:"o",lnk:true,linkName:nam=
e,hier2:""});this.send();this.widget.setAttribute("hier2",hier2);}catch(e=
){try{com.mtvi.logger.JsError(e);}catch(e){}}};this.getBaseUrl=3Dfunction=
(){try{this.config();var =
vendorUrl=3D".112.2o7.net/b/ss/";return("http"+(this.widget.ssl?'s':'')+"=
://"+this.widget.un+vendorUrl+this.widget.un+"/1/");}catch(e){try{com.mtv=
i.logger.JsError(e);}catch(e){}}};this.sendFailedSearch=3Dfunction(v){try=
{if(com.mtvi.util.isDefined(v)){var =
aImg=3Ddocument.createElement('img');aImg.src=3Dthis.getBaseUrl()+"EMAIL?=
pageName=3DFAILED+SEARCH&v4=3D"+v;aImg.id=3D"failedSearchCall";document.g=
etElementsByTagName('body')[0].appendChild(aImg);}}catch(e){try{com.mtvi.=
logger.JsError(e);}catch(e){}}};this.replacePathSection=3Dfunction(path,n=
ewValue,replaceAt){try{var =
pathParts=3D(path.charAt(0)!=3D"/")?path.split("/"):path.substring(1).spl=
it("/");if(isNaN(replaceAt)||replaceAt>=3DpathParts.length)return =
false;pathParts[replaceAt]=3DnewValue;var =
newPath=3DpathParts.join("/");return =
newPath;}catch(e){try{com.mtvi.logger.JsError(e);return =
false}catch(e){return =
false}}};this.deletePathSection=3Dfunction(path,removeAt){try{var =
pathParts=3D(path.charAt(0)!=3D"/")?path.split("/"):path.substring(1).spl=
it("/");if(isNaN(removeAt)||removeAt>=3DpathParts.length)return =
false;pathParts.splice(removeAt,1);var =
newPath=3DpathParts.join("/");return =
newPath;}catch(e){try{com.mtvi.logger.JsError(e);return =
false}catch(e){return =
false}}};this.setAttribute=3Dfunction(k,v){this.widget.setAttribute(k,v);=
};this.getAttribute=3Dfunction(k){return this.widget.getAttribute(k);};};
------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/prototype.js

/*  Prototype JavaScript framework, version 1.5.0=0A=
 *  (c) 2005-2007 Sam Stephenson=0A=
 *=0A=
 *  Prototype is freely distributable under the terms of an MIT-style =
license.=0A=
 *  For details, see the Prototype web site: http://prototype.conio.net/=0A=
 *=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var Prototype =3D {=0A=
  Version: '1.5.0',=0A=
  BrowserFeatures: {=0A=
    XPath: !!document.evaluate=0A=
  },=0A=
=0A=
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',=0A=
  emptyFunction: function() {},=0A=
  K: function(x) { return x }=0A=
}=0A=
=0A=
var Class =3D {=0A=
  create: function() {=0A=
    return function() {=0A=
      this.initialize.apply(this, arguments);=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
var Abstract =3D new Object();=0A=
=0A=
Object.extend =3D function(destination, source) {=0A=
  for (var property in source) {=0A=
    destination[property] =3D source[property];=0A=
  }=0A=
  return destination;=0A=
}=0A=
=0A=
Object.extend(Object, {=0A=
  inspect: function(object) {=0A=
    try {=0A=
      if (object =3D=3D=3D undefined) return 'undefined';=0A=
      if (object =3D=3D=3D null) return 'null';=0A=
      return object.inspect ? object.inspect() : object.toString();=0A=
    } catch (e) {=0A=
      if (e instanceof RangeError) return '...';=0A=
      throw e;=0A=
    }=0A=
  },=0A=
=0A=
  keys: function(object) {=0A=
    var keys =3D [];=0A=
    for (var property in object)=0A=
      keys.push(property);=0A=
    return keys;=0A=
  },=0A=
=0A=
  values: function(object) {=0A=
    var values =3D [];=0A=
    for (var property in object)=0A=
      values.push(object[property]);=0A=
    return values;=0A=
  },=0A=
=0A=
  clone: function(object) {=0A=
    return Object.extend({}, object);=0A=
  }=0A=
});=0A=
=0A=
Function.prototype.bind =3D function() {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function() {=0A=
    return __method.apply(object, args.concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Function.prototype.bindAsEventListener =3D function(object) {=0A=
  var __method =3D this, args =3D $A(arguments), object =3D args.shift();=0A=
  return function(event) {=0A=
    return __method.apply(object, [( event || =
window.event)].concat(args).concat($A(arguments)));=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Number.prototype, {=0A=
  toColorPart: function() {=0A=
    var digits =3D this.toString(16);=0A=
    if (this < 16) return '0' + digits;=0A=
    return digits;=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this + 1;=0A=
  },=0A=
=0A=
  times: function(iterator) {=0A=
    $R(0, this, true).each(iterator);=0A=
    return this;=0A=
  }=0A=
});=0A=
=0A=
var Try =3D {=0A=
  these: function() {=0A=
    var returnValue;=0A=
=0A=
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var lambda =3D arguments[i];=0A=
      try {=0A=
        returnValue =3D lambda();=0A=
        break;=0A=
      } catch (e) {}=0A=
    }=0A=
=0A=
    return returnValue;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
var PeriodicalExecuter =3D Class.create();=0A=
PeriodicalExecuter.prototype =3D {=0A=
  initialize: function(callback, frequency) {=0A=
    this.callback =3D callback;=0A=
    this.frequency =3D frequency;=0A=
    this.currentlyExecuting =3D false;=0A=
=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    if (!this.timer) return;=0A=
    clearInterval(this.timer);=0A=
    this.timer =3D null;=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    if (!this.currentlyExecuting) {=0A=
      try {=0A=
        this.currentlyExecuting =3D true;=0A=
        this.callback(this);=0A=
      } finally {=0A=
        this.currentlyExecuting =3D false;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
String.interpret =3D function(value){=0A=
  return value =3D=3D null ? '' : String(value);=0A=
}=0A=
=0A=
Object.extend(String.prototype, {=0A=
  gsub: function(pattern, replacement) {=0A=
    var result =3D '', source =3D this, match;=0A=
    replacement =3D arguments.callee.prepareReplacement(replacement);=0A=
=0A=
    while (source.length > 0) {=0A=
      if (match =3D source.match(pattern)) {=0A=
        result +=3D source.slice(0, match.index);=0A=
        result +=3D String.interpret(replacement(match));=0A=
        source  =3D source.slice(match.index + match[0].length);=0A=
      } else {=0A=
        result +=3D source, source =3D '';=0A=
      }=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  sub: function(pattern, replacement, count) {=0A=
    replacement =3D this.gsub.prepareReplacement(replacement);=0A=
    count =3D count =3D=3D=3D undefined ? 1 : count;=0A=
=0A=
    return this.gsub(pattern, function(match) {=0A=
      if (--count < 0) return match[0];=0A=
      return replacement(match);=0A=
    });=0A=
  },=0A=
=0A=
  scan: function(pattern, iterator) {=0A=
    this.gsub(pattern, iterator);=0A=
    return this;=0A=
  },=0A=
=0A=
  truncate: function(length, truncation) {=0A=
    length =3D length || 30;=0A=
    truncation =3D truncation =3D=3D=3D undefined ? '...' : truncation;=0A=
    return this.length > length ?=0A=
      this.slice(0, length - truncation.length) + truncation : this;=0A=
  },=0A=
=0A=
  strip: function() {=0A=
    return this.replace(/^\s+/, '').replace(/\s+$/, '');=0A=
  },=0A=
=0A=
  stripTags: function() {=0A=
    return this.replace(/<\/?[^>]+>/gi, '');=0A=
  },=0A=
=0A=
  stripScripts: function() {=0A=
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');=0A=
  },=0A=
=0A=
  extractScripts: function() {=0A=
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');=0A=
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');=0A=
    return (this.match(matchAll) || []).map(function(scriptTag) {=0A=
      return (scriptTag.match(matchOne) || ['', ''])[1];=0A=
    });=0A=
  },=0A=
=0A=
  evalScripts: function() {=0A=
    return this.extractScripts().map(function(script) { return =
eval(script) });=0A=
  },=0A=
=0A=
  escapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    var text =3D document.createTextNode(this);=0A=
    div.appendChild(text);=0A=
    return div.innerHTML;=0A=
  },=0A=
=0A=
  unescapeHTML: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D this.stripTags();=0A=
    return div.childNodes[0] ? (div.childNodes.length > 1 ?=0A=
      $A(div.childNodes).inject('',function(memo,node){ return =
memo+node.nodeValue }) :=0A=
      div.childNodes[0].nodeValue) : '';=0A=
  },=0A=
=0A=
  toQueryParams: function(separator) {=0A=
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);=0A=
    if (!match) return {};=0A=
=0A=
    return match[1].split(separator || '&').inject({}, function(hash, =
pair) {=0A=
      if ((pair =3D pair.split('=3D'))[0]) {=0A=
        var name =3D decodeURIComponent(pair[0]);=0A=
        var value =3D pair[1] ? decodeURIComponent(pair[1]) : undefined;=0A=
=0A=
        if (hash[name] !=3D=3D undefined) {=0A=
          if (hash[name].constructor !=3D Array)=0A=
            hash[name] =3D [hash[name]];=0A=
          if (value) hash[name].push(value);=0A=
        }=0A=
        else hash[name] =3D value;=0A=
      }=0A=
      return hash;=0A=
    });=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.split('');=0A=
  },=0A=
=0A=
  succ: function() {=0A=
    return this.slice(0, this.length - 1) +=0A=
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);=0A=
  },=0A=
=0A=
  camelize: function() {=0A=
    var parts =3D this.split('-'), len =3D parts.length;=0A=
    if (len =3D=3D 1) return parts[0];=0A=
=0A=
    var camelized =3D this.charAt(0) =3D=3D '-'=0A=
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)=0A=
      : parts[0];=0A=
=0A=
    for (var i =3D 1; i < len; i++)=0A=
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);=0A=
=0A=
    return camelized;=0A=
  },=0A=
=0A=
  capitalize: function(){=0A=
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();=0A=
  },=0A=
=0A=
  underscore: function() {=0A=
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();=0A=
  },=0A=
=0A=
  dasherize: function() {=0A=
    return this.gsub(/_/,'-');=0A=
  },=0A=
=0A=
  inspect: function(useDoubleQuotes) {=0A=
    var escapedString =3D this.replace(/\\/g, '\\\\');=0A=
    if (useDoubleQuotes)=0A=
      return '"' + escapedString.replace(/"/g, '\\"') + '"';=0A=
    else=0A=
      return "'" + escapedString.replace(/'/g, '\\\'') + "'";=0A=
  }=0A=
});=0A=
=0A=
String.prototype.gsub.prepareReplacement =3D function(replacement) {=0A=
  if (typeof replacement =3D=3D 'function') return replacement;=0A=
  var template =3D new Template(replacement);=0A=
  return function(match) { return template.evaluate(match) };=0A=
}=0A=
=0A=
String.prototype.parseQuery =3D String.prototype.toQueryParams;=0A=
=0A=
var Template =3D Class.create();=0A=
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;=0A=
Template.prototype =3D {=0A=
  initialize: function(template, pattern) {=0A=
    this.template =3D template.toString();=0A=
    this.pattern  =3D pattern || Template.Pattern;=0A=
  },=0A=
=0A=
  evaluate: function(object) {=0A=
    return this.template.gsub(this.pattern, function(match) {=0A=
      var before =3D match[1];=0A=
      if (before =3D=3D '\\') return match[2];=0A=
      return before + String.interpret(object[match[3]]);=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
var $break    =3D new Object();=0A=
var $continue =3D new Object();=0A=
=0A=
var Enumerable =3D {=0A=
  each: function(iterator) {=0A=
    var index =3D 0;=0A=
    try {=0A=
      this._each(function(value) {=0A=
        try {=0A=
          iterator(value, index++);=0A=
        } catch (e) {=0A=
          if (e !=3D $continue) throw e;=0A=
        }=0A=
      });=0A=
    } catch (e) {=0A=
      if (e !=3D $break) throw e;=0A=
    }=0A=
    return this;=0A=
  },=0A=
=0A=
  eachSlice: function(number, iterator) {=0A=
    var index =3D -number, slices =3D [], array =3D this.toArray();=0A=
    while ((index +=3D number) < array.length)=0A=
      slices.push(array.slice(index, index+number));=0A=
    return slices.map(iterator);=0A=
  },=0A=
=0A=
  all: function(iterator) {=0A=
    var result =3D true;=0A=
    this.each(function(value, index) {=0A=
      result =3D result && !!(iterator || Prototype.K)(value, index);=0A=
      if (!result) throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  any: function(iterator) {=0A=
    var result =3D false;=0A=
    this.each(function(value, index) {=0A=
      if (result =3D !!(iterator || Prototype.K)(value, index))=0A=
        throw $break;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  collect: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push((iterator || Prototype.K)(value, index));=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  detect: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index)) {=0A=
        result =3D value;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  findAll: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  grep: function(pattern, iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      var stringValue =3D value.toString();=0A=
      if (stringValue.match(pattern))=0A=
        results.push((iterator || Prototype.K)(value, index));=0A=
    })=0A=
    return results;=0A=
  },=0A=
=0A=
  include: function(object) {=0A=
    var found =3D false;=0A=
    this.each(function(value) {=0A=
      if (value =3D=3D object) {=0A=
        found =3D true;=0A=
        throw $break;=0A=
      }=0A=
    });=0A=
    return found;=0A=
  },=0A=
=0A=
  inGroupsOf: function(number, fillWith) {=0A=
    fillWith =3D fillWith =3D=3D=3D undefined ? null : fillWith;=0A=
    return this.eachSlice(number, function(slice) {=0A=
      while(slice.length < number) slice.push(fillWith);=0A=
      return slice;=0A=
    });=0A=
  },=0A=
=0A=
  inject: function(memo, iterator) {=0A=
    this.each(function(value, index) {=0A=
      memo =3D iterator(memo, value, index);=0A=
    });=0A=
    return memo;=0A=
  },=0A=
=0A=
  invoke: function(method) {=0A=
    var args =3D $A(arguments).slice(1);=0A=
    return this.map(function(value) {=0A=
      return value[method].apply(value, args);=0A=
    });=0A=
  },=0A=
=0A=
  max: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D (iterator || Prototype.K)(value, index);=0A=
      if (result =3D=3D undefined || value >=3D result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  min: function(iterator) {=0A=
    var result;=0A=
    this.each(function(value, index) {=0A=
      value =3D (iterator || Prototype.K)(value, index);=0A=
      if (result =3D=3D undefined || value < result)=0A=
        result =3D value;=0A=
    });=0A=
    return result;=0A=
  },=0A=
=0A=
  partition: function(iterator) {=0A=
    var trues =3D [], falses =3D [];=0A=
    this.each(function(value, index) {=0A=
      ((iterator || Prototype.K)(value, index) ?=0A=
        trues : falses).push(value);=0A=
    });=0A=
    return [trues, falses];=0A=
  },=0A=
=0A=
  pluck: function(property) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      results.push(value[property]);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  reject: function(iterator) {=0A=
    var results =3D [];=0A=
    this.each(function(value, index) {=0A=
      if (!iterator(value, index))=0A=
        results.push(value);=0A=
    });=0A=
    return results;=0A=
  },=0A=
=0A=
  sortBy: function(iterator) {=0A=
    return this.map(function(value, index) {=0A=
      return {value: value, criteria: iterator(value, index)};=0A=
    }).sort(function(left, right) {=0A=
      var a =3D left.criteria, b =3D right.criteria;=0A=
      return a < b ? -1 : a > b ? 1 : 0;=0A=
    }).pluck('value');=0A=
  },=0A=
=0A=
  toArray: function() {=0A=
    return this.map();=0A=
  },=0A=
=0A=
  zip: function() {=0A=
    var iterator =3D Prototype.K, args =3D $A(arguments);=0A=
    if (typeof args.last() =3D=3D 'function')=0A=
      iterator =3D args.pop();=0A=
=0A=
    var collections =3D [this].concat(args).map($A);=0A=
    return this.map(function(value, index) {=0A=
      return iterator(collections.pluck(index));=0A=
    });=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.toArray().length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Enumerable:' + this.toArray().inspect() + '>';=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Enumerable, {=0A=
  map:     Enumerable.collect,=0A=
  find:    Enumerable.detect,=0A=
  select:  Enumerable.findAll,=0A=
  member:  Enumerable.include,=0A=
  entries: Enumerable.toArray=0A=
});=0A=
var $A =3D Array.from =3D function(iterable) {=0A=
  if (!iterable) return [];=0A=
  if (iterable.toArray) {=0A=
    return iterable.toArray();=0A=
  } else {=0A=
    var results =3D [];=0A=
    for (var i =3D 0, length =3D iterable.length; i < length; i++)=0A=
      results.push(iterable[i]);=0A=
    return results;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Array.prototype, Enumerable);=0A=
=0A=
if (!Array.prototype._reverse)=0A=
  Array.prototype._reverse =3D Array.prototype.reverse;=0A=
=0A=
Object.extend(Array.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      iterator(this[i]);=0A=
  },=0A=
=0A=
  clear: function() {=0A=
    this.length =3D 0;=0A=
    return this;=0A=
  },=0A=
=0A=
  first: function() {=0A=
    return this[0];=0A=
  },=0A=
=0A=
  last: function() {=0A=
    return this[this.length - 1];=0A=
  },=0A=
=0A=
  compact: function() {=0A=
    return this.select(function(value) {=0A=
      return value !=3D null;=0A=
    });=0A=
  },=0A=
=0A=
  flatten: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.concat(value && value.constructor =3D=3D Array ?=0A=
        value.flatten() : [value]);=0A=
    });=0A=
  },=0A=
=0A=
  without: function() {=0A=
    var values =3D $A(arguments);=0A=
    return this.select(function(value) {=0A=
      return !values.include(value);=0A=
    });=0A=
  },=0A=
=0A=
  indexOf: function(object) {=0A=
    for (var i =3D 0, length =3D this.length; i < length; i++)=0A=
      if (this[i] =3D=3D object) return i;=0A=
    return -1;=0A=
  },=0A=
=0A=
  reverse: function(inline) {=0A=
    return (inline !=3D=3D false ? this : this.toArray())._reverse();=0A=
  },=0A=
=0A=
  reduce: function() {=0A=
    return this.length > 1 ? this : this[0];=0A=
  },=0A=
=0A=
  uniq: function() {=0A=
    return this.inject([], function(array, value) {=0A=
      return array.include(value) ? array : array.concat([value]);=0A=
    });=0A=
  },=0A=
=0A=
  clone: function() {=0A=
    return [].concat(this);=0A=
  },=0A=
=0A=
  size: function() {=0A=
    return this.length;=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '[' + this.map(Object.inspect).join(', ') + ']';=0A=
  }=0A=
});=0A=
=0A=
Array.prototype.toArray =3D Array.prototype.clone;=0A=
=0A=
function $w(string){=0A=
  string =3D string.strip();=0A=
  return string ? string.split(/\s+/) : [];=0A=
}=0A=
=0A=
if(window.opera){=0A=
  Array.prototype.concat =3D function(){=0A=
    var array =3D [];=0A=
    for(var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);=0A=
    for(var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      if(arguments[i].constructor =3D=3D Array) {=0A=
        for(var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)=0A=
          array.push(arguments[i][j]);=0A=
      } else {=0A=
        array.push(arguments[i]);=0A=
      }=0A=
    }=0A=
    return array;=0A=
  }=0A=
}=0A=
var Hash =3D function(obj) {=0A=
  Object.extend(this, obj || {});=0A=
};=0A=
=0A=
Object.extend(Hash, {=0A=
  toQueryString: function(obj) {=0A=
    var parts =3D [];=0A=
=0A=
	  this.prototype._each.call(obj, function(pair) {=0A=
      if (!pair.key) return;=0A=
=0A=
      if (pair.value && pair.value.constructor =3D=3D Array) {=0A=
        var values =3D pair.value.compact();=0A=
        if (values.length < 2) pair.value =3D values.reduce();=0A=
        else {=0A=
        	key =3D encodeURIComponent(pair.key);=0A=
          values.each(function(value) {=0A=
            value =3D value !=3D undefined ? encodeURIComponent(value) : =
'';=0A=
            parts.push(key + '=3D' + encodeURIComponent(value));=0A=
          });=0A=
          return;=0A=
        }=0A=
      }=0A=
      if (pair.value =3D=3D undefined) pair[1] =3D '';=0A=
      parts.push(pair.map(encodeURIComponent).join('=3D'));=0A=
	  });=0A=
=0A=
    return parts.join('&');=0A=
  }=0A=
});=0A=
=0A=
Object.extend(Hash.prototype, Enumerable);=0A=
Object.extend(Hash.prototype, {=0A=
  _each: function(iterator) {=0A=
    for (var key in this) {=0A=
      var value =3D this[key];=0A=
      if (value && value =3D=3D Hash.prototype[key]) continue;=0A=
=0A=
      var pair =3D [key, value];=0A=
      pair.key =3D key;=0A=
      pair.value =3D value;=0A=
      iterator(pair);=0A=
    }=0A=
  },=0A=
=0A=
  keys: function() {=0A=
    return this.pluck('key');=0A=
  },=0A=
=0A=
  values: function() {=0A=
    return this.pluck('value');=0A=
  },=0A=
=0A=
  merge: function(hash) {=0A=
    return $H(hash).inject(this, function(mergedHash, pair) {=0A=
      mergedHash[pair.key] =3D pair.value;=0A=
      return mergedHash;=0A=
    });=0A=
  },=0A=
=0A=
  remove: function() {=0A=
    var result;=0A=
    for(var i =3D 0, length =3D arguments.length; i < length; i++) {=0A=
      var value =3D this[arguments[i]];=0A=
      if (value !=3D=3D undefined){=0A=
        if (result =3D=3D=3D undefined) result =3D value;=0A=
        else {=0A=
          if (result.constructor !=3D Array) result =3D [result];=0A=
          result.push(value)=0A=
        }=0A=
      }=0A=
      delete this[arguments[i]];=0A=
    }=0A=
    return result;=0A=
  },=0A=
=0A=
  toQueryString: function() {=0A=
    return Hash.toQueryString(this);=0A=
  },=0A=
=0A=
  inspect: function() {=0A=
    return '#<Hash:{' + this.map(function(pair) {=0A=
      return pair.map(Object.inspect).join(': ');=0A=
    }).join(', ') + '}>';=0A=
  }=0A=
});=0A=
=0A=
function $H(object) {=0A=
  if (object && object.constructor =3D=3D Hash) return object;=0A=
  return new Hash(object);=0A=
};=0A=
ObjectRange =3D Class.create();=0A=
Object.extend(ObjectRange.prototype, Enumerable);=0A=
Object.extend(ObjectRange.prototype, {=0A=
  initialize: function(start, end, exclusive) {=0A=
    this.start =3D start;=0A=
    this.end =3D end;=0A=
    this.exclusive =3D exclusive;=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    var value =3D this.start;=0A=
    while (this.include(value)) {=0A=
      iterator(value);=0A=
      value =3D value.succ();=0A=
    }=0A=
  },=0A=
=0A=
  include: function(value) {=0A=
    if (value < this.start)=0A=
      return false;=0A=
    if (this.exclusive)=0A=
      return value < this.end;=0A=
    return value <=3D this.end;=0A=
  }=0A=
});=0A=
=0A=
var $R =3D function(start, end, exclusive) {=0A=
  return new ObjectRange(start, end, exclusive);=0A=
}=0A=
=0A=
var Ajax =3D {=0A=
  getTransport: function() {=0A=
    return Try.these(=0A=
      function() {return new XMLHttpRequest()},=0A=
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},=0A=
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}=0A=
    ) || false;=0A=
  },=0A=
=0A=
  activeRequestCount: 0=0A=
}=0A=
=0A=
Ajax.Responders =3D {=0A=
  responders: [],=0A=
=0A=
  _each: function(iterator) {=0A=
    this.responders._each(iterator);=0A=
  },=0A=
=0A=
  register: function(responder) {=0A=
    if (!this.include(responder))=0A=
      this.responders.push(responder);=0A=
  },=0A=
=0A=
  unregister: function(responder) {=0A=
    this.responders =3D this.responders.without(responder);=0A=
  },=0A=
=0A=
  dispatch: function(callback, request, transport, json) {=0A=
    this.each(function(responder) {=0A=
      if (typeof responder[callback] =3D=3D 'function') {=0A=
        try {=0A=
          responder[callback].apply(responder, [request, transport, =
json]);=0A=
        } catch (e) {}=0A=
      }=0A=
    });=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Ajax.Responders, Enumerable);=0A=
=0A=
Ajax.Responders.register({=0A=
  onCreate: function() {=0A=
    Ajax.activeRequestCount++;=0A=
  },=0A=
  onComplete: function() {=0A=
    Ajax.activeRequestCount--;=0A=
  }=0A=
});=0A=
=0A=
Ajax.Base =3D function() {};=0A=
Ajax.Base.prototype =3D {=0A=
  setOptions: function(options) {=0A=
    this.options =3D {=0A=
      method:       'post',=0A=
      asynchronous: true,=0A=
      contentType:  'application/x-www-form-urlencoded',=0A=
      encoding:     'UTF-8',=0A=
      parameters:   ''=0A=
    }=0A=
    Object.extend(this.options, options || {});=0A=
=0A=
    this.options.method =3D this.options.method.toLowerCase();=0A=
    if (typeof this.options.parameters =3D=3D 'string')=0A=
      this.options.parameters =3D =
this.options.parameters.toQueryParams();=0A=
  }=0A=
}=0A=
=0A=
Ajax.Request =3D Class.create();=0A=
Ajax.Request.Events =3D=0A=
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];=0A=
=0A=
Ajax.Request.prototype =3D Object.extend(new Ajax.Base(), {=0A=
  _complete: false,=0A=
=0A=
  initialize: function(url, options) {=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.setOptions(options);=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  request: function(url) {=0A=
    this.url =3D url;=0A=
    this.method =3D this.options.method;=0A=
    var params =3D this.options.parameters;=0A=
=0A=
    if (!['get', 'post'].include(this.method)) {=0A=
      // simulate other verbs over post=0A=
      params['_method'] =3D this.method;=0A=
      this.method =3D 'post';=0A=
    }=0A=
=0A=
    params =3D Hash.toQueryString(params);=0A=
    if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) =
params +=3D '&_=3D'=0A=
=0A=
    // when GET, append parameters to URL=0A=
    if (this.method =3D=3D 'get' && params)=0A=
      this.url +=3D (this.url.indexOf('?') > -1 ? '&' : '?') + params;=0A=
=0A=
    try {=0A=
      Ajax.Responders.dispatch('onCreate', this, this.transport);=0A=
=0A=
      this.transport.open(this.method.toUpperCase(), this.url,=0A=
        this.options.asynchronous);=0A=
=0A=
      if (this.options.asynchronous)=0A=
        setTimeout(function() { this.respondToReadyState(1) =
}.bind(this), 10);=0A=
=0A=
      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);=0A=
      this.setRequestHeaders();=0A=
=0A=
      var body =3D this.method =3D=3D 'post' ? (this.options.postBody || =
params) : null;=0A=
=0A=
      this.transport.send(body);=0A=
=0A=
      /* Force Firefox to handle ready state 4 for synchronous requests =
*/=0A=
      if (!this.options.asynchronous && this.transport.overrideMimeType)=0A=
        this.onStateChange();=0A=
=0A=
    }=0A=
    catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  onStateChange: function() {=0A=
    var readyState =3D this.transport.readyState;=0A=
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))=0A=
      this.respondToReadyState(this.transport.readyState);=0A=
  },=0A=
=0A=
  setRequestHeaders: function() {=0A=
    var headers =3D {=0A=
      'X-Requested-With': 'XMLHttpRequest',=0A=
      'X-Prototype-Version': Prototype.Version,=0A=
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'=0A=
    };=0A=
=0A=
    if (this.method =3D=3D 'post') {=0A=
      headers['Content-type'] =3D this.options.contentType +=0A=
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');=0A=
=0A=
      /* Force "Connection: close" for older Mozilla browsers to work=0A=
       * around a bug where XMLHttpRequest sends an incorrect=0A=
       * Content-length header. See Mozilla Bugzilla #246651.=0A=
       */=0A=
      if (this.transport.overrideMimeType &&=0A=
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)=0A=
            headers['Connection'] =3D 'close';=0A=
    }=0A=
=0A=
    // user-defined headers=0A=
    if (typeof this.options.requestHeaders =3D=3D 'object') {=0A=
      var extras =3D this.options.requestHeaders;=0A=
=0A=
      if (typeof extras.push =3D=3D 'function')=0A=
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D 2)=0A=
          headers[extras[i]] =3D extras[i+1];=0A=
      else=0A=
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });=0A=
    }=0A=
=0A=
    for (var name in headers)=0A=
      this.transport.setRequestHeader(name, headers[name]);=0A=
  },=0A=
=0A=
  success: function() {=0A=
    return !this.transport.status=0A=
        || (this.transport.status >=3D 200 && this.transport.status < =
300);=0A=
  },=0A=
=0A=
  respondToReadyState: function(readyState) {=0A=
    var state =3D Ajax.Request.Events[readyState];=0A=
    var transport =3D this.transport, json =3D this.evalJSON();=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      try {=0A=
        this._complete =3D true;=0A=
        (this.options['on' + this.transport.status]=0A=
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]=0A=
         || Prototype.emptyFunction)(transport, json);=0A=
      } catch (e) {=0A=
        this.dispatchException(e);=0A=
      }=0A=
=0A=
      if ((this.getHeader('Content-type') || 'text/javascript').strip().=0A=
        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))=0A=
          this.evalResponse();=0A=
    }=0A=
=0A=
    try {=0A=
      (this.options['on' + state] || Prototype.emptyFunction)(transport, =
json);=0A=
      Ajax.Responders.dispatch('on' + state, this, transport, json);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
=0A=
    if (state =3D=3D 'Complete') {=0A=
      // avoid memory leak in MSIE: clean up=0A=
      this.transport.onreadystatechange =3D Prototype.emptyFunction;=0A=
    }=0A=
  },=0A=
=0A=
  getHeader: function(name) {=0A=
    try {=0A=
      return this.transport.getResponseHeader(name);=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalJSON: function() {=0A=
    try {=0A=
      var json =3D this.getHeader('X-JSON');=0A=
      return json ? eval('(' + json + ')') : null;=0A=
    } catch (e) { return null }=0A=
  },=0A=
=0A=
  evalResponse: function() {=0A=
    try {=0A=
      return eval(this.transport.responseText);=0A=
    } catch (e) {=0A=
      this.dispatchException(e);=0A=
    }=0A=
  },=0A=
=0A=
  dispatchException: function(exception) {=0A=
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);=0A=
    Ajax.Responders.dispatch('onException', this, exception);=0A=
  }=0A=
});=0A=
=0A=
Ajax.Updater =3D Class.create();=0A=
=0A=
Object.extend(Object.extend(Ajax.Updater.prototype, =
Ajax.Request.prototype), {=0A=
  initialize: function(container, url, options) {=0A=
    this.container =3D {=0A=
      success: (container.success || container),=0A=
      failure: (container.failure || (container.success ? null : =
container))=0A=
    }=0A=
=0A=
    this.transport =3D Ajax.getTransport();=0A=
    this.setOptions(options);=0A=
=0A=
    var onComplete =3D this.options.onComplete || =
Prototype.emptyFunction;=0A=
    this.options.onComplete =3D (function(transport, param) {=0A=
      this.updateContent();=0A=
      onComplete(transport, param);=0A=
    }).bind(this);=0A=
=0A=
    this.request(url);=0A=
  },=0A=
=0A=
  updateContent: function() {=0A=
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'];=0A=
    var response =3D this.transport.responseText;=0A=
=0A=
    if (!this.options.evalScripts) response =3D response.stripScripts();=0A=
=0A=
    if (receiver =3D $(receiver)) {=0A=
      if (this.options.insertion)=0A=
        new this.options.insertion(receiver, response);=0A=
      else=0A=
        receiver.update(response);=0A=
    }=0A=
=0A=
    if (this.success()) {=0A=
      if (this.onComplete)=0A=
        setTimeout(this.onComplete.bind(this), 10);=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
Ajax.PeriodicalUpdater =3D Class.create();=0A=
Ajax.PeriodicalUpdater.prototype =3D Object.extend(new Ajax.Base(), {=0A=
  initialize: function(container, url, options) {=0A=
    this.setOptions(options);=0A=
    this.onComplete =3D this.options.onComplete;=0A=
=0A=
    this.frequency =3D (this.options.frequency || 2);=0A=
    this.decay =3D (this.options.decay || 1);=0A=
=0A=
    this.updater =3D {};=0A=
    this.container =3D container;=0A=
    this.url =3D url;=0A=
=0A=
    this.start();=0A=
  },=0A=
=0A=
  start: function() {=0A=
    this.options.onComplete =3D this.updateComplete.bind(this);=0A=
    this.onTimerEvent();=0A=
  },=0A=
=0A=
  stop: function() {=0A=
    this.updater.options.onComplete =3D undefined;=0A=
    clearTimeout(this.timer);=0A=
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);=0A=
  },=0A=
=0A=
  updateComplete: function(request) {=0A=
    if (this.options.decay) {=0A=
      this.decay =3D (request.responseText =3D=3D this.lastText ?=0A=
        this.decay * this.options.decay : 1);=0A=
=0A=
      this.lastText =3D request.responseText;=0A=
    }=0A=
    this.timer =3D setTimeout(this.onTimerEvent.bind(this),=0A=
      this.decay * this.frequency * 1000);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);=0A=
  }=0A=
});=0A=
function $(element) {=0A=
  if (arguments.length > 1) {=0A=
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)=0A=
      elements.push($(arguments[i]));=0A=
    return elements;=0A=
  }=0A=
  if (typeof element =3D=3D 'string')=0A=
    element =3D document.getElementById(element);=0A=
  return Element.extend(element);=0A=
}=0A=
=0A=
if (Prototype.BrowserFeatures.XPath) {=0A=
  document._getElementsByXPath =3D function(expression, parentElement) {=0A=
    var results =3D [];=0A=
    var query =3D document.evaluate(expression, $(parentElement) || =
document,=0A=
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);=0A=
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)=0A=
      results.push(query.snapshotItem(i));=0A=
    return results;=0A=
  };=0A=
}=0A=
=0A=
document.getElementsByClassName =3D function(className, parentElement) {=0A=
  if (Prototype.BrowserFeatures.XPath) {=0A=
    var q =3D ".//*[contains(concat(' ', @class, ' '), ' " + className + =
" ')]";=0A=
    return document._getElementsByXPath(q, parentElement);=0A=
  } else {=0A=
    var children =3D ($(parentElement) || =
document.body).getElementsByTagName('*');=0A=
    var elements =3D [], child;=0A=
    for (var i =3D 0, length =3D children.length; i < length; i++) {=0A=
      child =3D children[i];=0A=
      if (Element.hasClassName(child, className))=0A=
        elements.push(Element.extend(child));=0A=
    }=0A=
    return elements;=0A=
  }=0A=
};=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
if (!window.Element)=0A=
  var Element =3D new Object();=0A=
=0A=
Element.extend =3D function(element) {=0A=
  if (!element || _nativeExtensions || element.nodeType =3D=3D 3) return =
element;=0A=
=0A=
  if (!element._extended && element.tagName && element !=3D window) {=0A=
    var methods =3D Object.clone(Element.Methods), cache =3D =
Element.extend.cache;=0A=
=0A=
    if (element.tagName =3D=3D 'FORM')=0A=
      Object.extend(methods, Form.Methods);=0A=
    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))=0A=
      Object.extend(methods, Form.Element.Methods);=0A=
=0A=
    Object.extend(methods, Element.Methods.Simulated);=0A=
=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (typeof value =3D=3D 'function' && !(property in element))=0A=
        element[property] =3D cache.findOrStore(value);=0A=
    }=0A=
  }=0A=
=0A=
  element._extended =3D true;=0A=
  return element;=0A=
};=0A=
=0A=
Element.extend.cache =3D {=0A=
  findOrStore: function(value) {=0A=
    return this[value] =3D this[value] || function() {=0A=
      return value.apply(null, [this].concat($A(arguments)));=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
Element.Methods =3D {=0A=
  visible: function(element) {=0A=
    return $(element).style.display !=3D 'none';=0A=
  },=0A=
=0A=
  toggle: function(element) {=0A=
    element =3D $(element);=0A=
    Element[Element.visible(element) ? 'hide' : 'show'](element);=0A=
    return element;=0A=
  },=0A=
=0A=
  hide: function(element) {=0A=
    $(element).style.display =3D 'none';=0A=
    return element;=0A=
  },=0A=
=0A=
  show: function(element) {=0A=
    $(element).style.display =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  remove: function(element) {=0A=
    element =3D $(element);=0A=
    element.parentNode.removeChild(element);=0A=
    return element;=0A=
  },=0A=
=0A=
  update: function(element, html) {=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    $(element).innerHTML =3D html.stripScripts();=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  },=0A=
=0A=
  replace: function(element, html) {=0A=
    element =3D $(element);=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    if (element.outerHTML) {=0A=
      element.outerHTML =3D html.stripScripts();=0A=
    } else {=0A=
      var range =3D element.ownerDocument.createRange();=0A=
      range.selectNodeContents(element);=0A=
      element.parentNode.replaceChild(=0A=
        range.createContextualFragment(html.stripScripts()), element);=0A=
    }=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  },=0A=
=0A=
  inspect: function(element) {=0A=
    element =3D $(element);=0A=
    var result =3D '<' + element.tagName.toLowerCase();=0A=
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {=0A=
      var property =3D pair.first(), attribute =3D pair.last();=0A=
      var value =3D (element[property] || '').toString();=0A=
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);=0A=
    });=0A=
    return result + '>';=0A=
  },=0A=
=0A=
  recursivelyCollect: function(element, property) {=0A=
    element =3D $(element);=0A=
    var elements =3D [];=0A=
    while (element =3D element[property])=0A=
      if (element.nodeType =3D=3D 1)=0A=
        elements.push(Element.extend(element));=0A=
    return elements;=0A=
  },=0A=
=0A=
  ancestors: function(element) {=0A=
    return $(element).recursivelyCollect('parentNode');=0A=
  },=0A=
=0A=
  descendants: function(element) {=0A=
    return $A($(element).getElementsByTagName('*'));=0A=
  },=0A=
=0A=
  immediateDescendants: function(element) {=0A=
    if (!(element =3D $(element).firstChild)) return [];=0A=
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;=0A=
    if (element) return [element].concat($(element).nextSiblings());=0A=
    return [];=0A=
  },=0A=
=0A=
  previousSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('previousSibling');=0A=
  },=0A=
=0A=
  nextSiblings: function(element) {=0A=
    return $(element).recursivelyCollect('nextSibling');=0A=
  },=0A=
=0A=
  siblings: function(element) {=0A=
    element =3D $(element);=0A=
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());=0A=
  },=0A=
=0A=
  match: function(element, selector) {=0A=
    if (typeof selector =3D=3D 'string')=0A=
      selector =3D new Selector(selector);=0A=
    return selector.match($(element));=0A=
  },=0A=
=0A=
  up: function(element, expression, index) {=0A=
    return Selector.findElement($(element).ancestors(), expression, =
index);=0A=
  },=0A=
=0A=
  down: function(element, expression, index) {=0A=
    return Selector.findElement($(element).descendants(), expression, =
index);=0A=
  },=0A=
=0A=
  previous: function(element, expression, index) {=0A=
    return Selector.findElement($(element).previousSiblings(), =
expression, index);=0A=
  },=0A=
=0A=
  next: function(element, expression, index) {=0A=
    return Selector.findElement($(element).nextSiblings(), expression, =
index);=0A=
  },=0A=
=0A=
  getElementsBySelector: function() {=0A=
    var args =3D $A(arguments), element =3D $(args.shift());=0A=
    return Selector.findChildElements(element, args);=0A=
  },=0A=
=0A=
  getElementsByClassName: function(element, className) {=0A=
    return document.getElementsByClassName(className, element);=0A=
  },=0A=
=0A=
  readAttribute: function(element, name) {=0A=
    element =3D $(element);=0A=
    if (document.all && !window.opera) {=0A=
      var t =3D Element._attributeTranslations;=0A=
      if (t.values[name]) return t.values[name](element, name);=0A=
      if (t.names[name])  name =3D t.names[name];=0A=
      var attribute =3D element.attributes[name];=0A=
      if(attribute) return attribute.nodeValue;=0A=
    }=0A=
    return element.getAttribute(name);=0A=
  },=0A=
=0A=
  getHeight: function(element) {=0A=
    return $(element).getDimensions().height;=0A=
  },=0A=
=0A=
  getWidth: function(element) {=0A=
    return $(element).getDimensions().width;=0A=
  },=0A=
=0A=
  classNames: function(element) {=0A=
    return new Element.ClassNames(element);=0A=
  },=0A=
=0A=
  hasClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    var elementClassName =3D element.className;=0A=
    if (elementClassName.length =3D=3D 0) return false;=0A=
    if (elementClassName =3D=3D className ||=0A=
        elementClassName.match(new RegExp("(^|\\s)" + className + =
"(\\s|$)")))=0A=
      return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  addClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element).add(className);=0A=
    return element;=0A=
  },=0A=
=0A=
  removeClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element).remove(className);=0A=
    return element;=0A=
  },=0A=
=0A=
  toggleClassName: function(element, className) {=0A=
    if (!(element =3D $(element))) return;=0A=
    Element.classNames(element)[element.hasClassName(className) ? =
'remove' : 'add'](className);=0A=
    return element;=0A=
  },=0A=
=0A=
  observe: function() {=0A=
    Event.observe.apply(Event, arguments);=0A=
    return $A(arguments).first();=0A=
  },=0A=
=0A=
  stopObserving: function() {=0A=
    Event.stopObserving.apply(Event, arguments);=0A=
    return $A(arguments).first();=0A=
  },=0A=
=0A=
  // removes whitespace-only text node children=0A=
  cleanWhitespace: function(element) {=0A=
    element =3D $(element);=0A=
    var node =3D element.firstChild;=0A=
    while (node) {=0A=
      var nextNode =3D node.nextSibling;=0A=
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))=0A=
        element.removeChild(node);=0A=
      node =3D nextNode;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  empty: function(element) {=0A=
    return $(element).innerHTML.match(/^\s*$/);=0A=
  },=0A=
=0A=
  descendantOf: function(element, ancestor) {=0A=
    element =3D $(element), ancestor =3D $(ancestor);=0A=
    while (element =3D element.parentNode)=0A=
      if (element =3D=3D ancestor) return true;=0A=
    return false;=0A=
  },=0A=
=0A=
  scrollTo: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Position.cumulativeOffset(element);=0A=
    window.scrollTo(pos[0], pos[1]);=0A=
    return element;=0A=
  },=0A=
=0A=
  getStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    if (['float','cssFloat'].include(style))=0A=
      style =3D (typeof element.style.styleFloat !=3D 'undefined' ? =
'styleFloat' : 'cssFloat');=0A=
    style =3D style.camelize();=0A=
    var value =3D element.style[style];=0A=
    if (!value) {=0A=
      if (document.defaultView && document.defaultView.getComputedStyle) =
{=0A=
        var css =3D document.defaultView.getComputedStyle(element, null);=0A=
        value =3D css ? css[style] : null;=0A=
      } else if (element.currentStyle) {=0A=
        value =3D element.currentStyle[style];=0A=
      }=0A=
    }=0A=
=0A=
    if((value =3D=3D 'auto') && ['width','height'].include(style) && =
(element.getStyle('display') !=3D 'none'))=0A=
      value =3D element['offset'+style.capitalize()] + 'px';=0A=
=0A=
    if (window.opera && ['left', 'top', 'right', =
'bottom'].include(style))=0A=
      if (Element.getStyle(element, 'position') =3D=3D 'static') value =
=3D 'auto';=0A=
    if(style =3D=3D 'opacity') {=0A=
      if(value) return parseFloat(value);=0A=
      if(value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))=0A=
        if(value[1]) return parseFloat(value[1]) / 100;=0A=
      return 1.0;=0A=
    }=0A=
    return value =3D=3D 'auto' ? null : value;=0A=
  },=0A=
=0A=
  setStyle: function(element, style) {=0A=
    element =3D $(element);=0A=
    for (var name in style) {=0A=
      var value =3D style[name];=0A=
      if(name =3D=3D 'opacity') {=0A=
        if (value =3D=3D 1) {=0A=
          value =3D (/Gecko/.test(navigator.userAgent) &&=0A=
            !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? =
0.999999 : 1.0;=0A=
          if(/MSIE/.test(navigator.userAgent) && !window.opera)=0A=
            element.style.filter =3D =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');=0A=
        } else if(value =3D=3D=3D '') {=0A=
          if(/MSIE/.test(navigator.userAgent) && !window.opera)=0A=
            element.style.filter =3D =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');=0A=
        } else {=0A=
          if(value < 0.00001) value =3D 0;=0A=
          if(/MSIE/.test(navigator.userAgent) && !window.opera)=0A=
            element.style.filter =3D =
element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +=0A=
              'alpha(opacity=3D'+value*100+')';=0A=
        }=0A=
      } else if(['float','cssFloat'].include(name)) name =3D (typeof =
element.style.styleFloat !=3D 'undefined') ? 'styleFloat' : 'cssFloat';=0A=
      element.style[name.camelize()] =3D value;=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  getDimensions: function(element) {=0A=
    element =3D $(element);=0A=
    var display =3D $(element).getStyle('display');=0A=
    if (display !=3D 'none' && display !=3D null) // Safari bug=0A=
      return {width: element.offsetWidth, height: element.offsetHeight};=0A=
=0A=
    // All *Width and *Height properties give 0 on elements with display =
none,=0A=
    // so enable the element temporarily=0A=
    var els =3D element.style;=0A=
    var originalVisibility =3D els.visibility;=0A=
    var originalPosition =3D els.position;=0A=
    var originalDisplay =3D els.display;=0A=
    els.visibility =3D 'hidden';=0A=
    els.position =3D 'absolute';=0A=
    els.display =3D 'block';=0A=
    var originalWidth =3D element.clientWidth;=0A=
    var originalHeight =3D element.clientHeight;=0A=
    els.display =3D originalDisplay;=0A=
    els.position =3D originalPosition;=0A=
    els.visibility =3D originalVisibility;=0A=
    return {width: originalWidth, height: originalHeight};=0A=
  },=0A=
=0A=
  makePositioned: function(element) {=0A=
    element =3D $(element);=0A=
    var pos =3D Element.getStyle(element, 'position');=0A=
    if (pos =3D=3D 'static' || !pos) {=0A=
      element._madePositioned =3D true;=0A=
      element.style.position =3D 'relative';=0A=
      // Opera returns the offset relative to the positioning context, =
when an=0A=
      // element is position relative but top and left have not been =
defined=0A=
      if (window.opera) {=0A=
        element.style.top =3D 0;=0A=
        element.style.left =3D 0;=0A=
      }=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  undoPositioned: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._madePositioned) {=0A=
      element._madePositioned =3D undefined;=0A=
      element.style.position =3D=0A=
        element.style.top =3D=0A=
        element.style.left =3D=0A=
        element.style.bottom =3D=0A=
        element.style.right =3D '';=0A=
    }=0A=
    return element;=0A=
  },=0A=
=0A=
  makeClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (element._overflow) return element;=0A=
    element._overflow =3D element.style.overflow || 'auto';=0A=
    if ((Element.getStyle(element, 'overflow') || 'visible') !=3D =
'hidden')=0A=
      element.style.overflow =3D 'hidden';=0A=
    return element;=0A=
  },=0A=
=0A=
  undoClipping: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element._overflow) return element;=0A=
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;=0A=
    element._overflow =3D null;=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});=0A=
=0A=
Element._attributeTranslations =3D {};=0A=
=0A=
Element._attributeTranslations.names =3D {=0A=
  colspan:   "colSpan",=0A=
  rowspan:   "rowSpan",=0A=
  valign:    "vAlign",=0A=
  datetime:  "dateTime",=0A=
  accesskey: "accessKey",=0A=
  tabindex:  "tabIndex",=0A=
  enctype:   "encType",=0A=
  maxlength: "maxLength",=0A=
  readonly:  "readOnly",=0A=
  longdesc:  "longDesc"=0A=
};=0A=
=0A=
Element._attributeTranslations.values =3D {=0A=
  _getAttr: function(element, attribute) {=0A=
    return element.getAttribute(attribute, 2);=0A=
  },=0A=
=0A=
  _flag: function(element, attribute) {=0A=
    return $(element).hasAttribute(attribute) ? attribute : null;=0A=
  },=0A=
=0A=
  style: function(element) {=0A=
    return element.style.cssText.toLowerCase();=0A=
  },=0A=
=0A=
  title: function(element) {=0A=
    var node =3D element.getAttributeNode('title');=0A=
    return node.specified ? node.nodeValue : null;=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element._attributeTranslations.values, {=0A=
  href: Element._attributeTranslations.values._getAttr,=0A=
  src:  Element._attributeTranslations.values._getAttr,=0A=
  disabled: Element._attributeTranslations.values._flag,=0A=
  checked:  Element._attributeTranslations.values._flag,=0A=
  readonly: Element._attributeTranslations.values._flag,=0A=
  multiple: Element._attributeTranslations.values._flag=0A=
});=0A=
=0A=
Element.Methods.Simulated =3D {=0A=
  hasAttribute: function(element, attribute) {=0A=
    var t =3D Element._attributeTranslations;=0A=
    attribute =3D t.names[attribute] || attribute;=0A=
    return $(element).getAttributeNode(attribute).specified;=0A=
  }=0A=
};=0A=
=0A=
// IE is missing .innerHTML support for TABLE-related elements=0A=
if (document.all && !window.opera){=0A=
  Element.Methods.update =3D function(element, html) {=0A=
    element =3D $(element);=0A=
    html =3D typeof html =3D=3D 'undefined' ? '' : html.toString();=0A=
    var tagName =3D element.tagName.toUpperCase();=0A=
    if (['THEAD','TBODY','TR','TD'].include(tagName)) {=0A=
      var div =3D document.createElement('div');=0A=
      switch (tagName) {=0A=
        case 'THEAD':=0A=
        case 'TBODY':=0A=
          div.innerHTML =3D '<table><tbody>' +  html.stripScripts() + =
'</tbody></table>';=0A=
          depth =3D 2;=0A=
          break;=0A=
        case 'TR':=0A=
          div.innerHTML =3D '<table><tbody><tr>' +  html.stripScripts() =
+ '</tr></tbody></table>';=0A=
          depth =3D 3;=0A=
          break;=0A=
        case 'TD':=0A=
          div.innerHTML =3D '<table><tbody><tr><td>' +  =
html.stripScripts() + '</td></tr></tbody></table>';=0A=
          depth =3D 4;=0A=
      }=0A=
      $A(element.childNodes).each(function(node){=0A=
        element.removeChild(node)=0A=
      });=0A=
      depth.times(function(){ div =3D div.firstChild });=0A=
=0A=
      $A(div.childNodes).each(=0A=
        function(node){ element.appendChild(node) });=0A=
    } else {=0A=
      element.innerHTML =3D html.stripScripts();=0A=
    }=0A=
    setTimeout(function() {html.evalScripts()}, 10);=0A=
    return element;=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element, Element.Methods);=0A=
=0A=
var _nativeExtensions =3D false;=0A=
=0A=
if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {=0A=
    var className =3D 'HTML' + tag + 'Element';=0A=
    if(window[className]) return;=0A=
    var klass =3D window[className] =3D {};=0A=
    klass.prototype =3D document.createElement(tag ? tag.toLowerCase() : =
'div').__proto__;=0A=
  });=0A=
=0A=
Element.addMethods =3D function(methods) {=0A=
  Object.extend(Element.Methods, methods || {});=0A=
=0A=
  function copy(methods, destination, onlyIfAbsent) {=0A=
    onlyIfAbsent =3D onlyIfAbsent || false;=0A=
    var cache =3D Element.extend.cache;=0A=
    for (var property in methods) {=0A=
      var value =3D methods[property];=0A=
      if (!onlyIfAbsent || !(property in destination))=0A=
        destination[property] =3D cache.findOrStore(value);=0A=
    }=0A=
  }=0A=
=0A=
  if (typeof HTMLElement !=3D 'undefined') {=0A=
    copy(Element.Methods, HTMLElement.prototype);=0A=
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);=0A=
    copy(Form.Methods, HTMLFormElement.prototype);=0A=
    [HTMLInputElement, HTMLTextAreaElement, =
HTMLSelectElement].each(function(klass) {=0A=
      copy(Form.Element.Methods, klass.prototype);=0A=
    });=0A=
    _nativeExtensions =3D true;=0A=
  }=0A=
}=0A=
=0A=
var Toggle =3D new Object();=0A=
Toggle.display =3D Element.toggle;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.Insertion =3D function(adjacency) {=0A=
  this.adjacency =3D adjacency;=0A=
}=0A=
=0A=
Abstract.Insertion.prototype =3D {=0A=
  initialize: function(element, content) {=0A=
    this.element =3D $(element);=0A=
    this.content =3D content.stripScripts();=0A=
=0A=
    if (this.adjacency && this.element.insertAdjacentHTML) {=0A=
      try {=0A=
        this.element.insertAdjacentHTML(this.adjacency, this.content);=0A=
      } catch (e) {=0A=
        var tagName =3D this.element.tagName.toUpperCase();=0A=
        if (['TBODY', 'TR'].include(tagName)) {=0A=
          this.insertContent(this.contentFromAnonymousTable());=0A=
        } else {=0A=
          throw e;=0A=
        }=0A=
      }=0A=
    } else {=0A=
      this.range =3D this.element.ownerDocument.createRange();=0A=
      if (this.initializeRange) this.initializeRange();=0A=
      =
this.insertContent([this.range.createContextualFragment(this.content)]);=0A=
    }=0A=
=0A=
    setTimeout(function() {content.evalScripts()}, 10);=0A=
  },=0A=
=0A=
  contentFromAnonymousTable: function() {=0A=
    var div =3D document.createElement('div');=0A=
    div.innerHTML =3D '<table><tbody>' + this.content + =
'</tbody></table>';=0A=
    return $A(div.childNodes[0].childNodes[0].childNodes);=0A=
  }=0A=
}=0A=
=0A=
var Insertion =3D new Object();=0A=
=0A=
Insertion.Before =3D Class.create();=0A=
Insertion.Before.prototype =3D Object.extend(new =
Abstract.Insertion('beforeBegin'), {=0A=
  initializeRange: function() {=0A=
    this.range.setStartBefore(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.parentNode.insertBefore(fragment, this.element);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.Top =3D Class.create();=0A=
Insertion.Top.prototype =3D Object.extend(new =
Abstract.Insertion('afterBegin'), {=0A=
  initializeRange: function() {=0A=
    this.range.selectNodeContents(this.element);=0A=
    this.range.collapse(true);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.reverse(false).each((function(fragment) {=0A=
      this.element.insertBefore(fragment, this.element.firstChild);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.Bottom =3D Class.create();=0A=
Insertion.Bottom.prototype =3D Object.extend(new =
Abstract.Insertion('beforeEnd'), {=0A=
  initializeRange: function() {=0A=
    this.range.selectNodeContents(this.element);=0A=
    this.range.collapse(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.appendChild(fragment);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
Insertion.After =3D Class.create();=0A=
Insertion.After.prototype =3D Object.extend(new =
Abstract.Insertion('afterEnd'), {=0A=
  initializeRange: function() {=0A=
    this.range.setStartAfter(this.element);=0A=
  },=0A=
=0A=
  insertContent: function(fragments) {=0A=
    fragments.each((function(fragment) {=0A=
      this.element.parentNode.insertBefore(fragment,=0A=
        this.element.nextSibling);=0A=
    }).bind(this));=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Element.ClassNames =3D Class.create();=0A=
Element.ClassNames.prototype =3D {=0A=
  initialize: function(element) {=0A=
    this.element =3D $(element);=0A=
  },=0A=
=0A=
  _each: function(iterator) {=0A=
    this.element.className.split(/\s+/).select(function(name) {=0A=
      return name.length > 0;=0A=
    })._each(iterator);=0A=
  },=0A=
=0A=
  set: function(className) {=0A=
    this.element.className =3D className;=0A=
  },=0A=
=0A=
  add: function(classNameToAdd) {=0A=
    if (this.include(classNameToAdd)) return;=0A=
    this.set($A(this).concat(classNameToAdd).join(' '));=0A=
  },=0A=
=0A=
  remove: function(classNameToRemove) {=0A=
    if (!this.include(classNameToRemove)) return;=0A=
    this.set($A(this).without(classNameToRemove).join(' '));=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return $A(this).join(' ');=0A=
  }=0A=
};=0A=
=0A=
Object.extend(Element.ClassNames.prototype, Enumerable);=0A=
var Selector =3D Class.create();=0A=
Selector.prototype =3D {=0A=
  initialize: function(expression) {=0A=
    this.params =3D {classNames: []};=0A=
    this.expression =3D expression.toString().strip();=0A=
    this.parseExpression();=0A=
    this.compileMatcher();=0A=
  },=0A=
=0A=
  parseExpression: function() {=0A=
    function abort(message) { throw 'Parse error in selector: ' + =
message; }=0A=
=0A=
    if (this.expression =3D=3D '')  abort('empty expression');=0A=
=0A=
    var params =3D this.params, expr =3D this.expression, match, =
modifier, clause, rest;=0A=
    while (match =3D =
expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=3D)(?:"([^"]*)"|([^\]\s]*))=
)?\]$/i)) {=0A=
      params.attributes =3D params.attributes || [];=0A=
      params.attributes.push({name: match[2], operator: match[3], value: =
match[4] || match[5] || ''});=0A=
      expr =3D match[1];=0A=
    }=0A=
=0A=
    if (expr =3D=3D '*') return this.params.wildcard =3D true;=0A=
=0A=
    while (match =3D expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {=0A=
      modifier =3D match[1], clause =3D match[2], rest =3D match[3];=0A=
      switch (modifier) {=0A=
        case '#':       params.id =3D clause; break;=0A=
        case '.':       params.classNames.push(clause); break;=0A=
        case '':=0A=
        case undefined: params.tagName =3D clause.toUpperCase(); break;=0A=
        default:        abort(expr.inspect());=0A=
      }=0A=
      expr =3D rest;=0A=
    }=0A=
=0A=
    if (expr.length > 0) abort(expr.inspect());=0A=
  },=0A=
=0A=
  buildMatchExpression: function() {=0A=
    var params =3D this.params, conditions =3D [], clause;=0A=
=0A=
    if (params.wildcard)=0A=
      conditions.push('true');=0A=
    if (clause =3D params.id)=0A=
      conditions.push('element.readAttribute("id") =3D=3D ' + =
clause.inspect());=0A=
    if (clause =3D params.tagName)=0A=
      conditions.push('element.tagName.toUpperCase() =3D=3D ' + =
clause.inspect());=0A=
    if ((clause =3D params.classNames).length > 0)=0A=
      for (var i =3D 0, length =3D clause.length; i < length; i++)=0A=
        conditions.push('element.hasClassName(' + clause[i].inspect() + =
')');=0A=
    if (clause =3D params.attributes) {=0A=
      clause.each(function(attribute) {=0A=
        var value =3D 'element.readAttribute(' + =
attribute.name.inspect() + ')';=0A=
        var splitValueBy =3D function(delimiter) {=0A=
          return value + ' && ' + value + '.split(' + =
delimiter.inspect() + ')';=0A=
        }=0A=
=0A=
        switch (attribute.operator) {=0A=
          case '=3D':       conditions.push(value + ' =3D=3D ' + =
attribute.value.inspect()); break;=0A=
          case '~=3D':      conditions.push(splitValueBy(' ') + =
'.include(' + attribute.value.inspect() + ')'); break;=0A=
          case '|=3D':      conditions.push(=0A=
                            splitValueBy('-') + '.first().toUpperCase() =
=3D=3D ' + attribute.value.toUpperCase().inspect()=0A=
                          ); break;=0A=
          case '!=3D':      conditions.push(value + ' !=3D ' + =
attribute.value.inspect()); break;=0A=
          case '':=0A=
          case undefined: conditions.push('element.hasAttribute(' + =
attribute.name.inspect() + ')'); break;=0A=
          default:        throw 'Unknown operator ' + attribute.operator =
+ ' in selector';=0A=
        }=0A=
      });=0A=
    }=0A=
=0A=
    return conditions.join(' && ');=0A=
  },=0A=
=0A=
  compileMatcher: function() {=0A=
    this.match =3D new Function('element', 'if (!element.tagName) return =
false; \=0A=
      element =3D $(element); \=0A=
      return ' + this.buildMatchExpression());=0A=
  },=0A=
=0A=
  findElements: function(scope) {=0A=
    var element;=0A=
=0A=
    if (element =3D $(this.params.id))=0A=
      if (this.match(element))=0A=
        if (!scope || Element.childOf(element, scope))=0A=
          return [element];=0A=
=0A=
    scope =3D (scope || =
document).getElementsByTagName(this.params.tagName || '*');=0A=
=0A=
    var results =3D [];=0A=
    for (var i =3D 0, length =3D scope.length; i < length; i++)=0A=
      if (this.match(element =3D scope[i]))=0A=
        results.push(Element.extend(element));=0A=
=0A=
    return results;=0A=
  },=0A=
=0A=
  toString: function() {=0A=
    return this.expression;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Selector, {=0A=
  matchElements: function(elements, expression) {=0A=
    var selector =3D new Selector(expression);=0A=
    return =
elements.select(selector.match.bind(selector)).map(Element.extend);=0A=
  },=0A=
=0A=
  findElement: function(elements, expression, index) {=0A=
    if (typeof expression =3D=3D 'number') index =3D expression, =
expression =3D false;=0A=
    return Selector.matchElements(elements, expression || '*')[index || =
0];=0A=
  },=0A=
=0A=
  findChildElements: function(element, expressions) {=0A=
    return expressions.map(function(expression) {=0A=
      return =
expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], =
function(results, expr) {=0A=
        var selector =3D new Selector(expr);=0A=
        return results.inject([], function(elements, result) {=0A=
          return elements.concat(selector.findElements(result || =
element));=0A=
        });=0A=
      });=0A=
    }).flatten();=0A=
  }=0A=
});=0A=
=0A=
function $$() {=0A=
  return Selector.findChildElements(document, $A(arguments));=0A=
}=0A=
var Form =3D {=0A=
  reset: function(form) {=0A=
    $(form).reset();=0A=
    return form;=0A=
  },=0A=
=0A=
  serializeElements: function(elements, getHash) {=0A=
    var data =3D elements.inject({}, function(result, element) {=0A=
      if (!element.disabled && element.name) {=0A=
        var key =3D element.name, value =3D $(element).getValue();=0A=
        if (value !=3D undefined) {=0A=
          if (result[key]) {=0A=
            if (result[key].constructor !=3D Array) result[key] =3D =
[result[key]];=0A=
            result[key].push(value);=0A=
          }=0A=
          else result[key] =3D value;=0A=
        }=0A=
      }=0A=
      return result;=0A=
    });=0A=
=0A=
    return getHash ? data : Hash.toQueryString(data);=0A=
  }=0A=
};=0A=
=0A=
Form.Methods =3D {=0A=
  serialize: function(form, getHash) {=0A=
    return Form.serializeElements(Form.getElements(form), getHash);=0A=
  },=0A=
=0A=
  getElements: function(form) {=0A=
    return $A($(form).getElementsByTagName('*')).inject([],=0A=
      function(elements, child) {=0A=
        if (Form.Element.Serializers[child.tagName.toLowerCase()])=0A=
          elements.push(Element.extend(child));=0A=
        return elements;=0A=
      }=0A=
    );=0A=
  },=0A=
=0A=
  getInputs: function(form, typeName, name) {=0A=
    form =3D $(form);=0A=
    var inputs =3D form.getElementsByTagName('input');=0A=
=0A=
    if (!typeName && !name) return $A(inputs).map(Element.extend);=0A=
=0A=
    for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i =
< length; i++) {=0A=
      var input =3D inputs[i];=0A=
      if ((typeName && input.type !=3D typeName) || (name && input.name =
!=3D name))=0A=
        continue;=0A=
      matchingInputs.push(Element.extend(input));=0A=
    }=0A=
=0A=
    return matchingInputs;=0A=
  },=0A=
=0A=
  disable: function(form) {=0A=
    form =3D $(form);=0A=
    form.getElements().each(function(element) {=0A=
      element.blur();=0A=
      element.disabled =3D 'true';=0A=
    });=0A=
    return form;=0A=
  },=0A=
=0A=
  enable: function(form) {=0A=
    form =3D $(form);=0A=
    form.getElements().each(function(element) {=0A=
      element.disabled =3D '';=0A=
    });=0A=
    return form;=0A=
  },=0A=
=0A=
  findFirstElement: function(form) {=0A=
    return $(form).getElements().find(function(element) {=0A=
      return element.type !=3D 'hidden' && !element.disabled &&=0A=
        ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());=0A=
    });=0A=
  },=0A=
=0A=
  focusFirstElement: function(form) {=0A=
    form =3D $(form);=0A=
    form.findFirstElement().activate();=0A=
    return form;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Form, Form.Methods);=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element =3D {=0A=
  focus: function(element) {=0A=
    $(element).focus();=0A=
    return element;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    $(element).select();=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Form.Element.Methods =3D {=0A=
  serialize: function(element) {=0A=
    element =3D $(element);=0A=
    if (!element.disabled && element.name) {=0A=
      var value =3D element.getValue();=0A=
      if (value !=3D undefined) {=0A=
        var pair =3D {};=0A=
        pair[element.name] =3D value;=0A=
        return Hash.toQueryString(pair);=0A=
      }=0A=
    }=0A=
    return '';=0A=
  },=0A=
=0A=
  getValue: function(element) {=0A=
    element =3D $(element);=0A=
    var method =3D element.tagName.toLowerCase();=0A=
    return Form.Element.Serializers[method](element);=0A=
  },=0A=
=0A=
  clear: function(element) {=0A=
    $(element).value =3D '';=0A=
    return element;=0A=
  },=0A=
=0A=
  present: function(element) {=0A=
    return $(element).value !=3D '';=0A=
  },=0A=
=0A=
  activate: function(element) {=0A=
    element =3D $(element);=0A=
    element.focus();=0A=
    if (element.select && ( element.tagName.toLowerCase() !=3D 'input' ||=0A=
      !['button', 'reset', 'submit'].include(element.type) ) )=0A=
      element.select();=0A=
    return element;=0A=
  },=0A=
=0A=
  disable: function(element) {=0A=
    element =3D $(element);=0A=
    element.disabled =3D true;=0A=
    return element;=0A=
  },=0A=
=0A=
  enable: function(element) {=0A=
    element =3D $(element);=0A=
    element.blur();=0A=
    element.disabled =3D false;=0A=
    return element;=0A=
  }=0A=
}=0A=
=0A=
Object.extend(Form.Element, Form.Element.Methods);=0A=
var Field =3D Form.Element;=0A=
var $F =3D Form.Element.getValue;=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Form.Element.Serializers =3D {=0A=
  input: function(element) {=0A=
    switch (element.type.toLowerCase()) {=0A=
      case 'checkbox':=0A=
      case 'radio':=0A=
        return Form.Element.Serializers.inputSelector(element);=0A=
      default:=0A=
        return Form.Element.Serializers.textarea(element);=0A=
    }=0A=
  },=0A=
=0A=
  inputSelector: function(element) {=0A=
    return element.checked ? element.value : null;=0A=
  },=0A=
=0A=
  textarea: function(element) {=0A=
    return element.value;=0A=
  },=0A=
=0A=
  select: function(element) {=0A=
    return this[element.type =3D=3D 'select-one' ?=0A=
      'selectOne' : 'selectMany'](element);=0A=
  },=0A=
=0A=
  selectOne: function(element) {=0A=
    var index =3D element.selectedIndex;=0A=
    return index >=3D 0 ? this.optionValue(element.options[index]) : =
null;=0A=
  },=0A=
=0A=
  selectMany: function(element) {=0A=
    var values, length =3D element.length;=0A=
    if (!length) return null;=0A=
=0A=
    for (var i =3D 0, values =3D []; i < length; i++) {=0A=
      var opt =3D element.options[i];=0A=
      if (opt.selected) values.push(this.optionValue(opt));=0A=
    }=0A=
    return values;=0A=
  },=0A=
=0A=
  optionValue: function(opt) {=0A=
    // extend element because hasAttribute may not be native=0A=
    return Element.extend(opt).hasAttribute('value') ? opt.value : =
opt.text;=0A=
  }=0A=
}=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.TimedObserver =3D function() {}=0A=
Abstract.TimedObserver.prototype =3D {=0A=
  initialize: function(element, frequency, callback) {=0A=
    this.frequency =3D frequency;=0A=
    this.element   =3D $(element);=0A=
    this.callback  =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    this.registerCallback();=0A=
  },=0A=
=0A=
  registerCallback: function() {=0A=
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);=0A=
  },=0A=
=0A=
  onTimerEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    var changed =3D ('string' =3D=3D typeof this.lastValue && 'string' =
=3D=3D typeof value=0A=
      ? this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value));=0A=
    if (changed) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Form.Element.Observer =3D Class.create();=0A=
Form.Element.Observer.prototype =3D Object.extend(new =
Abstract.TimedObserver(), {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.Observer =3D Class.create();=0A=
Form.Observer.prototype =3D Object.extend(new Abstract.TimedObserver(), {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
=0A=
/*-----------------------------------------------------------------------=
---*/=0A=
=0A=
Abstract.EventObserver =3D function() {}=0A=
Abstract.EventObserver.prototype =3D {=0A=
  initialize: function(element, callback) {=0A=
    this.element  =3D $(element);=0A=
    this.callback =3D callback;=0A=
=0A=
    this.lastValue =3D this.getValue();=0A=
    if (this.element.tagName.toLowerCase() =3D=3D 'form')=0A=
      this.registerFormCallbacks();=0A=
    else=0A=
      this.registerCallback(this.element);=0A=
  },=0A=
=0A=
  onElementEvent: function() {=0A=
    var value =3D this.getValue();=0A=
    if (this.lastValue !=3D value) {=0A=
      this.callback(this.element, value);=0A=
      this.lastValue =3D value;=0A=
    }=0A=
  },=0A=
=0A=
  registerFormCallbacks: function() {=0A=
    =
Form.getElements(this.element).each(this.registerCallback.bind(this));=0A=
  },=0A=
=0A=
  registerCallback: function(element) {=0A=
    if (element.type) {=0A=
      switch (element.type.toLowerCase()) {=0A=
        case 'checkbox':=0A=
        case 'radio':=0A=
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
        default:=0A=
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));=0A=
          break;=0A=
      }=0A=
    }=0A=
  }=0A=
}=0A=
=0A=
Form.Element.EventObserver =3D Class.create();=0A=
Form.Element.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
  getValue: function() {=0A=
    return Form.Element.getValue(this.element);=0A=
  }=0A=
});=0A=
=0A=
Form.EventObserver =3D Class.create();=0A=
Form.EventObserver.prototype =3D Object.extend(new =
Abstract.EventObserver(), {=0A=
  getValue: function() {=0A=
    return Form.serialize(this.element);=0A=
  }=0A=
});=0A=
if (!window.Event) {=0A=
  var Event =3D new Object();=0A=
}=0A=
=0A=
Object.extend(Event, {=0A=
  KEY_BACKSPACE: 8,=0A=
  KEY_TAB:       9,=0A=
  KEY_RETURN:   13,=0A=
  KEY_ESC:      27,=0A=
  KEY_LEFT:     37,=0A=
  KEY_UP:       38,=0A=
  KEY_RIGHT:    39,=0A=
  KEY_DOWN:     40,=0A=
  KEY_DELETE:   46,=0A=
  KEY_HOME:     36,=0A=
  KEY_END:      35,=0A=
  KEY_PAGEUP:   33,=0A=
  KEY_PAGEDOWN: 34,=0A=
=0A=
  element: function(event) {=0A=
    return event.target || event.srcElement;=0A=
  },=0A=
=0A=
  isLeftClick: function(event) {=0A=
    return (((event.which) && (event.which =3D=3D 1)) ||=0A=
            ((event.button) && (event.button =3D=3D 1)));=0A=
  },=0A=
=0A=
  pointerX: function(event) {=0A=
    return event.pageX || (event.clientX +=0A=
      (document.documentElement.scrollLeft || document.body.scrollLeft));=0A=
  },=0A=
=0A=
  pointerY: function(event) {=0A=
    return event.pageY || (event.clientY +=0A=
      (document.documentElement.scrollTop || document.body.scrollTop));=0A=
  },=0A=
=0A=
  stop: function(event) {=0A=
    if (event.preventDefault) {=0A=
      event.preventDefault();=0A=
      event.stopPropagation();=0A=
    } else {=0A=
      event.returnValue =3D false;=0A=
      event.cancelBubble =3D true;=0A=
    }=0A=
  },=0A=
=0A=
  // find the first node with the given tagName, starting from the=0A=
  // node the event was triggered on; traverses the DOM upwards=0A=
  findElement: function(event, tagName) {=0A=
    var element =3D Event.element(event);=0A=
    while (element.parentNode && (!element.tagName ||=0A=
        (element.tagName.toUpperCase() !=3D tagName.toUpperCase())))=0A=
      element =3D element.parentNode;=0A=
    return element;=0A=
  },=0A=
=0A=
  observers: false,=0A=
=0A=
  _observeAndCache: function(element, name, observer, useCapture) {=0A=
    if (!this.observers) this.observers =3D [];=0A=
    if (element.addEventListener) {=0A=
      this.observers.push([element, name, observer, useCapture]);=0A=
      element.addEventListener(name, observer, useCapture);=0A=
    } else if (element.attachEvent) {=0A=
      this.observers.push([element, name, observer, useCapture]);=0A=
      element.attachEvent('on' + name, observer);=0A=
    }=0A=
  },=0A=
=0A=
  unloadCache: function() {=0A=
    if (!Event.observers) return;=0A=
    for (var i =3D 0, length =3D Event.observers.length; i < length; =
i++) {=0A=
      Event.stopObserving.apply(this, Event.observers[i]);=0A=
      Event.observers[i][0] =3D null;=0A=
    }=0A=
    Event.observers =3D false;=0A=
  },=0A=
=0A=
  observe: function(element, name, observer, useCapture) {=0A=
    element =3D $(element);=0A=
    useCapture =3D useCapture || false;=0A=
=0A=
    if (name =3D=3D 'keypress' &&=0A=
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A=
        || element.attachEvent))=0A=
      name =3D 'keydown';=0A=
=0A=
    Event._observeAndCache(element, name, observer, useCapture);=0A=
  },=0A=
=0A=
  stopObserving: function(element, name, observer, useCapture) {=0A=
    element =3D $(element);=0A=
    useCapture =3D useCapture || false;=0A=
=0A=
    if (name =3D=3D 'keypress' &&=0A=
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)=0A=
        || element.detachEvent))=0A=
      name =3D 'keydown';=0A=
=0A=
    if (element.removeEventListener) {=0A=
      element.removeEventListener(name, observer, useCapture);=0A=
    } else if (element.detachEvent) {=0A=
      try {=0A=
        element.detachEvent('on' + name, observer);=0A=
      } catch (e) {}=0A=
    }=0A=
  }=0A=
});=0A=
=0A=
/* prevent memory leaks in IE */=0A=
if (navigator.appVersion.match(/\bMSIE\b/))=0A=
  Event.observe(window, 'unload', Event.unloadCache, false);=0A=
var Position =3D {=0A=
  // set to true if needed, warning: firefox performance problems=0A=
  // NOT neeeded for page scrolling, only if draggable contained in=0A=
  // scrollable elements=0A=
  includeScrollOffsets: false,=0A=
=0A=
  // must be called before calling withinIncludingScrolloffset, every =
time the=0A=
  // page is scrolled=0A=
  prepare: function() {=0A=
    this.deltaX =3D  window.pageXOffset=0A=
                || document.documentElement.scrollLeft=0A=
                || document.body.scrollLeft=0A=
                || 0;=0A=
    this.deltaY =3D  window.pageYOffset=0A=
                || document.documentElement.scrollTop=0A=
                || document.body.scrollTop=0A=
                || 0;=0A=
  },=0A=
=0A=
  realOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.scrollTop  || 0;=0A=
      valueL +=3D element.scrollLeft || 0;=0A=
      element =3D element.parentNode;=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  cumulativeOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  positionedOffset: function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      element =3D element.offsetParent;=0A=
      if (element) {=0A=
        if(element.tagName=3D=3D'BODY') break;=0A=
        var p =3D Element.getStyle(element, 'position');=0A=
        if (p =3D=3D 'relative' || p =3D=3D 'absolute') break;=0A=
      }=0A=
    } while (element);=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  offsetParent: function(element) {=0A=
    if (element.offsetParent) return element.offsetParent;=0A=
    if (element =3D=3D document.body) return element;=0A=
=0A=
    while ((element =3D element.parentNode) && element !=3D =
document.body)=0A=
      if (Element.getStyle(element, 'position') !=3D 'static')=0A=
        return element;=0A=
=0A=
    return document.body;=0A=
  },=0A=
=0A=
  // caches x/y coordinate pair to use with overlap=0A=
  within: function(element, x, y) {=0A=
    if (this.includeScrollOffsets)=0A=
      return this.withinIncludingScrolloffsets(element, x, y);=0A=
    this.xcomp =3D x;=0A=
    this.ycomp =3D y;=0A=
    this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
    return (y >=3D this.offset[1] &&=0A=
            y <  this.offset[1] + element.offsetHeight &&=0A=
            x >=3D this.offset[0] &&=0A=
            x <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  withinIncludingScrolloffsets: function(element, x, y) {=0A=
    var offsetcache =3D this.realOffset(element);=0A=
=0A=
    this.xcomp =3D x + offsetcache[0] - this.deltaX;=0A=
    this.ycomp =3D y + offsetcache[1] - this.deltaY;=0A=
    this.offset =3D this.cumulativeOffset(element);=0A=
=0A=
    return (this.ycomp >=3D this.offset[1] &&=0A=
            this.ycomp <  this.offset[1] + element.offsetHeight &&=0A=
            this.xcomp >=3D this.offset[0] &&=0A=
            this.xcomp <  this.offset[0] + element.offsetWidth);=0A=
  },=0A=
=0A=
  // within must be called directly before=0A=
  overlap: function(mode, element) {=0A=
    if (!mode) return 0;=0A=
    if (mode =3D=3D 'vertical')=0A=
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /=0A=
        element.offsetHeight;=0A=
    if (mode =3D=3D 'horizontal')=0A=
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /=0A=
        element.offsetWidth;=0A=
  },=0A=
=0A=
  page: function(forElement) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
=0A=
    var element =3D forElement;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
=0A=
      // Safari fix=0A=
      if (element.offsetParent=3D=3Ddocument.body)=0A=
        if (Element.getStyle(element,'position')=3D=3D'absolute') break;=0A=
=0A=
    } while (element =3D element.offsetParent);=0A=
=0A=
    element =3D forElement;=0A=
    do {=0A=
      if (!window.opera || element.tagName=3D=3D'BODY') {=0A=
        valueT -=3D element.scrollTop  || 0;=0A=
        valueL -=3D element.scrollLeft || 0;=0A=
      }=0A=
    } while (element =3D element.parentNode);=0A=
=0A=
    return [valueL, valueT];=0A=
  },=0A=
=0A=
  clone: function(source, target) {=0A=
    var options =3D Object.extend({=0A=
      setLeft:    true,=0A=
      setTop:     true,=0A=
      setWidth:   true,=0A=
      setHeight:  true,=0A=
      offsetTop:  0,=0A=
      offsetLeft: 0=0A=
    }, arguments[2] || {})=0A=
=0A=
    // find page position of source=0A=
    source =3D $(source);=0A=
    var p =3D Position.page(source);=0A=
=0A=
    // find coordinate system to use=0A=
    target =3D $(target);=0A=
    var delta =3D [0, 0];=0A=
    var parent =3D null;=0A=
    // delta [0,0] will do fine with position: fixed elements,=0A=
    // position:absolute needs offsetParent deltas=0A=
    if (Element.getStyle(target,'position') =3D=3D 'absolute') {=0A=
      parent =3D Position.offsetParent(target);=0A=
      delta =3D Position.page(parent);=0A=
    }=0A=
=0A=
    // correct by body offsets (fixes Safari)=0A=
    if (parent =3D=3D document.body) {=0A=
      delta[0] -=3D document.body.offsetLeft;=0A=
      delta[1] -=3D document.body.offsetTop;=0A=
    }=0A=
=0A=
    // set position=0A=
    if(options.setLeft)   target.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';=0A=
    if(options.setTop)    target.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';=0A=
    if(options.setWidth)  target.style.width =3D source.offsetWidth + =
'px';=0A=
    if(options.setHeight) target.style.height =3D source.offsetHeight + =
'px';=0A=
  },=0A=
=0A=
  absolutize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.style.position =3D=3D 'absolute') return;=0A=
    Position.prepare();=0A=
=0A=
    var offsets =3D Position.positionedOffset(element);=0A=
    var top     =3D offsets[1];=0A=
    var left    =3D offsets[0];=0A=
    var width   =3D element.clientWidth;=0A=
    var height  =3D element.clientHeight;=0A=
=0A=
    element._originalLeft   =3D left - parseFloat(element.style.left  || =
0);=0A=
    element._originalTop    =3D top  - parseFloat(element.style.top || =
0);=0A=
    element._originalWidth  =3D element.style.width;=0A=
    element._originalHeight =3D element.style.height;=0A=
=0A=
    element.style.position =3D 'absolute';=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.width  =3D width + 'px';=0A=
    element.style.height =3D height + 'px';=0A=
  },=0A=
=0A=
  relativize: function(element) {=0A=
    element =3D $(element);=0A=
    if (element.style.position =3D=3D 'relative') return;=0A=
    Position.prepare();=0A=
=0A=
    element.style.position =3D 'relative';=0A=
    var top  =3D parseFloat(element.style.top  || 0) - =
(element._originalTop || 0);=0A=
    var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);=0A=
=0A=
    element.style.top    =3D top + 'px';=0A=
    element.style.left   =3D left + 'px';=0A=
    element.style.height =3D element._originalHeight;=0A=
    element.style.width  =3D element._originalWidth;=0A=
  }=0A=
}=0A=
=0A=
// Safari returns margins on body which is incorrect if the child is =
absolutely=0A=
// positioned.  For performance reasons, redefine =
Position.cumulativeOffset for=0A=
// KHTML/WebKit only.=0A=
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {=0A=
  Position.cumulativeOffset =3D function(element) {=0A=
    var valueT =3D 0, valueL =3D 0;=0A=
    do {=0A=
      valueT +=3D element.offsetTop  || 0;=0A=
      valueL +=3D element.offsetLeft || 0;=0A=
      if (element.offsetParent =3D=3D document.body)=0A=
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;=0A=
=0A=
      element =3D element.offsetParent;=0A=
    } while (element);=0A=
=0A=
    return [valueL, valueT];=0A=
  }=0A=
}=0A=
=0A=
Element.addMethods();
------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/global.js?14

function toggleLayer(whichLayer)
{
	if (document.getElementById)
	{
		// this is the way the standards work
		var style2 =3D document.getElementById(whichLayer).style;
		style2.display =3D style2.display? "":"block";
	}
	else if (document.all)
	{
		// this is the way old msie versions work
		var style2 =3D document.all[whichLayer].style;
		style2.display =3D style2.display? "":"block";
	}
	else if (document.layers)
	{
		// this is the way nn4 works
		var style2 =3D document.layers[whichLayer].style;
		style2.display =3D style2.display? "":"block";
	}
}

function popUp(URL,WIDTH,HEIGHT) {
	day =3D new Date();
	id =3D day.getTime();
	eval("page" + id + " =3D window.open(URL, '" + id + "', =
'toolbar=3D0,scrollbars=3D1,location=3D0,statusbar=3D1,menubar=3D0,resiza=
ble=3D1,width=3D" + WIDTH + ",height=3D" + HEIGHT + "');");
}

function successNotification(ID) {
	new Effect.Highlight(ID, {duration: 1, startcolor: '#ffff99', endcolor: =
'#e7fbe7', restorecolor: '#e7fbe7'});
}
function failureNotification(ID) {
	new Effect.Highlight(ID, {duration: 1, startcolor: '#ff0000', endcolor: =
'#cc0000', restorecolor: '#cc0000'});
}

// used for the 'X Close' button on Add/Edit story success
function slideClosed(ID) {
	new Effect.toggle(ID,'appear', {duration: 1});
}

// used for the 'What does this page do?' tabs
function tabSlide(ID) {
	new Effect.toggle(ID,'slide', {duration: .5});
}
// first used for 'add batch tags' in new photo manager
function fadeIt(ID) {
	new Effect.Appear(ID);
}
// change from one background color to another, permandently
function highlightIt(ID,start,end) {
	new =
Effect.Highlight(ID,{startcolor:start,endcolor:end,restorecolor:end});
}

// This is used for content swapping. Originally setup by Matt C.
function displayBlocks() {
  allNodes =3D document.getElementsByClassName("cp_ajax");
  for(i =3D 0; i < allNodes.length; i++) {
      var url =3D allNodes[i].href;
      allNodes[i].style.display =3D 'none';
      var myAjax =3D new Ajax.Request (url,{method: 'get', onComplete: =
showResponse});
  }
}
function showResponse(originalRequest) {
  for(i =3D 0; i < allNodes.length; i++) {
    $(allNodes[i].title).innerHTML =3D originalRequest.responseText;
  }
}

// Grabs html for tooltips.
function getTooltipText(id) {
	lasttooltipevent =3D 'mouseover';
		var tooltipLocation =3D '/other/tooltips/?q=3D' + id;
		//var tooltipLocation =3D 'media/sample.xml';
		xmlhttp.open("GET",tooltipLocation,true);
		xmlhttp.onreadystatechange=3Dfunction()	{
	 		if (xmlhttp.readyState=3D=3D4) {
			 	if (lasttooltipevent=3D=3D'mouseover') {
				  	var response =3D xmlhttp.responseText;
					overlib(response, STICKY, CAPTION,'just ignore this but keep =
it',CLOSECLICK, ABOVE, RIGHT, OFFSETY, -15, OFFSETX, 19);
				}
	 		}
		}
	xmlhttp.send(null);
}

/*var lasttooltipevent =3D '';*/
/*
 We remember the last tool tip event (Mouseout, mouseover) when deciding =
to open the bubble info.
*/
function closeToolTip(id) {
	lasttooltipevent =3D 'mouseout';
	cClick();
}

// Create Ajax Popup Login Box
function popup(url,ie5url,width,height) {
  // if a "closeable" boolean is passed, track it. It is the 4th item on =
the index of arguments.
  if (arguments.length =3D=3D 5) {
   closeable =3D arguments[4];
  } else {
   closeable =3D 0;
  }
  if (closeable =3D=3D 1) {
	url =3D url + '&closeable=3D1';
  }
  if ((navigator.userAgent.indexOf("MSIE")!=3D-1) && =
(navigator.userAgent.indexOf("Mac")!=3D-1)) {
    document.location.href =3D ie5url;  =20
  } else {
    var win =3D new Dialog.alert({url: url, options: {method: 'get'}}, =
{windowParameters: {className: "popup", width: width, height: height, =
zindex: 1500}, okLabel: "x", buttonClass: "hideClose"});
    // To prevent ugliness, we hide all object tags (flash movies)
    document.getElementsByTagName("object").className =3D "hide";
    document.getElementsByTagName("embed").className =3D "hide";
  }
}

// Create Ajax Popup Login Box
function popup_new(url,ie5url,width,height) {
/*
  // if a "closeable" boolean is passed, track it. It is the 4th item on =
the index of arguments.
  if (arguments.length =3D=3D 5) {
	  closeable =3D arguments[4];
  }=20
  else {
	  closeable =3D 0;
  }
  if (closeable =3D=3D 1) {
	  url =3D url + '&closeable=3D1';
  }

  if ((navigator.userAgent.indexOf("MSIE")!=3D-1) && =
(navigator.userAgent.indexOf("Mac")!=3D-1)) {
    document.location.href =3D ie5url;  =20
  }=20
  else {
	// Windows with an URL as content
	// We want this to not be resizable or draggable so we set those to =
false
	// The dialog2 is the name of the class prefix for use in the style =
sheets
	// Title sets the title of the window (this can be blank for the login =
window)
	y2mcp_win2 =3D new Window('y2mcp_regdialog2', {
								  bottom:0, left:0, width:width, height:height,=20
								  resizable: false, closable: closeable, minimizable: false, =
maximizable: false, draggable: false,=20
								  url: url, showEffectOptions: {duration:0}, hideEffectOptions: =
{duration:0}})
	y2mcp_win2.setDestroyOnClose();
	// We now set the window to show center and set modal to true
	y2mcp_win2.showCenter(true);
  }
  */
}


function getCurrentDateTime(theFormat){
	//
	// returns a nice date/time string for the current timestamp, depending =
on what format you request
	// INPUT:	date format - REQUIREd
	// 			formats:
	//				1 - US short date (mm/dd/yyyy):		01/01/2006
	//				2 - long date: 						Monday, January 1, 2006
	//				3 - long date and time (12-hour): 	Monday, January 1, 2006 9:00 =
AM
	//				4 - time (12-hour): 				9:00 AM
	// OUTPUT:	formatted date/time string
	//
	// NOTES/CAVEATS/WARNINGS:
	//			This function works with a local time string (not GMT/UTC)
	//
	var theReturnVal =3D "";
	var today =3D new Date();
=09
	var arDays =3D new Array('Sunday','Monday','Tuesday','Wednesday',
	'Thursday','Friday','Saturday');

	var arFullMonths =3D new Array('January','February','March','April',
	=
'May','June','July','August','September','October','November','December')=
;

	var Year =3D today.getFullYear();
	var Month =3D leadingZero(today.getMonth()+1);
	var DayName =3D arDays[today.getDay()];
	var MonthFullName =3D arFullMonths[today.getMonth()];
	var Day =3D today.getDate();
	var DayLeading =3D leadingZero(today.getDate());
	var Hours =3D today.getHours();
	var ampm =3D "AM";
=09
	if (Hours =3D=3D 0) Hours =3D 12;
	if (Hours > 11)
		ampm =3D "PM";
	if (Hours > 12)
		Hours -=3D 12;
	var HoursLeading =3D leadingZero(Hours);
	var Minutes =3D leadingZero(today.getMinutes());
	var Seconds =3D leadingZero(today.getSeconds());

	switch(theFormat){
		case 1:
			theReturnVal =3D Month + '/' + Day + '/' + Year;
			break;

		case 2:
			theReturnVal =3D DayName + ', ' + MonthFullName + ' ' + Day + ', ' + =
Year;
			break;

		case 3:
			theReturnVal =3D DayName + ', ' + MonthFullName + ' ' + Day + ', ' + =
Year + ' ' + Hours + ':' + Minutes + ' ' + ampm;
			break;

		case 4:
			theReturnVal =3D Hours + ':' + Minutes + ' ' + ampm;
			break;

		default:
			theReturnVal =3D Month + '/' + Day + '/' + Year;
	}

	return theReturnVal;
}

function leadingZero(nr)
{
	if (nr < 10){=20
		nr =3D "0" + nr;
	}
	return nr;
}

function getCurrentIssue(theFormat) {
	// writes "Dayname Monthname DD, YYYY"
	// within div#cp_current_issue
	//
	// so if you're going to do some styling, use selectors as follows:
	//
	// #cp_current_issue .day {font-weight: bold;}
	//
	// 			formats:
	//				1 - US short date (mm/dd/yyyy):		01/01/2006
	//					spans:							.day/.month/.year
	//				2 - long date: 						Monday January 1, 2006
	//					spans:							.dayname .monthname .day, .year

	var openDiv =3D '<div id=3D"cp_current_issue">';
	var closeDiv =3D '</div>';
	var s =3D "/";
	var n =3D "&nbsp;"

	function writeSpan(className,whichVar) {
		var spanWrap =3D '<span class=3D"' + className + '">' + whichVar + =
'</span>';
		return spanWrap;
	}

	switch(theFormat) {
		case 1:=20
			thisIssue =3D writeSpan("day",currentissueday) + s + =
writeSpan("month",currentissuemonth) + s + =
writeSpan("year",currentissueyear);
			break;
		case 2:
			thisIssue =3D writeSpan("dayname",currentissuedayname) + n + =
writeSpan("monthname",currentissuemonthname) + n + =
writeSpan("day",currentissueday) + "," + n + =
writeSpan("year",currentissueyear);
			break;

		default:=20
			thisIssue =3D writeSpan("day",currentissueday) + s + =
writeSpan("month",currentissuemonth) + s + =
writeSpan("year",currentissueyear);
	}

	thisIssue =3D openDiv + thisIssue + closeDiv
	return thisIssue;
}

/*
pullquote function by Roger Johansson, http://www.456bereastreet.com/
*/
var cp_pullquote =3D {
	init : function() {
	// Check that the browser supports the methods used
		if (!document.getElementById || !document.createElement || =
!document.appendChild) return false;
		var oElement, ocp_pullquote, ocp_pullquoteP, oQuoteContent, i, j;
	// Find all span elements with a class name of cp_pullquote
		var arrElements =3D document.getElementsByTagName('span');
		var oRegExp =3D new RegExp("(^|\\s)cp_pullquote(\\s|$)");
		for (i=3D0; i<arrElements.length; i++) {
	// Save the current element
			oElement =3D arrElements[i];
			if (oRegExp.test(oElement.className)) {
	// Create the blockquote and p elements
				ocp_pullquote =3D document.createElement('blockquote');
				ocp_pullquote.className =3D oElement.className
				ocp_pullquoteP =3D document.createElement('p');
	// Insert the cp_pullquote text
				for(j=3D0;j<oElement.childNodes.length;j++) {
					ocp_pullquoteP.appendChild(oElement.childNodes[j].cloneNode(true));
				}
				ocp_pullquote.appendChild(ocp_pullquoteP);
	// Insert the blockquote element before the span elements parent =
element
				=
oElement.parentNode.parentNode.insertBefore(ocp_pullquote,oElement.parent=
Node);
			}
		}
	}
};

// addEvent function from =
http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
function addEvent(obj, type, fn) {
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] =3D fn;
		obj[type+fn] =3D function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}
addEvent(window, 'load', cp_pullquote.init);

// CSS Browser Selector   v0.2.5
// Documentation:         http://rafael.adm.br/css_browser_selector
// License:               http://creativecommons.org/licenses/by/2.5/
// Author:                Rafael Lima (http://rafael.adm.br)
// Contributors:          =
http://rafael.adm.br/css_browser_selector#contributors
var css_browser_selector =3D function() {
	var=20
		ua=3Dnavigator.userAgent.toLowerCase(),
		is=3Dfunction(t){ return ua.indexOf(t) !=3D -1; },
		h=3Ddocument.getElementsByTagName('html')[0],
		b=3D(!(/opera|webtv/i.test(ua))&&/msie (\d)/.test(ua))?('ie =
ie'+RegExp.$1):is('gecko/')? 'gecko':is('opera/9')?'opera opera9':/opera =
(\d)/.test(ua)?'opera =
opera'+RegExp.$1:is('konqueror')?'konqueror':is('applewebkit/')?'webkit =
safari':is('mozilla/')?'gecko':'',
		os=3D(is('x11')||is('linux'))?' linux':is('mac')?' mac':is('win')?' =
win':'';
	var c=3Db+os+' js';
	h.className +=3D h.className?' '+c:c;
}();

// Add event to page load =
http://simonwillison.net/2004/May/26/addLoadEvent/
function addLoadEvent(func) {
  var oldonload =3D window.onload;
  if (typeof window.onload !=3D 'function') {
    window.onload =3D func;
  } else {
    window.onload =3D function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

function addClass(elem,name) {
	return elem.addClassName(name);
}

function disableSubmitOnClick() {
	var xyz =3D $('submit');
	xyz.onclick =3D buildADiv;
}

function buildADiv() {
	var width =3D $('cp_form').getWidth();
	var height =3D $('cp_form').getHeight();
	var div =3D document.createElement('div');
	div.className =3D "disabledBox";
	div.style.width =3D width;
	div.style.height =3D height;
	$('cp_form').appendChild(div);
}

// Sets other text field input values with the class whatClass to be the =
same as that of elemWithValue=20
function =
setAllElementsValues(elemWithText,elemWithValue,whatTextClass,whatValueCl=
ass) {
	var textField =3D $(elemWithText).value;
	var hiddenID =3D $(elemWithValue).value;
	var fieldGroup =3D document.getElementsByTagName("input");=20
	for (var i=3D0; i < fieldGroup.length; i++) {
		if (fieldGroup[i].hasClassName(whatTextClass)) {
			fieldGroup[i].value =3D textField;
		};
		if (fieldGroup[i].hasClassName(whatValueClass)) {
			fieldGroup[i].value =3D hiddenID;
		};
	};
};
------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/network_channel.js

// Search Engine Submit
function sesubmit() {
	a =3D document.cpsearch;				=09

	document.cpsearch.submit();
=09
}

function showhide_search(){
		=09
		var cptoggle =3D =
document.getElementById('net_search_choose_options').className;

		if (cptoggle =3D=3D 'show'){
			=
document.getElementById('net_search_choose_options').className=3D"hide";
			=
document.getElementById('net_search_choose_link').className=3D"unselected=
";
		}
		else{
			=
document.getElementById('net_search_choose_options').className=3D"show";
			=
document.getElementById('net_search_choose_link').className=3D"selected";=

			document.getElementById('net_cp_nav_list').className=3D"hide";
			document.getElementById('net_cp_a').className=3D"unselected";
		}
}

function showhide_links(){
		var cptoggle =3D document.getElementById('net_cp_nav_list').className;

		if (cptoggle =3D=3D 'show'){
			document.getElementById('net_cp_nav_list').className=3D"hide";
			document.getElementById('net_cp_a').className=3D"unselected";
		}
		else{
			document.getElementById('net_cp_nav_list').className=3D"show";
			document.getElementById('net_cp_a').className=3D"selected";
			=
document.getElementById('net_search_choose_options').className=3D"hide";
			=
document.getElementById('net_search_choose_link').className=3D"unselected=
";
		}
}

function change_search_this() {

		var a =3D document.cpsearch;=09
	=09
		=
document.getElementById('net_search_choose_options').className=3D"hide";
		=
document.getElementById('net_search_choose_link').className=3D"unselected=
";
	=09
		a.action=3D'/home/index.cfm';
}

function change_search_google() {
=09
		var a =3D document.cpsearch;
	=09
		=
document.getElementById('net_search_choose_options').className=3D"hide";
		=
document.getElementById('net_search_choose_link').className=3D"unselected=
";
	=09
		a.action=3D'http://www.google.com/custom';
}
------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: 7bit
Content-Location: http://media.collegepublisher.com/media/scripts/event_listener.js

function addLoadListener(fn)
{
	if (typeof window.addEventListener != 'undefined')
	{
		window.addEventListener('load', fn, false);
	}
	else if (typeof document.addEventListener != 'undefined')
	{
		document.addEventListener('load', fn, false);
	}
	else if (typeof window.attachEvent != 'undefined')
	{
		window.attachEvent('onload', fn);
	}
	else
	{
		return false;
	}
	
	return true;
};




function attachEventListener(target, eventType, functionRef, capture)
{
    if (typeof target.addEventListener != "undefined")
    {
        target.addEventListener(eventType, functionRef, capture);
    }
    else if (typeof target.attachEvent != "undefined")
    {
        target.attachEvent("on" + eventType, functionRef);
    }
    else
    {
        return false;
    }

    return true;
};
------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/resolution.js

checkBrowserWidth();

attachEventListener(window, "resize", checkBrowserWidth, false);




function checkBrowserWidth()
{
	var theWidth =3D getBrowserWidth();
=09
	if (theWidth =3D=3D 0)
	{
		var resolutionCookie =3D =
document.cookie.match(/(^|;)tmib_res_layout[^;]*(;|$)/);

		if (resolutionCookie !=3D null)
		{
			setStylesheet(unescape(resolutionCookie[0].split("=3D")[1]));
		}
	=09
		addLoadListener(checkBrowserWidth);
	=09
		return false;
	}

	if (theWidth < 990)
	{
		setStylesheet("1024 x 768");
		document.cookie =3D "tmib_res_layout=3D" + escape("1024 x 768");
	}
	else
	{
		setStylesheet("");
		document.cookie =3D "tmib_res_layout=3D";
	}
=09
	return true;
};




function getBrowserWidth()
{
	if (window.innerWidth)
	{
		return window.innerWidth;
	}
	else if (document.documentElement && =
document.documentElement.clientWidth !=3D 0)
	{
		return document.documentElement.clientWidth;
	}
	else if (document.body)
	{
		return document.body.clientWidth;
	}
=09
	return 0;
};




function setStylesheet(styleTitle)
{
	var currTag;

	if (document.getElementsByTagName)
	{
		for (var i =3D 0; (currTag =3D =
document.getElementsByTagName("link")[i]); i++)
		{
			if (currTag.getAttribute("rel").indexOf("style") !=3D -1 && =
currTag.getAttribute("title"))
			{
				currTag.disabled =3D true;

				if(currTag.getAttribute("title") =3D=3D styleTitle)
				{
					currTag.disabled =3D false;
				}
			}
		}
	}
=09
	return true;
};
------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/scriptaculous.js

// script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007=0A=
=0A=
// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, =
http://mir.aculo.us)=0A=
// =0A=
// Permission is hereby granted, free of charge, to any person obtaining=0A=
// a copy of this software and associated documentation files (the=0A=
// "Software"), to deal in the Software without restriction, including=0A=
// without limitation the rights to use, copy, modify, merge, publish,=0A=
// distribute, sublicense, and/or sell copies of the Software, and to=0A=
// permit persons to whom the Software is furnished to do so, subject to=0A=
// the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be=0A=
// included in all copies or substantial portions of the Software.=0A=
//=0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A=
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A=
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A=
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A=
//=0A=
// For details, see the script.aculo.us web site: http://script.aculo.us/=0A=
=0A=
var Scriptaculous =3D {=0A=
  Version: '1.7.0',=0A=
  require: function(libraryName) {=0A=
    // inserting via DOM fails in Safari 2.0, so brute force approach=0A=
    document.write('<script type=3D"text/javascript" =
src=3D"'+libraryName+'"></script>');=0A=
  },=0A=
  load: function() {=0A=
    if((typeof Prototype=3D=3D'undefined') || =0A=
       (typeof Element =3D=3D 'undefined') || =0A=
       (typeof Element.Methods=3D=3D'undefined') ||=0A=
       parseFloat(Prototype.Version.split(".")[0] + "." +=0A=
                  Prototype.Version.split(".")[1]) < 1.5)=0A=
       throw("script.aculo.us requires the Prototype JavaScript =
framework >=3D 1.5.0");=0A=
    =0A=
    $A(document.getElementsByTagName("script")).findAll( function(s) {=0A=
      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))=0A=
    }).each( function(s) {=0A=
      var path =3D s.src.replace(/scriptaculous\.js(\?.*)?$/,'');=0A=
      var includes =3D s.src.match(/\?.*load=3D([a-z,]*)/);=0A=
      (includes ? includes[1] : =
'builder,effects,dragdrop,controls,slider').split(',').each(=0A=
       function(include) { Scriptaculous.require(path+include+'.js') });=0A=
    });=0A=
  }=0A=
}=0A=
=0A=
Scriptaculous.load();
------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/window.js

// Copyright (c) 2006 S=C3=A9bastien Gruhier (http://xilinus.com, =
http://itseb.com)=0A=
// =0A=
// Permission is hereby granted, free of charge, to any person obtaining=0A=
// a copy of this software and associated documentation files (the=0A=
// "Software"), to deal in the Software without restriction, including=0A=
// without limitation the rights to use, copy, modify, merge, publish,=0A=
// distribute, sublicense, and/or sell copies of the Software, and to=0A=
// permit persons to whom the Software is furnished to do so, subject to=0A=
// the following conditions:=0A=
// =0A=
// The above copyright notice and this permission notice shall be=0A=
// included in all copies or substantial portions of the Software.=0A=
//=0A=
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,=0A=
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF=0A=
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND=0A=
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE=0A=
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION=0A=
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION=0A=
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.=0A=
//=0A=
// VERSION 0.96.2=0A=
=0A=
var Window =3D Class.create();=0A=
Window.prototype =3D {=0A=
	// Constructor=0A=
	// Available parameters : className, title, minWidth, minHeight, =
maxWidth, maxHeight, width, height, top, left, bottom, right, resizable, =
zIndex, opacity, =0A=
	//                        hideEffect, showEffect, showEffectOptions, =
hideEffectOptions, effectOptions, url, draggable, closable, minimizable, =
maximizable, parent, onload=0A=
	initialize: function(id) {=0A=
	  if ($(id))=0A=
	    alert("Window " + id + " is already register is the DOM!!, be sure =
to use setDestroyOnClose()")=0A=
	    =0A=
		this.hasEffectLib =3D String.prototype.parseColor !=3D null;=0A=
		this.options =3D Object.extend({=0A=
		  className:         "dialog",=0A=
      minWidth:          100,=0A=
      minHeight:         20,=0A=
      resizable:         true,=0A=
      closable:          true,=0A=
      minimizable:       true,=0A=
      maximizable:       true,=0A=
      draggable:         true,=0A=
      userData:          null,=0A=
      showEffect:        (this.hasEffectLib ? Effect.Appear : =
Element.show),=0A=
      hideEffect:        (this.hasEffectLib ? Effect.Fade : =
Element.hide),=0A=
      showEffectOptions: {},=0A=
      hideEffectOptions: {},=0A=
      effectOptions:     null,=0A=
      parent:            document.getElementsByTagName("body").item(0),=0A=
      title:             "&nbsp;",=0A=
      url:               null,=0A=
      onload:            Prototype.emptyFunction,=0A=
      width:             200,=0A=
      height:            300,=0A=
      opacity:           1=0A=
    }, arguments[1] || {});=0A=
    		=0A=
	  if (this.options.effectOptions) {=0A=
	    Object.extend(this.options.hideEffectOptions, =
this.options.effectOptions);=0A=
	    Object.extend(this.options.showEffectOptions, =
this.options.effectOptions);=0A=
	  }=0A=
		if (this.options.hideEffect =3D=3D Element.hide)=0A=
		  this.options.hideEffect =3D function(){ Element.hide(this.element); =
if (this.destroyOnClose) this.destroy(); }.bind(this)=0A=
		  =0A=
		this.element =3D this._createWindow(id);=0A=
		=0A=
		// Bind event listener=0A=
    this.eventMouseDown =3D this._initDrag.bindAsEventListener(this);=0A=
  	this.eventMouseUp   =3D this._endDrag.bindAsEventListener(this);=0A=
  	this.eventMouseMove =3D this._updateDrag.bindAsEventListener(this);=0A=
  	this.eventKeyPress  =3D this._keyPress.bindAsEventListener(this);=0A=
  	this.eventOnLoad    =3D =
this._getWindowBorderSize.bindAsEventListener(this);=0A=
    this.eventMouseDownContent =3D =
this.toFront.bindAsEventListener(this);=0A=
    this.eventResize =3D this._recenter.bindAsEventListener(this);=0A=
 =0A=
		this.topbar =3D $(this.element.id + "_top");=0A=
		this.bottombar =3D $(this.element.id + "_bottom");=0A=
    this.content =3D $(this.element.id + "_content");=0A=
    =0A=
		Event.observe(this.topbar, "mousedown", this.eventMouseDown);=0A=
		Event.observe(this.bottombar, "mousedown", this.eventMouseDown);=0A=
		Event.observe(this.content, "mousedown", this.eventMouseDownContent);=0A=
		Event.observe(window, "load", this.eventOnLoad);=0A=
		Event.observe(window, "resize", this.eventResize);=0A=
  	Event.observe(window, "scroll", this.eventResize);=0A=
  	=0A=
		if (this.options.draggable)  {=0A=
			this.bottombar.addClassName("bottom_draggable");=0A=
			this.topbar.addClassName("top_draggable");=0A=
    }		=0A=
    =0A=
		if (this.options.resizable) {=0A=
			this.sizer =3D $(this.element.id + "_sizer");=0A=
    	Event.observe(this.sizer, "mousedown", this.eventMouseDown);=0A=
    }	=0A=
    =0A=
    this.useLeft =3D null;=0A=
    this.useTop =3D null;=0A=
		if (arguments[1].left !=3D null) {=0A=
			this.element.setStyle({left: parseFloat(arguments[1].left) + 'px'});=0A=
			this.useLeft =3D true;=0A=
		}=0A=
		if (arguments[1].right !=3D null) {=0A=
			this.element.setStyle({right: parseFloat(arguments[1].right) + 'px'});=0A=
			this.useLeft =3D false;=0A=
		}=0A=
    if (this.useLeft =3D=3D null) {=0A=
	    this.element.setStyle({left: "0px"});=0A=
			this.useLeft =3D true;=0A=
    }=0A=
    =0A=
		if (arguments[1].top !=3D null) {=0A=
			this.element.setStyle({top: parseFloat(arguments[1].top) + 'px'});=0A=
			this.useTop =3D true;=0A=
		}=0A=
		if (arguments[1].bottom !=3D null) {=0A=
			this.element.setStyle({bottom: parseFloat(arguments[1].bottom) + =
'px'});			=0A=
			this.useTop =3D false;=0A=
		}=0A=
    if (this.useTop =3D=3D null) {=0A=
			this.element.setStyle({top: "0px"});=0A=
			this.useTop =3D true;=0A=
    }=0A=
=0A=
    this.storedLocation =3D null;=0A=
    =0A=
		this.setOpacity(this.options.opacity);=0A=
		if (this.options.zIndex)=0A=
			this.setZIndex(this.options.zIndex)=0A=
=0A=
		this.destroyOnClose =3D false;=0A=
=0A=
    this._getWindowBorderSize();=0A=
    this.width =3D this.options.width;=0A=
    this.height =3D this.options.height;=0A=
    =0A=
    if (this.width && this.height)=0A=
		  this.setSize(this.options.width, this.options.height);=0A=
		this.setTitle(this.options.title)=0A=
		Windows.register(this);	    =0A=
  },=0A=
  =0A=
	// Destructor=0A=
 	destroy: function() {=0A=
		Windows.notify("onDestroy", this);=0A=
		=0A=
  	Event.stopObserving(this.topbar, "mousedown", this.eventMouseDown);=0A=
  	Event.stopObserving(this.bottombar, "mousedown", this.eventMouseDown);=0A=
  	Event.stopObserving(this.content, "mousedown", =
this.eventMouseDownContent);=0A=
    =0A=
		Event.stopObserving(window, "load", this.eventOnLoad);=0A=
		Event.stopObserving(window, "resize", this.eventResize);=0A=
  	Event.stopObserving(window, "scroll", this.eventResize);=0A=
		=0A=
		Event.stopObserving(this.content, "load", this.options.onload);=0A=
=0A=
		if (this.sizer)=0A=
    		Event.stopObserving(this.sizer, "mousedown", this.eventMouseDown);=0A=
=0A=
		if (this.options.url)=0A=
		  this.content.src =3D null=0A=
=0A=
	 	if(this.iefix) =0A=
			Element.remove(this.iefix);=0A=
=0A=
    Element.remove(this.element);=0A=
		Windows.unregister(this);	    =0A=
	},=0A=
  	=0A=
	// Sets window deleagte, should have functions: "canClose(window)" =0A=
	setDelegate: function(delegate) {=0A=
		this.delegate =3D delegate=0A=
	},=0A=
	=0A=
	// Gets current window delegate=0A=
	getDelegate: function() {=0A=
		return this.delegate;=0A=
	},=0A=
	=0A=
	// Gets window content=0A=
	getContent: function () {=0A=
		return this.content;=0A=
	},=0A=
	=0A=
	// Sets the content with an element id=0A=
	setContent: function(id, autoresize, autoposition) {=0A=
		var d =3D null;=0A=
		var p =3D null;=0A=
=0A=
		if (autoresize) =0A=
			d =3D Element.getDimensions(id);=0A=
		if (autoposition) =0A=
			p =3D Position.cumulativeOffset($(id));=0A=
=0A=
		var content =3D this.getContent()=0A=
		content.appendChild($(id));=0A=
		$(id).show();=0A=
		if (autoresize) =0A=
			this.setSize(d.width, d.height);=0A=
		if (autoposition) =0A=
		  this.setLocation(p[1] - this.heightN, p[0] - this.widthW);	  =0A=
	},=0A=
	=0A=
	setAjaxContent: function(url, options, showCentered, showModal) {=0A=
	  this.showFunction =3D showCentered ? "showCenter" : "show";=0A=
	  this.showModal =3D showModal || false;=0A=
	=0A=
	  if (options =3D=3D null)=0A=
	    options =3D {}  =0A=
	  this.onComplete =3D options.onComplete;=0A=
	  options.onComplete =3D this._setAjaxContent.bind(this);=0A=
	  =0A=
	  new Ajax.Request(url, options);=0A=
	},=0A=
	=0A=
	_setAjaxContent: function(originalRequest) {=0A=
	  this.getContent().innerHTML =3D originalRequest.responseText;=0A=
	  if (this.onComplete)=0A=
	    this.onComplete(originalRequest);=0A=
	  this[this.showFunction](this.showModal)=0A=
	},=0A=
	=0A=
	// Stores position/size in a cookie, by default named with window id=0A=
	setCookie: function(name, expires, path, domain, secure) {=0A=
		name =3D name || this.element.id;=0A=
		this.cookie =3D [name, expires, path, domain, secure];=0A=
		=0A=
		// Get cookie=0A=
		var value =3D WindowUtilities.getCookie(name)=0A=
		// If exists=0A=
		if (value) {=0A=
			var values =3D value.split(',');=0A=
			var x =3D values[0].split(':');=0A=
			var y =3D values[1].split(':');=0A=
=0A=
			var w =3D parseFloat(values[2]), h =3D parseFloat(values[3]);=0A=
			var mini =3D values[4];=0A=
			var maxi =3D values[5];=0A=
=0A=
		  this.setSize(w, h);=0A=
			if (mini =3D=3D "true")=0A=
		    this.doMinimize =3D true; // Minimize will be done at onload =
window event=0A=
			else if (maxi =3D=3D "true")=0A=
			  this.doMaximize =3D true; // Maximize will be done at onload window =
event=0A=
=0A=
			this.useLeft =3D x[0] =3D=3D "l";=0A=
			this.useTop =3D y[0] =3D=3D "t";=0A=
=0A=
			this.element.setStyle(this.useLeft ? {left: x[1]} : {right: x[1]});=0A=
			this.element.setStyle(this.useTop ? {top: y[1]} : {bottom: y[1]});=0A=
		}=0A=
	},=0A=
	=0A=
	// Gets window ID=0A=
	getId: function() {=0A=
		return this.element.id;=0A=
	},=0A=
	=0A=
	// Detroys itself when closing =0A=
	setDestroyOnClose: function() {=0A=
	  Object.extend(this.options.hideEffectOptions, {afterFinish:  =
this.destroy.bind(this)});=0A=
		this.destroyOnClose =3D true;=0A=
	},=0A=
	=0A=
	// initDrag event=0A=
	_initDrag: function(event) {=0A=
    // Get pointer X,Y=0A=
  	this.pointer =3D [Event.pointerX(event), Event.pointerY(event)];=0A=
=0A=
    // Resize=0A=
		if (Event.element(event) =3D=3D this.sizer) {=0A=
			this.doResize =3D true;=0A=
    	this.widthOrg =3D this.width;=0A=
    	this.heightOrg =3D this.height;=0A=
    	this.bottomOrg =3D parseFloat(this.element.getStyle('bottom'));=0A=
    	this.rightOrg =3D parseFloat(this.element.getStyle('right'));=0A=
			Windows.notify("onStartResize", this);=0A=
		}=0A=
    else {=0A=
		  this.doResize =3D false;=0A=
=0A=
  		// Check if click on close button, =0A=
  		var closeButton =3D $(this.getId() + '_close');=0A=
  		if (closeButton && Position.within(closeButton, this.pointer[0], =
this.pointer[1])) =0A=
  			return;=0A=
=0A=
  		this.toFront();=0A=
=0A=
  		if (! this.options.draggable) =0A=
  		  return;=0A=
  		Windows.notify("onStartMove", this);=0A=
    }  	=0A=
  	// Register global event to capture mouseUp and mouseMove=0A=
  	Event.observe(document, "mouseup", this.eventMouseUp, false);=0A=
    Event.observe(document, "mousemove", this.eventMouseMove, false);=0A=
		=0A=
  	// Add an invisible div to keep catching mouse event over iframes=0A=
  	WindowUtilities.disableScreen('__invisible__', '__invisible__');=0A=
=0A=
    // Stop selection while dragging=0A=
    document.body.ondrag =3D function () { return false; };=0A=
    document.body.onselectstart =3D function () { return false; };=0A=
    =0A=
    Event.stop(event);=0A=
  },=0A=
=0A=
  // updateDrag event=0A=
	_updateDrag: function(event) {=0A=
   	var pointer =3D [Event.pointerX(event), Event.pointerY(event)];    =0A=
		var dx =3D pointer[0] - this.pointer[0];=0A=
		var dy =3D pointer[1] - this.pointer[1];=0A=
		=0A=
		// Resize case, update width/height=0A=
		if (this.doResize) {=0A=
			this.setSize(this.widthOrg + dx , this.heightOrg + dy);=0A=
			=0A=
      dx =3D this.width - this.widthOrg=0A=
      dy =3D this.height - this.heightOrg=0A=
			=0A=
		  // Check if it's a right position, update it to keep upper-left =
corner at the same position=0A=
			if (! this.useLeft) =0A=
				this.element.setStyle({right: (this.rightOrg -dx) + 'px'});=0A=
			// Check if it's a bottom position, update it to keep upper-left =
corner at the same position=0A=
			if (! this.useTop) =0A=
				this.element.setStyle({bottom: (this.bottomOrg -dy) + 'px'});=0A=
		}=0A=
		// Move case, update top/left=0A=
		else {=0A=
		  this.pointer =3D pointer;=0A=
  		=0A=
			if (this.useLeft) =0A=
				this.element.setStyle({left: =
parseFloat(this.element.getStyle('left')) + dx + 'px'});=0A=
			else =0A=
				this.element.setStyle({right: =
parseFloat(this.element.getStyle('right')) - dx + 'px'});=0A=
			=0A=
			if (this.useTop) =0A=
				this.element.setStyle({top: parseFloat(this.element.getStyle('top')) =
+ dy + 'px'});=0A=
		  else =0A=
				this.element.setStyle({bottom: =
parseFloat(this.element.getStyle('bottom')) - dy + 'px'});=0A=
		}=0A=
		if (this.iefix) =0A=
			this._fixIEOverlapping(); =0A=
			=0A=
		this._removeStoreLocation();=0A=
    Event.stop(event);=0A=
	},=0A=
=0A=
	 // endDrag callback=0A=
 	_endDrag: function(event) {=0A=
		// Remove temporary div over iframes=0A=
 	  WindowUtilities.enableScreen('__invisible__');=0A=
		=0A=
		if (this.doResize)=0A=
			Windows.notify("onEndResize", this);=0A=
		else=0A=
			Windows.notify("onEndMove", this);=0A=
		=0A=
		// Release event observing=0A=
		Event.stopObserving(document, "mouseup", this.eventMouseUp,false);=0A=
    Event.stopObserving(document, "mousemove", this.eventMouseMove, =
false);=0A=
=0A=
		// Store new location/size if need be=0A=
		this._saveCookie()=0A=
=0A=
    Event.stop(event);=0A=
    =0A=
    // Restore selection=0A=
    document.body.ondrag =3D null;=0A=
    document.body.onselectstart =3D null;=0A=
  },=0A=
=0A=
	_keyPress: function(event) {=0A=
		//Dialog.cancelCallback();=0A=
	},=0A=
	=0A=
	// Creates HTML window code=0A=
	_createWindow: function(id) {=0A=
	  var className =3D this.options.className;=0A=
		var win =3D document.createElement("div");=0A=
		win.setAttribute('id', id);=0A=
		win.className =3D "dialog";=0A=
=0A=
		var content;=0A=
		if (this.options.url)=0A=
			content=3D "<iframe name=3D\"" + id + "_content\"  id=3D\"" + id + =
"_content\" src=3D\"" + this.options.url + "\" scrolling=3D\"no\" =
frameborder=3D\"0\"> </iframe>";=0A=
		else=0A=
			content =3D"<div id=3D\"" + id + "_content\" class=3D\"" +className + =
"_content\"> </div>";=0A=
			=0A=
		var closeDiv =3D this.options.closable ? "<div class=3D'"+ className =
+"_close' id=3D'"+ id +"_close' onmouseup=3D'Windows.close(\""+ id =
+"\")'> </div>" : "";=0A=
		var minDiv =3D this.options.minimizable ? "<div class=3D'"+ className =
+ "_minimize' id=3D'"+ id +"_minimize' =
onmouseup=3D'Windows.minimize(\""+ id +"\")'> </div>" : "";=0A=
		var maxDiv =3D this.options.maximizable ? "<div class=3D'"+ className =
+ "_maximize' id=3D'"+ id +"_maximize' =
onmouseup=3D'Windows.maximize(\""+ id +"\")'> </div>" : "";=0A=
		var seAttributes =3D this.options.resizable ? "class=3D'" + className =
+ "_sizer' id=3D'" + id + "_sizer'" : "class=3D'"  + className + "_se'";=0A=
		=0A=
    win.innerHTML =3D closeDiv + minDiv + maxDiv + "\=0A=
      <table id=3D'"+ id +"_row1' class=3D\"top table_window\">\=0A=
        <tr>\=0A=
          <td class=3D'"+ className +"_nw'>&nbsp;</td>\=0A=
          <td class=3D'"+ className +"_n'><div id=3D'"+ id +"_top' =
class=3D'"+ className +"_title title_window'>"+ this.options.title =
+"</div></td>\=0A=
          <td class=3D'"+ className +"_ne'>&nbsp;</td>\=0A=
        </tr>\=0A=
      </table>\=0A=
      <table id=3D'"+ id +"_row2' class=3D\"mid table_window\">\=0A=
        <tr>\=0A=
          <td class=3D'"+ className +"_w'></td>\=0A=
            <td id=3D'"+ id +"_table_content' class=3D'"+ className =
+"_content' valign=3D'top'>"+ content +"</td>\=0A=
          <td class=3D'"+ className +"_e'></td>\=0A=
        </tr>\=0A=
      </table>\=0A=
        <table id=3D'"+ id +"_row3' class=3D\"bot table_window\">\=0A=
        <tr>\=0A=
          <td class=3D'"+ className +"_sw'>&nbsp;</td>\=0A=
            <td class=3D'"+ className +"_s'><div id=3D'"+ id +"_bottom' =
class=3D'status_bar'>&nbsp;</div></td>\=0A=
            <td " + seAttributes + ">&nbsp;</td>\=0A=
        </tr>\=0A=
      </table>\=0A=
    ";=0A=
    =0A=
		Element.hide(win);=0A=
		this.options.parent.insertBefore(win, this.options.parent.firstChild);=0A=
		Event.observe($(id + "_content"), "load", this.options.onload);=0A=
		return win;=0A=
	},=0A=
	=0A=
	// Sets window location=0A=
	setLocation: function(top, left) {=0A=
	  if (top < 0)=0A=
	    top =3D 0;=0A=
    if (left < 0)=0A=
      left=3D 0=0A=
		this.element.setStyle({top: top + 'px'});=0A=
		this.element.setStyle({left: left + 'px'});=0A=
		this.useLeft =3D true;=0A=
		this.useTop =3D true;=0A=
	},=0A=
		=0A=
	// Gets window size=0A=
	getSize: function() {=0A=
	  return {width: this.width, height: this.height};=0A=
	},=0A=
		=0A=
	// Sets window size=0A=
	setSize: function(width, height) {    =0A=
	  width =3D parseFloat(width);=0A=
	  height =3D parseFloat(height);=0A=
	  =0A=
		// Check min and max size=0A=
		if (width < this.options.minWidth)=0A=
			width =3D this.options.minWidth;=0A=
=0A=
		if (height < this.options.minHeight)=0A=
			height =3D this.options.minHeight;=0A=
			=0A=
		if (this.options. maxHeight && height > this.options. maxHeight)=0A=
			height =3D this.options. maxHeight;=0A=
=0A=
		if (this.options. maxWidth && width > this.options. maxWidth)=0A=
			width =3D this.options. maxWidth;=0A=
=0A=
  	this.width =3D width;=0A=
		this.height =3D height;=0A=
		this.element.setStyle({width: width + this.widthW + this.widthE + =
"px"})=0A=
		this.element.setStyle({height: height  + this.heightN + this.heightS + =
"px"})=0A=
=0A=
		// Update content height=0A=
		var content =3D $(this.element.id + '_content')=0A=
		content.setStyle({height: height  + 'px'});=0A=
		content.setStyle({width: width  + 'px'});=0A=
	},=0A=
	=0A=
	updateHeight: function() {=0A=
    this.setSize(this.width, this.content.scrollHeight)=0A=
	},=0A=
	=0A=
	updateWidth: function() {=0A=
    this.setSize(this.content.scrollWidth, this.height)=0A=
	},=0A=
	=0A=
	// Brings window to front=0A=
	toFront: function() {=0A=
    this.setZIndex(Windows.maxZIndex + 20);=0A=
    Windows.notify("onFocus", this);=0A=
	},=0A=
	=0A=
	// Displays window modal state or not=0A=
	show: function(modal) {=0A=
		if (modal) {=0A=
			WindowUtilities.disableScreen(this.options.className, =
'overlay_modal', this.getId());=0A=
			this.modal =3D true;			=0A=
			this.setZIndex(Windows.maxZIndex + 20);=0A=
			Windows.unsetOverflow(this);=0A=
			Event.observe(document, "keypress", this.eventKeyPress);	      	=0A=
		}=0A=
		=0A=
		// To restore overflow if need be=0A=
		if (this.oldStyle)=0A=
		  this.getContent().setStyle({overflow: this.oldStyle});=0A=
			=0A=
		if (! this.width || !this.height) {=0A=
      var size =3D WindowUtilities._computeSize(this.content.innerHTML, =
this.content.id, this.width, this.height, 0)=0A=
  		if (this.height)=0A=
  		  this.width =3D size + 5=0A=
		  else=0A=
		    this.height =3D size + 5=0A=
		}=0A=
=0A=
		this.setSize(this.width, this.height);=0A=
		if (this.centered)=0A=
		  this._center(this.centerTop, this.centerLeft);		=0A=
		  =0A=
		if (this.options.showEffect !=3D Element.show && =
this.options.showEffectOptions )=0A=
			this.options.showEffect(this.element, =
this.options.showEffectOptions);	=0A=
		else=0A=
			this.options.showEffect(this.element);	=0A=
			=0A=
    this._checkIEOverlapping();=0A=
    Windows.notify("onShow", this);    =0A=
	},=0A=
	=0A=
	// Displays window modal state or not at the center of the page=0A=
	showCenter: function(modal, top, left) {=0A=
    this.centered =3D true;=0A=
    this.centerTop =3D top;=0A=
    this.centerLeft =3D left;=0A=
=0A=
		this.show(modal);=0A=
	},=0A=
	=0A=
	isVisible: function() {=0A=
	  return this.element.visible();=0A=
	},=0A=
	=0A=
	_center: function(top, left) {=0A=
		var windowScroll =3D WindowUtilities.getWindowScroll();    =0A=
		var pageSize =3D WindowUtilities.getPageSize();    =0A=
=0A=
    if (!top)=0A=
      top =3D (pageSize.windowHeight - (this.height + this.heightN + =
this.heightS))/2;=0A=
    top +=3D windowScroll.top=0A=
    =0A=
    if (!left)=0A=
      left =3D (pageSize.windowWidth - (this.width + this.widthW + =
this.widthE))/2;=0A=
    left +=3D windowScroll.left =0A=
    =0A=
    this.setLocation(top, left);=0A=
    this.toFront();=0A=
	},=0A=
	=0A=
	_recenter: function(event) {=0A=
	  if (this.modal) {=0A=
  		var pageSize =3D WindowUtilities.getPageSize();=0A=
  		// set height of Overlay to take up whole page and show=0A=
  		if ($('overlay_modal')) {=0A=
  		  $('overlay_modal').style.height =3D (pageSize.pageHeight + 'px');=0A=
  		  $('overlay_modal').style.width =3D (pageSize.pageWidth + 'px');=0A=
      }		=0A=
  		if (this.centered)=0A=
  		  this._center(this.centerTop, this.centerLeft);		=0A=
	  }=0A=
	},=0A=
	=0A=
	// Hides window=0A=
	hide: function() {=0A=
		if (this.modal) {=0A=
			WindowUtilities.enableScreen();=0A=
			Windows.resetOverflow();=0A=
			Event.stopObserving(document, "keypress", this.eventKeyPress);			=0A=
		}=0A=
		// To avoid bug on scrolling bar=0A=
	  this.oldStyle =3D this.getContent().getStyle('overflow') || "auto"=0A=
		this.getContent().setStyle({overflow: "hidden"});=0A=
=0A=
		this.options.hideEffect(this.element, this.options.hideEffectOptions);	=0A=
=0A=
	 	if(this.iefix) =0A=
			this.iefix.hide();=0A=
		Windows.notify("onHide", this);=0A=
	},=0A=
=0A=
  minimize: function() {=0A=
    var r2 =3D $(this.getId() + "_row2");=0A=
    var dh =3D r2.getDimensions().height;=0A=
    =0A=
    if (r2.visible()) {=0A=
      var h  =3D this.element.getHeight() - dh=0A=
      r2.hide()=0A=
  		this.element.setStyle({height: h + "px"})=0A=
  		if (! this.useTop) {=0A=
  		  var bottom =3D parseFloat(this.element.getStyle('bottom'));=0A=
			  this.element.setStyle({bottom: (bottom + dh) + 'px'});=0A=
		  }=0A=
    } =0A=
    else {=0A=
      var h  =3D this.element.getHeight() + dh;=0A=
      this.element.setStyle({height: h + "px"})=0A=
  		if (! this.useTop) {=0A=
  		  var bottom =3D parseFloat(this.element.getStyle('bottom'));=0A=
			  this.element.setStyle({bottom: (bottom - dh) + 'px'});=0A=
		  }=0A=
      r2.show();=0A=
  		=0A=
      this.toFront();=0A=
    }=0A=
    Windows.notify("onMinimize", this);=0A=
		=0A=
    // Store new location/size if need be=0A=
		this._saveCookie()=0A=
  },=0A=
  =0A=
  maximize: function() {=0A=
    if (this.storedLocation !=3D null) {=0A=
      this._restoreLocation();=0A=
      if(this.iefix) =0A=
  			this.iefix.hide();=0A=
    }=0A=
    else {=0A=
      this._storeLocation();=0A=
      Windows.unsetOverflow(this);=0A=
      =0A=
      var windowScroll =3D WindowUtilities.getWindowScroll();=0A=
  		var pageSize =3D WindowUtilities.getPageSize();    =0A=
=0A=
			this.element.setStyle(this.useLeft ? {left: windowScroll.left} : =
{right: windowScroll.left});=0A=
  		this.element.setStyle(this.useTop ? {top: windowScroll.top} : =
{bottom: windowScroll.top});=0A=
=0A=
      this.setSize(pageSize.windowWidth - this.widthW - this.widthE, =
pageSize.windowHeight - this.heightN - this.heightS)=0A=
      this.toFront();=0A=
      if (this.iefix) =0A=
  			this._fixIEOverlapping(); =0A=
    }=0A=
		Windows.notify("onMaximize", this);=0A=
=0A=
		// Store new location/size if need be=0A=
		this._saveCookie()=0A=
  },=0A=
  =0A=
  isMinimized: function() {=0A=
    var r2 =3D $(this.getId() + "_row2");=0A=
    return !r2.visible();=0A=
  },=0A=
  =0A=
  isMaximized: function() {=0A=
    return (this.storedLocation !=3D null);=0A=
  },=0A=
  =0A=
	setOpacity: function(opacity) {=0A=
		if (Element.setOpacity)=0A=
			Element.setOpacity(this.element, opacity);=0A=
	},=0A=
	=0A=
	setZIndex: function(zindex) {=0A=
		this.element.setStyle({zIndex: zindex});=0A=
		Windows.updateZindex(zindex, this);=0A=
	},=0A=
=0A=
  setTitle: function(newTitle) {=0A=
  	if (!newTitle || newTitle =3D=3D "") =0A=
  	  newTitle =3D "&nbsp;";=0A=
  	  =0A=
  	Element.update(this.element.id + '_top', newTitle);=0A=
  },=0A=
=0A=
	setStatusBar: function(element) {=0A=
		var statusBar =3D $(this.getId() + "_bottom");=0A=
=0A=
    if (typeof(element) =3D=3D "object") {=0A=
      if (this.bottombar.firstChild)=0A=
        this.bottombar.replaceChild(element, this.bottombar.firstChild);=0A=
      else=0A=
        this.bottombar.appendChild(element);=0A=
    }=0A=
    else=0A=
		  this.bottombar.innerHTML =3D element;=0A=
	},=0A=
=0A=
	_checkIEOverlapping: function() {=0A=
    if(!this.iefix && (navigator.appVersion.indexOf('MSIE')>0) && =
(navigator.userAgent.indexOf('Opera')<0) && =
(this.element.getStyle('position')=3D=3D'absolute')) {=0A=
        new Insertion.After(this.element.id, '<iframe id=3D"' + =
this.element.id + '_iefix" '+ =
'style=3D"display:none;position:absolute;filter:progid:DXImageTransform.M=
icrosoft.Alpha(opacity=3D0);" ' + 'src=3D"javascript:false;" =
scrolling=3D"no" frameborder=3D"0" ></iframe>');=0A=
        this.iefix =3D $(this.element.id+'_iefix');=0A=
    }=0A=
    if(this.iefix) =0A=
			setTimeout(this._fixIEOverlapping.bind(this), 50);=0A=
	},=0A=
=0A=
	_fixIEOverlapping: function() {=0A=
	    Position.clone(this.element, this.iefix);=0A=
	    this.iefix.style.zIndex =3D this.element.style.zIndex - 1;=0A=
	    this.iefix.show();=0A=
	},=0A=
	=0A=
	_getWindowBorderSize: function(event) {=0A=
    // Hack to get real window border size!!=0A=
    var div =3D this._createHiddenDiv(this.options.className + "_n")=0A=
		this.heightN =3D Element.getDimensions(div).height;		=0A=
		div.parentNode.removeChild(div)=0A=
=0A=
    var div =3D this._createHiddenDiv(this.options.className + "_s")=0A=
		this.heightS =3D Element.getDimensions(div).height;		=0A=
		div.parentNode.removeChild(div)=0A=
=0A=
    var div =3D this._createHiddenDiv(this.options.className + "_e")=0A=
		this.widthE =3D Element.getDimensions(div).width;		=0A=
		div.parentNode.removeChild(div)=0A=
=0A=
    var div =3D this._createHiddenDiv(this.options.className + "_w")=0A=
		this.widthW =3D Element.getDimensions(div).width;=0A=
		div.parentNode.removeChild(div);=0A=
		// Safari size fix=0A=
		if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))=0A=
		  this.setSize(this.width, this.height);=0A=
		if (this.doMaximize)=0A=
		  this.maximize();=0A=
		if (this.doMinimize)=0A=
		  this.minimize();=0A=
  },=0A=
 =0A=
  _createHiddenDiv: function(className) {=0A=
    var objBody =3D document.getElementsByTagName("body").item(0);=0A=
    var win =3D document.createElement("div");=0A=
		win.setAttribute('id', this.element.id+ "_tmp");=0A=
		win.className =3D className;=0A=
		win.style.display =3D 'none'=0A=
		win.innerHTML =3D ''=0A=
		objBody.insertBefore(win, objBody.firstChild)   =0A=
		return win=0A=
  },=0A=
  =0A=
	_storeLocation: function() {=0A=
	  if (this.storedLocation =3D=3D null) {=0A=
	    this.storedLocation =3D {useTop: this.useTop, useLeft: =
this.useLeft, =0A=
	                           top: this.element.getStyle('top'), bottom: =
this.element.getStyle('bottom'),=0A=
	                           left: this.element.getStyle('left'), right: =
this.element.getStyle('right'),=0A=
	                           width: this.width, height: this.height };=0A=
	  }=0A=
	},=0A=
	=0A=
  _restoreLocation: function() {=0A=
    if (this.storedLocation !=3D null) {=0A=
      this.useLeft =3D this.storedLocation.useLeft;=0A=
      this.useTop =3D this.storedLocation.useTop;=0A=
      =0A=
      this.element.setStyle(this.useLeft ? {left: =
this.storedLocation.left} : {right: this.storedLocation.right});=0A=
  		this.element.setStyle(this.useTop ? {top: this.storedLocation.top} : =
{bottom: this.storedLocation.bottom});=0A=
		  this.setSize(this.storedLocation.width, this.storedLocation.height);=0A=
      =0A=
		  Windows.resetOverflow();=0A=
		  this._removeStoreLocation();=0A=
    }=0A=
  },=0A=
  =0A=
  _removeStoreLocation: function() {=0A=
    this.storedLocation =3D null;=0A=
  },=0A=
  =0A=
  _saveCookie: function() {=0A=
    if (this.cookie) {=0A=
  		var value =3D "";=0A=
  		if (this.useLeft)=0A=
  			value +=3D "l:" +  (this.storedLocation ? this.storedLocation.left =
: this.element.getStyle('left'))=0A=
  		else=0A=
  			value +=3D "r:" + (this.storedLocation ? this.storedLocation.right =
: this.element.getStyle('right'))=0A=
  		if (this.useTop)=0A=
  			value +=3D ",t:" + (this.storedLocation ? this.storedLocation.top : =
this.element.getStyle('top'))=0A=
  		else=0A=
  			value +=3D ",b:" + (this.storedLocation ? =
this.storedLocation.bottom :this.element.getStyle('bottom'))=0A=
  			=0A=
  		value +=3D "," + (this.storedLocation ? this.storedLocation.width : =
this.width);=0A=
  		value +=3D "," + (this.storedLocation ? this.storedLocation.height : =
this.height);=0A=
  		value +=3D "," + this.isMinimized();=0A=
  		value +=3D "," + this.isMaximized();=0A=
  		WindowUtilities.setCookie(value, this.cookie)=0A=
    }=0A=
  }=0A=
};=0A=
=0A=
// Windows containers, register all page windows=0A=
var Windows =3D {=0A=
  windows: [],=0A=
  observers: [],=0A=
  focusedWindow: null,=0A=
  maxZIndex: 0,=0A=
=0A=
  addObserver: function(observer) {=0A=
    this.removeObserver(observer);=0A=
    this.observers.push(observer);=0A=
  },=0A=
  =0A=
  removeObserver: function(observer) {  =0A=
    this.observers =3D this.observers.reject( function(o) { return =
o=3D=3Dobserver });=0A=
  },=0A=
  =0A=
  notify: function(eventName, win) {  //  onStartResize(), =
onEndResize(), onStartMove(), onEndMove(), onClose(), onDestroy(), =
onMinimize(), onMaximize(), onHide(), onShow(), onFocus()=0A=
    this.observers.each( function(o) {if(o[eventName]) =
o[eventName](eventName, win);});=0A=
  },=0A=
=0A=
  // Gets window from its id=0A=
  getWindow: function(id) {=0A=
	  return this.windows.detect(function(d) { return d.getId() =3D=3Did });=0A=
  },=0A=
=0A=
  // Gets the last focused window=0A=
  getFocusedWindow: function() {=0A=
	  return this.focusedWindow;=0A=
  },=0A=
=0A=
  // Registers a new window (called by Windows constructor)=0A=
  register: function(win) {=0A=
    this.windows.push(win);=0A=
  },=0A=
  =0A=
  // Unregisters a window (called by Windows destructor)=0A=
  unregister: function(win) {=0A=
    this.windows =3D this.windows.reject(function(d) { return d=3D=3Dwin =
});=0A=
  }, =0A=
=0A=
  // Closes a window with its id=0A=
  close: function(id) {=0A=
  	var win =3D this.getWindow(id);=0A=
  	// Asks delegate if exists=0A=
    if (win) {=0A=
	  	if (win.getDelegate() && ! win.getDelegate().canClose(win)) =0A=
	  		return;=0A=
	      if ($(id + "_close"))=0A=
	        $(id + "_close").onclick =3D null;=0A=
	      if ($(id + "_minimize"))=0A=
	        $(id + "_minimize").onclick =3D null;	        =0A=
	      if ($(id + "_maximize"))=0A=
	        $(id + "_maximize").onclick =3D null;	      =0A=
	      =0A=
  			this.notify("onClose", win);=0A=
  			win.hide();=0A=
  	}=0A=
  },=0A=
  =0A=
  // Closes all windows=0A=
  closeAll: function() {  =0A=
    this.windows.each( function(w) {Windows.close(w.getId())} );=0A=
  },=0A=
  =0A=
  // Minimizes a window with its id=0A=
  minimize: function(id) {=0A=
  	var win =3D this.getWindow(id)=0A=
  	if (win)=0A=
  	  win.minimize();=0A=
  },=0A=
  =0A=
  // Maximizes a window with its id=0A=
  maximize: function(id) {=0A=
  	var win =3D this.getWindow(id)=0A=
  	if (win)=0A=
  	  win.maximize();=0A=
  },=0A=
  =0A=
  unsetOverflow: function(except) {		=0A=
  	this.windows.each(function(d) { d.oldOverflow =3D =
d.getContent().getStyle("overflow") || "auto" ; =
d.getContent().setStyle({overflow: "hidden"}) });=0A=
  	if (except && except.oldOverflow)=0A=
  		except.getContent().setStyle({overflow: except.oldOverflow});=0A=
  },=0A=
=0A=
  resetOverflow: function() {=0A=
	  this.windows.each(function(d) { if (d.oldOverflow) =
d.getContent().setStyle({overflow: d.oldOverflow}) });=0A=
  },=0A=
=0A=
  updateZindex: function(zindex, win) {=0A=
  	if (zindex > this.maxZIndex)=0A=
  		this.maxZIndex =3D zindex;=0A=
    this.focusedWindow =3D win;=0A=
  }=0A=
};=0A=
=0A=
var Dialog =3D {=0A=
  dialogId: null,=0A=
 	win: null,=0A=
  onCompleteFunc: null,=0A=
  callFunc: null, =0A=
  parameters: null, =0A=
    =0A=
	confirm: function(content, parameters) {=0A=
	  // Get Ajax return before=0A=
	  if (typeof content !=3D "string") {=0A=
	    Dialog._runAjaxRequest(content, parameters, Dialog.confirm);=0A=
	    return =0A=
	  }=0A=
	  =0A=
	  parameters =3D parameters || {};=0A=
		var okLabel =3D parameters.okLabel ? parameters.okLabel : "Ok";=0A=
		var cancelLabel =3D parameters.cancelLabel ? parameters.cancelLabel : =
"Cancel";=0A=
=0A=
		var windowParam =3D parameters.windowParameters || {};=0A=
		windowParam.className =3D windowParam.className || "alert";=0A=
=0A=
    okButtonClass =3D "class =3D'" + (parameters.buttonClass ? =
parameters.buttonClass + " " : "") + " ok_button'" =0A=
    cancelButtonClass =3D "class =3D'" + (parameters.buttonClass ? =
parameters.buttonClass + " " : "") + " cancel_button'" =0A=
		var content =3D "\=0A=
			<div class=3D'" + windowParam.className + "_message'>" + content  + =
"</div>\=0A=
				<div class=3D'" + windowParam.className + "_buttons'>\=0A=
					<input type=3D'button' value=3D'" + okLabel + "' =
onclick=3D'Dialog.okCallback()'" + okButtonClass + "/>\=0A=
					<input type=3D'button' value=3D'" + cancelLabel + "' =
onclick=3D'Dialog.cancelCallback()' " + cancelButtonClass + "/>\=0A=
				</div>\=0A=
		";=0A=
	  this._openDialog(content, parameters)=0A=
	  return this.win=0A=
	},=0A=
	=0A=
	alert: function(content, parameters) {=0A=
	  // Get Ajax return before=0A=
	  if (typeof content !=3D "string") {=0A=
	    Dialog._runAjaxRequest(content, parameters, Dialog.alert);=0A=
	    return =0A=
	  }=0A=
	  =0A=
	  parameters =3D parameters || {};=0A=
		var okLabel =3D parameters.okLabel ? parameters.okLabel : "Ok";=0A=
=0A=
		var windowParam =3D parameters.windowParameters || {};=0A=
		windowParam.className =3D windowParam.className || "alert";=0A=
=0A=
    okButtonClass =3D "class =3D'" + (parameters.buttonClass ? =
parameters.buttonClass + " " : "") + " ok_button'" =0A=
		var content =3D "\=0A=
			<div class=3D'" + windowParam.className + "_message'>" + content  + =
"</div>\=0A=
				<div class=3D'" + windowParam.className + "_buttons'>\=0A=
					<input type=3D'button' value=3D'" + okLabel + "' =
onclick=3D'Dialog.okCallback()'" + okButtonClass + "/>\=0A=
				</div>";=0A=
		return this._openDialog(content, parameters)=0A=
	},=0A=
	=0A=
	info: function(content, parameters) {   =0A=
	  // Get Ajax return before=0A=
	  if (typeof content !=3D "string") {=0A=
	    Dialog._runAjaxRequest(content, parameters, Dialog.info);=0A=
	    return =0A=
	  }=0A=
	   =0A=
	  parameters =3D parameters || {};=0A=
	  parameters.windowParameters =3D parameters.windowParameters || {};=0A=
	  =0A=
		var className =3D parameters.windowParameters.className || "alert";=0A=
=0A=
		var content =3D "<div id=3D'modal_dialog_message' class=3D'" + =
className + "_message'>" + content  + "</div>";=0A=
		if (parameters.showProgress)=0A=
		  content +=3D "<div id=3D'modal_dialog_progress' class=3D'" + =
className + "_progress'>	</div>";=0A=
=0A=
		parameters.windowParameters.ok =3D null;=0A=
		parameters.windowParameters.cancel =3D null;=0A=
    parameters.windowParameters.className =3D className;=0A=
		=0A=
		return this._openDialog(content, parameters)=0A=
	},=0A=
	=0A=
	setInfoMessage: function(message) {=0A=
		$('modal_dialog_message').update(message);=0A=
	},=0A=
	=0A=
	closeInfo: function() {=0A=
		Windows.close(this.dialogId);=0A=
	},=0A=
	=0A=
	_openDialog: function(content, parameters) {=0A=
		// remove old dialog=0A=
		if (this.win) =0A=
			this.win.destroy();=0A=
=0A=
    if (! parameters.windowParameters.height && ! =
parameters.windowParameters.width) {=0A=
      parameters.windowParameters.width =3D =
WindowUtilities.getPageSize().pageWidth / 2;=0A=
    }=0A=
    this.dialogId =3D parameters.id ? parameters.id : 'modal_dialog'=0A=
=0A=
    // compute height or width if need be=0A=
    if (! parameters.windowParameters.height || ! =
parameters.windowParameters.width) {=0A=
      var size =3D WindowUtilities._computeSize(content, this.dialogId, =
parameters.windowParameters.width, parameters.windowParameters.height)=0A=
  		if (parameters.windowParameters.height)=0A=
  		  parameters.windowParameters.width =3D size + 5=0A=
		  else=0A=
		    parameters.windowParameters.height =3D size + 5=0A=
    }=0A=
		var windowParam =3D parameters && parameters.windowParameters ? =
parameters.windowParameters : {};=0A=
		windowParam.resizable =3D windowParam.resizable || false;=0A=
		=0A=
		windowParam.effectOptions =3D windowParam.effectOptions || {duration: =
1};=0A=
    windowParam.minimizable =3D false;=0A=
    windowParam.maximizable =3D false;=0A=
    windowParam.closable =3D false;=0A=
		this.win =3D new Window(this.dialogId, windowParam);=0A=
		this.win.getContent().innerHTML =3D content;=0A=
  	this.win.showCenter(true, parameters.top, parameters.left);	=0A=
		  =0A=
		this.win.cancelCallback =3D parameters.cancel;=0A=
		this.win.okCallback =3D parameters.ok;=0A=
		=0A=
		return this.win;		=0A=
	},=0A=
	=0A=
	_getAjaxContent: function(originalRequest)  {=0A=
      Dialog.callFunc(originalRequest.responseText, Dialog.parameters)=0A=
  },=0A=
  =0A=
  _runAjaxRequest: function(message, parameters, callFunc) {=0A=
    if (message.options =3D=3D null)=0A=
	    message.options =3D{}  =0A=
	  Dialog.onCompleteFunc =3D message.options.onComplete;=0A=
    Dialog.parameters =3D parameters;=0A=
    Dialog.callFunc =3D callFunc;=0A=
    =0A=
	  message.options.onComplete =3D Dialog._getAjaxContent;=0A=
    new Ajax.Request(message.url, message.options);=0A=
  },=0A=
  =0A=
	okCallback: function() {=0A=
		if (!this.win.okCallback || this.win.okCallback(this.win))=0A=
	    this.win.hide();=0A=
	},=0A=
=0A=
	cancelCallback: function() {=0A=
		this.win.hide();=0A=
		if (this.win.cancelCallback)=0A=
			this.win.cancelCallback(this.win);=0A=
	}=0A=
}=0A=
/*=0A=
	Based on Lightbox JS: Fullsize Image Overlays =0A=
	by Lokesh Dhakar - http://www.huddletogether.com=0A=
=0A=
	For more information on this script, visit:=0A=
	http://huddletogether.com/projects/lightbox/=0A=
=0A=
	Licensed under the Creative Commons Attribution 2.5 License - =
http://creativecommons.org/licenses/by/2.5/=0A=
	(basically, do anything you want, just leave my name and link)=0A=
*/=0A=
=0A=
var isIE =3D navigator.appVersion.match(/MSIE/) =3D=3D "MSIE";=0A=
=0A=
var WindowUtilities =3D {=0A=
  // From script.aculo.us=0A=
  getWindowScroll: function() {=0A=
    var w =3D window;=0A=
      var T, L, W, H;=0A=
      with (w.document) {=0A=
        if (w.document.documentElement && documentElement.scrollTop) {=0A=
          T =3D documentElement.scrollTop;=0A=
          L =3D documentElement.scrollLeft;=0A=
        } else if (w.document.body) {=0A=
          T =3D body.scrollTop;=0A=
          L =3D body.scrollLeft;=0A=
        }=0A=
        if (w.innerWidth) {=0A=
          W =3D w.innerWidth;=0A=
          H =3D w.innerHeight;=0A=
        } else if (w.document.documentElement && =
documentElement.clientWidth) {=0A=
          W =3D documentElement.clientWidth;=0A=
          H =3D documentElement.clientHeight;=0A=
        } else {=0A=
          W =3D body.offsetWidth;=0A=
          H =3D body.offsetHeight=0A=
        }=0A=
      }=0A=
      return { top: T, left: L, width: W, height: H };=0A=
    =0A=
  }, =0A=
  //=0A=
  // getPageSize()=0A=
  // Returns array with page width, height and window width, height=0A=
  // Core code from - quirksmode.org=0A=
  // Edit for Firefox by pHaez=0A=
  //=0A=
  getPageSize: function(){=0A=
  	var xScroll, yScroll;=0A=
=0A=
  	if (window.innerHeight && window.scrollMaxY) {	=0A=
  		xScroll =3D document.body.scrollWidth;=0A=
  		yScroll =3D window.innerHeight + window.scrollMaxY;=0A=
  	} else if (document.body.scrollHeight > document.body.offsetHeight){ =
// all but Explorer Mac=0A=
  		xScroll =3D document.body.scrollWidth;=0A=
  		yScroll =3D document.body.scrollHeight;=0A=
  	} else { // Explorer Mac...would also work in Explorer 6 Strict, =
Mozilla and Safari=0A=
  		xScroll =3D document.body.offsetWidth;=0A=
  		yScroll =3D document.body.offsetHeight;=0A=
  	}=0A=
=0A=
  	var windowWidth, windowHeight;=0A=
=0A=
  	if (self.innerHeight) {	// all except Explorer=0A=
  		windowWidth =3D self.innerWidth;=0A=
  		windowHeight =3D self.innerHeight;=0A=
  	} else if (document.documentElement && =
document.documentElement.clientHeight) { // Explorer 6 Strict Mode=0A=
  		windowWidth =3D document.documentElement.clientWidth;=0A=
  		windowHeight =3D document.documentElement.clientHeight;=0A=
  	} else if (document.body) { // other Explorers=0A=
  		windowWidth =3D document.body.clientWidth;=0A=
  		windowHeight =3D document.body.clientHeight;=0A=
  	}	=0A=
  	var pageHeight, pageWidth;=0A=
=0A=
  	// for small pages with total height less then height of the viewport=0A=
  	if(yScroll < windowHeight){=0A=
  		pageHeight =3D windowHeight;=0A=
  	} else { =0A=
  		pageHeight =3D yScroll;=0A=
  	}=0A=
=0A=
  	// for small pages with total width less then width of the viewport=0A=
  	if(xScroll < windowWidth){	=0A=
  		pageWidth =3D windowWidth;=0A=
  	} else {=0A=
  		pageWidth =3D xScroll;=0A=
  	}=0A=
=0A=
  	return {pageWidth: pageWidth ,pageHeight: pageHeight , windowWidth: =
windowWidth, windowHeight: windowHeight};=0A=
  },=0A=
=0A=
 	disableScreen: function(className, overlayId, contentId) {=0A=
		WindowUtilities.initLightbox(overlayId, className);=0A=
		var objBody =3D document.getElementsByTagName("body").item(0);=0A=
=0A=
		// prep objects=0A=
	 	var objOverlay =3D $(overlayId);=0A=
=0A=
		var pageSize =3D WindowUtilities.getPageSize();=0A=
=0A=
		// Hide select boxes as they will 'peek' through the image in IE=0A=
		if (contentId && isIE) {=0A=
      $$('select').each(function(element) {element.style.visibility =3D =
"hidden"});=0A=
	    $$('#'+contentId+' select').each(function(element) =
{element.style.visibility =3D "visible"});=0A=
		}	=0A=
	=0A=
		// set height of Overlay to take up whole page and show=0A=
		objOverlay.style.height =3D (pageSize.pageHeight + 'px');=0A=
		objOverlay.style.width =3D (pageSize.windowWidth + 'px');=0A=
		objOverlay.style.display =3D 'block';	=0A=
	},=0A=
=0A=
 	enableScreen: function(id) {=0A=
 	  id =3D id || 'overlay_modal'=0A=
	 	var objOverlay =3D  $(id);=0A=
		if (objOverlay) {=0A=
			// hide lightbox and overlay=0A=
			objOverlay.style.display =3D 'none';=0A=
=0A=
			// make select boxes visible=0A=
			if (isIE) {=0A=
        $$('select').each(function(element) {element.style.visibility =
=3D "visible"});=0A=
			}=0A=
			objOverlay.parentNode.removeChild(objOverlay);=0A=
		}=0A=
	},=0A=
=0A=
	// initLightbox()=0A=
	// Function runs on window load, going through link tags looking for =
rel=3D"lightbox".=0A=
	// These links receive onclick events that enable the lightbox display =
for their targets.=0A=
	// The function also inserts html markup at the top of the page which =
will be used as a=0A=
	// container for the overlay pattern and the inline image.=0A=
	initLightbox: function(id, className) {=0A=
		// Already done, just update zIndex=0A=
		if ($(id)) {=0A=
			Element.setStyle(id, {zIndex: Windows.maxZIndex + 10});=0A=
		}=0A=
		// create overlay div and hardcode some functional styles (aesthetic =
styles are in CSS file)=0A=
		else {=0A=
			var objBody =3D document.getElementsByTagName("body").item(0);=0A=
			var objOverlay =3D document.createElement("div");=0A=
			objOverlay.setAttribute('id', id);=0A=
			objOverlay.className =3D "overlay_" + className=0A=
			objOverlay.style.display =3D 'none';=0A=
			objOverlay.style.position =3D 'absolute';=0A=
			objOverlay.style.top =3D '0';=0A=
			objOverlay.style.left =3D '0';=0A=
			objOverlay.style.zIndex =3D Windows.maxZIndex + 10;=0A=
		 	objOverlay.style.width =3D '100%';=0A=
			objBody.insertBefore(objOverlay, objBody.firstChild);=0A=
		}=0A=
	},=0A=
	=0A=
	setCookie: function(value, parameters) {=0A=
    document.cookie=3D parameters[0] + "=3D" + escape(value) +=0A=
      ((parameters[1]) ? "; expires=3D" + parameters[1].toGMTString() : =
"") +=0A=
      ((parameters[2]) ? "; path=3D" + parameters[2] : "") +=0A=
      ((parameters[3]) ? "; domain=3D" + parameters[3] : "") +=0A=
      ((parameters[4]) ? "; secure" : "");=0A=
  },=0A=
=0A=
  getCookie: function(name) {=0A=
    var dc =3D document.cookie;=0A=
    var prefix =3D name + "=3D";=0A=
    var begin =3D dc.indexOf("; " + prefix);=0A=
    if (begin =3D=3D -1) {=0A=
      begin =3D dc.indexOf(prefix);=0A=
      if (begin !=3D 0) return null;=0A=
    } else {=0A=
      begin +=3D 2;=0A=
    }=0A=
    var end =3D document.cookie.indexOf(";", begin);=0A=
    if (end =3D=3D -1) {=0A=
      end =3D dc.length;=0A=
    }=0A=
    return unescape(dc.substring(begin + prefix.length, end));=0A=
  },=0A=
  =0A=
  _computeSize: function(content, id, width, height, margin) {=0A=
    if (margin =3D=3D null)=0A=
      margin =3D 5;=0A=
=0A=
    var objBody =3D document.getElementsByTagName("body").item(0);=0A=
  	var tmpObj =3D document.createElement("div");=0A=
  	tmpObj.setAttribute('id', id);=0A=
	=0A=
  	if (height)=0A=
  	  tmpObj.style.height =3D height + "px"=0A=
    else=0A=
      tmpObj.style.width =3D width + "px"=0A=
  =0A=
  	tmpObj.style.position =3D 'absolute';=0A=
  	tmpObj.style.top =3D '0';=0A=
  	tmpObj.style.left =3D '0';=0A=
    tmpObj.style.display =3D 'none';=0A=
=0A=
    tmpObj.innerHTML =3D content;=0A=
  	objBody.insertBefore(tmpObj, objBody.firstChild);=0A=
  	=0A=
  	var size;=0A=
  	if (height)=0A=
  	  size =3D $(id).getDimensions().width + margin;=0A=
    else=0A=
      size =3D $(id).getDimensions().height + margin;=0A=
  	objBody.removeChild(tmpObj);=0A=
    =0A=
  	return size;=0A=
  }	=0A=
}=0A=
=0A=
=0A=

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: 7bit
Content-Location: http://media.collegepublisher.com/media/scripts/youarehere.js

YouAreHere = function(element) {
    var login = document.getElementById('cp_tab_login');
    var verify = document.getElementById('cp_tab_verify');
    var loginBox = document.getElementById('cp_box_login');
    var verifyBox = document.getElementById('cp_box_verify');
    var tabHeader = document.getElementById('cp_tab_header');
    var emailBox = document.getElementById('email');
	var usernameBox = document.getElementById('username');
	
    if (element == 'cp_tab_login') {
      login.className = 'cp_active';
      verify.className = '';
      loginBox.className = 'cp_show';
      verifyBox.className = 'cp_hide';
	  usernameBox.focus();
    }
    if (element == 'cp_tab_verify') {
      verify.className = 'cp_active';
      login.className = '';
      loginBox.className = 'cp_hide';
      verifyBox.className = 'cp_show';
	  emailBox.focus();
    }
}
function greyoutbox(theformbutton) {
	theformbutton.disabled = 1;
}
------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/spry/xpath.js

/* xpath.js - Revision: Spry Preview Release 1.3 */

// Copyright (c) 2005, Google Inc.
// All rights reserved.
//=20
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions =
are
// met:
//        =20
//  * Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
//=20
//  * Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in =
the
//    documentation and/or other materials provided with the
//    distribution.
//=20
//  * Neither the name of Google Inc. nor the names of its contributors
//    may be used to endorse or promote products derived from this
//    software without specific prior written permission.
//=20
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// An XPath parser and evaluator written in JavaScript. The
// implementation is complete except for functions handling
// namespaces.
//
// Reference: [XPATH] XPath Specification
// <http://www.w3.org/TR/1999/REC-xpath-19991116>.
//
//
// The API of the parser has several parts:
//
// 1. The parser function xpathParse() that takes a string and returns
// an expession object.
//
// 2. The expression object that has an evaluate() method to evaluate =
the
// XPath expression it represents. (It is actually a hierarchy of
// objects that resembles the parse tree, but an application will call
// evaluate() only on the top node of this hierarchy.)
//
// 3. The context object that is passed as an argument to the evaluate()
// method, which represents the DOM context in which the expression is
// evaluated.
//
// 4. The value object that is returned from evaluate() and represents
// values of the different types that are defined by XPath (number,
// string, boolean, and node-set), and allows to convert between them.
//
// These parts are near the top of the file, the functions and data
// that are used internally follow after them.
//
//
// TODO(mesch): add jsdoc comments. Use more coherent naming.
//
//
// Author: Steffen Meschkat <mesch@google.com>


// The entry point for the parser.
//
// @param expr a string that contains an XPath expression.
// @return an expression object that can be evaluated with an
// expression context.

function xpathParse(expr) {
  if (xpathdebug) {
    Log.write('XPath parse ' + expr);
  }
  xpathParseInit();

  var cached =3D xpathCacheLookup(expr);
  if (cached) {
    if (xpathdebug) {
      Log.write(' ... cached');
    }
    return cached;
  }

  // Optimize for a few common cases: simple attribute node tests
  // (@id), simple element node tests (page), variable references
  // ($address), numbers (4), multi-step path expressions where each
  // step is a plain element node test
  // (page/overlay/locations/location).
 =20
  if (expr.match(/^(\$|@)?\w+$/i)) {
    var ret =3D makeSimpleExpr(expr);
    xpathParseCache[expr] =3D ret;
    if (xpathdebug) {
      Log.write(' ... simple');
    }
    return ret;
  }

  if (expr.match(/^\w+(\/\w+)*$/i)) {
    var ret =3D makeSimpleExpr2(expr);
    xpathParseCache[expr] =3D ret;
    if (xpathdebug) {
      Log.write(' ... simple 2');
    }
    return ret;
  }

  var cachekey =3D expr; // expr is modified during parse
  if (xpathdebug) {
    Timer.start('XPath parse', cachekey);
  }

  var stack =3D [];
  var ahead =3D null;
  var previous =3D null;
  var done =3D false;

  var parse_count =3D 0;
  var lexer_count =3D 0;
  var reduce_count =3D 0;
 =20
  while (!done) {
    parse_count++;
    expr =3D expr.replace(/^\s*/, '');
    previous =3D ahead;
    ahead =3D null;

    var rule =3D null;
    var match =3D '';
    for (var i =3D 0; i < xpathTokenRules.length; ++i) {
      var result =3D xpathTokenRules[i].re.exec(expr);
      lexer_count++;
      if (result && result.length > 0 && result[0].length > =
match.length) {
        rule =3D xpathTokenRules[i];
        match =3D result[0];
        break;
      }
    }

    // Special case: allow operator keywords to be element and
    // variable names.

    // NOTE(mesch): The parser resolves conflicts by looking ahead,
    // and this is the only case where we look back to
    // disambiguate. So this is indeed something different, and
    // looking back is usually done in the lexer (via states in the
    // general case, called "start conditions" in flex(1)). Also,the
    // conflict resolution in the parser is not as robust as it could
    // be, so I'd like to keep as much off the parser as possible (all
    // these precedence values should be computed from the grammar
    // rules and possibly associativity declarations, as in bison(1),
    // and not explicitly set.

    if (rule &&
        (rule =3D=3D TOK_DIV ||=20
         rule =3D=3D TOK_MOD ||
         rule =3D=3D TOK_AND ||=20
         rule =3D=3D TOK_OR) &&
        (!previous ||=20
         previous.tag =3D=3D TOK_AT ||=20
         previous.tag =3D=3D TOK_DSLASH ||=20
         previous.tag =3D=3D TOK_SLASH ||
         previous.tag =3D=3D TOK_AXIS ||=20
         previous.tag =3D=3D TOK_DOLLAR)) {
      rule =3D TOK_QNAME;
    }

    if (rule) {
      expr =3D expr.substr(match.length);
      if (xpathdebug) {
        Log.write('token: ' + match + ' -- ' + rule.label);
      }
      ahead =3D {
        tag: rule,
        match: match,
        prec: rule.prec ?  rule.prec : 0, // || 0 is removed by the =
compiler
        expr: makeTokenExpr(match)
      };

    } else {
      if (xpathdebug) {
        Log.write('DONE');
      }
      done =3D true;
    }

    while (xpathReduce(stack, ahead)) {
      reduce_count++;
      if (xpathdebug) {
        Log.write('stack: ' + stackToString(stack));
      }
    }
  }

  if (xpathdebug) {
    Log.write(stackToString(stack));
  }

  if (stack.length !=3D 1) {
    throw 'XPath parse error ' + cachekey + ':\n' + =
stackToString(stack);
  }

  var result =3D stack[0].expr;
  xpathParseCache[cachekey] =3D result;

  if (xpathdebug) {
    Timer.end('XPath parse', cachekey);
  }

  if (xpathdebug) {
    Log.write('XPath parse: ' + parse_count + ' / ' +=20
              lexer_count + ' / ' + reduce_count);
  }

  return result;
}

var xpathParseCache =3D {};

function xpathCacheLookup(expr) {
  return xpathParseCache[expr];
}

function xpathReduce(stack, ahead) {
  var cand =3D null;

  if (stack.length > 0) {
    var top =3D stack[stack.length-1];
    var ruleset =3D xpathRules[top.tag.key];

    if (ruleset) {
      for (var i =3D 0; i < ruleset.length; ++i) {
        var rule =3D ruleset[i];
        var match =3D xpathMatchStack(stack, rule[1]);
        if (match.length) {
          cand =3D {
            tag: rule[0],
            rule: rule,
            match: match
          };
          cand.prec =3D xpathGrammarPrecedence(cand);
          break;
        }
      }
    }
  }

  var ret;
  if (cand && (!ahead || cand.prec > ahead.prec ||=20
               (ahead.tag.left && cand.prec >=3D ahead.prec))) {
    for (var i =3D 0; i < cand.match.matchlength; ++i) {
      stack.pop();
    }

    if (xpathdebug) {
      Log.write('reduce ' + cand.tag.label + ' ' + cand.prec +
                ' ahead ' + (ahead ? ahead.tag.label + ' ' + ahead.prec =
+=20
                             (ahead.tag.left ? ' left' : '')
                             : ' none '));
    }

    var matchexpr =3D mapExpr(cand.match, function(m) { return m.expr; =
});
    cand.expr =3D cand.rule[3].apply(null, matchexpr);

    stack.push(cand);
    ret =3D true;

  } else {
    if (ahead) {
      if (xpathdebug) {
        Log.write('shift ' + ahead.tag.label + ' ' + ahead.prec +=20
                  (ahead.tag.left ? ' left' : '') +
                  ' over ' + (cand ? cand.tag.label + ' ' +=20
                              cand.prec : ' none'));
      }
      stack.push(ahead);
    }
    ret =3D false;
  }
  return ret;
}

function xpathMatchStack(stack, pattern) {

  // NOTE(mesch): The stack matches for variable cardinality are
  // greedy but don't do backtracking. This would be an issue only
  // with rules of the form A* A, i.e. with an element with variable
  // cardinality followed by the same element. Since that doesn't
  // occur in the grammar at hand, all matches on the stack are
  // unambiguous.

  var S =3D stack.length;
  var P =3D pattern.length;
  var p, s;
  var match =3D [];
  match.matchlength =3D 0;
  var ds =3D 0;
  for (p =3D P - 1, s =3D S - 1; p >=3D 0 && s >=3D 0; --p, s -=3D ds) {
    ds =3D 0;
    var qmatch =3D [];
    if (pattern[p] =3D=3D Q_MM) {
      p -=3D 1;
      match.push(qmatch);
      while (s - ds >=3D 0 && stack[s - ds].tag =3D=3D pattern[p]) {
        qmatch.push(stack[s - ds]);
        ds +=3D 1;
        match.matchlength +=3D 1;
      }

    } else if (pattern[p] =3D=3D Q_01) {
      p -=3D 1;
      match.push(qmatch);
      while (s - ds >=3D 0 && ds < 2 && stack[s - ds].tag =3D=3D =
pattern[p]) {
        qmatch.push(stack[s - ds]);
        ds +=3D 1;
        match.matchlength +=3D 1;
      }

    } else if (pattern[p] =3D=3D Q_1M) {
      p -=3D 1;
      match.push(qmatch);
      if (stack[s].tag =3D=3D pattern[p]) {
        while (s - ds >=3D 0 && stack[s - ds].tag =3D=3D pattern[p]) {
          qmatch.push(stack[s - ds]);
          ds +=3D 1;
          match.matchlength +=3D 1;
        }
      } else {
        return [];
      }

    } else if (stack[s].tag =3D=3D pattern[p]) {
      match.push(stack[s]);
      ds +=3D 1;
      match.matchlength +=3D 1;

    } else {
      return [];
    }

    reverseInplace(qmatch);
    qmatch.expr =3D mapExpr(qmatch, function(m) { return m.expr; });
  }

  reverseInplace(match);

  if (p =3D=3D -1) {
    return match;

  } else {
    return [];
  }
}

function xpathTokenPrecedence(tag) {
  return tag.prec || 2;
}

function xpathGrammarPrecedence(frame) {
  var ret =3D 0;

  if (frame.rule) { /* normal reduce */
    if (frame.rule.length >=3D 3 && frame.rule[2] >=3D 0) {
      ret =3D frame.rule[2];

    } else {
      for (var i =3D 0; i < frame.rule[1].length; ++i) {
        var p =3D xpathTokenPrecedence(frame.rule[1][i]);
        ret =3D Math.max(ret, p);
      }
    }
  } else if (frame.tag) { /* TOKEN match */
    ret =3D xpathTokenPrecedence(frame.tag);

  } else if (frame.length) { /* Q_ match */
    for (var j =3D 0; j < frame.length; ++j) {
      var p =3D xpathGrammarPrecedence(frame[j]);
      ret =3D Math.max(ret, p);
    }
  }

  return ret;
}

function stackToString(stack) {
  var ret =3D '';
  for (var i =3D 0; i < stack.length; ++i) {
    if (ret) {
      ret +=3D '\n';
    }
    ret +=3D stack[i].tag.label;
  }
  return ret;
}


// XPath expression evaluation context. An XPath context consists of a
// DOM node, a list of DOM nodes that contains this node, a number
// that represents the position of the single node in the list, and a
// current set of variable bindings. (See XPath spec.)
//
// The interface of the expression context:
//
//   Constructor -- gets the node, its position, the node set it
//   belongs to, and a parent context as arguments. The parent context
//   is used to implement scoping rules for variables: if a variable
//   is not found in the current context, it is looked for in the
//   parent context, recursively. Except for node, all arguments have
//   default values: default position is 0, default node set is the
//   set that contains only the node, and the default parent is null.
//
//     Notice that position starts at 0 at the outside interface;
//     inside XPath expressions this shows up as position()=3D1.
//
//   clone() -- creates a new context with the current context as
//   parent. If passed as argument to clone(), the new context has a
//   different node, position, or node set. What is not passed is
//   inherited from the cloned context.
//
//   setVariable(name, expr) -- binds given XPath expression to the
//   name.
//
//   getVariable(name) -- what the name says.
//
//   setNode(node, position) -- sets the context to the new node and
//   its corresponding position. Needed to implement scoping rules for
//   variables in XPath. (A variable is visible to all subsequent
//   siblings, not only to its children.)

function ExprContext(node, position, nodelist, parent) {
  this.node =3D node;
  this.position =3D position || 0;
  this.nodelist =3D nodelist || [ node ];
  this.variables =3D {};
  this.parent =3D parent || null;
  this.root =3D parent ? parent.root : node.ownerDocument;
}

ExprContext.prototype.clone =3D function(node, position, nodelist) {
  return new
  ExprContext(node || this.node,
              typeof position !=3D 'undefined' ? position : =
this.position,
              nodelist || this.nodelist, this);
};

ExprContext.prototype.setVariable =3D function(name, value) {
  this.variables[name] =3D value;
};

ExprContext.prototype.getVariable =3D function(name) {
  if (typeof this.variables[name] !=3D 'undefined') {
    return this.variables[name];

  } else if (this.parent) {
    return this.parent.getVariable(name);

  } else {
    return null;
  }
}

ExprContext.prototype.setNode =3D function(node, position) {
  this.node =3D node;
  this.position =3D position;
}


// XPath expression values. They are what XPath expressions evaluate
// to. Strangely, the different value types are not specified in the
// XPath syntax, but only in the semantics, so they don't show up as
// nonterminals in the grammar. Yet, some expressions are required to
// evaluate to particular types, and not every type can be coerced
// into every other type. Although the types of XPath values are
// similar to the types present in JavaScript, the type coercion rules
// are a bit peculiar, so we explicitly model XPath types instead of
// mapping them onto JavaScript types. (See XPath spec.)
//
// The four types are:
//
//   StringValue
//
//   NumberValue
//
//   BooleanValue
//
//   NodeSetValue
//
// The common interface of the value classes consists of methods that
// implement the XPath type coercion rules:
//
//   stringValue() -- returns the value as a JavaScript String,
//
//   numberValue() -- returns the value as a JavaScript Number,
//
//   booleanValue() -- returns the value as a JavaScript Boolean,
//
//   nodeSetValue() -- returns the value as a JavaScript Array of DOM
//   Node objects.
//

function StringValue(value) {
  this.value =3D value;
  this.type =3D 'string';
}

StringValue.prototype.stringValue =3D function() {
  return this.value;
}

StringValue.prototype.booleanValue =3D function() {
  return this.value.length > 0;
}

StringValue.prototype.numberValue =3D function() {
  return this.value - 0;
}

StringValue.prototype.nodeSetValue =3D function() {
  throw this + ' ' + Error().stack;
}

function BooleanValue(value) {
  this.value =3D value;
  this.type =3D 'boolean';
}

BooleanValue.prototype.stringValue =3D function() {
  return '' + this.value;
}

BooleanValue.prototype.booleanValue =3D function() {
  return this.value;
}

BooleanValue.prototype.numberValue =3D function() {
  return this.value ? 1 : 0;
}

BooleanValue.prototype.nodeSetValue =3D function() {
  throw this + ' ' + Error().stack;
}

function NumberValue(value) {
  this.value =3D value;
  this.type =3D 'number';
}

NumberValue.prototype.stringValue =3D function() {
  return '' + this.value;
}

NumberValue.prototype.booleanValue =3D function() {
  return !!this.value;
}

NumberValue.prototype.numberValue =3D function() {
  return this.value - 0;
}

NumberValue.prototype.nodeSetValue =3D function() {
  throw this + ' ' + Error().stack;
}

function NodeSetValue(value) {
  this.value =3D value;
  this.type =3D 'node-set';
}

NodeSetValue.prototype.stringValue =3D function() {
  if (this.value.length =3D=3D 0) {
    return '';
  } else {
    return xmlValue(this.value[0]);
  }
}

NodeSetValue.prototype.booleanValue =3D function() {
  return this.value.length > 0;
}

NodeSetValue.prototype.numberValue =3D function() {
  return this.stringValue() - 0;
}

NodeSetValue.prototype.nodeSetValue =3D function() {
  return this.value;
};

// XPath expressions. They are used as nodes in the parse tree and
// possess an evaluate() method to compute an XPath value given an XPath
// context. Expressions are returned from the parser. Teh set of
// expression classes closely mirrors the set of non terminal symbols
// in the grammar. Every non trivial nonterminal symbol has a
// corresponding expression class.
//
// The common expression interface consists of the following methods:
//
// evaluate(context) -- evaluates the expression, returns a value.
//
// toString() -- returns the XPath text representation of the
// expression (defined in xsltdebug.js).
//
// parseTree(indent) -- returns a parse tree representation of the
// expression (defined in xsltdebug.js).

function TokenExpr(m) {
  this.value =3D m;
}

TokenExpr.prototype.evaluate =3D function() {
  return new StringValue(this.value);
};

function LocationExpr() {
  this.absolute =3D false;
  this.steps =3D [];
}

LocationExpr.prototype.appendStep =3D function(s) {
  this.steps.push(s);
}

LocationExpr.prototype.prependStep =3D function(s) {
  var steps0 =3D this.steps;
  this.steps =3D [ s ];
  for (var i =3D 0; i < steps0.length; ++i) {
    this.steps.push(steps0[i]);
  }
};

LocationExpr.prototype.evaluate =3D function(ctx) {
  var start;
  if (this.absolute) {
    start =3D ctx.root;

  } else {
    start =3D ctx.node;
  }

  var nodes =3D [];
  xPathStep(nodes, this.steps, 0, start, ctx);
  return new NodeSetValue(nodes);
};

function xPathStep(nodes, steps, step, input, ctx) {
  var s =3D steps[step];
  var ctx2 =3D ctx.clone(input);
  var nodelist =3D s.evaluate(ctx2).nodeSetValue();

  for (var i =3D 0; i < nodelist.length; ++i) {
    if (step =3D=3D steps.length - 1) {
      nodes.push(nodelist[i]);
    } else {
      xPathStep(nodes, steps, step + 1, nodelist[i], ctx);
    }
  }
}

function StepExpr(axis, nodetest, predicate) {
  this.axis =3D axis;
  this.nodetest =3D nodetest;
  this.predicate =3D predicate || [];
}

StepExpr.prototype.appendPredicate =3D function(p) {
  this.predicate.push(p);
}

StepExpr.prototype.evaluate =3D function(ctx) {
  var input =3D ctx.node;
  var nodelist =3D [];

  // NOTE(mesch): When this was a switch() statement, it didn't work
  // in Safari/2.0. Not sure why though; it resulted in the JavaScript
  // console output "undefined" (without any line number or so).

  if (this.axis =3D=3D  xpathAxis.ANCESTOR_OR_SELF) {
    nodelist.push(input);
    for (var n =3D input.parentNode; n; n =3D input.parentNode) {
      nodelist.push(n);
    }

  } else if (this.axis =3D=3D xpathAxis.ANCESTOR) {
    for (var n =3D input.parentNode; n; n =3D input.parentNode) {
      nodelist.push(n);
    }

  } else if (this.axis =3D=3D xpathAxis.ATTRIBUTE) {
    copyArray(nodelist, input.attributes);

  } else if (this.axis =3D=3D xpathAxis.CHILD) {
    copyArray(nodelist, input.childNodes);

  } else if (this.axis =3D=3D xpathAxis.DESCENDANT_OR_SELF) {
    nodelist.push(input);
    xpathCollectDescendants(nodelist, input);

  } else if (this.axis =3D=3D xpathAxis.DESCENDANT) {
    xpathCollectDescendants(nodelist, input);

  } else if (this.axis =3D=3D xpathAxis.FOLLOWING) {
    for (var n =3D input.parentNode; n; n =3D n.parentNode) {
      for (var nn =3D n.nextSibling; nn; nn =3D nn.nextSibling) {
        nodelist.push(nn);
        xpathCollectDescendants(nodelist, nn);
      }
    }

  } else if (this.axis =3D=3D xpathAxis.FOLLOWING_SIBLING) {
    for (var n =3D input.nextSibling; n; n =3D input.nextSibling) {
      nodelist.push(n);
    }

  } else if (this.axis =3D=3D xpathAxis.NAMESPACE) {
    alert('not implemented: axis namespace');

  } else if (this.axis =3D=3D xpathAxis.PARENT) {
    if (input.parentNode) {
      nodelist.push(input.parentNode);
    }

  } else if (this.axis =3D=3D xpathAxis.PRECEDING) {
    for (var n =3D input.parentNode; n; n =3D n.parentNode) {
      for (var nn =3D n.previousSibling; nn; nn =3D nn.previousSibling) =
{
        nodelist.push(nn);
        xpathCollectDescendantsReverse(nodelist, nn);
      }
    }

  } else if (this.axis =3D=3D xpathAxis.PRECEDING_SIBLING) {
    for (var n =3D input.previousSibling; n; n =3D =
input.previousSibling) {
      nodelist.push(n);
    }

  } else if (this.axis =3D=3D xpathAxis.SELF) {
    nodelist.push(input);

  } else {
    throw 'ERROR -- NO SUCH AXIS: ' + this.axis;
  }

  // process node test
  var nodelist0 =3D nodelist;
  nodelist =3D [];
  for (var i =3D 0; i < nodelist0.length; ++i) {
    var n =3D nodelist0[i];
    if (this.nodetest.evaluate(ctx.clone(n, i, =
nodelist0)).booleanValue()) {
      nodelist.push(n);
    }
  }

  // process predicates
  for (var i =3D 0; i < this.predicate.length; ++i) {
    var nodelist0 =3D nodelist;
    nodelist =3D [];
    for (var ii =3D 0; ii < nodelist0.length; ++ii) {
      var n =3D nodelist0[ii];
      if (this.predicate[i].evaluate(ctx.clone(n, ii, =
nodelist0)).booleanValue()) {
        nodelist.push(n);
      }
    }
  }

  return new NodeSetValue(nodelist);
};

function NodeTestAny() {
  this.value =3D new BooleanValue(true);
}

NodeTestAny.prototype.evaluate =3D function(ctx) {
  return this.value;
};

function NodeTestElement() {}

NodeTestElement.prototype.evaluate =3D function(ctx) {
  return new BooleanValue(ctx.node.nodeType =3D=3D DOM_ELEMENT_NODE);
}

function NodeTestText() {}

NodeTestText.prototype.evaluate =3D function(ctx) {
  return new BooleanValue(ctx.node.nodeType =3D=3D DOM_TEXT_NODE);
}

function NodeTestComment() {}

NodeTestComment.prototype.evaluate =3D function(ctx) {
  return new BooleanValue(ctx.node.nodeType =3D=3D DOM_COMMENT_NODE);
}

function NodeTestPI(target) {
  this.target =3D target;
}

NodeTestPI.prototype.evaluate =3D function(ctx) {
  return new
  BooleanValue(ctx.node.nodeType =3D=3D DOM_PROCESSING_INSTRUCTION_NODE =
&&
               (!this.target || ctx.node.nodeName =3D=3D this.target));
}

function NodeTestNC(nsprefix) {
  this.regex =3D new RegExp("^" + nsprefix + ":");
  this.nsprefix =3D nsprefix;
}

NodeTestNC.prototype.evaluate =3D function(ctx) {
  var n =3D ctx.node;
  return new BooleanValue(this.regex.match(n.nodeName));
}

function NodeTestName(name) {
  this.name =3D name;
}

NodeTestName.prototype.evaluate =3D function(ctx) {
  var n =3D ctx.node;
  return new BooleanValue(n.nodeName =3D=3D this.name);
}

function PredicateExpr(expr) {
  this.expr =3D expr;
}

PredicateExpr.prototype.evaluate =3D function(ctx) {
  var v =3D this.expr.evaluate(ctx);
  if (v.type =3D=3D 'number') {
    // NOTE(mesch): Internally, position is represented starting with
    // 0, however in XPath position starts with 1. See functions
    // position() and last().
    return new BooleanValue(ctx.position =3D=3D v.numberValue() - 1);
  } else {
    return new BooleanValue(v.booleanValue());
  }
};

function FunctionCallExpr(name) {
  this.name =3D name;
  this.args =3D [];
}

FunctionCallExpr.prototype.appendArg =3D function(arg) {
  this.args.push(arg);
};

FunctionCallExpr.prototype.evaluate =3D function(ctx) {
  var fn =3D '' + this.name.value;
  var f =3D this.xpathfunctions[fn];
  if (f) {
    return f.call(this, ctx);
  } else {
    Log.write('XPath NO SUCH FUNCTION ' + fn);
    return new BooleanValue(false);
  }
};

FunctionCallExpr.prototype.xpathfunctions =3D {
  'last': function(ctx) {
    assert(this.args.length =3D=3D 0);
    // NOTE(mesch): XPath position starts at 1.
    return new NumberValue(ctx.nodelist.length);
  },

  'position': function(ctx) {
    assert(this.args.length =3D=3D 0);
    // NOTE(mesch): XPath position starts at 1.
    return new NumberValue(ctx.position + 1);
  },

  'count': function(ctx) {
    assert(this.args.length =3D=3D 1);
    var v =3D this.args[0].evaluate(ctx);
    return new NumberValue(v.nodeSetValue().length);
  },

  'id': function(ctx) {
    assert(this.args.length =3D=3D 1);
    var e =3D this.args.evaluate(ctx);
    var ret =3D [];
    var ids;
    if (e.type =3D=3D 'node-set') {
      ids =3D [];
      for (var i =3D 0; i < e.length; ++i) {
        var v =3D xmlValue(e[i]).split(/\s+/);
        for (var ii =3D 0; ii < v.length; ++ii) {
          ids.push(v[ii]);
        }
      }
    } else {
      ids =3D e.split(/\s+/);
    }
    var d =3D ctx.node.ownerDocument;
    for (var i =3D 0; i < ids.length; ++i) {
      var n =3D d.getElementById(ids[i]);
      if (n) {
        ret.push(n);
      }
    }
    return new NodeSetValue(ret);
  },

  'local-name': function(ctx) {
    alert('not implmented yet: XPath function local-name()');
  },

  'namespace-uri': function(ctx) {
    alert('not implmented yet: XPath function namespace-uri()');
  },

  'name': function(ctx) {
    assert(this.args.length =3D=3D 1 || this.args.length =3D=3D 0);
    var n;
    if (this.args.length =3D=3D 0) {
      n =3D [ ctx.node ];
    } else {
      n =3D this.args[0].evaluate(ctx).nodeSetValue();
    }

    if (n.length =3D=3D 0) {
      return new StringValue('');
    } else {
      return new StringValue(n[0].nodeName);
    }
  },

  'string':  function(ctx) {
    assert(this.args.length =3D=3D 1 || this.args.length =3D=3D 0);
    if (this.args.length =3D=3D 0) {
      return new StringValue(new NodeSetValue([ ctx.node =
]).stringValue());
    } else {
      return new StringValue(this.args[0].evaluate(ctx).stringValue());
    }
  },

  'concat': function(ctx) {
    var ret =3D '';
    for (var i =3D 0; i < this.args.length; ++i) {
      ret +=3D this.args[i].evaluate(ctx).stringValue();
    }
    return new StringValue(ret);
  },

  'starts-with': function(ctx) {
    assert(this.args.length =3D=3D 2);
    var s0 =3D this.args[0].evaluate(ctx).stringValue();
    var s1 =3D this.args[1].evaluate(ctx).stringValue();
    return new BooleanValue(s0.indexOf(s1) =3D=3D 0);
  },

  'contains': function(ctx) {
    assert(this.args.length =3D=3D 2);
    var s0 =3D this.args[0].evaluate(ctx).stringValue();
    var s1 =3D this.args[1].evaluate(ctx).stringValue();
    return new BooleanValue(s0.indexOf(s1) !=3D -1);
  },

  'substring-before': function(ctx) {
    assert(this.args.length =3D=3D 2);
    var s0 =3D this.args[0].evaluate(ctx).stringValue();
    var s1 =3D this.args[1].evaluate(ctx).stringValue();
    var i =3D s0.indexOf(s1);
    var ret;
    if (i =3D=3D -1) {
      ret =3D '';
    } else {
      ret =3D s0.substr(0,i);
    }
    return new StringValue(ret);
  },

  'substring-after': function(ctx) {
    assert(this.args.length =3D=3D 2);
    var s0 =3D this.args[0].evaluate(ctx).stringValue();
    var s1 =3D this.args[1].evaluate(ctx).stringValue();
    var i =3D s0.indexOf(s1);
    var ret;
    if (i =3D=3D -1) {
      ret =3D '';
    } else {
      ret =3D s0.substr(i + s1.length);
    }
    return new StringValue(ret);
  },

  'substring': function(ctx) {
    // NOTE: XPath defines the position of the first character in a
    // string to be 1, in JavaScript this is 0 ([XPATH] Section 4.2).
    assert(this.args.length =3D=3D 2 || this.args.length =3D=3D 3);
    var s0 =3D this.args[0].evaluate(ctx).stringValue();
    var s1 =3D this.args[1].evaluate(ctx).numberValue();
    var ret;
    if (this.args.length =3D=3D 2) {
      var i1 =3D Math.max(0, Math.round(s1) - 1);
      ret =3D s0.substr(i1);

    } else {
      var s2 =3D this.args[2].evaluate(ctx).numberValue();
      var i0 =3D Math.round(s1) - 1;
      var i1 =3D Math.max(0, i0);
      var i2 =3D Math.round(s2) - Math.max(0, -i0);
      ret =3D s0.substr(i1, i2);
    }
    return new StringValue(ret);
  },

  'string-length': function(ctx) {
    var s;
    if (this.args.length > 0) {
      s =3D this.args[0].evaluate(ctx).stringValue();
    } else {
      s =3D new NodeSetValue([ ctx.node ]).stringValue();
    }
    return new NumberValue(s.length);
  },

  'normalize-space': function(ctx) {
    var s;
    if (this.args.length > 0) {
      s =3D this.args[0].evaluate(ctx).stringValue();
    } else {
      s =3D new NodeSetValue([ ctx.node ]).stringValue();
    }
    s =3D s.replace(/^\s*/,'').replace(/\s*$/,'').replace(/\s+/g, ' ');
    return new StringValue(s);
  },

  'translate': function(ctx) {
    assert(this.args.length =3D=3D 3);
    var s0 =3D this.args[0].evaluate(ctx).stringValue();
    var s1 =3D this.args[1].evaluate(ctx).stringValue();
    var s2 =3D this.args[2].evaluate(ctx).stringValue();

    for (var i =3D 0; i < s1.length; ++i) {
      s0 =3D s0.replace(new RegExp(s1.charAt(i), 'g'), s2.charAt(i));
    }
    return new StringValue(s0);
  },

  'boolean': function(ctx) {
    assert(this.args.length =3D=3D 1);
    return new BooleanValue(this.args[0].evaluate(ctx).booleanValue());
  },

  'not': function(ctx) {
    assert(this.args.length =3D=3D 1);
    var ret =3D !this.args[0].evaluate(ctx).booleanValue();
    return new BooleanValue(ret);
  },

  'true': function(ctx) {
    assert(this.args.length =3D=3D 0);
    return new BooleanValue(true);
  },

  'false': function(ctx) {
    assert(this.args.length =3D=3D 0);
    return new BooleanValue(false);
  },

  'lang': function(ctx) {
    assert(this.args.length =3D=3D 1);
    var lang =3D this.args[0].evaluate(ctx).stringValue();
    var xmllang;
    var n =3D ctx.node;
    while (n && n !=3D n.parentNode /* just in case ... */) {
      xmllang =3D n.getAttribute('xml:lang');
      if (xmllang) {
        break;
      }
      n =3D n.parentNode;
    }
    if (!xmllang) {
      return new BooleanValue(false);
    } else {
      var re =3D new RegExp('^' + lang + '$', 'i');
      return new BooleanValue(xmllang.match(re) ||
                              xmllang.replace(/_.*$/,'').match(re));
    }
  },

  'number': function(ctx) {
    assert(this.args.length =3D=3D 1 || this.args.length =3D=3D 0);

    if (this.args.length =3D=3D 1) {
      return new NumberValue(this.args[0].evaluate(ctx).numberValue());
    } else {
      return new NumberValue(new NodeSetValue([ ctx.node =
]).numberValue());
    }
  },

  'sum': function(ctx) {
    assert(this.args.length =3D=3D 1);
    var n =3D this.args[0].evaluate(ctx).nodeSetValue();
    var sum =3D 0;
    for (var i =3D 0; i < n.length; ++i) {
      sum +=3D xmlValue(n[i]) - 0;
    }
    return new NumberValue(sum);
  },

  'floor': function(ctx) {
    assert(this.args.length =3D=3D 1);
    var num =3D this.args[0].evaluate(ctx).numberValue();
    return new NumberValue(Math.floor(num));
  },

  'ceiling': function(ctx) {
    assert(this.args.length =3D=3D 1);
    var num =3D this.args[0].evaluate(ctx).numberValue();
    return new NumberValue(Math.ceil(num));
  },

  'round': function(ctx) {
    assert(this.args.length =3D=3D 1);
    var num =3D this.args[0].evaluate(ctx).numberValue();
    return new NumberValue(Math.round(num));
  },

  // TODO(mesch): The following functions are custom. There is a
  // standard that defines how to add functions, which should be
  // applied here.

  'ext-join': function(ctx) {
    assert(this.args.length =3D=3D 2);
    var nodes =3D this.args[0].evaluate(ctx).nodeSetValue();
    var delim =3D this.args[1].evaluate(ctx).stringValue();
    var ret =3D '';
    for (var i =3D 0; i < nodes.length; ++i) {
      if (ret) {
        ret +=3D delim;
      }
      ret +=3D xmlValue(nodes[i]);
    }
    return new StringValue(ret);
  },

  // ext-if() evaluates and returns its second argument, if the
  // boolean value of its first argument is true, otherwise it
  // evaluates and returns its third argument.

  'ext-if': function(ctx) {
    assert(this.args.length =3D=3D 3);
    if (this.args[0].evaluate(ctx).booleanValue()) {
      return this.args[1].evaluate(ctx);
    } else {
      return this.args[2].evaluate(ctx);
    }
  },

  'ext-sprintf': function(ctx) {
    assert(this.args.length >=3D 1);
    var args =3D [];
    for (var i =3D 0; i < this.args.length; ++i) {
      args.push(this.args[i].evaluate(ctx).stringValue());
    }
    return new StringValue(sprintf.apply(null, args));
  },

  // ext-cardinal() evaluates its single argument as a number, and
  // returns the current node that many times. It can be used in the
  // select attribute to iterate over an integer range.
 =20
  'ext-cardinal': function(ctx) {
    assert(this.args.length >=3D 1);
    var c =3D this.args[0].evaluate(ctx).numberValue();
    var ret =3D [];
    for (var i =3D 0; i < c; ++i) {
      ret.push(ctx.node);
    }
    return new NodeSetValue(ret);
  }
};

function UnionExpr(expr1, expr2) {
  this.expr1 =3D expr1;
  this.expr2 =3D expr2;
}

UnionExpr.prototype.evaluate =3D function(ctx) {
  var nodes1 =3D this.expr1.evaluate(ctx).nodeSetValue();
  var nodes2 =3D this.expr2.evaluate(ctx).nodeSetValue();
  var I1 =3D nodes1.length;
  for (var i2 =3D 0; i2 < nodes2.length; ++i2) {
    for (var i1 =3D 0; i1 < I1; ++i1) {
      if (nodes1[i1] =3D=3D nodes2[i2]) {
        // break inner loop and continue outer loop, labels confuse
        // the js compiler, so we don't use them here.
        i1 =3D I1;
      }
    }
    nodes1.push(nodes2[i2]);
  }
  return new NodeSetValue(nodes2);
};

function PathExpr(filter, rel) {
  this.filter =3D filter;
  this.rel =3D rel;
}

PathExpr.prototype.evaluate =3D function(ctx) {
  var nodes =3D this.filter.evaluate(ctx).nodeSetValue();
  var nodes1 =3D [];
  for (var i =3D 0; i < nodes.length; ++i) {
    var nodes0 =3D this.rel.evaluate(ctx.clone(nodes[i], i, =
nodes)).nodeSetValue();
    for (var ii =3D 0; ii < nodes0.length; ++ii) {
      nodes1.push(nodes0[ii]);
    }
  }
  return new NodeSetValue(nodes1);
};

function FilterExpr(expr, predicate) {
  this.expr =3D expr;
  this.predicate =3D predicate;
}

FilterExpr.prototype.evaluate =3D function(ctx) {
  var nodes =3D this.expr.evaluate(ctx).nodeSetValue();
  for (var i =3D 0; i < this.predicate.length; ++i) {
    var nodes0 =3D nodes;
    nodes =3D [];
    for (var j =3D 0; j < nodes0.length; ++j) {
      var n =3D nodes0[j];
      if (this.predicate[i].evaluate(ctx.clone(n, j, =
nodes0)).booleanValue()) {
        nodes.push(n);
      }
    }
  }

  return new NodeSetValue(nodes);
}

function UnaryMinusExpr(expr) {
  this.expr =3D expr;
}

UnaryMinusExpr.prototype.evaluate =3D function(ctx) {
  return new NumberValue(-this.expr.evaluate(ctx).numberValue());
};

function BinaryExpr(expr1, op, expr2) {
  this.expr1 =3D expr1;
  this.expr2 =3D expr2;
  this.op =3D op;
}

BinaryExpr.prototype.evaluate =3D function(ctx) {
  var ret;
  switch (this.op.value) {
    case 'or':
      ret =3D new BooleanValue(this.expr1.evaluate(ctx).booleanValue() =
||
                             this.expr2.evaluate(ctx).booleanValue());
      break;

    case 'and':
      ret =3D new BooleanValue(this.expr1.evaluate(ctx).booleanValue() =
&&
                             this.expr2.evaluate(ctx).booleanValue());
      break;

    case '+':
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() +
                            this.expr2.evaluate(ctx).numberValue());
      break;

    case '-':
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() -
                            this.expr2.evaluate(ctx).numberValue());
      break;

    case '*':
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() *
                            this.expr2.evaluate(ctx).numberValue());
      break;

    case 'mod':
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() %
                            this.expr2.evaluate(ctx).numberValue());
      break;

    case 'div':
      ret =3D new NumberValue(this.expr1.evaluate(ctx).numberValue() /
                            this.expr2.evaluate(ctx).numberValue());
      break;

    case '=3D':
      ret =3D this.compare(ctx, function(x1, x2) { return x1 =3D=3D x2; =
});
      break;

    case '!=3D':
      ret =3D this.compare(ctx, function(x1, x2) { return x1 !=3D x2; =
});
      break;

    case '<':
      ret =3D this.compare(ctx, function(x1, x2) { return x1 < x2; });
      break;

    case '<=3D':
      ret =3D this.compare(ctx, function(x1, x2) { return x1 <=3D x2; =
});
      break;

    case '>':
      ret =3D this.compare(ctx, function(x1, x2) { return x1 > x2; });
      break;

    case '>=3D':
      ret =3D this.compare(ctx, function(x1, x2) { return x1 >=3D x2; =
});
      break;

    default:
      alert('BinaryExpr.evaluate: ' + this.op.value);
  }
  return ret;
};

BinaryExpr.prototype.compare =3D function(ctx, cmp) {
  var v1 =3D this.expr1.evaluate(ctx);
  var v2 =3D this.expr2.evaluate(ctx);

  var ret;
  if (v1.type =3D=3D 'node-set' && v2.type =3D=3D 'node-set') {
    var n1 =3D v1.nodeSetValue();
    var n2 =3D v2.nodeSetValue();
    ret =3D false;
    for (var i1 =3D 0; i1 < n1.length; ++i1) {
      for (var i2 =3D 0; i2 < n2.length; ++i2) {
        if (cmp(xmlValue(n1[i1]), xmlValue(n2[i2]))) {
          ret =3D true;
          // Break outer loop. Labels confuse the jscompiler and we
          // don't use them.
          i2 =3D n2.length;
          i1 =3D n1.length;
        }
      }
    }

  } else if (v1.type =3D=3D 'node-set' || v2.type =3D=3D 'node-set') {

    if (v1.type =3D=3D 'number') {
      var s =3D v1.numberValue();
      var n =3D v2.nodeSetValue();

      ret =3D false;
      for (var i =3D 0;  i < n.length; ++i) {
        var nn =3D xmlValue(n[i]) - 0;
        if (cmp(s, nn)) {
          ret =3D true;
          break;
        }
      }

    } else if (v2.type =3D=3D 'number') {
      var n =3D v1.nodeSetValue();
      var s =3D v2.numberValue();

      ret =3D false;
      for (var i =3D 0;  i < n.length; ++i) {
        var nn =3D xmlValue(n[i]) - 0;
        if (cmp(nn, s)) {
          ret =3D true;
          break;
        }
      }

    } else if (v1.type =3D=3D 'string') {
      var s =3D v1.stringValue();
      var n =3D v2.nodeSetValue();

      ret =3D false;
      for (var i =3D 0;  i < n.length; ++i) {
        var nn =3D xmlValue(n[i]);
        if (cmp(s, nn)) {
          ret =3D true;
          break;
        }
      }

    } else if (v2.type =3D=3D 'string') {
      var n =3D v1.nodeSetValue();
      var s =3D v2.stringValue();

      ret =3D false;
      for (var i =3D 0;  i < n.length; ++i) {
        var nn =3D xmlValue(n[i]);
        if (cmp(nn, s)) {
          ret =3D true;
          break;
        }
      }

    } else {
      ret =3D cmp(v1.booleanValue(), v2.booleanValue());
    }

  } else if (v1.type =3D=3D 'boolean' || v2.type =3D=3D 'boolean') {
    ret =3D cmp(v1.booleanValue(), v2.booleanValue());

  } else if (v1.type =3D=3D 'number' || v2.type =3D=3D 'number') {
    ret =3D cmp(v1.numberValue(), v2.numberValue());

  } else {
    ret =3D cmp(v1.stringValue(), v2.stringValue());
  }

  return new BooleanValue(ret);
}

function LiteralExpr(value) {
  this.value =3D value;
}

LiteralExpr.prototype.evaluate =3D function(ctx) {
  return new StringValue(this.value);
};

function NumberExpr(value) {
  this.value =3D value;
}

NumberExpr.prototype.evaluate =3D function(ctx) {
  return new NumberValue(this.value);
};

function VariableExpr(name) {
  this.name =3D name;
}

VariableExpr.prototype.evaluate =3D function(ctx) {
  return ctx.getVariable(this.name);
}

// Factory functions for semantic values (i.e. Expressions) of the
// productions in the grammar. When a production is matched to reduce
// the current parse state stack, the function is called with the
// semantic values of the matched elements as arguments, and returns
// another semantic value. The semantic value is a node of the parse
// tree, an expression object with an evaluate() method that evaluates =
the
// expression in an actual context. These factory functions are used
// in the specification of the grammar rules, below.

function makeTokenExpr(m) {
  return new TokenExpr(m);
}

function passExpr(e) {
  return e;
}

function makeLocationExpr1(slash, rel) {
  rel.absolute =3D true;
  return rel;
}

function makeLocationExpr2(dslash, rel) {
  rel.absolute =3D true;
  rel.prependStep(makeAbbrevStep(dslash.value));
  return rel;
}

function makeLocationExpr3(slash) {
  var ret =3D new LocationExpr();
  ret.appendStep(makeAbbrevStep('.'));
  ret.absolute =3D true;
  return ret;
}

function makeLocationExpr4(dslash) {
  var ret =3D new LocationExpr();
  ret.absolute =3D true;
  ret.appendStep(makeAbbrevStep(dslash.value));
  return ret;
}

function makeLocationExpr5(step) {
  var ret =3D new LocationExpr();
  ret.appendStep(step);
  return ret;
}

function makeLocationExpr6(rel, slash, step) {
  rel.appendStep(step);
  return rel;
}

function makeLocationExpr7(rel, dslash, step) {
  rel.appendStep(makeAbbrevStep(dslash.value));
  return rel;
}

function makeStepExpr1(dot) {
  return makeAbbrevStep(dot.value);
}

function makeStepExpr2(ddot) {
  return makeAbbrevStep(ddot.value);
}

function makeStepExpr3(axisname, axis, nodetest) {
  return new StepExpr(axisname.value, nodetest);
}

function makeStepExpr4(at, nodetest) {
  return new StepExpr('attribute', nodetest);
}

function makeStepExpr5(nodetest) {
  return new StepExpr('child', nodetest);
}

function makeStepExpr6(step, predicate) {
  step.appendPredicate(predicate);
  return step;
}

function makeAbbrevStep(abbrev) {
  switch (abbrev) {
  case '//':
    return new StepExpr('descendant-or-self', new NodeTestAny);

  case '.':
    return new StepExpr('self', new NodeTestAny);

  case '..':
    return new StepExpr('parent', new NodeTestAny);
  }
}

function makeNodeTestExpr1(asterisk) {
  return new NodeTestElement;
}

function makeNodeTestExpr2(ncname, colon, asterisk) {
  return new NodeTestNC(ncname.value);
}

function makeNodeTestExpr3(qname) {
  return new NodeTestName(qname.value);
}

function makeNodeTestExpr4(typeo, parenc) {
  var type =3D typeo.value.replace(/\s*\($/, '');
  switch(type) {
  case 'node':
    return new NodeTestAny;

  case 'text':
    return new NodeTestText;

  case 'comment':
    return new NodeTestComment;

  case 'processing-instruction':
    return new NodeTestPI;
  }
}

function makeNodeTestExpr5(typeo, target, parenc) {
  var type =3D typeo.replace(/\s*\($/, '');
  if (type !=3D 'processing-instruction') {
    throw type + ' ' + Error().stack;
  }
  return new NodeTestPI(target.value);
}

function makePredicateExpr(pareno, expr, parenc) {
  return new PredicateExpr(expr);
}

function makePrimaryExpr(pareno, expr, parenc) {
  return expr;
}

function makeFunctionCallExpr1(name, pareno, parenc) {
  return new FunctionCallExpr(name);
}

function makeFunctionCallExpr2(name, pareno, arg1, args, parenc) {
  var ret =3D new FunctionCallExpr(name);
  ret.appendArg(arg1);
  for (var i =3D 0; i < args.length; ++i) {
    ret.appendArg(args[i]);
  }
  return ret;
}

function makeArgumentExpr(comma, expr) {
  return expr;
}

function makeUnionExpr(expr1, pipe, expr2) {
  return new UnionExpr(expr1, expr2);
}

function makePathExpr1(filter, slash, rel) {
  return new PathExpr(filter, rel);
}

function makePathExpr2(filter, dslash, rel) {
  rel.prependStep(makeAbbrevStep(dslash.value));
  return new PathExpr(filter, rel);
}

function makeFilterExpr(expr, predicates) {
  if (predicates.length > 0) {
    return new FilterExpr(expr, predicates);
  } else {
    return expr;
  }
}

function makeUnaryMinusExpr(minus, expr) {
  return new UnaryMinusExpr(expr);
}

function makeBinaryExpr(expr1, op, expr2) {
  return new BinaryExpr(expr1, op, expr2);
}

function makeLiteralExpr(token) {
  // remove quotes from the parsed value:
  var value =3D token.value.substring(1, token.value.length - 1);
  return new LiteralExpr(value);
}

function makeNumberExpr(token) {
  return new NumberExpr(token.value);
}

function makeVariableReference(dollar, name) {
  return new VariableExpr(name.value);
}

// Used before parsing for optimization of common simple cases. See
// the begin of xpathParse() for which they are.
function makeSimpleExpr(expr) {
  if (expr.charAt(0) =3D=3D '$') {
    return new VariableExpr(expr.substr(1));
  } else if (expr.charAt(0) =3D=3D '@') {
    var a =3D new NodeTestName(expr.substr(1));
    var b =3D new StepExpr('attribute', a);
    var c =3D new LocationExpr();
    c.appendStep(b);
    return c;
  } else if (expr.match(/^[0-9]+$/)) {
    return new NumberExpr(expr);
  } else {
    var a =3D new NodeTestName(expr);
    var b =3D new StepExpr('child', a);
    var c =3D new LocationExpr();
    c.appendStep(b);
    return c;
  }
}

function makeSimpleExpr2(expr) {
  var steps =3D expr.split('/');
  var c =3D new LocationExpr();
  for (var i =3D 0; i < steps.length; i++) {
    var a =3D new NodeTestName(steps[i]);
    var b =3D new StepExpr('child', a);
    c.appendStep(b);
  }
  return c;
}

// The axes of XPath expressions.

var xpathAxis =3D {
  ANCESTOR_OR_SELF: 'ancestor-or-self',
  ANCESTOR: 'ancestor',
  ATTRIBUTE: 'attribute',
  CHILD: 'child',
  DESCENDANT_OR_SELF: 'descendant-or-self',
  DESCENDANT: 'descendant',
  FOLLOWING_SIBLING: 'following-sibling',
  FOLLOWING: 'following',
  NAMESPACE: 'namespace',
  PARENT: 'parent',
  PRECEDING_SIBLING: 'preceding-sibling',
  PRECEDING: 'preceding',
  SELF: 'self'
};

var xpathAxesRe =3D [
    xpathAxis.ANCESTOR_OR_SELF,
    xpathAxis.ANCESTOR,
    xpathAxis.ATTRIBUTE,
    xpathAxis.CHILD,
    xpathAxis.DESCENDANT_OR_SELF,
    xpathAxis.DESCENDANT,
    xpathAxis.FOLLOWING_SIBLING,
    xpathAxis.FOLLOWING,
    xpathAxis.NAMESPACE,
    xpathAxis.PARENT,
    xpathAxis.PRECEDING_SIBLING,
    xpathAxis.PRECEDING,
    xpathAxis.SELF
].join('|');


// The tokens of the language. The label property is just used for
// generating debug output. The prec property is the precedence used
// for shift/reduce resolution. Default precedence is 0 as a lookahead
// token and 2 on the stack. TODO(mesch): this is certainly not
// necessary and too complicated. Simplify this!

// NOTE: tabular formatting is the big exception, but here it should
// be OK.

var TOK_PIPE =3D   { label: "|",   prec:   17, re: new RegExp("^\\|") };
var TOK_DSLASH =3D { label: "//",  prec:   19, re: new RegExp("^//")  };
var TOK_SLASH =3D  { label: "/",   prec:   30, re: new RegExp("^/")   };
var TOK_AXIS =3D   { label: "::",  prec:   20, re: new RegExp("^::")  };
var TOK_COLON =3D  { label: ":",   prec: 1000, re: new RegExp("^:")  };
var TOK_AXISNAME =3D { label: "[axis]", re: new RegExp('^(' + =
xpathAxesRe + ')') };
var TOK_PARENO =3D { label: "(",   prec:   34, re: new RegExp("^\\(") };
var TOK_PARENC =3D { label: ")",               re: new RegExp("^\\)") };
var TOK_DDOT =3D   { label: "..",  prec:   34, re: new RegExp("^\\.\\.") =
};
var TOK_DOT =3D    { label: ".",   prec:   34, re: new RegExp("^\\.") };
var TOK_AT =3D     { label: "@",   prec:   34, re: new RegExp("^@")   };

var TOK_COMMA =3D  { label: ",",               re: new RegExp("^,") };

var TOK_OR =3D     { label: "or",  prec:   10, re: new RegExp("^or\\b") =
};
var TOK_AND =3D    { label: "and", prec:   11, re: new RegExp("^and\\b") =
};
var TOK_EQ =3D     { label: "=3D",   prec:   12, re: new RegExp("^=3D")  =
 };
var TOK_NEQ =3D    { label: "!=3D",  prec:   12, re: new RegExp("^!=3D") =
 };
var TOK_GE =3D     { label: ">=3D",  prec:   13, re: new RegExp("^>=3D") =
 };
var TOK_GT =3D     { label: ">",   prec:   13, re: new RegExp("^>")   };
var TOK_LE =3D     { label: "<=3D",  prec:   13, re: new RegExp("^<=3D") =
 };
var TOK_LT =3D     { label: "<",   prec:   13, re: new RegExp("^<")   };
var TOK_PLUS =3D   { label: "+",   prec:   14, re: new RegExp("^\\+"), =
left: true };
var TOK_MINUS =3D  { label: "-",   prec:   14, re: new RegExp("^\\-"), =
left: true };
var TOK_DIV =3D    { label: "div", prec:   15, re: new =
RegExp("^div\\b"), left: true };
var TOK_MOD =3D    { label: "mod", prec:   15, re: new =
RegExp("^mod\\b"), left: true };

var TOK_BRACKO =3D { label: "[",   prec:   32, re: new RegExp("^\\[") };
var TOK_BRACKC =3D { label: "]",               re: new RegExp("^\\]") };
var TOK_DOLLAR =3D { label: "$",               re: new RegExp("^\\$") };

var TOK_NCNAME =3D { label: "[ncname]", re: new =
RegExp('^[a-z][-\\w]*','i') };

var TOK_ASTERISK =3D { label: "*", prec: 15, re: new RegExp("^\\*"), =
left: true };
var TOK_LITERALQ =3D { label: "[litq]", prec: 20, re: new =
RegExp("^'[^\\']*'") };
var TOK_LITERALQQ =3D {
  label: "[litqq]",
  prec: 20,
  re: new RegExp('^"[^\\"]*"')
};

var TOK_NUMBER  =3D {
  label: "[number]",
  prec: 35,
  re: new RegExp('^\\d+(\\.\\d*)?') };

var TOK_QNAME =3D {
  label: "[qname]",
  re: new RegExp('^([a-z][-\\w]*:)?[a-z][-\\w]*','i')
};

var TOK_NODEO =3D {
  label: "[nodetest-start]",
  re: new RegExp('^(processing-instruction|comment|text|node)\\(')
};

// The table of the tokens of our grammar, used by the lexer: first
// column the tag, second column a regexp to recognize it in the
// input, third column the precedence of the token, fourth column a
// factory function for the semantic value of the token.
//
// NOTE: order of this list is important, because the first match
// counts. Cf. DDOT and DOT, and AXIS and COLON.

var xpathTokenRules =3D [
    TOK_DSLASH,
    TOK_SLASH,
    TOK_DDOT,
    TOK_DOT,
    TOK_AXIS,
    TOK_COLON,
    TOK_AXISNAME,
    TOK_NODEO,
    TOK_PARENO,
    TOK_PARENC,
    TOK_BRACKO,
    TOK_BRACKC,
    TOK_AT,
    TOK_COMMA,
    TOK_OR,
    TOK_AND,
    TOK_NEQ,
    TOK_EQ,
    TOK_GE,
    TOK_GT,
    TOK_LE,
    TOK_LT,
    TOK_PLUS,
    TOK_MINUS,
    TOK_ASTERISK,
    TOK_PIPE,
    TOK_MOD,
    TOK_DIV,
    TOK_LITERALQ,
    TOK_LITERALQQ,
    TOK_NUMBER,
    TOK_QNAME,
    TOK_NCNAME,
    TOK_DOLLAR
];

// All the nonterminals of the grammar. The nonterminal objects are
// identified by object identity; the labels are used in the debug
// output only.
var XPathLocationPath =3D { label: "LocationPath" };
var XPathRelativeLocationPath =3D { label: "RelativeLocationPath" };
var XPathAbsoluteLocationPath =3D { label: "AbsoluteLocationPath" };
var XPathStep =3D { label: "Step" };
var XPathNodeTest =3D { label: "NodeTest" };
var XPathPredicate =3D { label: "Predicate" };
var XPathLiteral =3D { label: "Literal" };
var XPathExpr =3D { label: "Expr" };
var XPathPrimaryExpr =3D { label: "PrimaryExpr" };
var XPathVariableReference =3D { label: "Variablereference" };
var XPathNumber =3D { label: "Number" };
var XPathFunctionCall =3D { label: "FunctionCall" };
var XPathArgumentRemainder =3D { label: "ArgumentRemainder" };
var XPathPathExpr =3D { label: "PathExpr" };
var XPathUnionExpr =3D { label: "UnionExpr" };
var XPathFilterExpr =3D { label: "FilterExpr" };
var XPathDigits =3D { label: "Digits" };

var xpathNonTerminals =3D [
    XPathLocationPath,
    XPathRelativeLocationPath,
    XPathAbsoluteLocationPath,
    XPathStep,
    XPathNodeTest,
    XPathPredicate,
    XPathLiteral,
    XPathExpr,
    XPathPrimaryExpr,
    XPathVariableReference,
    XPathNumber,
    XPathFunctionCall,
    XPathArgumentRemainder,
    XPathPathExpr,
    XPathUnionExpr,
    XPathFilterExpr,
    XPathDigits
];

// Quantifiers that are used in the productions of the grammar.
var Q_01 =3D { label: "?" };
var Q_MM =3D { label: "*" };
var Q_1M =3D { label: "+" };

// Tag for left associativity (right assoc is implied by undefined).
var ASSOC_LEFT =3D true;

// The productions of the grammar. Columns of the table:
//
// - target nonterminal,
// - pattern,
// - precedence,
// - semantic value factory
//
// The semantic value factory is a function that receives parse tree
// nodes from the stack frames of the matched symbols as arguments and
// returns an a node of the parse tree. The node is stored in the top
// stack frame along with the target object of the rule. The node in
// the parse tree is an expression object that has an evaluate() method
// and thus evaluates XPath expressions.
//
// The precedence is used to decide between reducing and shifting by
// comparing the precendence of the rule that is candidate for
// reducing with the precedence of the look ahead token. Precedence of
// -1 means that the precedence of the tokens in the pattern is used
// instead. TODO: It shouldn't be necessary to explicitly assign
// precedences to rules.

var xpathGrammarRules =3D
  [
   [ XPathLocationPath, [ XPathRelativeLocationPath ], 18,
     passExpr ],
   [ XPathLocationPath, [ XPathAbsoluteLocationPath ], 18,
     passExpr ],

   [ XPathAbsoluteLocationPath, [ TOK_SLASH, XPathRelativeLocationPath =
], 18,=20
     makeLocationExpr1 ],
   [ XPathAbsoluteLocationPath, [ TOK_DSLASH, XPathRelativeLocationPath =
], 18,
     makeLocationExpr2 ],

   [ XPathAbsoluteLocationPath, [ TOK_SLASH ], 0,
     makeLocationExpr3 ],
   [ XPathAbsoluteLocationPath, [ TOK_DSLASH ], 0,
     makeLocationExpr4 ],

   [ XPathRelativeLocationPath, [ XPathStep ], 31,
     makeLocationExpr5 ],
   [ XPathRelativeLocationPath,
     [ XPathRelativeLocationPath, TOK_SLASH, XPathStep ], 31,
     makeLocationExpr6 ],
   [ XPathRelativeLocationPath,
     [ XPathRelativeLocationPath, TOK_DSLASH, XPathStep ], 31,
     makeLocationExpr7 ],

   [ XPathStep, [ TOK_DOT ], 33,
     makeStepExpr1 ],
   [ XPathStep, [ TOK_DDOT ], 33,
     makeStepExpr2 ],
   [ XPathStep,
     [ TOK_AXISNAME, TOK_AXIS, XPathNodeTest ], 33,
     makeStepExpr3 ],
   [ XPathStep, [ TOK_AT, XPathNodeTest ], 33,
     makeStepExpr4 ],
   [ XPathStep, [ XPathNodeTest ], 33,
     makeStepExpr5 ],
   [ XPathStep, [ XPathStep, XPathPredicate ], 33,
     makeStepExpr6 ],

   [ XPathNodeTest, [ TOK_ASTERISK ], 33,
     makeNodeTestExpr1 ],
   [ XPathNodeTest, [ TOK_NCNAME, TOK_COLON, TOK_ASTERISK ], 33,
     makeNodeTestExpr2 ],
   [ XPathNodeTest, [ TOK_QNAME ], 33,
     makeNodeTestExpr3 ],
   [ XPathNodeTest, [ TOK_NODEO, TOK_PARENC ], 33,
     makeNodeTestExpr4 ],
   [ XPathNodeTest, [ TOK_NODEO, XPathLiteral, TOK_PARENC ], 33,
     makeNodeTestExpr5 ],

   [ XPathPredicate, [ TOK_BRACKO, XPathExpr, TOK_BRACKC ], 33,
     makePredicateExpr ],

   [ XPathPrimaryExpr, [ XPathVariableReference ], 33,
     passExpr ],
   [ XPathPrimaryExpr, [ TOK_PARENO, XPathExpr, TOK_PARENC ], 33,
     makePrimaryExpr ],
   [ XPathPrimaryExpr, [ XPathLiteral ], 30,
     passExpr ],
   [ XPathPrimaryExpr, [ XPathNumber ], 30,
     passExpr ],
   [ XPathPrimaryExpr, [ XPathFunctionCall ], 30,
     passExpr ],

   [ XPathFunctionCall, [ TOK_QNAME, TOK_PARENO, TOK_PARENC ], -1,
     makeFunctionCallExpr1 ],
   [ XPathFunctionCall,
     [ TOK_QNAME, TOK_PARENO, XPathExpr, XPathArgumentRemainder, Q_MM,
       TOK_PARENC ], -1,
     makeFunctionCallExpr2 ],
   [ XPathArgumentRemainder, [ TOK_COMMA, XPathExpr ], -1,
     makeArgumentExpr ],

   [ XPathUnionExpr, [ XPathPathExpr ], 20,
     passExpr ],
   [ XPathUnionExpr, [ XPathUnionExpr, TOK_PIPE, XPathPathExpr ], 20,
     makeUnionExpr ],

   [ XPathPathExpr, [ XPathLocationPath ], 20,=20
     passExpr ],=20
   [ XPathPathExpr, [ XPathFilterExpr ], 19,=20
     passExpr ],=20
   [ XPathPathExpr,=20
     [ XPathFilterExpr, TOK_SLASH, XPathRelativeLocationPath ], 20,
     makePathExpr1 ],
   [ XPathPathExpr,
     [ XPathFilterExpr, TOK_DSLASH, XPathRelativeLocationPath ], 20,
     makePathExpr2 ],

   [ XPathFilterExpr, [ XPathPrimaryExpr, XPathPredicate, Q_MM ], 20,
     makeFilterExpr ],=20

   [ XPathExpr, [ XPathPrimaryExpr ], 16,
     passExpr ],
   [ XPathExpr, [ XPathUnionExpr ], 16,
     passExpr ],

   [ XPathExpr, [ TOK_MINUS, XPathExpr ], -1,
     makeUnaryMinusExpr ],

   [ XPathExpr, [ XPathExpr, TOK_OR, XPathExpr ], -1,
     makeBinaryExpr ],
   [ XPathExpr, [ XPathExpr, TOK_AND, XPathExpr ], -1,
     makeBinaryExpr ],

   [ XPathExpr, [ XPathExpr, TOK_EQ, XPathExpr ], -1,
     makeBinaryExpr ],
   [ XPathExpr, [ XPathExpr, TOK_NEQ, XPathExpr ], -1,
     makeBinaryExpr ],

   [ XPathExpr, [ XPathExpr, TOK_LT, XPathExpr ], -1,
     makeBinaryExpr ],
   [ XPathExpr, [ XPathExpr, TOK_LE, XPathExpr ], -1,
     makeBinaryExpr ],
   [ XPathExpr, [ XPathExpr, TOK_GT, XPathExpr ], -1,
     makeBinaryExpr ],
   [ XPathExpr, [ XPathExpr, TOK_GE, XPathExpr ], -1,
     makeBinaryExpr ],

   [ XPathExpr, [ XPathExpr, TOK_PLUS, XPathExpr ], -1,
     makeBinaryExpr, ASSOC_LEFT ],
   [ XPathExpr, [ XPathExpr, TOK_MINUS, XPathExpr ], -1,
     makeBinaryExpr, ASSOC_LEFT ],

   [ XPathExpr, [ XPathExpr, TOK_ASTERISK, XPathExpr ], -1,
     makeBinaryExpr, ASSOC_LEFT ],
   [ XPathExpr, [ XPathExpr, TOK_DIV, XPathExpr ], -1,
     makeBinaryExpr, ASSOC_LEFT ],
   [ XPathExpr, [ XPathExpr, TOK_MOD, XPathExpr ], -1,
     makeBinaryExpr, ASSOC_LEFT ],

   [ XPathLiteral, [ TOK_LITERALQ ], -1,
     makeLiteralExpr ],
   [ XPathLiteral, [ TOK_LITERALQQ ], -1,
     makeLiteralExpr ],

   [ XPathNumber, [ TOK_NUMBER ], -1,
     makeNumberExpr ],

   [ XPathVariableReference, [ TOK_DOLLAR, TOK_QNAME ], 200,
     makeVariableReference ]
   ];

// That function computes some optimizations of the above data
// structures and will be called right here. It merely takes the
// counter variables out of the global scope.

var xpathRules =3D [];

function xpathParseInit() {
  if (xpathRules.length) {
    return;
  }

  // Some simple optimizations for the xpath expression parser: sort
  // grammar rules descending by length, so that the longest match is
  // first found.

  xpathGrammarRules.sort(function(a,b) {
    var la =3D a[1].length;
    var lb =3D b[1].length;
    if (la < lb) {
      return 1;
    } else if (la > lb) {
      return -1;
    } else {
      return 0;
    }
  });

  var k =3D 1;
  for (var i =3D 0; i < xpathNonTerminals.length; ++i) {
    xpathNonTerminals[i].key =3D k++;
  }

  for (i =3D 0; i < xpathTokenRules.length; ++i) {
    xpathTokenRules[i].key =3D k++;
  }

  if (xpathdebug)
  Log.write('XPath parse INIT: ' + k + ' rules');

  // Another slight optimization: sort the rules into bins according
  // to the last element (observing quantifiers), so we can restrict
  // the match against the stack to the subest of rules that match the
  // top of the stack.
  //
  // TODO(mesch): What we actually want is to compute states as in
  // bison, so that we don't have to do any explicit and iterated
  // match against the stack.

  function push_(array, position, element) {
    if (!array[position]) {
      array[position] =3D [];
    }
    array[position].push(element);
  }

  for (i =3D 0; i < xpathGrammarRules.length; ++i) {
    var rule =3D xpathGrammarRules[i];
    var pattern =3D rule[1];

    for (var j =3D pattern.length - 1; j >=3D 0; --j) {
      if (pattern[j] =3D=3D Q_1M) {
        push_(xpathRules, pattern[j-1].key, rule);
        break;
       =20
      } else if (pattern[j] =3D=3D Q_MM || pattern[j] =3D=3D Q_01) {
        push_(xpathRules, pattern[j-1].key, rule);
        --j;

      } else {
        push_(xpathRules, pattern[j].key, rule);
        break;
      }
    }
  }

  if (xpathdebug)
  Log.write('XPath parse INIT: ' + xpathRules.length + ' rule bins');
 =20
  var sum =3D 0;
  mapExec(xpathRules, function(i) {
    if (i) {
      sum +=3D i.length;
    }
  });
 =20
  if (xpathdebug)
  Log.write('XPath parse INIT: ' + (sum / xpathRules.length) + ' average =
bin size');
}

// Local utility functions that are used by the lexer or parser.

function xpathCollectDescendants(nodelist, node) {
  for (var n =3D node.firstChild; n; n =3D n.nextSibling) {
    nodelist.push(n);
    arguments.callee(nodelist, n);
  }
}

function xpathCollectDescendantsReverse(nodelist, node) {
  for (var n =3D node.lastChild; n; n =3D n.previousSibling) {
    nodelist.push(n);
    arguments.callee(nodelist, n);
  }
}


// The entry point for the library: match an expression against a DOM
// node. Returns an XPath value.
function xpathDomEval(expr, node) {
  var expr1 =3D xpathParse(expr);
  var ret =3D expr1.evaluate(new ExprContext(node));
  return ret;
}

// Utility function to sort a list of nodes. Used by xsltSort() and
// nxslSelect().
function xpathSort(input, sort) {
  if (sort.length =3D=3D 0) {
    return;
  }

  var sortlist =3D [];

  for (var i =3D 0; i < input.nodelist.length; ++i) {
    var node =3D input.nodelist[i];
    var sortitem =3D { node: node, key: [] };
    var context =3D input.clone(node, 0, [ node ]);
   =20
    for (var j =3D 0; j < sort.length; ++j) {
      var s =3D sort[j];
      var value =3D s.expr.evaluate(context);

      var evalue;
      if (s.type =3D=3D 'text') {
        evalue =3D value.stringValue();
      } else if (s.type =3D=3D 'number') {
        evalue =3D value.numberValue();
      }
      sortitem.key.push({ value: evalue, order: s.order });
    }

    // Make the sort stable by adding a lowest priority sort by
    // id. This is very convenient and furthermore required by the
    // spec ([XSLT] - Section 10 Sorting).
    sortitem.key.push({ value: i, order: 'ascending' });

    sortlist.push(sortitem);
  }

  sortlist.sort(xpathSortByKey);

  var nodes =3D [];
  for (var i =3D 0; i < sortlist.length; ++i) {
    nodes.push(sortlist[i].node);
  }
  input.nodelist =3D nodes;
  input.setNode(nodes[0], 0);
}


// Sorts by all order criteria defined. According to the JavaScript
// spec ([ECMA] Section 11.8.5), the compare operators compare strings
// as strings and numbers as numbers.
//
// NOTE: In browsers which do not follow the spec, this breaks only in
// the case that numbers should be sorted as strings, which is very
// uncommon.

function xpathSortByKey(v1, v2) {
  // NOTE: Sort key vectors of different length never occur in
  // xsltSort.

  for (var i =3D 0; i < v1.key.length; ++i) {
    var o =3D v1.key[i].order =3D=3D 'descending' ? -1 : 1;
    if (v1.key[i].value > v2.key[i].value) {
      return +1 * o;
    } else if (v1.key[i].value < v2.key[i].value) {
      return -1 * o;
    }
  }

  return 0;
}


// Copyright (c) 2005, Google Inc.
// All rights reserved.
//=20
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions =
are
// met:
//        =20
//  * Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
//=20
//  * Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in =
the
//    documentation and/or other materials provided with the
//    distribution.
//=20
//  * Neither the name of Google Inc. nor the names of its contributors
//    may be used to endorse or promote products derived from this
//    software without specific prior written permission.
//=20
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Miscellania that support the ajaxslt implementation.
//
// Author: Steffen Meschkat <mesch@google.com>
//

function el(i) {
  return document.getElementById(i);
}

function px(x) {
  return x + 'px';
}

// Split a string s at all occurrences of character c. This is like
// the split() method of the string object, but IE omits empty
// strings, which violates the invariant (s.split(x).join(x) =3D=3D s).
function stringSplit(s, c) {
  var a =3D s.indexOf(c);
  if (a =3D=3D -1) {
    return [ s ];
  }
 =20
  var parts =3D [];
  parts.push(s.substr(0,a));
  while (a !=3D -1) {
    var a1 =3D s.indexOf(c, a + 1);
    if (a1 !=3D -1) {
      parts.push(s.substr(a + 1, a1 - a - 1));
    } else {
      parts.push(s.substr(a + 1));
    }=20
    a =3D a1;
  }

  return parts;
}

// Returns the text value if a node; for nodes without children this
// is the nodeValue, for nodes with children this is the concatenation
// of the value of all children.
function xmlValue(node) {
  if (!node) {
    return '';
  }

  var ret =3D '';
  if (node.nodeType =3D=3D DOM_TEXT_NODE ||
      node.nodeType =3D=3D DOM_CDATA_SECTION_NODE ||
      node.nodeType =3D=3D DOM_ATTRIBUTE_NODE) {
    ret +=3D node.nodeValue;

  } else if (node.nodeType =3D=3D DOM_ELEMENT_NODE ||
             node.nodeType =3D=3D DOM_DOCUMENT_NODE ||
             node.nodeType =3D=3D DOM_DOCUMENT_FRAGMENT_NODE) {
    for (var i =3D 0; i < node.childNodes.length; ++i) {
      ret +=3D arguments.callee(node.childNodes[i]);
    }
  }
  return ret;
}

// Returns the representation of a node as XML text.
function xmlText(node) {
  var ret =3D '';
  if (node.nodeType =3D=3D DOM_TEXT_NODE) {
    ret +=3D xmlEscapeText(node.nodeValue);
   =20
  } else if (node.nodeType =3D=3D DOM_ELEMENT_NODE) {
    ret +=3D '<' + node.nodeName;
    for (var i =3D 0; i < node.attributes.length; ++i) {
      var a =3D node.attributes[i];
      if (a && a.nodeName && a.nodeValue) {
        ret +=3D ' ' + a.nodeName;
        ret +=3D '=3D"' + xmlEscapeAttr(a.nodeValue) + '"';
      }
    }

    if (node.childNodes.length =3D=3D 0) {
      ret +=3D '/>';

    } else {
      ret +=3D '>';
      for (var i =3D 0; i < node.childNodes.length; ++i) {
        ret +=3D arguments.callee(node.childNodes[i]);
      }
      ret +=3D '</' + node.nodeName + '>';
    }
   =20
  } else if (node.nodeType =3D=3D DOM_DOCUMENT_NODE ||=20
             node.nodeType =3D=3D DOM_DOCUMENT_FRAGMENT_NODE) {
    for (var i =3D 0; i < node.childNodes.length; ++i) {
      ret +=3D arguments.callee(node.childNodes[i]);
    }
  }
 =20
  return ret;
}

// Applies the given function to each element of the array.
function mapExec(array, func) {
  for (var i =3D 0; i < array.length; ++i) {
    func(array[i]);
  }
}

// Returns an array that contains the return value of the given
// function applied to every element of the input array.
function mapExpr(array, func) {
  var ret =3D [];
  for (var i =3D 0; i < array.length; ++i) {
    ret.push(func(array[i]));
  }
  return ret;
};

// Reverses the given array in place.
function reverseInplace(array) {
  for (var i =3D 0; i < array.length / 2; ++i) {
    var h =3D array[i];
    var ii =3D array.length - i - 1;
    array[i] =3D array[ii];
    array[ii] =3D h;
  }
}

// Shallow-copies an array.
function copyArray(dst, src) {=20
  for (var i =3D 0; i < src.length; ++i) {
    dst.push(src[i]);
  }
}

function assert(b) {
  if (!b) {
    throw 'assertion failed';
  }
}

// Based on
// =
<http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-195=
0641247>
var DOM_ELEMENT_NODE =3D 1;
var DOM_ATTRIBUTE_NODE =3D 2;
var DOM_TEXT_NODE =3D 3;
var DOM_CDATA_SECTION_NODE =3D 4;
var DOM_ENTITY_REFERENCE_NODE =3D 5;
var DOM_ENTITY_NODE =3D 6;
var DOM_PROCESSING_INSTRUCTION_NODE =3D 7;
var DOM_COMMENT_NODE =3D 8;
var DOM_DOCUMENT_NODE =3D 9;
var DOM_DOCUMENT_TYPE_NODE =3D 10;
var DOM_DOCUMENT_FRAGMENT_NODE =3D 11;
var DOM_NOTATION_NODE =3D 12;


var xpathdebug =3D false; // trace xpath parsing
var xsltdebug =3D false; // trace xslt processing


// Escape XML special markup chracters: tag delimiter < > and entity
// reference start delimiter &. The escaped string can be used in XML
// text portions (i.e. between tags).
function xmlEscapeText(s) {
  return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, =
'&gt;');
}

// Escape XML special markup characters: tag delimiter < > entity
// reference start delimiter & and quotes ". The escaped string can be
// used in double quoted XML attribute value portions (i.e. in
// attributes within start tags).
function xmlEscapeAttr(s) {
  return xmlEscapeText(s).replace(/\"/g, '&quot;');
}

// Escape markup in XML text, but don't touch entity references. The
// escaped string can be used as XML text (i.e. between tags).
function xmlEscapeTags(s) {
  return s.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}

// An implementation of the debug log.=20

var logging__ =3D true;

function Log() {};

Log.lines =3D [];

Log.write =3D function(s) {
  if (logging__) {
    this.lines.push(xmlEscapeText(s));
    this.show();
  }
};

// Writes the given XML with every tag on a new line.
Log.writeXML =3D function(xml) {
  if (logging__) {
    var s0 =3D xml.replace(/</g, '\n<');
    var s1 =3D xmlEscapeText(s0);
    var s2 =3D s1.replace(/\s*\n(\s|\n)*/g, '<br/>');
    this.lines.push(s2);
    this.show();
  }
}

// Writes without any escaping
Log.writeRaw =3D function(s) {
  if (logging__) {
    this.lines.push(s);
    this.show();
  }
}

Log.clear =3D function() {
  if (logging__) {
    var l =3D this.div();
    l.innerHTML =3D '';
    this.lines =3D [];
  }
}

Log.show =3D function() {
  var l =3D this.div();
  l.innerHTML +=3D this.lines.join('<br/>') + '<br/>';
  this.lines =3D [];
  l.scrollTop =3D l.scrollHeight;
}

Log.div =3D function() {
  var l =3D document.getElementById('log');
  if (!l) {
    l =3D document.createElement('div');
    l.id =3D 'log';
    l.style.position =3D 'absolute';
    l.style.right =3D '5px';
    l.style.top =3D '5px';
    l.style.width =3D '250px';
    l.style.height =3D '150px';
    l.style.overflow =3D 'auto';
    l.style.backgroundColor =3D '#f0f0f0';
    l.style.border =3D '1px solid gray';
    l.style.fontSize =3D '10px';
    l.style.padding =3D '5px';
    document.body.appendChild(l);
  }
  return l;
}


function Timer() {}
Timer.start =3D function() {}
Timer.end =3D function() {}

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/x-javascript
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/spry/SpryData.js

/* SpryData.js - Revision: Spry Preview Release 1.3 */

// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions =
are met:
//
//   * Redistributions of source code must retain the above copyright =
notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright =
notice,
//     this list of conditions and the following disclaimer in the =
documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of Adobe Systems Incorporated nor the names of =
its
//     contributors may be used to endorse or promote products derived =
from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS =
"AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, =
THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR =
PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS =
BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR =
BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER =
IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR =
OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED =
OF THE
// POSSIBILITY OF SUCH DAMAGE.

var Spry; if (!Spry) Spry =3D {};

//////////////////////////////////////////////////////////////////////
//
// Spry.Utils
//
//////////////////////////////////////////////////////////////////////

if (!Spry.Utils) Spry.Utils =3D {};

Spry.Utils.msProgIDs =3D ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", =
"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];

Spry.Utils.createXMLHttpRequest =3D function()
{
	var req =3D null;
	try
	{
		if (window.XMLHttpRequest)
			req =3D new XMLHttpRequest();
		else if (window.ActiveXObject)
		{
			while (!req && Spry.Utils.msProgIDs.length)
			{
				try { req =3D new ActiveXObject(Spry.Utils.msProgIDs[0]); } catch =
(e) { req =3D null; }
				if (!req)
					Spry.Utils.msProgIDs.splice(0, 1);
			}
		}
	}
	catch (e) { req =3D null;	}

	if (!req)
		Spry.Debug.reportError("Failed to create an XMLHttpRequest object!" );

	return req;
};

Spry.Utils.loadURL =3D function(method, url, async, callback, opts)
{
	var req =3D new Spry.Utils.loadURL.Request();
	req.method =3D method;
	req.url =3D url;
	req.async =3D async;
	req.successCallback =3D callback;
	Spry.Utils.setOptions(req, opts);
=09
	try
	{
		req.xhRequest =3D Spry.Utils.createXMLHttpRequest();
		if (!req.xhRequest)
			return null;

		if (req.async)
			req.xhRequest.onreadystatechange =3D function() { =
Spry.Utils.loadURL.callback(req); };

		req.xhRequest.open(req.method, req.url, req.async, req.username, =
req.password);
	=09
		if (req.headers)
		{
			for (var name in req.headers)
				req.xhRequest.setRequestHeader(name, req.headers[name]);
		}

		req.xhRequest.send(req.postData);

		if (!req.async)
			Spry.Utils.loadURL.callback(req);
	}
	catch(e) { req =3D null; Spry.Debug.reportError("Exception caught while =
loading " + url + ": " + e.message); }

	return req;
};

Spry.Utils.loadURL.callback =3D function(req)
{
	if (!req || req.xhRequest.readyState !=3D 4)
		return;
	if (req.successCallback && (req.xhRequest.status =3D=3D 200 || =
req.xhRequest.status =3D=3D 0))
		req.successCallback(req);
	else if (req.errorCallback)
		req.errorCallback(req);
};

Spry.Utils.loadURL.Request =3D function()
{
	var props =3D Spry.Utils.loadURL.Request.props;
	var numProps =3D props.length;

	for (var i =3D 0; i < numProps; i++)
		this[props[i]] =3D null;

	this.method =3D "GET";
	this.async =3D true;
	this.headers =3D {};
};

Spry.Utils.loadURL.Request.props =3D [ "method", "url", "async", =
"username", "password", "postData", "successCallback", "errorCallback", =
"headers", "userData", "xhRequest" ];

Spry.Utils.loadURL.Request.prototype.extractRequestOptions =3D =
function(opts, undefineRequestProps)
{
	if (!opts)
		return;

	var props =3D Spry.Utils.loadURL.Request.props;
	var numProps =3D props.length;

	for (var i =3D 0; i < numProps; i++)
	{
		var prop =3D props[i];
		if (opts[prop] !=3D undefined)
		{
			this[prop] =3D opts[prop];
			if (undefineRequestProps)
				opts[prop] =3D undefined;
		}
	}
};

Spry.Utils.loadURL.Request.prototype.clone =3D function()
{
	var props =3D Spry.Utils.loadURL.Request.props;
	var numProps =3D props.length;
	var req =3D new Spry.Utils.loadURL.Request;
	for (var i =3D 0; i < numProps; i++)
		req[props[i]] =3D this[props[i]];
	if (this.headers)
	{
		req.headers =3D {};
		Spry.Utils.setOptions(req.headers, this.headers);
	}
	return req;
};

Spry.Utils.addEventListener =3D function(element, eventType, handler, =
capture)
{
	try
	{
		if (element.addEventListener)
			element.addEventListener(eventType, handler, capture);
		else if (element.attachEvent)
			element.attachEvent("on" + eventType, handler);
	}
	catch (e) {}
};

Spry.Utils.removeEventListener =3D function(element, eventType, handler, =
capture)
{
	try
	{
		if (element.removeEventListener)
			element.removeEventListener(eventType, handler, capture);
		else if (element.detachEvent)
			element.detachEvent("on" + eventType, handler);
	}
	catch (e) {}
};

Spry.Utils.addLoadListener =3D function(handler)
{
	if (typeof window.addEventListener !=3D 'undefined')
		window.addEventListener('load', handler, false);
	else if (typeof document.addEventListener !=3D 'undefined')
		document.addEventListener('load', handler, false);
	else if (typeof window.attachEvent !=3D 'undefined')
		window.attachEvent('onload', handler);
};

Spry.Utils.eval =3D function(str)
{
	// Call this method from your JS function when
	// you don't want the JS expression to access or
	// interfere with any local variables in your JS
	// function.

	return eval(str);
};

Spry.Utils.escapeQuotesAndLineBreaks =3D function(str)
{
	if (str)
	{
		str =3D str.replace(/\\/g, "\\\\");
		str =3D str.replace(/["']/g, "\\$&");
		str =3D str.replace(/\n/g, "\\n");
		str =3D str.replace(/\r/g, "\\r");
	}
	return str;
};

Spry.Utils.encodeEntities =3D function(str)
{
	if (str && str.search(/[&<>"]/) !=3D -1)
	{
		str =3D str.replace(/&/g, "&amp;");
		str =3D str.replace(/</g, "&lt;");
		str =3D str.replace(/>/g, "&gt;");
		str =3D str.replace(/"/g, "&quot;");
	}
	return str
};

Spry.Utils.decodeEntities =3D function(str)
{
	var d =3D Spry.Utils.decodeEntities.div;
	if (!d)
	{
		d =3D document.createElement('div');
		Spry.Utils.decodeEntities.div =3D d;
		if (!d) return str;
	}
	d.innerHTML =3D str;
	if (d.childNodes.length =3D=3D 1 && d.firstChild.nodeType =3D=3D 3 /* =
Node.TEXT_NODE */ && d.firstChild.nextSibling =3D=3D null)
		str =3D d.firstChild.data;
	else
	{
		// Hmmm, innerHTML processing of str produced content
		// we weren't expecting, so just replace entities we
		// expect folks will use in node attributes that contain
		// JavaScript.
		str =3D str.replace(/&lt;/, "<");
		str =3D str.replace(/&gt;/, ">");
		str =3D str.replace(/&quot;/, "\"");
		str =3D str.replace(/&amp;/, "&");
	}
	return str;
};

Spry.Utils.fixupIETagAttributes =3D function(inStr)
{
	var outStr =3D "";

	// Break the tag string into 3 pieces.

	var tagStart =3D inStr.match(/^<[^\s>]+\s*/)[0];
	var tagEnd =3D inStr.match(/\s*\/?>$/)[0];
	var tagAttrs =3D inStr.replace(/^<[^\s>]+\s*|\s*\/?>/g, "");

	// Write out the start of the tag.
	outStr +=3D tagStart;

	// If the tag has attributes, parse it out manually to avoid =
accidentally fixing up
	// attributes that contain JavaScript expressions.

	if (tagAttrs)
	{
		var startIndex =3D 0;
		var endIndex =3D 0;

		while (startIndex < tagAttrs.length)
		{
			// Find the '=3D' char of the attribute.
			while (tagAttrs.charAt(endIndex) !=3D '=3D' && endIndex < =
tagAttrs.length)
				++endIndex;

			// If we are at the end of the string, just write out what we've
			// collected.

			if (endIndex >=3D tagAttrs.length)
			{
				outStr +=3D tagAttrs.substring(startIndex, endIndex);
				break;
			}

			// Step past the '=3D' character and write out what we've
			// collected so far.

			++endIndex;
			outStr +=3D tagAttrs.substring(startIndex, endIndex);
			startIndex =3D endIndex;

			if (tagAttrs.charAt(endIndex) =3D=3D '"' || tagAttrs.charAt(endIndex) =
=3D=3D "'")
			{
				// Attribute is quoted. Advance us past the quoted value!
				var savedIndex =3D endIndex++;
				while (endIndex < tagAttrs.length)
				{
					if (tagAttrs.charAt(endIndex) =3D=3D tagAttrs.charAt(savedIndex))
					{
						endIndex++;
						break;
					}
					else if (tagAttrs.charAt(endIndex) =3D=3D "\\")
						endIndex++;
					endIndex++;
				}

				outStr +=3D tagAttrs.substring(startIndex, endIndex);
				startIndex =3D endIndex;
			}
			else
			{
				// This attribute value wasn't quoted! Wrap it with quotes and
				// write out everything till we hit a space, or the end of the
				// string.

				outStr +=3D "\"";
			=09
				var sIndex =3D tagAttrs.slice(endIndex).search(/\s/);
				endIndex =3D (sIndex !=3D -1) ? (endIndex + sIndex) : =
tagAttrs.length;
				outStr +=3D tagAttrs.slice(startIndex, endIndex);			=09
				outStr +=3D "\"";			=09
				startIndex =3D endIndex;
			}
		}
	}

	outStr +=3D tagEnd;

	// Write out the end of the tag.
	return outStr;
}

Spry.Utils.fixUpIEInnerHTML =3D function(inStr)
{
	var outStr =3D "";

	// Create a regular expression that will match:
	//     <!--
	//     <![CDATA[
	//     <tag>
	//     -->
	//     ]]>
	//     ]]&gt;   // Yet another workaround for an IE innerHTML bug.
	//
	// The idea here is that we only want to fix up attribute values on =
tags that
	// are not in any comments or CDATA.

	var regexp =3D new =
RegExp("<\\!--|<\\!\\[CDATA\\[|<\\w+[^<>]*>|-->|\\]\\](>|\&gt;)", "g");
	var searchStartIndex =3D 0;
	var skipFixUp =3D 0;
=09
	while (inStr.length)
	{
		var results =3D regexp.exec(inStr);
		if (!results || !results[0])
		{
			outStr +=3D inStr.substr(searchStartIndex, inStr.length - =
searchStartIndex);
			break;
		}

		if (results.index !=3D searchStartIndex)
		{
			// We found a match but it's not at the start of the inStr.
			// Create a string token for everything that precedes the match.
			outStr +=3D inStr.substr(searchStartIndex, results.index - =
searchStartIndex);
		}

		if (results[0] =3D=3D "<!--" || results[0] =3D=3D "<![CDATA[")
		{
			++skipFixUp;
			outStr +=3D results[0];
		}
		else if (results[0] =3D=3D "-->" || results[0] =3D=3D "]]>" || =
(skipFixUp && results[0] =3D=3D "]]&gt;"))
		{
			--skipFixUp;
			outStr +=3D results[0];
		}
		else if (!skipFixUp && results[0].charAt(0) =3D=3D '<')
			outStr +=3D Spry.Utils.fixupIETagAttributes(results[0]);
		else
			outStr +=3D results[0];

		searchStartIndex =3D regexp.lastIndex;
	}
=09
	return outStr;
};

Spry.Utils.getStyleProperty =3D function(element, property)
{
	try
	{
		if (element.style[property])
			return element.style[property];
		else if (element.currentStyle)
			return element.currentStyle[property];
		else if (document.defaultView && =
document.defaultView.getComputedStyle)
		{
			var style =3D document.defaultView.getComputedStyle(element, null);
			return style.getPropertyValue(property);
		}
	}
	catch (e) {}

	return null;
};

Spry.Utils.stringToXMLDoc =3D function(str)
{
	var xmlDoc =3D null;

	try
	{
		// Attempt to parse the string using the IE method.

		var xmlDOMObj =3D new ActiveXObject("Microsoft.XMLDOM");
		xmlDOMObj.async =3D false;
		xmlDOMObj.loadXML(str);
		xmlDoc =3D xmlDOMObj;
	}
	catch (e)
	{
		// The IE method didn't work. Try the Mozilla way.

		try
		{
			var domParser =3D new DOMParser;
			xmlDoc =3D domParser.parseFromString(str, 'text/xml');
		}
		catch (e)
		{
			Spry.Debug.reportError("Caught exception in =
Spry.Utils.stringToXMLDoc(): " + e + "\n");
			xmlDoc =3D null;
		}
	}

	return xmlDoc;
};

Spry.Utils.getNodesByFunc =3D function(root, func)
{
	var nodeStack =3D new Array;
	var resultArr =3D new Array;
	var node =3D root;

	while (node)
	{
		if (func(node))
			resultArr.push(node);

		if (node.hasChildNodes())
		{
			nodeStack.push(node);
			node =3D node.firstChild;
		}
		else
		{
			if (node =3D=3D root)
				node =3D null;
			else
				try { node =3D node.nextSibling; } catch (e) { node =3D null; };
		}
	=09
		while (!node && nodeStack.length > 0)
		{
			node =3D nodeStack.pop();
			if (node =3D=3D root)
				node =3D null;
			else
				try { node =3D node.nextSibling; } catch (e) { node =3D null; }
		}
	}
=09
	if (nodeStack && nodeStack.length > 0)
		Spry.Debug.trace("-- WARNING: Spry.Utils.getNodesByFunc() failed to =
traverse all nodes!\n");

	return resultArr;
};

Spry.Utils.addClassName =3D function(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new =
RegExp("\\b" + className + "\\b")) !=3D -1))
		return;
	ele.className +=3D (ele.className ? " " : "") + className;
};

Spry.Utils.removeClassName =3D function(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new =
RegExp("\\b" + className + "\\b")) =3D=3D -1))
		return;
	ele.className =3D ele.className.replace(new RegExp("\\s*\\b" + =
className + "\\b", "g"), "");
};

Spry.Utils.removeAllChildren =3D function(node)
{
	while (node && node.firstChild)
		node.removeChild(node.firstChild);
};

Spry.Utils.getFirstChildWithNodeName =3D function(node, nodeName)
{
	var child =3D node.firstChild;

	while (child)
	{
		if (child.nodeName =3D=3D nodeName)
			return child;
		child =3D child.nextSibling;
	}=20

	return null;
};

Spry.Utils.nodeContainsElementNode =3D function(node)
{
	if (node)
	{
		node =3D node.firstChild;

		while (node)
		{
			if (node.nodeType =3D=3D 1 /* Node.ELEMENT_NODE */)
				return true;

			node =3D node.nextSibling;
		}
	}
	return false;
};

Spry.Utils.getNodeText =3D function(node)
{
	var txt =3D "";
 =20
	if (!node)
		return;

	try
	{
		var child =3D node.firstChild;
=20
		while (child)
		{
			try
			{
				if (child.nodeType =3D=3D 3 /* TEXT_NODE */)
					txt +=3D Spry.Utils.encodeEntities(child.data);
				else if (child.nodeType =3D=3D 4 /* CDATA_SECTION_NODE */)
					txt +=3D child.data;
			} catch (e) { Spry.Debug.reportError("Spry.Utils.getNodeText() =
exception caught: " + e + "\n"); }

			child =3D child.nextSibling;
		}
	}
	catch (e) { Spry.Debug.reportError("Spry.Utils.getNodeText() exception =
caught: " + e + "\n"); }
 =20
	return txt;
};

Spry.Utils.CreateObjectForNode =3D function(node)
{
	if (!node)
		return null;

	var obj =3D null;
	var i =3D 0;
	var attr =3D null;

	try
	{
		for (i =3D 0; i < node.attributes.length; i++)
		{
			attr =3D node.attributes[i];
			if (attr && attr.nodeType =3D=3D 2 /* Node.ATTRIBUTE_NODE */)
			{
				if (!obj)
				{
					obj =3D new Object();
					if (!obj)
					{
						Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object =
creation failed!");
						return null;
					}
				}
	=09
				obj["@" + attr.name] =3D attr.value;
			}
		}
	}
	catch (e)
	{
		Spry.Debug.reportError("Spry.Utils.CreateObjectForNode() caught =
exception while accessing attributes: " + e + "\n");
	}
 =20
	var child =3D node.firstChild;
=09
	if (child && !child.nextSibling && child.nodeType !=3D 1 /* =
Node.ELEMENT_NODE */)
	{
		// We have a single child and it's not an element. It must
		// be the text value for this node. Add it to the record set and
		// give it the column the same name as the node.

		if (!obj)
		{
			obj =3D new Object();
			if (!obj)
			{
				Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object =
creation failed!");
				return null;
			}
		}

		obj[node.nodeName] =3D Spry.Utils.getNodeText(node);
	}
 =20
	while (child)
	{
		// Add the text value for each child element. Note that
		// We skip elements that have element children (sub-elements)
		// because we don't handle multi-level data sets right now.
=09
		if (child.nodeType =3D=3D 1 /* Node.ELEMENT_NODE */)
		{
			if (!Spry.Utils.nodeContainsElementNode(child))
			{
				var txt =3D Spry.Utils.getNodeText(child);
				if (!obj)
				{
					obj =3D new Object();
					if (!obj)
					{
						Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object =
creation failed!");
						return null;
					}
				}
	 =20
				obj[child.nodeName] =3D txt;

				// Now add properties for any attributes on the child. The property
				// name will be of the form "<child.nodeName>/@<attr.name>".
				try
				{
					var namePrefix =3D child.nodeName + "/@";
				=09
					for (i =3D 0; i < child.attributes.length; i++)
					{
						attr =3D child.attributes[i];
						if (attr && attr.nodeType =3D=3D 2 /* Node.ATTRIBUTE_NODE */)
							obj[namePrefix + attr.name] =3D attr.value;
					}
				}
				catch (e)
				{
					Spry.Debug.reportError("Spry.Utils.CreateObjectForNode() caught =
exception while accessing attributes: " + e + "\n");
				}
       =20
			}
			// else Spry.Debug.trace("WARNING: Skipping '" + child.nodeName + "' =
node! Multi-level data sets are not supported right now!\n");
		}

		child =3D child.nextSibling;
	}
 =20
	return obj;
};

Spry.Utils.getRecordSetFromXMLDoc =3D function(xmlDoc, path)
{
	if (!xmlDoc || !path)
		return null;

	var recordSet =3D new Object();
	recordSet.xmlDoc =3D xmlDoc;
	recordSet.xmlPath =3D path;
	recordSet.dataHash =3D new Object;
	recordSet.data =3D new Array;
	recordSet.getData =3D function() { return this.data; };

	// Use the XPath library to find the nodes that will
	// make up our data set. The result should be an array
	// of subtrees that we need to flatten.

	var ctx =3D new ExprContext(xmlDoc);
	var pathExpr =3D xpathParse(path);
	var e =3D pathExpr.evaluate(ctx);

	// XXX: Note that we should check the result type of the evaluation
	// just in case it's a boolean, string, or number value instead of
	// a node set.
 =20
	var nodeArray =3D e.nodeSetValue();

	var isDOMNodeArray =3D true;

	if (nodeArray && nodeArray.length > 0)
		isDOMNodeArray =3D nodeArray[0].nodeType !=3D 2 /* Node.ATTRIBUTE_NODE =
*/;

	var nextID =3D 0;

	// We now have the set of nodes that make up our data set
	// so process each one.

	for (var i =3D 0; i < nodeArray.length; i++)
	{
		var rowObj =3D null;
=09
		if (isDOMNodeArray)
			rowObj =3D Spry.Utils.CreateObjectForNode(nodeArray[i]);
		else // Must be a Node.ATTRIBUTE_NODE array.
		{
			rowObj =3D new Object;
			rowObj["@" + nodeArray[i].name] =3D nodeArray[i].value;
		}
=09
		if (rowObj)
		{
			// We want to make sure that every row has a unique ID and since we
			// we don't know which column, if any, in this recordSet is a unique
			// identifier, we generate a unique ID ourselves and store it under
			// the ds_RowID column in the row object.

			rowObj['ds_RowID'] =3D nextID++;
			recordSet.dataHash[rowObj['ds_RowID']] =3D rowObj;
			recordSet.data.push(rowObj);
		}
	}
 =20
	return recordSet;
};

Spry.Utils.setOptions =3D function(obj, optionsObj, =
ignoreUndefinedProps)
{
	if (!optionsObj)
		return;

	for (var optionName in optionsObj)
	{
		if (ignoreUndefinedProps && optionsObj[optionName] =3D=3D undefined)
			continue;
		obj[optionName] =3D optionsObj[optionName];
	}
};

Spry.Utils.SelectionManager =3D {};
Spry.Utils.SelectionManager.selectionGroups =3D new Object;

Spry.Utils.SelectionManager.SelectionGroup =3D function()
{
	this.selectedElements =3D new Array;
};

Spry.Utils.SelectionManager.SelectionGroup.prototype.select =3D =
function(element, className, multiSelect)
{
	var selObj =3D null;

	if (!multiSelect)
	{
		// Multiple selection is not enabled, so clear any
		// selected elements from our list.

		this.clearSelection();
	}
	else
	{
		// Multiple selection is enabled, so check to see if element
		// is already in the array. If it is, make sure the className
		// is the className that was passed in.

		for (var i =3D 0; i < this.selectedElements.length; i++)
		{
			selObj =3D this.selectedElements[i].element;

			if (selObj.element =3D=3D element)
			{
				if (selObj.className !=3D className)
				{
					Spry.Utils.removeClassName(element, selObj.className);
					Spry.Utils.addClassName(element, className);
				}
				return;
			}
		}
	}

	// Add the element to our list of selected elements.

	selObj =3D new Object;
	selObj.element =3D element;
	selObj.className =3D className;
	this.selectedElements.push(selObj);
	Spry.Utils.addClassName(element, className);
};

Spry.Utils.SelectionManager.SelectionGroup.prototype.unSelect =3D =
function(element)
{
	for (var i =3D 0; i < this.selectedElements.length; i++)
	{
		var selObj =3D this.selectedElements[i].element;
=09
		if (selObj.element =3D=3D element)
		{
			Spry.Utils.removeClassName(selObj.element, selObj.className);
			return;
		}
	}
};

Spry.Utils.SelectionManager.SelectionGroup.prototype.clearSelection =3D =
function()
{
	var selObj =3D null;

	do
	{
		selObj =3D this.selectedElements.shift();
		if (selObj)
			Spry.Utils.removeClassName(selObj.element, selObj.className);
	}
	while (selObj);
};

Spry.Utils.SelectionManager.getSelectionGroup =3D =
function(selectionGroupName)
{
	if (!selectionGroupName)
		return null;

	var groupObj =3D =
Spry.Utils.SelectionManager.selectionGroups[selectionGroupName];

	if (!groupObj)
	{
		groupObj =3D new Spry.Utils.SelectionManager.SelectionGroup();
		Spry.Utils.SelectionManager.selectionGroups[selectionGroupName] =3D =
groupObj;
	}

	return groupObj;
};

Spry.Utils.SelectionManager.select =3D function(selectionGroupName, =
element, className, multiSelect)
{
	var groupObj =3D =
Spry.Utils.SelectionManager.getSelectionGroup(selectionGroupName);

	if (!groupObj)
		return;

	groupObj.select(element, className, multiSelect);
};

Spry.Utils.SelectionManager.unSelect =3D function(selectionGroupName, =
element)
{
	var groupObj =3D =
Spry.Utils.SelectionManager.getSelectionGroup(selectionGroupName);

	if (!groupObj)
		return;

	groupObj.unSelect(element, className);
};

Spry.Utils.SelectionManager.clearSelection =3D =
function(selectionGroupName)
{
	var groupObj =3D =
Spry.Utils.SelectionManager.getSelectionGroup(selectionGroupName);

	if (!groupObj)
		return;

	groupObj.clearSelection();
};

//////////////////////////////////////////////////////////////////////
//
// Define Prototype's $() convenience function.
//
//////////////////////////////////////////////////////////////////////

function $()
{
	var elements =3D new Array();
=09
	for (var i =3D 0; i < arguments.length; i++)
	{
		var element =3D arguments[i];
		if (typeof element =3D=3D 'string')
			element =3D document.getElementById(element);
	=09
		if (arguments.length =3D=3D 1)
			return element;
	=09
		elements.push(element);
	}
=09
	return elements;
}

Spry.Utils.Notifier =3D function()
{
	this.observers =3D [];
	this.suppressNotifications =3D 0;
};

Spry.Utils.Notifier.prototype.addObserver =3D function(observer)
{
	if (!observer)
		return;

	// Make sure the observer isn't already on the list.

	var len =3D this.observers.length;
	for (var i =3D 0; i < len; i++)
	{
		if (this.observers[i] =3D=3D observer)
			return;
	}
	this.observers[len] =3D observer;
};

Spry.Utils.Notifier.prototype.removeObserver =3D function(observer)
{
	if (!observer)
		return;

	for (var i =3D 0; i < this.observers.length; i++)
	{
		if (this.observers[i] =3D=3D observer)
		{
			this.observers.splice(i, 1);
			break;
		}
	}
};

Spry.Utils.Notifier.prototype.notifyObservers =3D function(methodName, =
data)
{
	if (!methodName)
		return;

	if (!this.suppressNotifications)
	{
		var len =3D this.observers.length;
		for (var i =3D 0; i < len; i++)
		{
			var obs =3D this.observers[i];
			if (obs)
			{
				if (typeof obs =3D=3D "function")
					obs(methodName, this, data);
				else if (obs[methodName])
					obs[methodName](this, data);
			}
		}
	}
};

Spry.Utils.Notifier.prototype.enableNotifications =3D function()
{
	if (--this.suppressNotifications < 0)
	{
		this.suppressNotifications =3D 0;
		Spry.Debug.reportError("Unbalanced enableNotifications() call!\n");
	}
};

Spry.Utils.Notifier.prototype.disableNotifications =3D function()
{
	++this.suppressNotifications;
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Debug
//
//////////////////////////////////////////////////////////////////////

Spry.Debug =3D {};
Spry.Debug.enableTrace =3D true;
Spry.Debug.debugWindow =3D null;

Spry.Debug.createDebugWindow =3D function()
{
	if (!Spry.Debug.enableTrace || Spry.Debug.debugWindow)
		return;
	try
	{
		Spry.Debug.debugWindow =3D document.createElement("div");
		var div =3D Spry.Debug.debugWindow;
		div.style.fontSize =3D "12px";
		div.style.fontFamily =3D "console";
		div.style.position =3D "absolute";
		div.style.width =3D "400px";
		div.style.height =3D "300px";
		div.style.overflow =3D "auto";
		div.style.border =3D "solid 1px black";
		div.style.backgroundColor =3D "white";
		div.style.color =3D "black";
		div.style.bottom =3D "0px";
		div.style.right =3D "0px";
		// div.style.opacity =3D "0.5";
		// div.style.filter =3D "alpha(opacity=3D50)";
		div.setAttribute("id", "SpryDebugWindow");
		document.body.appendChild(Spry.Debug.debugWindow);
	}
	catch (e) {}
};

Spry.Debug.debugOut =3D function(str, bgColor)
{
	if (!Spry.Debug.debugWindow)
	{
		Spry.Debug.createDebugWindow();
		if (!Spry.Debug.debugWindow)
			return;
	}

	var d =3D document.createElement("div");
	if (bgColor)
		d.style.backgroundColor =3D bgColor;
	d.innerHTML =3D str;
	Spry.Debug.debugWindow.appendChild(d);=09
};

Spry.Debug.trace =3D function(str)
{
	Spry.Debug.debugOut(str);
};

Spry.Debug.reportError =3D function(str)
{
	Spry.Debug.debugOut(str, "red");
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Data
//
//////////////////////////////////////////////////////////////////////

Spry.Data =3D {};
Spry.Data.regionsArray =3D {};

Spry.Data.initRegions =3D function(rootNode)
{
	if (!rootNode)
		rootNode =3D document.body;

	var regions =3D Spry.Utils.getNodesByFunc(rootNode, function(node)
	{
		try
		{
			if (node.nodeType !=3D 1 /* Node.ELEMENT_NODE */)
				return false;

			// Region elements must have an spryregion attribute with a
			// non-empty value. An id attribute is also required so we can
			// reference the region by name if necessary.

			var attrName =3D "spry:region";
			var attr =3D node.attributes.getNamedItem(attrName);
			if (!attr)
			{
				attrName =3D "spry:detailregion";
				attr =3D node.attributes.getNamedItem(attrName);
			}
			if (attr)
			{
				if (attr.value)
				{
					attr =3D node.attributes.getNamedItem("id");
					if (!attr || !attr.value)
					{
						// The node is missing an id attribute so add one.
						node.setAttribute("id", "spryregion" + =
(++Spry.Data.initRegions.nextUniqueRegionID));
					}
=09
					return true;
				}
				else
					Spry.Debug.reportError(attrName + " attributes require one or more =
data set names as values!");
			}
		}
		catch(e) {}
		return false;
	});

	var name, dataSets, i;
 =20
	for (i =3D 0; i < regions.length; i++)
	{
		var rgn =3D regions[i];

		var isDetailRegion =3D false;

		// Get the region name.
		name =3D rgn.attributes.getNamedItem("id").value;

		attr =3D rgn.attributes.getNamedItem("spry:region");
		if (!attr)
		{
			attr =3D rgn.attributes.getNamedItem("spry:detailregion");
			isDetailRegion =3D true;
		}

		if (!attr.value)
		{
			Spry.Debug.reportError("spry:region and spry:detailregion attributes =
require one or more data set names as values!");
			continue;
		}

		// Remove the spry:region or spry:detailregion attribute so it doesn't =
appear in
		// the output generated by our processing of the dynamic region.
		rgn.attributes.removeNamedItem(attr.nodeName);

		// Remove the hiddenRegionCSS class from the rgn.
		Spry.Utils.removeClassName(rgn, =
Spry.Data.Region.hiddenRegionClassName);

		// Get the DataSets that should be bound to the region.
		dataSets =3D Spry.Data.Region.strToDataSetsArray(attr.value);

		if (!dataSets.length)
		{
			Spry.Debug.reportError("spry:region or spry:detailregion attribute =
has no data set!");
			continue;
		}
=09
		var hasBehaviorAttributes =3D false;
		var hasSpryContent =3D false;
		var dataStr =3D "";

		var parent =3D null;
		var regionStates =3D {};

		// Find all of the processing instruction regions in the region.
		// Insert comments around the regions we find so we can identify them
		// easily when tokenizing the region html string.

		var piRegions =3D Spry.Utils.getNodesByFunc(rgn, function(node)
		{
			try
			{
				if (node.nodeType =3D=3D 1 /* ELEMENT_NODE */)
				{
					var attributes =3D node.attributes;
					var numPI =3D Spry.Data.Region.PI.orderedInstructions.length;
					var lastStartComment =3D null;
					var lastEndComment =3D null;

					for (var i =3D 0; i < numPI; i++)
					{
						var piName =3D Spry.Data.Region.PI.orderedInstructions[i];
						var attr =3D attributes.getNamedItem(piName);
						if (!attr)
							continue;
=09
						var piDesc =3D Spry.Data.Region.PI.instructions[piName];
						var childrenOnly =3D (node =3D=3D rgn) ? true : =
piDesc.childrenOnly;
						var openTag =3D piDesc.getOpenTag(node, piName);
						var closeTag =3D piDesc.getCloseTag(node, piName);
=09
						if (childrenOnly)
						{
								var oComment =3D document.createComment(openTag);
								var cComment =3D document.createComment(closeTag)

								if (!lastStartComment)
									node.insertBefore(oComment, node.firstChild);
								else
									node.insertBefore(oComment, lastStartComment.nextSibling);
								lastStartComment =3D oComment;

								if (!lastEndComment)
									node.appendChild(cComment);
								else
									node.insertBefore(cComment, lastEndComment);
								lastEndComment =3D cComment;
						}
						else
						{
							var parent =3D node.parentNode;
							parent.insertBefore(document.createComment(openTag), node);
							parent.insertBefore(document.createComment(closeTag), =
node.nextSibling);
						}

						// If this is a spry:state processing instruction, record the =
state name
						// so we know that we should re-generate the region if we ever see =
that state.

						if (piName =3D=3D "spry:state")
							regionStates[attr.value] =3D true;

						node.removeAttribute(piName);
					}

					if (!hasBehaviorAttributes && =
Spry.Data.Region.enableBehaviorAttributes)
					{
						for (var behaviorAttrName in Spry.Data.Region.behaviorAttrs)
						{
							if (attributes.getNamedItem(behaviorAttrName))
							{
								hasBehaviorAttributes =3D true;
								break;
							}
						}
					}
				}
			}
			catch(e) {}
			return false;
		});
=09
		// Get the data in the region.
		dataStr =3D rgn.innerHTML;

		// Argh! IE has an innerHTML bug where it will remove the quotes =
around any
		// attribute value that it thinks is a single word. This includes =
removing quotes
		// around our data references which is problematic since a single data =
reference
		// can be replaced with multiple words. If we are running in IE, we =
have to call
		// fixUpIEInnerHTML to get around this problem.

		if (window.ActiveXObject && !Spry.Data.Region.disableIEInnerHTMLFixUp =
&& dataStr.search(/=3D\{/) !=3D -1)
		{
			if (Spry.Data.Region.debug)
				Spry.Debug.trace("<hr />Performing IE innerHTML fix up of Region: " =
+ name + "<br /><br />" + Spry.Utils.encodeEntities(dataStr));

			dataStr =3D Spry.Utils.fixUpIEInnerHTML(dataStr);
		}

		if (Spry.Data.Region.debug)
			Spry.Debug.trace("<hr />Region template markup for '" + name + "':<br =
/><br />" + Spry.Utils.encodeEntities(dataStr));

		if (!hasSpryContent)
		{
			// Clear the region.
			Spry.Utils.removeAllChildren(rgn);
		}

		// Create a Spry.Data.Region object for this region.
		var region =3D new Spry.Data.Region(rgn, name, isDetailRegion, =
dataStr, dataSets, regionStates, hasBehaviorAttributes);
		Spry.Data.regionsArray[region.name] =3D region;
	}

	Spry.Data.updateAllRegions();
};

Spry.Data.initRegions.nextUniqueRegionID =3D 0;

Spry.Data.updateRegion =3D function(regionName)
{
	if (!regionName || !Spry.Data.regionsArray || =
!Spry.Data.regionsArray[regionName])
		return;

	try { Spry.Data.regionsArray[regionName].updateContent(); }
	catch(e) { Spry.Debug.reportError("Spry.Data.updateRegion(" + =
regionName + ") caught an exception: " + e + "\n"); }
};

Spry.Data.getRegion =3D function(regionName)
{
	return Spry.Data.regionsArray[regionName];
};


Spry.Data.updateAllRegions =3D function()
{
	if (!Spry.Data.regionsArray)
		return;

	for (var regionName in Spry.Data.regionsArray)
		Spry.Data.updateRegion(regionName);
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Data.DataSet
//
//////////////////////////////////////////////////////////////////////

Spry.Data.DataSet =3D function()
{
	Spry.Utils.Notifier.call(this);

	this.name =3D "";
	this.internalID =3D Spry.Data.DataSet.nextDataSetID++;
	this.curRowID =3D 0;
	this.data =3D null;
	this.unfilteredData =3D null;
	this.dataHash =3D null;
	this.columnTypes =3D new Object;
	this.filterFunc =3D null;		// non-destructive filter function
	this.filterDataFunc =3D null;	// destructive filter function

	this.distinctOnLoad =3D false;
	this.sortOnLoad =3D null;
	this.sortOrderOnLoad =3D "ascending";
	this.keepSorted =3D false;

	this.dataWasLoaded =3D false;
	this.pendingRequest =3D null;

	this.lastSortColumns =3D [];
	this.lastSortOrder =3D "";

	this.loadIntervalID =3D 0;
};

Spry.Data.DataSet.prototype =3D new Spry.Utils.Notifier();
Spry.Data.DataSet.prototype.constructor =3D Spry.Data.DataSet;

Spry.Data.DataSet.prototype.getData =3D function()
{
	return this.data;
};

Spry.Data.DataSet.prototype.getUnfilteredData =3D function()
{
	return this.unfilteredData ? this.unfilteredData : this.data;
};

Spry.Data.DataSet.prototype.getLoadDataRequestIsPending =3D function()
{
	return this.pendingRequest !=3D null;
};

Spry.Data.DataSet.prototype.getDataWasLoaded =3D function()
{
	return this.dataWasLoaded;
};

Spry.Data.DataSet.prototype.loadData =3D function()
{
	// The idea here is that folks using the base class DataSet directly
	// would change the data in the DataSet manually and then call =
loadData()
	// to fire off an async notifications to say that it was ready for =
consumption.
	//
	// Firing off data changed notificataions synchronously from this =
method
	// can wreak havoc with complicated master/detail regions that use data =
sets
	// that have master/detail relationships with other data sets. Our data =
set
	// logic already handles async data loading nicely so we use a timer to =
fire
	// off the data changed notification to insure that it happens after =
this
	// function is finished and the JS stack unwinds.
	//
	// Other classes that derive from this class and load data =
synchronously
	// inside their loadData() implementation should also fire off an async
	// notification in this same manner to avoid this same problem.

	var self =3D this;

	this.pendingRequest =3D new Object;
	this.dataWasLoaded =3D false;
	this.pendingRequest.timer =3D setTimeout(function()
	{
		self.pendingRequest =3D null;
		self.dataWasLoaded =3D true;

		if (self.filterDataFunc)
			self.filterData(self.filterDataFunc, true);

		if (self.distinctOnLoad)
			self.distinct();

		if (self.keepSorted && self.getSortColumn())
			self.sort(self.lastSortColumns, self.lastSortOrder)
		else if (self.sortOnLoad)
			self.sort(self.sortOnLoad, self.sortOrderOnLoad);
=09
		if (self.filterFunc)
			self.filter(self.filterFunc, true);
=09
		self.notifyObservers("onDataChanged");
	}, 0); =20
};

Spry.Data.DataSet.prototype.cancelLoadData =3D function()
{
	if (this.pendingRequest && this.pendingRequest.timer)
		clearTimeout(this.pendingRequest.timer);
	this.pendingRequest =3D null;
};

Spry.Data.DataSet.prototype.getCurrentRow =3D function()
{
	if (!this.data)
		return null;
	return this.dataHash[this.curRowID];
};

Spry.Data.DataSet.prototype.setCurrentRow =3D function(rowID)
{
	if (this.curRowID =3D=3D rowID)
		return;

	var nData =3D { oldRowID: this.curRowID, newRowID: rowID };
	this.curRowID =3D rowID;
	this.notifyObservers("onCurrentRowChanged", nData);
};

Spry.Data.DataSet.prototype.getRowNumber =3D function(row)
{
	if (row && this.data && this.data.length)
	{
		var numRows =3D this.data.length;
		for (var i =3D 0; i < numRows; i++)
		{
			if (this.data[i] =3D=3D row)
				return i;
		}
	}

	return 0;
};

Spry.Data.DataSet.prototype.getCurrentRowNumber =3D function()
{
	return this.getRowNumber(this.getCurrentRow());
};

Spry.Data.DataSet.prototype.setCurrentRowNumber =3D function(rowNumber)
{
	if (!this.data || rowNumber >=3D this.data.length)
	{
		Spry.Debug.trace("Invalid row number: " + rowNumber + "\n");
		return;
	}

	var rowID =3D this.data[rowNumber]["ds_RowID"];

	if (rowID =3D=3D undefined || this.curRowID =3D=3D rowID)
		return;

	this.setCurrentRow(rowID);
};

Spry.Data.DataSet.prototype.setColumnType =3D function(columnName, =
columnType)
{
	if (columnName)
		this.columnTypes[columnName] =3D columnType;
};

Spry.Data.DataSet.prototype.getColumnType =3D function(columnName)
{
	if (this.columnTypes[columnName])
		return this.columnTypes[columnName];
	return "string";
};

Spry.Data.DataSet.prototype.distinct =3D function()
{
	if (this.data)
	{
		var oldData =3D this.data;
		this.data =3D [];
		this.dataHash =3D {};

		var alreadySeenHash =3D {};
		var i =3D 0;

		for (var i =3D 0; i < oldData.length; i++)
		{
			var rec =3D oldData[i];
			var hashStr =3D "";
			for (var recField in rec)
			{
				if (recField !=3D "ds_RowID")
				{
					if (hashStr)
						hashStr +=3D ",";
					hashStr +=3D recField + ":" + "\"" + rec[recField] + "\"";
				}
			}
			if (!alreadySeenHash[hashStr])
			{
				this.data.push(rec);
				this.dataHash[rec['ds_RowID']] =3D rec;
				alreadySeenHash[hashStr] =3D true;
			}
		}
	}
};

Spry.Data.DataSet.prototype.getSortColumn =3D function() {
	return (this.lastSortColumns && this.lastSortColumns.length > 0) ? =
this.lastSortColumns[0] : "";
};

Spry.Data.DataSet.prototype.sort =3D function(columnNames, sortOrder)
{
	// columnNames can be either the name of a column to
	// sort on, or an array of column names, but it can't be
	// null/undefined.

	if (!columnNames)
		return;

	// If only one column name was specified for sorting, do a
	// secondary sort on ds_RowID so we get a stable sort order.

	if (typeof columnNames =3D=3D "string")
		columnNames =3D [ columnNames, "ds_RowID" ];
	else if (columnNames.length < 2 && columnNames[0] !=3D "ds_RowID")
		columnNames.push("ds_RowID");

	if (sortOrder =3D=3D "toggle")
	{
		if (this.lastSortColumns.length > 0 && this.lastSortColumns[0] =3D=3D =
columnNames[0] && this.lastSortOrder =3D=3D "ascending")
			sortOrder =3D "descending";
		else
			sortOrder =3D "ascending";
	}

	if (!sortOrder)
		sortOrder =3D "ascending";

	if (sortOrder !=3D "ascending" && sortOrder !=3D "descending")
	{
		Spry.Debug.reportError("Invalid sort order type specified: " + =
sortOrder + "\n");
		return;
	}

	var nData =3D {
		oldSortColumns: this.lastSortColumns,
		oldSortOrder: this.lastSortOrder,
		newSortColumns: columnNames,
		newSortOrder: sortOrder
	};
	this.notifyObservers("onPreSort", nData);

	var cname =3D columnNames[columnNames.length - 1];
	var sortfunc =3D Spry.Data.DataSet.prototype.sort.getSortFunc(cname, =
this.getColumnType(cname), sortOrder);

	for (var i =3D columnNames.length - 2; i >=3D 0; i--)
	{
		cname =3D columnNames[i];
		sortfunc =3D =
Spry.Data.DataSet.prototype.sort.buildSecondarySortFunc(Spry.Data.DataSet=
.prototype.sort.getSortFunc(cname, this.getColumnType(cname), =
sortOrder), sortfunc);
	}

	if (this.unfilteredData)
	{
		this.unfilteredData.sort(sortfunc);
		if (this.filterFunc)
			this.filter(this.filterFunc, true);
	}
	else
		this.data.sort(sortfunc);

	this.lastSortColumns =3D columnNames.slice(0); // Copy the array.
	this.lastSortOrder =3D sortOrder;

	this.notifyObservers("onPostSort", nData);
};

Spry.Data.DataSet.prototype.sort.getSortFunc =3D function(prop, type, =
order)
{
	var sortfunc =3D null;
	if (type =3D=3D "number")
	{
		if (order =3D=3D "ascending")
			sortfunc =3D function(a, b){ return a[prop]-b[prop]; };
		else // order =3D=3D "descending"
			sortfunc =3D function(a, b){ return b[prop]-a[prop]; };
	}
	else if (type =3D=3D "date")
	{
		if (order =3D=3D "ascending")
			sortfunc =3D function(a, b)
			{
				var dA =3D a[prop];
				var dB =3D b[prop];		=09
				dA =3D dA ? (new Date(dA)) : 0;
				dB =3D dB ? (new Date(dB)) : 0;
				return dA - dB;
			};
		else // order =3D=3D "descending"
			sortfunc =3D function(a, b)
			{
				var dA =3D a[prop];
				var dB =3D b[prop];		=09
				dA =3D dA ? (new Date(dA)) : 0;
				dB =3D dB ? (new Date(dB)) : 0;
				return dB - dA;
			};
	}
	else // type =3D=3D "string"
	{
		if (order =3D=3D "ascending")
			sortfunc =3D function(a, b){ return (a[prop] < b[prop]) ? -1 : =
((a[prop] > b[prop]) ? 1 : 0) };
		else // order =3D=3D "descending"
			sortfunc =3D function(a, b){ return (a[prop] > b[prop]) ? -1 : =
((a[prop] < b[prop]) ? 1 : 0) };
	}

	return sortfunc;
};

Spry.Data.DataSet.prototype.sort.buildSecondarySortFunc =3D =
function(funcA, funcB)
{
	return function(a, b)
	{
		var ret =3D funcA(a, b);
		if (ret =3D=3D 0)
			ret =3D funcB(a, b);
		return ret;
	};
};

Spry.Data.DataSet.prototype.filterData =3D function(filterFunc, =
filterOnly)
{
	// This is a destructive filter function.
=09
	var dataChanged =3D false;

	if (!filterFunc)
	{
		// Caller wants to remove the filter.

		this.filterDataFunc =3D null;
		dataChanged =3D true;
	}
	else
	{
		this.filterDataFunc =3D filterFunc;
	=09
		if (this.dataWasLoaded && ((this.unfilteredData && =
this.unfilteredData.length) || (this.data && this.data.length)))
		{
			if (this.unfilteredData)
			{
				this.data =3D this.unfilteredData;
				this.unfilteredData =3D null;
			}
=09
			var oldData =3D this.data;
			this.data =3D [];
			this.dataHash =3D {};
=09
			for (var i =3D 0; i < oldData.length; i++)
			{
				var newRow =3D filterFunc(this, oldData[i], i);
				if (newRow)
				{
					this.data.push(newRow);
					this.dataHash[newRow["ds_RowID"]] =3D newRow;
				}
			}
=09
			dataChanged =3D true;
		}
	}

	if (dataChanged)
	{
		if (!filterOnly)
		{
			this.disableNotifications();
			if (this.filterFunc)
				this.filter(this.filterFunc, true);
			this.enableNotifications();
		}

		this.notifyObservers("onDataChanged");
	}
};

Spry.Data.DataSet.prototype.filter =3D function(filterFunc, filterOnly)
{
	// This is a non-destructive filter function.

	var dataChanged =3D false;

	if (!filterFunc)
	{
		if (this.filterFunc && this.unfilteredData)
		{
			// Caller wants to remove the filter. Restore the unfiltered
			// data and trigger a data changed notification.
=09
			this.data =3D this.unfilteredData;
			this.unfilteredData =3D null;
			this.filterFunc =3D null;
			dataChanged =3D true;
		}
	}
	else
	{
		this.filterFunc =3D filterFunc;
	=09
		if (this.dataWasLoaded && (this.unfilteredData || (this.data && =
this.data.length)))
		{
			if (!this.unfilteredData)
				this.unfilteredData =3D this.data;
=09
			var udata =3D this.unfilteredData;
			this.data =3D [];
=09
			for (var i =3D 0; i < udata.length; i++)
			{
				var newRow =3D filterFunc(this, udata[i], i);
=09
				if (newRow)
					this.data.push(newRow);
			}
=09
			dataChanged =3D true;
		}
	}

	if (dataChanged)
		this.notifyObservers("onDataChanged");
};

Spry.Data.DataSet.prototype.startLoadInterval =3D function(interval)
{
	this.stopLoadInterval();
	if (interval > 0)
	{
		var self =3D this;
		this.loadInterval =3D interval;
		this.loadIntervalID =3D setInterval(function() { self.loadData(); }, =
interval);
	}
};

Spry.Data.DataSet.prototype.stopLoadInterval =3D function()
{
	if (this.loadIntervalID)
		clearInterval(this.loadIntervalID);
	this.loadInterval =3D 0;
	this.loadIntervalID =3D null;
};

Spry.Data.DataSet.nextDataSetID =3D 0;

//////////////////////////////////////////////////////////////////////
//
// Spry.Data.XMLDataSet
//
//////////////////////////////////////////////////////////////////////

Spry.Data.XMLDataSet =3D function(dataSetURL, dataSetPath, =
dataSetOptions)
{
	// Call the constructor for our DataSet base class so that
	// our base class properties get defined. We'll call setOptions
	// manually after we set up our XMLDataSet properties.

	Spry.Data.DataSet.call(this);
=09
	// XMLDataSet Properties:

	this.url =3D dataSetURL;
	this.xpath =3D dataSetPath;
	this.doc =3D null;
	this.dataSetsForDataRefStrings =3D new Array;
	this.hasDataRefStrings =3D false;
	this.useCache =3D true;

	// Create a loadURL request object to store any load options
	// the caller specified. We'll fill in the URL at the last minute
	// before we make the actual load request because our URL needs
	// to be processed at the last possible minute in case it contains
	// data references.

	this.requestInfo =3D new Spry.Utils.loadURL.Request();
	this.requestInfo.extractRequestOptions(dataSetOptions, true);

	// If the caller wants to use "POST" to fetch the data, but didn't
	// provide the content type, default to x-www-form-urlencoded.

	if (this.requestInfo.method =3D=3D "POST")
	{
		if (!this.requestInfo.headers)
			this.requestInfo.headers =3D {};
		if (!this.requestInfo.headers['Content-Type'])
			this.requestInfo.headers['Content-Type'] =3D =
"application/x-www-form-urlencoded; charset=3DUTF-8";
	}

	Spry.Utils.setOptions(this, dataSetOptions, true);
=09
	this.recalculateDataSetDependencies();

	if (this.loadInterval > 0)
		this.startLoadInterval(this.loadInterval);
}; // End of Spry.Data.XMLDataSet() constructor.

Spry.Data.XMLDataSet.prototype =3D new Spry.Data.DataSet();
Spry.Data.XMLDataSet.prototype.constructor =3D Spry.Data.XMLDataSet;

Spry.Data.XMLDataSet.prototype.recalculateDataSetDependencies =3D =
function()
{
	this.hasDataRefStrings =3D false;

	if (!this.url)
		return;

	// Clear all old callbacks that may have been registered.

	var i =3D 0;
	for (i =3D 0; i < this.dataSetsForDataRefStrings.length; i++)
	{
		var ds =3D this.dataSetsForDataRefStrings[i];
		if (ds)
			ds.removeObserver(this);
	}

	// Now run through the strings that may contain data references and =
figure
	// out what data sets they require. Note that the data references in =
these
	// strings must be fully qualified with a data set name. (ex: =
{dsDataSetName::columnName})

	this.dataSetsForDataRefStrings =3D new Array();

	var regionStrs =3D [ this.url, this.xpath, this.requestInfo.postData ];

	// If postData exists, and is a string, we want to check it for data =
refs.
	var postData =3D this.requestInfo.postData;
	if (postData && (typeof postData) =3D=3D "string")
		regionStrs.push(postData);

	var dsCount =3D 0;

	for (var n =3D 0; n < regionStrs.length; n++)
	{
		var tokens =3D Spry.Data.Region.getTokensFromStr(regionStrs[n]);

		for (i =3D 0; tokens && i < tokens.length; i++)
		{
			if (tokens[i].search(/{[^}:]+::[^}]+}/) !=3D -1)
			{
				var dsName =3D tokens[i].replace(/^\{|::.*\}/g, "");
				var ds =3D null;
				if (!this.dataSetsForDataRefStrings[dsName])
				{
					try { ds =3D eval(dsName); } catch (e) { ds =3D null; }
=09
					if (dsName && ds)
					{
						// The dataSetsForDataRefStrings array serves as both an
						// array of data sets and a hash lookup by name.

						this.dataSetsForDataRefStrings[dsName] =3D ds;
						this.dataSetsForDataRefStrings[dsCount++] =3D ds;
						this.hasDataRefStrings =3D true;
					}
				}
			}
		}
	}

	// Set up observers on any data sets our URL depends on.

	for (i =3D 0; i < this.dataSetsForDataRefStrings.length; i++)
	{
		var ds =3D this.dataSetsForDataRefStrings[i];
		ds.addObserver(this);
	}
};

Spry.Data.XMLDataSet.prototype.attemptLoadData =3D function()
{
	// We only want to trigger a load when all of our data sets have data!
	for (var i =3D 0; i < this.dataSetsForDataRefStrings.length; i++)
	{
		var ds =3D this.dataSetsForDataRefStrings[i];
		if (ds.getLoadDataRequestIsPending() || !ds.getDataWasLoaded())
			return;
	}

	this.loadData();
};

Spry.Data.XMLDataSet.prototype.onCurrentRowChanged =3D function(ds, =
data)
{
	this.attemptLoadData();
};

Spry.Data.XMLDataSet.prototype.onPostSort =3D function(ds, data)
{
	this.attemptLoadData();
};
		=09
Spry.Data.XMLDataSet.prototype.onDataChanged =3D function(ds, data)
{
	this.attemptLoadData();
};
		=09
Spry.Data.XMLDataSet.prototype.loadData =3D function()
{
	if (!this.url || !this.xpath)
		return;

	this.cancelLoadData();

	var url =3D this.url;
	var postData =3D this.requestInfo.postData;

	if (this.hasDataRefStrings)
	{
		var allDataSetsReady =3D true;

		for (var i =3D 0; i < this.dataSetsForDataRefStrings.length; i++)
		{
			var ds =3D this.dataSetsForDataRefStrings[i];
			if (ds.getLoadDataRequestIsPending())
				allDataSetsReady =3D false;
			else if (!ds.getDataWasLoaded())
			{
				// Kick off the load of this data set!
				ds.loadData();
				allDataSetsReady =3D false;
			}
		}

		// If our data sets aren't ready, just return. We'll
		// get called back to load our data when they are all
		// done.

		if (!allDataSetsReady)
			return;

		url =3D Spry.Data.Region.processDataRefString(null, this.url, =
this.dataSetsForDataRefStrings);
		if (!url)
			return;
		=09
		if (postData && (typeof postData) =3D=3D "string")
			postData =3D Spry.Data.Region.processDataRefString(null, postData, =
this.dataSetsForDataRefStrings);
	}

	this.notifyObservers("onPreLoad");

	this.data =3D null;
	this.dataWasLoaded =3D false;
	this.unfilteredData =3D null;
	this.dataHash =3D null;
	this.curRowID =3D 0;

	// At this point the url should've been processed if it contained any
	// data references. Set the url of the requestInfo structure and pass =
it
	// to LoadManager.loadData().

	var req =3D this.requestInfo.clone();
	req.url =3D url;
	req.postData =3D postData;

	this.pendingRequest =3D new Object;
	this.pendingRequest.data =3D =
Spry.Data.XMLDataSet.LoadManager.loadData(req, this, this.useCache);
};

Spry.Data.XMLDataSet.prototype.cancelLoadData =3D function()
{
	if (this.pendingRequest)
	{
		=
Spry.Data.XMLDataSet.LoadManager.cancelLoadData(this.pendingRequest.data,=
 this);
		this.pendingRequest =3D null;
	}
};

Spry.Data.XMLDataSet.prototype.getURL =3D function() { return this.url; =
};
Spry.Data.XMLDataSet.prototype.setURL =3D function(url, requestOptions)
{
	if (this.url =3D=3D url)
		return;
	this.url =3D url;

	if (requestOptions)
		this.requestInfo.extractRequestOptions(requestOptions);

	this.cancelLoadData();
	this.recalculateDataSetDependencies();
	this.dataWasLoaded =3D false;
};
Spry.Data.XMLDataSet.prototype.getDocument =3D function() { return =
this.doc; };
Spry.Data.XMLDataSet.prototype.getXPath =3D function() { return =
this.xpath; };
Spry.Data.XMLDataSet.prototype.setXPath =3D function(path)
{
	if (this.xpath !=3D path)
	{
		this.xpath =3D path;
		if (this.dataWasLoaded && this.doc)
			this.setDataFromDoc(this.doc);
	}
};

Spry.Data.XMLDataSet.prototype.setDataFromDoc =3D function(doc)
{
	this.pendingRequest =3D null;

	var rs =3D null;

	rs =3D Spry.Utils.getRecordSetFromXMLDoc(doc, =
Spry.Data.Region.processDataRefString(null, this.xpath, =
this.dataSetsForDataRefStrings));

	if (!rs)
	{
		Spry.Debug.reportError("Spry.Data.XMLDataSet.setDataFromDoc() failed =
to create dataSet '" + this.name + "'for '" + this.xpath + "' - " + =
this.url + "\n");
		return;
	}

	this.doc =3D rs.xmlDoc;
	this.data =3D rs.data;
	this.dataHash =3D rs.dataHash;
	this.dataWasLoaded =3D (this.doc !=3D null);

	// If there is a data filter installed, run it.

	if (this.filterDataFunc)
		this.filterData(this.filterDataFunc, true);

	// If the distinct flag was set, run through all the records in the =
recordset
	// and toss out any that are duplicates.

	if (this.distinctOnLoad)
		this.distinct();

	// If sortOnLoad was set, sort the data based on the columns
	// specified in sortOnLoad.

	if (this.keepSorted && this.getSortColumn())
		this.sort(this.lastSortColumns, this.lastSortOrder)
	else if (this.sortOnLoad)
		this.sort(this.sortOnLoad, this.sortOrderOnLoad);

	// If there is a view filter installed, run it.

	if (this.filterFunc)
		this.filter(this.filterFunc, true);

	// The default "current" row is the first row of the data set.
	if (this.data && this.data.length > 0)
		this.curRowID =3D this.data[0]['ds_RowID'];
	else
		this.curRowID =3D 0;

	this.notifyObservers("onPostLoad");
	this.notifyObservers("onDataChanged");
};

Spry.Data.XMLDataSet.prototype.onRequestResponse =3D =
function(cachedRequest, req)
{
	this.setDataFromDoc(cachedRequest.doc);
};

Spry.Data.XMLDataSet.prototype.onRequestError =3D =
function(cachedRequest, req)
{
	this.notifyObservers("onLoadError", req);
	// =
Spry.Debug.reportError("Spry.Data.XMLDataSet.LoadManager.CachedRequest.lo=
adDataCallback(" + req.xhRequest.status + ") failed to load: " + req.url =
+ "\n");
};

Spry.Data.XMLDataSet.LoadManager =3D {};
Spry.Data.XMLDataSet.LoadManager.cache =3D [];

Spry.Data.XMLDataSet.LoadManager.CachedRequest =3D function(reqInfo)
{
	Spry.Utils.Notifier.call(this);

	this.reqInfo =3D reqInfo;
	this.doc =3D null;
	this.timer =3D null;
	this.state =3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest.NOT_LOADED;
};

Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype =3D new =
Spry.Utils.Notifier();
Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.constructor =3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest;

Spry.Data.XMLDataSet.LoadManager.CachedRequest.NOT_LOADED      =3D 1;
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED  =3D 2;
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_FAILED     =3D 3;
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL =3D 4;

Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.loadDataCallback=
 =3D function(req)
{
	if (req.xhRequest.readyState !=3D 4)
		return;

	var xmlDoc =3D req.xhRequest.responseXML;

	if (req.xhRequest.status !=3D 200)
	{
		if (req.xhRequest.status =3D=3D 0)
		{
			// The page that is attempting to load data was probably loaded with
			// a file:// url. Mozilla based browsers will actually provide the =
complete DOM
			// tree for the data, but IE provides an empty document node so try =
to parse
			// the xml text manually to create a dom tree we can use.

			if (req.xhRequest.responseText && (!xmlDoc || !xmlDoc.firstChild))
				xmlDoc =3D Spry.Utils.stringToXMLDoc(req.xhRequest.responseText);
		}
	}

	if (!xmlDoc  || !xmlDoc.firstChild || xmlDoc.firstChild.nodeName =3D=3D =
"parsererror")
	{
		this.state =3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_FAILED;
		this.notifyObservers("onRequestError", req);
		this.observers.length =3D 0; // Clear the observers list.
		return;
	}

	this.doc =3D xmlDoc;
	this.state =3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL;

	// Notify all of the cached request's observers!
	this.notifyObservers("onRequestResponse", req);

	// Clear the observers list.
	this.observers.length =3D 0;
};

Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.loadData =3D =
function()
{
	// IE will synchronously fire our loadDataCallback() during the call
	// to an async Spry.Utils.loadURL() if the data for the url is already
	// in the browser's local cache. This can wreak havoc with complicated =
master/detail
	// regions that use data sets that have master/detail relationships =
with other
	// data sets. Our data set logic already handles async data loading =
nicely so we
	// use a timer to fire off the async Spry.Utils.loadURL() call to =
insure that any
	// data loading happens asynchronously after this function is finished.

	var self =3D this;
	this.cancelLoadData();
	this.doc =3D null;
	this.state =3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED;

	var reqInfo =3D this.reqInfo.clone();
	reqInfo.successCallback =3D function(req) { self.loadDataCallback(req); =
};
	reqInfo.errorCallback =3D reqInfo.successCallback;

	this.timer =3D setTimeout(function()
	{
		self.timer =3D null;
		Spry.Utils.loadURL(reqInfo.method, reqInfo.url, reqInfo.async, =
reqInfo.successCallback, reqInfo);
	}, 0); =20
};

Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.cancelLoadData =
=3D function()
{
	if (this.state =3D=3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED)
	{
		if (this.timer)
		{
			this.timer.clearTimeout();
			this.timer =3D null;
		}

		this.doc =3D null;
		this.state =3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest.NOT_LOADED;
	}
};

Spry.Data.XMLDataSet.LoadManager.getCacheKey =3D function(reqInfo)
{
	return reqInfo.method + "::" + reqInfo.url + "::" + reqInfo.postData + =
"::" + reqInfo.username;
};

Spry.Data.XMLDataSet.LoadManager.loadData =3D function(reqInfo, ds, =
useCache)
{
	if (!reqInfo)
		return null;

	var cacheObj =3D null;
	var cacheKey =3D null;

	if (useCache)
	{
		cacheKey =3D Spry.Data.XMLDataSet.LoadManager.getCacheKey(reqInfo);
		cacheObj =3D Spry.Data.XMLDataSet.LoadManager.cache[cacheKey];
	}

	if (cacheObj)
	{
		if (cacheObj.state =3D=3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED)
		{
			if (ds)
				cacheObj.addObserver(ds);
			return cacheObj;
		}
		else if (cacheObj.state =3D=3D =
Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL)
		{
			// Data is already cached so if we have a data set, trigger an async =
call
			// that tells it to load its data.
			if (ds)
				setTimeout(function() { ds.setDataFromDoc(cacheObj.doc); }, 0);
			return cacheObj;
		}
	}

	// We're either loading this url for the first time, or an error =
occurred when
	// we last tried to load it, or the caller requested a forced load.

	if (!cacheObj)
	{
		cacheObj =3D new =
Spry.Data.XMLDataSet.LoadManager.CachedRequest(reqInfo);
		if (useCache)
		{
			Spry.Data.XMLDataSet.LoadManager.cache[cacheKey] =3D cacheObj;

			// Add an observer that will remove the cacheObj from the cache
			// if there is a load request failure.
			cacheObj.addObserver({ onRequestError: function() { =
Spry.Data.XMLDataSet.LoadManager.cache[cacheKey] =3D undefined; }});
		}
	}

	if (ds)
		cacheObj.addObserver(ds);

	cacheObj.loadData();

	return cacheObj;
};

Spry.Data.XMLDataSet.LoadManager.cancelLoadData =3D function(cacheObj, =
ds)
{
	if (cacheObj)
	{
		if (ds)
			cacheObj.removeObserver(ds);
		else
			cacheObj.cancelLoadData();
	}
};

//////////////////////////////////////////////////////////////////////
//
// Spry.Data.Region
//
//////////////////////////////////////////////////////////////////////
=20
Spry.Data.Region =3D function(regionNode, name, isDetailRegion, data, =
dataSets, regionStates, hasBehaviorAttributes)
{
	this.regionNode =3D regionNode;
	this.name =3D name;
	this.isDetailRegion =3D isDetailRegion;
	this.data =3D data;
	this.dataSets =3D dataSets;
	this.hasBehaviorAttributes =3D hasBehaviorAttributes;
	this.tokens =3D null;
	this.currentState =3D null;
	this.states =3D { ready: true };

	Spry.Utils.setOptions(this.states, regionStates);

	// Add the region as an observer to the dataSet!
	for (var i =3D 0; i < this.dataSets.length; i++)
	{
		var ds =3D this.dataSets[i];

		try=20
		{
			if (ds)
				ds.addObserver(this);
		}
		catch(e) { Spry.Debug.reportError("Failed to add '" + this.name + "' =
as a dataSet observer!\n"); }
	}
}; // End of Spry.Data.Region() constructor.

Spry.Data.Region.hiddenRegionClassName =3D "SpryHiddenRegion";
Spry.Data.Region.evenRowClassName =3D "even";
Spry.Data.Region.oddRowClassName =3D "odd";
Spry.Data.Region.notifiers =3D {};

Spry.Data.Region.addObserver =3D function(regionID, observer)
{
	var n =3D Spry.Data.Region.notifiers[regionID];
	if (!n)
	{
		n =3D new Spry.Utils.Notifier();
		Spry.Data.Region.notifiers[regionID] =3D n;
	}
	n.addObserver(observer);
};

Spry.Data.Region.removeObserver =3D function(regionID, observer)
{
	var n =3D Spry.Data.Region.notifiers[regionID];
	if (n)
		n.removeObserver(observer);
};

Spry.Data.Region.notifyObservers =3D function(methodName, regionID)
{
	var n =3D Spry.Data.Region.notifiers[regionID];
	if (n)
		n.notifyObservers(methodName, { regionID: regionID });
};

Spry.Data.Region.RS_Error =3D 0x01;
Spry.Data.Region.RS_LoadingData =3D 0x02;
Spry.Data.Region.RS_PreUpdate =3D 0x04;
Spry.Data.Region.RS_PostUpdate =3D 0x08;

Spry.Data.Region.prototype.getState =3D function()
{
	return this.currentState;
};

Spry.Data.Region.prototype.setState =3D function(stateName, =
suppressNotfications)
{
	this.currentState =3D stateName;

	// If the region has content that is specific to this
	// state, regenerate the region so that its markup is updated.

	if (this.states[stateName])
	{
		if (!suppressNotfications)
			Spry.Data.Region.notifyObservers("onPreUpdate", this.name);
=09
		// Make the region transform the xml data. The result is
		// a string that we need to parse and insert into the document.
		var str =3D this.transform();
=09
		// Clear out any previous transformed content.
		// this.clearContent();
=09
		if (Spry.Data.Region.debug)
			Spry.Debug.trace("<hr />Generated region markup for '" + this.name + =
"':<br /><br />" + Spry.Utils.encodeEntities(str));

		// Now insert the new transformed content into the document.
		this.regionNode.innerHTML =3D str;
=09
		// Now run through the content looking for attributes
		// that tell us what behaviors to attach to each element.
		if (this.hasBehaviorAttributes)
			this.attachBehaviors();
=09
		if (!suppressNotfications)
			Spry.Data.Region.notifyObservers("onPostUpdate", this.name);
	}
};

Spry.Data.Region.prototype.getDataSets =3D function()
{
	return this.dataSets;
};

Spry.Data.Region.prototype.addDataSet =3D function(aDataSet)
{
	if (!aDataSet)
		return;

	if (!this.dataSets)
		this.dataSets =3D new Array;

	// Check to see if the data set is already in our list.

	for (var i =3D 0; i < this.dataSets.length; i++)
	{
		if (this.dataSets[i] =3D=3D aDataSet)
			return; // It's already in our list!
	}

	this.dataSets.push(aDataSet);
	aDataSet.addObserver(this);
};

Spry.Data.Region.prototype.removeDataSet =3D function(aDataSet)
{
	if (!aDataSet || this.dataSets)
		return;

	for (var i =3D 0; i < this.dataSets.length; i++)
	{
		if (this.dataSets[i] =3D=3D aDataSet)
		{
			this.dataSets.splice(i, 1);
			aDataSet.removeObserver(this);
			return;
		}
	}
};

Spry.Data.Region.prototype.onPreLoad =3D function(dataSet)
{
	if (this.currentState !=3D "loading")
		this.setState("loading");
};

Spry.Data.Region.prototype.onLoadError =3D function(dataSet)
{
	if (this.currentState !=3D "error")
		this.setState("error");
	Spry.Data.Region.notifyObservers("onError", this.name);
};

Spry.Data.Region.prototype.onCurrentRowChanged =3D function(dataSet, =
data)
{
	if (this.isDetailRegion)
		this.updateContent();
};

Spry.Data.Region.prototype.onPostSort =3D function(dataSet, data)
{
	this.updateContent();
};

Spry.Data.Region.prototype.onDataChanged =3D function(dataSet, data)
{
	this.updateContent();
};

Spry.Data.Region.enableBehaviorAttributes =3D true;
Spry.Data.Region.behaviorAttrs =3D {};

Spry.Data.Region.behaviorAttrs["spry:select"] =3D
{
	attach: function(node, value)
	{
		var selectGroupName =3D null;
		try { selectGroupName =3D =
node.attributes.getNamedItem("spry:selectgroup").value; } catch (e) {}
		if (!selectGroupName)
			selectGroupName =3D "default";

		Spry.Utils.addEventListener(node, "click", function(event) { =
Spry.Utils.SelectionManager.select(selectGroupName, node, value); }, =
false);
	=09
		if (node.attributes.getNamedItem("spry:selected"))
			Spry.Utils.SelectionManager.select(selectGroupName, node, value);
	}
};

Spry.Data.Region.behaviorAttrs["spry:hover"] =3D
{
	attach: function(node, value)
	{
		Spry.Utils.addEventListener(node, "mouseover", function(event){ =
Spry.Utils.addClassName(node, value); }, false);
		Spry.Utils.addEventListener(node, "mouseout", function(event){ =
Spry.Utils.removeClassName(node, value); }, false);
	}
};

Spry.Data.Region.prototype.attachBehaviors =3D function()
{
	Spry.Utils.getNodesByFunc(this.regionNode, function(node)
	{
		if (!node)
			return false;
		try
		{
			var attrs =3D node.attributes;
			for (var i =3D 0; i < attrs.length; i++)
			{
				var attr =3D attrs[i];
				var behavior =3D =
Spry.Data.Region.behaviorAttrs[attr.nodeName.toLowerCase()];
				if (behavior)
					behavior.attach(node, attr.value);
			}
		}
		catch(e)
		{
		}

		return false;
	});
};

Spry.Data.Region.prototype.updateContent =3D function()
{
	var allDataSetsReady =3D true;

	var dsArray =3D this.getDataSets();

	if (!dsArray || dsArray.length < 1)
	{
		Spry.Debug.reportError("updateContent(): Region '" + this.name + "' =
has no data set!\n");
		return;
	}

	for (var i =3D 0; i < dsArray.length; i++)
	{
		var ds =3D dsArray[i];

		if (ds)
		{
			if (ds.getLoadDataRequestIsPending())
				allDataSetsReady =3D false;
			else if (!ds.getDataWasLoaded())
			{
				// Kick off the loading of the data if it hasn't happened yet.
				ds.loadData();
				allDataSetsReady =3D false;
			}
		}
	}

	if (!allDataSetsReady)
	{
		Spry.Data.Region.notifyObservers("onLoadingData", this.name);

		// Just return, this method will get called again automatically
		// as each data set load completes!
		return;
	}

	this.setState("ready");
};

Spry.Data.Region.prototype.clearContent =3D function()
{
	Spry.Utils.removeAllChildren(this.regionNode);
};

Spry.Data.Region.processContentPI =3D function(inStr)
{
	var outStr =3D "";
	var regexp =3D /<!--\s*<\/?spry:content\s*[^>]*>\s*-->/mg;
	var searchStartIndex =3D 0;
	var processingContentTag =3D 0;

	while (inStr.length)
	{
		var results =3D regexp.exec(inStr);
		if (!results || !results[0])
		{
			outStr +=3D inStr.substr(searchStartIndex, inStr.length - =
searchStartIndex);
			break;
		}

		if (!processingContentTag && results.index !=3D searchStartIndex)
		{
			// We found a match but it's not at the start of the inStr.
			// Create a string token for everything that precedes the match.
			outStr +=3D inStr.substr(searchStartIndex, results.index - =
searchStartIndex);
		}

		if (results[0].search(/<\//) !=3D -1)
		{
			--processingContentTag;
			if (processingContentTag)
				Spry.Debug.reportError("Nested spry:content regions are not =
allowed!\n");
		}
		else
		{
			++processingContentTag;
			var dataRefStr =3D results[0].replace(/.*\bdataref=3D"/, "");
			outStr +=3D dataRefStr.replace(/".*$/, "");
		}
	=09
		searchStartIndex =3D regexp.lastIndex;
	}

	return outStr;
}

Spry.Data.Region.prototype.tokenizeData =3D function(dataStr)
{
	// If there is no data, there's nothing to do.
	if (!dataStr)
		return null;

	var rootToken =3D new =
Spry.Data.Region.Token(Spry.Data.Region.Token.LIST_TOKEN, null, null, =
null);
	var tokenStack =3D new Array;
	var parseStr =3D Spry.Data.Region.processContentPI(dataStr);

	tokenStack.push(rootToken);

	// Create a regular expression that will match one of the following:
	//
	//   <spry:repeat select=3D"regionName" test=3D"true">
	//   </spry:repeat>
	//   {valueReference}
	var regexp =3D =
/((<!--\s*){0,1}<\/{0,1}spry:[^>]+>(\s*-->){0,1})|((\{|%7[bB])[^\}\s%]+(\=
}|%7[dD]))/mg;
	var searchStartIndex =3D 0;

	while(parseStr.length)
	{
		var results =3D regexp.exec(parseStr);
		var token =3D null;
	=09
		if (!results || !results[0])
		{
			// If we get here, the rest of the parseStr should be
			// just a plain string. Create a token for it and then
			// break out of the list.
			var str =3D parseStr.substr(searchStartIndex, parseStr.length - =
searchStartIndex);
			token =3D new =
Spry.Data.Region.Token(Spry.Data.Region.Token.STRING_TOKEN, null, str, =
str);
			tokenStack[tokenStack.length - 1].addChild(token);
			break;
		}

		if (results.index !=3D searchStartIndex)
		{
			// We found a match but it's not at the start of the parseStr.
			// Create a string token for everything that precedes the match.
			var str =3D parseStr.substr(searchStartIndex, results.index - =
searchStartIndex);
			token =3D new =
Spry.Data.Region.Token(Spry.Data.Region.Token.STRING_TOKEN, null, str, =
str);
			tokenStack[tokenStack.length - 1].addChild(token);
		}

		// We found a string that needs to be turned into a token. Create a =
token
		// for it and then update parseStr for the next iteration.
		if (results[0].search(/^({|%7[bB])/) !=3D -1 /* results[0].charAt(0) =
=3D=3D '{' */)
		{
			var valueName =3D results[0];
			var regionStr =3D results[0];
		=09
			// Strip off brace and url encode brace chars inside the valueName.

			valueName =3D valueName.replace(/^({|%7[bB])/, "");
			valueName =3D valueName.replace(/(}|%7[dD])$/, "");

			// Check to see if our value begins with the name of a data set.
			// For example: {dataSet:tokenValue}. If it is, we need to save
			// the data set name so we know which data set to use to get the
			// value for the token during the region transform.

			var dataSetName =3D null;
			var splitArray =3D valueName.split(/::/);

			if (splitArray.length > 1)
			{
				dataSetName =3D splitArray[0];
				valueName =3D splitArray[1];
			}

			// Convert any url encoded braces to regular brace chars.

			regionStr =3D regionStr.replace(/^%7[bB]/, "{");
			regionStr =3D regionStr.replace(/%7[dD]$/, "}");

			// Now create a token for the placeholder.

			token =3D new =
Spry.Data.Region.Token(Spry.Data.Region.Token.VALUE_TOKEN, dataSetName, =
valueName, new String(regionStr));
			tokenStack[tokenStack.length - 1].addChild(token);
		}
		else if (results[0].charAt(0) =3D=3D '<')
		{
			// Extract out the name of the processing instruction.
			var piName =3D results[0].replace(/^(<!--\s*){0,1}<\/?/, "");
			piName =3D piName.replace(/>(\s*-->){0,1}|\s.*$/, "");
		=09
			if (results[0].search(/<\//) !=3D -1 /* results[0].charAt(1) =3D=3D =
'/' */)
			{
				// We found a processing instruction close tag. Pop the top of the
				// token stack!
				//
				// XXX: We need to make sure that the close tag name matches the one
				//      on the top of the token stack!
				if (tokenStack[tokenStack.length - 1].tokenType !=3D =
Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN)
				{
					Spry.Debug.reportError("Invalid processing instruction close tag: " =
+ piName + " -- " + results[0] + "\n");
					return null;
				}

				tokenStack.pop();
			}
			else
			{
				// Create the processing instruction token, add it as a child of the =
token
				// at the top of the token stack, and then push it on the stack so =
that it
				// becomes the parent of any tokens between it and its close tag.

				var piDesc =3D Spry.Data.Region.PI.instructions[piName];

				if (piDesc)
				{
					var dataSet =3D null;

					var selectedDataSetName =3D "";
					if (results[0].search(/^.*\bselect=3D\"/) !=3D -1)
					{
						selectedDataSetName =3D results[0].replace(/^.*\bselect=3D\"/, =
"");
						selectedDataSetName =3D selectedDataSetName.replace(/".*$/, "");
=09
						if (selectedDataSetName)
						{
							try
							{
								dataSet =3D eval(selectedDataSetName);
							}
							catch (e)
							{
								Spry.Debug.reportError("Caught exception in tokenizeData() while =
trying to retrieve data set (" + selectedDataSetName + "): " + e + =
"\n");
								dataSet =3D null;
								selectedDataSetName =3D "";
							}
						}
					}

					// Check if the repeat has a test attribute.
					var jsExpr =3D null;
					if (results[0].search(/^.*\btest=3D\"/) !=3D -1)
					{
						jsExpr =3D results[0].replace(/^.*\btest=3D\"/, "");
						jsExpr =3D jsExpr.replace(/".*$/, "");
						jsExpr =3D Spry.Utils.decodeEntities(jsExpr);
					}

					// Check if the instruction has a state name specified.
					var regionState =3D null;
					if (results[0].search(/^.*\bname=3D\"/) !=3D -1)
					{
						regionState =3D results[0].replace(/^.*\bname=3D\"/, "");
						regionState =3D regionState.replace(/".*$/, "");
						regionState =3D Spry.Utils.decodeEntities(regionState);
					}

					var piData =3D new Spry.Data.Region.Token.PIData(piName, =
selectedDataSetName, jsExpr, regionState);

					token =3D new =
Spry.Data.Region.Token(Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKE=
N, dataSet, piData, new String(results[0]));

					tokenStack[tokenStack.length - 1].addChild(token);
					tokenStack.push(token);
				}
				else
				{
					Spry.Debug.reportError("Unsupported region processing instruction: =
" + results[0] + "\n");
					return null;
				}
			}
		}
		else
		{
			Spry.Debug.reportError("Invalid region token: " + results[0] + "\n");
			return null;
		}

		searchStartIndex =3D regexp.lastIndex;
	}

	return rootToken;
};

Spry.Data.Region.prototype.processTokenChildren =3D function(token, =
processContext)
{
	// The use of an array to gather the strings returned from processing
	// the child tokens is actually a performance enhancement for IE.
	// The original code:
	//
	//     for (var i =3D 0; i < token.children.length; i++)
	//       outputStr +=3D this.processTokens(token.children[i], =
processContext);
	//
	// seemed to cause an n-square problem in IE. Using an array with
	// a final join reduced one of our test cases (SelectExample.html) from =
over
	// a minute to about 15 seconds.
=09
	var strArr =3D [ "" ];
	var len =3D token.children.length;
	var children =3D token.children;
=09
	for (var i =3D 0; i < len; i++)
		strArr.push(this.processTokens(children[i], processContext));

	return strArr.join("");
};

Spry.Data.Region.prototype.processTokens =3D function(token, =
processContext)
{
	if (!processContext)
	{
		processContext =3D new Spry.Data.Region.ProcessingContext(this);
		if (!processContext)
			return "";
	}

	var outputStr =3D "";
	var i =3D 0;

	switch(token.tokenType)
	{
		case Spry.Data.Region.Token.LIST_TOKEN:
			outputStr +=3D this.processTokenChildren(token, processContext);
			break;
		case Spry.Data.Region.Token.STRING_TOKEN:
			outputStr +=3D token.data;
			break;
		case Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN:
			if (token.data.name =3D=3D "spry:repeat")
			{
				var dataSet =3D null;

				if (token.dataSet)
					dataSet =3D token.dataSet;
				else
					dataSet =3D this.dataSets[0];

				if (dataSet)
				{
					var dsContext =3D processContext.getDataSetContext(dataSet);
					if (!dsContext)
					{
						Spry.Debug.reportError("processTokens() failed to get a data set =
context!\n");
						break;
					}

					var numRows =3D dsContext.getNumRows();
					var dataSetRows =3D dataSet.getData();
					dsContext.pushState();

					for (i =3D 0; i < numRows; i++)
					{
						dsContext.setRowIndex(i);
						var testVal =3D true;
						if (token.data.jsExpr)
						{
							var jsExpr =3D =
Spry.Data.Region.processDataRefString(processContext, token.data.jsExpr, =
null, true);
							try { testVal =3D Spry.Utils.eval(jsExpr); }
							catch(e)
							{
								Spry.Debug.trace("Caught exception in =
Spry.Data.Region.prototype.processTokens while evaluating: " + jsExpr + =
"\n    Exception:" + e + "\n");
								testVal =3D true;
							}
						}

						if (testVal)
							outputStr +=3D this.processTokenChildren(token, processContext);
					}

					dsContext.popState();
				}
			}
			else if (token.data.name =3D=3D "spry:if")
			{
				var testVal =3D true;
			=09
				if (token.data.jsExpr)
				{
					var jsExpr =3D =
Spry.Data.Region.processDataRefString(processContext, token.data.jsExpr, =
null, true);

					try { testVal =3D Spry.Utils.eval(jsExpr); }
					catch(e)
					{
						Spry.Debug.trace("Caught exception in =
Spry.Data.Region.prototype.processTokens while evaluating: " + jsExpr + =
"\n    Exception:" + e + "\n");
						testVal =3D true;
					}
				}
=09
				if (testVal)
					outputStr +=3D this.processTokenChildren(token, processContext);
			}
			else if (token.data.name =3D=3D "spry:choose")
			{
				var defaultChild =3D null;
				var childToProcess =3D null;
				var testVal =3D false;
				var j =3D 0;

				// All of the children of the spry:choose token should be of the =
type spry:when or spry:default.
				// Run through all of the spry:when children and see if any of their =
test expressions return true.
				// If one does, then process its children tokens. If none of the =
test expressions return true,
				// process the spry:default token's children, if it exists.

				for (j =3D 0; j < token.children.length; j++)
				{
					var child =3D token.children[j];
					if (child.tokenType =3D=3D =
Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN)
					{
						if (child.data.name =3D=3D "spry:when")
						{
							if (child.data.jsExpr)
							{
								var jsExpr =3D =
Spry.Data.Region.processDataRefString(processContext, child.data.jsExpr, =
null, true);
								try { testVal =3D Spry.Utils.eval(jsExpr); }
								catch(e)
								{
									Spry.Debug.trace("Caught exception in =
Spry.Data.Region.prototype.processTokens while evaluating: " + jsExpr + =
"\n    Exception:" + e + "\n");
									testVal =3D false;
								}

								if (testVal)
								{
									childToProcess =3D child;
									break;
								}
							}
						}
						else if (child.data.name =3D=3D "spry:default")
							defaultChild =3D child;
					}
				}

				// If we didn't find a match, use the token for the default case.

				if (!childToProcess && defaultChild)
					childToProcess =3D defaultChild;

				if (childToProcess)
					outputStr +=3D this.processTokenChildren(childToProcess, =
processContext);
			}
			else if (token.data.name =3D=3D "spry:state")
			{
				var testVal =3D true;
			=09
				if (!token.data.regionState || token.data.regionState =3D=3D =
this.currentState)
					outputStr +=3D this.processTokenChildren(token, processContext);
			}
			else
			{
				Spry.Debug.reportError("processTokens(): Unknown processing =
instruction: " + token.data.name + "\n");
				return "";
			}
			break;
		case Spry.Data.Region.Token.VALUE_TOKEN:

			var dataSet =3D token.dataSet;
			if (!dataSet && this.dataSets && this.dataSets.length > 0 && =
this.dataSets[0])
			{
				// No dataSet was specified by the token, so use whatever the first
				// data set specified in the region.

				dataSet =3D this.dataSets[0];
			}
			if (!dataSet)
			{
				Spry.Debug.reportError("processTokens(): Value reference has no data =
set specified: " + token.regionStr + "\n");
				return "";
			}

			var dsContext =3D processContext.getDataSetContext(dataSet);
			if (!dsContext)
			{
				Spry.Debug.reportError("processTokens: Failed to get a data set =
context!\n");
				return "";
			}

			var ds =3D dsContext.getDataSet();

			if (token.data =3D=3D "ds_RowNumber")
				outputStr +=3D dsContext.getRowIndex();
			else if (token.data =3D=3D "ds_RowNumberPlus1")
				outputStr +=3D (dsContext.getRowIndex() + 1);
			else if (token.data =3D=3D "ds_RowCount")
				outputStr +=3D dsContext.getNumRows();
			else if (token.data =3D=3D "ds_UnfilteredRowCount")
				outputStr +=3D dsContext.getNumRows(true);
			else if (token.data =3D=3D "ds_CurrentRowNumber")
				outputStr +=3D ds.getRowNumber(ds.getCurrentRow());
			else if (token.data =3D=3D "ds_CurrentRowID")
				outputStr +=3D ds.curRowID;
			else if (token.data =3D=3D "ds_EvenOddRow")
				outputStr +=3D (dsContext.getRowIndex() % 2) ? =
Spry.Data.Region.evenRowClassName : Spry.Data.Region.oddRowClassName;
			else if (token.data =3D=3D "ds_SortOrder")
				outputStr +=3D (ds.lastSortOrder) ? ds.lastSortOrder : "";
			else if (token.data =3D=3D "ds_SortColumn")
				outputStr +=3D ds.getSortColumn();
			else
			{
				var curDataSetRow =3D dsContext.getCurrentRow();
				if (curDataSetRow)
					outputStr +=3D curDataSetRow[token.data];
			}
			break;
		default:
			Spry.Debug.reportError("processTokens(): Invalid token type: " + =
token.regionStr + "\n");
			break;
	}

	return outputStr;
};

Spry.Data.Region.prototype.transform =3D function()
{
	if (this.data && !this.tokens)
		this.tokens =3D this.tokenizeData(this.data);

	if (!this.tokens)
		return "";

	return this.processTokens(this.tokens, null);
};

Spry.Data.Region.PI =3D {};
Spry.Data.Region.PI.instructions =3D {};

Spry.Data.Region.PI.buildOpenTagForValueAttr =3D function(ele, piName, =
attrName)
{
	if (!ele || !piName)
		return "";

	var jsExpr =3D "";

	try
	{
		var testAttr =3D ele.attributes.getNamedItem(piName);
		if (testAttr && testAttr.value)
			jsExpr =3D Spry.Utils.encodeEntities(testAttr.value);
	}
	catch (e) { jsExpr =3D ""; }

	if (!jsExpr)
	{
		Spry.Debug.reportError(piName + " attribute requires a JavaScript =
expression that returns true or false!\n");
		return "";
	}

	return "<" + Spry.Data.Region.PI.instructions[piName].tagName + " " + =
attrName +"=3D\"" + jsExpr + "\">";
};

Spry.Data.Region.PI.buildOpenTagForTest =3D function(ele, piName)
{
	return Spry.Data.Region.PI.buildOpenTagForValueAttr(ele, piName, =
"test");
};

Spry.Data.Region.PI.buildOpenTagForState =3D function(ele, piName)
{
	return Spry.Data.Region.PI.buildOpenTagForValueAttr(ele, piName, =
"name");
};

Spry.Data.Region.PI.buildOpenTagForRepeat =3D function(ele, piName)
{
	if (!ele || !piName)
		return "";

	var selectAttrStr =3D "";

	try
	{
		var selectAttr =3D ele.attributes.getNamedItem(piName);
		if (selectAttr && selectAttr.value)
		{
			selectAttrStr =3D selectAttr.value;
			selectAttrStr =3D selectAttrStr.replace(/\s/g, "");
		}
	}
	catch (e) { selectAttrStr =3D ""; }

	if (!selectAttrStr)
	{
		Spry.Debug.reportError(piName + " attribute requires a data set =
name!\n");
		return "";
	}

	var testAttrStr =3D "";

	try
	{
		var testAttr =3D ele.attributes.getNamedItem("spry:test");
		if (testAttr)
		{
			if (testAttr.value)
				testAttrStr =3D " test=3D\"" + =
Spry.Utils.encodeEntities(testAttr.value) + "\"";
			ele.attributes.removeNamedItem(testAttr.nodeName);
		}
	}
	catch (e) { testAttrStr =3D ""; }

	return "<" + Spry.Data.Region.PI.instructions[piName].tagName + " =
select=3D\"" + selectAttrStr + "\"" + testAttrStr + ">";
};

Spry.Data.Region.PI.buildOpenTagForContent =3D function(ele, piName)
{
	if (!ele || !piName)
		return "";

	var dataRefStr =3D "";

	try
	{
		var contentAttr =3D ele.attributes.getNamedItem(piName);
		if (contentAttr && contentAttr.value)
			dataRefStr =3D Spry.Utils.encodeEntities(contentAttr.value);
	}
	catch (e) { dataRefStr =3D ""; }

	if (!dataRefStr)
	{
		Spry.Debug.reportError(piName + " attribute requires a data =
reference!\n");
		return "";
	}

	return "<" + Spry.Data.Region.PI.instructions[piName].tagName + " =
dataref=3D\"" + dataRefStr + "\">";
};

Spry.Data.Region.PI.buildOpenTag =3D function(ele, piName)
{
	return "<" + Spry.Data.Region.PI.instructions[piName].tagName + ">";
};

Spry.Data.Region.PI.buildCloseTag =3D function(ele, piName)
{
	return "</" + Spry.Data.Region.PI.instructions[piName].tagName + ">";
};

Spry.Data.Region.PI.instructions["spry:state"] =3D { tagName: =
"spry:state", childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForState, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };
Spry.Data.Region.PI.instructions["spry:if"] =3D { tagName: "spry:if", =
childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForTest, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };
Spry.Data.Region.PI.instructions["spry:repeat"] =3D { tagName: =
"spry:repeat", childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForRepeat, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };
Spry.Data.Region.PI.instructions["spry:repeatchildren"] =3D { tagName: =
"spry:repeat", childrenOnly: true, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForRepeat, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };
Spry.Data.Region.PI.instructions["spry:choose"] =3D { tagName: =
"spry:choose", childrenOnly: true, getOpenTag: =
Spry.Data.Region.PI.buildOpenTag, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };
Spry.Data.Region.PI.instructions["spry:when"] =3D { tagName: =
"spry:when", childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForTest, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };
Spry.Data.Region.PI.instructions["spry:default"] =3D { tagName: =
"spry:default", childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTag, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };
Spry.Data.Region.PI.instructions["spry:content"] =3D { tagName: =
"spry:content", childrenOnly: true, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForContent, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };

Spry.Data.Region.PI.orderedInstructions =3D [ "spry:state", "spry:if", =
"spry:repeat", "spry:repeatchildren", "spry:choose", "spry:when", =
"spry:default", "spry:content" ];

Spry.Data.Region.getTokensFromStr =3D function(str)
{
	// XXX: This will need to be modified if we support
	// tokens that use javascript between the braces!
	if (!str)
		return null;
	return str.match(/{[^}]+}/g);
};

Spry.Data.Region.processDataRefString =3D function(processingContext, =
regionStr, dataSetsToUse, isJSExpr)
{
	if (!regionStr)
		return "";

	if (!processingContext && !dataSetsToUse)
		return regionStr;

	var resultStr =3D "";
	var re =3D new RegExp("\\{([^\\}:]+::)?[^\\}]+\\}", "g");
	var startSearchIndex =3D 0;

	while (startSearchIndex < regionStr.length)
	{
		var reArray =3D re.exec(regionStr);
		if (!reArray || !reArray[0])
		{
			resultStr +=3D regionStr.substr(startSearchIndex, regionStr.length - =
startSearchIndex);
			return resultStr;
		}

		if (reArray.index !=3D startSearchIndex)
			resultStr +=3D regionStr.substr(startSearchIndex, reArray.index - =
startSearchIndex);

		var dsName =3D "";
		if (reArray[0].search(/^\{[^}:]+::/) !=3D -1)
			dsName =3D reArray[0].replace(/^\{|::.*/g, "");

		var fieldName =3D reArray[0].replace(/^\{|.*::|\}/g, "");
		var row =3D null;

		if (processingContext)
		{
			var dsContext =3D processingContext.getDataSetContext(dsName);

			if (fieldName =3D=3D "ds_RowNumber")
			{
				resultStr +=3D dsContext.getRowIndex();
				row =3D null;
			}
			else if (fieldName =3D=3D "ds_RowNumberPlus1")
			{
				resultStr +=3D (dsContext.getRowIndex() + 1);
				row =3D null;
			}
			else if (fieldName =3D=3D "ds_RowCount")
			{
				resultStr +=3D dsContext.getNumRows();
				row =3D null;
			}
			else if (fieldName =3D=3D "ds_UnfilteredRowCount")
			{
				resultStr +=3D dsContext.getNumRows(true);
				row =3D null;
			}
			else if (fieldName =3D=3D "ds_CurrentRowNumber")
			{
				var ds =3D dsContext.getDataSet();
				resultStr +=3D ds.getRowNumber(ds.getCurrentRow());
				row =3D null;
			}
			else if (fieldName =3D=3D "ds_CurrentRowID")
			{
				var ds =3D dsContext.getDataSet();
				resultStr +=3D "" + ds.curRowID;
				row =3D null;
			}
			else if (fieldName =3D=3D "ds_EvenOddRow")
			{
				resultStr +=3D (dsContext.getRowIndex() % 2) ? =
Spry.Data.Region.evenRowClassName : Spry.Data.Region.oddRowClassName;
				row =3D null;
			}
			else if (fieldName =3D=3D "ds_SortOrder")
			{
				var sortOrder =3D dsContext.getDataSet().lastSortOrder;
				if (sortOrder)
					resultStr +=3D sortOrder;
				row =3D null;
			}
			else if (fieldName =3D=3D "ds_SortColumn")
			{
				resultStr +=3D dsContext.getDataSet().getSortColumn();
				row =3D null;
			}
			else
				row =3D processingContext.getCurrentRowForDataSet(dsName);
		}
		else
		{
			var ds =3D dsName ? dataSetsToUse[dsName] : dataSetsToUse[0];
			if (ds)
				row =3D ds.getCurrentRow();
		}

		if (row)
			resultStr +=3D isJSExpr ? Spry.Utils.escapeQuotesAndLineBreaks("" + =
row[fieldName]) : row[fieldName];

		if (startSearchIndex =3D=3D re.lastIndex)
		{
			// On IE if there was a match near the end of the string, it =
sometimes
			// leaves re.lastIndex pointing to the value it had before the last =
time
			// we called re.exec. We check for this case to prevent an infinite =
loop!
			// We need to write out any text in regionStr that comes after the =
last
			// match.

			var leftOverIndex =3D reArray.index + reArray[0].length;
			if (leftOverIndex < regionStr.length)
				resultStr +=3D regionStr.substr(leftOverIndex);

			break;
		}

		startSearchIndex =3D re.lastIndex;
	}

	return resultStr;
};

Spry.Data.Region.strToDataSetsArray =3D function(str, returnRegionNames)
{
	var dataSetsArr =3D new Array;
	var foundHash =3D {};

	if (!str)
		return dataSetsArr;

	str =3D str.replace(/\s+/g, " ");
	str =3D str.replace(/^\s|\s$/g, "");
	var arr =3D str.split(/ /);


	for (var i =3D 0; i < arr.length; i++)
	{
		if (arr[i] && !Spry.Data.Region.PI.instructions[arr[i]])
		{
			try {
				var dataSet =3D eval(arr[i]);

				if (!foundHash[arr[i]])
				{
					if (returnRegionNames)
						dataSetsArr.push(arr[i]);
					else
						dataSetsArr.push(dataSet);
					foundHash[arr[i]] =3D true;
				}
			}
			catch (e) { /* Spry.Debug.trace("Caught exception: " + e + "\n"); */ =
}
		}
	}

	return dataSetsArr;
};

Spry.Data.Region.DSContext =3D function(dataSet)
{
	var m_self =3D this;
	var m_dataSet =3D dataSet;
	var m_curRowIndexArray =3D [ -1 ]; // -1 means return whatever the =
current row is inside the data set.

	// Private Methods:

	function getInternalRowIndex() { return =
m_curRowIndexArray[m_curRowIndexArray.length - 1]; }

	// Public Methods:
	this.resetAll =3D function() { m_curRowIndexArray =3D [ =
m_dataSet.getCurrentRow() ] };
	this.getDataSet =3D function() { return m_dataSet; };
	this.getNumRows =3D function(unfiltered)
	{
		var rows =3D unfiltered ? m_dataSet.getUnfilteredData() : =
m_dataSet.getData();
		return rows ? rows.length : 0;
	};
	this.getCurrentRow =3D function()
	{
		if (m_curRowIndexArray.length < 2 || getInternalRowIndex() < 0)
			return m_dataSet.getCurrentRow();
=09
		var data =3D m_dataSet.getData();
		var curRowIndex =3D getInternalRowIndex();
=09
		if (curRowIndex < 0 || curRowIndex > data.length)
		{
			Spry.Debug.reportError("Invalid index used in =
Spry.Data.Region.DSContext.getCurrentRow()!\n");
			return null;
		}
=09
		return data[curRowIndex];
	};
	this.getRowIndex =3D function()
	{
		var curRowIndex =3D getInternalRowIndex();
		if (curRowIndex >=3D 0)
			return curRowIndex;

		return m_dataSet.getRowNumber(m_dataSet.getCurrentRow());
	};
	this.setRowIndex =3D function(rowIndex) { =
m_curRowIndexArray[m_curRowIndexArray.length - 1] =3D rowIndex; };
	this.pushState =3D function() { m_curRowIndexArray.push( =
getInternalRowIndex()); };
	this.popState =3D function()
	{
		if (m_curRowIndexArray.length < 2)
		{
			// Our array should always have at least one element in it!
			Spry.Debug.reportError("Stack underflow in =
Spry.Data.Region.DSContext.popState()!\n");
			return;
		}
		m_curRowIndexArray.pop();
	};
};

Spry.Data.Region.ProcessingContext =3D function(region)
{
	var m_self =3D this;
	var m_region =3D region;
	var m_dataSetContexts =3D [];
=09
	if (region && region.dataSets)
	{
		for (var i =3D 0; i < region.dataSets.length; i++)
			m_dataSetContexts.push(new =
Spry.Data.Region.DSContext(region.dataSets[i]));
	}

	this.getDataSetContext =3D function(dataSet)
	{
		if (!dataSet)
		{
			// We were called without a specified data set or
			// data set name. Assume the caller wants the first
			// data set in the processing context.

			if (m_dataSetContexts.length > 0)
				return m_dataSetContexts[0];
			return null;
		}

		if (typeof dataSet =3D=3D 'string')
		{
			try { dataSet =3D eval(dataSet); } catch (e) { dataSet =3D null; }
			if (!dataSet)
				return null;
		}
=09
		for (var i =3D 0; i < m_dataSetContexts.length; i++)
		{
			var dsc =3D m_dataSetContexts[i];
			if (dsc.getDataSet() =3D=3D dataSet)
				return dsc;
		}
=09
		return null;
	};

	this.getCurrentRowForDataSet =3D function(dataSet)
	{
		var dsc =3D m_self.getDataSetContext(dataSet);
		if (dsc)
			return dsc.getCurrentRow();
		return null;
	};
};

Spry.Data.Region.Token =3D function(tokenType, dataSet, data, regionStr)
{
	var self =3D this;
	this.tokenType =3D tokenType;
	this.dataSet =3D dataSet;
	this.data =3D data;
	this.regionStr =3D regionStr;
	this.parent =3D null;
	this.children =3D null;
};

Spry.Data.Region.Token.prototype.addChild =3D function(child)
{
	if (!child)
		return;
=09
	if (!this.children)
		this.children =3D new Array;
=09
	this.children.push(child);
	child.parent =3D this;
};

Spry.Data.Region.Token.LIST_TOKEN                   =3D 0;
Spry.Data.Region.Token.STRING_TOKEN                 =3D 1;
Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN =3D 2;
Spry.Data.Region.Token.VALUE_TOKEN                  =3D 3;

Spry.Data.Region.Token.PIData =3D function(piName, data, jsExpr, =
regionState)
{
	var self =3D this;
	this.name =3D piName;
	this.data =3D data;
	this.jsExpr =3D jsExpr;
	this.regionState =3D regionState;
};

Spry.Utils.addLoadListener(function() { setTimeout(function() { =
Spry.Data.initRegions(); }, 0); });

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/contentslider.js?1

//** Featured Content Slider script- =C2=A9 Dynamic Drive DHTML code =
library (http://www.dynamicdrive.com)
//** Last updated: Oct 28th, 06

////Ajax related settings
var csbustcachevar=3D0 //bust potential caching of external pages after =
initial Ajax request? (1=3Dyes, 0=3Dno)
var csloadstatustext=3D"<img =
src=3D'http://media.collegepublisher.com/media/paper960/template/template=
media/loading.gif' /> Requesting content..." //HTML to indicate Ajax =
page is being fetched
var csexternalfiles=3D[] //External .css or .js files to load to style =
the external content(s), if any. Separate multiple files with comma ie: =
["cat.css", dog.js"]

////Section Names////////////////////////
/*

var slidersection=3D new Array(4)
slidersection[0]=3D"News";
slidersection[1]=3D"Features";
slidersection[2]=3D"Opinion";
slidersection[3]=3D"Sports";

*/

////NO NEED TO EDIT BELOW////////////////////////
var enablepersist=3Dtrue
var slidernodes=3Dnew Object() //Object array to store references to =
each content slider's DIV containers (<div class=3D"contentdiv">)
var csloadedobjects=3D"" //Variable to store file names of .js/.css =
files already loaded (if Ajax is used)

function ContentSlider(sliderid, autorun){
var slider=3Ddocument.getElementById(sliderid)
slidernodes[sliderid]=3D[] //Array to store references to this content =
slider's DIV containers (<div class=3D"contentdiv">)
ContentSlider.loadobjects(csexternalfiles) //Load external .js and .css =
files, if any
var alldivs=3Dslider.getElementsByTagName("div")
for (var i=3D0; i<alldivs.length; i++){
if (alldivs[i].className=3D=3D"contentdiv"){
slidernodes[sliderid].push(alldivs[i]) //add this DIV reference to array
if (typeof alldivs[i].getAttribute("rel")=3D=3D"string") //If get this =
DIV's content via Ajax (rel attr contains path to external page)
ContentSlider.ajaxpage(alldivs[i].getAttribute("rel"), alldivs[i])
}
}
ContentSlider.buildpagination(sliderid)
var loadfirstcontent=3Dtrue
if (enablepersist && getCookie(sliderid)!=3D""){ //if enablepersist is =
true and cookie contains corresponding value for slider
var cookieval=3DgetCookie(sliderid).split(":") //process cookie value =
([sliderid, int_pagenumber (div content to jump to)]
if (document.getElementById(cookieval[0])!=3Dnull && typeof =
slidernodes[sliderid][cookieval[1]]!=3D"undefined"){ //check cookie =
value for validity
ContentSlider.turnpage(cookieval[0], parseInt(cookieval[1])) //restore =
content slider's last shown DIV
loadfirstcontent=3Dfalse
}
}
if (loadfirstcontent=3D=3Dtrue) //if enablepersist is false, or cookie =
value doesn't contain valid value for some reason (ie: user modified the =
structure of the HTML)
ContentSlider.turnpage(sliderid, 0) //Display first DIV within slider
if (typeof autorun=3D=3D"number" && autorun>0) //if autorun parameter =
(int_miliseconds) is defined, fire auto run sequence
window[sliderid+"timer"]=3DsetTimeout(function(){ContentSlider.autoturnpa=
ge(sliderid, autorun)}, autorun)
}

ContentSlider.buildpagination=3Dfunction(sliderid){
var paginatediv=3Ddocument.getElementById("paginate-"+sliderid) =
//reference corresponding pagination DIV for slider
var pcontent=3D""
for (var i=3D0; i<slidernodes[sliderid].length; i++) //For each DIV =
within slider, generate a pagination link
/*pcontent+=3D'<a href=3D"#" =
onClick=3D\"ContentSlider.turnpage(\''+sliderid+'\', '+i+'); return =
false\">'+slidersection[i]+'</a> '
pcontent+=3D'<a href=3D"#" style=3D"font-weight: bold;" =
onClick=3D\"ContentSlider.turnpage(\''+sliderid+'\', =
parseInt(this.getAttribute(\'rel\'))); return false\">Next</a>'
paginatediv.innerHTML=3Dpcontent
*/paginatediv.onclick=3Dfunction(){ //cancel auto run sequence (if =
defined) when user clicks on pagination DIV
if (typeof window[sliderid+"timer"]!=3D"undefined")
clearTimeout(window[sliderid+"timer"])
}
}

ContentSlider.turnpage=3Dfunction(sliderid, thepage){
/* Notify the page that this tab index was accessed. */
if (window.tabClickedListener) {
	window.tabClickedListener(thepage);
}
var =
paginatelinks=3Ddocument.getElementById("paginate-"+sliderid).getElements=
ByTagName("a") //gather pagination links
for (var i=3D0; i<slidernodes[sliderid].length; i++){ //For each DIV =
within slider
paginatelinks[i].className=3D"" //empty corresponding pagination link's =
class name
slidernodes[sliderid][i].style.display=3D"none" //hide DIV
}
paginatelinks[thepage].className=3D"selected" //for selected DIV, set =
corresponding pagination link's class name
slidernodes[sliderid][thepage].style.display=3D"block" //show selected =
DIV
//Set "Next" pagination link's (last link within pagination DIV) "rel" =
attribute to the next DIV number to show
paginatelinks[paginatelinks.length-1].setAttribute("rel", =
thenextpage=3D(thepage<paginatelinks.length-2)? thepage+1 : 0)
if (enablepersist)
setCookie(sliderid, sliderid+":"+thepage)
}

ContentSlider.autoturnpage=3Dfunction(sliderid, autorunperiod){
var =
paginatelinks=3Ddocument.getElementById("paginate-"+sliderid).getElements=
ByTagName("a") //Get pagination links
var =
nextpagenumber=3DparseInt(paginatelinks[paginatelinks.length-1].getAttrib=
ute("rel")) //Get page number of next DIV to show
ContentSlider.turnpage(sliderid, nextpagenumber) //Show that DIV
window[sliderid+"timer"]=3DsetTimeout(function(){ContentSlider.autoturnpa=
ge(sliderid, autorunperiod)}, autorunperiod)
}

function getCookie(Name){=20
var re=3Dnew RegExp(Name+"=3D[^;]+", "i"); //construct RE to search for =
target name/value pair
if (document.cookie.match(re)) //if cookie found
return document.cookie.match(re)[0].split("=3D")[1] //return its value
return ""
}

function setCookie(name, value){
document.cookie =3D name+"=3D"+value
}

////////////////Ajax Related functions =
//////////////////////////////////

ContentSlider.ajaxpage=3Dfunction(url, thediv){
var page_request =3D false
var bustcacheparameter=3D""
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request =3D new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE
try {
page_request =3D new ActiveXObject("Msxml2.XMLHTTP")
}=20
catch (e){
try{
page_request =3D new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
thediv.innerHTML=3Dcsloadstatustext
page_request.onreadystatechange=3Dfunction(){
ContentSlider.loadpage(page_request, thediv)
}
if (csbustcachevar) //if bust caching of external page
bustcacheparameter=3D(url.indexOf("?")!=3D-1)? "&"+new Date().getTime() =
: "?"+new Date().getTime()
page_request.open('GET', url+bustcacheparameter, true)
page_request.send(null)
}

ContentSlider.loadpage=3Dfunction(page_request, thediv){
if (page_request.readyState =3D=3D 4 && (page_request.status=3D=3D200 || =
window.location.href.indexOf("http")=3D=3D-1))
thediv.innerHTML=3Dpage_request.responseText
}

ContentSlider.loadobjects=3Dfunction(externalfiles){ //function to load =
external .js and .css files. Parameter accepts a list of external files =
to load (array)
for (var i=3D0; i<externalfiles.length; i++){
var file=3Dexternalfiles[i]
var fileref=3D""
if (csloadedobjects.indexOf(file)=3D=3D-1){ //Check to see if this =
object has not already been added to page before proceeding
if (file.indexOf(".js")!=3D-1){ //If object is a js file
fileref=3Ddocument.createElement('script')
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", file);
}
else if (file.indexOf(".css")!=3D-1){ //If object is a css file
fileref=3Ddocument.createElement("link")
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", file);
}
}
if (fileref!=3D""){
document.getElementsByTagName("head").item(0).appendChild(fileref)
csloadedobjects+=3Dfile+" " //Remember this object as being already =
added to page
}
}
}

------=_NextPart_000_0000_01C7708B.B87997D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.collegepublisher.com/media/scripts/ufo.js?1

/*	Unobtrusive Flash Objects (UFO) v3.21 =
<http://www.bobbyvandersluis.com/ufo/>=0A=
	Copyright 2005, 2006 Bobby van der Sluis=0A=
	This software is licensed under the CC-GNU LGPL =
<http://creativecommons.org/licenses/LGPL/2.1/>=0A=
*/=0A=
=0A=
var UFO =3D {=0A=
	req: ["movie", "width", "height", "majorversion", "build"],=0A=
	opt: ["play", "loop", "menu", "quality", "scale", "salign", "wmode", =
"bgcolor", "base", "flashvars", "devicefont", "allowscriptaccess", =
"seamlesstabbing", "allowfullscreen"],=0A=
	optAtt: ["id", "name", "align"],=0A=
	optExc: ["swliveconnect"],=0A=
	ximovie: "ufo.swf",=0A=
	xiwidth: "215",=0A=
	xiheight: "138",=0A=
	ua: navigator.userAgent.toLowerCase(),=0A=
	pluginType: "",=0A=
	fv: [0,0],=0A=
	foList: [],=0A=
		=0A=
	create: function(FO, id) {=0A=
		if (!UFO.uaHas("w3cdom") || UFO.uaHas("ieMac")) return;=0A=
		UFO.getFlashVersion();=0A=
		UFO.foList[id] =3D UFO.updateFO(FO);=0A=
		UFO.createCSS("#" + id, "visibility:hidden;");=0A=
		UFO.domLoad(id);=0A=
	},=0A=
=0A=
	updateFO: function(FO) {=0A=
		if (typeof FO.xi !=3D "undefined" && FO.xi =3D=3D "true") {=0A=
			if (typeof FO.ximovie =3D=3D "undefined") FO.ximovie =3D UFO.ximovie;=0A=
			if (typeof FO.xiwidth =3D=3D "undefined") FO.xiwidth =3D UFO.xiwidth;=0A=
			if (typeof FO.xiheight =3D=3D "undefined") FO.xiheight =3D =
UFO.xiheight;=0A=
		}=0A=
		FO.mainCalled =3D false;=0A=
		return FO;=0A=
	},=0A=
=0A=
	domLoad: function(id) {=0A=
		var _t =3D setInterval(function() {=0A=
			if ((document.getElementsByTagName("body")[0] !=3D null || =
document.body !=3D null) && document.getElementById(id) !=3D null) {=0A=
				UFO.main(id);=0A=
				clearInterval(_t);=0A=
			}=0A=
		}, 250);=0A=
		if (typeof document.addEventListener !=3D "undefined") {=0A=
			document.addEventListener("DOMContentLoaded", function() { =
UFO.main(id); clearInterval(_t); } , null); // Gecko, Opera 9+=0A=
		}=0A=
	},=0A=
=0A=
	main: function(id) {=0A=
		var _fo =3D UFO.foList[id];=0A=
		if (_fo.mainCalled) return;=0A=
		UFO.foList[id].mainCalled =3D true;=0A=
		document.getElementById(id).style.visibility =3D "hidden";=0A=
		if (UFO.hasRequired(id)) {=0A=
			if (UFO.hasFlashVersion(parseInt(_fo.majorversion, 10), =
parseInt(_fo.build, 10))) {=0A=
				if (typeof _fo.setcontainercss !=3D "undefined" && =
_fo.setcontainercss =3D=3D "true") UFO.setContainerCSS(id);=0A=
				UFO.writeSWF(id);=0A=
			}=0A=
			else if (_fo.xi =3D=3D "true" && UFO.hasFlashVersion(6, 65)) {=0A=
				UFO.createDialog(id);=0A=
			}=0A=
		}=0A=
		document.getElementById(id).style.visibility =3D "visible";=0A=
	},=0A=
	=0A=
	createCSS: function(selector, declaration) {=0A=
		var _h =3D document.getElementsByTagName("head")[0]; =0A=
		var _s =3D UFO.createElement("style");=0A=
		if (!UFO.uaHas("ieWin")) =
_s.appendChild(document.createTextNode(selector + " {" + declaration + =
"}")); // bugs in IE/Win=0A=
		_s.setAttribute("type", "text/css");=0A=
		_s.setAttribute("media", "screen"); =0A=
		_h.appendChild(_s);=0A=
		if (UFO.uaHas("ieWin") && document.styleSheets && =
document.styleSheets.length > 0) {=0A=
			var _ls =3D document.styleSheets[document.styleSheets.length - 1];=0A=
			if (typeof _ls.addRule =3D=3D "object") _ls.addRule(selector, =
declaration);=0A=
		}=0A=
	},=0A=
	=0A=
	setContainerCSS: function(id) {=0A=
		var _fo =3D UFO.foList[id];=0A=
		var _w =3D /%/.test(_fo.width) ? "" : "px";=0A=
		var _h =3D /%/.test(_fo.height) ? "" : "px";=0A=
		UFO.createCSS("#" + id, "width:" + _fo.width + _w +"; height:" + =
_fo.height + _h +";");=0A=
		if (_fo.width =3D=3D "100%") {=0A=
			UFO.createCSS("body", "margin-left:0; margin-right:0; padding-left:0; =
padding-right:0;");=0A=
		}=0A=
		if (_fo.height =3D=3D "100%") {=0A=
			UFO.createCSS("html", "height:100%; overflow:hidden;");=0A=
			UFO.createCSS("body", "margin-top:0; margin-bottom:0; padding-top:0; =
padding-bottom:0; height:100%;");=0A=
		}=0A=
	},=0A=
=0A=
	createElement: function(el) {=0A=
		return (UFO.uaHas("xml") && typeof document.createElementNS !=3D =
"undefined") ?  document.createElementNS("http://www.w3.org/1999/xhtml", =
el) : document.createElement(el);=0A=
	},=0A=
=0A=
	createObjParam: function(el, aName, aValue) {=0A=
		var _p =3D UFO.createElement("param");=0A=
		_p.setAttribute("name", aName);	=0A=
		_p.setAttribute("value", aValue);=0A=
		el.appendChild(_p);=0A=
	},=0A=
=0A=
	uaHas: function(ft) {=0A=
		var _u =3D UFO.ua;=0A=
		switch(ft) {=0A=
			case "w3cdom":=0A=
				return (typeof document.getElementById !=3D "undefined" && typeof =
document.getElementsByTagName !=3D "undefined" && (typeof =
document.createElement !=3D "undefined" || typeof =
document.createElementNS !=3D "undefined"));=0A=
			case "xml":=0A=
				var _m =3D document.getElementsByTagName("meta");=0A=
				var _l =3D _m.length;=0A=
				for (var i =3D 0; i < _l; i++) {=0A=
					if (/content-type/i.test(_m[i].getAttribute("http-equiv")) && =
/xml/i.test(_m[i].getAttribute("content"))) return true;=0A=
				}=0A=
				return false;=0A=
			case "ieMac":=0A=
				return /msie/.test(_u) && !/opera/.test(_u) && /mac/.test(_u);=0A=
			case "ieWin":=0A=
				return /msie/.test(_u) && !/opera/.test(_u) && /win/.test(_u);=0A=
			case "gecko":=0A=
				return /gecko/.test(_u) && !/applewebkit/.test(_u);=0A=
			case "opera":=0A=
				return /opera/.test(_u);=0A=
			case "safari":=0A=
				return /applewebkit/.test(_u);=0A=
			default:=0A=
				return false;=0A=
		}=0A=
	},=0A=
	=0A=
	getFlashVersion: function() {=0A=
		if (UFO.fv[0] !=3D 0) return;  =0A=
		if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] =
=3D=3D "object") {=0A=
			UFO.pluginType =3D "npapi";=0A=
			var _d =3D navigator.plugins["Shockwave Flash"].description;=0A=
			if (typeof _d !=3D "undefined") {=0A=
				_d =3D _d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");=0A=
				var _m =3D parseInt(_d.replace(/^(.*)\..*$/, "$1"), 10);=0A=
				var _r =3D /r/.test(_d) ? parseInt(_d.replace(/^.*r(.*)$/, "$1"), =
10) : 0;=0A=
				UFO.fv =3D [_m, _r];=0A=
			}=0A=
		}=0A=
		else if (window.ActiveXObject) {=0A=
			UFO.pluginType =3D "ax";=0A=
			try { // avoid fp 6 crashes=0A=
				var _a =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");=0A=
			}=0A=
			catch(e) {=0A=
				try { =0A=
					var _a =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");=0A=
					UFO.fv =3D [6, 0];=0A=
					_a.AllowScriptAccess =3D "always"; // throws if fp < 6.47 =0A=
				}=0A=
				catch(e) {=0A=
					if (UFO.fv[0] =3D=3D 6) return;=0A=
				}=0A=
				try {=0A=
					var _a =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash");=0A=
				}=0A=
				catch(e) {}=0A=
			}=0A=
			if (typeof _a =3D=3D "object") {=0A=
				var _d =3D _a.GetVariable("$version"); // bugs in fp 6.21/6.23=0A=
				if (typeof _d !=3D "undefined") {=0A=
					_d =3D _d.replace(/^\S+\s+(.*)$/, "$1").split(",");=0A=
					UFO.fv =3D [parseInt(_d[0], 10), parseInt(_d[2], 10)];=0A=
				}=0A=
			}=0A=
		}=0A=
	},=0A=
=0A=
	hasRequired: function(id) {=0A=
		var _l =3D UFO.req.length;=0A=
		for (var i =3D 0; i < _l; i++) {=0A=
			if (typeof UFO.foList[id][UFO.req[i]] =3D=3D "undefined") return =
false;=0A=
		}=0A=
		return true;=0A=
	},=0A=
	=0A=
	hasFlashVersion: function(major, release) {=0A=
		return (UFO.fv[0] > major || (UFO.fv[0] =3D=3D major && UFO.fv[1] >=3D =
release)) ? true : false;=0A=
	},=0A=
=0A=
	writeSWF: function(id) {=0A=
		var _fo =3D UFO.foList[id];=0A=
		var _e =3D document.getElementById(id);=0A=
		if (UFO.pluginType =3D=3D "npapi") {=0A=
			if (UFO.uaHas("gecko") || UFO.uaHas("xml")) {=0A=
				while(_e.hasChildNodes()) {=0A=
					_e.removeChild(_e.firstChild);=0A=
				}=0A=
				var _obj =3D UFO.createElement("object");=0A=
				_obj.setAttribute("type", "application/x-shockwave-flash");=0A=
				_obj.setAttribute("data", _fo.movie);=0A=
				_obj.setAttribute("width", _fo.width);=0A=
				_obj.setAttribute("height", _fo.height);=0A=
				var _l =3D UFO.optAtt.length;=0A=
				for (var i =3D 0; i < _l; i++) {=0A=
					if (typeof _fo[UFO.optAtt[i]] !=3D "undefined") =
_obj.setAttribute(UFO.optAtt[i], _fo[UFO.optAtt[i]]);=0A=
				}=0A=
				var _o =3D UFO.opt.concat(UFO.optExc);=0A=
				var _l =3D _o.length;=0A=
				for (var i =3D 0; i < _l; i++) {=0A=
					if (typeof _fo[_o[i]] !=3D "undefined") UFO.createObjParam(_obj, =
_o[i], _fo[_o[i]]);=0A=
				}=0A=
				_e.appendChild(_obj);=0A=
			}=0A=
			else {=0A=
				var _emb =3D "";=0A=
				var _o =3D UFO.opt.concat(UFO.optAtt).concat(UFO.optExc);=0A=
				var _l =3D _o.length;=0A=
				for (var i =3D 0; i < _l; i++) {=0A=
					if (typeof _fo[_o[i]] !=3D "undefined") _emb +=3D ' ' + _o[i] + =
'=3D"' + _fo[_o[i]] + '"';=0A=
				}=0A=
				_e.innerHTML =3D '<embed type=3D"application/x-shockwave-flash" =
src=3D"' + _fo.movie + '" width=3D"' + _fo.width + '" height=3D"' + =
_fo.height + '" =
pluginspage=3D"http://www.macromedia.com/go/getflashplayer"' + _emb + =
'></embed>';=0A=
			}=0A=
		}=0A=
		else if (UFO.pluginType =3D=3D "ax") {=0A=
			var _objAtt =3D "";=0A=
			var _l =3D UFO.optAtt.length;=0A=
			for (var i =3D 0; i < _l; i++) {=0A=
				if (typeof _fo[UFO.optAtt[i]] !=3D "undefined") _objAtt +=3D ' ' + =
UFO.optAtt[i] + '=3D"' + _fo[UFO.optAtt[i]] + '"';=0A=
			}=0A=
			var _objPar =3D "";=0A=
			var _l =3D UFO.opt.length;=0A=
			for (var i =3D 0; i < _l; i++) {=0A=
				if (typeof _fo[UFO.opt[i]] !=3D "undefined") _objPar +=3D '<param =
name=3D"' + UFO.opt[i] + '" value=3D"' + _fo[UFO.opt[i]] + '" />';=0A=
			}=0A=
			var _p =3D window.location.protocol =3D=3D "https:" ? "https:" : =
"http:";=0A=
			_e.innerHTML =3D '<object =
classid=3D"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + _objAtt + ' =
width=3D"' + _fo.width + '" height=3D"' + _fo.height + '" codebase=3D"' =
+ _p + =
'//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=3D=
' + _fo.majorversion + ',0,' + _fo.build + ',0"><param name=3D"movie" =
value=3D"' + _fo.movie + '" />' + _objPar + '</object>';=0A=
		}=0A=
	},=0A=
		=0A=
	createDialog: function(id) {=0A=
		var _fo =3D UFO.foList[id];=0A=
		UFO.createCSS("html", "height:100%; overflow:hidden;");=0A=
		UFO.createCSS("body", "height:100%; overflow:hidden;");=0A=
		UFO.createCSS("#xi-con", "position:absolute; left:0; top:0; =
z-index:1000; width:100%; height:100%; background-color:#fff; =
filter:alpha(opacity:75); opacity:0.75;");=0A=
		UFO.createCSS("#xi-dia", "position:absolute; left:50%; top:50%; =
margin-left: -" + Math.round(parseInt(_fo.xiwidth, 10) / 2) + "px; =
margin-top: -" + Math.round(parseInt(_fo.xiheight, 10) / 2) + "px; =
width:" + _fo.xiwidth + "px; height:" + _fo.xiheight + "px;");=0A=
		var _b =3D document.getElementsByTagName("body")[0];=0A=
		var _c =3D UFO.createElement("div");=0A=
		_c.setAttribute("id", "xi-con");=0A=
		var _d =3D UFO.createElement("div");=0A=
		_d.setAttribute("id", "xi-dia");=0A=
		_c.appendChild(_d);=0A=
		_b.appendChild(_c);=0A=
		var _mmu =3D window.location;=0A=
		if (UFO.uaHas("xml") && UFO.uaHas("safari")) {=0A=
			var _mmd =3D =
document.getElementsByTagName("title")[0].firstChild.nodeValue =3D =
document.getElementsByTagName("title")[0].firstChild.nodeValue.slice(0, =
47) + " - Flash Player Installation";=0A=
		}=0A=
		else {=0A=
			var _mmd =3D document.title =3D document.title.slice(0, 47) + " - =
Flash Player Installation";=0A=
		}=0A=
		var _mmp =3D UFO.pluginType =3D=3D "ax" ? "ActiveX" : "PlugIn";=0A=
		var _uc =3D typeof _fo.xiurlcancel !=3D "undefined" ? =
"&xiUrlCancel=3D" + _fo.xiurlcancel : "";=0A=
		var _uf =3D typeof _fo.xiurlfailed !=3D "undefined" ? =
"&xiUrlFailed=3D" + _fo.xiurlfailed : "";=0A=
		UFO.foList["xi-dia"] =3D { movie:_fo.ximovie, width:_fo.xiwidth, =
height:_fo.xiheight, majorversion:"6", build:"65", =
flashvars:"MMredirectURL=3D" + _mmu + "&MMplayerType=3D" + _mmp + =
"&MMdoctitle=3D" + _mmd + _uc + _uf };=0A=
		UFO.writeSWF("xi-dia");=0A=
	},=0A=
=0A=
	expressInstallCallback: function() {=0A=
		var _b =3D document.getElementsByTagName("body")[0];=0A=
		var _c =3D document.getElementById("xi-con");=0A=
		_b.removeChild(_c);=0A=
		UFO.createCSS("body", "height:auto; overflow:auto;");=0A=
		UFO.createCSS("html", "height:auto; overflow:auto;");=0A=
	},=0A=
=0A=
	cleanupIELeaks: function() {=0A=
		var _o =3D document.getElementsByTagName("object");=0A=
		var _l =3D _o.length=0A=
		for (var i =3D 0; i < _l; i++) {=0A=
			_o[i].style.display =3D "none";=0A=
			for (var x in _o[i]) {=0A=
				if (typeof _o[i][x] =3D=3D "function") {=0A=
					_o[i][x] =3D null;=0A=
				}=0A=
			}=0A=
		}=0A=
	}=0A=
=0A=
};=0A=
=0A=
if (typeof window.attachEvent !=3D "undefined" && UFO.uaHas("ieWin")) {=0A=
	window.attachEvent("onunload", UFO.cleanupIELeaks);=0A=
}=0A=

------=_NextPart_000_0000_01C7708B.B87997D0--

