From: <Saved by Windows Internet Explorer 8>
Subject: George F. Will - The last chance for Earth -- until the next one
Date: Mon, 7 Dec 2009 16:45:40 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CA775C.B5AA8BB0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.washingtonpost.com/wp-dyn/content/article/2009/12/04/AR2009120403073_pf.html

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>George F. Will - The last chance for Earth -- until =
the next one</TITLE>
<META content=3D"text/html; charset=3Dutf-8" =
http-equiv=3DContent-Type><LINK=20
rel=3Dcanonical=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/article/2009/12/04/A=
R2009120403073.html">
<META name=3DROBOTS content=3DNOINDEX,FOLLOW>
<META name=3Dkeywords content=3D""></META>
<META name=3Ddescription=20
content=3D"With 20,000 delegates, advocates and journalists jetting to =
Copenhagen for planet Earth's last chance, the carbon footprint of the =
global warming summit will be the only impressive consequence of the =
climate-change meeting. Its organizers had hoped that it would produce =
binding caps on emissions,..."></META>
<SCRIPT type=3Dtext/javascript=20
src=3D"http://media3.washingtonpost.com/wp-srv/javascript/framework/proto=
type.js"></SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://media10.washingtonpost.com/wp/js/papl.js"></SCRIPT>

<SCRIPT =
src=3D"http://media3.washingtonpost.com/wp-srv/ad/ad_v2.js"></SCRIPT>

<SCRIPT language=3Djavascript>=0A=
<!--=0A=
thisNode =3D 'opinion/columns/opinion/willg';=0A=
commercialNode =3D'opinion/columns/opinion/willg';=0A=
// -->=0A=
</SCRIPT>

<STYLE>@import url( =
http://media10.washingtonpost.com/wp/css/specials-js.css );
</STYLE>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://media3.washingtonpost.com/wp-srv/tools/fd/cleanprint.js"></=
SCRIPT>

<SCRIPT language=3DJavaScript>var =
SA_Message=3D"SACategory=3D"+'opinion/columns/opinion/willg';</SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://media3.washingtonpost.com/wp-srv/ad/ad_configurations_artic=
le_v2.js"></SCRIPT>

<SCRIPT language=3Djavascript=20
src=3D"http://media3.washingtonpost.com/wp-srv/popjs/popupCampaignClasses=
.js"></SCRIPT>

<SCRIPT>var adTemplate =3D templateConfigs[PRINTER_FRIENDLY];</SCRIPT>

<SCRIPT>var adTemplate =3D =
templateConfigs[PRINTER_FRIENDLY_FLEX];</SCRIPT>
<LINK rel=3Dstylesheet=20
href=3D"http://media3.washingtonpost.com/wp-srv/css/article/pf.css" =
media=3Dprint>
<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18852"></HEAD>
<BODY id=3DPageArticle><!-- start visible content -->
<DIV id=3DPageArticlePrinterFriendly>
<SCRIPT language=3Djavascript>=0A=
<!--=0A=
// OMNITURE VARIABLES=0A=
var wp_photo_gallery =3D '';=0A=
var wp_photo_name =3D '';=0A=
var wp_search_keywords =3D '';=0A=
var wp_search_type =3D '';=0A=
var wp_sectionfront =3D '';=0A=
var wp_content_type =3D 'column' ;=0A=
var wp_content_id =3D 'AR2009120403073' ;=0A=
var wp_headline =3D ('') ? '' : 'The last chance for Earth -- until the =
next one' ;=0A=
var wp_page_name =3D 'wp - column - ' + wp_content_id + ' - The last =
chance for Earth -- until the next one' ;=0A=
var wp_section =3D 'opinions'.split('/')[0] ;=0A=
var wp_subsection =3D ('opinions'.indexOf('/') !=3D -1 ) ? =
'opinions'.replace(/\//g,' - ') : '' ;=0A=
var wp_author =3D 'George F. Will' ;=0A=
var wp_page_num =3D 'print format' ;=0A=
var wp_hierarchy =3D 'opinions'.replace(/\//g,'|')+'|columns' ;=0A=
var wp_application =3D ('') ? 'partner - ' : '' ;=0A=
var wp_source =3D 'Post' ;=0A=
var wp_blog_name =3D '' ;=0A=
var wp_events =3D (wp_page_num =3D=3D 1) ? 'event4' : '' ;=0A=
// -->=0A=
</SCRIPT>
<!-- SiteCatalyst code version: H.7.Copyright 1997-2006 Omniture, Inc. =
More info available athttp://www.omniture.com -->
<SCRIPT language=3DJavaScript=20
src=3D"http://media.washingtonpost.com/wp-srv/javascript/omniture/s_code.=
js"></SCRIPT>

<SCRIPT language=3DJavaScript>=0A=
<!--=0A=
/* SiteCatalyst code version: H.7.Copyright 1997-2006 Omniture, Inc. =
More info available athttp://www.omniture.com */=0A=
/* You may give each page an identifying name, server, and channel on =
the next lines. */=0A=
/************************** DATA FIXING ************************/=0A=
// START: move rentals under realestate as rentals=0A=
if(typeof(wp_page_name) !=3D "undefined" && (wp_page_name.indexOf("wp - =
rentals") !=3D -1)) {=0A=
	wp_page_name =3D wp_page_name.replace("wp - rentals", "wp - realestate =
- rentals");=0A=
}=0A=
if(typeof(wp_hierarchy) !=3D "undefined" && =
(wp_hierarchy.indexOf("rentals") =3D=3D 0)) {=0A=
	wp_hierarchy =3D wp_hierarchy.replace("rentals", "realestate|rentals");=0A=
} else if (typeof(wp_hierarchy) !=3D "undefined" && ((wp_hierarchy =
=3D=3D"realestate|articles") || (wp_hierarchy =
=3D=3D"realestate|own|articles") || (wp_hierarchy =
=3D=3D"realestate|dcarealiving|articles") || (wp_hierarchy =
=3D=3D"realestate|wherewelive|articles"))) {=0A=
	wp_hierarchy =3D "realestate|realestate content|articles";=0A=
} else if (typeof(wp_hierarchy) !=3D "undefined" && ((wp_hierarchy =
=3D=3D"realestate|linksets") || (wp_hierarchy =
=3D=3D"realestate|own|linksets") || (wp_hierarchy =
=3D=3D"realestate|dcarealiving|linksets") || (wp_hierarchy =
=3D=3D"realestate|wherewelive|linksets"))) {=0A=
	wp_hierarchy =3D "realestate|realestate content|linksets";=0A=
} else if (typeof(wp_hierarchy) !=3D "undefined" && =
(wp_hierarchy.indexOf("realestate|buy") =3D=3D 0)) {=0A=
	wp_hierarchy =3D wp_hierarchy.replace("buy", "realestate content");=0A=
} else if (typeof(wp_hierarchy) !=3D "undefined" && (wp_hierarchy =
=3D=3D"realestate|front")) {=0A=
	wp_hierarchy =3D "realestate|realestate content|front";=0A=
} else if (typeof(wp_hierarchy) !=3D "undefined" && =
(wp_hierarchy.indexOf("realestate|related content") =3D=3D 0)) {=0A=
	wp_hierarchy =3D wp_hierarchy.replace("realestate|realestate content", =
"realestate|realestate content|related content");=0A=
}=0A=
if(typeof(wp_subsection) !=3D "undefined" && =
(wp_subsection.indexOf("rentals") =3D=3D 0)) {=0A=
	wp_subsection =3D wp_subsection.replace("rentals", "realestate - =
rentals");=0A=
} else if(typeof(wp_subsection) !=3D "undefined" && (wp_subsection =
=3D=3D 'realestate')) {=0A=
	wp_subsection =3D "realestate - realestate content";=0A=
}=0A=
if(typeof(wp_channel) !=3D "undefined" && ((wp_channel =3D=3D "rentals") =
|| (wp_channel =3D=3D "real estate"))) {=0A=
	wp_channel =3D "realestate";=0A=
} else if (typeof(wp_channel) !=3D "undefined" && (wp_channel =3D=3D =
"realestate|realestate content")) {=0A=
	// because homefinder (3rd party) is setting the variable wrong=0A=
	wp_channel =3D "realestate";=0A=
}=0A=
if(typeof(wp_section) !=3D "undefined" && (wp_section =3D=3D "rentals")) =
{=0A=
	wp_section =3D "realestate";=0A=
}=0A=
//END: move rentals under realestate as rentals=0A=
/************************** END DATA FIXING ************************/=0A=
if (typeof(wp_section) !=3D "undefined")=0A=
{=0A=
	wp_section =3D wp_section.replace(/\//, " - ");=0A=
}=0A=
if (typeof(wp_subsection) !=3D "undefined")=0A=
{=0A=
	wp_subsection =3D wp_subsection.replace(/\//, " - ");=0A=
}=0A=
/* need to test */=0A=
=0A=
if (typeof(wp_page_name) !=3D "undefined")=0A=
{=0A=
	s.pageName=3Dwp_page_name.replace(/<[a-zA-Z\/][^>]*>/g,"");=0A=
=0A=
	//remove session id=0A=
	s.pageName=3Ds.pageName.replace(/\;jsessionid\=3D.{23}/g,"");=0A=
}=0A=
else=0A=
{=0A=
	s.pageName=3D"wp - " + document.location.pathname + " - " + =
document.title;=0A=
=0A=
	//remove html=0A=
	s.pageName=3Ds.pageName.replace(/<[a-zA-Z\/][^>]*>/g,"");=0A=
=0A=
	//remove session id=0A=
	s.pageName=3Ds.pageName.replace(/\;jsessionid\=3D.{23}/g,"");=0A=
=0A=
	//var doc_url =3D document.location.href;=0A=
=0A=
	//if (doc_url.indexOf("ac2/wp-dyn?")>0)=0A=
	//{=0A=
	//	s.prop50=3Ddoc_url.substr(doc_url.indexOf("ac2/wp-dyn?")+10);=0A=
	//}=0A=
}=0A=
=0A=
if(typeof(wp_channel) !=3D "undefined")=0A=
{=0A=
	s.channel=3D(wp_channel.indexOf("wp - ")>=3D0)?wp_channel:"wp - " + =
wp_channel;=0A=
}=0A=
else if(typeof(wp_section) !=3D "undefined")=0A=
{=0A=
	s.channel=3D(wp_section.indexOf("wp - =
")>=3D0)?wp_section.split('/')[0]:"wp - " + wp_section.split('/')[0];=0A=
}=0A=
else if (typeof(wp_hierarchy) !=3D "undefined")=0A=
{=0A=
	s.channel=3D(wp_hierarchy.indexOf("wp - =
")>=3D0)?wp_hierarchy.split('|')[0]:"wp - " + wp_hierarchy.split('|')[0];=0A=
}=0A=
else=0A=
{=0A=
	s.channel=3D"wp - nocategory";=0A=
}=0A=
=0A=
s.server=3D"washingtonpost.com";=0A=
s.pageType=3D"";=0A=
if (typeof(wp_sectionfront) !=3D "undefined")=0A=
{=0A=
	wp_sectionfront=3Dwp_sectionfront.toLowerCase();=0A=
	s.prop1=3D(wp_sectionfront.indexOf("wp - =
")>=3D0||wp_sectionfront.length =3D=3D 0)?wp_sectionfront:"wp - " + =
wp_sectionfront;=0A=
}=0A=
if (typeof(wp_subsection) !=3D "undefined")=0A=
{=0A=
	wp_subsection =3D wp_subsection.toLowerCase();=0A=
	s.prop2=3D(wp_subsection.indexOf("wp - ")>=3D0||wp_subsection.length =
=3D=3D 0)?wp_subsection:"wp - " + wp_subsection;=0A=
}=0A=
if (typeof(wp_content_type) !=3D "undefined")=0A=
{=0A=
	s.prop3=3Dwp_content_type.toLowerCase();=0A=
}=0A=
if (typeof(wp_source) !=3D "undefined")=0A=
{=0A=
	s.prop4=3Dwp_source.toLowerCase();=0A=
}=0A=
else=0A=
{=0A=
	s.prop4=3D"washingtonpost.com";=0A=
}=0A=
=0A=
if (typeof(wp_author) !=3D "undefined")=0A=
{=0A=
	s.prop5=3Dwp_author.toLowerCase();=0A=
}=0A=
if (typeof(wp_search_keywords) !=3D "undefined")=0A=
{=0A=
	s.prop6=3Dwp_search_keywords.toLowerCase();=0A=
}=0A=
if (typeof(wp_search_type) !=3D "undefined")=0A=
{=0A=
	s.prop7=3Dwp_search_type.toLowerCase();=0A=
}=0A=
s.prop8=3D"";=0A=
s.prop9=3D"";=0A=
s.prop10=3D"";=0A=
s.prop11=3D"";=0A=
if (typeof(wp_content_id) !=3D "undefined")=0A=
{=0A=
	s.prop12=3Dwp_content_id;=0A=
	if ( typeof(wp_application) !=3D "undefined" && wp_application )=0A=
	{=0A=
	      s.prop13 =3D "" ;=0A=
	}=0A=
	if (typeof(wp_headline) !=3D "undefined" && wp_content_id !=3D "")=0A=
	{=0A=
		s.prop13=3Dwp_headline + " - " + wp_content_id;=0A=
	}=0A=
	if (typeof(wp_section) !=3D "undefined" && wp_section =3D=3D =
"interactivity")=0A=
	{=0A=
		s.prop13 =3D "" ;=0A=
	}=0A=
}=0A=
if (typeof(wp_page_num) !=3D "undefined")=0A=
{=0A=
	s.prop14=3Dwp_page_num;=0A=
}=0A=
if (typeof(wp_printed) !=3D "undefined") {=0A=
	s.prop19=3D"printed page";=0A=
}=0A=
if (typeof(wp_search_result_count) !=3D "undefined")=0A=
{=0A=
	s.prop21=3Dwp_search_result_count;=0A=
}=0A=
if (typeof(wp_story_id) !=3D "undefined")=0A=
{=0A=
	s.prop22=3Dwp_story_id;=0A=
}=0A=
if (typeof(wp_topic) !=3D "undefined")=0A=
{=0A=
	s.prop24=3Dwp_topic;=0A=
}=0A=
if (typeof(wp_blog_name) !=3D "undefined")=0A=
{=0A=
	s.prop25=3Dwp_blog_name;=0A=
}=0A=
if (typeof(wp_application) !=3D "undefined")=0A=
{=0A=
	s.prop32=3Dwp_application;=0A=
}=0A=
function getFBConnectUserName()=0A=
{=0A=
	var fbusername =3D "anonymous";=0A=
	if (document.cookie.indexOf("fbuid") !=3D -1)=0A=
	{=0A=
		fbusername =3D "facebook connect";=0A=
	}=0A=
	return fbusername;=0A=
}=0A=
s.prop33=3DgetFBConnectUserName();=0A=
function getUserName()=0A=
{=0A=
	var username;=0A=
	if (document.cookie.indexOf("wpniuser") !=3D -1)=0A=
	{=0A=
		var start =3D (document.cookie.indexOf("wpniuser") + 9);=0A=
		var end =3D   (document.cookie.indexOf(";",start)) =3D=3D -1 ? =
document.cookie.length : document.cookie.indexOf(";",start);=0A=
		username =3D document.cookie.substring(start,end);=0A=
	}=0A=
	return username;=0A=
}=0A=
s.prop41=3DgetUserName();=0A=
=0A=
/* E-commerce Variables */=0A=
s.campaign=3D"";=0A=
s.state=3D"";=0A=
s.zip=3D"";=0A=
s.events=3D"";=0A=
s.products=3D"";=0A=
s.purchaseID=3D"";=0A=
s.eVar1=3D(typeof(wp_evar1)!=3D"undefined")?wp_evar1:'';=0A=
s.eVar2=3D(typeof(wp_evar2)!=3D"undefined")?wp_evar2:'';=0A=
s.eVar3=3D(typeof(wp_evar3)!=3D"undefined")?wp_evar3:'';=0A=
s.eVar4=3D(typeof(wp_evar4)!=3D"undefined")?wp_evar4:'';=0A=
s.eVar5=3D(typeof(wp_evar5)!=3D"undefined")?wp_evar5:'';=0A=
s.eVar6=3D(typeof(wp_evar6)!=3D"undefined")?wp_evar6:'';=0A=
s.eVar7=3D(typeof(wp_evar7)!=3D"undefined")?wp_evar7:'';=0A=
s.eVar8=3D(typeof(wp_evar8)!=3D"undefined")?wp_evar8:'';=0A=
s.eVar9=3D(typeof(wp_evar9)!=3D"undefined")?wp_evar9:'';=0A=
s.eVar10=3D(typeof(wp_evar10)!=3D"undefined")?wp_evar10:'';=0A=
s.eVar11=3D(typeof(wp_evar11)!=3D"undefined")?wp_evar11:'';=0A=
s.eVar12=3D(typeof(wp_evar12)!=3D"undefined")?wp_evar12:'';=0A=
s.eVar13=3D(typeof(wp_evar13)!=3D"undefined")?wp_evar13:'';=0A=
s.eVar14=3D(typeof(wp_evar14)!=3D"undefined")?wp_evar14:'';=0A=
s.eVar15=3D(typeof(wp_evar15)!=3D"undefined")?wp_evar15:'';=0A=
s.eVar16=3D(typeof(wp_evar16)!=3D"undefined")?wp_evar16:'';=0A=
s.eVar17=3D(typeof(wp_evar17)!=3D"undefined")?wp_evar17:'';=0A=
s.eVar18=3D(typeof(wp_evar18)!=3D"undefined")?wp_evar18:'';=0A=
s.eVar19=3D(typeof(wp_evar19)!=3D"undefined")?wp_evar19:'';=0A=
s.eVar20=3D(typeof(wp_evar20)!=3D"undefined")?wp_evar20:'';=0A=
s.eVar21=3D(typeof(wp_evar21)!=3D"undefined")?wp_evar21:'';=0A=
s.eVar22=3D(typeof(wp_evar22)!=3D"undefined")?wp_evar22:'';=0A=
s.eVar23=3D(typeof(wp_evar23)!=3D"undefined")?wp_evar23:'';=0A=
s.eVar24=3D(typeof(wp_evar24)!=3D"undefined")?wp_evar24:'';=0A=
s.eVar25=3D(typeof(wp_evar25)!=3D"undefined")?wp_evar25:'';=0A=
s.eVar26=3D(typeof(wp_evar26)!=3D"undefined")?wp_evar26:'';=0A=
s.eVar27=3D(typeof(wp_evar27)!=3D"undefined")?wp_evar27:'';=0A=
s.eVar28=3D(typeof(wp_evar28)!=3D"undefined")?wp_evar28:'';=0A=
s.eVar29=3D(typeof(wp_evar29)!=3D"undefined")?wp_evar29:'';=0A=
s.eVar30=3D(typeof(wp_evar30)!=3D"undefined")?wp_evar30:'';=0A=
s.eVar31=3D(typeof(wp_evar31)!=3D"undefined")?wp_evar31:'';=0A=
s.eVar32=3D(typeof(wp_evar32)!=3D"undefined")?wp_evar32:'';=0A=
s.eVar33=3D(typeof(wp_evar33)!=3D"undefined")?wp_evar33:'';=0A=
s.eVar34=3D(typeof(wp_evar34)!=3D"undefined")?wp_evar34:'';=0A=
s.eVar35=3D(typeof(wp_evar35)!=3D"undefined")?wp_evar35:'';=0A=
s.eVar36=3D(typeof(wp_evar36)!=3D"undefined")?wp_evar36:'';=0A=
s.eVar37=3D(typeof(wp_evar37)!=3D"undefined")?wp_evar37:'';=0A=
s.eVar38=3D(typeof(wp_evar38)!=3D"undefined")?wp_evar38:'';=0A=
s.eVar39=3D(typeof(wp_evar39)!=3D"undefined")?wp_evar39:'';=0A=
s.eVar40=3D(typeof(wp_evar40)!=3D"undefined")?wp_evar40:'';=0A=
s.eVar41=3D(typeof(wp_evar41)!=3D"undefined")?wp_evar41:'';=0A=
s.eVar42=3D(typeof(wp_evar42)!=3D"undefined")?wp_evar42:'';=0A=
s.eVar43=3D(typeof(wp_evar43)!=3D"undefined")?wp_evar43:'';=0A=
s.eVar44=3D(typeof(wp_evar44)!=3D"undefined")?wp_evar44:'';=0A=
s.eVar45=3D(typeof(wp_evar45)!=3D"undefined")?wp_evar45:'';=0A=
s.eVar46=3D(typeof(wp_evar46)!=3D"undefined")?wp_evar46:'';=0A=
s.eVar47=3D(typeof(wp_evar47)!=3D"undefined")?wp_evar47:'';=0A=
s.eVar48=3D(typeof(wp_evar48)!=3D"undefined")?wp_evar48:'';=0A=
s.eVar49=3D(typeof(wp_evar49)!=3D"undefined")?wp_evar49:'';=0A=
s.eVar50=3D(typeof(wp_evar50)!=3D"undefined")?wp_evar50:'';=0A=
/* Hierarchy Variables */=0A=
if (typeof(wp_hierarchy) !=3D "undefined") {=0A=
	s.hier1=3D wp_hierarchy.toLowerCase();=0A=
} else {=0A=
	s.hier1=3D"nocategory";=0A=
}=0A=
s.hier2=3D"washingtonpost.com|" + s.hier1;=0A=
=0A=
function setWpStoryIdForOmniture( wp_story_id ) {=0A=
	s.prop22 =3D wp_story_id ;=0A=
}=0A=
function sendDataToOmniture(customLinkName,events,props) {=0A=
	// START: abort if no s_acount and no events or props=0A=
	if(typeof s_account!=3D"undefined" && (events||props)){=0A=
		var propPattern =3D /^(prop|eVar|channel|hier|pageName)/ ;=0A=
		// START: make sure events is a string=0A=
		if(events){=0A=
			if(typeof events =3D=3D "string"){}=0A=
			else if(typeof events =3D=3D "object" && =
events.join){events=3Devents.join(',')}=0A=
			else{events=3Dnull}=0A=
		}=0A=
		// END: make sure events is a string=0A=
=0A=
		// START: make sure props is an object=0A=
		if(props){=0A=
			if(typeof props =3D=3D "object"){}=0A=
			else{props=3Dnull}=0A=
		}=0A=
		// END: make sure props is an object=0A=
=0A=
		// START: only continue of both props and events haven't been nulled =
out=0A=
		if(events||props){=0A=
			// START: set linkTrackVars=0A=
			var linkTrackVars =3D [] ;=0A=
			if(events)=0A=
				linkTrackVars[linkTrackVars.length] =3D "events";=0A=
			if(props){=0A=
				for (prop in props){=0A=
					if(prop.match(propPattern))=0A=
						linkTrackVars[linkTrackVars.length] =3D prop ;=0A=
				}=0A=
			}=0A=
			// START: set linkTrackVars=0A=
=0A=
			// START: if no linkTrackVars, no point in doing anything=0A=
			if(linkTrackVars.length){=0A=
				s.linkTrackVars=3DlinkTrackVars;=0A=
				if(events)=0A=
					s.linkTrackEvents=3Devents;=0A=
				for (prop in props){=0A=
					if(prop.match(propPattern))=0A=
						eval("s."+prop+" =3D props[prop]");=0A=
				}=0A=
				if(events)=0A=
					s.events=3Devents;=0A=
=0A=
				// The Holy Grail:=0A=
				s.tl(this,'o',customLinkName);=0A=
			}=0A=
			// END: if no linkTrackVars, no point in doing anything=0A=
		}=0A=
		// END: only continue of both props and events haven't been nulled out=0A=
	}=0A=
	// END: abort if no s_acount and no events or props=0A=
}=0A=
sendEventToOmniture =3D sendDataToOmniture;=0A=
sendDataToOmnitureFromEvri =3D sendDataToOmniture;=0A=
/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/=0A=
var s_code=3Ds.t();if(s_code)document.write(s_code)=0A=
//-->=0A=
</SCRIPT>

<SCRIPT language=3DJavaScript>=0A=
<!--=0A=
// =
if(navigator.appVersion.indexOf('MSIE')>=3D0)document.write(unescape('%3C=
')+'\!-'+'-')=0A=
//-->=0A=
</SCRIPT>
<!--/DO NOT REMOVE/--><!-- End SiteCatalyst code version: H.7. -->
<STYLE>#pfmnav {
	FONT: 11px Arial; MARGIN-BOTTOM: 15px; BACKGROUND: #0d3159; COLOR: =
#fff; TEXT-DECORATION: none
}
#pfmnav .pad {
	PADDING-BOTTOM: 6px; PADDING-LEFT: 6px; WIDTH: 970px; PADDING-RIGHT: =
6px; PADDING-TOP: 6px
}
#pfmnav A {
	COLOR: #fff; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
.wp_pipe {
	FONT-WEIGHT: normal
}
</STYLE>
<A href=3D"http://www.washingtonpost.com/"><IMG border=3D0 =
alt=3Dwashingtonpost.com=20
src=3D"http://www.washingtonpost.com/wp-srv/images/homepage/logos/twp_log=
o_300.gif"=20
width=3D300 height=3D47></A>=20
<DIV id=3Dpfmnav>
<DIV class=3Dpad><A =
href=3D"http://www.washingtonpost.com/?nav=3Dpf">NEWS</A> <SPAN=20
class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/politics/?nav=3Dpf">POLITICS</A> =
<SPAN=20
class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/opinions/?nav=3Dpf">=
OPINIONS</A>=20
<SPAN class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/business/?nav=3Dpf">=
BUSINESS</A>=20
<SPAN class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/local/?nav=3Dpf">LOCAL</A> <SPAN=20
class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/sports/?nav=3Dpf">SP=
ORTS</A>=20
<SPAN class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/artsandliving/?nav=3D=
pf">ARTS=20
&amp; LIVING</A> <SPAN class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/gog/?nav=3Dpf">GOING OUT GUIDE</A> =
<SPAN=20
class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/wl/jobs/home?nav=3Dpf">JOBS</A> =
<SPAN=20
class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/cars/?nav=3Dpf">CARS=
</A> <SPAN=20
class=3Dwp_pipe>|</SPAN> <A=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/realestate/?nav=3Dpf=
">REAL=20
ESTATE</A> <SPAN class=3Dwp_pipe>|</SPAN><A=20
href=3D"http://www.washingtonpost.com/wp-adv/shopping/front.html?nav=3Dpf=
">SHOPPING</A>=20
</DIV></DIV>
<DIV>
<DIV style=3D"PADDING-LEFT: 17px; FLOAT: right">
<SCRIPT>=0A=
<!--=0A=
if ( show_doubleclick_ad && ( adTemplate & BIGBOX_FLEX ) =3D=3D =
BIGBOX_FLEX  )=0A=
{=0A=
document.write('<div style=3D"margin-top:4px; =
margin-bottom:4px;clear:left;">') ;=0A=
document.writeln ('<div><img =
src=3D"http://media3.washingtonpost.com/wp-srv/hp/img/ad_label_leftjust.g=
if" alt=3D"ad_icon" width=3D"100" height=3D"13" border=3D"0"/></div>' );=0A=
}=0A=
// -->=0A=
</SCRIPT>

<SCRIPT>=0A=
if ( show_doubleclick_ad && ( adTemplate & BIGBOX_FLEX ) =3D=3D =
BIGBOX_FLEX  )=0A=
{=0A=
placeAd('ARTICLE',commercialNode,5,'',true) ;=0A=
}=0A=
</SCRIPT>

<SCRIPT language=3Djavascript>=0A=
<!--=0A=
if ( show_doubleclick_ad && ( adTemplate & BIGBOX_FLEX ) =3D=3D =
BIGBOX_FLEX  )=0A=
{=0A=
document.write('</div>') ;=0A=
}=0A=
// -->=0A=
</SCRIPT>
</DIV>
<STYLE>.correction {
	BORDER-BOTTOM: #cccccc 1px solid; PADDING-BOTTOM: 10px; MARGIN-TOP: =
8px; FONT-FAMILY: arial,sans-serif; MARGIN-BOTTOM: 8px; COLOR: #333333; =
FONT-SIZE: 11px; PADDING-TOP: 10px
}
.correction STRONG {
	TEXT-TRANSFORM: uppercase; COLOR: #cc0000
}
</STYLE>

<DIV style=3D"MARGIN-RIGHT: 165px"></DIV><FONT size=3D+2><B>The =
climate-change=20
travesty</B></FONT><BR>
<P><FONT size=3D-1>By George F. Will<BR>Sunday, December 6, 2009 =
<BR></FONT>
<P>
<P>With <A=20
href=3D"http://www.timesonline.co.uk/tol/news/science/earth-environment/a=
rticle6888246.ece"=20
target=3D"">20,000</A> delegates, advocates and journalists jetting to =
Copenhagen=20
for planet Earth's last chance, the carbon footprint of the global =
warming=20
summit will be the only impressive consequence of the climate-change =
meeting.=20
Its organizers had hoped that it would produce binding caps on =
emissions, global=20
taxation to redistribute trillions of dollars, and micromanagement of =
everyone's=20
choices. </P>
<P>China, nimble at the politics of pretending that is characteristic of =

climate-change theater, <A =
href=3D"http://news.bbc.co.uk/2/hi/8380106.stm"=20
target=3D"">promises</A> only to reduce its "carbon intensity" -- carbon =
emissions=20
per unit of production. So China's emissions will rise. </P>
<P>Barack Obama, understanding the histrionics required in =
climate-change=20
debates, promises that U.S. emissions in 2050 will be <A=20
href=3D"http://www.nytimes.com/2009/11/26/us/politics/26climate.html" =
target=3D"">83=20
percent below 2005 levels</A>. If so, 2050 emissions will equal those in =
1910,=20
when there were 92 million Americans. But there will be 420 million =
Americans in=20
2050, so Obama's promise means that per capita emissions then will be =
about what=20
they were in 1875. That. Will. Not. Happen. </P>
<P><A=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/article/2009/11/20/A=
R2009112004093.html"=20
target=3D"">Disclosure of e-mails</A> and documents from the Climate =
Research Unit=20
(CRU) in Britain -- a collaborator with the U.N.'s Intergovernmental =
Panel on=20
Climate Change -- reveals <A=20
href=3D"http://www.guardian.co.uk/uk/2009/dec/01/climate-change-scientist=
-steps-down"=20
target=3D"">some scientists'</A> willingness to suppress or massage data =
and rig=20
the peer-review process and the publication of scholarly work. The CRU =
materials=20
also reveal paranoia on the part of scientists who believe that in =
trying to=20
engineer "consensus" and alarm about warming, they are a brave and =
embattled=20
minority. Actually, never in peacetime history has the =
government-media-academic=20
complex been in such sustained propagandistic lockstep about any =
subject. </P>
<P><A=20
href=3D"http://www.washingtonpost.com/wp-dyn/content/article/2009/11/24/A=
R2009112403549.html"=20
target=3D"">The Post</A> learns an odd lesson from the CRU materials: =
"Climate=20
scientists should not let themselves be goaded by the irresponsibility =
of the=20
deniers into overstating the certainties of complex science or, worse, =
censoring=20
discussion of them." These scientists overstated and censored because =
they were=20
"goaded" by skepticism? </P>
<P>Were their science as unassailable as they insist it is, and were the =

consensus as broad as they say it is, and were they as brave as they =
claim to=20
be, they would not be "goaded" into intellectual corruption. Nor would =
they=20
meretriciously bandy the word "deniers" to disparage skepticism that =
shocks=20
communicants in the faith-based global warming community. </P>
<P>Skeptics about the shrill certitudes concerning catastrophic man-made =
warming=20
are skeptical <I>because</I> climate change is constant: From millennia =
before=20
the <A =
href=3D"http://www.ncdc.noaa.gov/paleo/globalwarming/medieval.html"=20
target=3D"">Medieval Warm Period</A> (800 to 1300), through the Little =
Ice Age=20
(1500 to 1850), and for millennia hence, climate change is <I>always</I> =
a 100=20
percent certainty. Skeptics doubt that the scientists' models, which =
cannot=20
explain the present, infallibly map the distant future. </P>
<P><A =
href=3D"http://www.ft.com/cms/s/0/fd845ed0-d868-11de-b63a-00144feabdc0.ht=
ml"=20
target=3D"">The Financial Times' peculiar response</A> to the CRU =
materials is:=20
The scientific case for alarm about global warming "is growing more =
rather than=20
less compelling." If so, then could <I>anything</I> make the case less=20
compelling? A CRU e-mail says: "The fact is that we can't account for =
the lack=20
of warming at the moment" -- this "moment" is in its second decade -- =
"and it is=20
a travesty that we can't." </P>
<P>The travesty is the intellectual arrogance of the authors of =
climate-change=20
models partially based on the problematic practice of reconstructing =
long-term=20
prior climate changes. On such models we are supposed to wager trillions =
of=20
dollars -- and substantially diminished freedom. </P>
<P>Some climate scientists compound their delusions of intellectual =
adequacy=20
with messiah complexes. They seem to suppose themselves a small clerisy=20
entrusted with the most urgent truth ever discovered. On it, and hence =
on them,=20
the planet's fate depends. So some of them consider it virtuous to =
embroider=20
facts, exaggerate certitudes, suppress inconvenient data, and manipulate =
the=20
peer-review process to suppress scholarly dissent and, above all, to =
declare=20
that the debate is over. </P>
<P>Consider the sociology of science, the push and pull of interests,=20
incentives, appetites and passions. Governments' attempts to manipulate =
Earth's=20
temperature now comprise one of the world's largest industries. Tens of =
billions=20
of dollars are being dispensed, as by the U.S. Energy Department, which =
has=20
suddenly become, in effect, a huge venture capital operation, =
speculating in=20
green technologies. Political, commercial, academic and journalistic =
prestige=20
and advancement can be contingent on not disrupting the (postulated) =
consensus=20
that is propelling the gigantic and fabulously lucrative industry of =
combating=20
global warming. </P>
<P>Copenhagen is the culmination of the post-Kyoto maneuvering by people =

determined to fix the world's climate by breaking the world's -- =
especially=20
America's -- population to the saddle of ever-more-minute supervision by =

governments. But Copenhagen also is prologue for the 2010 climate change =
summit=20
in Mexico City, which will be planet Earth's last chance, until the next =
one.=20
</P>
<P><A href=3D"mailto:georgewill@washpost.com"=20
target=3D"">georgewill@washpost.com</A> </P>
<P></P>
<SCRIPT>=0A=
var comments_url =3D =
"http://www.washingtonpost.com/wp-dyn/content/article/2009/12/04/AR200912=
0403073_Comments.html" ;=0A=
var article_id =3D "AR2009120403073" ;=0A=
</SCRIPT>
<SPAN id=3DpubDate class=3Ddisplay:none; value=3D"1260075600000"=20
name=3D"pubDate"></SPAN><LINK rel=3Dstylesheet=20
href=3D"http://www.washingtonpost.com/wp-srv/css/commentslinks.css" =
media=3Dall>
<SCRIPT>=0A=
<!--=0A=
var COMMENTS_ALLOWED =3D false ;=0A=
var COMMENTS_ACTIVE =3D false ;=0A=
=0A=
var comments_period =3D ( typeof wp_article !=3D "undefined" && typeof =
wp_article.comments_period !=3D "undefined" && ( =
wp_article.comments_period !=3D "" || wp_article.comments_period =3D=3D =
"0" ) && wp_article.comments_period >=3D 0 ) ? =
wp_article.comments_period : 3 ;=0A=
=0A=
articleCommentsUrl =3D document.location.href;=0A=
if ( typeof comments_url =3D=3D 'undefined' ) {=0A=
	var article_pathname =3D document.location.pathname;=0A=
	var comments_url =3D =
article_pathname.split(".")[0]+"_Comments."+article_pathname.split(".")[1=
];=0A=
}=0A=
if ( typeof article_id =3D=3D 'undefined' ) {=0A=
	var article_id =3D articleCommentsUrl.split("/").pop(); =0A=
	var article_id =3D article_id.split(".")[0];=0A=
	article_id =3D article_id.replace(/(.*)_(\d+|\w+)/, =
function(match,submatch1,offset,string) { return submatch1; } ) ;=0A=
}=0A=
=0A=
function checkDaysOld(daysOld) {=0A=
	var todayString =3D 'December 07, 2009';=0A=
	var today =3D new Date(todayString).getTime();=0A=
=0A=
	var daysOld =3D 86400 * daysOld * 1000;=0A=
	var pubDate =3D document.getElementById("pubDate");=0A=
	if(pubDate !=3D null) {=0A=
		pubDate =3D pubDate.getAttribute("value");=0A=
		return (today - pubDate > daysOld )?true:false;=0A=
	} else {=0A=
		return false;=0A=
	}=0A=
}=0A=
=0A=
if ( typeof thisNode =3D=3D 'undefined' )=0A=
	thisNode =3D 'admin' ;=0A=
cmt_ancestor =3D thisNode.split('/')[0] ;=0A=
=0A=
// (black list) && (white list) of ancestors and sections goes here=0A=
if ( 	!( thisNode.match(/\/wires$/) || =
thisNode.match(/^artsandliving\/(entertainmentguide|entertainmentnews|tra=
vel\/index)($|\/)/) || thisNode.match(/^business\/(portfolio)($|\/)/) || =
thisNode.match(/^metro\/(obituaries)($|\/)/) )=0A=
			&&=0A=
		( =
thisNode.match(/^(artsandliving|business|cars|education|health|jobs|media=
|metro|nation|realestate|religion|politics|sports|technology|world|kidspo=
st|media)($|\/)/) || =
thisNode.match(/^print\/(washpostmagazine|style|sundayarts|sundaysource)(=
$|\/)/) || thisNode.match(/^opinions($|\/)/) || =
thisNode.match(/^opinion\/(columns)($|\/)/) ))=0A=
{=0A=
	COMMENTS_ALLOWED =3D true ;=0A=
	if(!checkDaysOld(comments_period) ) {=0A=
		document.write("<style>#ArticleCommentsWrapper =
{display:block};</style>"); =0A=
		COMMENTS_ACTIVE =3D true ;=0A=
	} else {=0A=
		document.write('<p class=3D"posted"><a href=3D"'+comments_url+'">View =
all comments</a> that have been posted about this article.</p>');=0A=
	}=0A=
} else {=0A=
	document.write('');=0A=
}=0A=
// -->=0A=
</SCRIPT>

<SCRIPT>=0A=
<!--=0A=
function getDisplayUserName()=0A=
{=0A=
	var output =3D 'Your washingtonpost.com User ID' ;=0A=
	//check to the see if the user is signed in=0A=
	if (document.cookie.indexOf("wpniuser") !=3D -1)=0A=
	{=0A=
		var start =3D (document.cookie.indexOf("wpniuser") + 9) ;=0A=
		var end =3D (document.cookie.indexOf(";",start)) =3D=3D -1 ? =
document.cookie.length : document.cookie.indexOf(";",start) ;=0A=
		cookieuser =3D document.cookie.substring(start,end) ;=0A=
=0A=
		// show their username and registration links=0A=
		if ( cookieuser.indexOf("@") !=3D -1)=0A=
			cookieuser =3D cookieuser.substring(0,cookieuser.indexOf("@")) ;=0A=
=0A=
		// cookieuser =3D cookieuser.trim() ;=0A=
		if ( cookieuser )=0A=
			output +=3D (', '+cookieuser+',') ;=0A=
	}=0A=
	output +=3D ' will be displayed with your comment.' ;=0A=
	return output ;=0A=
}=0A=
// -->=0A=
</SCRIPT>

<DIV id=3DArticleCommentsWrapper>
<DIV class=3Dcomments>
<DIV class=3Dhdr>
<DIV style=3D"FLOAT: left">
<P class=3Daction>Post a Comment</P></DIV>
<DIV style=3D"FLOAT: right">
<SCRIPT =
src=3D"http://www.washingtonpost.com/wp-srv/ad/comments_box.js"></SCRIPT>=

</DIV>
<DIV style=3D"CLEAR: both"></DIV><BR>
<SCRIPT>=0A=
document.write('<p class=3D"posted"><a href=3D"'+comments_url+'">View =
all comments</a> that have been posted about this article.</p>');=0A=
</SCRIPT>

<DIV id=3Dcomment-data-pluck>
<P style=3D"WIDTH: 400px"></P>
<SCRIPT language=3DJavaScript>=0A=
try{document.domain=3D"washingtonpost.com";}catch(e){};=0A=
</SCRIPT>

<SCRIPT language=3Djavascript type=3Dtext/javascript=20
src=3D"http://community.washingtonpost.com/ver1.0/SiteLifeProxy"></SCRIPT=
>

<SCRIPT>=0A=
</SCRIPT>

<SCRIPT =
language=3DJavaScript>gSiteLife.CommentsInput("ExternalResource",article_=
id,comments_url);</SCRIPT>
</DIV>
<DIV class=3Dclearboth></DIV>
<P>Comments that include profanity or personal attacks or other =
inappropriate=20
comments or material will be removed from the site. Additionally, =
entries that=20
are unsigned or contain "signatures" by someone other than the actual =
author=20
will be removed. Finally, we will take steps to block users who violate =
any of=20
our posting standards, terms of use or privacy policies or any other =
policies=20
governing this site. Please review the <A=20
href=3D"http://www.washingtonpost.com/wp-srv/liveonline/delphi/delphirule=
s.htm">full=20
rules</A> governing commentaries and discussions. You are fully =
responsible for=20
the content that you post.</P>
<DIV class=3Dclearboth></DIV></DIV></DIV></DIV>
<DIV align=3Dcenter>
<SCRIPT=20
src=3D"http://www.washingtonpost.com/wp-adv/adproducts/advertisingLinks/a=
dvertisingLinks_v2.js"></SCRIPT>
</DIV><!-- start the copyright for the articles -->
<DIV style=3D"CLEAR: both" id=3DarticleCopyright =
align=3Dcenter>=C2=A9&nbsp;2009&nbsp;The=20
Washington Post Company</DIV><!-- end the copyright for the aricles =
--><!-- start the copyright for the secions --><!-- end the copyright =
for the secions --></DIV></DIV><!-- end visible content -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://media.washingtonpost.com/wp-srv/javascript/resize.js"></SCR=
IPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://js.revsci.net/gateway/gw.js?csid=3DJ05531"></SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://media.washingtonpost.com/wp-srv/ad/audsci.js"></SCRIPT>

<SCRIPT>=0A=
<!--=0A=
if ( typeof otto !=3D "undefined" ) {=0A=
	otto.placeGlobalOttoTest() ;=0A=
}=0A=
// -->=0A=
</SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://media.washingtonpost.com/wp-srv/javascript/omniture/omnitur=
e-utils.js"></SCRIPT>

<SCRIPT>try{echoOmniture()}catch(e){}</SCRIPT>

<SCRIPT type=3Dtext/javascript=20
src=3D"http://media.washingtonpost.com/wp-srv/javascript/placeSiteMetrix.=
js"></SCRIPT>

<SCRIPT type=3Dtext/javascript>placeSiteMetrix();</SCRIPT>
<!--<script src=3D"https://WaPo.netmng.com/?aid=3D069" =
type=3D"text/javascript" language=3D"javascript" =
defer=3D"defer"></script>--></BODY></HTML>

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.washingtonpost.com/wp-srv/images/homepage/logos/twp_logo_300.gif

R0lGODlhLAEvAMQQACMfIMDCxFdVV4uLjUpISefq7XJxcjAtLs3P0qWmqWVjZT06O5iZm39+gLK0
ttrd4PT4+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA
ABAALAAAAAAsAS8AAAX/ICSOZGmeaKqqQVOscCzPdG3feK7vfN8HAsLLRywaj8ikcslrAAAPpnRK
rVqvRsMBIMB6v+CwuOgQbLvjtHrN/hIYT8CwTa/br4ikYBAX3kUOf4KDEA8NAogGASkFcwloRwQB
cQAKJAUEeScGCVcOADEJCnOemmkJDSkIo1YJpiV8lE8CiyaKIglcSQMDBpSamAAHryJOAJ1UCFsw
uQB+eAe1Y80GI6YPW5lUudIksbJ9CVEQq1AQk7pJmZQMEMFPwyTNT8hMyk8rCJTPyVvdYPMAGHiB
5p0wYkia/SMHrqGsBeS2pEPiYACBOAMwSYSnKcECWfWS3MOX4sECOHGq//V7shBLGVlCuhQIQime
En0sbQkbEOBBi48OCQx4ICAOpCMBBhR90oDAggQbD0I14IuSyiQLgIJS0QvlgXFSRgJoaQWBgQYo
4wCZSesipUBIxP4rAGCBAQUN7hpw4EALpQW9CgRANxGp0jgHXD2NekAI1apxliCKvCIBgQY2pyj4
RrZKFAQC0o4lIADBzABunwxIclZtiUkExjH4KqoBAgSDA4h6MdiokqRLAaQit5hSLaoKKEkOHirz
FFqu0/A0DgBuAUWUViPhFX2ExRcFFGRGsEBA3lsies8ScZ0UCgftYgDHaG3Bp+5ClaNg4CLGAwNg
+QTBZCRBYABCEDQAl/8JtjHY2WusmABdTowciEJ7JVwH1gzT9XGUeqq9198KA8QnQnzcUehdIMEs
ONtY53QDokwXxaaCMRumMF+II0yo4h76ZZicMzmaANUsChDw1YDMGXgQLPToFI08UZIITzczNebh
HiYEIJGJIwSjzQi+OBdDh08w8CFhAGh3iTE2ooCAWwsoYMYAoGW1JYqNXISGR64NRsKMEKRmpggP
pHaUjofxKIKPMD76zVaDKonYgkIqIBoA8REICmSZBcQAAnCJhkxAnbiHqFPsjDBkQ8Q0ZRUpr9oE
ah6qooDmWGtmV8Iqhrak5qYEFOrQAaS41ZMCdgYqI2ECGDDpAQOEBNX/kVWy0GibJEAqDZCUeXeA
AA6k1mac6WUzal/j9hicAWZQkpdl5sbziLkJ0EuJAhCVANVJrwpECyJaPkEamHOO62UfDzBwnV9X
3hXVXTAUUAZkvA7KppsQzGYfxhlZlxxgCPB3EamI6Gkwud58VKwI2y4i6AggCtRAQC+74wsB0iKW
K6IGOLURx972OOkIRHExpyitsmeMHGrugay7cdjpQFSoSZLaalkzYKhTqP1ySVWYNDDpcAMS9s+L
tCwAhFUD8IutMEEs/MQCP1sTlVq90ufOkAEYwMCkC+RxtWqBIwdmipEivRTaMceosW+rpIXGnLPA
p9VVGe7taNrGGa3f/+G6zNQLfqmRoACmnhZAHqAkneZ3n7DjTZSa4RJHGbzfuOmjNOH5ligDkAXw
Ann3VUIOAbAveoJWsgAxOX3kuZbAXr4x7egDlnjDWQkNDFlP5DOnBy0g33QB7Hqrh27Cpn4/yua3
R8/pFiSSdAcupQx0TzVJoGlSjOJ3jkYVZH8kqFO4zBa/39HsEOtxR/5UhCbtVGQpznuNM3iBMenR
bGMQQFMtHHC+CroqR4z7B78oGByZPcs3BfTNjrpgCMiEpEfMG8zWujU/0UVmhj1Smw+3YhL3eOp/
lAIRx4AoqdwhEGa9C2J3mAg6ChJGO1REgZekhR2+TS9EIjSfb0zYMf8wQbE7hfgezFoouQ/CMCky
NCDMrjalE5ghCNsiWg+b+EM5yk9/33hUeRAxnCM+SoBKHJQfBxTIIXonin9UERUdCLMrpmeRWozH
rjwoRvqEcYDrMaEyEIEITaRwUGmRBvleGEE4roeKBIjQCRSQhx1xS4qAVM4khcjHNmEsHYZkUrgS
SbNFPrGXj2wgLwuIQVw2joxZPAFuKmmcvoGRl4RCkyLMFalTFjMO42Nj+UCZDlfqAojX4dgJhmBL
PbqPkbo05jL3R7d4AVOAwSTmJZuJTEee0VGUZGYEq/hMSwq0MCSanzW59clssqkhtfBmeuZxlVV6
h1AxfKUBQfOg1+T/kYfvpOdBIRFQem7mbfcMVz4Nus+BHhOeBWKc75a5y+5AE5MJreYXGYrNErJJ
EuaMqBrTk7wDeEectShANM6X0XM26gCylM9Hndk4kdb0Rz4JgAIUwcRgrpSAk2xkP0MISYJK46oF
9Vs0uaLQna6moSV8AC8wo0M1SjSNqUGGAaMws0Ng1Jxd2FHOZtBOkOayj/w0q7sEsICc+dGriGTp
SP05Vpk686zytKlB15qCTS70rT3NHi+UUov9CRWNBnra1Cxinw9CIBcM+Gv6JlsDW6KNoNUZYrHQ
OpcxhZCfkB2mZMPqRLFaNpKN4+1F1YpTturUjZ4M7UAh4AC0mfaf/40TwYH2Ua4bDqYZWX3jbHe0
gCKtwJa3xK1NwMUK5ZLAbN4ALj4jC1ZjihWmlDquYls6kYDeNLEw2KTbxlEz0EYHoxKcw3XJitoA
9E8WmALE/ciJBsAeVBjSQIA6uxQ3WQxkQGIRRieAdJUdHQAuPgoJJ9cYweAWCES3Je4TFGzcsvpo
QeQdh38326jBMmIA0aDOLHLjKzQNB8G07JZdh9qjEDvDbAOQVRzyUJo4FK6pXejLpLiFibwhKjTB
MRgDykM6cApgq4oM84jZlCpMoLCZZ0mNJr4ah3YsQnBuWe83hGCa/dlIvz468WuTUqtATOgZmCCM
H2xZjc68Y34eJv/Mh/FECQEIhjDIqEgJFsy4K4NlFU5uyAJSgZZ6YdlAxNuUnRBkAkxcDyaucxs3
ObXpp5irKA6AXmjuMqQDDOQwlu6faJYUTAZ4rdJ4wUtNovCGfRSOAMkTMbUaiJM+BO0kTxMOuYRD
gjeYa7fhq7SPu60WIVMnMezh2YvgMZ0rF0IoQIE2kAQNs02dRR4H8ty+usfRjTR6tiLoN2JYjQKq
zMMmt1OzCR4wp3L1IQCyTsknxpUkg/ErPg1PjUoM2bVX8TniT1CJwQd+GeZtBKqQ9AgtNmKJB1xH
AXOryz8sY7djSPDVBvtZLhLTRZbQAjIWMUUjVgG7kMsyzIg5BFj/PDI4qxhJAXL1XLQ+HPCVC+SS
MPyyww8VYJgfwDmursoNL/GGnR3P2wJRal3qlICF+VaCx74KgXLWiF07YwjIuwjnuvKkKOTa4WMZ
QPKGY5pch40fryXX/XJlGUDVIzzEu3sKshI+b0FVNyHP1XVwlyYSoETd61ZnFFBxJM6RYBW2Scpo
42bGQnDxm0zJkODqaAN6jd1ABnDbCkzHD0zACwLMGscqgnbbMPFssATyH5mSRArfm/61TiEGaDzS
iQQ8lRSJ+o4JQAPkDZ+e7bbgV94eIPMQKnTzAri95+/i7lUhowCiCLoq8JLB0ytltDD/WQGWmBYE
MUD9MqAbnUVw+LDgHu1hMQ7CCCPyN8pyAg1QJAVQfCOQL+t0AMNRNkOiTvunfw3QUeTgfQlCgIEz
BJ4FMwRIM1RHM+6BAAt4ISmYEEuhfIRgBA4wJPVHBNcDC7mnPGxACiU4gziwFIgHhERQFUNIg0d4
FzZ3Bz9IhDTQDFHlhD8wC17GA6DhE/liCkD2fG3QhFIIA3BAC19IBo0BgD6ADdzkNgVgF4PghWMo
JwxgXm+IA3J1gj0QDOWBZ1YGgl1IGHZxg3MYiGNYFJryE69Ge4LQIULwCILYiIJYEc0XS5YGhNOB
aI54iZhYAK2XiMSDiZ74iVLYC6A4iqT4B3LIBiEAADs=

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media10.washingtonpost.com/wp/css/specials-js.css

#flash-timespace {
	BORDER-BOTTOM: black 1px solid; MARGIN: auto; WIDTH: 970px; HEIGHT: =
540px; BORDER-TOP: black 1px solid
}
.ts-box {
	BORDER-BOTTOM: black 1px solid; BORDER-LEFT: black 1px solid; WIDTH: =
970px; BORDER-TOP: black 1px solid; BORDER-RIGHT: black 1px solid
}
.ts-nav-box {
	WIDTH: 970px; HEIGHT: 20px; FONT-SIZE: 11px; FONT-WEIGHT: bold
}
.ts-nav-box DIV {
	FLOAT: left
}
.ts-nav-box-button {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 10px; WIDTH: 110px; PADDING-RIGHT: =
0px; PADDING-TOP: 3px
}
.ts-nav-box-right {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 10px; PADDING-TOP: 3px
}
.ts-nav-box-range {
	TEXT-ALIGN: center; PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; WIDTH: =
730px; PADDING-RIGHT: 0px; COLOR: #666666; PADDING-TOP: 3px
}
.clear0 {
	LINE-HEIGHT: 0px; HEIGHT: 0px; CLEAR: both; FONT-SIZE: 1px
}
.ad_slug {
	DISPLAY: none
}
#slug_200x50 {
	WIDTH: 300px; FLOAT: right
}
#flash-fluid {
	BORDER-BOTTOM: black 1px solid; BORDER-LEFT: black 1px solid; MARGIN: =
auto; WIDTH: 970px; HEIGHT: 540px; BORDER-TOP: black 1px solid; =
BORDER-RIGHT: black 1px solid
}
.fluid-header {
	POSITION: relative; BORDER-LEFT: black 1px solid; WIDTH: 970px; =
BACKGROUND: #333; HEIGHT: 30px; COLOR: #fff; FONT-SIZE: 20px; =
BORDER-TOP: black 1px solid; BORDER-RIGHT: black 1px solid; PADDING-TOP: =
6px
}
.fluid-header SPAN {
	MARGIN-LEFT: 15px
}
.json-config {
	DISPLAY: none
}
.overlay {
	Z-INDEX: 1000; POSITION: absolute; WIDTH: 100%; TOP: 0px; CURSOR: =
pointer; LEFT: 0px
}
.overlay-container {
	Z-INDEX: 1001; POSITION: absolute; FLOAT: left; OVERFLOW: hidden; TOP: =
100px; LEFT: 100px
}
.float-tl {
	PADDING-LEFT: 26px; BACKGROUND: url(images/float-tl.png) no-repeat left =
top
}
.float-tm {
	BACKGROUND: url(images/float-tm.png) repeat-x left top; HEIGHT: 26px
}
.float-tr {
	PADDING-RIGHT: 28px; BACKGROUND: url(images/float-tr.png) no-repeat =
right top
}
.float-tr-close {
	PADDING-RIGHT: 28px; BACKGROUND: url(images/float-tr-close.png) =
no-repeat right top; CURSOR: pointer
}
.float-ml {
	PADDING-LEFT: 26px; BACKGROUND: url(images/float-ml.png) repeat-y left =
top
}
.float-mm {
	BACKGROUND: white
}
.float-mr {
	PADDING-RIGHT: 28px; BACKGROUND: url(images/float-mr.png) repeat-y =
right top
}
.float-bl {
	PADDING-LEFT: 26px; BACKGROUND: url(images/float-bl.png) no-repeat left =
bottom
}
.float-bm {
	BACKGROUND: url(images/float-bm.png) repeat-x left top; HEIGHT: 28px
}
.float-br {
	PADDING-RIGHT: 28px; BACKGROUND: url(images/float-br.png) no-repeat =
right bottom
}
.annotate-help-box {
	PADDING-BOTTOM: 10px; MARGIN: 10px 15px; PADDING-LEFT: 15px; =
PADDING-RIGHT: 15px; BACKGROUND: #eeeeee; PADDING-TOP: 10px
}
.annotate-help-box P {
	LINE-HEIGHT: 20px; FONT-FAMILY: georgia; COLOR: #333; FONT-SIZE: 13px; =
FONT-WEIGHT: normal
}
.annotate-help-box H3 {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 30px; MARGIN: 0px 0px 7px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: georgia; COLOR: =
#333; FONT-SIZE: 22px; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
.annotate-help-box .leadPhoto {
	BORDER-BOTTOM: #fff 5px solid; BORDER-LEFT: #fff 5px solid; BORDER-TOP: =
#fff 5px solid; BORDER-RIGHT: #fff 5px solid
}
.annotate-help-box .left {
	FLOAT: left
}
.annotate-help-box .right {
	FLOAT: right
}
.annotate-help-box .margin10r {
	MARGIN-RIGHT: 10px
}
.annotate-help-box .margin10l {
	MARGIN-LEFT: 10px
}
.annotate-help-box .margin5b {
	MARGIN-BOTTOM: 5px
}
.annotate-help-box .note {
	TEXT-ALIGN: right; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12px; FONT-STYLE: =
italic; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 20px; =
FONT-FAMILY: georgia; HEIGHT: 16px; COLOR: #000; FONT-SIZE: 12px; =
FONT-WEIGHT: normal; PADDING-TOP: 4px
}
.annotate-help-box .instructions {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 16px; MARGIN: 5px 0px; PADDING-LEFT: =
0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial; COLOR: #777; FONT-SIZE: =
12px; FONT-WEIGHT: normal; PADDING-TOP: 0px
}
.annotate-help-box .keyfactsLinkFirst {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 10px; PADDING-RIGHT: =
0px; BACKGROUND: =
url(http://media.washingtonpost.com/wp-srv/images/bullet_3x3_999999.gif) =
no-repeat 0px 5px; COLOR: #666; FONT-SIZE: 13px; PADDING-TOP: 0px
}
.annotate-help-box .keyfactsLink {
	PADDING-BOTTOM: 5px; MARGIN: 5px 0px 0px; PADDING-LEFT: 10px; =
PADDING-RIGHT: 0px; BACKGROUND: =
url(http://media.washingtonpost.com/wp-srv/images/bullet_3x3_999999.gif) =
no-repeat 0px 5px; COLOR: #666; FONT-SIZE: 13px; PADDING-TOP: 0px
}
.annotate-section {
	Z-INDEX: 9; BORDER-BOTTOM: #aaa 1px dashed; POSITION: relative; =
BORDER-LEFT: #aaa 1px dashed; PADDING-BOTTOM: 15px; PADDING-LEFT: 15px; =
PADDING-RIGHT: 15px; BACKGROUND: #fff; BORDER-TOP: #aaa 1px dashed; TOP: =
0px; BORDER-RIGHT: #aaa 1px dashed; PADDING-TOP: 15px; LEFT: 0px
}
SPAN.annotate-section {
	Z-INDEX: 9; BORDER-BOTTOM: #aaa 1px dashed; POSITION: relative; =
BORDER-LEFT: #aaa 1px dashed; PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; BACKGROUND: #fff; BORDER-TOP: #aaa 1px dashed; TOP: =
0px; BORDER-RIGHT: #aaa 1px dashed; PADDING-TOP: 0px; LEFT: 0px
}
.annotate-section-active {
	BORDER-BOTTOM: #0076a3 2px solid; POSITION: relative; BORDER-LEFT: =
#0076a3 2px solid; BACKGROUND: #f6f6f6; BORDER-TOP: #0076a3 2px solid; =
BORDER-RIGHT: #0076a3 2px solid
}
.annotate-section-active-on {
	Z-INDEX: 10
}
.annotate-section-tab {
	Z-INDEX: 11; POSITION: absolute; PADDING-LEFT: 24px; DISPLAY: block; =
BACKGROUND: url(images/comment-bar-start.png) no-repeat left bottom; =
HEIGHT: 39px; CURSOR: pointer
}
.annotate-section-tab SPAN {
	PADDING-BOTTOM: 7px; PADDING-LEFT: 3px; WIDTH: 225px; PADDING-RIGHT: =
12px; DISPLAY: block; BACKGROUND: url(images/comment-bar.png) repeat-x =
right bottom; HEIGHT: 20px; COLOR: #ffffff; FONT-SIZE: 12px; =
FONT-WEIGHT: bold; PADDING-TOP: 12px
}
.annotate-section-most-comments {
	BORDER-BOTTOM: #0076a3 2px solid; BORDER-LEFT: #0076a3 2px solid; =
PADDING-BOTTOM: 15px; MARGIN-TOP: 5px; PADDING-LEFT: 15px; =
PADDING-RIGHT: 15px; BACKGROUND: #f6f6f6; BORDER-TOP: #0076a3 2px solid; =
BORDER-RIGHT: #0076a3 2px solid; PADDING-TOP: 15px
}
.annotation-link-most-commented {
	COLOR: #555; FONT-SIZE: 18px; TEXT-DECORATION: none !important; =
important:=20
}
.annotation-content P {
	LINE-HEIGHT: 18px; COLOR: #333; FONT-SIZE: 13px
}
.doubleLine {
	BORDER-BOTTOM: #ccc 1px solid; PADDING-BOTTOM: 0px; LINE-HEIGHT: 0px; =
MARGIN: 15px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; HEIGHT: 3px; =
BORDER-TOP: #ccc 1px solid; PADDING-TOP: 0px
}
.toast-toaster {
	Z-INDEX: 20; POSITION: absolute; WIDTH: 292px; BOTTOM: 0px; RIGHT: 0px
}
.toast-slice A {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: medium; =
COLOR: #99ccf7; TEXT-DECORATION: none
}
.toast-slice A:link {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: medium; =
COLOR: #99ccf7; TEXT-DECORATION: none
}
.toast-slice A:active {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: medium; =
COLOR: #99ccf7; TEXT-DECORATION: none
}
.toast-slice A:visited {
	OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: medium; =
COLOR: #99ccf7; TEXT-DECORATION: none
}
.toast-slice A:hover {
	BORDER-BOTTOM: medium none; COLOR: #99ccf7; TEXT-DECORATION: underline
}
.toast-slice {
	Z-INDEX: 1000; POSITION: relative
}
.toast-slice-top-left {
	PADDING-LEFT: 20px; BACKGROUND: url(images/toast/tl-bl.png) no-repeat =
left top; HEIGHT: 38px
}
.toast-slice-top-right {
	POSITION: relative; WIDTH: 88px; BACKGROUND: =
url(images/toast/tr-br.png) no-repeat right top; FLOAT: left; HEIGHT: =
38px
}
.toast-slice-pin {
	POSITION: absolute; WIDTH: 16px; BACKGROUND: =
url(images/toast/buttons.png) no-repeat 0px 0px; HEIGHT: 38px; TOP: 0px; =
CURSOR: pointer; RIGHT: 47px
}
.toast-slice-pin:hover {
	BACKGROUND-POSITION: 0px -38px
}
.toast-slice-pin-pinned {
	BACKGROUND-POSITION: 0px -38px
}
.toast-slice-drag {
	WIDTH: 184px; FLOAT: left; HEIGHT: 38px; CURSOR: move
}
.toast-slice-close {
	POSITION: absolute; WIDTH: 16px; BACKGROUND: =
url(images/toast/buttons.png) no-repeat -16px 0px; HEIGHT: 38px; TOP: =
0px; CURSOR: pointer; RIGHT: 25px
}
.toast-slice-close:hover {
	BACKGROUND-POSITION: -16px -38px
}
.toast-slice-middle-left {
	PADDING-LEFT: 20px; BACKGROUND: url(images/toast/ml.png) repeat-y left =
50%
}
.toast-slice-middle-right {
	PADDING-RIGHT: 20px; FONT-FAMILY: Arial, Helvetica, sans-serif; =
BACKGROUND: url(images/toast/mr.png) repeat-y right 50%
}
.toast-slice-content {
	PADDING-BOTTOM: 8px; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; COLOR: =
#fff; FONT-SIZE: 13px; PADDING-TOP: 8px
}
.toast-slice-content A {
	COLOR: #99ccf7; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
.toast-slice-content A:hover {
	TEXT-DECORATION: underline
}
.toast-slice-content H4 {
	PADDING-BOTTOM: 0px; TEXT-TRANSFORM: uppercase; MARGIN: 0px 0px 4px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-WEIGHT: bold; PADDING-TOP: =
0px
}
.toast-slice-options {
	TEXT-ALIGN: right; COLOR: #fff
}
.toast-slice-options A {
	COLOR: #fff; FONT-SIZE: 12px; FONT-WEIGHT: normal; TEXT-DECORATION: =
none
}
.toast-slice-options A:hover {
	TEXT-DECORATION: underline
}
.toast-slice-bottom-left {
	PADDING-LEFT: 204px; BACKGROUND: url(images/toast/tl-bl.png) no-repeat =
left bottom
}
.toast-slice-bottom-right {
	POSITION: relative; BACKGROUND: url(images/toast/tr-br.png) no-repeat =
right bottom; HEIGHT: 20px
}

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Location: http://media3.washingtonpost.com/wp-srv/css/article/pf.css

.print_hide {
	DISPLAY: none
}
#pfmnav {
	DISPLAY: none
}

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.washingtonpost.com/wp-srv/css/commentslinks.css

.comments A:link {
	COLOR: #0c4790; TEXT-DECORATION: underline
}
.comments A:visited {
	COLOR: #0c4790; TEXT-DECORATION: underline
}
.comments A:hover {
	COLOR: #cc0000; TEXT-DECORATION: underline
}
.comments A:active {
	COLOR: #cc0000; TEXT-DECORATION: underline
}
.comments {
	WIDTH: 100%; FONT: 11px arial
}
.comments .hdr {
	BORDER-BOTTOM: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; =
PADDING-BOTTOM: 5px; LINE-HEIGHT: 1.2; BACKGROUND-COLOR: #eee; =
PADDING-LEFT: 5px; PADDING-RIGHT: 5px; MARGIN-BOTTOM: 15px; BORDER-TOP: =
#ccc 1px solid; BORDER-RIGHT: #ccc 1px solid; PADDING-TOP: 5px
}
.comments .hdr H3 {
	MARGIN: 0px; FONT: bold 13px Arial, Helvetica, sans-serif; COLOR: #c00
}
.comments P {
	PADDING-BOTTOM: 10px; MARGIN: 0px; PADDING-LEFT: 7px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.comments P.posted {
	FONT-WEIGHT: bold
}
.comments P.action {
	FONT: bold 13px Arial, Helvetica, sans-serif; COLOR: #c00
}
.comments LABEL {
	FONT-WEIGHT: bold
}
.comments LABEL STRONG {
	FONT-WEIGHT: normal
}
.comments FORM {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
.comments #comment-data {
	POSITION: relative; TEXT-ALIGN: left; WIDTH: 180px; PADDING-RIGHT: =
15px; FLOAT: left; MARGIN-RIGHT: 15px
}
.comments #comment-data-pluck {
	POSITION: relative; TEXT-ALIGN: left; BACKGROUND-COLOR: #eeeeee; =
PADDING-LEFT: 5px; WIDTH: 400px; PADDING-RIGHT: 15px; FLOAT: left
}
.comments TEXTAREA#comment-text {
	WIDTH: 370px
}
.comments .clearboth {
	CLEAR: both
}
.comments P.posted {
	FONT-FAMILY: arial; COLOR: #999999; FONT-SIZE: 11px
}
.entry P.posted {
	FONT-FAMILY: arial; COLOR: #999999; FONT-SIZE: 11px
}
#blurb P {
	MARGIN-TOP: 0px; FONT: 13px/140% Arial, Helvetica, sans-serif
}
#blurb .byline {
	COLOR: #333; FONT-WEIGHT: bold
}
.comments .entry {
	BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: =
medium none; BORDER-RIGHT: medium none
}
.comments .entry P {
	BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; FONT: 14px/140% =
"Times New Roman", Times, serif; COLOR: #333; BORDER-TOP: medium none; =
BORDER-RIGHT: medium none
}
.comments .entry .posted {
	BORDER-BOTTOM: #999 1px dotted; PADDING-BOTTOM: 7px; PADDING-LEFT: 7px; =
PADDING-RIGHT: 7px; FONT: bold 11px Arial, Helvetica, sans-serif; =
MARGIN-BOTTOM: 15px; COLOR: #999; PADDING-TOP: 0px
}
P.postedLink {
	FONT: bold 11px/130% Arial, Helvetica, sans-serif; COLOR: #333
}
.comments .removeEntry {
	BORDER-BOTTOM: #999 1px dotted; BORDER-LEFT: #999 1px dotted; =
PADDING-BOTTOM: 7px; MARGIN: 7px; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; =
BORDER-TOP: #999 1px dotted; BORDER-RIGHT: #999 1px dotted; PADDING-TOP: =
7px
}
.comments .removeEntry P {
	BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; FONT: 13px/140% =
"Times New Roman", Times, serif; COLOR: #333; BORDER-TOP: medium none; =
BORDER-RIGHT: medium none
}
.comments .removeEntry P.posted {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT: bold 11px Arial, Helvetica, =
sans-serif; COLOR: #999; BORDER-TOP: 0px; BORDER-RIGHT: 0px; =
PADDING-TOP: 0px
}
.commentlinks {
	PADDING-BOTTOM: 7px; WIDTH: 400px; FONT: bold 11px Arial, Helvetica, =
sans-serif; COLOR: #666
}
.commentlinks A {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; =
PADDING-TOP: 0px
}
#comments_error {
	PADDING-BOTTOM: 3px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: =
#c00; FONT-WEIGHT: bold; PADDING-TOP: 3px
}
DIV.SL_StaffRecommends_Container {
	Z-INDEX: 4; BORDER-BOTTOM: #000000 1px solid; POSITION: absolute; =
TEXT-ALIGN: left; BORDER-LEFT: #000000 1px solid; BACKGROUND-COLOR: =
#cccccc; WIDTH: 340px; FONT-FAMILY: Verdana; FONT-SIZE: 10px; =
BORDER-TOP: #000000 1px solid; FONT-WEIGHT: bold; BORDER-RIGHT: #000000 =
1px solid
}

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media3.washingtonpost.com/wp-srv/javascript/framework/prototype.js

/*  Prototype JavaScript framework, version 1.6.0.2
 *  (c) 2005-2008 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style =
license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
 =
*------------------------------------------------------------------------=
--*/

var Prototype =3D {
  Version: '1.6.0.2',

  Browser: {
    IE:     !!(window.attachEvent && !window.opera),
    Opera:  !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && =
navigator.userAgent.indexOf('KHTML') =3D=3D -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
  },

  BrowserFeatures: {
    XPath: !!document.evaluate,
    ElementExtensions: !!window.HTMLElement,
    SpecificElementExtensions:
      document.createElement('div').__proto__ &&
      document.createElement('div').__proto__ !=3D=3D
        document.createElement('form').__proto__
  },

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,

  emptyFunction: function() { },
  K: function(x) { return x }
};

if (Prototype.Browser.MobileSafari)
  Prototype.BrowserFeatures.SpecificElementExtensions =3D false;


/* Based on Alex Arnell's inheritance implementation. */
var Class =3D {
  create: function() {
    var parent =3D null, properties =3D $A(arguments);
    if (Object.isFunction(properties[0]))
      parent =3D properties.shift();

    function klass() {
      this.initialize.apply(this, arguments);
    }

    Object.extend(klass, Class.Methods);
    klass.superclass =3D parent;
    klass.subclasses =3D [];

    if (parent) {
      var subclass =3D function() { };
      subclass.prototype =3D parent.prototype;
      klass.prototype =3D new subclass;
      parent.subclasses.push(klass);
    }

    for (var i =3D 0; i < properties.length; i++)
      klass.addMethods(properties[i]);

    if (!klass.prototype.initialize)
      klass.prototype.initialize =3D Prototype.emptyFunction;

    klass.prototype.constructor =3D klass;

    return klass;
  }
};

Class.Methods =3D {
  addMethods: function(source) {
    var ancestor   =3D this.superclass && this.superclass.prototype;
    var properties =3D Object.keys(source);

    if (!Object.keys({ toString: true }).length)
      properties.push("toString", "valueOf");

    for (var i =3D 0, length =3D properties.length; i < length; i++) {
      var property =3D properties[i], value =3D source[property];
      if (ancestor && Object.isFunction(value) &&
          value.argumentNames().first() =3D=3D "$super") {
        var method =3D value, value =3D Object.extend((function(m) {
          return function() { return ancestor[m].apply(this, arguments) =
};
        })(property).wrap(method), {
          valueOf:  function() { return method },
          toString: function() { return method.toString() }
        });
      }
      this.prototype[property] =3D value;
    }

    return this;
  }
};

var Abstract =3D { };

Object.extend =3D function(destination, source) {
  for (var property in source)
    destination[property] =3D source[property];
  return destination;
};

Object.extend(Object, {
  inspect: function(object) {
    try {
      if (Object.isUndefined(object)) return 'undefined';
      if (object =3D=3D=3D null) return 'null';
      return object.inspect ? object.inspect() : String(object);
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  },

  toJSON: function(object) {
    var type =3D typeof object;
    switch (type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': return object.toString();
    }

    if (object =3D=3D=3D null) return 'null';
    if (object.toJSON) return object.toJSON();
    if (Object.isElement(object)) return;

    var results =3D [];
    for (var property in object) {
      var value =3D Object.toJSON(object[property]);
      if (!Object.isUndefined(value))
        results.push(property.toJSON() + ': ' + value);
    }

    return '{' + results.join(', ') + '}';
  },

  toQueryString: function(object) {
    return $H(object).toQueryString();
  },

  toHTML: function(object) {
    return object && object.toHTML ? object.toHTML() : =
String.interpret(object);
  },

  keys: function(object) {
    var keys =3D [];
    for (var property in object)
      keys.push(property);
    return keys;
  },

  values: function(object) {
    var values =3D [];
    for (var property in object)
      values.push(object[property]);
    return values;
  },

  clone: function(object) {
    return Object.extend({ }, object);
  },

  isElement: function(object) {
    return object && object.nodeType =3D=3D 1;
  },

  isArray: function(object) {
    return object !=3D null && typeof object =3D=3D "object" &&
      'splice' in object && 'join' in object;
  },

  isHash: function(object) {
    return object instanceof Hash;
  },

  isFunction: function(object) {
    return typeof object =3D=3D "function";
  },

  isString: function(object) {
    return typeof object =3D=3D "string";
  },

  isNumber: function(object) {
    return typeof object =3D=3D "number";
  },

  isUndefined: function(object) {
    return typeof object =3D=3D "undefined";
  }
});

Object.extend(Function.prototype, {
  argumentNames: function() {
    var names =3D =
this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").inv=
oke("strip");
    return names.length =3D=3D 1 && !names[0] ? [] : names;
  },

  bind: function() {
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return =
this;
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();
    return function() {
      return __method.apply(object, args.concat($A(arguments)));
    }
  },

  bindAsEventListener: function() {
    var __method =3D this, args =3D $A(arguments), object =3D =
args.shift();
    return function(event) {
      return __method.apply(object, [event || =
window.event].concat(args));
    }
  },

  curry: function() {
    if (!arguments.length) return this;
    var __method =3D this, args =3D $A(arguments);
    return function() {
      return __method.apply(this, args.concat($A(arguments)));
    }
  },

  delay: function() {
    var __method =3D this, args =3D $A(arguments), timeout =3D =
args.shift() * 1000;
    return window.setTimeout(function() {
      return __method.apply(__method, args);
    }, timeout);
  },

  wrap: function(wrapper) {
    var __method =3D this;
    return function() {
      return wrapper.apply(this, =
[__method.bind(this)].concat($A(arguments)));
    }
  },

  methodize: function() {
    if (this._methodized) return this._methodized;
    var __method =3D this;
    return this._methodized =3D function() {
      return __method.apply(null, [this].concat($A(arguments)));
    };
  }
});

Function.prototype.defer =3D Function.prototype.delay.curry(0.01);

Date.prototype.toJSON =3D function() {
  return '"' + this.getUTCFullYear() + '-' +
    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
    this.getUTCDate().toPaddedString(2) + 'T' +
    this.getUTCHours().toPaddedString(2) + ':' +
    this.getUTCMinutes().toPaddedString(2) + ':' +
    this.getUTCSeconds().toPaddedString(2) + 'Z"';
};

var Try =3D {
  these: function() {
    var returnValue;

    for (var i =3D 0, length =3D arguments.length; i < length; i++) {
      var lambda =3D arguments[i];
      try {
        returnValue =3D lambda();
        break;
      } catch (e) { }
    }

    return returnValue;
  }
};

RegExp.prototype.match =3D RegExp.prototype.test;

RegExp.escape =3D function(str) {
  return String(str).replace(/([.*+?^=3D!:${}()|[\]\/\\])/g, '\\$1');
};

/*-----------------------------------------------------------------------=
---*/

var PeriodicalExecuter =3D Class.create({
  initialize: function(callback, frequency) {
    this.callback =3D callback;
    this.frequency =3D frequency;
    this.currentlyExecuting =3D false;

    this.registerCallback();
  },

  registerCallback: function() {
    this.timer =3D setInterval(this.onTimerEvent.bind(this), =
this.frequency * 1000);
  },

  execute: function() {
    this.callback(this);
  },

  stop: function() {
    if (!this.timer) return;
    clearInterval(this.timer);
    this.timer =3D null;
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting =3D true;
        this.execute();
      } finally {
        this.currentlyExecuting =3D false;
      }
    }
  }
});
Object.extend(String, {
  interpret: function(value) {
    return value =3D=3D null ? '' : String(value);
  },
  specialChar: {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '\\': '\\\\'
  }
});

Object.extend(String.prototype, {
  gsub: function(pattern, replacement) {
    var result =3D '', source =3D this, match;
    replacement =3D arguments.callee.prepareReplacement(replacement);

    while (source.length > 0) {
      if (match =3D source.match(pattern)) {
        result +=3D source.slice(0, match.index);
        result +=3D String.interpret(replacement(match));
        source  =3D source.slice(match.index + match[0].length);
      } else {
        result +=3D source, source =3D '';
      }
    }
    return result;
  },

  sub: function(pattern, replacement, count) {
    replacement =3D this.gsub.prepareReplacement(replacement);
    count =3D Object.isUndefined(count) ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  },

  scan: function(pattern, iterator) {
    this.gsub(pattern, iterator);
    return String(this);
  },

  truncate: function(length, truncation) {
    length =3D length || 30;
    truncation =3D Object.isUndefined(truncation) ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : =
String(this);
  },

  strip: function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  },

  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), =
'');
  },

  extractScripts: function() {
    var matchAll =3D new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne =3D new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(function(script) { return =
eval(script) });
  },

  escapeHTML: function() {
    var self =3D arguments.callee;
    self.text.data =3D this;
    return self.div.innerHTML;
  },

  unescapeHTML: function() {
    var div =3D new Element('div');
    div.innerHTML =3D this.stripTags();
    return div.childNodes[0] ? (div.childNodes.length > 1 ?
      $A(div.childNodes).inject('', function(memo, node) { return =
memo+node.nodeValue }) :
      div.childNodes[0].nodeValue) : '';
  },

  toQueryParams: function(separator) {
    var match =3D this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return { };

    return match[1].split(separator || '&').inject({ }, function(hash, =
pair) {
      if ((pair =3D pair.split('=3D'))[0]) {
        var key =3D decodeURIComponent(pair.shift());
        var value =3D pair.length > 1 ? pair.join('=3D') : pair[0];
        if (value !=3D undefined) value =3D decodeURIComponent(value);

        if (key in hash) {
          if (!Object.isArray(hash[key])) hash[key] =3D [hash[key]];
          hash[key].push(value);
        }
        else hash[key] =3D value;
      }
      return hash;
    });
  },

  toArray: function() {
    return this.split('');
  },

  succ: function() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  },

  times: function(count) {
    return count < 1 ? '' : new Array(count + 1).join(this);
  },

  camelize: function() {
    var parts =3D this.split('-'), len =3D parts.length;
    if (len =3D=3D 1) return parts[0];

    var camelized =3D this.charAt(0) =3D=3D '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i =3D 1; i < len; i++)
      camelized +=3D parts[i].charAt(0).toUpperCase() + =
parts[i].substring(1);

    return camelized;
  },

  capitalize: function() {
    return this.charAt(0).toUpperCase() + =
this.substring(1).toLowerCase();
  },

  underscore: function() {
    return this.gsub(/::/, =
'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{=
1}_#{2}').gsub(/-/,'_').toLowerCase();
  },

  dasherize: function() {
    return this.gsub(/_/,'-');
  },

  inspect: function(useDoubleQuotes) {
    var escapedString =3D this.gsub(/[\x00-\x1f\\]/, function(match) {
      var character =3D String.specialChar[match[0]];
      return character ? character : '\\u00' + =
match[0].charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') =
+ '"';
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  },

  toJSON: function() {
    return this.inspect(true);
  },

  unfilterJSON: function(filter) {
    return this.sub(filter || Prototype.JSONFilter, '#{1}');
  },

  isJSON: function() {
    var str =3D this;
    if (str.blank()) return false;
    str =3D this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
  },

  evalJSON: function(sanitize) {
    var json =3D this.unfilterJSON();
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + =
this.inspect());
  },

  include: function(pattern) {
    return this.indexOf(pattern) > -1;
  },

  startsWith: function(pattern) {
    return this.indexOf(pattern) =3D=3D=3D 0;
  },

  endsWith: function(pattern) {
    var d =3D this.length - pattern.length;
    return d >=3D 0 && this.lastIndexOf(pattern) =3D=3D=3D d;
  },

  empty: function() {
    return this =3D=3D '';
  },

  blank: function() {
    return /^\s*$/.test(this);
  },

  interpolate: function(object, pattern) {
    return new Template(this, pattern).evaluate(object);
  }
});

if (Prototype.Browser.WebKit || Prototype.Browser.IE) =
Object.extend(String.prototype, {
  escapeHTML: function() {
    return =
this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  },
  unescapeHTML: function() {
    return =
this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
  }
});

String.prototype.gsub.prepareReplacement =3D function(replacement) {
  if (Object.isFunction(replacement)) return replacement;
  var template =3D new Template(replacement);
  return function(match) { return template.evaluate(match) };
};

String.prototype.parseQuery =3D String.prototype.toQueryParams;

Object.extend(String.prototype.escapeHTML, {
  div:  document.createElement('div'),
  text: document.createTextNode('')
});

with (String.prototype.escapeHTML) div.appendChild(text);

var Template =3D Class.create({
  initialize: function(template, pattern) {
    this.template =3D template.toString();
    this.pattern =3D pattern || Template.Pattern;
  },

  evaluate: function(object) {
    if (Object.isFunction(object.toTemplateReplacements))
      object =3D object.toTemplateReplacements();

    return this.template.gsub(this.pattern, function(match) {
      if (object =3D=3D null) return '';

      var before =3D match[1] || '';
      if (before =3D=3D '\\') return match[2];

      var ctx =3D object, expr =3D match[3];
      var pattern =3D /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
      match =3D pattern.exec(expr);
      if (match =3D=3D null) return before;

      while (match !=3D null) {
        var comp =3D match[1].startsWith('[') ? match[2].gsub('\\\\]', =
']') : match[1];
        ctx =3D ctx[comp];
        if (null =3D=3D ctx || '' =3D=3D match[3]) break;
        expr =3D expr.substring('[' =3D=3D match[3] ? match[1].length : =
match[0].length);
        match =3D pattern.exec(expr);
      }

      return before + String.interpret(ctx);
    });
  }
});
Template.Pattern =3D /(^|.|\r|\n)(#\{(.*?)\})/;

var $break =3D { };

var Enumerable =3D {
  each: function(iterator, context) {
    var index =3D 0;
    iterator =3D iterator.bind(context);
    try {
      this._each(function(value) {
        iterator(value, index++);
      });
    } catch (e) {
      if (e !=3D $break) throw e;
    }
    return this;
  },

  eachSlice: function(number, iterator, context) {
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;
    var index =3D -number, slices =3D [], array =3D this.toArray();
    while ((index +=3D number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.collect(iterator, context);
  },

  all: function(iterator, context) {
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;
    var result =3D true;
    this.each(function(value, index) {
      result =3D result && !!iterator(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator, context) {
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;
    var result =3D false;
    this.each(function(value, index) {
      if (result =3D !!iterator(value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator, context) {
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;
    var results =3D [];
    this.each(function(value, index) {
      results.push(iterator(value, index));
    });
    return results;
  },

  detect: function(iterator, context) {
    iterator =3D iterator.bind(context);
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result =3D value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator, context) {
    iterator =3D iterator.bind(context);
    var results =3D [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(filter, iterator, context) {
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;
    var results =3D [];

    if (Object.isString(filter))
      filter =3D new RegExp(filter);

    this.each(function(value, index) {
      if (filter.match(value))
        results.push(iterator(value, index));
    });
    return results;
  },

  include: function(object) {
    if (Object.isFunction(this.indexOf))
      if (this.indexOf(object) !=3D -1) return true;

    var found =3D false;
    this.each(function(value) {
      if (value =3D=3D object) {
        found =3D true;
        throw $break;
      }
    });
    return found;
  },

  inGroupsOf: function(number, fillWith) {
    fillWith =3D Object.isUndefined(fillWith) ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  },

  inject: function(memo, iterator, context) {
    iterator =3D iterator.bind(context);
    this.each(function(value, index) {
      memo =3D iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args =3D $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator, context) {
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;
    var result;
    this.each(function(value, index) {
      value =3D iterator(value, index);
      if (result =3D=3D null || value >=3D result)
        result =3D value;
    });
    return result;
  },

  min: function(iterator, context) {
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;
    var result;
    this.each(function(value, index) {
      value =3D iterator(value, index);
      if (result =3D=3D null || value < result)
        result =3D value;
    });
    return result;
  },

  partition: function(iterator, context) {
    iterator =3D iterator ? iterator.bind(context) : Prototype.K;
    var trues =3D [], falses =3D [];
    this.each(function(value, index) {
      (iterator(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results =3D [];
    this.each(function(value) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator, context) {
    iterator =3D iterator.bind(context);
    var results =3D [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator, context) {
    iterator =3D iterator.bind(context);
    return this.map(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a =3D left.criteria, b =3D right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.map();
  },

  zip: function() {
    var iterator =3D Prototype.K, args =3D $A(arguments);
    if (Object.isFunction(args.last()))
      iterator =3D args.pop();

    var collections =3D [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  },

  size: function() {
    return this.toArray().length;
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
};

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  filter:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray,
  every:   Enumerable.all,
  some:    Enumerable.any
});
function $A(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) return iterable.toArray();
  var length =3D iterable.length || 0, results =3D new Array(length);
  while (length--) results[length] =3D iterable[length];
  return results;
}

if (Prototype.Browser.WebKit) {
  $A =3D function(iterable) {
    if (!iterable) return [];
    if (!(Object.isFunction(iterable) && iterable =3D=3D '[object =
NodeList]') &&
        iterable.toArray) return iterable.toArray();
    var length =3D iterable.length || 0, results =3D new Array(length);
    while (length--) results[length] =3D iterable[length];
    return results;
  };
}

Array.from =3D $A;

Object.extend(Array.prototype, Enumerable);

if (!Array.prototype._reverse) Array.prototype._reverse =3D =
Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i =3D 0, length =3D this.length; i < length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length =3D 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value !=3D null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(Object.isArray(value) ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values =3D $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  reverse: function(inline) {
    return (inline !=3D=3D false ? this : this.toArray())._reverse();
  },

  reduce: function() {
    return this.length > 1 ? this : this[0];
  },

  uniq: function(sorted) {
    return this.inject([], function(array, value, index) {
      if (0 =3D=3D index || (sorted ? array.last() !=3D value : =
!array.include(value)))
        array.push(value);
      return array;
    });
  },

  intersect: function(array) {
    return this.uniq().findAll(function(item) {
      return array.detect(function(value) { return item =3D=3D=3D value =
});
    });
  },

  clone: function() {
    return [].concat(this);
  },

  size: function() {
    return this.length;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  },

  toJSON: function() {
    var results =3D [];
    this.each(function(object) {
      var value =3D Object.toJSON(object);
      if (!Object.isUndefined(value)) results.push(value);
    });
    return '[' + results.join(', ') + ']';
  }
});

// use native browser JS 1.6 implementation if available
if (Object.isFunction(Array.prototype.forEach))
  Array.prototype._each =3D Array.prototype.forEach;

if (!Array.prototype.indexOf) Array.prototype.indexOf =3D function(item, =
i) {
  i || (i =3D 0);
  var length =3D this.length;
  if (i < 0) i =3D length + i;
  for (; i < length; i++)
    if (this[i] =3D=3D=3D item) return i;
  return -1;
};

if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf =3D =
function(item, i) {
  i =3D isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
  var n =3D this.slice(0, i).reverse().indexOf(item);
  return (n < 0) ? n : i - n - 1;
};

Array.prototype.toArray =3D Array.prototype.clone;

function $w(string) {
  if (!Object.isString(string)) return [];
  string =3D string.strip();
  return string ? string.split(/\s+/) : [];
}

if (Prototype.Browser.Opera){
  Array.prototype.concat =3D function() {
    var array =3D [];
    for (var i =3D 0, length =3D this.length; i < length; i++) =
array.push(this[i]);
    for (var i =3D 0, length =3D arguments.length; i < length; i++) {
      if (Object.isArray(arguments[i])) {
        for (var j =3D 0, arrayLength =3D arguments[i].length; j < =
arrayLength; j++)
          array.push(arguments[i][j]);
      } else {
        array.push(arguments[i]);
      }
    }
    return array;
  };
}
Object.extend(Number.prototype, {
  toColorPart: function() {
    return this.toPaddedString(2, 16);
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  },

  toPaddedString: function(length, radix) {
    var string =3D this.toString(radix || 10);
    return '0'.times(length - string.length) + string;
  },

  toJSON: function() {
    return isFinite(this) ? this.toString() : 'null';
  }
});

$w('abs round ceil floor').each(function(method){
  Number.prototype[method] =3D Math[method].methodize();
});
function $H(object) {
  return new Hash(object);
};

var Hash =3D Class.create(Enumerable, (function() {

  function toQueryPair(key, value) {
    if (Object.isUndefined(value)) return key;
    return key + '=3D' + encodeURIComponent(String.interpret(value));
  }

  return {
    initialize: function(object) {
      this._object =3D Object.isHash(object) ? object.toObject() : =
Object.clone(object);
    },

    _each: function(iterator) {
      for (var key in this._object) {
        var value =3D this._object[key], pair =3D [key, value];
        pair.key =3D key;
        pair.value =3D value;
        iterator(pair);
      }
    },

    set: function(key, value) {
      return this._object[key] =3D value;
    },

    get: function(key) {
      return this._object[key];
    },

    unset: function(key) {
      var value =3D this._object[key];
      delete this._object[key];
      return value;
    },

    toObject: function() {
      return Object.clone(this._object);
    },

    keys: function() {
      return this.pluck('key');
    },

    values: function() {
      return this.pluck('value');
    },

    index: function(value) {
      var match =3D this.detect(function(pair) {
        return pair.value =3D=3D=3D value;
      });
      return match && match.key;
    },

    merge: function(object) {
      return this.clone().update(object);
    },

    update: function(object) {
      return new Hash(object).inject(this, function(result, pair) {
        result.set(pair.key, pair.value);
        return result;
      });
    },

    toQueryString: function() {
      return this.map(function(pair) {
        var key =3D encodeURIComponent(pair.key), values =3D pair.value;

        if (values && typeof values =3D=3D 'object') {
          if (Object.isArray(values))
            return values.map(toQueryPair.curry(key)).join('&');
        }
        return toQueryPair(key, values);
      }).join('&');
    },

    inspect: function() {
      return '#<Hash:{' + this.map(function(pair) {
        return pair.map(Object.inspect).join(': ');
      }).join(', ') + '}>';
    },

    toJSON: function() {
      return Object.toJSON(this.toObject());
    },

    clone: function() {
      return new Hash(this);
    }
  }
})());

Hash.prototype.toTemplateReplacements =3D Hash.prototype.toObject;
Hash.from =3D $H;
var ObjectRange =3D Class.create(Enumerable, {
  initialize: function(start, end, exclusive) {
    this.start =3D start;
    this.end =3D end;
    this.exclusive =3D exclusive;
  },

  _each: function(iterator) {
    var value =3D this.start;
    while (this.include(value)) {
      iterator(value);
      value =3D value.succ();
    }
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <=3D this.end;
  }
});

var $R =3D function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
};

var Ajax =3D {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
};

Ajax.Responders =3D {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responder) {
    if (!this.include(responder))
      this.responders.push(responder);
  },

  unregister: function(responder) {
    this.responders =3D this.responders.without(responder);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (Object.isFunction(responder[callback])) {
        try {
          responder[callback].apply(responder, [request, transport, =
json]);
        } catch (e) { }
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate:   function() { Ajax.activeRequestCount++ },
  onComplete: function() { Ajax.activeRequestCount-- }
});

Ajax.Base =3D Class.create({
  initialize: function(options) {
    this.options =3D {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      encoding:     'UTF-8',
      parameters:   '',
      evalJSON:     true,
      evalJS:       true
    };
    Object.extend(this.options, options || { });

    this.options.method =3D this.options.method.toLowerCase();

    if (Object.isString(this.options.parameters))
      this.options.parameters =3D =
this.options.parameters.toQueryParams();
    else if (Object.isHash(this.options.parameters))
      this.options.parameters =3D this.options.parameters.toObject();
  }
});

Ajax.Request =3D Class.create(Ajax.Base, {
  _complete: false,

  initialize: function($super, url, options) {
    $super(options);
    this.transport =3D Ajax.getTransport();
    this.request(url);
  },

  request: function(url) {
    this.url =3D url;
    this.method =3D this.options.method;
    var params =3D Object.clone(this.options.parameters);

    if (!['get', 'post'].include(this.method)) {
      // simulate other verbs over post
      params['_method'] =3D this.method;
      this.method =3D 'post';
    }

    this.parameters =3D params;

    if (params =3D Object.toQueryString(params)) {
      // when GET, append parameters to URL
      if (this.method =3D=3D 'get')
        this.url +=3D (this.url.include('?') ? '&' : '?') + params;
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
        params +=3D '&_=3D';
    }

    try {
      var response =3D new Ajax.Response(this);
      if (this.options.onCreate) this.options.onCreate(response);
      Ajax.Responders.dispatch('onCreate', this, response);

      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) =
this.respondToReadyState.bind(this).defer(1);

      this.transport.onreadystatechange =3D =
this.onStateChange.bind(this);
      this.setRequestHeaders();

      this.body =3D this.method =3D=3D 'post' ? (this.options.postBody =
|| params) : null;
      this.transport.send(this.body);

      /* Force Firefox to handle ready state 4 for synchronous requests =
*/
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();

    }
    catch (e) {
      this.dispatchException(e);
    }
  },

  onStateChange: function() {
    var readyState =3D this.transport.readyState;
    if (readyState > 1 && !((readyState =3D=3D 4) && this._complete))
      this.respondToReadyState(this.transport.readyState);
  },

  setRequestHeaders: function() {
    var headers =3D {
      'X-Requested-With': 'XMLHttpRequest',
      'X-Prototype-Version': Prototype.Version,
      'Accept': 'text/javascript, text/html, application/xml, text/xml, =
*/*'
    };

    if (this.method =3D=3D 'post') {
      headers['Content-type'] =3D this.options.contentType +
        (this.options.encoding ? '; charset=3D' + this.options.encoding =
: '');

      /* Force "Connection: close" for older Mozilla browsers to work
       * around a bug where XMLHttpRequest sends an incorrect
       * Content-length header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType &&
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < =
2005)
            headers['Connection'] =3D 'close';
    }

    // user-defined headers
    if (typeof this.options.requestHeaders =3D=3D 'object') {
      var extras =3D this.options.requestHeaders;

      if (Object.isFunction(extras.push))
        for (var i =3D 0, length =3D extras.length; i < length; i +=3D =
2)
          headers[extras[i]] =3D extras[i+1];
      else
        $H(extras).each(function(pair) { headers[pair.key] =3D =
pair.value });
    }

    for (var name in headers)
      this.transport.setRequestHeader(name, headers[name]);
  },

  success: function() {
    var status =3D this.getStatus();
    return !status || (status >=3D 200 && status < 300);
  },

  getStatus: function() {
    try {
      return this.transport.status || 0;
    } catch (e) { return 0 }
  },

  respondToReadyState: function(readyState) {
    var state =3D Ajax.Request.Events[readyState], response =3D new =
Ajax.Response(this);

    if (state =3D=3D 'Complete') {
      try {
        this._complete =3D true;
        (this.options['on' + response.status]
         || this.options['on' + (this.success() ? 'Success' : =
'Failure')]
         || Prototype.emptyFunction)(response, response.headerJSON);
      } catch (e) {
        this.dispatchException(e);
      }

      var contentType =3D response.getHeader('Content-type');
      if (this.options.evalJS =3D=3D 'force'
          || (this.options.evalJS && this.isSameOrigin() && contentType
          && =
contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s=
*$/i)))
        this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(response, =
response.headerJSON);
      Ajax.Responders.dispatch('on' + state, this, response, =
response.headerJSON);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state =3D=3D 'Complete') {
      // avoid memory leak in MSIE: clean up
      this.transport.onreadystatechange =3D Prototype.emptyFunction;
    }
  },

  isSameOrigin: function() {
    var m =3D this.url.match(/^\s*https?:\/\/[^\/]*/);
    return !m || (m[0] =3D=3D =
'#{protocol}//#{domain}#{port}'.interpolate({
      protocol: location.protocol,
      domain: document.domain,
      port: location.port ? ':' + location.port : ''
    }));
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name) || null;
    } catch (e) { return null }
  },

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, =
exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Request.Events =3D
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Response =3D Class.create({
  initialize: function(request){
    this.request =3D request;
    var transport  =3D this.transport  =3D request.transport,
        readyState =3D this.readyState =3D transport.readyState;

    if((readyState > 2 && !Prototype.Browser.IE) || readyState =3D=3D 4) =
{
      this.status       =3D this.getStatus();
      this.statusText   =3D this.getStatusText();
      this.responseText =3D String.interpret(transport.responseText);
      this.headerJSON   =3D this._getHeaderJSON();
    }

    if(readyState =3D=3D 4) {
      var xml =3D transport.responseXML;
      this.responseXML  =3D Object.isUndefined(xml) ? null : xml;
      this.responseJSON =3D this._getResponseJSON();
    }
  },

  status:      0,
  statusText: '',

  getStatus: Ajax.Request.prototype.getStatus,

  getStatusText: function() {
    try {
      return this.transport.statusText || '';
    } catch (e) { return '' }
  },

  getHeader: Ajax.Request.prototype.getHeader,

  getAllHeaders: function() {
    try {
      return this.getAllResponseHeaders();
    } catch (e) { return null }
  },

  getResponseHeader: function(name) {
    return this.transport.getResponseHeader(name);
  },

  getAllResponseHeaders: function() {
    return this.transport.getAllResponseHeaders();
  },

  _getHeaderJSON: function() {
    var json =3D this.getHeader('X-JSON');
    if (!json) return null;
    json =3D decodeURIComponent(escape(json));
    try {
      return json.evalJSON(this.request.options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  },

  _getResponseJSON: function() {
    var options =3D this.request.options;
    if (!options.evalJSON || (options.evalJSON !=3D 'force' &&
      !(this.getHeader('Content-type') || =
'').include('application/json')) ||
        this.responseText.blank())
          return null;
    try {
      return this.responseText.evalJSON(options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  }
});

Ajax.Updater =3D Class.create(Ajax.Request, {
  initialize: function($super, container, url, options) {
    this.container =3D {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : =
container))
    };

    options =3D Object.clone(options);
    var onComplete =3D options.onComplete;
    options.onComplete =3D (function(response, json) {
      this.updateContent(response.responseText);
      if (Object.isFunction(onComplete)) onComplete(response, json);
    }).bind(this);

    $super(url, options);
  },

  updateContent: function(responseText) {
    var receiver =3D this.container[this.success() ? 'success' : =
'failure'],
        options =3D this.options;

    if (!options.evalScripts) responseText =3D =
responseText.stripScripts();

    if (receiver =3D $(receiver)) {
      if (options.insertion) {
        if (Object.isString(options.insertion)) {
          var insertion =3D { }; insertion[options.insertion] =3D =
responseText;
          receiver.insert(insertion);
        }
        else options.insertion(receiver, responseText);
      }
      else receiver.update(responseText);
    }
  }
});

Ajax.PeriodicalUpdater =3D Class.create(Ajax.Base, {
  initialize: function($super, container, url, options) {
    $super(options);
    this.onComplete =3D this.options.onComplete;

    this.frequency =3D (this.options.frequency || 2);
    this.decay =3D (this.options.decay || 1);

    this.updater =3D { };
    this.container =3D container;
    this.url =3D url;

    this.start();
  },

  start: function() {
    this.options.onComplete =3D this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete =3D undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(response) {
    if (this.options.decay) {
      this.decay =3D (response.responseText =3D=3D this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText =3D response.responseText;
    }
    this.timer =3D this.onTimerEvent.bind(this).delay(this.decay * =
this.frequency);
  },

  onTimerEvent: function() {
    this.updater =3D new Ajax.Updater(this.container, this.url, =
this.options);
  }
});
function $(element) {
  if (arguments.length > 1) {
    for (var i =3D 0, elements =3D [], length =3D arguments.length; i < =
length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element =3D document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath =3D function(expression, parentElement) {
    var results =3D [];
    var query =3D document.evaluate(expression, $(parentElement) || =
document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i =3D 0, length =3D query.snapshotLength; i < length; i++)
      results.push(Element.extend(query.snapshotItem(i)));
    return results;
  };
}

/*-----------------------------------------------------------------------=
---*/

if (!window.Node) var Node =3D { };

if (!Node.ELEMENT_NODE) {
  // DOM level 2 ECMAScript Language Binding
  Object.extend(Node, {
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3,
    CDATA_SECTION_NODE: 4,
    ENTITY_REFERENCE_NODE: 5,
    ENTITY_NODE: 6,
    PROCESSING_INSTRUCTION_NODE: 7,
    COMMENT_NODE: 8,
    DOCUMENT_NODE: 9,
    DOCUMENT_TYPE_NODE: 10,
    DOCUMENT_FRAGMENT_NODE: 11,
    NOTATION_NODE: 12
  });
}

(function() {
  var element =3D this.Element;
  this.Element =3D function(tagName, attributes) {
    attributes =3D attributes || { };
    tagName =3D tagName.toLowerCase();
    var cache =3D Element.cache;
    if (Prototype.Browser.IE && attributes.name) {
      tagName =3D '<' + tagName + ' name=3D"' + attributes.name + '">';
      delete attributes.name;
      return Element.writeAttribute(document.createElement(tagName), =
attributes);
    }
    if (!cache[tagName]) cache[tagName] =3D =
Element.extend(document.createElement(tagName));
    return Element.writeAttribute(cache[tagName].cloneNode(false), =
attributes);
  };
  Object.extend(this.Element, element || { });
}).call(window);

Element.cache =3D { };

Element.Methods =3D {
  visible: function(element) {
    return $(element).style.display !=3D 'none';
  },

  toggle: function(element) {
    element =3D $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },

  hide: function(element) {
    $(element).style.display =3D 'none';
    return element;
  },

  show: function(element) {
    $(element).style.display =3D '';
    return element;
  },

  remove: function(element) {
    element =3D $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: function(element, content) {
    element =3D $(element);
    if (content && content.toElement) content =3D content.toElement();
    if (Object.isElement(content)) return =
element.update().insert(content);
    content =3D Object.toHTML(content);
    element.innerHTML =3D content.stripScripts();
    content.evalScripts.bind(content).defer();
    return element;
  },

  replace: function(element, content) {
    element =3D $(element);
    if (content && content.toElement) content =3D content.toElement();
    else if (!Object.isElement(content)) {
      content =3D Object.toHTML(content);
      var range =3D element.ownerDocument.createRange();
      range.selectNode(element);
      content.evalScripts.bind(content).defer();
      content =3D =
range.createContextualFragment(content.stripScripts());
    }
    element.parentNode.replaceChild(content, element);
    return element;
  },

  insert: function(element, insertions) {
    element =3D $(element);

    if (Object.isString(insertions) || Object.isNumber(insertions) ||
        Object.isElement(insertions) || (insertions && =
(insertions.toElement || insertions.toHTML)))
          insertions =3D {bottom:insertions};

    var content, insert, tagName, childNodes;

    for (var position in insertions) {
      content  =3D insertions[position];
      position =3D position.toLowerCase();
      insert =3D Element._insertionTranslations[position];

      if (content && content.toElement) content =3D content.toElement();
      if (Object.isElement(content)) {
        insert(element, content);
        continue;
      }

      content =3D Object.toHTML(content);

      tagName =3D ((position =3D=3D 'before' || position =3D=3D 'after')
        ? element.parentNode : element).tagName.toUpperCase();

      childNodes =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());

      if (position =3D=3D 'top' || position =3D=3D 'after') =
childNodes.reverse();
      childNodes.each(insert.curry(element));

      content.evalScripts.bind(content).defer();
    }

    return element;
  },

  wrap: function(element, wrapper, attributes) {
    element =3D $(element);
    if (Object.isElement(wrapper))
      $(wrapper).writeAttribute(attributes || { });
    else if (Object.isString(wrapper)) wrapper =3D new Element(wrapper, =
attributes);
    else wrapper =3D new Element('div', wrapper);
    if (element.parentNode)
      element.parentNode.replaceChild(wrapper, element);
    wrapper.appendChild(element);
    return wrapper;
  },

  inspect: function(element) {
    element =3D $(element);
    var result =3D '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property =3D pair.first(), attribute =3D pair.last();
      var value =3D (element[property] || '').toString();
      if (value) result +=3D ' ' + attribute + '=3D' + =
value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property) {
    element =3D $(element);
    var elements =3D [];
    while (element =3D element[property])
      if (element.nodeType =3D=3D 1)
        elements.push(Element.extend(element));
    return elements;
  },

  ancestors: function(element) {
    return $(element).recursivelyCollect('parentNode');
  },

  descendants: function(element) {
    return $(element).select("*");
  },

  firstDescendant: function(element) {
    element =3D $(element).firstChild;
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;
    return $(element);
  },

  immediateDescendants: function(element) {
    if (!(element =3D $(element).firstChild)) return [];
    while (element && element.nodeType !=3D 1) element =3D =
element.nextSibling;
    if (element) return [element].concat($(element).nextSiblings());
    return [];
  },

  previousSiblings: function(element) {
    return $(element).recursivelyCollect('previousSibling');
  },

  nextSiblings: function(element) {
    return $(element).recursivelyCollect('nextSibling');
  },

  siblings: function(element) {
    element =3D $(element);
    return =
element.previousSiblings().reverse().concat(element.nextSiblings());
  },

  match: function(element, selector) {
    if (Object.isString(selector))
      selector =3D new Selector(selector);
    return selector.match($(element));
  },

  up: function(element, expression, index) {
    element =3D $(element);
    if (arguments.length =3D=3D 1) return $(element.parentNode);
    var ancestors =3D element.ancestors();
    return Object.isNumber(expression) ? ancestors[expression] :
      Selector.findElement(ancestors, expression, index);
  },

  down: function(element, expression, index) {
    element =3D $(element);
    if (arguments.length =3D=3D 1) return element.firstDescendant();
    return Object.isNumber(expression) ? =
element.descendants()[expression] :
      element.select(expression)[index || 0];
  },

  previous: function(element, expression, index) {
    element =3D $(element);
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.previousElementSibling(element));
    var previousSiblings =3D element.previousSiblings();
    return Object.isNumber(expression) ? previousSiblings[expression] :
      Selector.findElement(previousSiblings, expression, index);
  },

  next: function(element, expression, index) {
    element =3D $(element);
    if (arguments.length =3D=3D 1) return =
$(Selector.handlers.nextElementSibling(element));
    var nextSiblings =3D element.nextSiblings();
    return Object.isNumber(expression) ? nextSiblings[expression] :
      Selector.findElement(nextSiblings, expression, index);
  },

  select: function() {
    var args =3D $A(arguments), element =3D $(args.shift());
    return Selector.findChildElements(element, args);
  },

  adjacent: function() {
    var args =3D $A(arguments), element =3D $(args.shift());
    return Selector.findChildElements(element.parentNode, =
args).without(element);
  },

  identify: function(element) {
    element =3D $(element);
    var id =3D element.readAttribute('id'), self =3D arguments.callee;
    if (id) return id;
    do { id =3D 'anonymous_element_' + self.counter++ } while ($(id));
    element.writeAttribute('id', id);
    return id;
  },

  readAttribute: function(element, name) {
    element =3D $(element);
    if (Prototype.Browser.IE) {
      var t =3D Element._attributeTranslations.read;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name]) name =3D t.names[name];
      if (name.include(':')) {
        return (!element.attributes || !element.attributes[name]) ? null =
:
         element.attributes[name].value;
      }
    }
    return element.getAttribute(name);
  },

  writeAttribute: function(element, name, value) {
    element =3D $(element);
    var attributes =3D { }, t =3D Element._attributeTranslations.write;

    if (typeof name =3D=3D 'object') attributes =3D name;
    else attributes[name] =3D Object.isUndefined(value) ? true : value;

    for (var attr in attributes) {
      name =3D t.names[attr] || attr;
      value =3D attributes[attr];
      if (t.values[attr]) name =3D t.values[attr](element, value);
      if (value =3D=3D=3D false || value =3D=3D=3D null)
        element.removeAttribute(name);
      else if (value =3D=3D=3D true)
        element.setAttribute(name, name);
      else element.setAttribute(name, value);
    }
    return element;
  },

  getHeight: function(element) {
    return $(element).getDimensions().height;
  },

  getWidth: function(element) {
    return $(element).getDimensions().width;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element =3D $(element))) return;
    var elementClassName =3D element.className;
    return (elementClassName.length > 0 && (elementClassName =3D=3D =
className ||
      new RegExp("(^|\\s)" + className + =
"(\\s|$)").test(elementClassName)));
  },

  addClassName: function(element, className) {
    if (!(element =3D $(element))) return;
    if (!element.hasClassName(className))
      element.className +=3D (element.className ? ' ' : '') + className;
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element =3D $(element))) return;
    element.className =3D element.className.replace(
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
    return element;
  },

  toggleClassName: function(element, className) {
    if (!(element =3D $(element))) return;
    return element[element.hasClassName(className) ?
      'removeClassName' : 'addClassName'](className);
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element =3D $(element);
    var node =3D element.firstChild;
    while (node) {
      var nextNode =3D node.nextSibling;
      if (node.nodeType =3D=3D 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node =3D nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.blank();
  },

  descendantOf: function(element, ancestor) {
    element =3D $(element), ancestor =3D $(ancestor);
    var originalAncestor =3D ancestor;

    if (element.compareDocumentPosition)
      return (element.compareDocumentPosition(ancestor) & 8) =3D=3D=3D =
8;

    if (element.sourceIndex && !Prototype.Browser.Opera) {
      var e =3D element.sourceIndex, a =3D ancestor.sourceIndex,
       nextAncestor =3D ancestor.nextSibling;
      if (!nextAncestor) {
        do { ancestor =3D ancestor.parentNode; }
        while (!(nextAncestor =3D ancestor.nextSibling) && =
ancestor.parentNode);
      }
      if (nextAncestor && nextAncestor.sourceIndex)
       return (e > a && e < nextAncestor.sourceIndex);
    }

    while (element =3D element.parentNode)
      if (element =3D=3D originalAncestor) return true;
    return false;
  },

  scrollTo: function(element) {
    element =3D $(element);
    var pos =3D element.cumulativeOffset();
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element =3D $(element);
    style =3D style =3D=3D 'float' ? 'cssFloat' : style.camelize();
    var value =3D element.style[style];
    if (!value) {
      var css =3D document.defaultView.getComputedStyle(element, null);
      value =3D css ? css[style] : null;
    }
    if (style =3D=3D 'opacity') return value ? parseFloat(value) : 1.0;
    return value =3D=3D 'auto' ? null : value;
  },

  getOpacity: function(element) {
    return $(element).getStyle('opacity');
  },

  setStyle: function(element, styles) {
    element =3D $(element);
    var elementStyle =3D element.style, match;
    if (Object.isString(styles)) {
      element.style.cssText +=3D ';' + styles;
      return styles.include('opacity') ?
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : =
element;
    }
    for (var property in styles)
      if (property =3D=3D 'opacity') =
element.setOpacity(styles[property]);
      else
        elementStyle[(property =3D=3D 'float' || property =3D=3D =
'cssFloat') ?
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : =
'styleFloat') :
            property] =3D styles[property];

    return element;
  },

  setOpacity: function(element, value) {
    element =3D $(element);
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :
      (value < 0.00001) ? 0 : value;
    return element;
  },

  getDimensions: function(element) {
    element =3D $(element);
    var display =3D $(element).getStyle('display');
    if (display !=3D 'none' && display !=3D null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display =
none,
    // so enable the element temporarily
    var els =3D element.style;
    var originalVisibility =3D els.visibility;
    var originalPosition =3D els.position;
    var originalDisplay =3D els.display;
    els.visibility =3D 'hidden';
    els.position =3D 'absolute';
    els.display =3D 'block';
    var originalWidth =3D element.clientWidth;
    var originalHeight =3D element.clientHeight;
    els.display =3D originalDisplay;
    els.position =3D originalPosition;
    els.visibility =3D originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element =3D $(element);
    var pos =3D Element.getStyle(element, 'position');
    if (pos =3D=3D 'static' || !pos) {
      element._madePositioned =3D true;
      element.style.position =3D 'relative';
      // Opera returns the offset relative to the positioning context, =
when an
      // element is position relative but top and left have not been =
defined
      if (window.opera) {
        element.style.top =3D 0;
        element.style.left =3D 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element =3D $(element);
    if (element._madePositioned) {
      element._madePositioned =3D undefined;
      element.style.position =3D
        element.style.top =3D
        element.style.left =3D
        element.style.bottom =3D
        element.style.right =3D '';
    }
    return element;
  },

  makeClipping: function(element) {
    element =3D $(element);
    if (element._overflow) return element;
    element._overflow =3D Element.getStyle(element, 'overflow') || =
'auto';
    if (element._overflow !=3D=3D 'hidden')
      element.style.overflow =3D 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element =3D $(element);
    if (!element._overflow) return element;
    element.style.overflow =3D element._overflow =3D=3D 'auto' ? '' : =
element._overflow;
    element._overflow =3D null;
    return element;
  },

  cumulativeOffset: function(element) {
    var valueT =3D 0, valueL =3D 0;
    do {
      valueT +=3D element.offsetTop  || 0;
      valueL +=3D element.offsetLeft || 0;
      element =3D element.offsetParent;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  positionedOffset: function(element) {
    var valueT =3D 0, valueL =3D 0;
    do {
      valueT +=3D element.offsetTop  || 0;
      valueL +=3D element.offsetLeft || 0;
      element =3D element.offsetParent;
      if (element) {
        if (element.tagName =3D=3D 'BODY') break;
        var p =3D Element.getStyle(element, 'position');
        if (p !=3D=3D 'static') break;
      }
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  absolutize: function(element) {
    element =3D $(element);
    if (element.getStyle('position') =3D=3D 'absolute') return;
    // Position.prepare(); // To be done manually by Scripty when it =
needs it.

    var offsets =3D element.positionedOffset();
    var top     =3D offsets[1];
    var left    =3D offsets[0];
    var width   =3D element.clientWidth;
    var height  =3D element.clientHeight;

    element._originalLeft   =3D left - parseFloat(element.style.left  || =
0);
    element._originalTop    =3D top  - parseFloat(element.style.top || =
0);
    element._originalWidth  =3D element.style.width;
    element._originalHeight =3D element.style.height;

    element.style.position =3D 'absolute';
    element.style.top    =3D top + 'px';
    element.style.left   =3D left + 'px';
    element.style.width  =3D width + 'px';
    element.style.height =3D height + 'px';
    return element;
  },

  relativize: function(element) {
    element =3D $(element);
    if (element.getStyle('position') =3D=3D 'relative') return;
    // Position.prepare(); // To be done manually by Scripty when it =
needs it.

    element.style.position =3D 'relative';
    var top  =3D parseFloat(element.style.top  || 0) - =
(element._originalTop || 0);
    var left =3D parseFloat(element.style.left || 0) - =
(element._originalLeft || 0);

    element.style.top    =3D top + 'px';
    element.style.left   =3D left + 'px';
    element.style.height =3D element._originalHeight;
    element.style.width  =3D element._originalWidth;
    return element;
  },

  cumulativeScrollOffset: function(element) {
    var valueT =3D 0, valueL =3D 0;
    do {
      valueT +=3D element.scrollTop  || 0;
      valueL +=3D element.scrollLeft || 0;
      element =3D element.parentNode;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  getOffsetParent: function(element) {
    if (element.offsetParent) return $(element.offsetParent);
    if (element =3D=3D document.body) return $(element);

    while ((element =3D element.parentNode) && element !=3D =
document.body)
      if (Element.getStyle(element, 'position') !=3D 'static')
        return $(element);

    return $(document.body);
  },

  viewportOffset: function(forElement) {
    var valueT =3D 0, valueL =3D 0;

    var element =3D forElement;
    do {
      valueT +=3D element.offsetTop  || 0;
      valueL +=3D element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent =3D=3D document.body &&
        Element.getStyle(element, 'position') =3D=3D 'absolute') break;

    } while (element =3D element.offsetParent);

    element =3D forElement;
    do {
      if (!Prototype.Browser.Opera || element.tagName =3D=3D 'BODY') {
        valueT -=3D element.scrollTop  || 0;
        valueL -=3D element.scrollLeft || 0;
      }
    } while (element =3D element.parentNode);

    return Element._returnOffset(valueL, valueT);
  },

  clonePosition: function(element, source) {
    var options =3D Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || { });

    // find page position of source
    source =3D $(source);
    var p =3D source.viewportOffset();

    // find coordinate system to use
    element =3D $(element);
    var delta =3D [0, 0];
    var parent =3D null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(element, 'position') =3D=3D 'absolute') {
      parent =3D element.getOffsetParent();
      delta =3D parent.viewportOffset();
    }

    // correct by body offsets (fixes Safari)
    if (parent =3D=3D document.body) {
      delta[0] -=3D document.body.offsetLeft;
      delta[1] -=3D document.body.offsetTop;
    }

    // set position
    if (options.setLeft)   element.style.left  =3D (p[0] - delta[0] + =
options.offsetLeft) + 'px';
    if (options.setTop)    element.style.top   =3D (p[1] - delta[1] + =
options.offsetTop) + 'px';
    if (options.setWidth)  element.style.width =3D source.offsetWidth + =
'px';
    if (options.setHeight) element.style.height =3D source.offsetHeight =
+ 'px';
    return element;
  }
};

Element.Methods.identify.counter =3D 1;

Object.extend(Element.Methods, {
  getElementsBySelector: Element.Methods.select,
  childElements: Element.Methods.immediateDescendants
});

Element._attributeTranslations =3D {
  write: {
    names: {
      className: 'class',
      htmlFor:   'for'
    },
    values: { }
  }
};

if (Prototype.Browser.Opera) {
  Element.Methods.getStyle =3D Element.Methods.getStyle.wrap(
    function(proceed, element, style) {
      switch (style) {
        case 'left': case 'top': case 'right': case 'bottom':
          if (proceed(element, 'position') =3D=3D=3D 'static') return =
null;
        case 'height': case 'width':
          // returns '0px' for hidden elements; we want it to return =
null
          if (!Element.visible(element)) return null;

          // returns the border-box dimensions rather than the =
content-box
          // dimensions, so we subtract padding and borders from the =
value
          var dim =3D parseInt(proceed(element, style), 10);

          if (dim !=3D=3D element['offset' + style.capitalize()])
            return dim + 'px';

          var properties;
          if (style =3D=3D=3D 'height') {
            properties =3D ['border-top-width', 'padding-top',
             'padding-bottom', 'border-bottom-width'];
          }
          else {
            properties =3D ['border-left-width', 'padding-left',
             'padding-right', 'border-right-width'];
          }
          return properties.inject(dim, function(memo, property) {
            var val =3D proceed(element, property);
            return val =3D=3D=3D null ? memo : memo - parseInt(val, 10);
          }) + 'px';
        default: return proceed(element, style);
      }
    }
  );

  Element.Methods.readAttribute =3D Element.Methods.readAttribute.wrap(
    function(proceed, element, attribute) {
      if (attribute =3D=3D=3D 'title') return element.title;
      return proceed(element, attribute);
    }
  );
}

else if (Prototype.Browser.IE) {
  // IE doesn't report offsets correctly for static elements, so we =
change them
  // to "relative" to get the values, then change them back.
  Element.Methods.getOffsetParent =3D =
Element.Methods.getOffsetParent.wrap(
    function(proceed, element) {
      element =3D $(element);
      var position =3D element.getStyle('position');
      if (position !=3D=3D 'static') return proceed(element);
      element.setStyle({ position: 'relative' });
      var value =3D proceed(element);
      element.setStyle({ position: position });
      return value;
    }
  );

  $w('positionedOffset viewportOffset').each(function(method) {
    Element.Methods[method] =3D Element.Methods[method].wrap(
      function(proceed, element) {
        element =3D $(element);
        var position =3D element.getStyle('position');
        if (position !=3D=3D 'static') return proceed(element);
        // Trigger hasLayout on the offset parent so that IE6 reports
        // accurate offsetTop and offsetLeft values for position: fixed.
        var offsetParent =3D element.getOffsetParent();
        if (offsetParent && offsetParent.getStyle('position') =3D=3D=3D =
'fixed')
          offsetParent.setStyle({ zoom: 1 });
        element.setStyle({ position: 'relative' });
        var value =3D proceed(element);
        element.setStyle({ position: position });
        return value;
      }
    );
  });

  Element.Methods.getStyle =3D function(element, style) {
    element =3D $(element);
    style =3D (style =3D=3D 'float' || style =3D=3D 'cssFloat') ? =
'styleFloat' : style.camelize();
    var value =3D element.style[style];
    if (!value && element.currentStyle) value =3D =
element.currentStyle[style];

    if (style =3D=3D 'opacity') {
      if (value =3D (element.getStyle('filter') || =
'').match(/alpha\(opacity=3D(.*)\)/))
        if (value[1]) return parseFloat(value[1]) / 100;
      return 1.0;
    }

    if (value =3D=3D 'auto') {
      if ((style =3D=3D 'width' || style =3D=3D 'height') && =
(element.getStyle('display') !=3D 'none'))
        return element['offset' + style.capitalize()] + 'px';
      return null;
    }
    return value;
  };

  Element.Methods.setOpacity =3D function(element, value) {
    function stripAlpha(filter){
      return filter.replace(/alpha\([^\)]*\)/gi,'');
    }
    element =3D $(element);
    var currentStyle =3D element.currentStyle;
    if ((currentStyle && !currentStyle.hasLayout) ||
      (!currentStyle && element.style.zoom =3D=3D 'normal'))
        element.style.zoom =3D 1;

    var filter =3D element.getStyle('filter'), style =3D element.style;
    if (value =3D=3D 1 || value =3D=3D=3D '') {
      (filter =3D stripAlpha(filter)) ?
        style.filter =3D filter : style.removeAttribute('filter');
      return element;
    } else if (value < 0.00001) value =3D 0;
    style.filter =3D stripAlpha(filter) +
      'alpha(opacity=3D' + (value * 100) + ')';
    return element;
  };

  Element._attributeTranslations =3D {
    read: {
      names: {
        'class': 'className',
        'for':   'htmlFor'
      },
      values: {
        _getAttr: function(element, attribute) {
          return element.getAttribute(attribute, 2);
        },
        _getAttrNode: function(element, attribute) {
          var node =3D element.getAttributeNode(attribute);
          return node ? node.value : "";
        },
        _getEv: function(element, attribute) {
          attribute =3D element.getAttribute(attribute);
          return attribute ? attribute.toString().slice(23, -2) : null;
        },
        _flag: function(element, attribute) {
          return $(element).hasAttribute(attribute) ? attribute : null;
        },
        style: function(element) {
          return element.style.cssText.toLowerCase();
        },
        title: function(element) {
          return element.title;
        }
      }
    }
  };

  Element._attributeTranslations.write =3D {
    names: Object.extend({
      cellpadding: 'cellPadding',
      cellspacing: 'cellSpacing'
    }, Element._attributeTranslations.read.names),
    values: {
      checked: function(element, value) {
        element.checked =3D !!value;
      },

      style: function(element, value) {
        element.style.cssText =3D value ? value : '';
      }
    }
  };

  Element._attributeTranslations.has =3D {};

  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
      'encType maxLength readOnly longDesc').each(function(attr) {
    Element._attributeTranslations.write.names[attr.toLowerCase()] =3D =
attr;
    Element._attributeTranslations.has[attr.toLowerCase()] =3D attr;
  });

  (function(v) {
    Object.extend(v, {
      href:        v._getAttr,
      src:         v._getAttr,
      type:        v._getAttr,
      action:      v._getAttrNode,
      disabled:    v._flag,
      checked:     v._flag,
      readonly:    v._flag,
      multiple:    v._flag,
      onload:      v._getEv,
      onunload:    v._getEv,
      onclick:     v._getEv,
      ondblclick:  v._getEv,
      onmousedown: v._getEv,
      onmouseup:   v._getEv,
      onmouseover: v._getEv,
      onmousemove: v._getEv,
      onmouseout:  v._getEv,
      onfocus:     v._getEv,
      onblur:      v._getEv,
      onkeypress:  v._getEv,
      onkeydown:   v._getEv,
      onkeyup:     v._getEv,
      onsubmit:    v._getEv,
      onreset:     v._getEv,
      onselect:    v._getEv,
      onchange:    v._getEv
    });
  })(Element._attributeTranslations.read.values);
}

else if (Prototype.Browser.Gecko && =
/rv:1\.8\.0/.test(navigator.userAgent)) {
  Element.Methods.setOpacity =3D function(element, value) {
    element =3D $(element);
    element.style.opacity =3D (value =3D=3D 1) ? 0.999999 :
      (value =3D=3D=3D '') ? '' : (value < 0.00001) ? 0 : value;
    return element;
  };
}

else if (Prototype.Browser.WebKit) {
  Element.Methods.setOpacity =3D function(element, value) {
    element =3D $(element);
    element.style.opacity =3D (value =3D=3D 1 || value =3D=3D=3D '') ? =
'' :
      (value < 0.00001) ? 0 : value;

    if (value =3D=3D 1)
      if(element.tagName =3D=3D 'IMG' && element.width) {
        element.width++; element.width--;
      } else try {
        var n =3D document.createTextNode(' ');
        element.appendChild(n);
        element.removeChild(n);
      } catch (e) { }

    return element;
  };

  // Safari returns margins on body which is incorrect if the child is =
absolutely
  // positioned.  For performance reasons, redefine =
Element#cumulativeOffset for
  // KHTML/WebKit only.
  Element.Methods.cumulativeOffset =3D function(element) {
    var valueT =3D 0, valueL =3D 0;
    do {
      valueT +=3D element.offsetTop  || 0;
      valueL +=3D element.offsetLeft || 0;
      if (element.offsetParent =3D=3D document.body)
        if (Element.getStyle(element, 'position') =3D=3D 'absolute') =
break;

      element =3D element.offsetParent;
    } while (element);

    return Element._returnOffset(valueL, valueT);
  };
}

if (Prototype.Browser.IE || Prototype.Browser.Opera) {
  // IE and Opera are missing .innerHTML support for TABLE-related and =
SELECT elements
  Element.Methods.update =3D function(element, content) {
    element =3D $(element);

    if (content && content.toElement) content =3D content.toElement();
    if (Object.isElement(content)) return =
element.update().insert(content);

    content =3D Object.toHTML(content);
    var tagName =3D element.tagName.toUpperCase();

    if (tagName in Element._insertionTranslations.tags) {
      $A(element.childNodes).each(function(node) { =
element.removeChild(node) });
      Element._getContentFromAnonymousElement(tagName, =
content.stripScripts())
        .each(function(node) { element.appendChild(node) });
    }
    else element.innerHTML =3D content.stripScripts();

    content.evalScripts.bind(content).defer();
    return element;
  };
}

if ('outerHTML' in document.createElement('div')) {
  Element.Methods.replace =3D function(element, content) {
    element =3D $(element);

    if (content && content.toElement) content =3D content.toElement();
    if (Object.isElement(content)) {
      element.parentNode.replaceChild(content, element);
      return element;
    }

    content =3D Object.toHTML(content);
    var parent =3D element.parentNode, tagName =3D =
parent.tagName.toUpperCase();

    if (Element._insertionTranslations.tags[tagName]) {
      var nextSibling =3D element.next();
      var fragments =3D Element._getContentFromAnonymousElement(tagName, =
content.stripScripts());
      parent.removeChild(element);
      if (nextSibling)
        fragments.each(function(node) { parent.insertBefore(node, =
nextSibling) });
      else
        fragments.each(function(node) { parent.appendChild(node) });
    }
    else element.outerHTML =3D content.stripScripts();

    content.evalScripts.bind(content).defer();
    return element;
  };
}

Element._returnOffset =3D function(l, t) {
  var result =3D [l, t];
  result.left =3D l;
  result.top =3D t;
  return result;
};

Element._getContentFromAnonymousElement =3D function(tagName, html) {
  var div =3D new Element('div'), t =3D =
Element._insertionTranslations.tags[tagName];
  if (t) {
    div.innerHTML =3D t[0] + html + t[1];
    t[2].times(function() { div =3D div.firstChild });
  } else div.innerHTML =3D html;
  return $A(div.childNodes);
};

Element._insertionTranslations =3D {
  before: function(element, node) {
    element.parentNode.insertBefore(node, element);
  },
  top: function(element, node) {
    element.insertBefore(node, element.firstChild);
  },
  bottom: function(element, node) {
    element.appendChild(node);
  },
  after: function(element, node) {
    element.parentNode.insertBefore(node, element.nextSibling);
  },
  tags: {
    TABLE:  ['<table>',                '</table>',                   1],
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
    SELECT: ['<select>',               '</select>',                  1]
  }
};

(function() {
  Object.extend(this.tags, {
    THEAD: this.tags.TBODY,
    TFOOT: this.tags.TBODY,
    TH:    this.tags.TD
  });
}).call(Element._insertionTranslations);

Element.Methods.Simulated =3D {
  hasAttribute: function(element, attribute) {
    attribute =3D Element._attributeTranslations.has[attribute] || =
attribute;
    var node =3D $(element).getAttributeNode(attribute);
    return node && node.specified;
  }
};

Element.Methods.ByTag =3D { };

Object.extend(Element, Element.Methods);

if (!Prototype.BrowserFeatures.ElementExtensions &&
    document.createElement('div').__proto__) {
  window.HTMLElement =3D { };
  window.HTMLElement.prototype =3D =
document.createElement('div').__proto__;
  Prototype.BrowserFeatures.ElementExtensions =3D true;
}

Element.extend =3D (function() {
  if (Prototype.BrowserFeatures.SpecificElementExtensions)
    return Prototype.K;

  var Methods =3D { }, ByTag =3D Element.Methods.ByTag;

  var extend =3D Object.extend(function(element) {
    if (!element || element._extendedByPrototype ||
        element.nodeType !=3D 1 || element =3D=3D window) return =
element;

    var methods =3D Object.clone(Methods),
      tagName =3D element.tagName, property, value;

    // extend methods for specific tags
    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);

    for (property in methods) {
      value =3D methods[property];
      if (Object.isFunction(value) && !(property in element))
        element[property] =3D value.methodize();
    }

    element._extendedByPrototype =3D Prototype.emptyFunction;
    return element;

  }, {
    refresh: function() {
      // extend methods for all tags (Safari doesn't need this)
      if (!Prototype.BrowserFeatures.ElementExtensions) {
        Object.extend(Methods, Element.Methods);
        Object.extend(Methods, Element.Methods.Simulated);
      }
    }
  });

  extend.refresh();
  return extend;
})();

Element.hasAttribute =3D function(element, attribute) {
  if (element.hasAttribute) return element.hasAttribute(attribute);
  return Element.Methods.Simulated.hasAttribute(element, attribute);
};

Element.addMethods =3D function(methods) {
  var F =3D Prototype.BrowserFeatures, T =3D Element.Methods.ByTag;

  if (!methods) {
    Object.extend(Form, Form.Methods);
    Object.extend(Form.Element, Form.Element.Methods);
    Object.extend(Element.Methods.ByTag, {
      "FORM":     Object.clone(Form.Methods),
      "INPUT":    Object.clone(Form.Element.Methods),
      "SELECT":   Object.clone(Form.Element.Methods),
      "TEXTAREA": Object.clone(Form.Element.Methods)
    });
  }

  if (arguments.length =3D=3D 2) {
    var tagName =3D methods;
    methods =3D arguments[1];
  }

  if (!tagName) Object.extend(Element.Methods, methods || { });
  else {
    if (Object.isArray(tagName)) tagName.each(extend);
    else extend(tagName);
  }

  function extend(tagName) {
    tagName =3D tagName.toUpperCase();
    if (!Element.Methods.ByTag[tagName])
      Element.Methods.ByTag[tagName] =3D { };
    Object.extend(Element.Methods.ByTag[tagName], methods);
  }

  function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent =3D onlyIfAbsent || false;
    for (var property in methods) {
      var value =3D methods[property];
      if (!Object.isFunction(value)) continue;
      if (!onlyIfAbsent || !(property in destination))
        destination[property] =3D value.methodize();
    }
  }

  function findDOMClass(tagName) {
    var klass;
    var trans =3D {
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": =
"DList",
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": =
"Heading",
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", =
"CAPTION":
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", =
"THEAD":
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", =
"TR":
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
      "FrameSet", "IFRAME": "IFrame"
    };
    if (trans[tagName]) klass =3D 'HTML' + trans[tagName] + 'Element';
    if (window[klass]) return window[klass];
    klass =3D 'HTML' + tagName + 'Element';
    if (window[klass]) return window[klass];
    klass =3D 'HTML' + tagName.capitalize() + 'Element';
    if (window[klass]) return window[klass];

    window[klass] =3D { };
    window[klass].prototype =3D =
document.createElement(tagName).__proto__;
    return window[klass];
  }

  if (F.ElementExtensions) {
    copy(Element.Methods, HTMLElement.prototype);
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
  }

  if (F.SpecificElementExtensions) {
    for (var tag in Element.Methods.ByTag) {
      var klass =3D findDOMClass(tag);
      if (Object.isUndefined(klass)) continue;
      copy(T[tag], klass.prototype);
    }
  }

  Object.extend(Element, Element.Methods);
  delete Element.ByTag;

  if (Element.extend.refresh) Element.extend.refresh();
  Element.cache =3D { };
};

document.viewport =3D {
  getDimensions: function() {
    var dimensions =3D { };
    var B =3D Prototype.Browser;
    $w('width height').each(function(d) {
      var D =3D d.capitalize();
      dimensions[d] =3D (B.WebKit && !document.evaluate) ? self['inner' =
+ D] :
        (B.Opera) ? document.body['client' + D] : =
document.documentElement['client' + D];
    });
    return dimensions;
  },

  getWidth: function() {
    return this.getDimensions().width;
  },

  getHeight: function() {
    return this.getDimensions().height;
  },

  getScrollOffsets: function() {
    return Element._returnOffset(
      window.pageXOffset || document.documentElement.scrollLeft || =
document.body.scrollLeft,
      window.pageYOffset || document.documentElement.scrollTop || =
document.body.scrollTop);
  }
};
/* Portions of the Selector class are derived from Jack Slocum=E2=80=99s =
DomQuery,
 * part of YUI-Ext version 0.40, distributed under the terms of an =
MIT-style
 * license.  Please see http://www.yui-ext.com/ for more information. */

var Selector =3D Class.create({
  initialize: function(expression) {
    this.expression =3D expression.strip();
    this.compileMatcher();
  },

  shouldUseXPath: function() {
    if (!Prototype.BrowserFeatures.XPath) return false;

    var e =3D this.expression;

    // Safari 3 chokes on :*-of-type and :empty
    if (Prototype.Browser.WebKit &&
     (e.include("-of-type") || e.include(":empty")))
      return false;

    // XPath can't do namespaced attributes, nor can it read
    // the "checked" property from DOM nodes
    if ((/(\[[\w-]*?:|:checked)/).test(this.expression))
      return false;

    return true;
  },

  compileMatcher: function() {
    if (this.shouldUseXPath())
      return this.compileXPathMatcher();

    var e =3D this.expression, ps =3D Selector.patterns, h =3D =
Selector.handlers,
        c =3D Selector.criteria, le, p, m;

    if (Selector._cache[e]) {
      this.matcher =3D Selector._cache[e];
      return;
    }

    this.matcher =3D ["this.matcher =3D function(root) {",
                    "var r =3D root, h =3D Selector.handlers, c =3D =
false, n;"];

    while (e && le !=3D e && (/\S/).test(e)) {
      le =3D e;
      for (var i in ps) {
        p =3D ps[i];
        if (m =3D e.match(p)) {
          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
    	      new Template(c[i]).evaluate(m));
          e =3D e.replace(m[0], '');
          break;
        }
      }
    }

    this.matcher.push("return h.unique(n);\n}");
    eval(this.matcher.join('\n'));
    Selector._cache[this.expression] =3D this.matcher;
  },

  compileXPathMatcher: function() {
    var e =3D this.expression, ps =3D Selector.patterns,
        x =3D Selector.xpath, le, m;

    if (Selector._cache[e]) {
      this.xpath =3D Selector._cache[e]; return;
    }

    this.matcher =3D ['.//*'];
    while (e && le !=3D e && (/\S/).test(e)) {
      le =3D e;
      for (var i in ps) {
        if (m =3D e.match(ps[i])) {
          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
            new Template(x[i]).evaluate(m));
          e =3D e.replace(m[0], '');
          break;
        }
      }
    }

    this.xpath =3D this.matcher.join('');
    Selector._cache[this.expression] =3D this.xpath;
  },

  findElements: function(root) {
    root =3D root || document;
    if (this.xpath) return document._getElementsByXPath(this.xpath, =
root);
    return this.matcher(root);
  },

  match: function(element) {
    this.tokens =3D [];

    var e =3D this.expression, ps =3D Selector.patterns, as =3D =
Selector.assertions;
    var le, p, m;

    while (e && le !=3D=3D e && (/\S/).test(e)) {
      le =3D e;
      for (var i in ps) {
        p =3D ps[i];
        if (m =3D e.match(p)) {
          // use the Selector.assertions methods unless the selector
          // is too complex.
          if (as[i]) {
            this.tokens.push([i, Object.clone(m)]);
            e =3D e.replace(m[0], '');
          } else {
            // reluctantly do a document-wide search
            // and look for a match in the array
            return this.findElements(document).include(element);
          }
        }
      }
    }

    var match =3D true, name, matches;
    for (var i =3D 0, token; token =3D this.tokens[i]; i++) {
      name =3D token[0], matches =3D token[1];
      if (!Selector.assertions[name](element, matches)) {
        match =3D false; break;
      }
    }

    return match;
  },

  toString: function() {
    return this.expression;
  },

  inspect: function() {
    return "#<Selector:" + this.expression.inspect() + ">";
  }
});

Object.extend(Selector, {
  _cache: { },

  xpath: {
    descendant:   "//*",
    child:        "/*",
    adjacent:     "/following-sibling::*[1]",
    laterSibling: '/following-sibling::*',
    tagName:      function(m) {
      if (m[1] =3D=3D '*') return '';
      return "[local-name()=3D'" + m[1].toLowerCase() +
             "' or local-name()=3D'" + m[1].toUpperCase() + "']";
    },
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
    id:           "[@id=3D'#{1}']",
    attrPresence: function(m) {
      m[1] =3D m[1].toLowerCase();
      return new Template("[@#{1}]").evaluate(m);
    },
    attr: function(m) {
      m[1] =3D m[1].toLowerCase();
      m[3] =3D m[5] || m[6];
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
    },
    pseudo: function(m) {
      var h =3D Selector.xpath.pseudos[m[1]];
      if (!h) return '';
      if (Object.isFunction(h)) return h(m);
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
    },
    operators: {
      '=3D':  "[@#{1}=3D'#{3}']",
      '!=3D': "[@#{1}!=3D'#{3}']",
      '^=3D': "[starts-with(@#{1}, '#{3}')]",
      '$=3D': "[substring(@#{1}, (string-length(@#{1}) - =
string-length('#{3}') + 1))=3D'#{3}']",
      '*=3D': "[contains(@#{1}, '#{3}')]",
      '~=3D': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
      '|=3D': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
    },
    pseudos: {
      'first-child': '[not(preceding-sibling::*)]',
      'last-child':  '[not(following-sibling::*)]',
      'only-child':  '[not(preceding-sibling::* or =
following-sibling::*)]',
      'empty':       "[count(*) =3D 0 and (count(text()) =3D 0 or =
translate(text(), ' \t\r\n', '') =3D '')]",
      'checked':     "[@checked]",
      'disabled':    "[@disabled]",
      'enabled':     "[not(@disabled)]",
      'not': function(m) {
        var e =3D m[6], p =3D Selector.patterns,
            x =3D Selector.xpath, le, v;

        var exclusion =3D [];
        while (e && le !=3D e && (/\S/).test(e)) {
          le =3D e;
          for (var i in p) {
            if (m =3D e.match(p[i])) {
              v =3D Object.isFunction(x[i]) ? x[i](m) : new =
Template(x[i]).evaluate(m);
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
              e =3D e.replace(m[0], '');
              break;
            }
          }
        }
        return "[not(" + exclusion.join(" and ") + ")]";
      },
      'nth-child':      function(m) {
        return =
Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
      },
      'nth-last-child': function(m) {
        return =
Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
      },
      'nth-of-type':    function(m) {
        return Selector.xpath.pseudos.nth("position() ", m);
      },
      'nth-last-of-type': function(m) {
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", =
m);
      },
      'first-of-type':  function(m) {
        m[6] =3D "1"; return Selector.xpath.pseudos['nth-of-type'](m);
      },
      'last-of-type':   function(m) {
        m[6] =3D "1"; return =
Selector.xpath.pseudos['nth-last-of-type'](m);
      },
      'only-of-type':   function(m) {
        var p =3D Selector.xpath.pseudos; return p['first-of-type'](m) + =
p['last-of-type'](m);
      },
      nth: function(fragment, m) {
        var mm, formula =3D m[6], predicate;
        if (formula =3D=3D 'even') formula =3D '2n+0';
        if (formula =3D=3D 'odd')  formula =3D '2n+1';
        if (mm =3D formula.match(/^(\d+)$/)) // digit only
          return '[' + fragment + "=3D " + mm[1] + ']';
        if (mm =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
          if (mm[1] =3D=3D "-") mm[1] =3D -1;
          var a =3D mm[1] ? Number(mm[1]) : 1;
          var b =3D mm[2] ? Number(mm[2]) : 0;
          predicate =3D "[((#{fragment} - #{b}) mod #{a} =3D 0) and " +
          "((#{fragment} - #{b}) div #{a} >=3D 0)]";
          return new Template(predicate).evaluate({
            fragment: fragment, a: a, b: b });
        }
      }
    }
  },

  criteria: {
    tagName:      'n =3D h.tagName(n, r, "#{1}", c);      c =3D false;',
    className:    'n =3D h.className(n, r, "#{1}", c);    c =3D false;',
    id:           'n =3D h.id(n, r, "#{1}", c);           c =3D false;',
    attrPresence: 'n =3D h.attrPresence(n, r, "#{1}", c); c =3D false;',
    attr: function(m) {
      m[3] =3D (m[5] || m[6]);
      return new Template('n =3D h.attr(n, r, "#{1}", "#{3}", "#{2}", =
c); c =3D false;').evaluate(m);
    },
    pseudo: function(m) {
      if (m[6]) m[6] =3D m[6].replace(/"/g, '\\"');
      return new Template('n =3D h.pseudo(n, "#{1}", "#{6}", r, c); c =
=3D false;').evaluate(m);
    },
    descendant:   'c =3D "descendant";',
    child:        'c =3D "child";',
    adjacent:     'c =3D "adjacent";',
    laterSibling: 'c =3D "laterSibling";'
  },

  patterns: {
    // combinators must be listed first
    // (and descendant needs to be last combinator)
    laterSibling: /^\s*~\s*/,
    child:        /^\s*>\s*/,
    adjacent:     /^\s*\+\s*/,
    descendant:   /^\s/,

    // selectors follow
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
    id:           /^#([\w\-\*]+)(\b|$)/,
    className:    /^\.([\w\-\*]+)(\b|$)/,
    pseudo:
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis=
)abled|not)(\((.*?)\))?(\b|$|(?=3D\s|[:+~>]))/,
    attrPresence: /^\[([\w]+)\]/,
    attr:         =
/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=3D)\s*((['"])([^\4]*?)\4|([^'"][^=
\]]*?)))?\]/
  },

  // for Selector.match and Element#match
  assertions: {
    tagName: function(element, matches) {
      return matches[1].toUpperCase() =3D=3D =
element.tagName.toUpperCase();
    },

    className: function(element, matches) {
      return Element.hasClassName(element, matches[1]);
    },

    id: function(element, matches) {
      return element.id =3D=3D=3D matches[1];
    },

    attrPresence: function(element, matches) {
      return Element.hasAttribute(element, matches[1]);
    },

    attr: function(element, matches) {
      var nodeValue =3D Element.readAttribute(element, matches[1]);
      return nodeValue && Selector.operators[matches[2]](nodeValue, =
matches[5] || matches[6]);
    }
  },

  handlers: {
    // UTILITY FUNCTIONS
    // joins two collections
    concat: function(a, b) {
      for (var i =3D 0, node; node =3D b[i]; i++)
        a.push(node);
      return a;
    },

    // marks an array of nodes for counting
    mark: function(nodes) {
      var _true =3D Prototype.emptyFunction;
      for (var i =3D 0, node; node =3D nodes[i]; i++)
        node._countedByPrototype =3D _true;
      return nodes;
    },

    unmark: function(nodes) {
      for (var i =3D 0, node; node =3D nodes[i]; i++)
        node._countedByPrototype =3D undefined;
      return nodes;
    },

    // mark each child node with its position (for nth calls)
    // "ofType" flag indicates whether we're indexing for nth-of-type
    // rather than nth-child
    index: function(parentNode, reverse, ofType) {
      parentNode._countedByPrototype =3D Prototype.emptyFunction;
      if (reverse) {
        for (var nodes =3D parentNode.childNodes, i =3D nodes.length - =
1, j =3D 1; i >=3D 0; i--) {
          var node =3D nodes[i];
          if (node.nodeType =3D=3D 1 && (!ofType || =
node._countedByPrototype)) node.nodeIndex =3D j++;
        }
      } else {
        for (var i =3D 0, j =3D 1, nodes =3D parentNode.childNodes; node =
=3D nodes[i]; i++)
          if (node.nodeType =3D=3D 1 && (!ofType || =
node._countedByPrototype)) node.nodeIndex =3D j++;
      }
    },

    // filters out duplicates and extends all nodes
    unique: function(nodes) {
      if (nodes.length =3D=3D 0) return nodes;
      var results =3D [], n;
      for (var i =3D 0, l =3D nodes.length; i < l; i++)
        if (!(n =3D nodes[i])._countedByPrototype) {
          n._countedByPrototype =3D Prototype.emptyFunction;
          results.push(Element.extend(n));
        }
      return Selector.handlers.unmark(results);
    },

    // COMBINATOR FUNCTIONS
    descendant: function(nodes) {
      var h =3D Selector.handlers;
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        h.concat(results, node.getElementsByTagName('*'));
      return results;
    },

    child: function(nodes) {
      var h =3D Selector.handlers;
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        for (var j =3D 0, child; child =3D node.childNodes[j]; j++)
          if (child.nodeType =3D=3D 1 && child.tagName !=3D '!') =
results.push(child);
      }
      return results;
    },

    adjacent: function(nodes) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        var next =3D this.nextElementSibling(node);
        if (next) results.push(next);
      }
      return results;
    },

    laterSibling: function(nodes) {
      var h =3D Selector.handlers;
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        h.concat(results, Element.nextSiblings(node));
      return results;
    },

    nextElementSibling: function(node) {
      while (node =3D node.nextSibling)
	      if (node.nodeType =3D=3D 1) return node;
      return null;
    },

    previousElementSibling: function(node) {
      while (node =3D node.previousSibling)
        if (node.nodeType =3D=3D 1) return node;
      return null;
    },

    // TOKEN FUNCTIONS
    tagName: function(nodes, root, tagName, combinator) {
      var uTagName =3D tagName.toUpperCase();
      var results =3D [], h =3D Selector.handlers;
      if (nodes) {
        if (combinator) {
          // fastlane for ordinary descendant combinators
          if (combinator =3D=3D "descendant") {
            for (var i =3D 0, node; node =3D nodes[i]; i++)
              h.concat(results, node.getElementsByTagName(tagName));
            return results;
          } else nodes =3D this[combinator](nodes);
          if (tagName =3D=3D "*") return nodes;
        }
        for (var i =3D 0, node; node =3D nodes[i]; i++)
          if (node.tagName.toUpperCase() =3D=3D=3D uTagName) =
results.push(node);
        return results;
      } else return root.getElementsByTagName(tagName);
    },

    id: function(nodes, root, id, combinator) {
      var targetNode =3D $(id), h =3D Selector.handlers;
      if (!targetNode) return [];
      if (!nodes && root =3D=3D document) return [targetNode];
      if (nodes) {
        if (combinator) {
          if (combinator =3D=3D 'child') {
            for (var i =3D 0, node; node =3D nodes[i]; i++)
              if (targetNode.parentNode =3D=3D node) return =
[targetNode];
          } else if (combinator =3D=3D 'descendant') {
            for (var i =3D 0, node; node =3D nodes[i]; i++)
              if (Element.descendantOf(targetNode, node)) return =
[targetNode];
          } else if (combinator =3D=3D 'adjacent') {
            for (var i =3D 0, node; node =3D nodes[i]; i++)
              if (Selector.handlers.previousElementSibling(targetNode) =
=3D=3D node)
                return [targetNode];
          } else nodes =3D h[combinator](nodes);
        }
        for (var i =3D 0, node; node =3D nodes[i]; i++)
          if (node =3D=3D targetNode) return [targetNode];
        return [];
      }
      return (targetNode && Element.descendantOf(targetNode, root)) ? =
[targetNode] : [];
    },

    className: function(nodes, root, className, combinator) {
      if (nodes && combinator) nodes =3D this[combinator](nodes);
      return Selector.handlers.byClassName(nodes, root, className);
    },

    byClassName: function(nodes, root, className) {
      if (!nodes) nodes =3D Selector.handlers.descendant([root]);
      var needle =3D ' ' + className + ' ';
      for (var i =3D 0, results =3D [], node, nodeClassName; node =3D =
nodes[i]; i++) {
        nodeClassName =3D node.className;
        if (nodeClassName.length =3D=3D 0) continue;
        if (nodeClassName =3D=3D className || (' ' + nodeClassName + ' =
').include(needle))
          results.push(node);
      }
      return results;
    },

    attrPresence: function(nodes, root, attr, combinator) {
      if (!nodes) nodes =3D root.getElementsByTagName("*");
      if (nodes && combinator) nodes =3D this[combinator](nodes);
      var results =3D [];
      for (var i =3D 0, node; node =3D nodes[i]; i++)
        if (Element.hasAttribute(node, attr)) results.push(node);
      return results;
    },

    attr: function(nodes, root, attr, value, operator, combinator) {
      if (!nodes) nodes =3D root.getElementsByTagName("*");
      if (nodes && combinator) nodes =3D this[combinator](nodes);
      var handler =3D Selector.operators[operator], results =3D [];
      for (var i =3D 0, node; node =3D nodes[i]; i++) {
        var nodeValue =3D Element.readAttribute(node, attr);
        if (nodeValue =3D=3D=3D null) continue;
        if (handler(nodeValue, value)) results.push(node);
      }
      return results;
    },

    pseudo: function(nodes, name, value, root, combinator) {
      if (nodes && combinator) nodes =3D this[combinator](nodes);
      if (!nodes) nodes =3D root.getElementsByTagName("*");
      return Selector.pseudos[name](nodes, value, root);
    }
  },

  pseudos: {
    'first-child': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        if (Selector.handlers.previousElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'last-child': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        if (Selector.handlers.nextElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'only-child': function(nodes, value, root) {
      var h =3D Selector.handlers;
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (!h.previousElementSibling(node) && =
!h.nextElementSibling(node))
          results.push(node);
      return results;
    },
    'nth-child':        function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root);
    },
    'nth-last-child':   function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true);
    },
    'nth-of-type':      function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, false, true);
    },
    'nth-last-of-type': function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true, true);
    },
    'first-of-type':    function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, false, true);
    },
    'last-of-type':     function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, true, true);
    },
    'only-of-type':     function(nodes, formula, root) {
      var p =3D Selector.pseudos;
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), =
formula, root);
    },

    // handles the an+b logic
    getIndices: function(a, b, total) {
      if (a =3D=3D 0) return b > 0 ? [b] : [];
      return $R(1, total).inject([], function(memo, i) {
        if (0 =3D=3D (i - b) % a && (i - b) / a >=3D 0) memo.push(i);
        return memo;
      });
    },

    // handles nth(-last)-child, nth(-last)-of-type, and =
(first|last)-of-type
    nth: function(nodes, formula, root, reverse, ofType) {
      if (nodes.length =3D=3D 0) return [];
      if (formula =3D=3D 'even') formula =3D '2n+0';
      if (formula =3D=3D 'odd')  formula =3D '2n+1';
      var h =3D Selector.handlers, results =3D [], indexed =3D [], m;
      h.mark(nodes);
      for (var i =3D 0, node; node =3D nodes[i]; i++) {
        if (!node.parentNode._countedByPrototype) {
          h.index(node.parentNode, reverse, ofType);
          indexed.push(node.parentNode);
        }
      }
      if (formula.match(/^\d+$/)) { // just a number
        formula =3D Number(formula);
        for (var i =3D 0, node; node =3D nodes[i]; i++)
          if (node.nodeIndex =3D=3D formula) results.push(node);
      } else if (m =3D formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // =
an+b
        if (m[1] =3D=3D "-") m[1] =3D -1;
        var a =3D m[1] ? Number(m[1]) : 1;
        var b =3D m[2] ? Number(m[2]) : 0;
        var indices =3D Selector.pseudos.getIndices(a, b, nodes.length);
        for (var i =3D 0, node, l =3D indices.length; node =3D nodes[i]; =
i++) {
          for (var j =3D 0; j < l; j++)
            if (node.nodeIndex =3D=3D indices[j]) results.push(node);
        }
      }
      h.unmark(nodes);
      h.unmark(indexed);
      return results;
    },

    'empty': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++) {
        // IE treats comments as element nodes
        if (node.tagName =3D=3D '!' || (node.firstChild && =
!node.innerHTML.match(/^\s*$/))) continue;
        results.push(node);
      }
      return results;
    },

    'not': function(nodes, selector, root) {
      var h =3D Selector.handlers, selectorType, m;
      var exclusions =3D new Selector(selector).findElements(root);
      h.mark(exclusions);
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (!node._countedByPrototype) results.push(node);
      h.unmark(exclusions);
      return results;
    },

    'enabled': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (!node.disabled) results.push(node);
      return results;
    },

    'disabled': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (node.disabled) results.push(node);
      return results;
    },

    'checked': function(nodes, value, root) {
      for (var i =3D 0, results =3D [], node; node =3D nodes[i]; i++)
        if (node.checked) results.push(node);
      return results;
    }
  },

  operators: {
    '=3D':  function(nv, v) { return nv =3D=3D v; },
    '!=3D': function(nv, v) { return nv !=3D v; },
    '^=3D': function(nv, v) { return nv.startsWith(v); },
    '$=3D': function(nv, v) { return nv.endsWith(v); },
    '*=3D': function(nv, v) { return nv.include(v); },
    '~=3D': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + =
' '); },
    '|=3D': function(nv, v) { return ('-' + nv.toUpperCase() + =
'-').include('-' + v.toUpperCase() + '-'); }
  },

  split: function(expression) {
    var expressions =3D [];
    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, =
function(m) {
      expressions.push(m[1].strip());
    });
    return expressions;
  },

  matchElements: function(elements, expression) {
    var matches =3D $$(expression), h =3D Selector.handlers;
    h.mark(matches);
    for (var i =3D 0, results =3D [], element; element =3D elements[i]; =
i++)
      if (element._countedByPrototype) results.push(element);
    h.unmark(matches);
    return results;
  },

  findElement: function(elements, expression, index) {
    if (Object.isNumber(expression)) {
      index =3D expression; expression =3D false;
    }
    return Selector.matchElements(elements, expression || '*')[index || =
0];
  },

  findChildElements: function(element, expressions) {
    expressions =3D Selector.split(expressions.join(','));
    var results =3D [], h =3D Selector.handlers;
    for (var i =3D 0, l =3D expressions.length, selector; i < l; i++) {
      selector =3D new Selector(expressions[i].strip());
      h.concat(results, selector.findElements(element));
    }
    return (l > 1) ? h.unique(results) : results;
  }
});

if (Prototype.Browser.IE) {
  Object.extend(Selector.handlers, {
    // IE returns comment nodes on getElementsByTagName("*").
    // Filter them out.
    concat: function(a, b) {
      for (var i =3D 0, node; node =3D b[i]; i++)
        if (node.tagName !=3D=3D "!") a.push(node);
      return a;
    },

    // IE improperly serializes _countedByPrototype in =
(inner|outer)HTML.
    unmark: function(nodes) {
      for (var i =3D 0, node; node =3D nodes[i]; i++)
        node.removeAttribute('_countedByPrototype');
      return nodes;
    }
  });
}

function $$() {
  return Selector.findChildElements(document, $A(arguments));
}
var Form =3D {
  reset: function(form) {
    $(form).reset();
    return form;
  },

  serializeElements: function(elements, options) {
    if (typeof options !=3D 'object') options =3D { hash: !!options };
    else if (Object.isUndefined(options.hash)) options.hash =3D true;
    var key, value, submitted =3D false, submit =3D options.submit;

    var data =3D elements.inject({ }, function(result, element) {
      if (!element.disabled && element.name) {
        key =3D element.name; value =3D $(element).getValue();
        if (value !=3D null && (element.type !=3D 'submit' || =
(!submitted &&
            submit !=3D=3D false && (!submit || key =3D=3D submit) && =
(submitted =3D true)))) {
          if (key in result) {
            // a key is already present; construct an array of values
            if (!Object.isArray(result[key])) result[key] =3D =
[result[key]];
            result[key].push(value);
          }
          else result[key] =3D value;
        }
      }
      return result;
    });

    return options.hash ? data : Object.toQueryString(data);
  }
};

Form.Methods =3D {
  serialize: function(form, options) {
    return Form.serializeElements(Form.getElements(form), options);
  },

  getElements: function(form) {
    return $A($(form).getElementsByTagName('*')).inject([],
      function(elements, child) {
        if (Form.Element.Serializers[child.tagName.toLowerCase()])
          elements.push(Element.extend(child));
        return elements;
      }
    );
  },

  getInputs: function(form, typeName, name) {
    form =3D $(form);
    var inputs =3D form.getElementsByTagName('input');

    if (!typeName && !name) return $A(inputs).map(Element.extend);

    for (var i =3D 0, matchingInputs =3D [], length =3D inputs.length; i =
< length; i++) {
      var input =3D inputs[i];
      if ((typeName && input.type !=3D typeName) || (name && input.name =
!=3D name))
        continue;
      matchingInputs.push(Element.extend(input));
    }

    return matchingInputs;
  },

  disable: function(form) {
    form =3D $(form);
    Form.getElements(form).invoke('disable');
    return form;
  },

  enable: function(form) {
    form =3D $(form);
    Form.getElements(form).invoke('enable');
    return form;
  },

  findFirstElement: function(form) {
    var elements =3D $(form).getElements().findAll(function(element) {
      return 'hidden' !=3D element.type && !element.disabled;
    });
    var firstByIndex =3D elements.findAll(function(element) {
      return element.hasAttribute('tabIndex') && element.tabIndex >=3D =
0;
    }).sortBy(function(element) { return element.tabIndex }).first();

    return firstByIndex ? firstByIndex : elements.find(function(element) =
{
      return ['input', 'select', =
'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    form =3D $(form);
    form.findFirstElement().activate();
    return form;
  },

  request: function(form, options) {
    form =3D $(form), options =3D Object.clone(options || { });

    var params =3D options.parameters, action =3D =
form.readAttribute('action') || '';
    if (action.blank()) action =3D window.location.href;
    options.parameters =3D form.serialize(true);

    if (params) {
      if (Object.isString(params)) params =3D params.toQueryParams();
      Object.extend(options.parameters, params);
    }

    if (form.hasAttribute('method') && !options.method)
      options.method =3D form.method;

    return new Ajax.Request(action, options);
  }
};

/*-----------------------------------------------------------------------=
---*/

Form.Element =3D {
  focus: function(element) {
    $(element).focus();
    return element;
  },

  select: function(element) {
    $(element).select();
    return element;
  }
};

Form.Element.Methods =3D {
  serialize: function(element) {
    element =3D $(element);
    if (!element.disabled && element.name) {
      var value =3D element.getValue();
      if (value !=3D undefined) {
        var pair =3D { };
        pair[element.name] =3D value;
        return Object.toQueryString(pair);
      }
    }
    return '';
  },

  getValue: function(element) {
    element =3D $(element);
    var method =3D element.tagName.toLowerCase();
    return Form.Element.Serializers[method](element);
  },

  setValue: function(element, value) {
    element =3D $(element);
    var method =3D element.tagName.toLowerCase();
    Form.Element.Serializers[method](element, value);
    return element;
  },

  clear: function(element) {
    $(element).value =3D '';
    return element;
  },

  present: function(element) {
    return $(element).value !=3D '';
  },

  activate: function(element) {
    element =3D $(element);
    try {
      element.focus();
      if (element.select && (element.tagName.toLowerCase() !=3D 'input' =
||
          !['button', 'reset', 'submit'].include(element.type)))
        element.select();
    } catch (e) { }
    return element;
  },

  disable: function(element) {
    element =3D $(element);
    element.blur();
    element.disabled =3D true;
    return element;
  },

  enable: function(element) {
    element =3D $(element);
    element.disabled =3D false;
    return element;
  }
};

/*-----------------------------------------------------------------------=
---*/

var Field =3D Form.Element;
var $F =3D Form.Element.Methods.getValue;

/*-----------------------------------------------------------------------=
---*/

Form.Element.Serializers =3D {
  input: function(element, value) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element, value);
      default:
        return Form.Element.Serializers.textarea(element, value);
    }
  },

  inputSelector: function(element, value) {
    if (Object.isUndefined(value)) return element.checked ? =
element.value : null;
    else element.checked =3D !!value;
  },

  textarea: function(element, value) {
    if (Object.isUndefined(value)) return element.value;
    else element.value =3D value;
  },

  select: function(element, index) {
    if (Object.isUndefined(index))
      return this[element.type =3D=3D 'select-one' ?
        'selectOne' : 'selectMany'](element);
    else {
      var opt, value, single =3D !Object.isArray(index);
      for (var i =3D 0, length =3D element.length; i < length; i++) {
        opt =3D element.options[i];
        value =3D this.optionValue(opt);
        if (single) {
          if (value =3D=3D index) {
            opt.selected =3D true;
            return;
          }
        }
        else opt.selected =3D index.include(value);
      }
    }
  },

  selectOne: function(element) {
    var index =3D element.selectedIndex;
    return index >=3D 0 ? this.optionValue(element.options[index]) : =
null;
  },

  selectMany: function(element) {
    var values, length =3D element.length;
    if (!length) return null;

    for (var i =3D 0, values =3D []; i < length; i++) {
      var opt =3D element.options[i];
      if (opt.selected) values.push(this.optionValue(opt));
    }
    return values;
  },

  optionValue: function(opt) {
    // extend element because hasAttribute may not be native
    return Element.extend(opt).hasAttribute('value') ? opt.value : =
opt.text;
  }
};

/*-----------------------------------------------------------------------=
---*/

Abstract.TimedObserver =3D Class.create(PeriodicalExecuter, {
  initialize: function($super, element, frequency, callback) {
    $super(callback, frequency);
    this.element   =3D $(element);
    this.lastValue =3D this.getValue();
  },

  execute: function() {
    var value =3D this.getValue();
    if (Object.isString(this.lastValue) && Object.isString(value) ?
        this.lastValue !=3D value : String(this.lastValue) !=3D =
String(value)) {
      this.callback(this.element, value);
      this.lastValue =3D value;
    }
  }
});

Form.Element.Observer =3D Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer =3D Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*-----------------------------------------------------------------------=
---*/

Abstract.EventObserver =3D Class.create({
  initialize: function(element, callback) {
    this.element  =3D $(element);
    this.callback =3D callback;

    this.lastValue =3D this.getValue();
    if (this.element.tagName.toLowerCase() =3D=3D 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value =3D this.getValue();
    if (this.lastValue !=3D value) {
      this.callback(this.element, value);
      this.lastValue =3D value;
    }
  },

  registerFormCallbacks: function() {
    Form.getElements(this.element).each(this.registerCallback, this);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', =
this.onElementEvent.bind(this));
          break;
        default:
          Event.observe(element, 'change', =
this.onElementEvent.bind(this));
          break;
      }
    }
  }
});

Form.Element.EventObserver =3D Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver =3D Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) var Event =3D { };

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,
  KEY_HOME:     36,
  KEY_END:      35,
  KEY_PAGEUP:   33,
  KEY_PAGEDOWN: 34,
  KEY_INSERT:   45,

  cache: { },

  relatedTarget: function(event) {
    var element;
    switch(event.type) {
      case 'mouseover': element =3D event.fromElement; break;
      case 'mouseout':  element =3D event.toElement;   break;
      default: return null;
    }
    return Element.extend(element);
  }
});

Event.Methods =3D (function() {
  var isButton;

  if (Prototype.Browser.IE) {
    var buttonMap =3D { 0: 1, 1: 4, 2: 2 };
    isButton =3D function(event, code) {
      return event.button =3D=3D buttonMap[code];
    };

  } else if (Prototype.Browser.WebKit) {
    isButton =3D function(event, code) {
      switch (code) {
        case 0: return event.which =3D=3D 1 && !event.metaKey;
        case 1: return event.which =3D=3D 1 && event.metaKey;
        default: return false;
      }
    };

  } else {
    isButton =3D function(event, code) {
      return event.which ? (event.which =3D=3D=3D code + 1) : =
(event.button =3D=3D=3D code);
    };
  }

  return {
    isLeftClick:   function(event) { return isButton(event, 0) },
    isMiddleClick: function(event) { return isButton(event, 1) },
    isRightClick:  function(event) { return isButton(event, 2) },

    element: function(event) {
      var node =3D Event.extend(event).target;
      return Element.extend(node.nodeType =3D=3D Node.TEXT_NODE ? =
node.parentNode : node);
    },

    findElement: function(event, expression) {
      var element =3D Event.element(event);
      if (!expression) return element;
      var elements =3D [element].concat(element.ancestors());
      return Selector.findElement(elements, expression, 0);
    },

    pointer: function(event) {
      return {
        x: event.pageX || (event.clientX +
          (document.documentElement.scrollLeft || =
document.body.scrollLeft)),
        y: event.pageY || (event.clientY +
          (document.documentElement.scrollTop || =
document.body.scrollTop))
      };
    },

    pointerX: function(event) { return Event.pointer(event).x },
    pointerY: function(event) { return Event.pointer(event).y },

    stop: function(event) {
      Event.extend(event);
      event.preventDefault();
      event.stopPropagation();
      event.stopped =3D true;
    }
  };
})();

Event.extend =3D (function() {
  var methods =3D Object.keys(Event.Methods).inject({ }, function(m, =
name) {
    m[name] =3D Event.Methods[name].methodize();
    return m;
  });

  if (Prototype.Browser.IE) {
    Object.extend(methods, {
      stopPropagation: function() { this.cancelBubble =3D true },
      preventDefault:  function() { this.returnValue =3D false },
      inspect: function() { return "[object Event]" }
    });

    return function(event) {
      if (!event) return false;
      if (event._extendedByPrototype) return event;

      event._extendedByPrototype =3D Prototype.emptyFunction;
      var pointer =3D Event.pointer(event);
      Object.extend(event, {
        target: event.srcElement,
        relatedTarget: Event.relatedTarget(event),
        pageX:  pointer.x,
        pageY:  pointer.y
      });
      return Object.extend(event, methods);
    };

  } else {
    Event.prototype =3D Event.prototype || =
document.createEvent("HTMLEvents").__proto__;
    Object.extend(Event.prototype, methods);
    return Prototype.K;
  }
})();

Object.extend(Event, (function() {
  var cache =3D Event.cache;

  function getEventID(element) {
    if (element._prototypeEventID) return element._prototypeEventID[0];
    arguments.callee.id =3D arguments.callee.id || 1;
    return element._prototypeEventID =3D [++arguments.callee.id];
  }

  function getDOMEventName(eventName) {
    if (eventName && eventName.include(':')) return "dataavailable";
    return eventName;
  }

  function getCacheForID(id) {
    return cache[id] =3D cache[id] || { };
  }

  function getWrappersForEventName(id, eventName) {
    var c =3D getCacheForID(id);
    return c[eventName] =3D c[eventName] || [];
  }

  function createWrapper(element, eventName, handler) {
    var id =3D getEventID(element);
    var c =3D getWrappersForEventName(id, eventName);
    if (c.pluck("handler").include(handler)) return false;

    var wrapper =3D function(event) {
      if (!Event || !Event.extend ||
        (event.eventName && event.eventName !=3D eventName))
          return false;

      Event.extend(event);
      handler.call(element, event);
    };

    wrapper.handler =3D handler;
    c.push(wrapper);
    return wrapper;
  }

  function findWrapper(id, eventName, handler) {
    var c =3D getWrappersForEventName(id, eventName);
    return c.find(function(wrapper) { return wrapper.handler =3D=3D =
handler });
  }

  function destroyWrapper(id, eventName, handler) {
    var c =3D getCacheForID(id);
    if (!c[eventName]) return false;
    c[eventName] =3D c[eventName].without(findWrapper(id, eventName, =
handler));
  }

  function destroyCache() {
    for (var id in cache)
      for (var eventName in cache[id])
        cache[id][eventName] =3D null;
  }

  if (window.attachEvent) {
    window.attachEvent("onunload", destroyCache);
  }

  return {
    observe: function(element, eventName, handler) {
      element =3D $(element);
      var name =3D getDOMEventName(eventName);

      var wrapper =3D createWrapper(element, eventName, handler);
      if (!wrapper) return element;

      if (element.addEventListener) {
        element.addEventListener(name, wrapper, false);
      } else {
        element.attachEvent("on" + name, wrapper);
      }

      return element;
    },

    stopObserving: function(element, eventName, handler) {
      element =3D $(element);
      var id =3D getEventID(element), name =3D =
getDOMEventName(eventName);

      if (!handler && eventName) {
        getWrappersForEventName(id, eventName).each(function(wrapper) {
          element.stopObserving(eventName, wrapper.handler);
        });
        return element;

      } else if (!eventName) {
        Object.keys(getCacheForID(id)).each(function(eventName) {
          element.stopObserving(eventName);
        });
        return element;
      }

      var wrapper =3D findWrapper(id, eventName, handler);
      if (!wrapper) return element;

      if (element.removeEventListener) {
        element.removeEventListener(name, wrapper, false);
      } else {
        element.detachEvent("on" + name, wrapper);
      }

      destroyWrapper(id, eventName, handler);

      return element;
    },

    fire: function(element, eventName, memo) {
      element =3D $(element);
      if (element =3D=3D document && document.createEvent && =
!element.dispatchEvent)
        element =3D document.documentElement;

      var event;
      if (document.createEvent) {
        event =3D document.createEvent("HTMLEvents");
        event.initEvent("dataavailable", true, true);
      } else {
        event =3D document.createEventObject();
        event.eventType =3D "ondataavailable";
      }

      event.eventName =3D eventName;
      event.memo =3D memo || { };

      if (document.createEvent) {
        element.dispatchEvent(event);
      } else {
        element.fireEvent(event.eventType, event);
      }

      return Event.extend(event);
    }
  };
})());

Object.extend(Event, Event.Methods);

Element.addMethods({
  fire:          Event.fire,
  observe:       Event.observe,
  stopObserving: Event.stopObserving
});

Object.extend(document, {
  fire:          Element.Methods.fire.methodize(),
  observe:       Element.Methods.observe.methodize(),
  stopObserving: Element.Methods.stopObserving.methodize(),
  loaded:        false
});

(function() {
  /* Support for the DOMContentLoaded event is based on work by Dan =
Webb,
     Matthias Miller, Dean Edwards and John Resig. */

  var timer;

  function fireContentLoadedEvent() {
    if (document.loaded) return;
    if (timer) window.clearInterval(timer);
    document.fire("dom:loaded");
    document.loaded =3D true;
  }

  if (document.addEventListener) {
    if (Prototype.Browser.WebKit) {
      timer =3D window.setInterval(function() {
        if (/loaded|complete/.test(document.readyState))
          fireContentLoadedEvent();
      }, 0);

      Event.observe(window, "load", fireContentLoadedEvent);

    } else {
      document.addEventListener("DOMContentLoaded",
        fireContentLoadedEvent, false);
    }

  } else {
    document.write("<script id=3D__onDOMContentLoaded defer =
src=3D//:><\/script>");
    $("__onDOMContentLoaded").onreadystatechange =3D function() {
      if (this.readyState =3D=3D "complete") {
        this.onreadystatechange =3D null;
        fireContentLoadedEvent();
      }
    };
  }
})();
/*------------------------------- DEPRECATED =
-------------------------------*/

Hash.toQueryString =3D Object.toQueryString;

var Toggle =3D { display: Element.toggle };

Element.Methods.childOf =3D Element.Methods.descendantOf;

var Insertion =3D {
  Before: function(element, content) {
    return Element.insert(element, {before:content});
  },

  Top: function(element, content) {
    return Element.insert(element, {top:content});
  },

  Bottom: function(element, content) {
    return Element.insert(element, {bottom:content});
  },

  After: function(element, content) {
    return Element.insert(element, {after:content});
  }
};

var $continue =3D new Error('"throw $continue" is deprecated, use =
"return" instead');

// This should be moved to script.aculo.us; notice the deprecated =
methods
// further below, that map to the newer Element methods.
var Position =3D {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every =
time the
  // page is scrolled
  prepare: function() {
    this.deltaX =3D  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =3D  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp =3D x;
    this.ycomp =3D y;
    this.offset =3D Element.cumulativeOffset(element);

    return (y >=3D this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >=3D this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache =3D Element.cumulativeScrollOffset(element);

    this.xcomp =3D x + offsetcache[0] - this.deltaX;
    this.ycomp =3D y + offsetcache[1] - this.deltaY;
    this.offset =3D Element.cumulativeOffset(element);

    return (this.ycomp >=3D this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >=3D this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode =3D=3D 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode =3D=3D 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  // Deprecation layer -- use newer Element methods now (1.5.2).

  cumulativeOffset: Element.Methods.cumulativeOffset,

  positionedOffset: Element.Methods.positionedOffset,

  absolutize: function(element) {
    Position.prepare();
    return Element.absolutize(element);
  },

  relativize: function(element) {
    Position.prepare();
    return Element.relativize(element);
  },

  realOffset: Element.Methods.cumulativeScrollOffset,

  offsetParent: Element.Methods.getOffsetParent,

  page: Element.Methods.viewportOffset,

  clone: function(source, target, options) {
    options =3D options || { };
    return Element.clonePosition(target, source, options);
  }
};

/*-----------------------------------------------------------------------=
---*/

if (!document.getElementsByClassName) document.getElementsByClassName =
=3D function(instanceMethods){
  function iter(name) {
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' =
" + name + " ')]";
  }

  instanceMethods.getElementsByClassName =3D =
Prototype.BrowserFeatures.XPath ?
  function(element, className) {
    className =3D className.toString().strip();
    var cond =3D /\s/.test(className) ? $w(className).map(iter).join('') =
: iter(className);
    return cond ? document._getElementsByXPath('.//*' + cond, element) : =
[];
  } : function(element, className) {
    className =3D className.toString().strip();
    var elements =3D [], classNames =3D (/\s/.test(className) ? =
$w(className) : null);
    if (!classNames && !className) return elements;

    var nodes =3D $(element).getElementsByTagName('*');
    className =3D ' ' + className + ' ';

    for (var i =3D 0, child, cn; child =3D nodes[i]; i++) {
      if (child.className && (cn =3D ' ' + child.className + ' ') && =
(cn.include(className) ||
          (classNames && classNames.all(function(name) {
            return !name.toString().blank() && cn.include(' ' + name + ' =
');
          }))))
        elements.push(Element.extend(child));
    }
    return elements;
  };

  return function(className, parentElement) {
    return $(parentElement || =
document.body).getElementsByClassName(className);
  };
}(Element.Methods);

/*-----------------------------------------------------------------------=
---*/

Element.ClassNames =3D Class.create();
Element.ClassNames.prototype =3D {
  initialize: function(element) {
    this.element =3D $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className =3D className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);

/*-----------------------------------------------------------------------=
---*/

Element.addMethods();
------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media10.washingtonpost.com/wp/js/papl.js

=EF=BB=BF(function() {=0A=
=0A=
    var $empty =3D function() { };=0A=
    =0A=
    var Asset =3D {=0A=
=0A=
        javascript: function(source, properties) {=0A=
            properties =3D Object.extend({=0A=
                onload: $empty,=0A=
                document: document,=0A=
                check: function() { return true; }=0A=
            }, properties);=0A=
=0A=
            var script =3D new Element('script', { src: source, type: =
'text/javascript' });=0A=
=0A=
            var load =3D properties.onload.bind(script), check =3D =
properties.check, doc =3D properties.document;=0A=
            delete properties.onload; delete properties.check; delete =
properties.document;=0A=
=0A=
            script.observe('load', load);=0A=
            script.observe('readystatechange', function() {=0A=
                if ('loaded' =3D=3D this.readyStage || 'complete' =3D=3D =
this.readyState) load();=0A=
            })=0A=
            for (var key in properties) {=0A=
                script[key] =3D properties[key];=0A=
            }=0A=
=0A=
            if (Prototype.Browser.WebKit) {=0A=
                (function() {=0A=
                    if (!check) {=0A=
                        setTimeout(this, 50)=0A=
                        return;=0A=
                    }=0A=
                    load();=0A=
                })=0A=
            }=0A=
=0A=
            return $$('head')[0].insert(script);=0A=
        }=0A=
    };=0A=
=0A=
    papl =3D {=0A=
        url: window.location.href,=0A=
        server: window.location.href.match(/^.*?:\/\/.*?\//)[0],=0A=
        staticServer: {=0A=
            'file:///': '',=0A=
            'http://localhost:52434/': '',=0A=
            =
'http://testweb8g.digitalink.com/':'http://testnp1a.digitalink.com/static=
_media/wp/',=0A=
            'http://localhost:3518/': =
'http://testnp1a.digitalink.com/static_media/wp-admin/',=0A=
            'http://wppdev.digitalink.com/': =
'http://testnp1a.digitalink.com/static_media/wp/',=0A=
            'default': 'http://media10.washingtonpost.com/wp/'=0A=
        },=0A=
        flashes:{},=0A=
        flash:{=0A=
		    floatW: 720,=0A=
		    floatH: 439,=0A=
		    create: function(s, callBack) {=0A=
		        var swiffOpts =3D { params: { majorversion: '0', build: '0', =
bgcolor: '#FFFFFF', wMode: 'Opaque', allowScriptAccess: 'always', =
swLiveConnect: 'true'} };=0A=
		        Object.extend(s.params, swiffOpts.params);=0A=
		        swfobject.embedSWF(s.movie, s.container, s.width, s.height, =
s.params.majorversion + '.' + s.params.build, null, s.vars, s.params, =
{id:s.id, name:s.id}, callBack || null);=0A=
		        papl.flashes[s.id] =3D $(s.id);=0A=
		        return papl.flashes[s.id];=0A=
		    }=0A=
		},=0A=
        init: function() {=0A=
            if (papl.staticServer[papl.server] || =
papl.staticServer[papl.server] =3D=3D '') {=0A=
                papl.staticServer =3D papl.staticServer[papl.server];=0A=
            } else {=0A=
                papl.staticServer =3D papl.staticServer['default'];=0A=
            }=0A=
=0A=
            this.addDomInit(this.baseDomInit.bind(this));=0A=
            this.domInit($(document.body));=0A=
=0A=
            this.addDomInit(this.appInit);=0A=
            this.appInit($(document.body));=0A=
        },=0A=
        apps: {=0A=
            /* This is the geoCode button used on the django admins.=0A=
            ** It will look for and initialize all ids containing =
id_location.=0A=
            ** It will create two buttons Map It and GeoCode.  GeoCode =
will take=0A=
            ** the string in the location field query a url and return =
the lat lng=0A=
            ** into input id_latitude and id_longitude.  It will work =
with set of=0A=
            ** these inputs id_location* id_latitude* and id_longitude* =
*being=0A=
            ** common to the set  =0A=
            GeoCodeButton:{name:'Django Admin Geo Code and Map It =
Button',triggers:['input[id*=3Did_location]'],dependencies:null,url:'js/a=
pps/GeoCodeButton.js'},=0A=
            */=0A=
=0A=
            /* kind of overwraught dom configed google mapping layer */=0A=
            Pages: { name: 'Slideing Pages App', triggers: ['.mpages'], =
dependencies: [], url: 'js/apps/PPages.js' },=0A=
            Tabs: { name: 'Tabs App', triggers: ['.mtabs'], =
dependencies: [], url: 'js/apps/PTabs.js' },=0A=
            PToast: { name: 'Prototype Toast', triggers: ['*'], =
dependencies: [], url: 'js/apps/PToast.js' },=0A=
            OmniPlayer: { name: 'OmniPlayer', triggers: ['.oplayer'], =
dependencies: [], url: 'js/apps/POmniPlayer.js' }=0A=
        },=0A=
        appInit: function(root) {=0A=
            $H(papl.apps).each(function(app) {=0A=
                app.value.triggers.each(function(scan) {=0A=
                    if (root.getElementsBySelector(scan).length > 0 && =
!app.value.active) {=0A=
                        if (app.value.dependencies) {=0A=
                            =
app.value.dependencies.each(function(dependant) {=0A=
                                if (!papl.apps[dependant].active) {=0A=
                                    papl.appLoad(papl.apps[dependant]);=0A=
                                }=0A=
                            });=0A=
                        }=0A=
                        papl.appLoad(app.value);=0A=
                    }=0A=
                });=0A=
            });=0A=
        },=0A=
        appLoad: function(app) {=0A=
            app.active =3D true;=0A=
            if (app.url.match('://')) {=0A=
                new Asset.javascript(app.url);=0A=
            } else {=0A=
                new Asset.javascript(papl.staticServer + app.url);=0A=
            }=0A=
        },=0A=
        baseDomInit: function(root) {=0A=
			root.getElementsBySelector('input').each(function(s){=0A=
				s.defaultValue =3D s.value;=0A=
			});=0A=
			root.getElementsBySelector('.remember-input').each(function(s){=0A=
				new papl.classes.TextInstruct(s)=0A=
			}.bind(this));=0A=
			root.getElementsBySelector('.flash-embed').each(function(s){=0A=
				if (s.getElementsBySelector('.flash-embed-config')[0]) {=0A=
				    var config =3D =
s.getElementsBySelector('.flash-embed-config')[0].innerHTML.evalJSON();=0A=
				}else{=0A=
					var config =3D s.innerHTML.evalJSON();=0A=
				}=0A=
				config.container =3D s.id;=0A=
				this.flash.create(config);=0A=
			}.bind(this));=0A=
			/* IE SWF object hack */=0A=
			if(root.getElementsBySelector('.oplayer').length > 0){=0A=
				=
eval(function(p,a,c,k,e,r){e=3Dfunction(c){return(c<a?'':e(parseInt(c/a))=
)+((c=3Dc%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace=
(/^/,String)){while(c--)r[e(c)]=3Dk[c]||e(c);k=3D[function(e){return =
r[e]}];e=3Dfunction(){return'\\w+'};c=3D1};while(c--)if(k[c])p=3Dp.replac=
e(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('1T=3D9(){5 =
w=3D"2S",M=3D"2j",2h=3D"3s =
2E",2B=3D"2D.2D",1s=3D"34/x-2X-32",2i=3D"3D",2m=3D"31",C=3D2x,y=3D3g,W=3D=
3T,27=3DF,1p=3D[2K],11=3D[],1q=3D[],1e=3D[],1m,1r,1O,2n,14=3DF,1x=3DF,P,1=
C,22=3DH,7=3D9(){5 b=3DA y.L!=3Dw&&A y.13!=3Dw&&A =
y.O!=3Dw,u=3DW.3V.X(),p=3DW.3X.X(),2Q=3Dp?/C/.R(p):/C/.R(u),19=3Dp?/19/.R=
(p):/19/.R(u),1P=3D/1P/.R(u)?3z(u.1j(/^.*1P\\/(\\d+(\\.\\d+)?).*$/,"$1"))=
:F,E=3D!+"\\3f",1n=3D[0,0,0],d=3DG;3(A W.2e!=3Dw&&A =
W.2e[2h]=3D=3DM){d=3DW.2e[2h].3e;3(d&&!(A =
W.29!=3Dw&&W.29[1s]&&!W.29[1s].3i)){27=3DH;E=3DF;d=3Dd.1j(/^.*\\s+(\\S+\\=
s+\\S+$)/,"$1");1n[0]=3DI(d.1j(/^(.*)\\..*$/,"$1"),10);1n[1]=3DI(d.1j(/^.=
*\\.(.*)\\s.*$/,"$1"),10);1n[2]=3D/[a-2H-Z]/.R(d)?I(d.1j(/^.*[a-2H-Z]+(.*=
)$/,"$1"),10):0}}z 3(A C.2T!=3Dw){1Y{5 a=3D3c =
2T(2B);3(a){d=3Da.21("$2q");3(d){E=3DH;d=3Dd.1f(" =
")[1].1f(",");1n=3D[I(d[0],10),I(d[1],10),I(d[2],10)]}}}1F(e){}}B{Y:b,1c:=
1n,U:1P,E:E,C:2Q,19:19}}(),3A=3D9(){3(!7.Y){B}3((A =
y.T!=3Dw&&y.T=3D=3D"20")||(A =
y.T=3D=3Dw&&(y.13("1D")[0]||y.1D))){1b()}3(!14){3(A =
y.1k!=3Dw){y.1k("38",1b,F)}3(7.E&&7.C){y.1X(2m,9(){3(y.T=3D=3D"20"){y.2O(=
2m,17.1d);1b()}});3(C=3D=3D3k){(9(){3(14){B}1Y{y.3o.3v("3x")}1F(e){1o(17.=
1d,0);B}1b()})()}}3(7.U){(9(){3(14){B}3(!/3B|20/.R(y.T)){1o(17.1d,0);B}1b=
()})()}1A(1b)}}();9 1b(){3(14){B}1Y{5 =
t=3Dy.13("1D")[0].1l(O("40"));t.N.1g(t)}1F(e){B}14=3DH;5 a=3D1p.J;D(5 =
i=3D0;i<a;i++){1p[i]()}}9 1N(a){3(14){a()}z{1p[1p.J]=3Da}}9 1A(a){3(A =
C.1k!=3Dw){C.1k("2r",a,F)}z 3(A y.1k!=3Dw){y.1k("2r",a,F)}z 3(A =
C.1X!=3Dw){2z(C,"1w",a)}z 3(A C.1w=3D=3D"9"){5 =
b=3DC.1w;C.1w=3D9(){b();a()}}z{C.1w=3Da}}9 2K(){3(27){2U()}z{1S()}}9 =
2U(){5 b=3Dy.13("1D")[0];5 o=3DO(M);o.V("2o",1s);5 t=3Db.1l(o);3(t){5 =
a=3D0;(9(){3(A t.21!=3Dw){5 d=3Dt.21("$2q");3(d){d=3Dd.1f(" =
")[1].1f(",");7.1c=3D[I(d[0],10),I(d[1],10),I(d[2],10)]}}z =
3(a<10){a++;1o(17.1d,10);B}b.1g(o);t=3DG;1S()})()}z{1S()}}9 1S(){5 =
a=3D11.J;3(a>0){D(5 i=3D0;i<a;i++){5 b=3D11[i].K;5 c=3D11[i].2F;5 =
d=3D{1a:F,K:b};3(7.1c[0]>0){5 =
e=3DL(b);3(e){3(1z(11[i].2w)&&!(7.U&&7.U<1B)){15(b,H);3(c){d.1a=3DH;d.2f=3D=
1t(b);c(d)}}z 3(11[i].1Z&&1I()){5 =
f=3D{};f.1K=3D11[i].1Z;f.16=3De.12("16")||"0";f.18=3De.12("18")||"0";3(e.=
12("1M")){f.23=3De.12("1M")}3(e.12("2d")){f.2d=3De.12("2d")}5 g=3D{};5 =
p=3De.13("2p");5 h=3Dp.J;D(5 =
j=3D0;j<h;j++){3(p[j].12("1Q").X()!=3D"25"){g[p[j].12("1Q")]=3Dp[j].12("2=
l")}}1u(f,g,b,c)}z{2N(e);3(c){c(d)}}}}z{15(b,H);3(c){5 o=3D1t(b);3(o&&A =
o.2P!=3Dw){d.1a=3DH;d.2f=3Do}c(d)}}}}}9 1t(a){5 r=3DG;5 =
o=3DL(a);3(o&&o.1U=3D=3D"M"){3(A o.2P!=3Dw){r=3Do}z{5 =
n=3Do.13(M)[0];3(n){r=3Dn}}}B r}9 =
1I(){B!1x&&1z("6.0.3Y")&&(7.C||7.19)&&!(7.U&&7.U<1B)}9 =
1u(a,b,c,d){1x=3DH;1O=3Dd||G;2n=3D{1a:F,K:c};5 =
e=3DL(c);3(e){3(e.1U=3D=3D"M"){1m=3D1W(e);1r=3DG}z{1m=3De;1r=3Dc}a.K=3D2i=
;3(A a.16=3D=3Dw||(!/%$/.R(a.16)&&I(a.16,10)<2v)){a.16=3D"2v"}3(A =
a.18=3D=3Dw||(!/%$/.R(a.18)&&I(a.18,10)<2J)){a.18=3D"2J"}y.28=3Dy.28.35(0=
,3E)+" - 2E 2Y 3j";5 =
f=3D7.E&&7.C?"37":"3K",2a=3D"3r=3D"+C.2c.3Z().1j(/&/g,"%26")+"&2V=3D"+f+"=
&2W=3D"+y.28;3(A =
b.1h!=3Dw){b.1h+=3D"&"+2a}z{b.1h=3D2a}3(7.E&&7.C&&e.T!=3D4){5 =
g=3DO("2g");c+=3D"36";g.V("K",c);e.N.2s(g,e);e.1i.1E=3D"2k";(9(){3(e.T=3D=
=3D4){e.N.1g(e)}z{1o(17.1d,10)}})()}1v(a,b,c)}}9 =
2N(a){3(7.E&&7.C&&a.T!=3D4){5 =
b=3DO("2g");a.N.2s(b,a);b.N.1H(1W(a),b);a.1i.1E=3D"2k";(9(){3(a.T=3D=3D4)=
{a.N.1g(a)}z{1o(17.1d,10)}})()}z{a.N.1H(1W(a),a)}}9 1W(a){5 =
b=3DO("2g");3(7.C&&7.E){b.2G=3Da.2G}z{5 d=3Da.13(M)[0];3(d){5 =
c=3Dd.3m;3(c){5 e=3Dc.J;D(5 =
i=3D0;i<e;i++){3(!(c[i].2I=3D=3D1&&c[i].1U=3D=3D"3q")&&!(c[i].2I=3D=3D8))=
{b.1l(c[i].3t(H))}}}}}B b}9 1v(a,b,c){5 r,1y=3DL(c);3(7.U&&7.U<1B){B =
r}3(1y){3(A a.K=3D=3Dw){a.K=3Dc}3(7.E&&7.C){5 d=3D"";D(5 i Q =
a){3(a[i]!=3D1R.1J[i]){3(i.X()=3D=3D"1K"){b.25=3Da[i]}z =
3(i.X()=3D=3D"23"){d+=3D\' 1M=3D"\'+a[i]+\'"\'}z =
3(i.X()!=3D"24"){d+=3D\' \'+i+\'=3D"\'+a[i]+\'"\'}}}5 e=3D"";D(5 j Q =
b){3(b[j]!=3D1R.1J[j]){e+=3D\'<2p 1Q=3D"\'+j+\'" 2l=3D"\'+b[j]+\'" =
/>\'}}1y.3F=3D\'<2j =
24=3D"3H:3J-3L-3N-3P-3R"\'+d+\'>\'+e+\'</2j>\';1q[1q.J]=3Da.K;r=3DL(a.K)}=
z{5 o=3DO(M);o.V("2o",1s);D(5 m Q =
a){3(a[m]!=3D1R.1J[m]){3(m.X()=3D=3D"23"){o.V("1M",a[m])}z =
3(m.X()!=3D"24"){o.V(m,a[m])}}}D(5 n Q =
b){3(b[n]!=3D1R.1J[n]&&n.X()!=3D"25"){2u(o,n,b[n])}}1y.N.1H(o,1y);r=3Do}}=
B r}9 2u(a,b,c){5 p=3DO("2p");p.V("1Q",b);p.V("2l",c);a.1l(p)}9 1G(a){5 =
b=3DL(a);3(b&&b.1U=3D=3D"M"){3(7.E&&7.C){b.1i.1E=3D"2k";(9(){3(b.T=3D=3D4=
){2y(a)}z{1o(17.1d,10)}})()}z{b.N.1g(b)}}}9 2y(a){5 b=3DL(a);3(b){D(5 i =
Q b){3(A b[i]=3D=3D"9"){b[i]=3DG}}b.N.1g(b)}}9 L(a){5 =
b=3DG;1Y{b=3Dy.L(a)}1F(e){}B b}9 O(a){B y.O(a)}9 =
2z(a,b,c){a.1X(b,c);1e[1e.J]=3D[a,b,c]}9 1z(a){5 =
b=3D7.1c,v=3Da.1f(".");v[0]=3DI(v[0],10);v[1]=3DI(v[1],10)||0;v[2]=3DI(v[=
2],10)||0;B(b[0]>v[0]||(b[0]=3D=3Dv[0]&&b[1]>v[1])||(b[0]=3D=3Dv[0]&&b[1]=
=3D=3Dv[1]&&b[2]>=3Dv[2]))?H:F}9 1V(a,b,c,d){3(7.E&&7.19){B}5 =
h=3Dy.13("33")[0];3(!h){B}5 m=3D(c&&A =
c=3D=3D"3u")?c:"3d";3(d){P=3DG;1C=3DG}3(!P||1C!=3Dm){5 =
s=3DO("1i");s.V("2o","3w/30");s.V("3y",m);P=3Dh.1l(s);3(7.E&&7.C&&A =
y.1L!=3Dw&&y.1L.J>0){P=3Dy.1L[y.1L.J-1]}1C=3Dm}3(7.E&&7.C){3(P&&A =
P.2A=3D=3DM){P.2A(a,b)}}z{3(P&&A y.2L!=3Dw){P.1l(y.2L(a+" {"+b+"}"))}}}9 =
15(a,b){3(!22){B}5 =
v=3Db?"3C":"3h";3(14&&L(a)){L(a).1i.2t=3Dv}z{1V("#"+a,"2t:"+v)}}9 =
2b(s){5 a=3D/[\\\\\\"<>\\.;]/;5 b=3Da.3G(s)!=3DG;B b&&A =
2C!=3Dw?2C(s):s}5 x=3D9(){3(7.E&&7.C){2x.1X("3I",9(){5 a=3D1e.J;D(5 =
i=3D0;i<a;i++){1e[i][0].2O(1e[i][1],1e[i][2])}5 b=3D1q.J;D(5 =
j=3D0;j<b;j++){1G(1q[j])}D(5 k Q 7){7[k]=3DG}7=3DG;D(5 l Q =
1T){1T[l]=3DG}1T=3DG})}}();B{3l:9(a,b,c,d){3(7.Y&&a&&b){5 =
e=3D{};e.K=3Da;e.2w=3Db;e.1Z=3Dc;e.2F=3Dd;11[11.J]=3De;15(a,F)}z =
3(d){d({1a:F,K:a})}},1t:9(a){3(7.Y){B =
1t(a)}},3M:9(d,e,f,g,h,l,m,n,o,p){5 =
q=3D{1a:F,K:e};3(7.Y&&!(7.U&&7.U<1B)&&d&&e&&f&&g&&h){15(e,F);1N(9(){f+=3D=
"";g+=3D"";5 a=3D{};3(o&&A o=3D=3D=3DM){D(5 i Q =
o){a[i]=3Do[i]}}a.1K=3Dd;a.16=3Df;a.18=3Dg;5 b=3D{};3(n&&A =
n=3D=3D=3DM){D(5 j Q n){b[j]=3Dn[j]}}3(m&&A m=3D=3D=3DM){D(5 k Q m){3(A =
b.1h!=3Dw){b.1h+=3D"&"+k+"=3D"+m[k]}z{b.1h=3Dk+"=3D"+m[k]}}}3(1z(h)){5 =
c=3D1v(a,b,e);3(a.K=3D=3De){15(e,H)}q.1a=3DH;q.2f=3Dc}z =
3(l&&1I()){a.1K=3Dl;1u(a,b,e,p);B}z{15(e,H)}3(p){p(q)}})}z =
3(p){p(q)}},3O:9(){22=3DF},7:7,3n:9(){B{3Q:7.1c[0],39:7.1c[1],3S:7.1c[2]}=
},3p:1z,1v:9(a,b,c){3(7.Y){B 1v(a,b,c)}z{B =
2S}},1u:9(a,b,c,d){3(7.Y&&1I()){1u(a,b,c,d)}},1G:9(a){3(7.Y){1G(a)}},1V:9=
(a,b,c,d){3(7.Y){1V(a,b,c,d)}},1N:1N,1A:1A,3U:9(a){5 =
q=3Dy.2c.2Z||y.2c.3W;3(q){3(/\\?/.R(q)){q=3Dq.1f("?")[1]}3(a=3D=3DG){B =
2b(q)}5 b=3Dq.1f("&");D(5 =
i=3D0;i<b.J;i++){3(b[i].2R(0,b[i].2M("=3D"))=3D=3Da){B =
2b(b[i].2R((b[i].2M("=3D")+1)))}}}B""},3b:9(){3(1x){5 =
a=3DL(2i);3(a&&1m){a.N.1H(1m,a);3(1r){15(1r,H);3(7.E&&7.C){1m.1i.1E=3D"3a=
"}}3(1O){1O(2n)}}1x=3DF}}}}();',62,249,'|||if||var||ua||function|||||||||=
||||||||||||||||doc|else|typeof|return|win|for|ie|false|null|true|parseIn=
t|length|id|getElementById|OBJECT|parentNode|createElement|dynamicStylesh=
eet|in|test||readyState|wk|setAttribute|nav|toLowerCase|w3|||regObjArr|ge=
tAttribute|getElementsByTagName|isDomLoaded|setVisibility|width|arguments=
|height|mac|success|callDomLoadFunctions|pv|callee|listenersArr|split|rem=
oveChild|flashvars|style|replace|addEventListener|appendChild|storedAltCo=
ntent|playerVersion|setTimeout|domLoadFnArr|objIdArr|storedAltContentId|F=
LASH_MIME_TYPE|getObjectById|showExpressInstall|createSWF|onload|isExpres=
sInstallActive|el|hasPlayerVersion|addLoadEvent|312|dynamicStylesheetMedi=
a|body|display|catch|removeSWF|replaceChild|canExpressInstall|prototype|d=
ata|styleSheets|class|addDomLoadEvent|storedCallbackFn|webkit|name|Object=
|matchVersions|swfobject|nodeName|createCSS|abstractAltContent|attachEven=
t|try|expressInstall|complete|GetVariable|autoHideShow|styleclass|classid=
|movie||plugin|title|mimeTypes|fv|urlEncodeIfNecessary|location|align|plu=
gins|ref|div|SHOCKWAVE_FLASH|EXPRESS_INSTALL_ID|object|none|value|ON_READ=
Y_STATE_CHANGE|storedCallbackObj|type|param|version|load|insertBefore|vis=
ibility|createObjParam|310|swfVersion|window|removeObjectInIE|addListener=
|addRule|SHOCKWAVE_FLASH_AX|encodeURIComponent|ShockwaveFlash|Flash|callb=
ackFn|innerHTML|zA|nodeType|137|main|createTextNode|indexOf|displayAltCon=
tent|detachEvent|SetVariable|windows|substring|undefined|ActiveXObject|te=
stPlayerVersion|MMplayerType|MMdoctitle|shockwave|Player|search|css|onrea=
dystatechange|flash|head|application|slice|SWFObjectNew|ActiveX|DOMConten=
tLoaded|minor|block|expressInstallCallback|new|screen|description|v1|docu=
ment|hidden|enabledPlugin|Installation|top|registerObject|childNodes|getF=
lashPlayerVersion|documentElement|hasFlashPlayerVersion|PARAM|MMredirectU=
RL|Shockwave|cloneNode|string|doScroll|text|left|media|parseFloat|onDomLo=
ad|loaded|visible|SWFObjectExprInst|47|outerHTML|exec|clsid|onunload|D27C=
DB6E|PlugIn|AE6D|embedSWF|11cf|switchOffAutoHideShow|96B8|major|444553540=
000|release|navigator|getQueryParamValue|userAgent|hash|platform|65|toStr=
ing|span'.split('|'),0,{}));=0A=
			}			=0A=
        },=0A=
        addDomInit: function(fn) {=0A=
            this.domInits.push(fn);=0A=
            return this.domInits.last();=0A=
        },=0A=
        domInit: function(root) {=0A=
            papl.domInits.each(function(s) {=0A=
                s(root);=0A=
            });=0A=
        },=0A=
        domInits: [],=0A=
        classes: {=0A=
        	TextInstruct: Class.create({=0A=
        		origText:null,=0A=
        		input:null,=0A=
        		initialize:function(el){=0A=
        			this.input =3D el;=0A=
        			this.origText =3D el.value;=0A=
        			el.observe('focus', this.activate.bind(this));=0A=
        			el.observe('blur', this.deactivate.bind(this));=0A=
        			this.deactivate();=0A=
        		},=0A=
        		activate:function(){=0A=
 					if(this.input.value =3D=3D this.origText){=0A=
						this.input.value =3D '';=0A=
					};=0A=
					this.input.removeClassName('faded');       		=0A=
        		},=0A=
        		deactivate:function(){=0A=
					if(this.input.value =3D=3D  this.origText || this.input.value =
=3D=3D ''){=0A=
						this.input.value =3D  this.origText;=0A=
						this.input.addClassName('faded');=0A=
					};=0A=
        		}=0A=
        	})=0A=
        }=0A=
    }=0A=
	=0A=
	if(Prototype.Browser.IE){=0A=
		Event.observe(window, 'load', papl.init.bind(papl));=0A=
	}else{=0A=
	    document.observe('dom:loaded', papl.init.bind(papl));=0A=
	}=0A=
	=0A=
})();=0A=
eval(function(p, a, c, k, e, r) { e =3D function(c) { return (c < a ? '' =
: e(parseInt(c / a))) + ((c =3D c % a) > 35 ? String.fromCharCode(c + =
29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) =
r[e(c)] =3D k[c] || e(c); k =3D [function(e) { return r[e] } ]; e =3D =
function() { return '\\w+' }; c =3D 1 }; while (c--) if (k[c]) p =3D =
p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); return p } =
('2D.5E.1P=3Dl(){t a=3D\'#\';j(8.2K(0,4)=3D=3D\'an(\'){t =
b=3D8.2K(4,8.U-1).ah(\',\');t =
i=3D0;5G{a+=3D1W(b[i]).3g()}3i(++i<3)}N{j(8.2K(0,1)=3D=3D\'#\'){j(8.U=3D=3D=
4)1Y(t =
i=3D1;i<4;i++)a+=3D(8.43(i)+8.43(i)).5p();j(8.U=3D=3D7)a=3D8.5p()}}B(a.U=3D=
=3D7?a:(J[0]||8))};D.5o=3Dl(b){B =
$A($(b).2J).6a(l(a){B(a.5n=3D=3D3?a.5m:(a.5l()?D.5o(a):\'\'))}).1I().46(\=
'\')};D.5k=3Dl(b,c){B =
$A($(b).2J).6a(l(a){B(a.5n=3D=3D3?a.5m:((a.5l()&&!D.ag(a,c))?D.5k(a,c):\'=
\'))}).1I().46(\'\')};D.6O=3Dl(a,b){a=3D$(a);a.1f({2e:(b/2G)+\'5j\'});j(1=
x.25.5i)1Q.73(0,0);B a};D.5z=3Dl(a){B =
$(a).I.1K||\'\'};D.5P=3Dl(a){af{a=3D$(a);t n=3DZ.ae(\' =
\');a.5g(n);a.72(n)}ad(e){}};t C=3D{2E:{3r:\'ac\',aa:\'a6 a5 a4 u a3 a2 =
a0, 9X 9W 9V 1Y 8 2W 29 =
9U\'},59:{5T:1x.K,68:l(a){B(-11.2V(a*11.2U)/2)+.5},9S:l(a){B =
1-a},9R:l(a){t a=3D((-11.2V(a*11.2U)/4)+.75)+11.9Q()/4;B =
a>1?1:a},9P:l(a){B(-11.2V(a*11.2U*(9*a))/2)+.5},9O:l(a,b){B(-11.2V((a*((b=
||5)-.5)*2)*11.2U)/2)+.5},9M:l(a){B =
1-(11.2V(a*4.5*11.2U)*11.9L(-a*6))},56:l(a){B 0},9J:l(a){B =
1}},55:{24:1.0,5Z:2G,3F:O,28:0.0,29:1.0,1v:0.0,1p:\'9I\'},9G:l(c){t =
d=3D\'1l:6P\';j(1x.25.44)d+=3D\';54:1\';c=3D$(c);$A(c.2J).V(l(b){j(b.5n=3D=
=3D3){b.5m.9F().V(l(a){c.32(X D(\'9C\',{I:d}).1z(a=3D=3D\' =
\'?2D.9B(9A):a),b)});D.2t(b)}})},9z:l(c,d){t e;j(((9y =
c=3D=3D\'9x\')||E.2s(c))&&(c.U))e=3Dc;N e=3D$(c).2J;t =
f=3DE.Q({64:0.1,1v:0.0},J[2]||{});t g=3Df.1v;$A(e).V(l(a,b){X =
d(a,E.Q(f,{1v:b*f.64+g}))})},51:{\'9w\':[\'9v\',\'9u\'],\'9t\':[\'9r\',\'=
9q\'],\'4Z\':[\'9p\',\'9o\']},9n:l(a,b){a=3D$(a);b=3D(b||\'4Z\').5p();t =
c=3DE.Q({1p:{1l:\'3k\',2Q:(a.Y||\'3t\'),4Y:1}},J[2]||{});C[a.9m()?C.51[b]=
[1]:C.51[b][0]](a,c)}};C.55.3y=3DC.59.68;C.5r=3D1m.1h(9l,{1q:l(){8.1b=3D[=
];8.2S=3DM},5O:l(a){8.1b.5O(a)},2k:l(a){t b=3DX 3S().5Y();t =
c=3DE.2b(a.q.1p)?a.q.1p:a.q.1p.1l;9k(c){4W\'9j\':8.1b.9i(l(e){B =
e.2j=3D=3D\'4U\'}).V(l(e){e.1L+=3Da.1M;e.1M+=3Da.1M});2M;4W\'48-6D\':b=3D=
8.1b.6H(\'1L\').6I()||b;2M;4W\'3k\':b=3D8.1b.6H(\'1M\').6I()||b;2M}a.1L+=3D=
b;a.1M+=3Db;j(!a.q.1p.4Y||(8.1b.U<a.q.1p.4Y))8.1b.18(a);j(!8.2S)8.2S=3D6N=
(8.3j.1g(8),15)},2t:l(a){8.1b=3D8.1b.2q(l(e){B =
e=3D=3Da});j(8.1b.U=3D=3D0){6V(8.2S);8.2S=3DM}},3j:l(){t a=3DX =
3S().5Y();1Y(t =
i=3D0,6Y=3D8.1b.U;i<6Y;i++)8.1b[i]&&8.1b[i].3j(a)}});C.3o=3D{4S:$H(),1R:l=
(a){j(!E.2b(a))B a;B 8.4S.1R(a)||8.4S.3u(a,X =
C.5r())}};C.9h=3DC.3o.1R(\'3t\');C.1D=3D1m.1h({1l:M,1E:l(c){l =
9g(a,b){B((a[b+\'2u\']?\'8.q.\'+b+\'2u(8);\':\'\')+(a[b]?\'8.q.\'+b+\'(8)=
;\':\'\'))}j(c&&c.3y=3D=3D=3DO)c.3y=3DC.59.5T;8.q=3DE.Q(E.Q({},C.55),c||{=
});8.4R=3D0;8.2j=3D\'4U\';8.1L=3D8.q.1v*1N;8.1M=3D8.1L+(8.q.24*1N);8.5I=3D=
8.q.29-8.q.28;8.5J=3D8.1M-8.1L;8.5K=3D8.q.5Z*8.q.24;8.36=3D(l(){l =
37(a,b){j(a.q[b+\'2u\'])a.q[b+\'2u\'](a);j(a.q[b])a.q[b](a)}B =
l(a){j(8.2j=3D=3D=3D"4U"){8.2j=3D"5N";37(8,\'9f\');j(8.2h)8.2h();37(8,\'9=
e\')}j(8.2j=3D=3D=3D"5N"){a=3D(8.q.3y(a)*8.5I)+8.q.28;8.1l=3Da;37(8,\'9c\=
');j(8.1z)8.1z(a);37(8,\'98\')}}})();8.2i(\'97\');j(!8.q.3F)C.3o.1R(E.2b(=
8.q.1p)?\'3t\':8.q.1p.2Q).2k(8)},3j:l(a){j(a>=3D8.1L){j(a>=3D8.1M){8.36(1=
.0);8.3M();8.2i(\'67\');j(8.26)8.26();8.2i(\'4J\');B}t =
b=3D(a-8.1L)/8.5J,4I=3D(b*8.5K).1r();j(4I>8.4R){8.36(b);8.4R=3D4I}}},3M:l=
(){j(!8.q.3F)C.3o.1R(E.2b(8.q.1p)?\'3t\':8.q.1p.2Q).2t(8);8.2j=3D\'95\'},=
2i:l(a){j(8.q[a+\'2u\'])8.q[a+\'2u\'](8);j(8.q[a])8.q[a](8)},3h:l(){t =
a=3D$H();1Y(3T 6r =
8)j(!E.2s(8[3T]))a.3u(3T,8[3T]);B\'#<C:\'+a.3h()+\',q:\'+$H(8.q).3h()+\'>=
\'}});C.6u=3D1m.1h(C.1D,{1q:l(a){8.1b=3Da||[];8.1E(J[1])},1z:l(a){8.1b.6v=
(\'36\',a)},26:l(b){8.1b.V(l(a){a.36(1.0);a.3M();a.2i(\'67\');j(a.26)a.26=
(b);a.2i(\'4J\')})}});C.6x=3D1m.1h(C.1D,{1q:l(b,c,d){b=3DE.2b(b)?$(b):b;t=
 =
e=3D$A(J),1S=3De.6D(),q=3De.U=3D=3D5?e[3]:M;8.1S=3DE.2s(1S)?1S.1g(b):E.2s=
(b[1S])?b[1S].1g(b):l(a){b[1S]=3Da};8.1E(E.Q({28:c,29:d},q||{}))},1z:l(a)=
{8.1S(a)}});C.S=3D1m.1h(C.1D,{1q:l(){8.1E(E.Q({24:0},J[0]||{}))},1z:1x.4H=
});C.4G=3D1m.1h(C.1D,{1q:l(a){8.u=3D$(a);j(!8.u)2m(C.2E);j(1x.25.44&&(!8.=
u.4F.6K))8.u.1f({54:1});t =
b=3DE.Q({28:8.u.4E()||0.0,29:1.0},J[1]||{});8.1E(b)},1z:l(a){8.u.94(a)}})=
;C.4C=3D1m.1h(C.1D,{1q:l(a){8.u=3D$(a);j(!8.u)2m(C.2E);t =
b=3DE.Q({x:0,y:0,6Q:\'6P\'},J[1]||{});8.1E(b)},2h:l(){8.u.4B();8.2R=3D2p(=
8.u.1o(\'17\')||\'0\');8.31=3D2p(8.u.1o(\'1a\')||\'0\');j(8.q.6Q=3D=3D\'3=
n\'){8.q.x=3D8.q.x-8.2R;8.q.y=3D8.q.y-8.31}},1z:l(a){8.u.1f({17:(8.q.x*a+=
8.2R).1r()+\'1c\',1a:(8.q.y*a+8.31).1r()+\'1c\'})}});C.93=3Dl(a,b,c){B X =
C.4C(a,E.Q({x:c,y:b},J[3]||{}))};C.92=3D1m.1h(C.1D,{1q:l(a,b){8.u=3D$(a);=
j(!8.u)2m(C.2E);t =
c=3DE.Q({3q:1d,3s:1d,5x:1d,5y:O,39:\'5B\',4w:2G.0,5F:b},J[2]||{});8.1E(c)=
},2h:l(){8.4v=3D8.q.4v||O;8.5H=3D8.u.1o(\'1l\');8.4u=3D{};[\'1a\',\'17\',=
\'2L\',\'2x\',\'2e\'].V(l(k){8.4u[k]=3D8.u.I[k]}.1g(8));8.31=3D8.u.90;8.2=
R=3D8.u.8Z;t =
b=3D8.u.1o(\'8Y-8X\')||\'2G%\';[\'5j\',\'1c\',\'%\',\'5Q\'].V(l(a){j(b.8W=
(a)>0){8.2e=3D2p(b);8.5U=3Da}}.1g(8));8.5V=3D(8.q.5F-8.q.4w)/2G;8.1G=3DM;=
j(8.q.39=3D=3D\'5B\')8.1G=3D[8.u.4q,8.u.4p];j(/^8V/.62(8.q.39))8.1G=3D[8.=
u.8U,8.u.8T];j(!8.1G)8.1G=3D[8.q.39.8R,8.q.39.8P]},1z:l(a){t =
b=3D(8.q.4w/2G.0)+(8.5V*a);j(8.q.5x&&8.2e)8.u.1f({2e:8.2e*b+8.5U});8.6b(8=
.1G[0]*b,8.1G[1]*b)},26:l(a){j(8.4v)8.u.1f(8.4u)},6b:l(a,b){t =
d=3D{};j(8.q.3q)d.2L=3Db.1r()+\'1c\';j(8.q.3s)d.2x=3Da.1r()+\'1c\';j(8.q.=
5y){t c=3D(a-8.1G[0])/2;t =
e=3D(b-8.1G[1])/2;j(8.5H=3D=3D\'3n\'){j(8.q.3s)d.1a=3D8.31-c+\'1c\';j(8.q=
.3q)d.17=3D8.2R-e+\'1c\'}N{j(8.q.3s)d.1a=3D-c+\'1c\';j(8.q.3q)d.17=3D-e+\=
'1c\'}}8.u.1f(d)}});C.6g=3D1m.1h(C.1D,{1q:l(a){8.u=3D$(a);j(!8.u)2m(C.2E)=
;t =
b=3DE.Q({6h:\'#8O\'},J[1]||{});8.1E(b)},2h:l(){j(8.u.1o(\'8M\')=3D=3D\'56=
\'){8.3M();B}8.4n=3D{};j(!8.q.8L){8.4n.6m=3D8.u.1o(\'4m-8K\');8.u.1f({6m:=
\'56\'})}j(!8.q.4l)8.q.4l=3D8.u.1o(\'4m-1J\').1P(\'#6s\');j(!8.q.4k)8.q.4=
k=3D8.u.1o(\'4m-1J\');8.4j=3D$R(0,2).1i(l(i){B =
1W(8.q.6h.2K(i*2+1,i*2+3),16)}.1g(8));8.6A=3D$R(0,2).1i(l(i){B =
1W(8.q.4l.2K(i*2+1,i*2+3),16)-8.4j[i]}.1g(8))},1z:l(a){8.u.1f({4g:$R(0,2)=
.4f(\'#\',l(m,v,i){B =
m+((8.4j[i]+(8.6A[i]*a)).1r().3g())}.1g(8))})},26:l(){8.u.1f(E.Q(8.4n,{4g=
:8.q.4k}))}});C.8J=3Dl(a){t =
b=3DJ[1]||{},4e=3DZ.8D.8C(),4a=3D$(a).42();j(b.3b)4a[1]+=3Db.3b;B X =
C.6x(M,4e.1a,4a[1],b,l(p){4c(4e.17,p.1r())})};C.4b=3D1m.1h(C.1D,{1q:l(c){=
8.u=3D$(c);j(!8.u)2m(C.2E);t =
d=3DE.Q({I:{}},J[1]||{});j(!E.2b(d.I))8.I=3D$H(d.I);N{j(d.I.3e(\':\'))8.I=
=3Dd.I.6X();N{8.u.47(d.I);8.I=3D$H(8.u.3f());8.u.71(d.I);t =
e=3D8.u.3f();8.I=3D8.I.2q(l(a){B =
a.1s=3D=3De[a.8A]});d.8z=3Dl(b){b.u.47(b.q.I);b.45.V(l(a){b.u.I[a.I]=3D\'=
\'})}}}8.1E(d)},2h:l(){l 1P(a){j(!a||[\'8y(0, 0, 0, =
0)\',\'8x\'].3e(a))a=3D\'#6s\';a=3Da.1P();B $R(0,2).1i(l(i){B =
1W(a.2K(i*2+1,i*2+3),16)})}8.45=3D8.I.1i(l(a){t =
b=3Da[0],1s=3Da[1],1w=3DM;j(1s.1P(\'#7c\')!=3D\'#7c\'){1s=3D1s.1P();1w=3D=
\'1J\'}N =
j(b=3D=3D\'1K\'){1s=3D2p(1s);j(1x.25.44&&(!8.u.4F.6K))8.u.1f({54:1})}N =
j(D.5q.62(1s)){t =
c=3D1s.2a(/^([\\+\\-]?[0-9\\.]+)(.*)$/);1s=3D2p(c[1]);1w=3D(c.U=3D=3D3)?c=
[2]:M}t =
d=3D8.u.1o(b);B{I:b.5s(),1y:1w=3D=3D\'1J\'?1P(d):2p(d||0),2f:1w=3D=3D\'1J=
\'?1P(1s):1s,1w:1w}}.1g(8)).2q(l(a){B((a.1y=3D=3Da.2f)||(a.1w!=3D\'1J\'&&=
(5v(a.1y)||5v(a.2f))))})},1z:l(a){t =
b=3D{},19,i=3D8.45.U;3i(i--)b[(19=3D8.45[i]).I]=3D19.1w=3D=3D\'1J\'?\'#\'=
+(11.1r(19.1y[0]+(19.2f[0]-19.1y[0])*a)).3g()+(11.1r(19.1y[1]+(19.2f[1]-1=
9.1y[1])*a)).3g()+(11.1r(19.1y[2]+(19.2f[2]-19.1y[2])*a)).3g():(19.1y+(19=
.2f-19.1y)*a).8w(3)+(19.1w=3D=3D=3DM?\'\':19.1w);8.u.1f(b,1d)}});C.7d=3D1=
m.1h({1q:l(a){8.4i=3D[];8.q=3DJ[1]||{};8.5A(a)},5A:l(c){c.V(l(a){a=3D$H(a=
);t =
b=3Da.8t().5C();8.4i.18($H({5D:a.8r().5C(),2W:C.4b,q:{I:b}}))}.1g(8));B =
8},8q:l(){B X C.6u(8.4i.1i(l(a){t =
b=3Da.1R(\'5D\'),2W=3Da.1R(\'2W\'),q=3Da.1R(\'q\');t =
c=3D[$(b)||$$(b)].1I();B c.1i(l(e){B X =
2W(e,E.Q({3F:1d},q))})}).1I(),8.q)}});D.3N=3D$w(\'4g 8p 8o 8n \'+\'8m 8l =
8k 8j \'+\'8i 8h 8g 8e \'+\'8d 8b 89 88 87 1J \'+\'2e 86 2x 17 85 84 =
\'+\'83 82 81 80 7Z 7Y \'+\'7X 7V 7U 1K 7T 7R \'+\'7Q 7P 7O 7N 7M =
\'+\'7L 7K 1a 2L 7J =
4M\');D.5q=3D/^(([\\+\\-]?[0-9\\.]+)(5j|7I|1c|6r|7H|7G|5Q|7F|\\%))|0$/;2D=
.4Q=3DZ.6q(\'3p\');2D.5E.6X=3Dl(){t b,3l=3D$H();j(1x.25.5i)b=3DX =
D(\'3p\',{I:8}).I;N{2D.4Q.7E=3D\'<3p =
I=3D"\'+8+\'"></3p>\';b=3D2D.4Q.2J[0].I}D.3N.V(l(a){j(b[a])3l.3u(a,b[a])}=
);j(1x.25.44&&8.3e(\'1K\'))3l.3u(\'1K\',8.2a(/1K:\\s*((?:0|1)?(?:\\.\\d*)=
?)/)[1]);B 3l};j(Z.4T&&Z.4T.6w){D.3f=3Dl(c){t d=3DZ.4T.6w($(c),M);B =
D.3N.4f({},l(a,b){a[b]=3Dd[b];B a})}}N{D.3f=3Dl(c){c=3D$(c);t =
d=3Dc.4F,38;38=3DD.3N.4f({},l(a,b){a[b]=3Dd[b];B =
a});j(!38.1K)38.1K=3Dc.4E();B 38}}C.3Y=3D{7D:l(a,b){a=3D$(a);X =
C.4b(a,E.Q({I:b},J[2]||{}));B a},7C:l(a,b,c){a=3D$(a);t =
s=3Db.7B().5s(),6C=3Ds.43(0).2r()+s.6E(1);X C[6C](a,c);B =
a},7A:l(a,b){a=3D$(a);X C.6g(a,b);B a}};$w(\'7z 4Z 7y 7x 7w 7v 7u 7t 7s =
\'+\'7r 7q 7p 7o 7n =
7m\').V(l(c){C.3Y[c]=3Dl(a,b){a=3D$(a);C[c.43(0).2r()+c.6E(1)](a,b);B =
a}});$w(\'5z 5P 6O 5o 5k =
3f\').V(l(f){C.3Y[f]=3DD[f]});D.7l(C.3Y);j(E.5b(C))2m("7k.6W 7j 7i =
7h.7g.7f\' 1b.6W 7e");t 1n=3D{2H:[],2t:l(a){8.2H=3D8.2H.2q(l(d){B =
d.u=3D=3D$(a)})},2k:l(a){a=3D$(a);t =
b=3DE.Q({8v:1d,1A:M,1j:O},J[1]||{});j(b.2d){b.3c=3D[];t =
d=3Db.2d;j(E.7b(d)){d.V(l(c){b.3c.18($(c))})}N{b.3c.18($(d))}}j(b.3d)b.3d=
=3D[b.3d].1I();D.4B(a);b.u=3Da;8.2H.18(b)},76:l(a){3D=3Da[0];1Y(i=3D1;i<a=
.U;++i)j(D.35(a[i].u,3D.u))3D=3Da[i];B 3D},70:l(a,b){t =
d;j(b.1j){d=3Da.5f}N{d=3Da.13}B b.3c.5d(l(c){B =
d=3D=3Dc})},5c:l(a,b,c){B((c.u!=3Db)&&((!c.3c)||8.70(b,c))&&((!c.3d)||(D.=
6T(b).5d(l(v){B =
c.3d.3e(v)})))&&14.6R(c.u,a[0],a[1]))},2Y:l(a){j(a.1A)D.71(a.u,a.1A);8.1k=
=3DM},3U:l(a){j(a.1A)D.47(a.u,a.1A);8.1k=3Da},2P:l(b,c){j(!8.2H.U)B;t =
d,3x=3D[];8.2H.V(l(a){j(1n.5c(b,c,a))3x.18(a)});j(3x.U>0)d=3D1n.76(3x);j(=
8.1k&&8.1k!=3Dd)8.2Y(8.1k);j(d){14.6R(d.u,b[0],b[1]);j(d.2w)d.2w(c,d.u,14=
.1u(d.1u,d.u));j(d!=3D8.1k)1n.3U(d)}},6J:l(a,b){j(!8.1k)B;14.3m();j(8.5c(=
[S.3E(a),S.3V(a)],b,8.1k))j(8.1k.6G){8.1k.6G(b,8.1k.u,a);B =
1d}},6F:l(){j(8.1k)8.2Y(8.1k)}};t =
P=3D{2o:[],2l:[],6t:l(a){j(8.2o.U=3D=3D0){8.4P=3D8.3A.3G(8);8.4N=3D8.3H.3=
G(8);8.4K=3D8.3L.3G(8);S.3P(Z,"6f",8.4P);S.3P(Z,"6e",8.4N);S.3P(Z,"6d",8.=
4K)}8.2o.18(a)},6c:l(a){8.2o=3D8.2o.2q(l(d){B =
d=3D=3Da});j(8.2o.U=3D=3D0){S.3Q(Z,"6f",8.4P);S.3Q(Z,"6e",8.4N);S.3Q(Z,"6=
d",8.4K)}},3U:l(a){j(a.q.1v){8.30=3D7S(l(){P.30=3DM;1Q.69();P.1C=3Da}.1g(=
8),a.q.1v)}N{1Q.69();8.1C=3Da}},2Y:l(){8.1C=3DM},3H:l(a){j(!8.1C)B;t =
b=3D[S.3E(a),S.3V(a)];j(8.2n&&(8.2n.3h()=3D=3Db.3h()))B;8.2n=3Db;8.1C.3H(=
a,b)},3A:l(a){j(8.30){7W(8.30);8.30=3DM}j(!8.1C)B;8.2n=3DM;8.1C.3A(a);8.1=
C=3DM},3L:l(a){j(8.1C)8.1C.3L(a)},65:l(a){8.2l.18(a);8.4D()},63:l(a){8.2l=
=3D8.2l.2q(l(o){B =
o.u=3D=3Da});8.4D()},3a:l(a,b,c){j(8[a+\'60\']>0)8.2l.V(l(o){j(o[a])o[a](=
a,b,c)});j(b.q[a])b.q[a](b,c)},4D:l(){[\'4A\',\'4z\',\'4y\'].V(l(a){P[a+\=
'60\']=3DP.2l.5W(l(o){B o[a]}).U})}};t 2c=3D1m.1h({1q:l(e){t =
f=3D{12:O,23:l(a,b,c){t d=3D11.8a(11.5S(b^2)+11.5S(c^2))*0.8c;X =
C.4C(a,{x:-c,y:-b,24:d,1p:{2Q:\'5R\',1l:\'3k\'}})},22:l(a){t =
b=3DE.8f(a.3w)?a.3w:1.0;X =
C.4G(a,{24:0.2,28:0.7,29:b,1p:{2Q:\'5R\',1l:\'3k\'},4J:l(){2c.2N[a]=3DO}}=
)},21:1N,4r:O,2z:O,G:O,1t:20,1e:15,1H:O,1v:0};j(!J[1]||E.5b(J[1].22))E.Q(=
f,{2C:l(a){a.3w=3DD.4E(a);2c.2N[a]=3D1d;X =
C.4G(a,{24:0.2,28:a.3w,29:0.7})}});t =
g=3DE.Q(f,J[1]||{});8.u=3D$(e);j(g.12&&E.2b(g.12))8.12=3D8.u.6B(\'.\'+g.1=
2,0);j(!8.12)8.12=3D$(g.12);j(!8.12)8.12=3D8.u;j(g.G&&!g.G.4c&&!g.G.8s){g=
.G=3D$(g.G);8.4h=3DD.8u(8.u,g.G)}D.4B(8.u);8.q=3Dg;8.34=3DO;8.4d=3D8.78.3=
G(8);S.3P(8.12,"74",8.4d);P.6t(8)},49:l(){S.3Q(8.12,"74",8.4d);P.6c(8)},4=
0:l(){B([1W(D.1o(8.u,\'17\')||\'0\'),1W(D.1o(8.u,\'1a\')||\'0\')])},78:l(=
a){j(!E.5b(2c.2N[8.u])&&2c.2N[8.u])B;j(S.8B(a)){t =
b=3DS.u(a);j((2I=3Db.3X.2r())&&(2I=3D=3D\'8E\'||2I=3D=3D\'8F\'||2I=3D=3D\=
'8G\'||2I=3D=3D\'8H\'||2I=3D=3D\'8I\'))B;t c=3D[S.3E(a),S.3V(a)];t =
d=3D14.42(8.u);8.3b=3D[0,1].1i(l(i){B(c[i]-d[i])});P.3U(8);S.3O(a)}},6l:l=
(a){8.34=3D1d;j(!8.2X)8.2X=3D8.40();j(8.q.21){8.6i=3D1W(D.1o(8.u,\'z-8N\'=
)||0);8.u.I.4M=3D8.q.21}j(8.q.1O){8.3K=3D8.u.8Q(1d);8.3J=3D(8.u.1o(\'1l\'=
)=3D=3D\'3n\');j(!8.3J)14.8S(8.u);8.u.13.32(8.3K,8.u)}j(8.q.G){j(8.q.G=3D=
=3D1Q){t =
b=3D8.3I(8.q.G);8.4o=3Db.17;8.4s=3Db.1a}N{8.4o=3D8.q.G.2y;8.4s=3D8.q.G.1Z=
}}P.3a(\'4A\',8,a);j(8.q.2C)8.q.2C(8.u)},3H:l(a,b){j(!8.34)8.6l(a);j(!8.q=
.2z){14.3m();1n.2P(b,8.u)}P.3a(\'4y\',8,a);8.4t(b);j(8.q.3z)8.q.3z(8);j(8=
.q.G){8.4x();t =
p;j(8.q.G=3D=3D1Q){48(8.3I(8.q.G)){p=3D[17,1a,17+2L,1a+2x]}}N{p=3D14.91(8=
.q.G);p[0]+=3D8.q.G.2y+14.7a;p[1]+=3D8.q.G.1Z+14.6M;p.18(p[0]+8.q.G.4p);p=
.18(p[1]+8.q.G.4q)}t =
c=3D[0,0];j(b[0]<(p[0]+8.q.1t))c[0]=3Db[0]-(p[0]+8.q.1t);j(b[1]<(p[1]+8.q=
.1t))c[1]=3Db[1]-(p[1]+8.q.1t);j(b[0]>(p[2]-8.q.1t))c[0]=3Db[0]-(p[2]-8.q=
.1t);j(b[1]>(p[3]-8.q.1t))c[1]=3Db[1]-(p[3]-8.q.1t);8.6n(c)}j(1x.25.5i)1Q=
.73(0,0);S.3O(a)},4L:l(a,b){8.34=3DO;j(8.q.2z){14.3m();t =
c=3D[S.3E(a),S.3V(a)];1n.2P(c,8.u)}j(8.q.1O){j(!8.3J)14.96(8.u);4O =
8.3J;D.2t(8.3K);8.3K=3DM}t =
e=3DO;j(b){e=3D1n.6J(a,8.u);j(!e)e=3DO}j(e&&8.q.5X)8.q.5X(8.u);P.3a(\'4z\=
',8,a);t f=3D8.q.4r;j(f&&E.2s(f))f=3Df(8.u);t =
d=3D8.40();j(f&&8.q.23){j(e=3D=3D0||f!=3D\'99\')8.q.23(8.u,d[1]-8.2X[1],d=
[0]-8.2X[0])}N{8.2X=3Dd}j(8.q.21)8.u.I.4M=3D8.6i;j(8.q.22)8.q.22(8.u);P.2=
Y(8);1n.6F()},3L:l(a){j(a.9a!=3DS.9b)B;8.4L(a,O);S.3O(a)},3A:l(a){j(!8.34=
)B;8.4x();8.4L(a,1d);S.3O(a)},4t:l(a){t b=3D14.42(8.u);j(8.q.1O){t =
r=3D14.9d(8.u);b[0]+=3Dr[0]-14.7a;b[1]+=3Dr[1]-14.6M}t =
d=3D8.40();b[0]-=3Dd[0];b[1]-=3Dd[1];j(8.q.G&&(8.q.G!=3D1Q&&8.4h)){b[0]-=3D=
8.q.G.2y-8.4o;b[1]-=3D8.q.G.1Z-8.4s}t =
p=3D[0,1].1i(l(i){B(a[i]-b[i]-8.3b[i])}.1g(8));j(8.q.1H){j(E.2s(8.q.1H)){=
p=3D8.q.1H(p[0],p[1],8)}N{j(E.7b(8.q.1H)){p=3Dp.1i(l(v,i){B(v/8.q.1H[i]).=
1r()*8.q.1H[i]}.1g(8))}N{p=3Dp.1i(l(v){B(v/8.q.1H).1r()*8.q.1H}.1g(8))}}}=
t =
c=3D8.u.I;j((!8.q.27)||(8.q.27=3D=3D\'5w\'))c.17=3Dp[0]+"1c";j((!8.q.27)|=
|(8.q.27=3D=3D\'3v\'))c.1a=3Dp[1]+"1c";j(c.41=3D=3D"4V")c.41=3D""},4x:l()=
{j(8.3W){6V(8.3W);8.3W=3DM;P.1B=3DM}},6n:l(a){j(!(a[0]||a[1]))B;8.1e=3D[a=
[0]*8.q.1e,a[1]*8.q.1e];8.4X=3DX 3S();8.3W=3D6N(8.G.1g(8),10)},G:l(){t =
a=3DX 3S();t =
b=3Da-8.4X;8.4X=3Da;j(8.q.G=3D=3D1Q){48(8.3I(8.q.G)){j(8.1e[0]||8.1e[1]){=
t =
d=3Db/1N;8.q.G.4c(17+d*8.1e[0],1a+d*8.1e[1])}}}N{8.q.G.2y+=3D8.1e[0]*b/1N=
;8.q.G.1Z+=3D8.1e[1]*b/1N}14.3m();1n.2P(P.2n,8.u);P.3a(\'4y\',8);j(8.4h){=
P.1B=3DP.1B||$A(P.2n);P.1B[0]+=3D8.1e[0]*b/1N;P.1B[1]+=3D8.1e[1]*b/1N;j(P=
.1B[0]<0)P.1B[0]=3D0;j(P.1B[1]<0)P.1B[1]=3D0;8.4t(P.1B)}j(8.q.3z)8.q.3z(8=
)},3I:l(w){t T,L,W,H;48(w.Z){j(w.Z.1T&&1T.1Z){T=3D1T.1Z;L=3D1T.2y}N =
j(w.Z.2g){T=3D2g.1Z;L=3D2g.2y}j(w.6p){W=3Dw.6p;H=3Dw.9s}N =
j(w.Z.1T&&1T.50){W=3D1T.50;H=3D1T.6k}N{W=3D2g.4p;H=3D2g.4q}}B{1a:T,17:L,2=
L:W,2x:H}}});2c.2N=3D{};t =
6j=3D1m.1h({1q:l(a,b){8.u=3D$(a);8.5M=3Db;8.52=3DF.3B(8.u)},4A:l(){8.52=3D=
F.3B(8.u)},4z:l(){F.5u();j(8.52!=3DF.3B(8.u))8.5M(8.u)}});t =
F=3D{79:/^[^53\\-](?:[A-9D-9E-9\\-\\53]*)[53](.*)$/,2v:{},6z:l(a){3i(a.3X=
.2r()!=3D"9H"){j(a.Y&&F.2v[a.Y])B =
a;a=3Da.13}},q:l(a){a=3DF.6z($(a));j(!a)B;B =
F.2v[a.Y]},49:l(a){a=3D$(a);t =
s=3DF.2v[a.Y];j(s){P.63(s.u);s.2O.V(l(d){1n.2t(d)});s.57.6v(\'49\');4O =
F.2v[s.u.Y]}},1h:l(b){b=3D$(b);t =
c=3DE.Q({u:b,2A:\'9K\',5t:O,1j:O,2T:\'9N\',1u:\'3v\',27:\'3v\',2d:b,12:O,=
1X:O,1v:0,1A:M,1O:O,2z:O,G:O,1t:20,1e:15,1U:8.79,6U:O,58:O,1V:1x.4H,61:1x=
.4H},J[1]||{});8.49(b);t =
d=3D{4r:1d,2z:c.2z,G:c.G,1e:c.1e,1t:c.1t,1v:c.1v,1O:c.1O,27:c.27,12:c.12}=
;j(c.2C)d.2C=3Dc.2C;j(c.23)d.23=3Dc.23;N =
j(c.1O)d.23=3Dl(a){a.I.1a=3D0;a.I.17=3D0};j(c.22)d.22=3Dc.22;j(c.21)d.21=3D=
c.21;t f=3D{1u:c.1u,2d:c.2d,1j:c.1j,1A:c.1A,2w:F.2w};t =
g=3D{2w:F.5L,1u:c.1u,2d:c.2d,1A:c.1A};D.9T(b);c.57=3D[];c.2O=3D[];j(c.5t|=
|c.1j){1n.2k(b,g);c.2O.18(b)}(c.6U||8.2B(b,c)||[]).V(l(e,i){t =
a=3Dc.58?$(c.58[i]):(c.12?$(e).5W(\'.\'+c.12)[0]:e);c.57.18(X =
2c(e,E.Q(d,{12:a})));1n.2k(e,f);j(c.1j)e.5f=3Db;c.2O.18(e)});j(c.1j){(F.7=
7(b,c)||[]).V(l(e){1n.2k(e,g);e.5f=3Db;c.2O.18(e)})}8.2v[b.Y]=3Dc;P.65(X =
6j(b,c.61))},2B:l(a,b){B D.3Z(a,b.1X,b.1j?1d:O,b.2A)},77:l(a,b){B =
D.3Z(a,b.1X,b.1j?1d:O,b.2T)},2w:l(a,b,c){j(D.35(b,a))B;j(c>.33&&c<.66&&F.=
q(b).1j){B}N j(c>0.5){F.5a(b,\'9Y\');j(b.9Z!=3Da){t =
d=3Da.13;a.I.41=3D"4V";b.13.32(a,b);j(b.13!=3Dd)F.q(d).1V(a);F.q(b.13).1V=
(a)}}N{F.5a(b,\'6Z\');t e=3Db.a1||M;j(e!=3Da){t =
d=3Da.13;a.I.41=3D"4V";b.13.32(a,e);j(b.13!=3Dd)F.q(d).1V(a);F.q(b.13).1V=
(a)}}},5L:l(a,b,c){t d=3Da.13;t e=3DF.q(b);j(!D.35(b,a)){t f;t =
g=3DF.2B(b,{2A:e.2A,1X:e.1X});t h=3DM;j(g){t =
i=3DD.2Z(b,e.1u)*(1.0-c);1Y(f=3D0;f<g.U;f+=3D1){j(i-D.2Z(g[f],e.1u)>=3D0)=
{i-=3DD.2Z(g[f],e.1u)}N =
j(i-(D.2Z(g[f],e.1u)/2)>=3D0){h=3Df+1<g.U?g[f+1]:M;2M}N{h=3Dg[f];2M}}}b.3=
2(a,h);F.q(d).1V(a);e.1V(a)}},5u:l(){j(F.1F)F.1F.6y()},5a:l(a,b){t =
c=3DF.q(a.13);j(c&&!c.1O)B;j(!F.1F){F.1F=3D($(\'6o\')||D.Q(Z.6q(\'a7\')))=
.6y().47(\'6o\').1f({1l:\'3n\'});Z.a8("2g").a9(0).5g(F.1F)}t =
d=3D14.42(a);F.1F.1f({17:d[0]+\'1c\',1a:d[1]+\'1c\'});j(b=3D=3D\'6Z\')j(c=
.1u=3D=3D\'5w\')F.1F.1f({17:(d[0]+a.50)+\'1c\'});N =
F.1F.1f({1a:(d[1]+a.6k)+\'1c\'});F.1F.2P()},5e:l(a,b,c){t =
d=3DF.2B(a,b)||[];1Y(t i=3D0;i<d.U;++i){t e=3Dd[i].Y.2a(b.1U);j(!e)ab;t =
f=3D{Y:3R(e?e[1]:M),u:a,5h:c,2F:[],1l:c.2F.U,3C:$(d[i]).6B(b.2T)};j(f.3C)=
8.5e(f.3C,b,f);c.2F.18(f)}B c},1j:l(a){a=3D$(a);t b=3D8.q(a);t =
c=3DE.Q({2A:b.2A,2T:b.2T,1X:b.1X,3r:a.Y,1U:b.1U},J[1]||{});t =
d=3D{Y:M,5h:M,2F:[],3C:a,1l:0};B F.5e(a,c,d)},6S:l(a){t =
b=3D\'\';5G{j(a.Y)b=3D\'[\'+a.1l+\']\'+b}3i((a=3Da.5h)!=3DM);B =
b},6L:l(b){b=3D$(b);t c=3DE.Q(8.q(b),J[1]||{});B =
$(8.2B(b,c)||[]).1i(l(a){B =
a.Y.2a(c.1U)?a.Y.2a(c.1U)[1]:\'\'})},ai:l(b,c){b=3D$(b);t =
d=3DE.Q(8.q(b),J[2]||{});t =
e=3D{};8.2B(b,d).V(l(n){j(n.Y.2a(d.1U))e[n.Y.2a(d.1U)[1]]=3D[n,n.13];n.13=
.72(n)});c.V(l(a){t n=3De[a];j(n){n[1].5g(n[0]);4O =
e[a]}})},3B:l(b){b=3D$(b);t c=3DE.Q(F.q(b),J[1]||{});t =
d=3D3R((J[1]&&J[1].3r)?J[1].3r:b.Y);j(c.1j){B =
F.1j(b,J[1]).2F.1i(l(a){B[d+F.6S(a)+"[Y]=3D"+3R(a.Y)].aj(a.2F.1i(J.ak))})=
.1I().46(\'&\')}N{B F.6L(b,J[1]).1i(l(a){B =
d+"[]=3D"+3R(a)}).46(\'&\')}}};D.35=3Dl(a,b){j(!a.13||a=3D=3Db)B =
O;j(a.13=3D=3Db)B 1d;B D.35(a.13,b)};D.3Z=3Dl(b,c,d,f){j(!b.5l())B =
M;f=3Df.2r();j(c)c=3D[c].1I();t =
g=3D[];$A(b.2J).V(l(e){j(e.3X&&e.3X.2r()=3D=3Df&&(!c||(D.6T(e).5d(l(v){B =
c.3e(v)}))))g.18(e);j(d){t =
a=3DD.3Z(e,c,d,f);j(a)g.18(a)}});B(g.U>0?g.1I():[])};D.2Z=3Dl(a,b){B =
a[\'3b\'+((b=3D=3D\'3v\'||b=3D=3D\'2x\')?\'al\':\'am\')]};', 62, 644, =
'||||||||this|||||||||||if||function|||||options|||var|element|||||||retu=
rn|Effect|Element|Object|Sortable|scroll||style|arguments|||null|else|fal=
se|Draggables|extend||Event||length|each||new|id|document||Math|handle|pa=
rentNode|Position|||left|push|transform|top|effects|px|true|scrollSpeed|s=
etStyle|bind|create|map|tree|last_active|position|Class|Droppables|getSty=
le|queue|initialize|round|value|scrollSensitivity|overlap|delay|unit|Prot=
otype|originalValue|update|hoverclass|_lastScrollPointer|activeDraggable|=
Base|start|_marker|dims|snap|flatten|color|opacity|startOn|finishOn|1000|=
ghosting|parseColor|window|get|method|documentElement|format|onChange|par=
seInt|only|for|scrollTop||zindex|endeffect|reverteffect|duration|Browser|=
finish|constraint|from|to|match|isString|Draggable|containment|fontSize|t=
argetValue|body|setup|event|state|add|observers|throw|_lastPointer|drags|=
parseFloat|reject|toUpperCase|isFunction|remove|Internal|sortables|onHove=
r|height|scrollLeft|quiet|tag|findElements|starteffect|String|_elementDoe=
sNotExistError|children|100|drops|tag_name|childNodes|slice|width|break|_=
dragging|droppables|show|scope|originalLeft|interval|treeTag|PI|cos|effec=
t|delta|deactivate|offsetSize|_timeout|originalTop|insertBefore||dragging=
|isParent|render|dispatch|styles|scaleMode|notify|offset|_containers|acce=
pt|include|getStyles|toColorPart|inspect|while|loop|end|styleRules|prepar=
e|absolute|Queues|div|scaleX|name|scaleY|global|set|vertical|_opacity|aff=
ected|transition|change|endDrag|serialize|container|deepest|pointerX|sync=
|bindAsEventListener|updateDrag|_getWindowScroll|_originallyAbsolute|_clo=
ne|keyPress|cancel|CSS_PROPERTIES|stop|observe|stopObserving|encodeURICom=
ponent|Date|property|activate|pointerY|scrollInterval|tagName|Methods|fin=
dChildren|currentDelta|visibility|cumulativeOffset|charAt|IE|transforms|j=
oin|addClassName|with|destroy|elementOffsets|Morph|scrollTo|eventMouseDow=
n|scrollOffsets|inject|backgroundColor|_isScrollChild|tracks|_base|restor=
ecolor|endcolor|background|oldStyle|originalScrollLeft|offsetWidth|offset=
Height|revert|originalScrollTop|draw|originalStyle|restoreAfterFinish|sca=
leFrom|stopScrolling|onDrag|onEnd|onStart|makePositioned|Move|_cacheObser=
verCallbacks|getOpacity|currentStyle|Opacity|emptyFunction|frame|afterFin=
ish|eventKeypress|finishDrag|zIndex|eventMouseMove|delete|eventMouseUp|__=
parseStyleElement|currentFrame|instances|defaultView|idle|hidden|case|las=
tScrolled|limit|appear|clientWidth|PAIRS|lastValue|_|zoom|DefaultOptions|=
none|draggables|handles|Transitions|mark|isUndefined|isAffected|detect|_t=
ree|treeNode|appendChild|parent|WebKit|em|collectTextNodesIgnoreClass|has=
ChildNodes|nodeValue|nodeType|collectTextNodes|toLowerCase|CSS_LENGTH|Sco=
pedQueue|camelize|dropOnEmpty|unmark|isNaN|horizontal|scaleContent|scaleF=
romCenter|getInlineOpacity|addTracks|box|first|ids|prototype|scaleTo|do|e=
lementPositioning|fromToDelta|totalTime|totalFrames|onEmptyHover|observer=
|running|_each|forceRerendering|pt|_draggable|abs|linear|fontSizeType|fac=
tor|select|onDropped|getTime|fps|Count|onUpdate|test|removeObserver|speed=
|addObserver||beforeFinish|sinoidal|focus|collect|setDimensions|unregiste=
r|keypress|mousemove|mouseup|Highlight|startcolor|originalZ|SortableObser=
ver|clientHeight|startDrag|backgroundImage|startScrolling|dropmarker|inne=
rWidth|createElement|in|ffffff|register|Parallel|invoke|getComputedStyle|=
Tween|hide|_findRootElement|_delta|down|klass|last|substring|reset|onDrop=
|pluck|max|fire|hasLayout|sequence|deltaY|setInterval|setContentZoom|rela=
tive|mode|within|_constructIndex|classNames|elements|clearInterval|js|par=
seStyle|len|after|isContained|removeClassName|removeChild|scrollBy|moused=
own||findDeepestChild|findTreeElements|initDrag|SERIALIZE_RULE|deltaX|isA=
rray|zzzzzz|Transform|library|us|aculo|script|including|requires|dragdrop=
|addMethods|dropOut|switchOff|squish|puff|shake|pulsate|slideDown|slideUp=
|blindDown|blindUp|fold|shrink|grow|fade|highlight|dasherize|visualEffect=
|morph|innerHTML|pc|mm|cm|ex|wordSpacing|textIndent|right|paddingTop|padd=
ingRight|paddingLeft|paddingBottom|outlineWidth|outlineOffset|setTimeout|=
outlineColor|minWidth|minHeight|clearTimeout|maxWidth|maxHeight|markerOff=
set|marginTop|marginRight|marginLeft|marginBottom|lineHeight|letterSpacin=
g|fontWeight|clip|bottom|borderTopWidth|sqrt|borderTopStyle|02|borderTopC=
olor|borderSpacing|isNumber|borderRightWidth|borderRightStyle|borderRight=
Color|borderLeftWidth|borderLeftStyle|borderLeftColor|borderBottomWidth|b=
orderBottomStyle|borderBottomColor|backgroundPosition|play|keys|outerHTML=
|values|childOf|greedy|toFixed|transparent|rgba|afterFinishInternal|key|i=
sLeftClick|getScrollOffsets|viewport|INPUT|SELECT|OPTION|BUTTON|TEXTAREA|=
ScrollTo|image|keepBackgroundImage|display|index|ffff99|originalWidth|clo=
neNode|originalHeight|absolutize|scrollWidth|scrollHeight|content|indexOf=
|size|font|offsetLeft|offsetTop|page|Scale|MoveBy|setOpacity|finished|rel=
ativize|beforeStart|afterUpdate|failure|keyCode|KEY_ESC|beforeUpdate|real=
Offset|afterSetup|beforeSetup|codeForEvent|Queue|findAll|front|switch|Enu=
merable|visible|toggle|Fade|Appear|BlindUp|BlindDown|innerHeight|blind|Sl=
ideUp|SlideDown|slide|object|typeof|multiple|160|fromCharCode|span|Za|z0|=
toArray|tagifyText|BODY|parallel|full|li|exp|spring|ul|pulse|wobble|rando=
m|flicker|reverse|cleanWhitespace|operate|required|is|but|before|previous=
Sibling|exist|nextSibling|not|does|DOM|specified|The|DIV|getElementsByTag=
Name|item|message|continue|ElementDoesNotExistError|catch|createTextNode|=
try|hasClassName|split|setSequence|concat|callee|Height|Width|rgb'.split(=
'|'), 0, {}))
------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media3.washingtonpost.com/wp-srv/ad/ad_v2.js

// BEGIN import rev. science segments
//if (document.domain !=3D '')
//{=09
	//document.write('<s\cript type=3D"text/javascript" =
src=3D"http://js.revsci.net/gateway/gw.js?csid=3DJ05531"></s\cript>');
//}
// END import rev. science segments


function dateToString(date) {
var yyyy =3D date.getYear();
var mm =3D date.getMonth() + 1;
var dd =3D date.getDate();
var hour =3D date.getHours();
var min =3D date.getMinutes();

if (mm < 10) mm =3D "0"+mm;
if (dd < 10) dd =3D "0"+dd;
if (hour < 10) hour =3D "0"+hour;
if (min < 10) min =3D "0"+min;
return ''+mm+dd+hour+min;
}


function estOffset(dateObj)
{
	var mo =3D dateObj.getMonth()+1;
	if (mo < 2 || mo > 10) return 300;
	if (mo > 2 && mo < 10) return 240;
	var last_sunday_index =3D   ( ( dateObj.getDate() - dateObj.getDay() - =
1 ) / 7) + 1;
	if(mo=3D=3D2)
	{
	  return ( last_sunday_index > 2 || (last_sunday_index =3D=3D 2 && =
dateObj.getHours() >=3D 2))?240:300
	}
	else
	{
	 return ( last_sunday_index > 1 || (last_sunday_index =3D=3D 1 && =
dateObj.getHours() >=3D 2))?300:240;
	}
}

if(typeof estNow =3D=3D 'undefined' || typeof estNowWithYear =3D=3D =
'undefined')
{
	var estNow =3D new Date();
	var estNowInMillis =3D estNow.getTime();
	var millisFromEST =3D (estNow.getTimezoneOffset() - estOffset(estNow)) =
* 60000;
	var estNow =3D new Date( estNowInMillis + millisFromEST )
	var estNowWithYear =3D estNow.getYear();
	var estNowWithYear =3D (estNowWithYear < 1900 )?estNowWithYear + =
1900:estNowWithYear;
	estNowWithYear =3D estNowWithYear.toString() + =
dateToString(estNow).toString() ;
}


//11092-MB-218518324,218518336,218518343
time_space =3D ((estNowWithYear <=3D '200912312359') || =
location.href.indexOf('all_ads') !=3D -1)?true:false;

//hack for ie6 apple issue on leftcol
/*if(estNowWithYear < '200903042359' && =
navigator.userAgent.toLowerCase().match('msie 6'))
{
	document.write('<st' + 'yle>#container #top .lftcol =
{position:relative;top:-128px;left:-12px;}#container #Ttab-display =
{position:static}</st' + 'yle>')=09
}*/

wpniSite =3D 'wpni';
wpniDomain =3D 'washingtonpost.com';

function trimAll(sString,toTrim)=20
		{
			if(typeof sString =3D=3D 'undefined' || !sString) return '';
		=09
			while (sString.substring(0,1) =3D=3D toTrim)
			{
				sString =3D sString.substring(1, sString.length);
			}
			while (sString.substring(sString.length-1, sString.length) =3D=3D =
toTrim)
			{
				sString =3D sString.substring(0,sString.length-1);
			}
			return sString;
		}
	=09
function pageId()
		{
			var pageIdStringRoot =3D (typeof pageIdRoot !=3D =
'undefined')?pageIdRoot:wpniSite;
			if(typeof this.returnValue=3D=3D'undefined')
			{
				this.pIdReturnValue =3D location.href.split('?')[0];
				this.pIdReturnValue =3D this.pIdReturnValue.split(';')[0];
			=09
				if(this.pIdReturnValue.lastIndexOf('.') > =
this.pIdReturnValue.lastIndexOf('/'))
				{
					this.pIdReturnValue =3D =
this.pIdReturnValue.substring(0,this.pIdReturnValue.lastIndexOf('.'))
				}
				if(this.pIdReturnValue.lastIndexOf('index') > =
this.pIdReturnValue.lastIndexOf('/') || =
this.pIdReturnValue.lastIndexOf('default') > =
this.pIdReturnValue.lastIndexOf('/'))
				{
					this.pIdReturnValue =3D =
this.pIdReturnValue.substring(0,this.pIdReturnValue.lastIndexOf('/'))
				}
				//take off domain name and protocol declaration
				this.pIdReturnValue =3D =
this.pIdReturnValue.split(document.domain)[1]
				//trim slashes from start and end
				this.pIdReturnValue=3DtrimAll(this.pIdReturnValue,'/')
				this.pIdReturnValue=3Dthis.pIdReturnValue.replace(/[\/\.]/gi,'-')

				//strip out any hash or plus characters
				this.pIdReturnValue=3Dthis.pIdReturnValue.replace(/#|\+/gi,'')
			=09
				if(this.pIdReturnValue=3D=3D'')
				{
					this.pIdReturnValue =3D pageIdStringRoot
				}
			}
			return 'pageId=3D' + pageIdStringRoot + '-' + this.pIdReturnValue + =
';'
		}
	=09
function getCookie(name) {
	var cookie =3D " " + document.cookie;
	var search =3D " " + name + "=3D";
	var setStr =3D null;
	var offset =3D 0;
	var end =3D 0;
	if (cookie.length > 0) {
		offset =3D cookie.indexOf(search);
		if (offset !=3D -1) {
			offset +=3D search.length;
			end =3D cookie.indexOf(";", offset)
			if (end =3D=3D -1) {
				end =3D cookie.length;
			}
			setStr =3D unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}

var adOpsLocalFlag =3D (getCookie('WPATC') && =
getCookie('WPATC').match('C=3D1:'))?true:false;


function aptco()
{
	/*var a =3D getQSValue('aptco');
	var b =3D getQSValue('metro');*/
	var a =3D urlCheck('aptco',{'type':'variable'});
	var b =3D urlCheck('metro',{'type':'variable'});
	if(a && b)
	{
		return 'aptco=3D' + a + ';metro=3D' + b + ';';
	}=20
	return '';
}

function mediaPage()
{
=09
	if( (  typeof thisNode !=3D 'undefined' && =
thisNode.match(/media|photo|video/) || typeof commercialNode !=3D =
'undefined' && commercialNode.match(/media|photo|video/) ) || =
location.href.match(/video|gallery|scene-in|mobile/) )
	{
	=09
		return '!c=3Dmedia;'
	}
	return '';
}

function print_kv()
{
	return (urlCheck('_pf.htm'))?'print=3Dy;':'';
}

function adopsDebugToggle()
{
	var toggleButton =3D document.getElementById('adopsDebugToggle');
	var adopsDebugDiv =3D document.getElementById('adopsDebugDiv');
	adopsDebugDiv.style.display =3D (toggleButton.innerHTML =3D=3D 'Show =
Data')?'block':'none';
	toggleButton.innerHTML =3D (toggleButton.innerHTML =3D=3D 'Show =
Data')?'Hide Data':'Show Data';
=09
}

function beta_kv()
{
	return(typeof commercialNode !=3D 'undefined' && =
commercialNode=3D=3D'washingtonpost.com')?'beta=3Dn;':'';=09
}

function adopsDebug(_str)
{
	if(!location.href.match('debugAdCode') && =
!location.href.match('adopsDebug') && !location.href.match('allAds')) =
return;
						  =20
	if(!document.getElementById('adopsDebugDiv'))
	{
		debugDiv =3D document.createElement('DIV');
		debugDiv.style.fontSize =3D '9px';
		debugDiv.style.textAlign =3D 'left';
		debugDiv.style.fontFamily =3D 'verdana,arial,helvetica';
		debugDiv.style.padding =3D "10px";
		debugDiv.style.marginBottom =3D "10px";
		debugDiv.style.borderBottom =3D "1px solid #a8a1a1";
		debugDiv.style.backgroundColor=3D "#e1e1e8";
		debugDiv.innerHTML =3D "<p style=3D'margin:0px 0px 5px =
0px;padding:0px;font-size:14px;color:#272127'>WPNI AdOps Debug =
Info&nbsp;<a href=3D'javascript:adopsDebugToggle()' =
style=3D'font-weight:bold;font-size:10px' id=3D'adopsDebugToggle'>Show =
Data</a></p>"
		debugDivContent =3D document.createElement('DIV');
		debugDivContent.setAttribute('id','adopsDebugDiv');
		debugDivContent.style.display =3D "none";
		debugDiv.appendChild(debugDivContent);
		document.body.insertBefore(debugDiv, document.body.firstChild);
	}
	document.getElementById('adopsDebugDiv').innerHTML +=3D _str;
}


function urlCheck( arg )
{

	if(arguments[1] && typeof arguments[1]=3D=3D'object')
	{
		var obj =3D arguments[1];
		var loc =3D (obj.parent || !obj.self)	? parent.location.href : =
self.location.href ;
		var regex =3D (obj.type=3D=3D'variable') ? new RegExp( =
"[\\?&;]"+arg+"=3D([^&#?]*)" ) : new RegExp( arg ) ;
	}
	else
	{
		var loc =3D self.location.href;
		var regex =3D new RegExp(arg);
	}
	var results =3D regex.exec( loc ) ;
	return (results=3D=3Dnull)?null:results[results.length-1];
=09
}

function socialMediaSite(){
	var dReferrer=3D(document.referrer!=3D'')?document.referrer:false;
	var =
smSites=3D['facebook.com','digg.com','reddit.com','myspace.com','newstrus=
t.net','twitter.com','delicious.com','stumbleupon.com'];
	var smCount=3DsmSites.length;
	if(dReferrer){
		for(var a=3D0;a<smCount;a++){
			if(dReferrer.match(smSites[a])){
				return 'social=3Dy;'
			}
		}
	}
	return ''
}

function debugIframeAds()
{

	if(document.getElementsByTagName('iframe'))
	{
		var iframe =3D document.getElementsByTagName('iframe');
		var num_of_iframes =3D document.getElementsByTagName('iframe').length;
		for(var i=3D0;i<num_of_iframes;i++)
		{
			if(iframe[i].src.match('http://ad.doubleclick.net/adi/wpni') && =
!iframe[i].src.match('inlinead'))
			{
				var b =3D document.createElement('DIV');
				var c =3D document.createElement('DIV');
				c.style.margin =3D '5px' ;
				c.innerHTML =3D iframe[i].src + '&nbsp;<a href=3D"'+iframe[i].src+'" =
target=3D"_blank">[&#187;]</a>';
				b.appendChild(c);
			=09
				var bStyleArray =3D { overflow : 'scroll', backgroundColor : =
'#FFAA00', color : '#770000', width : '300px' };
			=09
				for(j in bStyleArray)
				{
					b.style[j] =3D bStyleArray[j];
				}

				iframe[i].parentNode.insertBefore(b,iframe[i]);
			}
		}
	}

}

if(document.location.href.match('debugAdCode'))
{
	addLoadEvent(debugIframeAds)
}


//start of demo ad code
if( urlCheck('demoAds',{'type':'variable'}) )
{=09
	demo_ads_qs_val =3D urlCheck('demoAds',{'type':'variable'});
=09
	commercialNode =3D 'test';
=09
	adTemplate =3D 0;
	var demoAdTypes =3D =
['banner_flex_top','banner_flex_bottom','sky_left','sky_right','bigbox_fl=
ex','big_flex_right','ad_links_right','ad_links_bottom','textlinks','vm',=
'sponsorship','tile_left','tile_right','tile_right_top','tile_right_top2'=
,'top_jobs','google_links','tile_right','tile_bottom','traffic_tile','big=
_box']
	var demoQS =3D demo_ads_qs_val.toLowerCase().split(';')
=09
	for(var a =3D 0; demoQS[a]; a++)
	{
		for(var b =3D 0; demoAdTypes[b]; b++)
		{
			if(demoQS[a] =3D=3D demoAdTypes[b])
			{	=09
				adTemplate +=3D 1 << b;=09
			}
		}
	}
}
//end of demo ad code


function dcNodeOverride()
{
	if(urlCheck('dcnode=3D'))
	{
		var theUrl =3D urlCheck('dcnode',{'type':'variable'});
	}
	return (typeof theUrl !=3D 'undefined' && theUrl!=3D'')?theUrl:'test';
}



function getQSValue( name )
{
	  var locString=3D(arguments[1])?arguments[1]:window.location.href;
//first test to see if the qs variable at all. if not, return null.
  var regex =3D new RegExp( "[\\?&;]"+name );
  var results =3D regex.exec( locString );
  if(!results) return null;
//ok, it's there. get the value.

  var regex =3D new RegExp( "[\\?&;]"+name+"=3D([^&#]*)" );
  var results =3D regex.exec( locString );
  return (results=3D=3Dnull)?"":results[1]
}




function doubleClickTestCode()
{
	if(typeof this.dctCodeValue =3D=3D 'undefined')
	{
		this.dctCodeValue =3D '';
		//var queryResult =3D getQSValue('test_ads');
		var queryResult =3D urlCheck('test_ads',{'type':'variable'});
=09
		if(queryResult !=3D null)
		{
			this.dctCodeValue =3D 'kw=3Dtest_' + =
((queryResult!=3D'')?queryResult:'ads') + ';';=09
		}
	}
	return this.dctCodeValue
}

//hack for JF ads
=09
	if (location.href.indexOf('politicalads') !=3D -1) {thisNode =3D =
'politics'; commercialNode=3D'politics'}
=09
function getQueryVariable(variable)
{=20
=09
	var query =3D location.href.split('?')[1];=20
	if(!query)
	{
		return null
	}
	var vars =3D query.split("&");
	for (var i=3D0;i<vars.length;i++)
	{=20
		var pair =3D vars[i].split("=3D");=20
		if (pair[0] =3D=3D variable)
		{=20
		=09
			return pair[1];=20
		}=20
	}
	return null
}=20



var contComments =3D "";

if(location.href.match('content/article') && =
location.href.match('_comments.html'))
{
	contComments =3D "category!=3Dcomments";
}

if(location.href.match('AR2008053003121'))
{
	contComments =3D "!category=3Dnorthrop;";
}

if(location.href.match('jobs/home'))
{
	commercialNode =3D 'jobs/front';
}


function realEstateAreaId()
    {
    	if(typeof this.returnREAIValue =3D=3D 'undefined')
    	{
    		this.returnREAIValue =3D '';
	   		if(getQueryVariable('areaId'))
    		{
    			this.returnREAIValue =3D 'areaId=3D' + getQueryVariable('areaId') =
+ ";"
    		}
    		if(typeof hs !=3D 'undefined' && typeof hs.geo_area_id !=3D =
'undefined')
    		{
    			geo_area_id_array =3D hs.geo_area_id.split(';');
    			for(var x =3D0; x < geo_area_id_array.length; x++)
    			{
    				if(typeof geo_area_id_array[x] =3D=3D 'string')
					{
						this.returnREAIValue +=3D 'areaId=3D' + geo_area_id_array[x] + ';'
					}
    			}
    		}
    	}
    	return this.returnREAIValue
    }

function popUnders()
{
	//these two variables control everything=09
	maxPer24 =3D 5;
	minutesBetween =3D 2;
	//end
	minuteInMillis =3D 60000;
	dayInMillis =3D 86400000;
	rightNow =3D new Date();
	rightNowNum =3D parseInt(rightNow.getTime());
	rightNowPlusDay =3D rightNowNum + dayInMillis;
	rightNowPlusMonth =3D rightNowNum + (dayInMillis * 28);
	//rightNowPlusYear =3D rightNowNum + (dayInMillis * 365);
	rightNowPlusDayString =3D new Date(rightNowPlusDay);
	rightNowPlusMonthString =3D new Date(rightNowPlusMonth);
	//rightNowPlusYearString =3D new Date(rightNowPlusYear);

	popUnderRetValue =3D ''
	=09
	if (getCookie('popUnderAds'))
	{=09
		cookieString=3DgetCookie('popUnderAds');
	=09
		cookieArray=3DcookieString.split('/');

		newCookieArray =3D new Array();
		newCookieArrayIndex =3D 0;=09
	=09
		for(var x=3D1;x<cookieArray.length+1;x++)
		{	var z =3D parseInt(rightNowNum) - parseInt(cookieArray[x]);
			if(z < dayInMillis)
			{=09
				newCookieArray[newCookieArrayIndex] =3D cookieArray[x];
				newCookieArrayIndex++;
				testOutputDate =3D new Date(parseInt(cookieArray[x]));
			}
		}
	=09
	=09
		var underDailyLimit =3D newCookieArray.length < maxPer24;
		var enufTimeSinceLast =3D rightNowNum - =
parseInt(newCookieArray[newCookieArray.length-1]) > (minutesBetween * =
minuteInMillis);
		var noPopOnLastPage=3DcookieString.match('popOnLast=3Dfalse/');
		newCookieString =3D "popOnLast=3Dfalse/";
	=09
		if((underDailyLimit && noPopOnLastPage && enufTimeSinceLast) || =
newCookieArray.length =3D=3D 0)
		{
			popUnderRetValue =3D 'ad=3Dpop;';
			newCookieArray.push(rightNowNum);
			newCookieString =3D "popOnLast=3Dtrue/";
		}
		else
		{
		=09
		}
=09
	=09
		for(var x=3D0;x<newCookieArray.length;x++)
		{
			newCookieString +=3D newCookieArray[x] + '/';
		}
	=09
		newCookieString =3D =
newCookieString.substring(0,newCookieString.length-1);
		=
setCookie('popUnderAds',''+newCookieString+'',''+rightNowPlusMonthString.=
toString()+'','/','.washingtonpost.com','');

	}
	else
	{=09
		//make sure you can write a cookie at all
		=
setCookie('popUnderAds','*',''+rightNowPlusMonthString.toString()+'','/',=
'.washingtonpost.com','');
		if(!getCookie('popUnderAds'))
		{
			return '';
		}
		//if so, proceed
	=09
		=
setCookie('popUnderAds','popOnLast=3Dtrue/'+rightNowNum+'',''+rightNowPlu=
sMonthString.toString()+'','/','.washingtonpost.com','');
		popUnderRetValue=3D'ad=3Dpop;'
	}
	return popUnderRetValue;
}

function isAnyOfTheseInTheUrl()
{
	var returnValue =3D false;
		for(var x=3D0;x<arguments.length;x++)
		{
			if(location.href.match(arguments[x]))
			{
				returnValue =3D true;
			}
		}
	return returnValue
}

function interstitials(dir)
{=09
	if(!(dir.execute && dir.dfp_server =3D=3D 'adj')) return '';
=09
	//date directive: 9302/LY
	if( location.href.match('force_interstitials') || ( !(estNowWithYear > =
'200903190900' && estNowWithYear < '200903191100' && commercialNode =
=3D=3D 'washingtonpost.com') && typeof this.intReturnValue =3D=3D =
'undefined' && /*isAnyOfTheseInTheUrl('washingtonpost.com') &&*/ =
!isAnyOfTheseInTheUrl('no_interstitials','g=3D0') ) )
	{
		popUnderVal =3D =
(!isAnyOfTheseInTheUrl('g=3D1','g=3D0','o=3D','sid=3D','reload=3Dtrue'))?=
popUnders():'';
		this.intReturnValue =3D "dcopt=3Dist;" + popUnderVal;
	}
	else
	{
			this.intReturnValue =3D ''
	}
	return this.intReturnValue;
}


function getCookie(name) {
	var cookie =3D " " + document.cookie;
	var search =3D " " + name + "=3D";
	var setStr =3D null;
	var offset =3D 0;
	var end =3D 0;
	if (cookie.length > 0) {
		offset =3D cookie.indexOf(search);
		if (offset !=3D -1) {
			offset +=3D search.length;
			end =3D cookie.indexOf(";", offset)
			if (end =3D=3D -1) {
				end =3D cookie.length;
			}
			setStr =3D unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}

function setCookie (name, value, expires, path, domain, secure) {
      document.cookie =3D name + "=3D" + escape(value) +
        ((expires) ? "; expires=3D" + expires : "") +
        ((path) ? "; path=3D" + path : "") +
        ((domain) ? "; domain=3D" + domain : "") +
        ((secure) ? "; secure" : "");
}

var debugAdCode =3D false;
var show_doubleclick_ad =3D true ;
if (document.domain =3D=3D 'www.shoplocal.com') thisNode =3D =
'shoplocal';
if (location.href.indexOf("debugAdCode")+1) debugAdCode =3D true ;
show_doubleclick_ad =3D (location.href.match('no_ads'))?false:true
if (typeof thisNode =3D=3D 'undefined') thisNode =3D (typeof adNode !=3D =
'undefined')?adNode:'technology';
if (typeof commercialNode =3D=3D 'undefined' || commercialNode =3D=3D =
'one') commercialNode =3D (typeof thisNode !=3D 'undefined' && thisNode =
!=3D 'one')?thisNode:'technology';

//hack to disable acura ads from moveabletype preview window
function parentFrame()
{
try
  {
  	=
if(window.parent.location.href.match('http://voices.washingtonpost.com/cg=
i-bin/mt/mt.cgi') && estNowWithYear <=3D "200901112359")
	{
		show_doubleclick_ad =3D false;
	}
  }
catch(err){}
}
parentFrame();



var _rs  =3D ''; // revenue science data
var _poe =3D ''; // point of entry
var _tc =3D 'tile'; // tiling category
var _cn =3D ''; // commercial node
var _an =3D false; // ad node
var _t =3D '';
var urlLoc =3D new String(document.location.href);



(typeof thisNode !=3D 'undefined')?_tn =3D thisNode:null;


blu =3D (typeof blu_name !=3D 'undefined')?true:false;


if (typeof commercialNode !=3D 'undefined' && commercialNode !=3D '') {

_cn =3D 'cn=3Dyes;pnode=3D'+thisNode.split("/")[0]+';';
_an =3D true;


}
var static_wpatc =3D getWPATCookie();

// changed on first call to placeAd
var firstTimeCalled =3D true ;
var firstTimeCalledNew =3D true ;
var adUniqueNumber =3D (typeof spec_ord !=3D =
'undefined')?spec_ord:Math.floor(Math.random() * 1000000000000000000);


var newsAncestorAsString =3D new String("") ;

// changed on first call to placeAd or when assertive is true
var adAncestor =3D new String() ;
var adNode =3D new String() ;
var adSite =3D new String() ;
var adZone =3D new String() ;
var adSiteZone =3D new String() ;
var adDir =3D new String() ;
var adArgs =3D 0 ;

function tileNum()
{
	this.tnReturnValue =3D (typeof this.tnReturnValue !=3D =
'undefined')?this.tnReturnValue+1:1;
	return this.tnReturnValue
}

function revSci()
{
	if ( typeof getCookie =3D=3D 'undefined' || !getCookie('rsi_segs') || =
getCookie('rsi_segs') =3D=3D '' ) return '';
	var rs_arr =3D getCookie('rsi_segs').split('|');
	var rs =3D '';
	for(var i=3D0;i<rs_arr.length;i++)
	{
		rs +=3D "rs=3D"+rs_arr[i].replace("J05531_","j")+";"
	}
	return rs;
}

function spotCanceller(tileNum)
{
 return (location.href.match('no_spot'+tileNum))?true:false;
}


		function locExpSponsor(){
			if (typeof countyName !=3D 'undefined' && typeof stateName !=3D =
'undefined')
			{
				var invalidKW =3D =
['?','=3D','/','\\',':',';',',','*','(',')','&','$','%','@','!','^','+','=
 ','[',']','{','}','.'];
				for (var i=3D0;i<invalidKW.length;i++)
				{
					csRE =3D new RegExp('(\\' + invalidKW[i] + ')', 'g');
					countyName =3D countyName.replace(csRE,"").toLowerCase();
					stateName =3D stateName.replace(csRE,"").toLowerCase();
				}
				locExpKV =3D "lexp_spon=3D" + countyName + "-" + stateName + ";";
			}
			else=20
			{
				locExpKV =3D '';
			}
			return locExpKV
		}


function charToCodeAt(str)
{
	var new_str =3D '';
	var str_length =3D str.length;
	for(var j=3D0;j<str_length;j++)
	{=09
		new_str +=3D (str.charAt(j).match(/[^a-zA-Z0-9]/gi)) ? '_' + =
str.charCodeAt(j).toString(16) : str.charAt(j) ;
	}

	return new_str
}

//10327-RZ
function user_id_kv()
{
		var ovalue =3D ( getCookie('s_vi') ) ? 'o*' + getCookie('s_vi') : '' ;
		return ( getCookie('s_vi') )? 'u=3D' + charToCodeAt( ovalue ) + ';' : =
'' ;
}

function orbitFlag()
{
	if (document.location.href.match('/wp-dyn/'))
	{
		return 'orbit=3Dy;'
	}
	return '';
}


function innovations_kv()
{
	var a =3D urlCheck('ad',{'type':'variable'});
	if(a && a=3D=3D'inw'){
		return 'inw=3Dy;';
	}
	if(a && a=3D=3D'ins'){
		return 'ins=3Dy;';
	}
	return '';
}


function placeAd(layer,node,kw,pos,dir,w,h,tile)
{
=09
	if (location.href.match('no_ads')){ return }
=09
	if(location.href.match('demoAds')){ node =3D dcNodeOverride() }
=09
	if(spotCanceller(arguments[2])) return;
							=09
	if (typeof node =3D=3D 'undefined' || node =3D=3D 'one') node =3D =
(typeof thisNode !=3D 'undefined' && thisNode !=3D =
'one')?thisNode:'technology';
=09
	// 'Date Lab' & 'Making It' article hacks
	if (typeof wp_headline !=3D 'undefined' && wp_headline =3D=3D 'Making =
It'){ node =3D 'smallbiz/makingit' }
	if (typeof wp_headline !=3D 'undefined' && wp_headline.match('Date =
Lab')){ node =3D 'artsandliving/datelab' }

	// 'The Fix' politics blog
	if (document.location.href.match('thefix') && node =3D=3D =
'politics/fedpage') { node =3D 'politics/fedpage/thefix' }

	// 'Government Inc' business blog
	if (document.location.href.match('government-inc') && node =3D=3D =
'business') { node =3D 'business/govinc' }
=09
	//11503-MB-order_id-3935012
	if(urlCheck('/house-divided/')){ node =3D 'metro/blog/housedivided'; }
=09
	// 'Opinions Leaders' blog
	var opLead =3D new =
Array('benchconference','capitol-briefing','sleuth');
	var opNode =3D new Array('opinion/columns/blogs','politics/fedpage')
=09
	for(var op=3D0;op<opLead.length;op++){
		for(var opN =3D 0; opN < opNode.length; opN++)
		if (document.location.href.match(opLead[op]) && node =3D=3D =
opNode[opN]) { node =3D opNode[opN]+'/opleaders' }
	}
=09
	// Fed Diary blog
	if (thisNode.match('feddiary/fedpage')) { node +=3D '/feddiary' }
=09
	// 4253-JM-DC Sports blog
	if (thisNode.match('sports') && location.href.match('dcsportsbog')) { =
node +=3D '/dcsportsbog' }
=09
	// 4253-LY-194532589
	if (thisNode.match('artsandliving/travel') && =
location.href.match('travellog')) { node +=3D '/travellog' }
=09
	// 4398-MW-blog.washingtonpost.com/the-talk/
	if (node.match('politics/fedpage') && location.href.match('the-talk')) =
{ node +=3D '/thetalk' }
=09

    //node+=3D(node=3D=3D'washingtonpost.com')? ( '/hp' + ( ( =
location.href.match('reload=3Dtrue') )? 'refresh' : '') ) :'';
	//Homepage commercialNode refresh zone
	node+=3D(((node=3D=3D'washingtonpost.com/hpflex' || =
node=3D=3D'washingtonpost.com/bb') && =
location.href.match('reload=3Dtrue') )? 'refresh' : '');

	=09
	if (show_doubleclick_ad)
	{
=09
		if (thisNode =3D=3D 'opinion/columns/politics/feddiary') {node =3D =
'opinion/politics/feddiary'}
=09


		heavy=3D"heavy=3Dn;"

		if (typeof document.referrer !=3D "undefined")
		{
			if (document.referrer =3D=3D '')=20
			{=09
				heavy=3D"heavy=3Dy;"
				=
setCookie('heavy','y',''+wpniPOE.toString()+'','/','.washingtonpost.com',=
'')
			}
		else
			{
				heavy=3D"heavy=3Dy;"
				=
setCookie('heavy','y',''+wpniPOE.toString()+'','/','.washingtonpost.com',=
'')
			}
		}

		// This is a temporary hack for Fantasy Jobs ( Chris Stith: added =
7/20/2006 )=20
		agent =3D navigator.userAgent.toLowerCase();
		if ((agent.indexOf('firefox') !=3D -1 || agent.indexOf('safari') !=3D =
-1) && node =3D=3D 'sports/fantasyjob' && kw =3D=3D 4)
		{ document.write('<div =
style=3D"position:absolute;top:353;padding-left:45;">')}


		=09
  		if (node.indexOf("/") =3D=3D -1) node +=3D "/" ;
		var na =3D =
[arguments[0],arguments[1],arguments[2],arguments[3],arguments[4]] ;
    	adArgs =3D 5 ;
    	platform =3D na[0] ;
    	//if (_an) {node =3D cleanNode(commercialNode)}
		//else node =3D cleanNode(na[1]) ;
		node =3D cleanNode(na[1]) ;
=09
		if (location.href.indexOf('http://www.uclick.com/client/wpc/wpdoc/') =
!=3D -1)
		{
			node =3D 'artsandliving/crosswords/sudoku'
		}


		if (node.indexOf("media") =3D=3D 0 || node.indexOf("gallery") >=3D 0) =
node =3D 'photo';

		//temp fix for email-friend problem
		if (node =3D=3D '') node =3D 'technology';
		//temp fix for contentconversion
		if (node =3D=3D 'contentconversion') node =3D 'nation';
		//temp fix for uncategorized
		if (node =3D=3D 'uncategorized') node =3D 'technology';
		if (node =3D=3D 'high schools') node =3D 'technology';
		if (node =3D=3D 'wizards') node =3D 'technology';
		if (node =3D=3D 'search/newssearch' && location.href.match("adv")) =
node =3D 'search/newsadvanced';

		tile =3D na[2].toString() ;
		kw =3D na[3];
		flexdisplay =3D na[4] ;
	=09
		pos =3D setPosition(tile);
	=09
		//turned off for multiple size switch 6/18/07
		//w =3D setWidth(tile); h =3D setHeight(tile); f =3D =
setFlexvalue(tile);

		// Fantasy Football one-off for Nissan
		oo_url =3D document.location.href;
		if (oo_url.indexOf("LI2005042101450") !=3D -1) kw=3D 'kw=3Dcruise;';=20
		if (oo_url.indexOf("DI2005083101900") !=3D -1) kw=3D 'kw=3Dredskins;'; =

		if (oo_url.indexOf("test_ads") !=3D -1) kw +=3D 'kw=3Dwpni_test;';
		if (oo_url.indexOf("smallbusiness101") !=3D -1) kw =3D =
'kw=3Dsmallbus101;';
		if (oo_url.indexOf("DI2005100501552") !=3D -1) kw=3D =
'kw=3Dsmallbus101;';
		if (oo_url.indexOf("DI2005100500899") !=3D -1) kw=3D =
'kw=3Dsmallbus101;';
		if (oo_url.indexOf("DI2005110101296") !=3D -1) kw=3D =
'kw=3Dsmallbus101;';
		if (oo_url.indexOf("DI2005102001378") !=3D -1) kw=3D =
'kw=3Dsmallbus101;';
		if (oo_url.indexOf("DI2005103101365") !=3D -1) kw=3D =
'kw=3Dsmallbus101;';
		if (oo_url.indexOf("DI2005102602804") !=3D -1) kw=3D =
'kw=3Dsmallbus101;';
		if (oo_url.indexOf("DI2005101100729") !=3D -1) kw=3D =
'kw=3Dsmallbus101;';
		if (oo_url.indexOf("welcome_to_post.html") !=3D -1) kw =3D =
'kw=3Dremix;';
		if (oo_url.indexOf("GA2006021301885_metaRefresher.htm") !=3D -1) kw =
=3D 'kw=3Dolympics;'
		if (oo_url.indexOf("/wp-srv/sports/interactives/olympics06/") !=3D -1) =
kw =3D 'kw=3Dolympics;'
		if (oo_url.indexOf("AR2005040701359") !=3D -1) kw =3D =
'kw=3Dmontgomery;';
		if (oo_url.indexOf("cherryblossom/06/") !=3D -1) kw =3D =
'kw=3Dcherryblossom;';
		if (oo_url.indexOf("onbalance") !=3D -1) kw =3D 'kw=3Donbalance;';
		if (tile =3D=3D 10){kw =3D 'kw=3Dshermans;';};
=09
=09
		/* //9514-RZ //Nullified per 9897-MB
		if(location.href.match('emailafriend') || =
location.href.match('emailalink'))
		{
			kw +=3D "kw=3Demailconf;";
		}
		*/
=09
		if (kw.indexOf(';') =3D=3D -1)
		{
			kw =3D kw + ';'
		}


    	if ( firstTimeCalledNew )
		{
	  		adAncestor =3D getAdAncestor(node) ;
		 	adSite =3D getAdSite(adAncestor) ;
		  	adNode =3D getAdNode(node,adAncestor) ;
			adZone =3D getAdZone(adNode) ;
	  		adDir =3D getAdDir(node) ;
	  		firstTimeCalledNew =3D true;

			if (adZone)
	  			adSiteZone =3D adSite + "/" + adZone ;
			else
	  			adSiteZone =3D adSite ;
	  	}
	=09
	=09


		//this is where the old interstitial routine went--is backed up in =
oldinterstitial.js
=09
		//turned off for multiple size swith 6/18/07
		//(flexdisplay)?adSize =3D "":adSize =3D 'sz=3D'+w+'x'+h+';';

		passArticle =3D (platform.toLowerCase().indexOf("article") !=3D =
-1)?'article':'';
		page_a =3D (passArticle.indexOf("article") !=3D =
-1)?'page=3Darticle;front=3Dn;':'page=3Dsection;front=3Dy;';
		//if (passArticle !=3D 'article' ) page_a =3D =
'page=3Dsection;front=3Dy;'
		//&& commercialNode.split("/").length =3D=3D 1
		if (typeof v2 !=3D 'undefined')
		{
			if ( typeof adTemplate !=3D 'undefined' && (( adTemplate & =
BANNER_FLEX_TOP ) =3D=3D BANNER_FLEX_TOP && ( adTemplate & =
BIG_FLEX_RIGHT ) =3D=3D BIG_FLEX_RIGHT) ) _t =3D (tile =3D=3D =
1)?'t=3Dy;':'';
		}
=09

	=09
		dtile =3D (typeof dfpcomp =3D=3D =
'undefined')?'':"dfpcomp=3D"+dfpcomp+";";


		var exempt =3D "";
		if (thisNode =3D=3D 'nation' || thisNode.indexOf("nation/special") =
!=3D -1)
		{
			exempt =3D "!category=3Dsupremecourt;";
		}
		//8095-obits,8341-homepage
		if ((tile =3D=3D 20 && location.href.match('/article/')) || =
commercialNode.match('obituaries') || =
commercialNode.match('washingtonpost.com'))
		{
			exempt +=3D "!c=3Dintrusive;";
		}
	=09
		//9456-MB
		if(typeof commercialNode !=3D 'undefined' && =
commercialNode.match('timespace'))
		{
			exempt +=3D "!c=3Dintrusive;";
		}
	=09
		//9514-RZ
		if(location.href.match('emailafriend') || =
location.href.match('emailalink'))
		{
			exempt +=3D "!c=3Dintrusive;";
		}
	=09
		if(location.href.match('content/article') && =
(location.href.match('_Comments.html') || =
location.href.match('_comments.html')))
		{
			exempt +=3D "!c=3Dcomments;";
		}
	=09
		//MB-05:11:09:05:50
		if(tile =3D=3D 1 && =
location.href.match('http://www.washingtonpost.com/wp-dyn/content/article=
/2009/05/10/AR2009051002045') && commercialNode.match('metro/va'))
		{
			exempt +=3D "!c=3Dintrusive;";
		}

	=09
=09
		var fedpage =3D new =
Array('opinion/columns/politics/feddiary','opinion/columns/politics/kamen=
a','opinion/columns/politics/sarasohnj','opinion/columns/politics/lanec',=
'opinion/columns/politics/offcamera','politics/congress')

		for (var i=3D0; i<fedpage.length; i++)
		{
			if (thisNode =3D=3D fedpage[i])
			{
				exempt =3D 'dir=3Dfedpage;'
			}
		}
	=09
	=09
	=09
	=09
	=09
	=09
	=09

		// wpid TEST!
		if(typeof(wpidTestCheck) =3D=3D 'undefined')
		{
			var url =3D document.location.href.split('?')[0];
			url =3D url.toLowerCase()
			var urlarray =3D url.split('/');
			var tail =3D urlarray[urlarray.length -1];
			if (tail.indexOf('nav=3D') !=3D -1)
			{
				tail =3D tail.substring(0,tail.indexOf('nav=3D'));
			}
			if (tail.match(';'))
			{
				tail =3D tail.split(';')[0];
			}
			var illegals =3D =
['test_ads','debugAdCode','?test_ads','?debugadcode','wpidtest','?templat=
e_test','?','=3D','/','\\',':',';',',','*','#','(',')','&','$','%','@','!=
','^','+',' ','[',']','{','}','.html','.htm','.',];
			for (var i=3D0;i<illegals.length;i++)
			{
				sRE =3D new RegExp('(\\' + illegals[i] + ')', 'g');
				tail =3D tail.replace(sRE,"");
			}
			if (tail =3D=3D 'index' || tail =3D=3D '')
			{
				tail =3D urlarray[urlarray.length -2];
			}
			var nodedump =3D thisNode.split('/');
			var wpidnode =3D '';
			for (var i=3D0;i < nodedump.length;i++)
			{
				wpidnode +=3D nodedump[i];
			}
			wpid =3D 'wpid=3D'+wpidnode+'_'+tail;
			if (wpid.length > 55)
			{
				wpid =3D wpid.substring(0,55);
			}
			if (url.indexOf('?wpidtest') !=3D -1)
			{
				prompt('wpid',wpid);
			}
			wpidTestCheck =3D 1;
=09
			if(typeof wpid =3D=3D 'undefined')
			{
				wpid=3D''
			}

		=09
			//small biz hack
			sba =3D new =
Array('jobs_inside-job','liveonlinespecialsjobs_di2006102000737','liveonl=
inejobsslayterm_talk_di2006100900744','liveonlinespecialsjobs_di200610200=
0740','liveonlinespecialsjobs_di2006102000739','liveonlinespecialsjobs_di=
2006102000738','opinioncolumnsbusinessslayterm_ar2006101400332','jobs_ar2=
006102001235','jobs_success-stories','liveonline_smallbusiness101','liveo=
nline_di2005110101296','liveonlinespecialsjobs_di2006022700702','liveonli=
ne_di2005101100729','liveonline_di2005100500899','liveonline_di2005103101=
365','liveonline_di2005100501552','liveonline_di2005110101296','liveonlin=
ejobsslayterm_talk_di2005111601352','liveonline_di2005102001378','technol=
ogywashtech_ar2005112000918','opinioncolumnsbusinessslayterm_ar2005102900=
440','jobscareernews_ar2005111101484','jobscareernews_ar2005101401501','j=
obscareernews_ar2005101401472','jobs_ar2005100501786','jobscareernews_ar2=
005101000794');
			var sbatest=3Dwpidnode+'_'+tail;
			for(var i =3D 0; i < sba.length; i++)
			{
				if(sbatest =3D=3D sba[i]){wpid+=3D';kw=3Dsmallbiz';}
			}
			//end small biz hack
		}
		//end wpid
		grp =3D '';
		if (location.href.indexOf('financial') !=3D -1) {grp =3D =
"grp=3Dfinancial;"}

		/*if(commercialNode=3D=3D'washingtonpost.com' && tile=3D=3D20)
		{=09
			tile =3D 15;
			pos =3D 'ad15';
		}*/

		if(tile=3D=3D99)
		{
			config['adServerURL'] =3D  "http://ad.doubleclick.net/pfadx/wpni." + =
node + ";";
			config['additionalAdTargetingParams'] =3D  ";" + static_wpatc +  =
heavy + 'ad=3Dvideo;' + grp + kw +  _rs + poe + ";";
=09
			if(location.href.match('debugAdCode'))
			{
				var output =3D "config['adServerURL']:" + config['adServerURL'] + =
"\n\r";
				output +=3D "config['additionalAdTargetingParams']:" + =
config['additionalAdTargetingParams'] + "\n\r";
				adopsDebug('<div>' + output + '</div>');
			} =20
		}
	=09
			if(wpid =3D=3D 'wpid=3Dpolitics_politics' && tile =3D=3D 6 && now < =
'03292359')
			{
				adSiteZone =3D 'wpni.politics/bigbox'
			}
	=09
		/*function setPos(argTile)
		{
			if(argTile=3D=3D'16' || argTile=3D=3D'6' || argTile=3D=3D'5')
			{
				return "pos=3Dad5;"
			}
			return "pos=3Dad" + tile + ";";
		}*/
	=09
	=09
	=09
	=09
		var thisTileVal =3D tileNum()
	=09
		if(tile =3D=3D 20 && location.href.match('/article/') && =
kw.match('inline=3Dy'))
		{
			adSiteZoneArray =3D adSiteZone.split('/');
			adSiteZone =3D '';
			for(var a =3D 0; a< adSiteZoneArray.length;a++)
			{
				adSiteZone +=3D adSiteZoneArray[a] + '/';
			}
			adSiteZone +=3D 'inlinead/';
			adSiteZone =3D adSiteZone.substring(0,adSiteZone.length-1)
		}

	=09
		//5378 start
		var del =3D (parent !=3D self || =
kw=3D=3D'inline=3Dy;')?'del=3Diframe;':'del=3Djs;';
		if(kw=3D=3D'inline=3Dy;'){kw=3D'';pos=3D'pos=3Dinline_bb;';}
		//5378 end
	=09
		if(typeof(dir)!=3D'object'){ //check for json object in placeAd
			dir =3D {'return_type':'code','execute':true,'dfp_server':'adj'}; =
//use this as the default
		}
		if(typeof dir.dfp_server =3D=3D 'undefined'){
			dir.dfp_server =3D 'adj';
		}
		if(tile =3D=3D 20 && location.href.match('/article/')){
			dir.dfp_server =3D 'adi';
		}
		if(typeof dir.return_type =3D=3D 'undefined'){
			dir.return_type =3D 'code';
		}
		if(typeof dir.execute =3D=3D 'undefined'){
			dir.execute  =3D true;=09
		}
			=09
		var keyvalues =3D adSiteZone + ";" + static_wpatc + adDir + heavy + =
doubleClickTestCode() + contComments + interstitials(dir) + beta_kv() + =
realEstateAreaId() + grp + kw + aptco() + mediaPage() + print_kv() + =
orbitFlag() + locExpSponsor() + socialMediaSite() + pos + dtile + del + =
_t + ((typeof revSci() !=3D 'undefined')?revSci():'') + _rs + poe + =
page_a +  pageId() + articleId() + setFlexvalue(tile) + wpid + ";" + =
innovations_kv() + exempt + _cn + user_id_kv() + _tc + "=3D" + =
thisTileVal + ";ord=3D" + adUniqueNumber + "?";
		var adCode =3D "" ;
		var returnCode =3D "";
		=09
		//build adCode

		switch (dir.dfp_server){
		case 'adi':
			adCode +=3D '<iframe width=3D"336" height=3D"280" frameborder=3D"0" =
scrolling=3D"no" marginwidth=3D"0" marginheight=3D"0" =
src=3D"http://ad.doubleclick.net/adi/'+keyvalues+'"></iframe>';
			var returnCode =3D =
"{\'src\':\'http://ad.doubleclick.net/adi/"+keyvalues + "\'}";
		break;
		case 'adj':
			adCode +=3D '<script language=3D"JavaScript1.1" =
src=3D"http://ad.doubleclick.net/adj/'+keyvalues+'"></script>';
			returnCode =3D "{\'src\':\'http://ad.doubleclick.net/adj/"+keyvalues =
+ "\'}";
		break;
		case 'ad':
			adCode +=3D '<a href=3D"http://ad.doubleclick.net/jump/'+keyvalues+'" =
target=3D"_blank"><img =
src=3D"http://ad.doubleclick.net/ad/'+keyvalues+'" border=3D"" =
width=3D"" height=3D"" alt=3D"Washington Post Advertisement"/></a>';
			returnCode +=3D '{';
			returnCode +=3D =
'"href":"http://ad.doubleclick.net/jump/'+keyvalues+'",';
			returnCode +=3D '"src":"http://ad.doubleclick.net/ad/'+keyvalues+'"';
			returnCode +=3D '}';
		break;
		}
=09
		if ( (typeof ceTag !=3D 'undefined') && (ceTag) ) adCode =3D '';
		if (debugAdCode) {  adCode +=3D debugTextArea(adCode); }
	=09
		//8947-DG,rev-11545-DG
		/*if((commercialNode=3D=3D'washingtonpost.com' || =
location.href.match('/wp-dyn/content/')) && =
(tile=3D=3D5||tile=3D=3D6||tile=3D=3D16))
		{
			slugCompanion()
		}*/
	=09
		//10946-MM
		if(tile=3D=3D26 && commercialNode=3D=3D'education'){
			document.write('<div><a =
href=3D"http://www.washingtonpost.com/wp-adv/specialsales/exec_education/=
index.html" target=3D"_blank"><img =
src=3D"http://www.washingtonpost.com/wp-adv/advertisers/education/images/=
grad_336x60.gif" alt=3D"" width=3D"336" height=3D"60" =
border=3D"0"/></a></div>')
		}
=09
		if(tile!=3D99 && dir.execute)
		{
			if (tile =3D=3D 24)
			{=20
				document.writeln ('<div align=3D"left" style=3D"padding:6px 0px 4px =
0px"><img =
src=3D"http://media3.washingtonpost.com/wp-srv/hp/img/ad_label_leftjust.g=
if" alt=3D"ad_icon" width=3D"100" height=3D"13" border=3D"0"/></div>' ); =
=20
			}
			if (tile =3D=3D 7 && thisNode =3D=3D "artsandliving/cityguide" )
			{
			=09
				document.write('<img =
src=3D"http://media.washingtonpost.com/wp-srv/hp/img/ad_label_vertical_sm=
all.jpg" border=3D"0" width=3D"14" height=3D"33">');
			}
			if (tile =3D=3D 7 && commercialNode =3D=3D "weather")
			{
			=09
				document.write('<img style=3D"margin-right:4px" =
src=3D"http://media.washingtonpost.com/wp-srv/images/ad_horiz_16x33.gif" =
border=3D"0" width=3D"16" height=3D"33">');
			}
			else if(tile =3D=3D 7 && thisNode !=3D "business" && =
(location.href.indexOf('?test_ads') !=3D -1))
		=09
		  	{=09
				document.write('<div style=3D"padding-top:10px"><img =
src=3D"http://media.washingtonpost.com/wp-srv/hp/img/ad_label_leftjust.gi=
f" border=3D"0" width=3D"100" height=3D"13" valign=3D"top"></div>');
		  	}
			if (document.domain =3D=3D 'washingtonpost.homescape.com' || =
document.domain =3D=3D 'washingtonpost.homehunter.com')
			{
				if (typeof sponsor !=3D 'undefined' && sponsor)
				{
					if (tile !=3D 5) document.write(adCode);
				}
				else document.write(adCode);
			}
		=09
			else document.write(adCode.toString());
		=09
		=09
		}
	=09

	}// end of show_doubleclick_ad test

	firstTimeCalled =3D false ;
	return (dir.return_type=3D=3D'json')?returnCode:adCode;
} //end of placeAd

function articleId(){
	var url =3D location.href;
	if( url.match('/wp-dyn/content/article/') ) {
		url =3D url.split('\/');
		url =3D url[url.length-1];
		url =3D url.split('.');
		url =3D url[0];
		url =3D url.split('_');
		url =3D 'articleId=3D'+url[0]+';';
		return url;
	}
	else{
		return '';
	}
}

function setPosition(tile)
{

	if (typeof this.usedSpots =3D=3D 'undefined')
	{
		this.usedSpots =3D new Array();
	}
	if (this.usedSpots[tile] =3D=3D null)
	{
		this.usedSpots[tile] =3D 1;
		return 'pos=3Dad'+tile+';';
	}
	else
	{
		this.usedSpots[tile]++;
		return 'pos=3Dad'+tile+"_"+this.usedSpots[tile]+';';
	}
}


function setFlexvalue(tile) {
  var fv ;
  if ( tile >=3D 1 && tile <=3D 2) { fv =3D "ad=3Dlb;sz=3D728x90;"; } // =
top leaderboard
  else if ( tile >=3D 2 && tile <=3D 2 ) { fv =3D =
"ad=3Dlb;sz=3D728x90;"; } // bottom leaderboard
  else if ( tile >=3D 3 && tile <=3D 3 ) { fv =3D =
"ad=3Dss;sz=3D160x600;"; } // skyscraper left only
  else if ( tile >=3D 4 && tile <=3D 4 ) { fv =3D =
"ad=3Dss;sz=3D160x600;"; } // skyscraper only
  else if ( tile >=3D 5 && tile <=3D 5 ) { fv =3D =
"ad=3Dss;ad=3Dbb;sz=3D160x600,300x250;"; } // big box and skyscraper
  else if ( tile >=3D 6 && tile <=3D 6 ) { fv =3D =
"ad=3Dss;ad=3Dbb;ad=3Dhp;sz=3D160x600,300x250,336x850;"; } // half page
  else if ( tile >=3D 7 && tile <=3D 7 ) { fv =3D =
"ad=3Dfb;sz=3D446x33;"; } // feature bar
  else if ( tile >=3D 8 && tile <=3D 8 ) { fv =3D =
"ad=3Dtt;sz=3D336x45;"; } // travel tile
  else if ( tile >=3D 9 && tile <=3D 9 ) { fv =3D =
"ad=3Drss;sz=3D479x40;"; } // rss tile
  else if ( tile >=3D 10 && tile <=3D 10) { fv =3D =
"ad=3Dtt;sz=3D336x45;"; } // travel tile right
  else if ( tile >=3D 11 && tile <=3D 11) { fv =3D =
"ad=3Dtl;sz=3D120x60;"; } // 120x60
  else if ( tile >=3D 12 && tile <=3D 12) { fv =3D =
"ad=3D260x30;sz=3D260x30;"; } // 260X30
  else if ( tile >=3D 13 && tile <=3D 13) { fv =3D =
"ad=3Dre300;sz=3D300x190;"; } // 300x190
  else if ( tile >=3D 14 && tile <=3D 14) { fv =3D =
"ad=3Dtiff;sz=3D234x60,300x45;"; } // 300x45
  else if ( tile >=3D 15 && tile <=3D 15) { fv =3D =
"ad=3Dvb;sz=3D120x240;"; } // 120x240
  else if ( tile >=3D 16 && tile <=3D 16) { fv =3D =
"ad=3Dbb;ad=3Dhp;sz=3D300x250,336x850;"; } // 120x240
  else if ( tile >=3D 17 && tile <=3D 17 ) { fv =3D =
"ad=3D88x31;sz=3D88x31;";} // 88x31
  else if ( tile >=3D 18 && tile <=3D 18 ) { fv =3D =
"ad=3D180x20;sz=3D180x20;"; } // 180x20
  else if ( tile >=3D 19 && tile <=3D 19 ) { fv =3D =
"ad=3D336x35;sz=3D336x35;";} // 336x35
  else if ( tile >=3D 20 && tile <=3D 20 ) { fv =3D =
"ad=3Dbb;sz=3D300x250;";} // 300x250
  else if ( tile >=3D 22 && tile <=3D 22 ) { fv =3D =
"ad=3D110x90;sz=3D110x90;"; } // 110x90 tile
  else if ( tile >=3D 23 && tile <=3D 23) { fv =3D =
"ad=3Dblog;sz=3D446x45;"; } // 446x45 blog feature bar
  else if ( tile >=3D 24 && tile <=3D 24) { fv =3D =
"ad=3D208x40;sz=3D208x40;"; } // 446x45 blog feature bar
  else if ( tile >=3D 25 && tile <=3D 25) { fv =3D =
"ad=3D314x57;sz=3D314x57;"; } // 314x57=20
  else if ( tile >=3D 26 && tile <=3D 26) { fv =3D =
"ad=3D336x60;sz=3D336x60;"; } // 336x60
  else if ( tile >=3D 27 && tile <=3D 27) { fv =3D =
"ad=3D120x30;sz=3D120x30;"; } // 120x30
  else if ( tile >=3D 28 && tile <=3D 28) { fv =3D =
"ad=3Dtoolbox_tile;sz=3D180x31;"; } // 180x31
  else if ( tile >=3D 29 && tile <=3D 29 ) { fv =3D =
"ad=3Dcars_tile;sz=3D234x60;"; } // 234x60=20
  else if ( tile >=3D 30 && tile <=3D 30 ) { fv =3D =
"ad=3D293x100;sz=3D293x100;"; } // 293x100
  else if ( tile >=3D 31 && tile <=3D 31 ) { fv =3D =
"ad=3D160x146;sz=3D160x146;"; } // 160x146
  else if ( tile >=3D 32 && tile <=3D 32 ) { fv =3D =
"ad=3D336x200;sz=3D336x200;"; } // 336x200
	else if ( tile >=3D 33 && tile <=3D 33 ) { fv =3D =
"ad=3D228x60;sz=3D228x60;"; } // 228x60
	else if ( tile >=3D 34 && tile <=3D 34 ) { fv =3D =
"ad=3D150x60;sz=3D150x60;"; } // 150x60
	else if ( tile >=3D 35 && tile <=3D 35 ) { fv =3D =
"ad=3D965x30;sz=3D965x30;"; } // 150x60
	else if ( tile >=3D 36 && tile <=3D 36 ) { fv =3D =
"ad=3D100x35;sz=3D100x35;"; } // 100x35
	else if ( tile >=3D 37 && tile <=3D 37 ) { fv =3D =
"ad=3D336x200;sz=3D336x200;"; } // 336x200
	else if ( tile >=3D 38 && tile <=3D 38 ) { fv =3D =
"ad=3D381x50;sz=3D381x50;"; } // 381x50
	else if ( tile >=3D 39 && tile <=3D 39 ) { fv =3D =
"ad=3D900x150;sz=3D900x150;"; } // 900x150
	else if ( tile >=3D 40 && tile <=3D 40 ) { fv =3D =
"ad=3D200x31;sz=3D200x31;"; } // 200x31
	else if ( tile >=3D 41 && tile <=3D 41 ) { fv =3D =
"ad=3D50x100;sz=3D50x100;"; } // 50x100
	else if ( tile >=3D 42 && tile <=3D 42 ) { fv =3D =
"ad=3D90x180;sz=3D90x180;"; } // 90x180=09
	else if ( tile >=3D 43 && tile <=3D 43 ) { fv =3D "sz=3D1x1;"; } // =
90x180=09
	else if ( tile >=3D 44 && tile <=3D 44 ) { fv =3D =
"ad=3Dbb;sz=3D300x250;"; } // right_rail_bb=09
  //99 is for brightcove

/*TM see above*/
if (tile >=3D 12 && tile <=3D 12 && location.href.indexOf('areaId') !=3D =
-1) {fv=3D"ad=3Dss120;sz=3D160x600;"}

/*8793-JM*/
if( ( location.href.match('/gallery') || location.href.match('/video') ) =
&& tile=3D=3D1 ){
	fv =3D 'ad=3Dvplayer;'+fv;
}

return fv ;


}


function mkKeyword(myKeyword,myNode)
{
  if (myKeyword =3D=3D "" )
  {
    if (myNode.indexOf("/") !=3D -1 )
    {
      nodeAry =3D myNode.split("/") ;
      myKeyword =3D nodeAry[1] ;
	}
  }
  return myKeyword ;
}

//8947--DG
function slugCompanion()
{
		document.write('<div id=3D"axis" style=3D"display:none"></div>');
		var axis =3D document.getElementById('axis');
		var axisImg =3D =
document.getElementById('axis').parentNode.getElementsByTagName('img');
		var a =3D document.createElement('a');
		a.href =3D =
'http://ad.doubleclick.net/clk;211852992;17836555;s?http://www.washington=
post.com/wp-adv/media_kit/wpni/contact_us.html';
		a.target =3D '_blank';
		var img =3D document.createElement('img');
		img.alt =3D 'Your Ad Here';
		img.title =3D 'Your Ad Here';
		img.border =3D '0';
		if(commercialNode=3D=3D'washingtonpost.com')
		{
			img.style.marginBottom =3D '2px';
		}
		a.appendChild(img);
		if(axisImg.length > 0)
		{
			img.src =3D =
'http://media.washingtonpost.com/wp-adv/test/ad_slug/ad_slug_compainion.g=
if';
			img.width =3D '74';
			img.height =3D '14';
			if(orbitFlag()=3D=3D'orbit=3Dy;')
			{
				a.style.lineHeight =3D "13px";
				a.style.marginLeft =3D "-30px";
			}
			for(var z=3D0;z<axisImg.length;z++)
			{
				if(axisImg[z].src.match('label'))
				{
					axisImg[z].parentNode.appendChild(a);
				}
			}
			axis.parentNode.removeChild(axis);
		}
		/*else {
			axis.appendChild(a)
			img.src =3D =
'http://media.washingtonpost.com/wp-adv/test/ad_slug/gog_ad_slug_compaini=
on.gif';
			img.width =3D '16';
			img.height =3D '73';
			axis.style.display =3D 'block';
			axis.style.cssFloat =3D 'right';
			axis.style.styleFloat =3D 'right';=20
			axis.style.marginTop =3D '68px';
			axis.style.marginRight =3D '-17px';
		=09
		}
		*/
}



function textifyCode(_code)
{
	_code =3D _code.replace(/</gi,'&lt;');
	_code =3D _code.replace(/>/gi,'&gt;');
	return _code;
}


function debugTextArea(ac)
{=20
=09
	if(!location.href.match('debugAdCode')) return '';=09
    var debugPre =3D '<div =
style=3D"position:relative;float:left;z-index:1000000000">';
	var debug =3D '<div =
style=3D"text-align:left;text-transform:none;letter-spacing:normal;line-s=
pacing:normal;padding:8px;position:absolute:top:0px;left:0px;width:300px;=
background-color:#FFAA00;color:#770000;font-family:verdana;font-size:9px;=
word-wrap:break-word;text-wrap:unrestricted;overflow:scroll">' + =
textifyCode(ac) + '</div>';
	var debugPost =3D '</div>'
	var debugReturn =3D debugPre  + debug + debugPost;
	return debugReturn;
}

function getWPATCookie()
{
  if (document.cookie.indexOf("WPATC") !=3D -1)
  {
    var start =3D (document.cookie.indexOf("WPATC") + 6);
    var end =3D (document.cookie.indexOf(";",start)) =3D=3D -1 ? =
document.cookie.length : document.cookie.indexOf(";",start);
    var cookie =3D document.cookie.substring(start,end) + ";";
    while (cookie.indexOf(":") !=3D -1)
      cookie =3D =
cookie.substring(0,cookie.indexOf(":"))+";"+cookie.substring(cookie.index=
Of(":")+1,cookie.length);
    if (cookie.lastIndexOf(";") !=3D cookie.length - 1) cookie +=3D ';';
    if (cookie.indexOf("=3D") =3D=3D 0) cookie =3D =
cookie.substring(cookie.indexOf(";")+1,cookie.length);
  }
  else var cookie =3D "" ;
  return cookie ;
}



//Revenue Science Values
/*
function (name) {
	var cookie =3D " " + document.cookie;
	var search =3D " " + name + "=3D";
	var setStr =3D null;
	var offset =3D 0;
	var end =3D 0;
	if (cookie.length > 0) {
		offset =3D cookie.indexOf(search);
		if (offset !=3D -1) {
			offset +=3D search.length;
			end =3D cookie.indexOf(";", offset)
			if (end =3D=3D -1) {
				end =3D cookie.length;
			}
			setStr =3D unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}*/

var crumbs =3D =
(getCookie("DMSEG"))?"".concat(getCookie("DMSEG")).split("&"):"";
var segments =3D (crumbs[5])?crumbs[5]:"";
var seg =3D (segments)?segments.split(","):"";


// mimic revenue science value for rss users
// check to see if url has "rss" and set up a value
// that AMs can target to
// added 6/28/05 sja
function setCookie (name, value, expires, path, domain, secure) {
      document.cookie =3D name + "=3D" + escape(value) +
        ((expires) ? "; expires=3D" + expires : "") +
        ((path) ? "; path=3D" + path : "") +
        ((domain) ? "; domain=3D" + domain : "") +
        ((secure) ? "; secure" : "");
}

function createTime() {
var cDate =3D new Date();
var cMil =3D cDate.getTime();
var e =3D cMil % (1000 * 60 * 60 * 24);
var r =3D (1000 * 60 * 60 * 24) - e;
var nr =3D 28 * 24 * 60 * 60 * 1000;
return(nr);
}

var wpniPOE =3D new Date();
var interval =3D 0;

var wpniWeek =3D wpniPOE.getTime() + createTime();
wpniPOE.setTime(wpniWeek);

if (urlLoc.indexOf('nav=3Drss') !=3D -1)
{_rs+=3D"fromrss=3Dy;";
setCookie('rss_now','true',''+wpniPOE.toString()+'','/','.washingtonpost.=
com','');
setCookie('rss','true',''+wpniPOE.toString()+'','/','.washingtonpost.com'=
,'');
}
else
{_rs+=3D"fromrss=3Dn;";
setCookie('rss_now','false',''+wpniPOE.toString()+'','/','.washingtonpost=
.com','');
}

if (getCookie("rss") =3D=3D 'true') {_rs +=3D 'rss=3Dy;'}
else _rs +=3D 'rss=3Dn;';

=09

var poe =3D 'poe=3Dno;';
if (getCookie("wp_poe") =3D=3D null || getCookie("wp_poe") =3D=3D =
"false") {
poe =3D 'poe=3Dyes;';
setCookie("wp_poe","true","","/",".washingtonpost.com",'')
}

if (getCookie("wp_poe") =3D=3D null && =
!(urlLoc.match("washingtonpost.com")))
{
	poe =3D 'poe=3Dno;';
}

// end rss code
/**
 * crk added 17 July 2002
 * methods for 5 parameter placeAd call
 * placeAd(platform,node,tile,kw,assertive)
 **/

  // get ancestor from node
  function getAdAncestor(node)
  {
	var end =3D node.indexOf("/") ;
	if ( end =3D=3D -1 )
	  return node ;
    else
	{
	  var adAncestor =3D node.substring(0,end) ;=09
      return adAncestor ;
	}
  }

  // get adSite
  function getAdSite(ancestor)
  {
    if ( isNewsAncestor(ancestor) )
      return "wpni.news" ;
    else
      return "wpni."+ancestor ;
  }
 =20
  // get ad node
  function getAdNode(node,ancestor)
  {
    if ( isNewsAncestor(ancestor) )
	  return node ;
	else
	{
	  var start =3D node.indexOf("/")+1 ;
	  if (start)
        return node.substring(start) ;
	  else
	    return "" ;
	}
  }

  // get ad node
  function getAdZone(node)
  {
    var ary =3D new Array() ;
	if ( node.indexOf("/") !=3D -1 )
	  ary =3D node.split("/") ;
	else
	  ary[0] =3D node ;

	if ( ary.length <=3D 8 )
	  return node ;
	else
	{
	  var zone =3D '' ;
	  for(var i=3D0; i<8; i++)
	  {
	    zone +=3D ary[i] ;
		if (i=3D=3D0) zone +=3D "/" ;
	  }
	  return zone ;
	}
  }
 =20
  function getAdDir(node)
  {
    var page =3D "" ;
    var ary =3D new Array() ;
	if ( node.indexOf("/") !=3D -1 )
	  ary =3D node.split("/") ;
	else
	  ary[0] =3D node ;

	var dir =3D '' ;
	for(var i=3D0; i<ary.length; i++)
	{
	  // parse out article string if present in ancestor
	  if ( i =3D=3D 0 &&
	       ary[i].indexOf("article") !=3D -1 &&
		   ary[i].indexOf("article") =3D=3D ary[i].length - "article".length =
&&
		   ary[i] !=3D "article" )
	  {
	    ary[i] =3D ary[i].substring(0,ary[i].indexOf("article")) ;
		page =3D "page=3Darticle;" ;
	  }
	  dir +=3D "dir=3D"+ary[i]+";" ;
	}
	return "dir=3D"+ary[ary.length-1]+"node;"+dir+page ;
  }

  // check if adSite should be wpni.news
  function isNewsAncestor(ancestor)
  {
    if ( newsAncestorAsString !=3D null &&
	     newsAncestorAsString !=3D ""   &&
		 newsAncestorAsString.indexOf(","+ancestor+",") !=3D -1
	   )
      return true  ;
    else
	  return false ;
  }
 =20
  function cleanNode(node)
  {
	if ( node.charAt(node.length-1) =3D=3D "/" )
	  return node.substring(0,node.length-1) ;
	else
	  return node ;
  }
// begin: for inline article ad
function getInlineAdGraf(container_id,obstacle_id) {
	if ( document.getElementById(obstacle_id) && =
document.getElementById(container_id) ) {
		var obstacle =3D document.getElementById(obstacle_id);
		var bottom_of_obstacle =3D obstacle.offsetTop+obstacle.offsetHeight ;

		var container =3D document.getElementById(container_id);
		var bottom_of_container =3D container.offsetTop+container.offsetHeight =
;

		var grafs =3D container.getElementsByTagName("p");
		for( var i=3D0; i<grafs.length; i++ ) {
			var graf =3D grafs[i] ;
			// if ( (graf.offsetTop > bottom_of_obstacle) && (bottom_of_container =
- bottom_of_obstacle > 200) ) {
			if ( graf.offsetTop > bottom_of_obstacle + =
document.getElementById("content_column_table").clientHeight + 200) {
				return graf ;
			}
		}
	}
	return false;
}
function getInlineAdGraf2(container_id,obstacle_id,clearance) {
	if ( document.getElementById(obstacle_id) && =
document.getElementById(container_id) ) {
		if ( typeof clearance =3D=3D "undefined" ) {
			clearance =3D 200 ;
		}
		var obstacle =3D document.getElementById(obstacle_id);
		var bottom_of_obstacle =3D =
findPosition(obstacle_id).y+obstacle.offsetHeight ;

		var container =3D document.getElementById(container_id);
		var bottom_of_container =3D =
findPosition(container_id).y+container.offsetHeight ;

		var grafs =3D container.getElementsByTagName("p");
		for( var i=3D0; i<grafs.length; i++ ) {
			var graf =3D grafs[i] ;
			if ( (findPositionByElement(graf).y > bottom_of_obstacle + clearance) =
) {
				return graf ;
			}
		}
	}
	return false;
}
function move_the_inline_ad(parent,ad,sibling) {
	if ( parent && ad && sibling )
		parent.insertBefore( ad, sibling ) ;
}
// end: for inline article ad

//start of wpniAds object
wpniAds =3D new Object();
wpniAds.utils =3D new Object();
wpniAds.utils.visibilityByTagName =3D function()
{
	for(var a =3D 1; a < arguments.length; a++)
	{
		badElements =3D document.getElementsByTagName(arguments[a]);
		for(var b =3D 0;b< badElements.length;b++)
		{
				badElements[b].style.visibility =3D arguments[0];
		}
	}
}

wpniAds.utils.wabs =3D new Object();

wpniAds.utils.wabs.recalc =3D function ()
{
	var rootElement =3D (document.compatMode !=3D =
'BackCompat')?document.documentElement:document.body;
	this.bodyheight =3D rootElement.scrollHeight;
	this.bodywidth =3D rootElement.scrollWidth;
	this.scrollheight=3D rootElement.scrollTop;
	this.scrollwidth=3D rootElement.scrollLeft;
	this.windowheight =3D rootElement.clientHeight;
	this.windowwidth=3D rootElement.clientWidth;	=09
}


wpniAds.utils.preLoadImages =3D new Object();
wpniAds.utils.preLoadImages.loadedArray =3D new Array();
wpniAds.utils.preLoadImages.execute =3D function ()
{
	for(var a =3D 0; a < arguments.length; a++)
	{
		if(!this.loadedArray[arguments[a]])
		{
			this.loadedArray[arguments[a]] =3D new Image();
			this.loadedArray[arguments[a]].src =3D arguments[a];
		}
	}
}

wpniAds.utils.listenerAttacher =3D function(_event,_func,_bool)
{
	if(window.addEventListener)
		{
			window.addEventListener(_event,_func,_bool);
			return true;
		}
		else if(window.attachEvent)
		{
			window.attachEvent('on'+_event,_func);
			return true;
		}
		return false;
}



wpniAds.utils.resizeDiv =3D new Object();
wpniAds.utils.resizeDiv.posWords =3D new Object();
wpniAds.utils.resizeDiv.posWords.width =3D 'left';
wpniAds.utils.resizeDiv.posWords.height =3D 'top';

wpniAds.utils.resizeDiv.window =3D function(_element,_dir)
{=09
	document.getElementById(_element).style[_dir]=3D =
wpniAds.utils.wabs['window' + _dir] + 'px';
	document.getElementById(_element).style[this.posWords[_dir]] =3D =
wpniAds.utils.wabs['scroll' + _dir] + 'px';
}
wpniAds.utils.resizeDiv.body =3D function(_element,_dir)
{
	document.getElementById(_element).style[_dir] =3D =
wpniAds.utils.wabs['body' + _dir] + 'px';
	document.getElementById(_element).style[this.posWords[_dir]] =3D '0px';
}
wpniAds.utils.resizeDiv.max =3D function(_element,_dir)
{
	var totalRangeWindow =3D wpniAds.utils.wabs['window'+_dir] + =
wpniAds.utils.wabs['scroll' + _dir];
	var totalRangeBody =3D wpniAds.utils.wabs['body' + _dir];
=09
	var HigherString =3D Math.max(totalRangeWindow,totalRangeBody) + 5
=09
	document.getElementById(_element).style[_dir] =3D HigherString + 'px';
	document.getElementById(_element).style[this.posWords[_dir]] =3D =
'-5px';
}





wpniAds.utils.resizeDiv.execute =3D function (_element,_dimension,_goal)
{=09
	wpniAds.utils.wabs.recalc();
	this[_goal](_element,_dimension)
}

//end of wpniAds object

/*start of cbIntercept

wpniAds.utils.preLoadImages.execute("http://www.washingtonpost.com/wp-srv=
/images/Jobs-splash-page_graphic.gif");

cbIntercept =3D new Object();

cbIntercept.attachListeners =3D function()
{
	if(this.listenersAttached) return true;
	if(!wpniAds.utils.listenerAttacher('resize',cbIntercept.resize,false)) =
this.listenersAttached =3D false;
	if(!wpniAds.utils.listenerAttacher('scroll',cbIntercept.resize,false)) =
this.listenersAttached =3D false;
	this.listenersAttached =3D true;
	return this.listenersAttached;
}

cbIntercept.resize =3D function ()
{
=09
	var thisFunc =3D wpniAds.utils.resizeDiv;
	thisFunc.execute('cbIntAbs','width','max')
	thisFunc.execute('cbIntAbs','height','max')
	thisFunc.execute('cbIntContAbs','width','window')
	thisFunc.execute('cbIntContAbs','height','window')
}

cbIntercept.close =3D function ()
{
	cbIntercept.execute('none');
	return true;
}

cbIntercept.leaveSite =3D function ()
	{
			cbIntercept.execute('none')
			=
window.open('http://www.careerbuilder.com/?lr=3Dcbwpni&siteid=3Dcbwpni001=
&nid=3Droll_findajob')
	}
=09
cbIntercept.execute =3D function()
{
=09
	if(!cbIntercept.attachListeners()) return;
=09

	if(!arguments[0]) arguments[0] =3D 'block';
=09
	//check to see if cbContainer DIV is there. If not, intializes it.
	if(document.getElementById && =
!document.getElementById('cbIntContainer'))
	{
		cbIntContainerDIV =3D document.createElement('DIV');
		cbIntContainerDIV.id =3D 'cbIntContainer';
		cbIntContainerDIV.style.position =3D 'relative';
		cbIntContainerDIV.style.display =3D 'none';=09
		cbIntContainerDIV.style.zIndex =3D '10000';
		//cbIntContainerDIV.style.width=3D"20%";
		cbIntAbsDIV =3D document.createElement('DIV');
		cbIntAbsDIV.id =3D 'cbIntAbs';
		cbIntAbsDIV.style.position =3D 'absolute';
		cbIntAbsDIV.style.zIndex =3D '10001';
		cbIntAbsDIV.style.backgroundColor =3D '#777';
		cbIntAbsDIV.style.filter =3D "alpha(opacity=3D80)";
		cbIntAbsDIV.style.opacity =3D .8;
=09
		cbIntAbsContDIV =3D document.createElement('DIV');
		cbIntAbsContDIV.id =3D 'cbIntContAbs';
		cbIntAbsContDIV.style.position =3D 'absolute';
		cbIntAbsContDIV.style.zIndex =3D '10002';
		cbIntAbsContDIV.style.textAlign =3D =
((navigator.userAgent.toLowerCase().match("firefox"))?'-moz-':'') + =
'center';

		cbIntAbsContDIV.innerHTML =3D '<div style=3D"display: table; =
height:100%;width:100%;text-align:center;#position: relative;"><div =
style=3D" #position: absolute; #top: 50%;#left:50%;display: table-cell; =
vertical-align: middle;"><div style=3D"#position: relative; #top: =
-50%;#left:-50%;"><img style=3D"cursor:pointer" =
src=3D"http://www.washingtonpost.com/wp-srv/images/Jobs_SplashPage_REV4.g=
if" usemap=3D"#cbMap" border=3D"0" width=3D"429" height=3D"342" /><map =
name=3D"cbMap"><area shape=3D"rect" coords=3D"360,0,428,20"  onclick =3D =
"cbIntercept.close()" target=3D"_blank"/><area shape=3D"rect" =
coords=3D"0,0,360,251" =
href=3D"http://www.washingtonpost.com/wl/jobs/home?nav=3Dcbsplash"/><area=
 shape=3D"rect" coords=3D"360,20,428,251" =
href=3D"http://www.washingtonpost.com/wl/jobs/home?nav=3Dcbsplash"/><area=
 shape=3D"rect" coords=3D"0,254,428,341" =
href=3D"javascript:cbIntercept.leaveSite()"/></map></div></div></div>';
		=20
		cbIntContainerDIV.appendChild(cbIntAbsDIV);
		cbIntContainerDIV.appendChild(cbIntAbsContDIV);
	=09
		=
document.body.insertBefore(cbIntContainerDIV,document.body.firstChild);
	}
=09
=09
	if(document.getElementById && =
document.getElementById('cbIntContainer'))
	{
		if(arguments[0] =3D=3D 'block')
		{
			this.resize();
		}
		document.getElementById('cbIntContainer').style.display =3D =
arguments[0];
		wpniAds.utils.visibilityByTagName((arguments[0] =3D=3D =
'block')?'hidden':'visible','embed','object','select','iframe')
	}
=09
}
end of cbIntercept */


googleAds =3D =
{'googleVars':{'google_safe':'high','google_ad_client':'ca-washingtonpost=
-article-site_js','google_ad_output':'js','google_ad_channel':'other','go=
ogle_skip':0,google_max_num_ads:3,google_ad_section:'default'}};

googleAds.nodeHacks =3D =
['/comics','/foodanddining','/travel','/crosswords'];

googleAds.nodeCheck =3D function (cNode)
{
   //loops through nodeHacks
  =20
   for(var a =3D 0; a < this.nodeHacks.length; a++)
   {
=09
=09
	if(cNode.match(this.nodeHacks[a]))
	{
	=09
 		nodeReg =3D RegExp(this.nodeHacks[a],'gi');
		return this.nodeHacks[a].replace(/[^a-z0-9]/gi,'');
	}
   }
   return cNode.split('/')[0];
}
googleAds.debug =3D function ()
{
	 for(a in this.googleVars)
	 {
	    adopsDebug('<b>' + a + ':</b> ' + this.googleVars[a]+'<br>');
	 }
	return true;
}

//function to see if the vertical distance between two elements is =
larger than the viewport
googleAds.vertCheck =3D function (posId1,posId2)
{
 =20
		wpniAds.utils.wabs.recalc();
		var windowHeight =3D wpniAds.utils.wabs.windowheight;
		var offset1=3Ddocument.getElementById(posId1).offsetTop;
		var offset2=3Ddocument.getElementById(posId2).offsetTop;
		adopsDebug('<b>' + posId1 + ' vertical position:</b> ' + offset1 + =
'<br>');
		adopsDebug('<b>' + posId2 + ' vertical position:</b> ' + offset2 + =
'<br>');
		adopsDebug('<b>windowHeight:</b> ' + windowHeight + '<br>');
       		//return boolean answer to this question:
	        //is the distance between the two boxes greater than the height =
of the viewport?
		return (offset1 - offset2 > windowHeight) || (offset2 - offset1 > =
windowHeight);
		adopsDebug(e + '<br/>')
		return;

}

googleAds.execute =3D function (pageType,cNode,pos,adCount,test)
{
 adopsDebug('<b =
style=3D"font-size:12px">googleAds("'+pageType+'","'+cNode+'","'+pos+'","=
'+adCount+'",'+test+')</b><br>');

 this.googleVars.google_ad_client =3D 'ca-washingtonpost-' + =
((pageType=3D=3D'article')?'article-site':'basic') + '_js';
 this.googleVars.google_ad_channel =3D pageType + '_' + =
this.nodeCheck(cNode,pos) + '_' + pos;
 this.googleVars.google_max_num_ads =3D adCount;
 this.googleVars.google_ad_test =3D (test)?'on':'off';
 for(var a in this.googleVars)
 {
 =20
  eval(a + '=3D"' + this.googleVars[a] + '"');
 }
=20
=20
// if( pos !=3D 'right' || !document.getElementById('ad_links_bottom') =
)//|| googleAds.vertCheck('ad_links_bottom','googleRightBox')  )
// {=20
  document.write('<div style=3D"margin-top:4px"></div><s\cript =
src=3D"http://media.washingtonpost.com/wp-adv/adproducts/advertisingLinks=
/article_display.js"></s\cript>');
  this.debug();
 this.googleVars.google_skip +=3D parseInt(adCount);
/* }
 else
 {
 this.debug();
  adopsDebug('<b>Sorry, the divs were too close vertically to render a =
right rail adSense box.</b><br>');
 }*/
}

//quigo links
wpAds=3D(typeof wpAds!=3D'undefined')?wpAds:{};
wpAds.textlinks =3D
{
		'templates':{
		'article':{
			'inner':{
				'artsandliving':[1483519,1900773,228,215],
				'business':[1483534,1900771,228,215],
				'education':[1484181,1909768,228,215],
				'health':[1484178,1909769,228,215],
				'politics':[1483549,1900769,228,215],
				'sports':[1483579,1900772,228,215],
				'technology':[1484175,1909767,228,215],
				'news':[1483491,1900767,228,215],
				'ros':[1483564,1900770,228,215]
			},
			'bottom':{
				'artsandliving':[1483522,1900773,624,225],
				'business':[1483537,1900771,624,225],
				'education':[1484172,1909768,624,225],
				'health':[1484169,1909769,624,225],
				'politics':[1483552,1900769,624,225],
				'sports':[1483582,1900772,624,225],
				'technology':[1484166,1909767,624,225],
				'news':[1483494,1900767,624,225],
				'ros':[1483567,1900770,624,225]
			}
		},
		'index':{
			'leftrail':{
				'washingtonpost.com':[1483488,1900768,305,215]
			},
			'rightrail':{
				'artsandliving':[1483525,1900773,336,230],
				'business':[1483540,1900771,336,230],
				'education':[1484190,1909768,336,230],
				'health':[1484187,1909769,336,230],
				'politics':[1483555,1900769,336,230],
				'sports':[1483585,1900772,336,230],
				'technology':[1484184,1909767,336,230],
				'news':[1483497,1900767,336,230],
				'ros':[1483570,1900770,336,230]
			}
		},
		'index2':{
			'rightrail':{
				'artsandliving':[1483528,1900773,336,230],
				'business':[1483543,1900771,336,230],
				'education':[1484199,1909768,336,230],
				'health':[1484196,1909769,336,230],
				'politics':[1483558,1900769,336,230],
				'sports':[1483588,1900772,336,230],
				'technology':[1484193,1909767,336,230],
				'news':[1483500,1900767,336,230],
				'ros':[1483573,1900770,336,230]
			}
		},
		'subsection':{
			'bottom':{
				'artsandliving':[1483531,1900773,420,230],
				'business':[1483546,1900771,420,230],
				'education':[1484208,1909768,420,230],
				'health':[1484205,1909769,420,230],
				'politics':[1483561,1900769,420,230],
				'sports':[1483591,1900772,420,230],
				'technology':[1484202,1909767,420,230],
				'news':[1483503,1900767,420,230],
				'ros':[1483576,1900770,420,230]
			}
		},
		'blog_main':{
			'inner':{
				'artsandliving':[1484031,1900773,454,215],
				'business':[1484034,1900771,454,215],
				'education':[1484133,1909768,454,215],
				'health':[1484130,1909769,454,215],
				'politics':[1484037,1900769,454,215],
				'sports':[1484043,1900772,454,215],
				'technology':[1484127,1909767,454,215],
				'news':[1484028,1900767,454,215],
				'ros':[1484040,1900770,454,215]
			},
			'rightrail':{
				'artsandliving':[1484049,1900773,336,215],
				'business':[1484052,1900771,336,215],
				'education':[1484142,1909768,336,215],
				'health':[1484139,1909769,336,215],
				'politics':[1484055,1900769,336,215],
				'sports':[1484061,1900772,336,215],
				'technology':[1484136,1909767,336,215],
				'news':[1484046,1900767,336,215],
				'ros':[1484058,1900770,336,215]
			}
		},
		'blog_permalink':{
			'inner':{
				'artsandliving':[1484067,1900773,454,215],
				'business':[1484070,1900771,454,215],
				'education':[1484154,1909768,454,215],
				'health':[1484151,1909769,454,215],
				'politics':[1484073,1900769,454,215],
				'sports':[1484079,1900772,454,215],
				'technology':[1484145,1909767,454,215],
				'news':[1484064,1900767,454,215],
				'ros':[1484076,1900770,454,215]
			},
			'rightrail':{
				'artsandliving':[1484085,1900773,336,215],
				'business':[1484088,1900771,336,215],
				'education':[1484163,1909768,336,215],
				'health':[1484160,1909769,336,215],
				'politics':[1484091,1900769,336,215],
				'sports':[1484097,1900772,336,215],
				'technology':[1484157,1909767,336,215],
				'news':[1484082,1900767,336,215],
				'ros':[1484094,1900770,336,215]
			}
		}
	},
	'cat_check':function(c){
		var c =3D c.split('/')[0];
		for(var b in wpAds.textlinks.category)
		{
			for(var e in wpAds.textlinks.category[b])
			{
				if(wpAds.textlinks.category[b][e]=3D=3Dc)
				{
					var d =3D b;
				}
			}
		}
		return d
	},
	'article_check':function(){
		return ((!urlCheck('_Comments.html')) && =
(urlCheck('/wp-dyn/content/article/') || =
urlCheck('/wp-dyn/content/discussion/')))?true:false;
	},
	'index_check':function(){
		var k =3D ['politics','opinion','business','technology'];
		var j =3D k.length;
		for(var i=3D0;i<j;i++)
		{
			if(typeof commercialNode !=3D 'undefined' && =
commercialNode.match(k[i]))
			{
				return (commercialNode.match(k[i]+'/'))?false:'index';
			}
		}
		return 'index2'
	},
	'blog_check':function(){
		return =
(urlCheck(/\/\d{4}\/\d{2}\/.*\.htm/gi))?'blog_permalink':'blog_main';
	},
	'category':{
		'washingtonpost.com':['washingtonpost.com'],
		=
'artsandliving':['artsandliving','artsandlivingarticle','artsandleisure',=
'artsandleisurearticle','dating','entertain','entertainarticle','entertai=
nbestbets','entertainment','entertainmentarticle','food','foodarticle','m=
arket','pets','photo','photoarticle','shoplocal','shopping','shoppingNEW'=
,'shoppingUSED','style','stylearticle','tastepost','travel','traveldirect=
ory','travel.sidestep','travelarticle'],
		=
'news':['nation','nationarticle','news','world','worldarticle','religion'=
,'realestate','digest','digestarticle','fairfaxextra','liveonline','liveo=
nlinearticle','localportal','metro','metroarticle','mostemailed','mostvie=
wedarticles','opinion','opinionarticle'],
		'business':['business','allbusiness','businessarticle'],
		'education':['education'],
		'health':['health'],
		'politics':['politics','supertuesday','wiki'],
		'technology':['technology'],
		'sports':['sports','sportsarticle']
	},
	'init':function(a,b,c){
		var c =3D (typeof wpAds.textlinks.cat_check(c)!=3D'undefined') ? =
wpAds.textlinks.cat_check(c) : 'ros';
		var c =3D (typeof wpAds.textlinks.templates[a][b][c] =3D=3D =
'undefined') ? 'ros' : c;
		var d =3D a+'-'+b+'-'+c;
		wpAds.textlinks.exec(wpAds.textlinks.templates[a][b][c],d);
	},
	'exec':function(a,b)
	{
		if(urlCheck('debugAdCode'))
		{
			var b =3D b.split('-');
			=
document.write('template=3D'+b[0]+';pos=3D'+b[1]+';channel=3D'+b[2]+';');=
=09
		}
		document.write('<s'+'cript =
type=3D"text/javascript">adsonar_placementId=3D' + a[0] + =
';adsonar_pid=3D' + a[1] + ';adsonar_ps=3D-1;adsonar_zw=3D' + a[2] + =
';adsonar_zh=3D' + a[3] + =
';adsonar_jv=3D"ads.adsonar.com";</s'+'cript><s'+'cript =
language=3D"JavaScript" =
src=3D"http://js.adsonar.com/js/adsonar.js"></s'+'cript>');
	}
}

function checkForQuigoSizes()
{
	if(document.getElementById('ad_links_inner') && =
document.getElementById('article_body') && =
document.getElementById('inline-ad')){
		var ad_links_inner =3D {
			'top':document.getElementById('ad_links_inner').offsetTop,
			'height':document.getElementById('ad_links_inner').scrollHeight
		}
		var article_body =3D {
			'top':document.getElementById('article_body').offsetTop,
			'height':document.getElementById('article_body').offsetHeight
		}
		var inline_ad =3D {
			'top':document.getElementById('inline-ad').offsetTop,
			'height':document.getElementById('inline-ad').scrollHeight
		}
		if ( ( article_body.top + article_body.height ) > ( ad_links_inner.top =
+ ad_links_inner.height + inline_ad.height + ( inline_ad.top - ( =
ad_links_inner.top + ad_links_inner.height ) ) ) ) {
			document.getElementById('ad_links_inner').style.display =3D 'block';
		}
	}
}


// This code is calling an Orbit/Non-commercial javascript which =
piggy-backs on ad_v2.js because this file has such
// deep penetration across all our pages and vendors
if ( typeof PIGGY_BACK_ALREADY_CALLED =3D=3D "undefined" || =
!PIGGY_BACK_ALREADY_CALLED ) {
   document.write('<s\cript =
src=3D"http://media.washingtonpost.com/wp-srv/javascript/piggy-back-on-ad=
s.js"></s\cript>');
}




//Firefox 3 Iframe Issue
function addLoadEvent(_function) {
=09
var _onload =3D window.onload;
if ( typeof window.onload !=3D 'function' ) {
if ( window.onload ) {
window.onload =3D _function;
} else {
var _addEventListener =3D window.addEventListener || =
document.addEventListener;
var _attachEvent =3D window.attachEvent || document.attachEvent;
if ( _addEventListener ) {
_addEventListener('load', _function, true);
return true;
} else if ( _attachEvent ) {
var _result =3D _attachEvent('onload', _function);

return _result;
} else {
//todo: preloading fix for ie5.2 on mac os
return false;
}
}
} else {
window.onload =3D function() {
_onload();
_function();
}
}
}

function reloadIframe()
{
	var f =3D document.getElementsByTagName('iframe');
	for (var i=3D0; i<f.length; i++) f[i].src =3D f[i].src;
}


if (navigator.userAgent.match('Firefox/3') && =
location.href.match('http://projects.washingtonpost.com/2008/elections/')=
){
	addLoadEvent(reloadIframe)
}
/*
//11565-JM-219456646 - 11020-MM
if( urlCheck('center_skin') || ( commercialNode =3D=3D =
'washingtonpost.com' && (estNowWithYear >=3D '200911110000' && =
estNowWithYear <=3D '200911112359') ) ){
	document.write('<link rel=3D"stylesheet" type=3D"text/css" =
href=3D"http://www.washingtonpost.com/wp-srv/ad/skin_margin.css"/>');
}
*/
if( urlCheck('center_skin') || ( commercialNode =3D=3D =
'washingtonpost.com' && (estNowWithYear >=3D '200912150000' && =
estNowWithYear <=3D '200912152359') ) ){
	document.write('<link rel=3D"stylesheet" type=3D"text/css" =
href=3D"http://www.washingtonpost.com/wp-srv/ad/skin_margin.css"/>');
}



------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media3.washingtonpost.com/wp-srv/tools/fd/cleanprint.js

document.write('<scr'+'ipt type=3D"text/javascript" =
name=3D"cleanprintloader" =
src=3D"http://cache-01.cleanprint.net/cp/ccg?divId=3D2233"></sc'+'ript>')=
;
function PrintMeNow(){
	void( FDCPUrl() );
}
------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media3.washingtonpost.com/wp-srv/ad/ad_configurations_article_v2.js

if (typeof commercialNode =3D=3D 'undefined' || commercialNode =3D=3D =
'one') commercialNode =3D (typeof thisNode !=3D 'undefined' && thisNode =
!=3D 'one')?thisNode:'technology';

function getCookie(name) {
	var cookie =3D " " + document.cookie;
	var search =3D " " + name + "=3D";
	var setStr =3D null;
	var offset =3D 0;
	var end =3D 0;
	if (cookie.length > 0) {
		offset =3D cookie.indexOf(search);
		if (offset !=3D -1) {
			offset +=3D search.length;
			end =3D cookie.indexOf(";", offset)
			if (end =3D=3D -1) {
				end =3D cookie.length;
			}
			setStr =3D unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}


var adOpsLocalFlag =3D (getCookie('WPATC') && =
getCookie('WPATC').match('C=3D1:'))?true:false;


function flashChecker() {
plugIn =3D false;
plugInVersion =3D 0;
if(typeof ActiveXObject !=3D 'undefined')
{
	for(var i=3D0;i<12;i++)
	{try{var flash =3D new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + =
i);plugInVersion =3D i;plugIn =3D 'You Are Running Explorer Flash '  + =
plugInVersion}catch(e){}
	}
}
else if(navigator.mimeTypes && =
navigator.mimeTypes["application/x-shockwave-flash"] && =
navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin){var =
y =3D navigator.plugins["Shockwave Flash"].description;plugInVersion =3D =
y.charAt(y.indexOf('.')-1); plugIn =3D "You Are Running Mozilla Flash " =
+ plugInVersion}
else {plugIn =3D 'Not Sure--There is No ActiveXObject, nor is there a =
Mozilla Flash'};
return plugIn;
}

function activeXChecker () {
	return(typeof ActiveXObject !=3D 'undefined')?true:false
}

function contentCategories(_commercialNode,_targSec)
{
	if(_commercialNode.charAt(_commercialNode.length-1) !=3D '/')
	{
		_commercialNode +=3D '/';
	}
=09
	var contCatArray =3D new Array();


	contCatArray['lifestyle'] =3D new Array(
'^wpni.onfaith.blog/','^jobs/','^jobsarticle/','^admin/','^adminarticle/'=
,'^artsandliving/','^artsandlivingarticle/','^cityguide/','^entertainment=
/','^fantasy.fleaflicker/','^foodarticle/','^health/','^healtharticle/','=
^home/','^homearticle/','^jezebelstomb/','^kidspost/','^kidspostarticle/'=
,'^loudounextra/','^photo/','^photoarticle/','^print/','^printarticle/','=
^science/','^shoplocal/','^shopping/','^smartliving/','^sports/','^style/=
','^stylearticle/','^television/','^travel/','^traveldirectory/','^travel=
.sidestep/','^travelarticle/','^weather/','^weatherarticle/','^religion/'=
,'^cars/','^food/','^pets/','^sportsarticle/');
	contCatArray['execnews'] =3D new =
Array('^postglobal.blog/','^smallbiz/','^mypost/','^mypost.discussions/',=
'^mywashpost/','^allbusiness/','^business/','^businessarticle/','^digest/=
','^digestarticle/','^washingtonpost.com/','^nation/','^nationarticle/','=
^news/','^newsarticle/','^opinion/','^opinionarticle/','^politics/','^pol=
iticsarticle/','^reviewed.com/','^technology/','^world/','^worldarticle/'=
,'liveonline/world','liveonlinearticle/world','liveonline/business','live=
onlinearticle/business','liveonline/nation','liveonlinearticle/nation','l=
iveonline/politics','liveonlinearticle/politics','liveonline/jobs/lifeatw=
ork','liveonlinearticle/jobs/lifeatwork','liveonline/jobs/onthejoblive','=
liveonlinearticle/jobs/onthejoblive');
	contCatArray['style'] =3D =
['^liveonline/books','^liveonline/food','^liveonline/postmag','^liveonlin=
e/style','^liveonlinearticle/style/tv','^liveonlinearticle/style/tellmeab=
outit','^liveonlinearticle/style/funnyyoushouldask','^liveonlinearticle/s=
tyle/reliablesource','^liveonlinearticle/style/stationbreak','^market/sho=
pping/books','^market/weddings411','^market/weddings','^market/magazines'=
,'^market/garden','^market/books','^market/appliances','^market/apparel',=
'^market/shopping/apparel','^market/shopping/appliances','^market/shoppin=
g/holiday','^market/shopping/weddings','^market/shopping/magazines','^nat=
ion/columns/kurtzhoward','^photo/style','^print/style','^printarticle/sty=
le']
 =20
	var resultsArray =3D true;
=09
	for(var a =3D 0; a < contCatArray[_targSec.toLowerCase()].length; a++)
	{
		var re =3D RegExp(contCatArray[_targSec][a],'gi');
		if (_commercialNode.match(re))
		{
			return true;
		}
	}
=09
	return false;
}

var adOpsLocalUser =3D getCookie && ( !getCookie('WPATC') || =
getCookie('WPATC').match('C=3D1:') );



function dateToString(date) {
var yyyy =3D date.getYear();
var mm =3D date.getMonth() + 1;
var dd =3D date.getDate();
var hour =3D date.getHours();
var min =3D date.getMinutes();

if (mm < 10) mm =3D "0"+mm;
if (dd < 10) dd =3D "0"+dd;
if (hour < 10) hour =3D "0"+hour;
if (min < 10) min =3D "0"+min;
return ''+mm+dd+hour+min;
}

function estOffset(dateObj)
{
	var mo =3D dateObj.getMonth()+1;
	if (mo < 2 || mo > 10) return 300;
	if (mo > 2 && mo < 10) return 240;
	var last_sunday_index =3D   ( ( dateObj.getDate() - dateObj.getDay() - =
1 ) / 7) + 1;
	if(mo=3D=3D2)
	{
	  return ( last_sunday_index > 2 || (last_sunday_index =3D=3D 2 && =
dateObj.getHours() >=3D 2))?240:300
	}
	else
	{
	 return ( last_sunday_index > 1 || (last_sunday_index =3D=3D 1 && =
dateObj.getHours() >=3D 2))?300:240;
	}
}

if(typeof estNow =3D=3D 'undefined' || typeof estNowWithYear =3D=3D =
'undefined')
{
	var estNow =3D new Date();
	var estNowInMillis =3D estNow.getTime();
	var millisFromEST =3D (estNow.getTimezoneOffset() - estOffset(estNow)) =
* 60000;
	var estNow =3D new Date( estNowInMillis + millisFromEST )
	var estNowWithYear =3D estNow.getYear();
	var estNowWithYear =3D (estNowWithYear < 1900 )?estNowWithYear + =
1900:estNowWithYear;
	estNowWithYear =3D estNowWithYear.toString() + =
dateToString(estNow).toString() ;
}

function getDay(today) {return today.getDay()}
var today =3D new Date();
var now =3D dateToString(today);


var v2 =3D true;
//var adTemplate =3D 255 ;

// Define all possible ad positions
var BANNER_FLEX_TOP =3D 1 << 0;
var BANNER_FLEX_BOTTOM =3D 1 << 1;
var SKY_LEFT =3D 1 << 2;
var SKY_RIGHT =3D 1 << 3;
var BIGBOX_FLEX =3D 1 << 4;
var BIG_FLEX_RIGHT =3D 1 << 5;
var AD_LINKS_RIGHT =3D 1 << 6; //Overture Links Right (Not in DART)
var AD_LINKS_BOTTOM =3D 1 << 7; //Overture Links Bottom (Not in DART)
var TEXTLINKS =3D 1 << 8; // WP.com hosted links (Not in DART)
var VM =3D 1 << 9; // Not in DART
var SPONSORSHIP =3D 1 << 10;
var TILE_LEFT =3D 1 << 11; // Not in DART
var TILE_RIGHT =3D 1 << 12; // Not in DART
var TILE_RIGHT_TOP =3D 1 << 13; // 125x125 on Travel
var TOP_JOBS =3D 1 << 14;
var TOOLBOX_LEFT =3D 1 << 15;
var TOOLBOX_RIGHT =3D 1 << 16;
var TOOLBOX_BOTTOM =3D 1 << 17;
var TILE_RIGHT_TOP2 =3D 1 << 18; // 125x125 on Travel on right
var BLOG_FEATUREBAR =3D 1 << 19; // 446x45 blog bar
var INLINE_ARTICLE_AD =3D 1 << 20;
var TOOLBOX_LEFT_180X31 =3D 1 << 21;
var PORTAL_FEATUREBAR =3D 1 << 22; // 336x60 portal featurebar
var TILE_228X60 =3D 1 << 23; //228x60 on cooking
var GOOGLE_LINKS =3D AD_LINKS_BOTTOM;
var BIGBOX_RIGHT =3D 1 << 24;
var BLOG_INLINE_AD =3D 1 << 25;
var BLOG_INLINE_AD2 =3D 1 << 26;


// Define all possible ad templates
var NO_ADS =3D 0;
var NEWS =3D 1;
var NEWS_VM =3D 2;
var NEWS_TRAVEL =3D 3;
var NEWS_TECHNOLOGY =3D 4;
var PRINTER_FRIENDLY =3D 5;
var ENLARGED_PHOTO =3D 6;
var PRINTER_FRIENDLY_FLEX =3D 7;
var NEWS_OVERTURE_RIGHT =3D 8;
var NEWS_OVERTURE_RIGHT_VM =3D 9;
var NEWS_NO_OVERTURE =3D 10;
var SIMPLE =3D 11;
var BOTTOM_ONLY =3D 12;
var DEFAULT_TEMPLATE =3D NEWS;
var NEWS_LEFT_SKY =3D 13;
var TRAVEL_BY_TOPIC =3D 14;
var NEWS_BUSINESS =3D 15;
var LOCAL_PORTAL =3D 16;
var NEWS_TRAVEL_NO_TRT =3D 17;
var NEWS_TEST =3D 18;
var WEATHER =3D 19;
var SIMPLE_NO_LB =3D 20;


if (typeof thisNode =3D=3D 'undefined') thisNode =3D 'news';

// Define contents of ad templates
var templateConfigs =3D new Array();

templateConfigs[ NEWS ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT + =
AD_LINKS_BOTTOM + AD_LINKS_RIGHT + TOOLBOX_LEFT  + TOOLBOX_RIGHT + =
TOOLBOX_BOTTOM + TEXTLINKS + TILE_LEFT ;

templateConfigs[ NEWS_TEST ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT + =
AD_LINKS_BOTTOM + AD_LINKS_RIGHT  + TOOLBOX_LEFT + TOOLBOX_RIGHT + =
TOOLBOX_BOTTOM + TEXTLINKS + TILE_LEFT ;

templateConfigs[ NEWS_BUSINESS ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT + =
AD_LINKS_BOTTOM + AD_LINKS_RIGHT + TOOLBOX_LEFT  + TOOLBOX_RIGHT + =
TOOLBOX_BOTTOM + TEXTLINKS ;

templateConfigs[ NEWS_LEFT_SKY ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT + =
AD_LINKS_BOTTOM + AD_LINKS_RIGHT + TOOLBOX_LEFT  + TOOLBOX_RIGHT + =
TOOLBOX_BOTTOM + TEXTLINKS ;

templateConfigs[ NEWS_NO_OVERTURE ]  =3D BANNER_FLEX_TOP + =
BIG_FLEX_RIGHT + TOOLBOX_LEFT  + TOOLBOX_RIGHT + TOOLBOX_BOTTOM + =
TEXTLINKS ;

templateConfigs[ NEWS_VM ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT + =
AD_LINKS_BOTTOM + VM + AD_LINKS_RIGHT + TOOLBOX_LEFT  + TOOLBOX_RIGHT + =
TOOLBOX_BOTTOM + TEXTLINKS ;

templateConfigs[ NEWS_TRAVEL ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT + =
AD_LINKS_BOTTOM + VM + TILE_RIGHT_TOP + TILE_LEFT  + TILE_RIGHT + =
TEXTLINKS ;

templateConfigs[ NEWS_TRAVEL_NO_TRT ] =3D  templateConfigs[ NEWS_TRAVEL =
] - TILE_RIGHT_TOP

templateConfigs[ TRAVEL_BY_TOPIC ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT =
+ AD_LINKS_BOTTOM +  TILE_LEFT  + TILE_RIGHT + TEXTLINKS ;

templateConfigs[ NEWS_TECHNOLOGY ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT =
+ AD_LINKS_BOTTOM + TOOLBOX_LEFT  + TOOLBOX_RIGHT + TOOLBOX_BOTTOM + =
TEXTLINKS ;

templateConfigs[ PRINTER_FRIENDLY ]  =3D SKY_RIGHT + TOOLBOX_RIGHT + =
AD_LINKS_BOTTOM ;

templateConfigs[ PRINTER_FRIENDLY_FLEX ]  =3D BIGBOX_FLEX + =
TOOLBOX_RIGHT + AD_LINKS_BOTTOM ;

templateConfigs[ NEWS_OVERTURE_RIGHT ]  =3D BANNER_FLEX_TOP + =
BIG_FLEX_RIGHT + AD_LINKS_RIGHT + TOOLBOX_LEFT  + TOOLBOX_RIGHT + =
TOOLBOX_BOTTOM + TEXTLINKS ;

templateConfigs[ NEWS_OVERTURE_RIGHT_VM ]  =3D BANNER_FLEX_TOP + =
BANNER_FLEX_TOP + + AD_LINKS_RIGHT + VM + TOOLBOX_LEFT  + TOOLBOX_RIGHT =
+ TOOLBOX_BOTTOM + TEXTLINKS ;

templateConfigs[ ENLARGED_PHOTO ]  =3D SKY_RIGHT;

templateConfigs[ SIMPLE ]  =3D BANNER_FLEX_TOP + BIG_FLEX_RIGHT;

templateConfigs[ SIMPLE_NO_LB ]  =3D BIG_FLEX_RIGHT;

templateConfigs[ BOTTOM_ONLY ]  =3D BANNER_FLEX_BOTTOM;

templateConfigs[ LOCAL_PORTAL ]  =3D BANNER_FLEX_TOP + =
BANNER_FLEX_BOTTOM ;

templateConfigs[ WEATHER ] =3D BANNER_FLEX_TOP +  BIG_FLEX_RIGHT;

templateConfigs[ NO_ADS ] =3D 0;

// Make node-to-template assignments
var nodeConfigs =3D new AdConfigurations();
nodeConfigs.addConfiguration( 'metro/blackmen')
			.addTemplateAssignment ( new TemplateAssignment( BOTTOM_ONLY,1 ) );
nodeConfigs.addConfiguration( 'education')
			.addTemplateAssignment ( new TemplateAssignment( NEWS_VM,1 ) );
nodeConfigs.addConfiguration( 'travel' )
			.addTemplateAssignment ( new TemplateAssignment( NEWS_TRAVEL,1) );
nodeConfigs.addConfiguration( 'travel/jerseyshore' )
			.addTemplateAssignment ( new TemplateAssignment( =
NEWS_TRAVEL_NO_TRT,1) );
nodeConfigs.addConfiguration( 'artsandliving/travel/travelbytopic' )
			.addTemplateAssignment ( new TemplateAssignment( TRAVEL_BY_TOPIC,1) =
);
nodeConfigs.addConfiguration( 'health')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'print')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'weather')
			.addTemplateAssignment ( new TemplateAssignment( WEATHER,1 ) );
nodeConfigs.addConfiguration( 'realestate')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'artsandliving')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'artsandliving/foodanddining')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'business')
			.addTemplateAssignment ( new TemplateAssignment( NEWS_BUSINESS,1 ) );
nodeConfigs.addConfiguration( 'technology')
			.addTemplateAssignment ( new TemplateAssignment( NEWS_TECHNOLOGY,1 ) =
);
nodeConfigs.addConfiguration( 'metro')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'admin/classifieds/publicnotices')
			.addTemplateAssignment ( new TemplateAssignment( SIMPLE,1 ) );
nodeConfigs.addConfiguration( 'sports')
			.addTemplateAssignment ( new TemplateAssignment( NEWS_VM,1 ) );
nodeConfigs.addConfiguration( 'print/style')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'artsandliving')
			.addTemplateAssignment ( new TemplateAssignment( NEWS_VM,1 ) );
nodeConfigs.addConfiguration( 'politics/special/7')
			.addTemplateAssignment ( new TemplateAssignment( NEWS_NO_OVERTURE,1 ) =
);
nodeConfigs.addConfiguration( 'kidspost')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'opinion')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'world')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'politics')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'nation')
			.addTemplateAssignment ( new TemplateAssignment( NEWS,1 ) );
nodeConfigs.addConfiguration( 'localportal')
			.addTemplateAssignment ( new TemplateAssignment( LOCAL_PORTAL,1 ) );
nodeConfigs.addConfiguration( 'news/test')
			.addTemplateAssignment ( new TemplateAssignment( NEWS_TEST,1 ) );
		=09
if(thisNode=3D=3D'media/politics' && =
commercialNode=3D=3D'supertuesday/buyout')
{
	nodeConfigs.addConfiguration( 'media/politics')
			.addTemplateAssignment ( new TemplateAssignment( SIMPLE_NO_LB,1 ) );
}

// start of adTemplate assignments
if (!location.href.match('demoAds'))
{


// For this node, select a template
adTemplate =3D nodeConfigs.getTemplate( thisNode );






if(thisNode =3D=3D 'mypost')
{
	adTemplate -=3D BANNER_FLEX_TOP
}

//
if(typeof commercialNode !=3D 'undefined' && =
!commercialNode.match('artsandliving/foodanddining') )
{
	adTemplate +=3D INLINE_ARTICLE_AD;
}



var pTechVideos =3D =
['VI2008051401294','VI2008051302369','VI2008051302370']
for(var p=3D0;p<pTechVideos.length;p++)
{
	if(document.location.href.match(pTechVideos[p]))
	{
		adTemplate -=3D BANNER_FLEX_TOP;
	}
}



if ((location.href.match('channelthis') && commercialNode =3D=3D =
'artsandliving/blogs') && (now <=3D '11302359')){
commercialNode +=3D '/channelthis';
}

// 'Faster Forward' blog fix
if (location.href.match('fasterforward') && commercialNode =3D=3D =
'technology/blogs'){
commercialNode =3D 'technology/blogs/fasterforward';
}

// 'Going Out Guru's' blog fix
if (location.href.match('goingoutgurus') && commercialNode =3D=3D =
'artsandliving/cityguide/blogs') { commercialNode =3D 'cityguide/blogs' =
}

// Post Tech Fix-RZ
if(typeof commercialNode !=3D 'undefined' && commercialNode =3D=3D =
'blog/posttech')
{
	commercialNode =3D 'technology/blog/posttech';
}


if(commercialNode.match('politics/convention/chevron') && =
location.href.match('postpoliticstv'))
{
	adTemplate -=3D BIG_FLEX_RIGHT;
}

//11199,11102-DG
var revSciVal=3D(getCookie('rsi_segs'))?getCookie('rsi_segs'):'';
if(location.href.match('feignGov')){revSciVal+=3D'J05531_10483;J05531_101=
73;J05531_10145'};
if(!(adTemplate & BANNER_FLEX_BOTTOM) && =
((revSciVal.match('J05531_10483')||revSciVal.match('J05531_10173'))&&(est=
NowWithYear<=3D'200912312359'))||(revSciVal.match('J05531_10145')&&estNow=
WithYear<=3D'200910312359'))
{
	adTemplate+=3DBANNER_FLEX_BOTTOM;=09
}

//11371-DG
if(adOpsLocalFlag && (!(adTemplate & BANNER_FLEX_BOTTOM) && =
estNowWithYear <=3D '200911302359'))
{
	adTemplate +=3D BANNER_FLEX_BOTTOM;=09
}


//9949-HS-215690153,215651928,215651931,215651932,215651934,215651937,215=
651939=20
if(estNowWithYear >=3D '200906170000' &&  estNowWithYear <=3D =
'200912312359')
{
	adTemplate +=3D TOOLBOX_LEFT_180X31
}

}

//10946-MM
if(commercialNode=3D=3D'education'){
	adTemplate +=3D PORTAL_FEATUREBAR;
}


//11422-MB-218787198
if((commercialNode =3D=3D 'cityguide/gogblog') && (estNowWithYear >=3D =
'200910260000' && estNowWithYear <=3D '200911012359')){
	adTemplate +=3D SKY_LEFT;
}

//11/12/2009-ML
if(commercialNode.match('timespace') && (adTemplate & =
BANNER_FLEX_BOTTOM)) {
	adTemplate -=3D BANNER_FLEX_BOTTOM;
}

if(typeof urlCheck=3D=3D'function' && urlCheck('noRightRail'))
{
	adTemplate -=3D TEXTLINKS;

	if((adTemplate & TILE_RIGHT_TOP)=3D=3DTILE_RIGHT_TOP){
		adTemplate -=3D TILE_RIGHT_TOP;
	}
	if((adTemplate & TILE_RIGHT_TOP2)=3D=3DTILE_RIGHT_TOP2){
		adTemplate -=3D TILE_RIGHT_TOP2;
	}
	if((adTemplate & TOP_JOBS)=3D=3DTOP_JOBS){
		adTemplate -=3D TOP_JOBS;
	}
	if((adTemplate & VM)=3D=3DVM){
		adTemplate -=3D VM;
	}
}

if(!(adTemplate & BIGBOX_RIGHT) && !(adTemplate & BLOG_INLINE_AD) && =
!(adTemplate & BLOG_INLINE_AD2) && (estNowWithYear <=3D '200912312359'))
{
adTemplate +=3D BIGBOX_RIGHT + BLOG_INLINE_AD + BLOG_INLINE_AD2;=09
}


function bottomLBLever(commercialNode)
{
	var comm_exclusions =3D =
['artsandliving','cityguide','jobs','cars','realestate','rentals'];
	var i =3D comm_exclusions.length;
	while(i--)
	{
		if(commercialNode.match(comm_exclusions[i]))
		{
			return false
		}
	}
	return true;

}

//11876-RZ
if(typeof commercialNode !=3D 'undefined' && !(adTemplate & =
BANNER_FLEX_BOTTOM) && estNowWithYear<=3D'200912312359' && =
bottomLBLever(commercialNode))
{
	adTemplate +=3D BANNER_FLEX_BOTTOM;
}




//11675-MB
if((commercialNode=3D=3D'politics/fedpage' || =
commercialNode.match('holidayguide2009')) && (adTemplate & =
BANNER_FLEX_BOTTOM))  {
	adTemplate -=3D BANNER_FLEX_BOTTOM;
}

/*else
{
	adTemplate =3D 0;
}*/


if( location.href.match('allAds') )
{
	var adTemplate =3D 0;
	for(var a =3D 0; a < 24; a++)
	{
		adTemplate +=3D 1 << a;
	}
}


if (document.location.href.indexOf("debugAdCode") !=3D -1)
{
	document.writeln("<p>")
	document.writeln("Ad Template: " + adTemplate + '<br/>');
	document.writeln("Local User: " + adOpsLocalUser + '<br/>');
	//document.writeln("Content Category: " + =
contentCategories(commercialNode) + '<br/>');
	document.writeln("Flash Version: " + flashChecker() + '<br/>');
	document.writeln("ActiveXObject: " + activeXChecker() + '<br/>');
	document.writeln("<p>")
}

// Define objects
// TemplateAssignment associates a template with a frequency ( 0 <=3D =
frq <=3D 1 )
function TemplateAssignment( tmpl, frq )
{
  this.template =3D tmpl;
  this.frequency =3D ( ( frq >=3D 0 ) && ( frq <=3D 1 ) ) ? frq : 0 ;
}

// NodeTemplateAssignment collects TemplateAssignment objects for a =
specific node
function NodeTemplateAssignment ( node )
{
  this.node =3D node;
  this.templates =3D new Array();
  this.templateCount =3D 0;
 =20
  this.addTemplateAssignment =3D _addAdTemplateAssignment;
  this.selectTemplate =3D _adSelectTemplate;
}

// AdConfigurations collects NodeTemplateAssignments for the site
function AdConfigurations ()
{
  this.configs =3D new Array();
  this.length =3D 0;
 =20
  this.addConfiguration =3D _addAdConfiguration;
  this.getTemplate =3D _adGetTemplate;
}

function _adSelectTemplate()
{
  var base =3D 0;
  var rNum =3D Math.random();
  var rTemplate =3D 0;
 =20
  for (var count =3D 0; count < this.templates.length; count++)
  {
    if ( rNum < this.templates[count].frequency + base )=20
    {
      rTemplate =3D this.templates[count].template;
      break;
      //return this.templates[count].template;
    }
    else
    {
      base +=3D this.templates[count].frequency;
    }
  }
  return rTemplate;
}

function _adGetTemplate ( node )
{
  adTemplate =3D DEFAULT_TEMPLATE;
  var base =3D 0;
  var bestMatch =3D 0;
  for ( var count =3D 0; count < this.length; count++ )
  {
    if ( this.configs[count].node =3D=3D node )
    {
      adTemplate =3D this.configs[count].selectTemplate();
      break;
    }
    else if (( node.indexOf(this.configs[count].node) =3D=3D 0 ) && ( =
this.configs[count].node.length > bestMatch ))
    {
      adTemplate =3D this.configs[count].selectTemplate();
      bestMatch =3D this.configs[count].node.length;
    }
  }
  return templateConfigs[adTemplate];
}

function _addAdTemplateAssignment( templateAssignment )
{
  this.templates[this.templateCount++] =3D templateAssignment;
  return this;
}

function _addAdConfiguration ( n )
{
  this.configs[this.length++] =3D new NodeTemplateAssignment (n);
  return this.configs[this.length - 1];
}

// JavaScript Document
------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media3.washingtonpost.com/wp-srv/popjs/popupCampaignClasses.js

/*
 * Popup Campaign Manager provides the objects and methods needed to =
control multiple popup campaigns
 * It is controlled by popupCampaigns.js; by itself it does nothing that =
you'll see on a page.
 * It needs one preset variable: thisNode must be set to the node to =
which the page belongs before importing this javascript source.
 * TO CHANGE THE DOUBLECLICK CAP OR DOUBLECLICK TIMEFRAME, EDIT =
DClickCap and DClickTimeFrame IN THIS FILE
 */

if ( typeof thisNode =3D=3D 'undefined' ) thisNode =3D 'news';

// CONSTANTS
// REGISTERED|NOT_REGISTERED identify whether the user is defined (based =
on the WPATC cookie).
// To define both user groups, use addition (REGISTERED + NOT_REGISTERED =
=3D=3D all users)
var REGISTERED =3D 1;
var NOT_REGISTERED =3D 2;

// ARTICLE|FRONT|IMPLICIT|EXPLICIT define the types of pages to which a =
mapping applies.
// To combine several page types, use addition=20
// (FRONT + ARTICLE + IMPLICIT =3D=3D all section front and articles in =
this node and all its children)
var ARTICLE =3D 1;
var FRONT =3D 2;
var IMPLICIT =3D 4;
var EXPLICIT =3D 0;

// These constants make the time conversion to milliseconds easier. Take =
a number and multiply it by the appropriate constant
var pcm_DAYS =3D 24 * 60 * 60 * 1000;
var pcm_HOURS =3D 60 * 60 * 1000;
var pcm_MINUTES =3D 60 * 1000;
var TWELVE_HOURS =3D 12 * pcm_HOURS;
var ONE_DAY =3D 1 * pcm_DAYS;
var ONE_WEEK =3D 7 * pcm_DAYS;
var ONE_MONTH =3D 30 * pcm_DAYS;
var pcm_now =3D new Date();

// The following constants are for internal use
var nopops =3D false;
var NA =3D '';
var SESSION =3D 0;
var CAMPAIGN_MANAGER =3D 1;
var INTENSITY =3D 2;
var SUBSCRIBED =3D 3;
var DCLICK =3D 4;
var DCLICK_SESSION_CAP =3D 5; // new code for v4
var POPUP_WIDTH =3D 300;
var POPUP_HEIGHT =3D 400;

var COOKIE_NAME =3D new Array();
var COOKIE_VALUE =3D new Array();

COOKIE_NAME[SESSION] =3D 'wpni_session';
COOKIE_NAME[CAMPAIGN_MANAGER] =3D 'wpni_campaignmanager';
COOKIE_NAME[INTENSITY] =3D 'wpni_campaignintensity';
COOKIE_NAME[SUBSCRIBED] =3D 'WPATC';
COOKIE_NAME[DCLICK] =3D 'dcCount';
COOKIE_NAME[DCLICK_SESSION_CAP] =3D 'dcSessionLimit'; // new code for v4

// DClickCap and DClickTimeFrame apply to DoubleClick popup and popunder =
campaigns
var DClickCap =3D 5; // Maximum number of DoubleClick popups allowed in =
timeframe
var DClickTimeFrame =3D TWELVE_HOURS; // Timeframe applied to DClickCap
var DClickSessionCap =3D 2; // New variable to control popups per =
session
var DClickMinTimeBetweenPopups =3D 60000;
var FORCED_SESSION_EXPIRATON =3D TWELVE_HOURS; // Must match value in =
cookie_code.html

var popupUrl =3D NA;
var pcm_node =3D thisNode; // thisNode must be defined in the file =
calling this js file
var isArticle =3D (location.href.indexOf("/articles/") !=3D -1) ? true : =
false ;
var popupHasBeenDelivered =3D false;
var interstitialIsAllowed =3D true;


// TO DETERMINE IF USER CAME FROM GOOGLE:
var docUrl =3D document.location.href;
var key =3D docUrl.indexOf('?');

if (key !=3D -1) // make sure there are parameters
{
  // get the parameter
  var temp =3D docUrl.substring(key + 1, docUrl.length);
 =20
  // if just "g" was passed in, set the interstitial to false
  if (temp.length =3D=3D 1 && (temp =3D=3D "g" || temp =3D=3D "G" || =
temp =3D=3D "local") )
  {
    interstitialIsAllowed =3D false;
	nopops =3D true;
  }=20
}
// END GOOGLE LOGIC


// Extract cookies that are not campaign specific=20
for (var count =3D 0; count < COOKIE_NAME.length; count++)
{
  var startAt =3D 0;
  if ( (startAt =3D document.cookie.indexOf(COOKIE_NAME[count])) !=3D =
-1)
  {
    startAt +=3D COOKIE_NAME[count].length + 1;
    var endAt =3D (document.cookie.indexOf(";", startAt) =3D=3D -1) ? =
document.cookie.length : document.cookie.indexOf(";", startAt);
    COOKIE_VALUE[count] =3D document.cookie.substring(startAt, endAt);
  }
  else
  {
    COOKIE_VALUE[count] =3D NA;
  }
  //alert ( COOKIE_NAME[count]+'=3D'+COOKIE_VALUE[count] );
}

// New logic to prevent back-to-back interstitials
if ( COOKIE_VALUE[DCLICK_SESSION_CAP].indexOf ("X") !=3D -1 )
{
  interstitialIsAllowed =3D false;=20
  var newCookie =3D =
COOKIE_VALUE[DCLICK_SESSION_CAP].substring(0,COOKIE_VALUE[DCLICK_SESSION_=
CAP].length - 1);
  document.cookie =3D "dcSessionLimit=3D" + newCookie + =
";path=3D/;domain=3D.washingtonpost.com";
}

// New logic to allow for internal timing of DCLICK_SESSION_CAP (v5)
//var dclickTimeBetweenPopups =3D new Date();
//dclickTimeBetweenPopups.setTime ( dclickTimeBetweenPopups.getTime() + =
DClickMinTimeBetweenPopups );

if ( COOKIE_VALUE[DCLICK_SESSION_CAP].indexOf ("|") !=3D -1 )
{
  dclickSessionExpiration =3D =
COOKIE_VALUE[DCLICK_SESSION_CAP].substring(COOKIE_VALUE[DCLICK_SESSION_CA=
P].indexOf("|") + 1);
  COOKIE_VALUE[DCLICK_SESSION_CAP] =3D =
COOKIE_VALUE[DCLICK_SESSION_CAP].substring(0, =
COOKIE_VALUE[DCLICK_SESSION_CAP].indexOf("|"));
  var currentDate =3D new Date();
  var cookieExpiresDate =3D new Date();
  cookieExpiresDate.setTime( parseInt(dclickSessionExpiration) );

  var cookieSetDate =3D new Date();
  cookieSetDate.setTime( parseInt(dclickSessionExpiration) - =
FORCED_SESSION_EXPIRATON );
 =20
  // If cookie was written in past 15 mins, don't allow interstitial
  if ( currentDate.getTime() - cookieExpiresDate.getTime() < 0 ) // If =
the cookie was set to expire in the past 15 minutes
  {
    if ( currentDate.getTime() - cookieSetDate.getTime() < =
DClickMinTimeBetweenPopups )
    {
      interstitialIsAllowed =3D false;
//      alert ("No ad because it's been less than a minute =
("+(currentDate.getTime() - cookieSetDate.getTime())+" < =
"+DClickMinTimeBetweenPopups+")" );
    }
    if ( COOKIE_VALUE[DCLICK_SESSION_CAP] >=3D DClickSessionCap )
    {
      interstitialIsAllowed =3D false;
    }

    //alert ( "Last popup occurred too recently ( "+( =
currentDate.getTime() - cookieSetDate.getTime() =
)+"<"+DClickMinTimeBetweenPopups+")" );
  }
// If cookie is older than 15 mins, expire it
  else
  {
    dclickSessionExpiration =3D new Date();
    dclickSessionExpiration.setTime ( dclickSessionExpiration.getTime() =
- 100000 );
    document.cookie =3D COOKIE_NAME[DCLICK_SESSION_CAP] + =
"=3D1;expires=3D"+dclickSessionExpiration.toGMTString()+";path=3D/;domain=
=3D.washingtonpost.com"; // new code for v4
    //alert ( "Deleting old cookie" );
  }
}

// if ( COOKIE_VALUE[DCLICK_SESSION_CAP] >=3D DClickSessionCap ) =
interstitialIsAllowed=3Dfalse; // new code for v4
if ( COOKIE_VALUE[DCLICK] >=3D DClickCap ) interstitialIsAllowed =3D =
false;
------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.washingtonpost.com/wp-srv/javascript/omniture/s_code.js

/* SiteCatalyst code version: H.10.
Copyright 1997-2007 Omniture, Inc. More info available at
http://www.omniture.com */
/************************ ADDITIONAL FEATURES ************************
     Plugins
*/
/* Specify the Report Suite ID(s) to track here */
var s_account=3D"wpniwashpostcom"
var s=3Ds_gi(s_account)
/************************** CONFIG SECTION **************************/
/* You may add or alter any code config here. */
/* E-commerce Config */
s.currencyCode=3D"USD"
/* Link Tracking Config */
s.trackDownloadLinks=3Dtrue
s.trackExternalLinks=3Dtrue
s.trackInlineStats=3Dtrue
s.linkDownloadFileTypes=3D"exe,zip,wav,mp3,mov,mpg,avi,wmv,doc,pdf,xls,ic=
s"
s.linkInternalFilters=3D"javascript:,washingtonpost.com,"+window.location=
.host
s.linkLeaveQueryString=3Dfalse
s.linkTrackVars=3D"server"
s.linkTrackEvents=3D"None"
/* Plugin Config */
s.usePlugins=3Dtrue

var toxicOmnitureCounter =3D 0 ;
function ThreateningStackOverflowException() {
	this.description =3D "Threatening Stack Overflow Exception" ;
	this.name =3D "ThreateningStackOverflowException" ;
	this.number =3D "" ;
	this.message =3D this.description ;
}

function s_doPlugins(s) {
/* Add calls to plugins here */

var URL=3Dwindow.location.host+window.location.pathname;

/* Plugin Example: getQueryParam v2.0 */
s.campaign =3D (s.getQueryParam('wpsrc')) ? s.getQueryParam('wpsrc') : =
(s.getQueryParam('wpmk')) ? s.getQueryParam('wpmk') : "" ;
s.eVar3=3Ds.getQueryParam('wpisrc');
s.eVar29=3Ds.getQueryParam('wprss');

/* Plugin Example: getValOnce v0.2
s.campaign=3Ds.getValOnce(s.campaign,"s_campaign",0)
*/

/* Set event 1 (page view) on every page */
var re_event1 =3D new RegExp("(?:^|,)event1(?:$|,)");
s.events=3D(!s.events)?'event1':(!s.events.match(re_event1))?s.events+',e=
vent1':s.events;
if ( typeof(wp_events) !=3D "undefined" && wp_events !=3D '' ) {
	s.events +=3D ','+wp_events ;
}

/* Set eVar 1 & 2 to PN and Channel  */
s.eVar1=3Ds.pageName;
s.eVar2=3Ds.channel;

/* Set eVar11 to prop25 (blog name) */
s.eVar11=3D(typeof s.prop25 !=3D "undefined")?s.prop25:'';

/* Set DSLV & New vs Repeat  */
try {
	s.prop18=3Ds.getNewRepeat();
} catch(e) {
	s.prop18=3D"nocategory";
	// s.prop18=3De.description;
	// alert("Error calling s.getNewRepeat(): "+e.description );
}
s.prop17=3Ds.getDaysSinceLastVisit();
s.prop17=3Ds.getAndPersistValue(s.prop17,'s_dslv',0);
s.eVar14=3Ds.prop18;
s.eVar15=3Ds.prop17;

/* Get Visit Num */
try {
	s.eVar16=3Ds.getVisitNum();
} catch(e) {
	s.eVar16=3D"nocategory";
	// s.eVar16=3De.description;
	// alert("Error calling s.getVisitNum(): "+e.description );
}

/* Plugin Example: timeparting - EST - hour,day,weekday */
s.prop8=3Ds.getTimeParting('d','-5','2009');
s.prop9=3Ds.getTimeParting('h','-5','2009');
s.prop10=3Ds.getTimeParting('w','-5','2009');
// Ideally, we'd capture the year with an SSI, but because thise file is =
used on servers where SSIs might not be supported, not doing that.
// Not using wp_current_year for fear too many users don't have their =
local dates set right.
// var wp_current_year =3D new Date().getYear();

/* Set hierarchy to prop23 */
s.prop23=3Ds.hier1;

/* Set eVar18 to entry content type */
var ct =3D s.prop3
var isEP =3D s.c_r('s_wp_ep');
if(!isEP && ct){s.c_w('s_wp_ep',ct,0)
s.eVar18=3Dct;}

/* Look for Navigation ID - Set prop28 & 29 */
var pp=3Ds.getPreviousPage();
var ppn =3D s.getPreviousValue(s.pageName,'gvp_p5');
var nid=3Ds.getQueryParam('nid')
if(nid){s.prop28=3Dnid;s.prop29=3Dpp;}

/* Look for homepage id - Set prop 27 if HP value is previous page */
var hpid=3Ds.getQueryParam('hpid');
if(hpid && pp=3D=3D"wp - homepage - national") {s.prop27=3Dpp+' - =
'+hpid;s.eVar19=3Ds.prop27}
if(hpid && ppn=3D=3D"wp - homepage - local") {s.prop27=3Dppn+' - =
'+hpid;s.eVar19=3Ds.prop27}
if(hpid && pp=3D=3D"wp - homepage - national override"){s.prop27=3Dpp+' =
- '+hpid;s.eVar19=3Ds.prop27}
if(hpid && pp=3D=3D"wp - homepage - national 4 local"){s.prop27=3Dpp+' - =
'+hpid;s.eVar19=3Ds.prop27}
if(hpid && pp=3D=3D"wp - homepage - default"){s.prop27=3Dpp+' - =
'+hpid;s.eVar19=3Ds.prop27}

var hpv=3Ds.getQueryParam('hpv');//multimedia check
if(hpid && hpv=3D=3D"local"){pp=3D"wp - homepage - =
local";s.prop27=3Dpp+' - '+hpid;s.eVar19=3Ds.prop27}
if(hpid && hpv=3D=3D"4local"){pp=3D"wp - homepage - national 4 =
local";s.prop27=3Dpp+' - '+hpid;s.eVar19=3Ds.prop27}
if(hpid && hpv=3D=3D"national"){pp=3D"wp - homepage - =
national";s.prop27=3Dpp+' - '+hpid;s.eVar19=3Ds.prop27}
if(hpid && hpv=3D=3D"default"){pp=3D"wp - homepage - =
default";s.prop27=3Dpp+' - '+hpid;s.eVar19=3Ds.prop27}
if(hpid && hpv=3D=3D"override"){pp=3D"wp - homepage - national =
override";s.prop27=3Dpp+' - '+hpid;s.eVar19=3Ds.prop27}

if(s.server=3D=3D"washingtonpost.com jobs"){s.eVar4=3Ds.prop6};

var temp1=3Ds.getQueryParam('reload');var =
temp2=3Ds.getQueryParam('sub');
if(temp1=3D=3D"true"){s.prop31=3D"site reload"};
if(temp2 && temp2.toLowerCase()=3D=3D"ar"){s.prop31=3D"completed sign =
in"};
if(temp2 && temp2.toLowerCase()=3D=3D"new"){s.prop31=3D"completed =
registration"};
s.prop20=3Ds.getQueryParam('tid');s.eVar20=3Ds.prop20;


/* Set event20 as visit entry event (wether the referrer is external, or =
the page is a direct load) */
s._referrer=3Ds._2referrer=3Ds.referrer?s.referrer:document.referrer;
if(!s._referrer){s._referrer=3Ds._2referrer=3Ds._entry=3D"Direct-Load";}
if (s._referrer){
	=
s._referrer=3Ds._referrer.indexOf('?')>-1?s._referrer.substring("0",s._re=
ferrer.indexOf('?')):s._referrer;
	s._urlCheck=3Ds.split(s.linkInternalFilters,",");
	s._urlCheckLength=3Ds._urlCheck.length-1;
	for (s._for=3D0;s._for<=3Ds._urlCheckLength;s._for++){
		s._urlReferrer=3Ds._referrer.indexOf(s._urlCheck[s._for])>-1?"1":"0";
		if (s._urlReferrer=3D=3D"1") {
		s._entry=3D"0";
		}
	}
}
if (s._entry!=3D"0") {
	s._referrerPass=3Ds._2referrer;
	s._referrerPass=3Ds.getValOnce(s._referrerPass,'s._ref',0);
	if (s._referrerPass) {s.events=3Ds.apl(s.events,'event20',',',2)}
}

/* New vs Repeat  */
if (s.pageName=3D=3D"wp - homepage - local") {
	try {
		s.prop15 =3D s.getNewRepeat('','s_npr');
	} catch(e) {
		s.prop15=3D"nocategory";
		// s.prop15=3De.description;
		// alert("Error calling s.getNewRepeat('','s_npr'): "+e.description );
	}
}

}
s.doPlugins=3Ds_doPlugins
/************************** PLUGINS SECTION *************************/
/* You may insert any plugins you wish to use here.                 */
/*
 * Plugin: getValOnce 0.2 - get a value once per session or number of =
days
 */
s.getValOnce=3Dnew Function("v","c","e",""
+"var s=3Dthis,k=3Ds.c_r(c),a=3Dnew =
Date;e=3De?e:0;if(v){a.setTime(a.getTime("
+")+e*86400000);s.c_w(c,v,e?a:0);}return v=3D=3Dk?'':v");
/*
 * Utility Function: split v1.5 - split a string (JS 1.0 compatible)
 */
s.split=3Dnew Function("l","d",""
+"var i,x=3D0,a=3Dnew =
Array;while(l){i=3Dl.indexOf(d);i=3Di>-1?i:l.length;a[x"
+"++]=3Dl.substring(0,i);l=3Dl.substring(i+d.length);}return a");
/*
 * Plugin Utility: apl v1.1
 */
s.apl=3Dnew Function("L","v","d","u",""
+"var s=3Dthis,m=3D0;if(!L)L=3D'';if(u){var =
i,n,a=3Ds.split(L,d);for(i=3D0;i<a."
+"length;i++){n=3Da[i];m=3Dm||(u=3D=3D1?(n=3D=3Dv):(n.toLowerCase()=3D=3D=
v.toLowerCas"
+"e()));}}if(!m)L=3DL?L+d+v:v;return L");
/*
 * Plugin: getQueryParam 2.1 - return query string parameter(s)
 */
s.getQueryParam=3Dnew Function("p","d","u",""
+"var =
s=3Dthis,v=3D'',i,t;d=3Dd?d:'';u=3Du?u:(s.pageURL?s.pageURL:s.wd.locati"
+"on);if(u=3D=3D'f')u=3Ds.gtfs().location;while(p){i=3Dp.indexOf(',');i=3D=
i<0?p"
+".length:i;t=3Ds.p_gpv(p.substring(0,i),u+'');if(t)v+=3Dv?d+t:t;p=3Dp.su=
bs"
+"tring(i=3D=3Dp.length?i:i+1)}return v");
s.p_gpv=3Dnew Function("k","u",""
+"var =
s=3Dthis,v=3D'',i=3Du.indexOf('?'),q;if(k&&i>-1){q=3Du.substring(i+1);v"
+"=3Ds.pt(q,'&','p_gvf',k)}return v");
s.p_gvf=3Dnew Function("t","k",""
+"if(t){var =
s=3Dthis,i=3Dt.indexOf('=3D'),p=3Di<0?t:t.substring(0,i),v=3Di<0?'T"
+"rue':t.substring(i+1);if(p.toLowerCase()=3D=3Dk.toLowerCase())return =
s."
+"epa(v)}return ''");
/*
 * Plugin: getAndPersistValue 0.3 - get a value on every page
 */
s.getAndPersistValue=3Dnew Function("v","c","e",""
+"var s=3Dthis,a=3Dnew =
Date;e=3De?e:0;a.setTime(a.getTime()+e*86400000);if("
+"v)s.c_w(c,v,e?a:0);return s.c_r(c);");
/*
 * Plugin: Days since last Visit 1.0.H
 */
s.getDaysSinceLastVisit=3Dnew Function(""
+"var s=3Dthis,e=3Dnew =
Date(),cval,ct=3De.getTime(),c=3D's_lastvisit',day=3D24*"
+"60*60*1000;e.setTime(ct+3*365*day);cval=3Ds.c_r(c);if(!cval){s.c_w(c,"
+"ct,e);return 'First page view or cookies not supported';}else{var d"
+"=3Dct-cval;if(d>30*60*1000){if(d>30*day){s.c_w(c,ct,e);return 'More t"
+"han 30 days';}if(d<30*day+1 && d>7*day){s.c_w(c,ct,e);return 'More "
+"than 7 days';}if(d<7*day+1 && d>day){s.c_w(c,ct,e);return 'Less tha"
+"n 7 days';}if(d<day+1){s.c_w(c,ct,e);return 'Less than 1 day';}}els"
+"e return '';}"
);
/*
 * Plugin: Visit Number By Month 2.0 - Return the user visit number
 */
s.getVisitNum=3Dnew Function(""
+"var s=3Dthis,e=3Dnew =
Date(),cval,cvisit,ct=3De.getTime(),c=3D's_vnum',c2=3D's"
+"_invisit';e.setTime(ct+30*24*60*60*1000);cval=3Ds.c_r(c);if(cval){var"
+" =
i=3Dcval.indexOf('&vn=3D'),str=3Dcval.substring(i+4,cval.length),k;}cvis"=

+"it=3Ds.c_r(c2);if(cvisit){if(str){e.setTime(ct+30*60*1000);s.c_w(c2,'"
+"true',e);return str;}else return 'unknown visit number';}else{if(st"
+"r){str++;k=3Dcval.substring(0,i);e.setTime(k);s.c_w(c,k+'&vn=3D'+str,e)=
"
+";e.setTime(ct+30*60*1000);s.c_w(c2,'true',e);return str;}else{s.c_w"
+"(c,ct+30*24*60*60*1000+'&vn=3D1',e);e.setTime(ct+30*60*1000);s.c_w(c2"
+",'true',e);return 1;}}"
);
/*
 * Plugin: getTimeParting 1.3 - Set timeparting values based on time =
zone
 */
s.getTimeParting=3Dnew Function("t","z","y",""
+"dc=3Dnew Date('1/1/2000');var f=3D15;var ne=3D8;if(dc.getDay()!=3D6||"
+"dc.getMonth()!=3D0){return'Data Not Available'}else{;z=3DparseInt(z);"
+"if(y=3D=3D'2009'){f=3D8;ne=3D1};gmar=3Dnew =
Date('3/1/'+y);dsts=3Df-gmar.getDay("
+");gnov=3Dnew Date('11/1/'+y);dste=3Dne-gnov.getDay();spr=3Dnew =
Date('3/'"
+"+dsts+'/'+y);fl=3Dnew Date('11/'+dste+'/'+y);cd=3Dnew Date();"
+"if(cd>spr&&cd<fl){z=3Dz+1}else{z=3Dz};utc=3Dcd.getTime()+(cd.getTimezon=
eO"
+"ffset()*60000);tz=3Dnew Date(utc + =
(3600000*z));thisy=3Dtz.getFullYear("
+");var days=3D['Sunday','Monday','Tuesday','Wednesday','Thursday','Fr"
+"iday','Saturday'];if(thisy!=3Dy){return'Data Not Available'}else{;thi"
+"sh=3Dtz.getHours();thismin=3Dtz.getMinutes();thisd=3Dtz.getDay();var =
dow=3D"
+"days[thisd];var ap=3D'AM';var dt=3D'Weekday';var =
mint=3D'00';if(thismin>3"
+"0){mint=3D'30'}if(thish>=3D12){ap=3D'PM';thish=3Dthish-12};if =
(thish=3D=3D0){th"
+"ish=3D12};if(thisd=3D=3D6||thisd=3D=3D0){dt=3D'Weekend'};var =
timestring=3Dthish+'"
+":'+mint+ap;var daystring=3Ddow;var =
endstring=3Ddt;if(t=3D=3D'h'){return tim"
+"estring}if(t=3D=3D'd'){return daystring};if(t=3D=3D'w'){return en"
+"dstring}}};"
);
/*
 * Plugin: getPreviousValue_v1.0 - return previous value of designated
 *   variable (requires split utility)
 */
s.getPreviousValue=3Dnew Function("v","c","el",""
+"var s=3Dthis,t=3Dnew =
Date,i,j,r=3D'';t.setTime(t.getTime()+1800000);if(el"
+"){if(s.events){i=3Ds.split(el,',');j=3Ds.split(s.events,',');for(x in =
i"
+"){for(y in j){if(i[x]=3D=3Dj[y]){if(s.c_r(c)) =
r=3Ds.c_r(c);v?s.c_w(c,v,t)"
+":s.c_w(c,'no value',t);return r}}}}}else{if(s.c_r(c)) r=3Ds.c_r(c);v?"
+"s.c_w(c,v,t):s.c_w(c,'no value',t);return r}");
/*
 * Plugin: getPreviousPage_v1.1 - return previous page based on event =
list
 */
s.getPreviousPage=3Dnew Function("el",""
+"var s=3Dthis,pid,i,j,e;if(el){if(s.events){while(el){if(pid){break;}i"
+"=3Del.indexOf(',');i=3Di<0?el.length:i;e=3Ds.events;while(e){j=3De.inde=
xOf("
+"',');j=3Dj<0?e.length:j;if(e.substring(0,j)=3D=3Del.substring(0,i)){pid=
=3Ds"
+".p_gpp();}e=3De.substring(j=3D=3De.length?j:j+1);}el=3Del.substring(i=3D=
=3Del.l"
+"ength?i:i+1);}}}else{pid=3Ds.p_gpp();}return pid;");
/*
 * Utility Function: p_gpp
 */
s.p_gpp=3Dnew Function(""
+"var =
s=3Dthis,p,i;p=3Ds.rq(s.un);i=3Dp.indexOf('pid=3D')+4;p=3Dp.substring(i,p=
"
+".length);i=3Dp.indexOf('&');p=3Dp.substring(0,i);p=3Dunescape(p);return=
 p"
+";");
/*
 * Plugin: getNewRepeat 1.2 - Returns whether user is new or repeat
 */
s.getNewRepeat=3Dnew Function("d","cn",""
+"var s=3Dthis,e=3Dnew =
Date(),cval,sval,ct=3De.getTime();d=3Dd?d:30;cn=3Dcn?cn:"
+"'s_nr';e.setTime(ct+d*24*60*60*1000);cval=3Ds.c_r(cn);if(cval.length=3D=
"
+"=3D0){s.c_w(cn,ct+'-New',e);return'New';}sval=3Ds.split(cval,'-');if(ct=
"
+"-sval[0]<30*60*1000&&sval[1]=3D=3D'New'){s.c_w(cn,ct+'-New',e);return'N=
"
+"ew';}else{s.c_w(cn,ct+'-Repeat',e);return'Repeat';}");
/*
 * Function - read combined cookies v 0.2
 */
s.c_rr=3Ds.c_r;
s.c_r=3Dnew Function("k",""
+"var s=3Dthis,d=3Dnew =
Date,v=3Ds.c_rr(k),c=3Ds.c_rr('s_pers'),i,m,e;if(v)ret"
+"urn v;k=3Ds.ape(k);i=3Dc.indexOf(' =
'+k+'=3D');c=3Di<0?s.c_rr('s_sess'):c;i=3D"
+"c.indexOf(' =
'+k+'=3D');m=3Di<0?i:c.indexOf('|',i);e=3Di<0?i:c.indexOf(';'"
+",i);m=3Dm>0?m:e;v=3Di<0?'':s.epa(c.substring(i+2+k.length,m<0?c.length:=
"
+"m));if(m>0&&m!=3De)if(parseInt(c.substring(m+1,e<0?c.length:e))<d.get"
+"Time()){if(toxicOmnitureCounter<20){toxicOmnitureCounter++;d.setTim"
+"e(d.getTime()-60000);s.c_w(s.epa(k),'',d);v=3D'';}else{toxicOmnitureC"
+"ounter=3D0;throw new ThreateningStackOverflowException()}}return v;");
/*
 * Function - write combined cookies v 0.2
 */
s.c_wr=3Ds.c_w;
s.c_w=3Dnew Function("k","v","e",""
+"var s=3Dthis,d=3Dnew =
Date,ht=3D0,pn=3D's_pers',sn=3D's_sess',pc=3D0,sc=3D0,pv,sv,"
+"c,i,t;d.setTime(d.getTime()-60000);if(s.c_rr(k)) s.c_wr(k,'',d);k=3Ds"
+".ape(k);pv=3Ds.c_rr(pn);i=3Dpv.indexOf(' =
'+k+'=3D');if(i>-1){pv=3Dpv.substr"
+"ing(0,i)+pv.substring(pv.indexOf(';',i)+1);pc=3D1;}sv=3Ds.c_rr(sn);i=3D=
sv"
+".indexOf(' =
'+k+'=3D');if(i>-1){sv=3Dsv.substring(0,i)+sv.substring(sv.i"
+"ndexOf(';',i)+1);sc=3D1;}d=3Dnew =
Date;if(e){if(e.getTime()>d.getTime())"
+"{pv+=3D' '+k+'=3D'+s.ape(v)+'|'+e.getTime()+';';pc=3D1;}}else{sv+=3D' =
'+k+'"
+"=3D'+s.ape(v)+';';sc=3D1;}if(sc) =
s.c_wr(sn,sv,0);if(pc){t=3Dpv;while(t&&t"
+".indexOf(';')!=3D-1){var =
t1=3DparseInt(t.substring(t.indexOf('|')+1,t.i"
+"ndexOf(';')));t=3Dt.substring(t.indexOf(';')+1);ht=3Dht<t1?t1:ht;}d.set=
"
+"Time(ht);s.c_wr(pn,pv,d);}return v=3D=3Ds.c_r(s.epa(k));");

/* WARNING: Changing any of the below variables will cause drastic
changes to how your visitor data is collected.  Changes should only be
made when instructed to do so by your account manager.*/
s.visitorNamespace=3D"wpni"
s.trackingServer=3D"metrics.washingtonpost.com"
s.trackingServerSecure=3D"smetrics.washingtonpost.com"
s.dc=3D112
//s.vmk=3D"46BF8B07"

/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
var s_objectID;function s_c2fe(f){var x=3D'',s=3D0,e,a,b,c;while(1){e=3D
f.indexOf('"',s);b=3Df.indexOf('\\',s);c=3Df.indexOf("\n",s);if(e<0||(b>=3D=

0&&b<e))e=3Db;if(e<0||(c>=3D0&&c<e))e=3Dc;if(e>=3D0){x+=3D(e>s?f.substrin=
g(s,e):
'')+(e=3D=3Dc?'\\n':'\\'+f.substring(e,e+1));s=3De+1}else return x
+f.substring(s)}return f}function s_c2fa(f){var =
s=3Df.indexOf('(')+1,e=3D
f.indexOf(')'),a=3D'',c;while(s>=3D0&&s<e){c=3Df.substring(s,s+1);if(c=3D=
=3D',')
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=3D
cc.indexOf(';',cc.indexOf('{')),e=3Dcc.lastIndexOf('}'),o,a,d,q,c,f,h,x
fc+=3Ds_c2fa(cc)+',"var s=3Dnew Object;';c=3Dcc.substring(s+1,e);s=3D
c.indexOf('function');while(s>=3D0){d=3D1;q=3D'';x=3D0;f=3Dc.substring(s)=
;a=3D
s_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=
)
+'new Function('+(a?a+',':'')+'"'+s_c2fe(c.substring(o+1,e))+'")'
+c.substring(e+1);s=3Dc.indexOf('function')}fc+=3Ds_c2fe(c)+';return =
s");'
eval(fc);return f}function s_gi(un,pg,ss){var c=3D"function s_c(un,pg,s"
+"s){var s=3Dthis;s.wd=3Dwindow;if(!s.wd.s_c_in){s.wd.s_c_il=3Dnew =
Array;s."
+"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"
+"d.s_c_in++;s.m=3Dfunction(m){return =
(''+m).indexOf('{')<0};s.fl=3Dfunct"
+"ion(x,l){return x?(''+x).substring(0,l):x};s.co=3Dfunction(o){if(!o)r"
+"eturn o;var n=3Dnew Object,x;for(x in o)if(x.indexOf('select')<0&&x.i"
+"ndexOf('filter')<0)n[x]=3Do[x];return =
n};s.num=3Dfunction(x){x=3D''+x;for"
+"(var p=3D0;p<x.length;p++)if(('0123456789').indexOf(x.substring(p,p+1"
+"))<0)return 0;return 1};s.rep=3Dfunction(x,o,n){var =
i=3Dx.indexOf(o);wh"
+"ile(x&&i>=3D0){x=3Dx.substring(0,i)+n+x.substring(i+o.length);i=3Dx.ind=
ex"
+"Of(o,i+n.length)}return x};s.ape=3Dfunction(x){var =
s=3Dthis,h=3D'01234567"
+"89ABCDEF',i,c=3Ds.charSet,n,l,e,y=3D'';c=3Dc?c.toUpperCase():'';if(x){x=
=3D'"
+"'+x;if(c=3D=3D'AUTO'&&('').charCodeAt){for(i=3D0;i<x.length;i++){c=3Dx.=
subs"
+"tring(i,i+1);n=3Dx.charCodeAt(i);if(n>127){l=3D0;e=3D'';while(n||l<4){e=
=3Dh"
+".substring(n%16,n%16+1)+e;n=3DparseInt(n/16);l++}y+=3D'%u'+e}else =
if(c=3D"
+"=3D'+')y+=3D'%2B';else =
y+=3Descape(c)}x=3Dy}else{x=3Dx?s.rep(escape(''+x),'+'"
+",'%2B'):x;if(x&&c&&s.em=3D=3D1&&x.indexOf('%u')<0&&x.indexOf('%U')<0){i=
"
+"=3Dx.indexOf('%');while(i>=3D0){i++;if(h.substring(8).indexOf(x.substri=
"
+"ng(i,i+1).toUpperCase())>=3D0)return x.substring(0,i)+'u00'+x.substri"
+"ng(i);i=3Dx.indexOf('%',i)}}}}return x};s.epa=3Dfunction(x){var =
s=3Dthis;"
+"return x?unescape(s.rep(''+x,'+',' ')):x};s.pt=3Dfunction(x,d,f,a){va"
+"r =
s=3Dthis,t=3Dx,z=3D0,y,r;while(t){y=3Dt.indexOf(d);y=3Dy<0?t.length:y;t=3D=
t.s"
+"ubstring(0,y);r=3Ds.m(f)?s[f](t,a):f(t,a);if(r)return =
r;z+=3Dy+d.length"
+";t=3Dx.substring(z,x.length);t=3Dz<x.length?t:''}return =
''};s.isf=3Dfunct"
+"ion(t,a){var =
c=3Da.indexOf(':');if(c>=3D0)a=3Da.substring(0,c);if(t.subst"
+"ring(0,2)=3D=3D's_')t=3Dt.substring(2);return =
(t!=3D''&&t=3D=3Da)};s.fsf=3Dfuncti"
+"on(t,a){var =
s=3Dthis;if(s.pt(a,',','isf',t))s.fsg+=3D(s.fsg!=3D''?',':'')"
+"+t;return 0};s.fs=3Dfunction(x,f){var =
s=3Dthis;s.fsg=3D'';s.pt(x,',','fsf"
+"',f);return s.fsg};s.c_d=3D'';s.c_gdf=3Dfunction(t,a){var =
s=3Dthis;if(!s."
+"num(t))return 1;return 0};s.c_gd=3Dfunction(){var =
s=3Dthis,d=3Ds.wd.locat"
+"ion.hostname,n=3Ds.fpCookieDomainPeriods,p;if(!n)n=3Ds.cookieDomainPeri=
"
+"ods;if(d&&!s.c_d){n=3Dn?parseInt(n):2;n=3Dn>2?n:2;p=3Dd.lastIndexOf('.'=
);"
+"if(p>=3D0){while(p>=3D0&&n>1){p=3Dd.lastIndexOf('.',p-1);n--}s.c_d=3Dp>=
0&&s"
+".pt(d,'.','c_gdf',0)?d.substring(p):d}}return s.c_d};s.c_r=3Dfunction"
+"(k){var s=3Dthis;k=3Ds.ape(k);var c=3D' '+s.d.cookie,i=3Dc.indexOf(' =
'+k+'=3D"
+"'),e=3Di<0?i:c.indexOf(';',i),v=3Di<0?'':s.epa(c.substring(i+2+k.length=
"
+",e<0?c.length:e));return =
v!=3D'[[B]]'?v:''};s.c_w=3Dfunction(k,v,e){var"
+" =
s=3Dthis,d=3Ds.c_gd(),l=3Ds.cookieLifetime,t;v=3D''+v;l=3Dl?(''+l).toUppe=
rCa"
+"se():'';if(e&&l!=3D'SESSION'&&l!=3D'NONE'){t=3D(v!=3D''?parseInt(l?l:0)=
:-60"
+");if(t){e=3Dnew =
Date;e.setTime(e.getTime()+(t*1000))}}if(k&&l!=3D'NONE'"
+"){s.d.cookie=3Dk+'=3D'+s.ape(v!=3D''?v:'[[B]]')+'; =
path=3D/;'+(e&&l!=3D'SESSI"
+"ON'?' expires=3D'+e.toGMTString()+';':'')+(d?' =
domain=3D'+d+';':'');ret"
+"urn s.c_r(k)=3D=3Dv}return 0};s.eh=3Dfunction(o,e,r,f){var =
s=3Dthis,b=3D's_'+"
+"e+'_'+s._in,n=3D-1,l,i,x;if(!s.ehl)s.ehl=3Dnew =
Array;l=3Ds.ehl;for(i=3D0;i<"
+"l.length&&n<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[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.o[b]=3Dx.b;return b}return =
0};s.cet=3Dfunction(f,a,t,o,b){va"
+"r =
s=3Dthis,r;if(s.apv>=3D5&&(!s.isopera||s.apv>=3D7))eval('try{r=3Ds.m(f)?s=
"
+"[f](a):f(a)}catch(e){r=3Ds.m(t)?s[t](e):t(e)}');else{if(s.ismac&&s.u."
+"indexOf('MSIE =
4')>=3D0)r=3Ds.m(b)?s[b](a):b(a);else{s.eh(s.wd,'onerror'"
+",0,o);r=3Ds.m(f)?s[f](a):f(a);s.eh(s.wd,'onerror',1)}}return r};s.gtf"
+"set=3Dfunction(e){var s=3Dthis;return s.tfs};s.gtfsoe=3Dnew =
Function('e',"
+"'var s=3Ds_c_il['+s._in+'];s.eh(window,\"onerror\",1);s.etfs=3D1;var =
c=3D"
+"s.t();if(c)s.d.write(c);s.etfs=3D0;return =
true');s.gtfsfb=3Dfunction(a)"
+"{return window};s.gtfsf=3Dfunction(w){var =
s=3Dthis,p=3Dw.parent,l=3Dw.locat"
+"ion;s.tfs=3Dw;if(p&&p.location!=3Dl&&p.location.host=3D=3Dl.host){s.tfs=
=3Dp;r"
+"eturn s.gtfsf(s.tfs)}return s.tfs};s.gtfs=3Dfunction(){var =
s=3Dthis;if("
+"!s.tfs){s.tfs=3Ds.wd;if(!s.etfs)s.tfs=3Ds.cet('gtfsf',s.tfs,'gtfset',s.=
"
+"gtfsoe,'gtfsfb')}return s.tfs};s.mr=3Dfunction(sess,q,ta){var =
s=3Dthis,"
+"dc=3Ds.dc,t1=3Ds.trackingServer,t2=3Ds.trackingServerSecure,ns=3Ds.visi=
torN"
+"amespace,unc=3Ds.rep(s.fun,'_','-'),imn=3D's_i_'+s.fun,im,b,e,rs=3D'htt=
p'"
+"+(s.ssl?'s':'')+'://'+(t1?(s.ssl&&t2?t2:t1):((ns?ns:(s.ssl?'102':un"
+"c))+'.'+(s.dc?s.dc:112)+'.2o7.net'))+'/b/ss/'+s.un+'/1/H.10-Pdvu-2/"
+"'+sess+'?[AQB]&ndh=3D1'+(q?q:'')+(s.q?s.q:'')+'&[AQE]';if(s.isie&&!s."
+"ismac){if(s.apv>5.5)rs=3Ds.fl(rs,4095);else =
rs=3Ds.fl(rs,2047)}if(s.d.i"
+"mages&&s.apv>=3D3&&(!s.isopera||s.apv>=3D7)&&(s.ns6<0||s.apv>=3D6.1)){i=
m=3D"
+"s.wd[imn];if(!im)im=3Ds.wd[imn]=3Dnew =
Image;im.src=3Drs;if(rs.indexOf('&p"
+"e=3D')>=3D0&&(!ta||ta=3D=3D'_self'||ta=3D=3D'_top'||(s.wd.name&&ta=3D=3D=
s.wd.name))"
+"){b=3De=3Dnew Date;while(e.getTime()-b.getTime()<500)e=3Dnew =
Date}return "
+"''}return '<im'+'g sr'+'c=3D\"'+rs+'\" width=3D1 height=3D1 border=3D0 =
alt=3D"
+"\"\">'};s.gg=3Dfunction(v){var s=3Dthis;return =
s.wd['s_'+v]};s.glf=3Dfunc"
+"tion(t,a){if(t.substring(0,2)=3D=3D's_')t=3Dt.substring(2);var =
s=3Dthis,v=3Ds"
+".gg(t);if(v)s[t]=3Dv};s.gl=3Dfunction(v){var =
s=3Dthis;if(s.pg)s.pt(v,',',"
+"'glf',0)};s.gv=3Dfunction(v){var s=3Dthis;return =
s['vpm_'+v]?s['vpv_'+v"
+"]:(s[v]?s[v]:'')};s.havf=3Dfunction(t,a){var =
s=3Dthis,b=3Dt.substring(0,4"
+"),x=3Dt.substring(4),n=3DparseInt(x),k=3D'g_'+t,m=3D'vpm_'+t,q=3Dt,v=3D=
s.linkTr"
+"ackVars,e=3Ds.linkTrackEvents;s[k]=3Ds.gv(t);if(s.lnk||s.eo){v=3Dv?v+',=
'+"
+"s.vl_l:'';if(v&&!s.pt(v,',','isf',t))s[k]=3D'';if(t=3D=3D'events'&&e)s[=
k]"
+"=3Ds.fs(s[k],e)}s[m]=3D0;if(t=3D=3D'visitorID')q=3D'vid';else =
if(t=3D=3D'pageURL'"
+"){q=3D'g';s[k]=3Ds.fl(s[k],255)}else =
if(t=3D=3D'referrer'){q=3D'r';s[k]=3Ds.fl("
+"s[k],255)}else if(t=3D=3D'vmk')q=3D'vmt';else =
if(t=3D=3D'charSet'){q=3D'ce';if("
+"s[k]&&s[k].toUpperCase()=3D=3D'AUTO')s[k]=3D'ISO8859-1';else =
if(s[k]&&s.e"
+"m=3D=3D2)s[k]=3D'UTF-8'}else =
if(t=3D=3D'visitorNamespace')q=3D'ns';else if(t=3D=3D'"
+"cookieDomainPeriods')q=3D'cdp';else =
if(t=3D=3D'cookieLifetime')q=3D'cl';els"
+"e if(t=3D=3D'variableProvider')q=3D'vvp';else =
if(t=3D=3D'currencyCode')q=3D'cc'"
+";else if(t=3D=3D'channel')q=3D'ch';else =
if(t=3D=3D'transactionID')q=3D'xact';el"
+"se if(t=3D=3D'campaign')q=3D'v0';else =
if(s.num(x)){if(b=3D=3D'prop')q=3D'c'+n;e"
+"lse if(b=3D=3D'eVar')q=3D'v'+n;else =
if(b=3D=3D'hier'){q=3D'h'+n;s[k]=3Ds.fl(s[k],"
+"255)}}if(s[k]&&t!=3D'linkName'&&t!=3D'linkType')s.qav+=3D'&'+q+'=3D'+s.=
ape("
+"s[k]);return ''};s.hav=3Dfunction(){var =
s=3Dthis;s.qav=3D'';s.pt(s.vl_t,'"
+",','havf',0);return =
s.qav};s.lnf=3Dfunction(t,h){t=3Dt?t.toLowerCase():"
+"'';h=3Dh?h.toLowerCase():'';var =
te=3Dt.indexOf('=3D');if(t&&te>0&&h.index"
+"Of(t.substring(te+1))>=3D0)return t.substring(0,te);return =
''};s.ln=3Df"
+"unction(h){var s=3Dthis,n=3Ds.linkNames;if(n)return =
s.pt(n,',','lnf',h)"
+";return =
''};s.ltdf=3Dfunction(t,h){t=3Dt?t.toLowerCase():'';h=3Dh?h.toLow"
+"erCase():'';var =
qi=3Dh.indexOf('?');h=3Dqi>=3D0?h.substring(0,qi):h;if(t&"
+"&h.substring(h.length-(t.length+1))=3D=3D'.'+t)return 1;return =
0};s.lte"
+"f=3Dfunction(t,h){t=3Dt?t.toLowerCase():'';h=3Dh?h.toLowerCase():'';if(=
t&"
+"&h.indexOf(t)>=3D0)return 1;return 0};s.lt=3Dfunction(h){var =
s=3Dthis,lft"
+"=3Ds.linkDownloadFileTypes,lef=3Ds.linkExternalFilters,lif=3Ds.linkInte=
rn"
+"alFilters;lif=3Dlif?lif:s.wd.location.hostname;h=3Dh.toLowerCase();if(s=
"
+".trackDownloadLinks&&lft&&s.pt(lft,',','ltdf',h))return 'd';if(s.tr"
+"ackExternalLinks&&(lef||lif)&&(!lef||s.pt(lef,',','ltef',h))&&(!lif"
+"||!s.pt(lif,',','ltef',h)))return 'e';return ''};s.lc=3Dnew Function("
+"'e','var =
s=3Ds_c_il['+s._in+'],b=3Ds.eh(this,\"onclick\");s.lnk=3Ds.co(th"
+"is);s.t();s.lnk=3D0;if(b)return this[b](e);return true');s.bc=3Dnew =
Fun"
+"ction('e','var s=3Ds_c_il['+s._in+'],f;if(s.d&&s.d.all&&s.d.all.cppXY"
+"ctnr)return;s.eo=3De.srcElement?e.srcElement:e.target;eval(\"try{if(s"
+".eo&&(s.eo.tagName||s.eo.parentElement||s.eo.parentNode))s.t()}catc"
+"h(f){}\");s.eo=3D0');s.ot=3Dfunction(o){var =
a=3Do.type,b=3Do.tagName;return"
+" (a&&a.toUpperCase?a:b&&b.toUpperCase?b:o.href?'A':'').toUpperCase("
+")};s.oid=3Dfunction(o){var =
s=3Dthis,t=3Ds.ot(o),p=3Do.protocol,c=3Do.onclick,"
+"n=3D'',x=3D0;if(!o.s_oid){if(o.href&&(t=3D=3D'A'||t=3D=3D'AREA')&&(!c||=
!p||p.to"
+"LowerCase().indexOf('javascript')<0))n=3Do.href;else =
if(c){n=3Ds.rep(s."
+"rep(s.rep(s.rep(''+c,\"\\r\",''),\"\\n\",''),\"\\t\",''),' ','');x=3D"
+"2}else =
if(o.value&&(t=3D=3D'INPUT'||t=3D=3D'SUBMIT')){n=3Do.value;x=3D3}else =
if"
+"(o.src&&t=3D=3D'IMAGE')n=3Do.src;if(n){o.s_oid=3Ds.fl(n,100);o.s_oidt=3D=
x}}re"
+"turn o.s_oid};s.rqf=3Dfunction(t,un){var =
s=3Dthis,e=3Dt.indexOf('=3D'),u=3De>"
+"=3D0?','+t.substring(0,e)+',':'';return =
u&&u.indexOf(','+un+',')>=3D0?s"
+".epa(t.substring(e+1)):''};s.rq=3Dfunction(un){var =
s=3Dthis,c=3Dun.indexO"
+"f(','),v=3Ds.c_r('s_sq'),q=3D'';if(c<0)return =
s.pt(v,'&','rqf',un);retu"
+"rn s.pt(un,',','rq',0)};s.sqp=3Dfunction(t,a){var =
s=3Dthis,e=3Dt.indexOf("
+"'=3D'),q=3De<0?'':s.epa(t.substring(e+1));s.sqq[q]=3D'';if(e>=3D0)s.pt(=
t.su"
+"bstring(0,e),',','sqs',q);return 0};s.sqs=3Dfunction(un,q){var =
s=3Dthis"
+";s.squ[un]=3Dq;return 0};s.sq=3Dfunction(q){var =
s=3Dthis,k=3D's_sq',v=3Ds.c_r"
+"(k),x,c=3D0;s.sqq=3Dnew Object;s.squ=3Dnew =
Object;s.sqq[q]=3D'';s.pt(v,'&',"
+"'sqp',0);s.pt(s.un,',','sqs',q);v=3D'';for(x in s.squ)s.sqq[s.squ[x]]"
+"+=3D(s.sqq[s.squ[x]]?',':'')+x;for(x in =
s.sqq)if(x&&s.sqq[x]&&(x=3D=3Dq||"
+"c<2)){v+=3D(v?'&':'')+s.sqq[x]+'=3D'+s.ape(x);c++}return =
s.c_w(k,v,0)};"
+"s.wdl=3Dnew Function('e','var =
s=3Ds_c_il['+s._in+'],r=3Dtrue,b=3Ds.eh(s.wd,"
+"\"onload\"),i,o,oc;if(b)r=3Dthis[b](e);for(i=3D0;i<s.d.links.length;i++=
"
+"){o=3Ds.d.links[i];oc=3Do.onclick?\"\"+o.onclick:\"\";if((oc.indexOf(\"=
"
+"s_gs(\")<0||oc.indexOf(\".s_oc(\")>=3D0)&&oc.indexOf(\".tl(\")<0)s.eh"
+"(o,\"onclick\",0,s.lc);}return r');s.wds=3Dfunction(){var =
s=3Dthis;if(s"
+".apv>3&&(!s.isie||!s.ismac||s.apv>=3D5)){if(s.b&&s.b.attachEvent)s.b."
+"attachEvent('onclick',s.bc);else if(s.b&&s.b.addEventListener)s.b.a"
+"ddEventListener('click',s.bc,false);else s.eh(s.wd,'onload',0,s.wdl"
+")}};s.vs=3Dfunction(x){var =
s=3Dthis,v=3Ds.visitorSampling,g=3Ds.visitorSamp"
+"lingGroup,k=3D's_vsn_'+s.un+(g?'_'+g:''),n=3Ds.c_r(k),e=3Dnew =
Date,y=3De.ge"
+"tYear();e.setYear(y+10+(y<1900?1900:0));if(v){v*=3D100;if(!n){if(!s.c"
+"_w(k,x,e))return 0;n=3Dx}if(n%10000>v)return 0}return =
1};s.dyasmf=3Dfun"
+"ction(t,m){if(t&&m&&m.indexOf(t)>=3D0)return 1;return =
0};s.dyasf=3Dfunc"
+"tion(t,m){var s=3Dthis,i=3Dt?t.indexOf('=3D'):-1,n,x;if(i>=3D0&&m){var =
n=3Dt."
+"substring(0,i),x=3Dt.substring(i+1);if(s.pt(x,',','dyasmf',m))return "
+"n}return 0};s.uns=3Dfunction(){var =
s=3Dthis,x=3Ds.dynamicAccountSelection"
+",l=3Ds.dynamicAccountList,m=3Ds.dynamicAccountMatch,n,i;s.un.toLowerCas=
"
+"e();if(x&&l){if(!m)m=3Ds.wd.location.host;if(!m.toLowerCase)m=3D''+m;l=3D=
"
+"l.toLowerCase();m=3Dm.toLowerCase();n=3Ds.pt(l,';','dyasf',m);if(n)s.un=
"
+"=3Dn}i=3Ds.un.indexOf(',');s.fun=3Di<0?s.un:s.un.substring(0,i)};s.sa=3D=
fun"
+"ction(un){var s=3Dthis;s.un=3Dun;if(!s.oun)s.oun=3Dun;else =
if((','+s.oun+"
+"',').indexOf(un)<0)s.oun+=3D','+un;s.uns()};s.t=3Dfunction(){var =
s=3Dthis"
+",trk=3D1,tm=3Dnew =
Date,sed=3DMath&&Math.random?Math.floor(Math.random()*1"
+"0000000000000):tm.getTime(),sess=3D's'+Math.floor(tm.getTime()/108000"
+"00)%10+sed,yr=3Dtm.getYear(),vt=3Dtm.getDate()+'/'+tm.getMonth()+'/'+(y=
"
+"r<1900?yr+1900:yr)+' '+tm.getHours()+':'+tm.getMinutes()+':'+tm.get"
+"Seconds()+' '+tm.getDay()+' '+tm.getTimezoneOffset(),tfs=3Ds.gtfs(),t"
+"a=3D'',q=3D'',qs=3D'';s.gl(s.vl_g);s.uns();if(!s.q){var =
tl=3Dtfs.location,a"
+",o,i,x=3D'',c=3D'',v=3D'',p=3D'',bw=3D'',bh=3D'',j=3D'1.0',k=3Ds.c_w('s=
_cc','true',"
+"0)?'Y':'N',hp=3D'',ct=3D'',pn=3D0,ps;if(String&&String.prototype){j=3D\=
"1.1"
+"\";if(j.match){j=3D\"1.2\";if(tm.setUTCDate){j=3D\"1.3\";if(s.isie&&s.i=
"
+"smac&&s.apv>=3D5)j=3D\"1.4\";if(pn.toPrecision){j=3D\"1.5\";a=3Dnew =
Array;i"
+"f(a.forEach){j=3D\"1.6\";i=3D0;o=3Dnew Object;eval(\"try{i=3Dnew =
Iterator(o"
+")}catch(e){}\");if(i&&i.next)j=3D\"1.7\"}}}}}if(s.apv>=3D4)x=3Dscreen.w=
id"
+"th+'x'+screen.height;if(s.isns||s.isopera){if(s.apv>=3D3){v=3Ds.n.javaE=
"
+"nabled()?'Y':'N';if(s.apv>=3D4){c=3Dscreen.pixelDepth;bw=3Ds.wd.innerWi=
dt"
+"h;bh=3Ds.wd.innerHeight;}}s.pl=3Ds.n.plugins}else =
if(s.isie){if(s.apv>=3D"
+"4){v=3Ds.n.javaEnabled()?'Y':'N';c=3Dscreen.colorDepth;if(s.apv>=3D5){b=
w=3D"
+"s.d.documentElement.offsetWidth;bh=3Ds.d.documentElement.offsetHeight"
+";if(!s.ismac&&s.b){eval(\"try{s.b.addBehavior('#default#homePage');"
+"hp=3Ds.b.isHomePage(tl)?'Y':'N'}catch(e){}\");eval(\"try{s.b.addBehav"
+"ior('#default#clientCaps');ct=3Ds.b.connectionType}catch(e){}\")}}}el"
+"se =
r=3D''}if(s.pl)while(pn<s.pl.length&&pn<30){ps=3Ds.fl(s.pl[pn].name,"
+"100)+';';if(p.indexOf(ps)<0)p+=3Dps;pn++}s.q=3D(x?'&s=3D'+s.ape(x):'')+=
(c"
+"?'&c=3D'+s.ape(c):'')+(j?'&j=3D'+j:'')+(v?'&v=3D'+v:'')+(k?'&k=3D'+k:''=
)+(b"
+"w?'&bw=3D'+bw:'')+(bh?'&bh=3D'+bh:'')+(ct?'&ct=3D'+s.ape(ct):'')+(hp?'&=
hp"
+"=3D'+hp:'')+(p?'&p=3D'+s.ape(p):'')}if(s.usePlugins)s.doPlugins(s);var =
"
+"l=3Ds.wd.location,r=3Dtfs.document.referrer;if(!s.pageURL)s.pageURL=3Dl=
;i"
+"f(!s.referrer)s.referrer=3Dr;if(s.lnk||s.eo){var =
o=3Ds.eo?s.eo:s.lnk;if"
+"(!o)return '';var =
p=3Ds.gv('pageName'),w=3D1,t=3Ds.ot(o),n=3Ds.oid(o),x=3Do.s"
+"_oidt,h,l,i,oc;if(s.eo&&o=3D=3Ds.eo){while(o&&!n&&t!=3D'BODY'){o=3Do.pa=
rent"
+"Element?o.parentElement:o.parentNode;if(!o)return =
'';t=3Ds.ot(o);n=3Ds."
+"oid(o);x=3Do.s_oidt}oc=3Do.onclick?''+o.onclick:'';if((oc.indexOf(\"s_g=
"
+"s(\")>=3D0&&oc.indexOf(\".s_oc(\")<0)||oc.indexOf(\".tl(\")>=3D0)return=
"
+" =
''}ta=3Dn?o.target:1;h=3Do.href?o.href:'';i=3Dh.indexOf('?');h=3Ds.linkLe=
a"
+"veQueryString||i<0?h:h.substring(0,i);l=3Ds.linkName?s.linkName:s.ln("
+"h);t=3Ds.linkType?s.linkType.toLowerCase():s.lt(h);if(t&&(h||l))q+=3D'&=
"
+"pe=3Dlnk_'+(t=3D=3D'd'||t=3D=3D'e'?s.ape(t):'o')+(h?'&pev1=3D'+s.ape(h)=
:'')+(l?"
+"'&pev2=3D'+s.ape(l):'');else =
trk=3D0;if(s.trackInlineStats){if(!p){p=3Ds."
+"gv('pageURL');w=3D0}t=3Ds.ot(o);i=3Do.sourceIndex;if(s.gg('objectID')){=
n=3D"
+"s.gg('objectID');x=3D1;i=3D1}if(p&&n&&t)qs=3D'&pid=3D'+s.ape(s.fl(p,255=
))+("
+"w?'&pidt=3D'+w:'')+'&oid=3D'+s.ape(s.fl(n,100))+(x?'&oidt=3D'+x:'')+'&o=
t=3D"
+"'+s.ape(t)+(i?'&oi=3D'+i:'')}}if(!trk&&!qs)return '';if(s.p_r)s.p_r()"
+";var =
code=3D'';if(trk&&s.vs(sed))code=3Ds.mr(sess,(vt?'&t=3D'+s.ape(vt):'"
+"')+s.hav()+q+(qs?qs:s.rq(s.un)),ta);s.sq(trk?'':qs);s.lnk=3Ds.eo=3Ds.li=
"
+"nkName=3Ds.linkType=3Ds.wd.s_objectID=3Ds.ppu=3D'';if(s.pg)s.wd.s_lnk=3D=
s.wd."
+"s_eo=3Ds.wd.s_linkName=3Ds.wd.s_linkType=3D'';return =
code};s.tl=3Dfunction("
+"o,t,n){var =
s=3Dthis;s.lnk=3Ds.co(o);s.linkType=3Dt;s.linkName=3Dn;s.t()};s."
+"ssl=3D(s.wd.location.protocol.toLowerCase().indexOf('https')>=3D0);s.d=3D=
"
+"document;s.b=3Ds.d.body;s.n=3Dnavigator;s.u=3Ds.n.userAgent;s.ns6=3Ds.u=
.ind"
+"exOf('Netscape6/');var =
apn=3Ds.n.appName,v=3Ds.n.appVersion,ie=3Dv.indexO"
+"f('MSIE '),o=3Ds.u.indexOf('Opera =
'),i;if(v.indexOf('Opera')>=3D0||o>0)"
+"apn=3D'Opera';s.isie=3D(apn=3D=3D'Microsoft Internet =
Explorer');s.isns=3D(apn"
+"=3D=3D'Netscape');s.isopera=3D(apn=3D=3D'Opera');s.ismac=3D(s.u.indexOf=
('Mac')>"
+"=3D0);if(o>0)s.apv=3DparseFloat(s.u.substring(o+6));else =
if(ie>0){s.apv"
+"=3DparseInt(i=3Dv.substring(ie+5));if(s.apv>3)s.apv=3DparseFloat(i)}els=
e "
+"if(s.ns6>0)s.apv=3DparseFloat(s.u.substring(s.ns6+10));else =
s.apv=3Dpar"
+"seFloat(v);s.em=3D0;if(String.fromCharCode){i=3Descape(String.fromCharC=
"
+"ode(256)).toUpperCase();s.em=3D(i=3D=3D'%C4%80'?2:(i=3D=3D'%U0100'?1:0)=
)}s.sa"
+"(un);s.vl_l=3D'visitorID,vmk,ppu,charSet,visitorNamespace,cookieDomai"
+"nPeriods,cookieLifetime,pageName,pageURL,referrer,currencyCode,purc"
+"haseID';s.vl_t=3Ds.vl_l+',variableProvider,channel,server,pageType,tr"
+"ansactionID,campaign,state,zip,events,products,linkName,linkType';f"
+"or(var =
n=3D1;n<51;n++)s.vl_t+=3D',prop'+n+',eVar'+n+',hier'+n;s.vl_g=3Ds."
+"vl_t+',trackDownloadLinks,trackExternalLinks,trackInlineStats,linkL"
+"eaveQueryString,linkDownloadFileTypes,linkExternalFilters,linkInter"
+"nalFilters,linkNames';s.pg=3Dpg;s.gl(s.vl_g);if(!ss)s.wds()}",
l=3Dwindow.s_c_il,n=3Dnavigator,u=3Dn.userAgent,v=3Dn.appVersion,e=3Dv.in=
dexOf(
'MSIE =
'),m=3Du.indexOf('Netscape6/'),a,i,s;if(l)for(i=3D0;i<l.length;i++){
s=3Dl[i];if(s.oun=3D=3Dun)return s;else =
if(s.fs(s.oun,un)){s.sa(un);return s
}}if(e>0){a=3DparseInt(i=3Dv.substring(e+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)}function s_co(o){
var s=3Ds_gi("^",1,1);return s.co(o)}function s_gs(un){var =
s=3Ds_gi(un,1,1
);return s.t()}function s_dc(un){var s=3Ds_gi(un,1);return s.t()}

// Test & Target Plug-In
// depends on /wp-srv/otto/js/mbox.js
/*
if (typeof mboxLoadSCPlugin =3D=3D "function")
	mboxLoadSCPlugin(s);
*/

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.washingtonpost.com/wp-srv/ad/comments_box.js

//document.write('<a =
href=3D"http://clk.atdmt.com/OY6/go/wpnxxcsc0460000075oy6/direct;at.Q4_FY=
07_Corporate_CampaignWashingtonpostNewsweek_InteractiveSponsored_By_Tilew=
pnxxcsc0460000075oy6;ct.1/01/"><img =
src=3D"http://www.washingtonpost.com/wp-adv/advertisers/cisco/cisco289.gi=
f" border=3D"0"/></a>');

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://community.washingtonpost.com/ver1.0/SiteLifeProxy

    document.write("<link =
href=3D'http://community.washingtonpost.com/ver1.0/SiteLifeCss' =
rel=3D'stylesheet' type=3D'text/css' />");
    document.write("<script type=3D'text/javascript' =
src=3D'http://community.washingtonpost.com/ver1.0/SiteLifeScripts'></scri=
pt>");
	document.write("<link =
href=3D'http://www.washingtonpost.com/wp-srv/community/css/community.css'=
 rel=3D'stylesheet' type=3D'text/css' />");

///<summary>constructor to create a new SiteLifeProxy</summary>
function SiteLifeProxy(url) {
    // User Configurable Properties - these can be set at any time

    // your apiKey, this value must be set!
    this.apiKey =3D null;

    // sniff the browser for custom behaviors
    this.__isExplorer =3D =
navigator.userAgent.toLowerCase().indexOf('msie') !=3D -1;
    this.__isSafari =3D =
navigator.userAgent.toLowerCase().indexOf('safari') !=3D -1;
    this.__isMac =3D navigator.platform.toLowerCase().indexOf('mac') =
!=3D -1;
    this.__isMacIE =3D this.__isMac && this.__isExplorer;
   =20
    // if enabled, spit out debug information through alert()
    this.debug =3D false;
   =20
    // used to track the id of the handler expecting the results from =
the immediately preceeding method invocation
    // this is used only for testing purposes
    this.lastHandlerId =3D "";
   =20
    // Methods You can Overide
    //
    // OnSuccess(returnValue) - is passed the return value at the end of =
a successful call, default does nothing
    // OnError(msg) - is passed an error message if a problem occurs
    // OnDebug(msg) - is called when debugging is enabled
    =20
    this.__baseUrl =3D url;
    this.__sendInvokeCount =3D 0;
   =20
    this.__eventHandlers =3D new Object();
};

SiteLifeProxy.prototype.AddEventHandler =3D function (event_name, =
callback) {this.__eventHandlers[event_name] =3D callback;}
SiteLifeProxy.prototype.FireEvent =3D function (event_name) {
    var func;
    if(func =3D this.__eventHandlers[event_name]) {
        var A =3D new Array(); for (var i =3D 1; i <  =
this.FireEvent.arguments.length; i++){ A[i - 1] =3D =
this.FireEvent.arguments[i];}
        if (func.__Bound)
          return func();
        return this.__eventHandlers[event_name].apply(this, A);
    }
}

SiteLifeProxy.prototype.ScriptId =3D function() { return this.__scriptId =
=3D "_bb_script_" + this.__sendInvokeCount++; }

// Default error handler for the proxy object, simple alert
SiteLifeProxy.prototype.OnError =3D function(msg) {
   alert("OnError: " + msg);
}

// Default debug handler for the proxy object, simple alert
SiteLifeProxy.prototype.OnDebug =3D function(msg) {
    if (this.debug)
        alert("Debug: " + msg);
}

// fetch a named request parameter from the page URL
SiteLifeProxy.prototype.GetParameter =3D function(parameterName) {
    var key =3D parameterName + "=3D";
    var parameters =3D document.location.search.substring(1).split("&");
    for (var i =3D 0; i < parameters.length; i++)
    {
        if (parameters[i].indexOf(key) =3D=3D 0)
            return parameters[i].substring(key.length);
    }
    return null;
};

// browser independent method to get elements by ID
SiteLifeProxy.prototype.GetElement =3D function(id) {
    this.OnDebug("GetElement " + id);
    if (document.getElementById)
        return document.getElementById(id);
    if (document.all)
        return document.all[id];
    this.OnError("No support for GetElement() in this browser");
    return null;
}

// browser independent method to get elements by tag name
SiteLifeProxy.prototype.GetTags =3D function(tagName) {
    this.OnDebug("GetTags " + tagName);
    if (document.getElementsByTagName)
        return document.getElementsByTagName(tagName);
    if (document.all)
       return document.tags(tagName);
    this.OnError("No support for GetTags() in this browser");
    return null;
}

SiteLifeProxy.prototype.EscapeValue =3D function(s) {
    if (s =3D=3D null) return null;
    return encodeURIComponent(s);
};

SiteLifeProxy.prototype.__ArrayValidation =3D function(s)
{
    if ((typeof s =3D=3D 'undefined') || (s.length < 1))
    {
        return false;
    }
    return true;
}

SiteLifeProxy.prototype.__CheckErrorHandler =3D function(onError) {
    this.OnDebug("__CheckErrorHandler " + onError);
    if ((typeof onError =3D=3D 'undefined') || (eval("window." + =
onError) =3D=3D null))
    {
      return "gSiteLife.OnError";
    }
    return onError;
}
SiteLifeProxy.prototype.SetCookie =3D function SetCookie( name, value) {
    var today =3D new Date(); today.setTime( today.getTime() );
   =20
    var expires_date =3D new Date( today.getTime() + 126144000000 );
   =20
    document.cookie =3D name + "=3D" +escape( value ) +
    ";expires=3D" + expires_date.toGMTString() +=20
    ";path=3D/" + ";domain=3Dwashingtonpost.com" ;
}
// validate and fetch arguments, if the argument is missing and =
optional, we return an empty string       =20
SiteLifeProxy.prototype.__GetArgument =3D function(variableName, =
variableValue, isRequired, isArray) {
    this.OnDebug("__GetArgument " + variableName + "," + variableValue + =
"," + isRequired + "," + isArray);
    if (typeof variableValue =3D=3D "undefined" || variableValue =3D=3D =
null || variableValue =3D=3D "")
    {
        if (isRequired)
        {
            this.OnError("Missing required parameter " + variableName);
            this.__isValid =3D false;
            return "";
        }
        else
            return "";
    }
    if (isRequired && isArray)=20
    {
        if (!this.__ArrayValidation(variableValue))=20
        {
            this.OnError("Invalid array parameter " + variableName);
            this.__isValid =3D false;
            return "";
        }
    }
    return "&" + variableName + "=3D" + this.EscapeValue(variableValue);
};

SiteLifeProxy.prototype.__StripAnchorFromUrl =3D function(url) {
    var aIdx =3D url.indexOf("#");
    return aIdx =3D=3D -1 ? url : url.substring(0, aIdx);
}

SiteLifeProxy.prototype.__SafeAppendUrlValue =3D function(url, key, =
value) {
    url +=3D url.indexOf("?") !=3D -1 ? "&" : "?";
    return url + key + "=3D" + value;
}

SiteLifeProxy.prototype.__AppendUrlValues =3D function (url)
{
	time =3D new Date();
    url +=3D this.__GetArgument("plckNoCache", time.getTime(), false, =
false);
    url +=3D this.__GetArgument("plckApiKey", this.apiKey, true, false);
       =20
    return url;
}

SiteLifeProxy.prototype.ReloadPage =3D function(params) {
    var sSearch =3D window.location.search.substring(1);
    var sNVPs =3D sSearch.split('&');
    var newSearch =3D "";
    for(var k in params) {
        if(k =3D=3D "extend") continue;

        if(newSearch =3D=3D "") newSearch +=3D "?"; else newSearch +=3D =
"&";
        newSearch +=3D k + '=3D' + params[k];
    }
    for (var i =3D 0; i < sNVPs.length; i++) {
        var kv =3D sNVPs[i].split('=3D');
        if(kv[0] && kv[0].indexOf('plck') !=3D 0 && ! params[kv[0]]) {
            newSearch +=3D "&" + sNVPs[i];       =20
        }
    }
    window.location.search =3D newSearch;
}

function loadScript (url, callback) {
	var script =3D document.createElement('script');
	script.type =3D 'text/javascript';
	script.charset =3D 'utf-8';
	if (callback)
		script.onload =3D script.onreadystatechange =3D function() {
			if (script.readyState && script.readyState !=3D 'loaded' && =
script.readyState !=3D 'complete')
				return;
			script.onreadystatechange =3D script.onload =3D null;
			callback();
		};
	script.src =3D url;
	document.getElementsByTagName('head')[0].appendChild (script);
}

SiteLifeProxy.prototype.__Send =3D function(url, scriptToUse, =
callbackName, args) {
    this.OnDebug("_Send " + url);
    function gLoadScript(url, callbackName) {
      var script =3D document.createElement('script');
      script.setAttribute('type', 'text/javascript');
    	script.setAttribute('charset', 'utf-8');
    	script.setAttribute('src', url + (callbackName ? '&EVENT_ID=3D' + =
callbackName : ''));
    	document.getElementsByTagName('head')[0].appendChild (script);
    }
    function bind(_function, _this, _arguments) {
      var f =3D function() {
        _function.apply(_this, _arguments);
      };
      f['__Bound'] =3D true;
      return f;
    };
    var func;
    if ((typeof callbackName =3D=3D 'string') && (func =3D =
this.__eventHandlers[callbackName]) && (typeof func =3D=3D 'function') =
&& !func['__Bound']) {
      this.__eventHandlers[callbackName] =3D bind(func, this, args);
    }
   =20
    //append our various parameters as necessary
    url =3D this.__AppendUrlValues(url);
    this.OnDebug("_Send (updated) " + url);
    // add the script node to the document
    if (document.createElement && ! this.__isMacIE) {
        gLoadScript(url, callbackName);
        return;
    }

    // could fall back to sync at this point, but will bust if the page =
is already loaded

    this.OnError("No support for async in this browser");
}

SiteLifeProxy.prototype.Logout =3D function(ScriptToUse, IsRestPage) {
    var plckRest =3D IsRestPage ? true : false;
    this.__Send(this.__baseUrl + '/Utility/Logout?plckRedirectUrl=3D' + =
escape(window.location.href) + '&plckRest=3D' + plckRest, ScriptToUse);
    return false;
}

SiteLifeProxy.prototype.AddLoadEvent =3D function(func) {
if(window.addEventListener){
 window.addEventListener("load", func, false);
}else{
 if(window.attachEvent){
   window.attachEvent("onload", func);
 }else{
   if(document.getElementById){
    var oldonload =3D window.onload;
    if (typeof window.onload !=3D 'function') {
      window.onload =3D func;
    } else {
      window.onload =3D function() {
       if (oldonload) {
        oldonload();
       }
       func();
}}}}}}

SiteLifeProxy.prototype.AdInsertHelper =3D function() {
    for(var src in gSiteLife.__adsToInsert) {
        if(src =3D=3D "extend") continue;
        var dest =3D gSiteLife.__adsToInsert[src];
        var parent =3D document.getElementById(dest);
		var newChild =3D document.getElementById(src);
		if( ! parent || ! newChild ) {continue; }
		parent.replaceChild( newChild, document.getElementById(dest + =
"Child"));
		newChild.style.display =3D "block"; parent.style.display =3D "block";
    }
}

SiteLifeProxy.prototype.InsertAds =3D function(source, destination) {
gSiteLife.__adsToInsert =3D new Object();
for(ii=3D0; ii< this.InsertAds.arguments.length; ii+=3D2) { =
gSiteLife.__adsToInsert[this.InsertAds.arguments[ii]] =3D =
this.InsertAds.arguments[ii+1];}
this.AddLoadEvent(gSiteLife.AdInsertHelper);
}

SiteLifeProxy.prototype.TitleTag =3D function() {
 var titleTag =3D document.getElementById("plckTitleTag");
 return titleTag ? titleTag.innerText || titleTag.textContent : null;
 }

SiteLifeProxy.prototype.WriteDiv =3D function(id, divClass) {
    var cssClass =3D divClass ? divClass : "";
    document.write('<div id=3D"'+id+'" class=3D"'+cssClass+'"></div>'); =
return id;
}

SiteLifeProxy.prototype.InnerHtmlWrite =3D function(elementId, =
innerContents ) {
    var el =3D document.createElement("div");
    try {
        if(document.location.href.indexOf("debug=3Dtrue") > -1) {
            el.innerHTML +=3D "<div style=3D'border:1px solid =
red;'><span style=3D'background-color:red; color:white; =
position:absolute; cursor:pointer; font-size:8pt;' =
onclick=3D'DebugShowInnerHTML(\"${plckElementId}\",\"http://community.was=
hingtonpost.com/ver1.0/Proxies/Default.rails\");'>&nbsp;?&nbsp;</span><di=
v>" + innerContents + "</div></div>";
        } else {
            el.innerHTML +=3D innerContents;
            el.style.display =3D "inline";
        }
        var destDiv =3D document.getElementById(elementId);
        while (destDiv.childNodes.length >=3D 1) {
             destDiv.removeChild(destDiv.childNodes[0]);
        }
       =20
        destDiv.appendChild(el);
    } catch (error) {
        alert(elementId + " Error "  + error.number + ": " + =
error.description);
    }
}

SiteLifeProxy.prototype.SortTimeStampDescending =3D =
"TimeStampDescending";
SiteLifeProxy.prototype.SortTimeStampAscending =3D "TimeStampAscending";
SiteLifeProxy.prototype.SortRecommendationsDescending =3D =
"RecommendationsDescending";
SiteLifeProxy.prototype.SortRecommendationsAscending =3D =
"RecommendationsAscending";
SiteLifeProxy.prototype.SortRatingDescending =3D "RatingDescending";
SiteLifeProxy.prototype.SortRatingAscending =3D "RatingAscending";
SiteLifeProxy.prototype.KeyTypeExternalResource =3D "ExternalResource";
       =20
SiteLifeProxy.prototype.PersonaHeaderRequest =3D function(UserId) {
    var url =3D this.__baseUrl + =
'/Persona/PersonaHeader?plckElementId=3DpersonaHDest&plckUserId=3D'+ =
UserId;
    this.__Send(url, "personaHeaderScript", 'persona:header', =
arguments);
}
SiteLifeProxy.prototype.PersonaHeader =3D function(UserId) {
    this.WriteDiv("personaHDest", "Persona_Main");
    this.PersonaHeaderRequest(UserId);=20
}
SiteLifeProxy.prototype.Persona =3D function(UserId) {
    this.WriteDiv("personaDest", "Persona_Main");
    var action =3D this.GetParameter("plckPersonaPage");
    if(action && (typeof this[action] =3D=3D 'function')) =
this[action](UserId);
             else this.PersonaHome(UserId);
    }
SiteLifeProxy.prototype.LoadPersonaPage =3D function(PageName, UserId) {
    var params =3D new Object(); params['plckPersonaPage'] =3D PageName; =
params['plckUserId'] =3D UserId;
            params['newspaperUserId'] =3D UserId;
        for(ii=3D2; ii< this.LoadPersonaPage.arguments.length; ii+=3D2) =
{ params[this.LoadPersonaPage.arguments[ii]] =3D =
this.LoadPersonaPage.arguments[ii+1];}
    this.ReloadPage(params);
    return false;
}

SiteLifeProxy.prototype.PersonaHome =3D function(UserId) {
   return this.PersonaSend('PersonaHome', 'personaDest', =
'personaScript', UserId, null, 'persona:home');
}
SiteLifeProxy.prototype.WatchItem =3D =
function(Controller,Method,WatchKey, targetDiv) {
    var url =3D this.__baseUrl + '/'+Controller+'/' + Method + '?' + =
'plckWatchKey=3D' + WatchKey + '&plckElementId=3D' + targetDiv + =
'&plckWatchUrl=3D' + this.EscapeValue(window.location.href);
    this.__Send(url, "AddWatchScript");
    return false;
}
SiteLifeProxy.prototype.PersonaRemoveWatchItem=3D function(UserId, =
WatchKey, Div, View) {
   return this.PersonaSend('PersonaRemoveWatchItem', Div, =
'personaScript', UserId, 'plckWatchView=3D' + View + '&plckWatchKey=3D' =
+ WatchKey);
}
SiteLifeProxy.prototype.PersonaAddFriend=3D function(UserId) {
   return this.PersonaSend('PersonaAddFriend', 'personaHDest', =
'personaScript', UserId);
}
SiteLifeProxy.prototype.PersonaRemoveFriend =3D function(UserId, Friend, =
Div, View, Expanded) {
   if(!Expanded) Expanded =3D "false";
   if (confirm("Are you sure you want to delete this user from your list =
of Friends?") =3D=3D true) {
    return this.PersonaSend('PersonaRemoveFriend', Div, 'personaScript', =
UserId, 'plckFriendView=3D' + View + '&plckFriend=3D' + Friend + =
'&plckExpanded=3D' + Expanded);
   }
   return false;
}
SiteLifeProxy.prototype.PersonaRemovePendingFriend =3D function(UserId, =
PendingFriend, Div) {
   if (confirm("Are you sure you want to delete this user's invite?") =
=3D=3D true) {
    return this.PersonaSend('PersonaRemovePendingFriend', Div, =
'personaScript', UserId, 'plckPendingFriend=3D' + PendingFriend);
   }
   return false;
}
SiteLifeProxy.prototype.PersonaAddPendingFriend =3D function(UserId, =
PendingFriend, Div) {
    return this.PersonaSend('PersonaAddPendingFriend', Div, =
'personaScript', UserId, 'plckPendingFriend=3D' + PendingFriend);
}
SiteLifeProxy.prototype.PersonaMessages =3D function(UserId) {
   var AdParams =3D this.GetParameter('plckCurrentPage') ? =
'plckCurrentPage=3D' + this.GetParameter('plckCurrentPage') : "";
   var scrl =3D this.GetParameter('plckScrollToAnchor');  if(scrl){ =
if(AdParams) {AdParams +=3D'&';} AdParams +=3D 'plckScrollToAnchor=3D' + =
scrl;}
   if(this.GetParameter('plckMessageSubmitted')){if(AdParams) {AdParams =
+=3D'&';} AdParams +=3D 'plckMessageSubmitted=3D' + =
this.GetParameter('plckMessageSubmitted');}
   return this.PersonaSend('PersonaMessages', 'personaDest', =
'personaScript', UserId, AdParams, 'persona:messages');
}
SiteLifeProxy.prototype.PersonaComments =3D function(UserId) {
   var AdParams =3D this.GetParameter('plckCurrentPage') ? =
'plckCurrentPage=3D' + this.GetParameter('plckCurrentPage') : "";
   return this.PersonaSend('PersonaComments', 'personaDest', =
'personaScript', UserId, AdParams, 'persona:comments');
}
SiteLifeProxy.prototype.PersonaBlog =3D function(UserId) {
   var AdParams =3D this.GetParameter('plckCurrentPage') ? =
'plckCurrentPage=3D' + this.GetParameter('plckCurrentPage') : "";
   if(AdParams) {AdParams +=3D'&';} AdParams +=3D 'plckBlogId=3D' + =
UserId;
   var url =3D this.__baseUrl + =
'/PersonaBlog/PersonaBlog?plckElementId=3DpersonaDest&plckUserId=3D'+ =
UserId + '&' + AdParams;
   this.__Send(url, 'personaScript', 'persona:blog', arguments);
   return false;
}
SiteLifeProxy.prototype.PersonaProfile =3D function(UserId) {
    return this.PersonaSend('PersonaProfile', 'personaDest', =
'personaScript', UserId, null, 'persona:profile');
}
SiteLifeProxy.prototype.PersonaWatchListPaginate =3D function(UserId, =
pageNum) {=20
    return this.PersonaPaginate('WatchList', pageNum, UserId);
}
SiteLifeProxy.prototype.PersonaFriendsPaginate =3D function(UserId, =
pageNum) {=20
    return this.PersonaPaginate('Friends', pageNum, UserId);
}
SiteLifeProxy.prototype.PersonaPendingFriendsPaginate =3D =
function(UserId, pageNum) {=20
    var AdParam =3D "plckPendingFriendsPageNum=3D" + pageNum;
    return this.PersonaPaginate('Friends', 0, UserId,AdParam);
}
SiteLifeProxy.prototype.PersonaMessagesPreviewPaginate =3D =
function(UserId, pageNum) {=20
    return this.PersonaPaginate('MessagesPreview', pageNum, UserId);
}
SiteLifeProxy.prototype.PersonaMessageRemove =3D function(UserId, =
pageNum, MessageKey) {=20
   if (confirm("Are you sure you want to remove this message from the =
page?") =3D=3D true) {
        return this.PersonaSend('PersonaRemoveMessage', 'personaDest', =
'PersonaMessagesPageScript', UserId, 'plckCurrentPage=3D'+ pageNum + =
'&plckMessageKey=3D'+MessageKey);
   }
   return false;
}
SiteLifeProxy.prototype.PersonaSend =3D function(ApiName, DestDiv, =
ScriptName, UserId, AddParams, eventId){
    var url =3D this.__baseUrl + '/Persona/' + ApiName + =
'?plckElementId=3D' + DestDiv + '&plckUserId=3D'+ UserId;
    if(AddParams) url +=3D '&' + AddParams;
    this.__Send(url, ScriptName, eventId, arguments);
    return false;
}

SiteLifeProxy.prototype.PersonaPaginate =3D function(ApiName, PageNum, =
UserId, AddParams){
    var url =3D this.__baseUrl + '/Persona/Persona' + ApiName + '?plck' =
+ ApiName + 'PageNum=3D' + PageNum + '&plckElementId=3DPersona' + =
ApiName + 'Dest&plckUserId=3D'+ UserId;
    if(AddParams) url +=3D '&' + AddParams;   =20
    this.__Send(url, 'Persona'+ ApiName + 'Script');
    return false;
}

SiteLifeProxy.prototype.PersonaPhotoSend =3D function(ApiName, DestDiv, =
ScriptName, UserId, AddParams, eventId){
    var url =3D this.__baseUrl + '/PersonaPhoto/' + ApiName + =
'?plckElementId=3D' + DestDiv + '&plckUserId=3D'+ UserId;
    if(AddParams) url +=3D '&' + AddParams;
    this.__Send(url, ScriptName, eventId, arguments);
    return false;
}

SiteLifeProxy.prototype.PersonaMostRecent =3D function(UserId, PhotoID, =
DestDiv) {
   return this.PersonaPhotoSend('PersonaMostRecent', DestDiv, =
'personaScript', UserId,'plckPhotoID=3D' + PhotoID);
}

SiteLifeProxy.prototype.PersonaCreateGallery =3D function(UserId) {
     return this.PersonaPhotoSend('UserGalleryCreate', =
'personaDestPhoto', 'personaScript', UserId);
}

SiteLifeProxy.prototype.PersonaEditGallery =3D =
function(UserId,GalleryID) {
     return this.PersonaPhotoSend('UserGalleryEdit', 'userGalleryDest', =
'personaScript', UserId,'plckGalleryID=3D' + GalleryID);
}

SiteLifeProxy.prototype.PersonaUploadToUserGallery =3D =
function(GalleryId) {
    var url =3D this.__baseUrl + =
'/Photo/PhotoUpload?plckElementId=3DuserGalleryDest&plckGalleryID=3D'+ =
GalleryId;
    this.__Send(url);
    return false;
}

SiteLifeProxy.prototype.PersonaPhotos =3D function(UserId) {
     return this.PersonaPhotoSend('PersonaPhotos', 'personaDest', =
'personaScript', UserId, null, 'persona:photos');
}
SiteLifeProxy.prototype.PersonaAllPhotos =3D function(UserId) {
     return this.PersonaPhotoSend('PersonaAllPhotos', 'personaDest', =
'personaScript', UserId);
}

SiteLifeProxy.prototype.PersonaGalleryPhoto =3D function(UserId) {
     return this.PersonaPhotoSend('PersonaGalleryPhoto', 'personaDest', =
'personaScript', UserId);
}
SiteLifeProxy.prototype.PersonaMyRecentPhotos =3D =
function(UserId,ElementId, PageNum) {
     return this.PersonaPhotoSend('PersonaMyRecentPhotos', ElementId, =
'personaScript', UserId,'plckPageNum=3D' + PageNum);
}

SiteLifeProxy.prototype.PersonaGallery =3D =
function(UserId,GalleryId,PageNum) {
     if(!PageNum){
        PageNum =3D gSiteLife.GetParameter("plckPageNum") ? =
gSiteLife.GetParameter("plckPageNum") : 0;
     }
     if(!GalleryId) {
        GalleryId =3D gSiteLife.GetParameter("plckGalleryID");
     }
     return this.PersonaPhotoSend('PersonaGallery', 'personaDest', =
'personaScript', UserId,'plckGalleryID=3D'+ GalleryId + =
'&plckPageNum=3D' + PageNum);
}

SiteLifeProxy.prototype.UserGalleryList =3D function(UserId,ElementId, =
PageNum) {
     return this.PersonaPhotoSend('UserGalleryList', ElementId, =
'personaScript', UserId,'plckPageNum=3D' + PageNum);
}
SiteLifeProxy.prototype.PersonaGallerySubmissions =3D =
function(UserId,ElementId, PageNum){
     return this.PersonaPhotoSend('PersonaGallerySubmissions', =
ElementId, 'personaScript', UserId,'plckPageNum=3D' + PageNum);
}=20

SiteLifeProxy.prototype.PersonaGalleryPhoto =3D function(UserId) {
    var photoid =3D gSiteLife.GetParameter('plckPhotoID');
    return this.PersonaPhotoSend('PersonaGalleryPhoto', =
'personaDest','personaScript', UserId,'&plckPhotoID=3D' +photoid);
}
SiteLifeProxy.prototype.PersonaRecentGalleryPhoto =3D function(UserId) {
    var photoid =3D gSiteLife.GetParameter('plckPhotoID');
    return this.PersonaPhotoSend('PersonaRecentGalleryPhoto', =
'personaDest','personaScript', UserId,'&plckPhotoID=3D' +photoid);
}

SiteLifeProxy.prototype.LoadPersonaGalleryPage =3D =
function(UserId,GalleryID) {
    var params =3D new Object(); params['plckPersonaPage'] =3D =
'PersonaGallery'; params['plckUserId'] =3D UserId;=20
            params['newspaperUserId'] =3D UserId;
        params['plckGalleryID'] =3D GalleryID;
    this.ReloadPage(params);
    return false;
}
SiteLifeProxy.prototype.LoadPersonaPhotoPage =3D =
function(UserId,PhotoID) {
    var params =3D new Object(); params['plckPersonaPage'] =3D =
'PersonaGalleryPhoto'; params['plckUserId'] =3D UserId;
            params['newspaperUserId'] =3D UserId;
        params['plckPhotoID'] =3D PhotoID;
    this.ReloadPage(params);
    return false;
}
SiteLifeProxy.prototype.LoadPersonaRecentPhotoPage =3D =
function(UserId,PhotoID) {
    var params =3D new Object(); params['plckPersonaPage'] =3D =
'PersonaRecentGalleryPhoto'; params['plckUserId'] =3D UserId;
            params['newspaperUserId'] =3D UserId;
        params['plckPhotoID'] =3D PhotoID;
    this.ReloadPage(params);
    return false;
}=0A=
SiteLifeProxy.prototype.SolicitPhoto =3D function(galleryID) {
	var elementId =3D 'plcksolicit' + galleryID;
	this.WriteDiv(elementId);
    var url =3D this.__baseUrl + '/Photo/SolicitPhoto?plckElementId=3D' =
+ elementId + '&plckGalleryID=3D' +galleryID;
    this.__Send(url);
    return false;
}

SiteLifeProxy.prototype.PhotoUpload =3D function() {
	var elementId =3D 'plcksubmit';
	this.WriteDiv(elementId);
    var galleryID =3D gSiteLife.GetParameter('plckGalleryID');

    var url =3D this.__baseUrl + '/Photo/PhotoUpload?plckElementId=3D' + =
elementId + '&plckGalleryID=3D' +galleryID;
    this.__Send(url);
    return false;
}

SiteLifeProxy.prototype.PublicGallery =3D function() {
    var elementId =3D 'plckgallery';
	this.WriteDiv(elementId);
	var galleryID =3D gSiteLife.GetParameter('plckGalleryID');
    var pageNum =3D gSiteLife.GetParameter('plckPageNum');
=09
    var url =3D this.__baseUrl + '/Photo/PublicGallery?plckElementId=3D' =
+ elementId + '&plckGalleryID=3D' +galleryID + '&plckPageNum=3D' =
+pageNum;
	this.__Send(url);
	return false;
}


SiteLifeProxy.prototype.GalleryPhoto =3D function() {
	var elementId =3D 'plckphoto';
	this.WriteDiv(elementId);
    var photoid =3D gSiteLife.GetParameter('plckPhotoID');

    var url =3D this.__baseUrl + '/Photo/GalleryPhoto?plckElementId=3D' =
+ elementId + '&plckPhotoID=3D' +photoid;
	this.__Send(url);
	return false;
}

SiteLifeProxy.prototype.PublicGalleries =3D function() {
	var elementId =3D 'plckgalleries';
	this.WriteDiv(elementId);
    var pageNum =3D gSiteLife.GetParameter('plckPageNum') ?  =
gSiteLife.GetParameter('plckPageNum') : "0";

    var url =3D this.__baseUrl + =
'/Photo/PublicGalleries?plckElementId=3D' + elementId + =
'&plckPageNum=3D' + pageNum;
    this.__Send(url);
    return false;
}

SiteLifeProxy.prototype.PhotoRecommend =3D =
function(targetid,recommendDiv,isGallery) {
    var url =3D this.__baseUrl + '/Photo/Recommend?plckElementId=3D' + =
recommendDiv + '&plckTargetid=3D' +targetid + '&plckIsGallery=3D' =
+isGallery ;
    this.__Send(url);
    return false;
}
=0A=
//parentKeyType can be any gSiteLife.KeyType* value, but for including =
this widget on an article page the value is=20
//typically gSiteLife.KeyTypeExternalResource
SiteLifeProxy.prototype.Comments =3D function(parentKeyType, parentKey, =
pageSize, sort, showTabs, tab, parentUrl, parentTitle, refreshPage)
{
	return this.CommentsInternal(parentKeyType, parentKey, pageSize, sort, =
showTabs, tab, parentUrl, parentTitle, false, false, null, refreshPage);
};

SiteLifeProxy.prototype.CommentsInput =3D function(parentKeyType, =
parentKey, redirectToUrl)
{   =20
    return this.CommentsInternal(parentKeyType, parentKey, null, =
"TimeStampDescending", null, null, null, null, true, false, =
redirectToUrl, false);
};

SiteLifeProxy.prototype.CommentsOutput =3D function(parentKeyType, =
parentKey, refreshPage, pageSize, sortOrder)
{
    sortOrder =3D sortOrder || "TimeStampDescending";
	return this.CommentsInternal(parentKeyType, parentKey, pageSize, =
sortOrder, null, null, null, null, false, true, null, refreshPage);
}

SiteLifeProxy.prototype.CommentsRefresh =3D function(parentKeyType, =
parentKey, pageSize, sortOrder)
{
    if (!parentKey || parentKey =3D=3D "") throw "Must pass in value for =
parentKey!";
    return this.CommentsInternal(parentKeyType, parentKey, pageSize, =
sortOrder, null, null, null, null, false, false, null, true);
}

SiteLifeProxy.prototype.CommentsInternal =3D function(parentKeyType, =
parentKey, pageSize, sort, showTabs, tab, parentUrl, parentTitle, =
hideView, hideInput, redirectToUrl, refreshPage)
{
    var divId =3D 'Comments_Container';
    if(this.numCommentsWidgets){ divId +=3D this.numCommentsWidgets; } =
else { this.numCommentsWidgets =3D 0; }
   =20
    document.write("<div id=3D'" + divId + "'></div>");
  =20
    this.numCommentsWidgets++;
   =20
    var oldDocOnLoad =3D window.onload;
   =20
    function loadComments() {
        if (oldDocOnLoad !=3D null) {
            oldDocOnLoad();
        }
        gSiteLife.GetComments(parentKeyType, parentKey, parentUrl, =
parentTitle, 0, pageSize, sort, showTabs, tab, hideView, hideInput, =
redirectToUrl, refreshPage, divId);
    }
   =20
    window.onload =3D loadComments;

    return false;
}

SiteLifeProxy.prototype.GetComments =3D function(parentKeyType, =
parentKey, parentUrl, parentTitle, page, pageSize, sort, showTabs, tab, =
hideView, hideInput, redirectTo, refreshPage, divId)
{
    parentKeyType =3D parentKeyType || "ExternalResource";
    parentUrl =3D parentUrl || =
gSiteLife.__StripAnchorFromUrl(window.location.href);
    parentUrl =3D gSiteLife.EscapeValue(parentUrl);
    parentKey =3D parentKey || =
gSiteLife.__StripAnchorFromUrl(window.location.href);
    parentTitle =3D parentTitle || =
gSiteLife.EscapeValue(document.title);
    page =3D page || gSiteLife.GetParameter('plckCurrentPage') || 0;
    pageSize =3D pageSize || 10;
    sort =3D sort || "TimeStampAscending";
    showTabs =3D showTabs || false;
    tab =3D tab || "MostRecent";
    hideView =3D hideView || false;
    hideInput =3D hideInput || false;
    redirectTo =3DgSiteLife.EscapeValue(redirectTo) || "";
    refreshPage =3D refreshPage || false;
   =20
    var url =3D this.__baseUrl +=20
        '/Comment/GetPage.rails?plckTargetKeyType=3D'+ parentKeyType +=20
        '&plckTargetKey=3D' + escape(parentKey) +=20
        "&plckCurrentPage=3D" + page +=20
        "&plckItemsPerPage=3D" + pageSize +=20
        "&plckSort=3D" + sort +=20
        "&plckElementId=3D" + divId +
        "&plckTargetUrl=3D" + parentUrl +
        "&plckTargetTitle=3D" + parentTitle +
        "&plckHideView=3D" + hideView +
        "&plckHideInput=3D" + hideInput +
        "&plckRefreshPage=3D" + refreshPage +
        "&plckRedirectToUrl=3D" + redirectTo ;

    if (showTabs) {
        url =3D url + "&plckShowTabs=3Dtrue&plckTab=3D" + tab;
    }
    this.__Send(url);
    return false;
};

=0A=
SiteLifeProxy.prototype.Blog =3D function(BlogId) {
    this.WriteDiv("blogDest", "Persona_Main");
    var action =3D this.GetParameter("plckBlogPage");
    if(action && action !=3D "Blog" && (typeof this[action] =3D=3D =
'function')){
     return this[action](BlogId);
    }else{
       var AdParams =3D this.GetParameter('plckCurrentPage') ? =
'plckCurrentPage=3D' + this.GetParameter('plckCurrentPage') : "";
       return this.BlogSend('Blog', 'Blog', 'blogDest', 'blogScript', =
BlogId, AdParams);
    }
}
SiteLifeProxy.prototype.LoadBlogPage =3D function(PageName, BlogId) {
    var params =3D new Object(); params['plckBlogPage'] =3D PageName; =
params['plckBlogId'] =3D BlogId;=20
    for(ii=3D2; ii< this.LoadBlogPage.arguments.length; ii+=3D2) { =
params[this.LoadBlogPage.arguments[ii]] =3D =
this.LoadBlogPage.arguments[ii+1];}
    this.ReloadPage(params);
    return false;
}

SiteLifeProxy.prototype.BlogViewEdit =3D function(blogId) {
   return this.BlogSend(null, 'BlogViewEdit', null, null, blogId);
}

SiteLifeProxy.prototype.BlogPostCreate =3D function(blogId) {
   return this.BlogSend(null, 'BlogPostCreate', null, null, blogId, =
'plckRedirectUrl=3D' + this.GetParameter("plckRedirectUrl"));
}

SiteLifeProxy.prototype.BlogPendingComments =3D function(blogId, =
currentPage) {
   if( !currentPage) currentPage =3D 0;
   return this.BlogSend(null, 'BlogPendingComments', null, null, blogId, =
'plckCurrentPage=3D'+currentPage);
}

SiteLifeProxy.prototype.BlogSettings =3D function(blogId) {
   return this.BlogSend(null, 'BlogSettings', null, null, blogId);
}

SiteLifeProxy.prototype.BlogEditPost =3D function(blogId, controller, =
div, script, postId, selection, daysBack) {
	return this.BlogSend(controller, 'BlogPostEdit', div, script, blogId, =
'plckPostId=3D' + postId + '&plckSelection=3D' + selection + =
'&plckDaysBack=3D' + daysBack + '&plckRedirectUrl=3D' + =
this.EscapeValue(window.location.href));
}

SiteLifeProxy.prototype.BlogRemovePost =3D function(blogId, controller, =
div, script, postId, selection, daysBack) {
  if (confirm("Are you sure you want to delete this item?") =3D=3D true) =
{
    return this.BlogSend(controller, 'BlogRemovePost', div, script, =
blogId, 'plckPostId=3D' + postId + '&plckSelection=3D' + selection + =
'&plckDaysBack=3D' + daysBack );
  }
  return false;
}

SiteLifeProxy.prototype.BlogViewPost =3D function(blogId, postId, =
selection, daysBack) {
    if(!postId ) { postId =3D gSiteLife.GetParameter('plckPostId'); }
	return this.BlogSend(null, 'BlogViewPost', null, null, blogId, =
'plckPostId=3D' + postId + '&plckSelection=3D' + selection + =
'&plckDaysBack=3D' + daysBack + '&plckCommentSortOrder=3D' + =
this.GetParameter('plckCommentSortOrder'));
}

SiteLifeProxy.prototype.BlogViewMonth =3D function(blogId, monthId) {
	if(!monthId ) { monthId =3D gSiteLife.GetParameter('plckMonthId'); }
	var AdParams =3D 'plckMonthId=3D' + monthId;
	AdParams +=3D this.GetParameter('plckCurrentPage') ? =
'&plckCurrentPage=3D' + this.GetParameter('plckCurrentPage') : "";
	return this.BlogSend(null, 'BlogViewMonth', null, null, blogId,  =
AdParams);
}

SiteLifeProxy.prototype.AddBlogWatchItem=3D function(blogId, controller, =
script, Url, WatchKey) {
   return this.BlogSend(controller, 'AddBlogWatch', 'plckBlogWatchDiv', =
script, blogId, 'plckWatchKey=3D' + WatchKey + '&plckWatchUrl=3D' + =
this.EscapeValue(Url));
}
SiteLifeProxy.prototype.RemoveBlogWatchItem=3D function(blogId, =
controller, script, WatchKey) {
   return this.BlogSend(controller, 'RemoveBlogWatch', =
'plckBlogWatchDiv', script, blogId, 'plckWatchKey=3D' + WatchKey);
}

SiteLifeProxy.prototype.BlogViewTag =3D function(blogId, tag) {
	if(!tag ) { tag =3D gSiteLife.GetParameter('plckTag'); }
	var AdParams =3D 'plckTag=3D' + tag;
	AdParams +=3D this.GetParameter('plckCurrentPage') ? =
'&plckCurrentPage=3D' + this.GetParameter('plckCurrentPage') : "";
	return this.BlogSend(null, 'BlogViewTag', null, null, blogId, AdParams =
);
}

SiteLifeProxy.prototype.BlogRefreshViewEditList=3D function(blogId, =
controller, div, script, selection, daysBack) {
	return this.BlogSend(controller, 'BlogRefreshViewEditList', div, =
script, blogId, 'plckSelection=3D' + selection + '&plckDaysBack=3D' + =
daysBack  );
}

SiteLifeProxy.prototype.BlogSend =3D function(controller, apiName, =
destDiv, scriptName, blogId, addParams){
    if(!controller) controller =3D this.GetParameter('plckController');
    if(!destDiv) destDiv =3D this.GetParameter('plckElementId');
    if(!scriptName) scriptName =3D this.GetParameter('plckScript');
    var url =3D this.__baseUrl + '/' + controller + '/' + apiName + =
'?plckElementId=3D' + destDiv + '&plckBlogId=3D' + blogId + '&' + =
addParams;
    this.__Send(url, scriptName, 'widget:blog');
    return false;
}

SiteLifeProxy.prototype.Recommend =3D function(controller, itemId, =
recommendDiv) {
    var url =3D this.__baseUrl + '/' + controller + =
'/Recommend?plckElementId=3D' + recommendDiv + '&plckItemId=3D' +itemId;
    this.__Send(url);
    return false;
}
SiteLifeProxy.prototype.BlogSelectPendingComments =3D function(formId, =
checked) {  =20
    var form =3D document.getElementById(formId);
    for (i=3D0; i<form.elements.length; i++) {
        var input =3D form.elements[i];       =20
        input.checked =3D checked;
    }
}
=0A=
SiteLifeProxy.prototype.Forums =3D function(numPerPage) {   =20
    var forumId =3D this.GetParameter('plckForumId');       =20
    if (forumId)
    {
        forumId =3D unescape(forumId);
        var i =3D forumId.indexOf('Forum:');
        forumId =3D forumId.substring(i).replace(':', '_');   =20
    }
    else
    {
        var discussionId =3D this.GetParameter('plckDiscussionId');
        if (discussionId)
        {                   =20
            discussionId =3D unescape(discussionId);
            var i =3D discussionId.indexOf('Forum:');
            var j =3D discussionId.indexOf('Discussion:');
            forumId =3D discussionId.substring(i, j).replace(':', '_');
        }
    }

    if (forumId)
    {
        this.WriteDiv("forumDest", "Forum_Main " + forumId);
    }
    else
    {
    this.WriteDiv("forumDest", "Forum_Main");
    }   =20
   =20
    var action =3D this.GetParameter("plckForumPage");
    var categoryCurrentPage =3D =
this.GetParameter('plckCategoryCurrentPage');
    if(action && (typeof this[action] =3D=3D 'function') && action !=3D =
'ForumCategories'){
        this[action]();
    }
    else {    =20
        if( numPerPage =3D=3D null ){
            numPerPage =3D this.GetParameter('plckNumPerPage');
        }
        this.ForumCategories(numPerPage, categoryCurrentPage);
}
}
SiteLifeProxy.prototype.ForumCategories =3D function(numPerPage, =
categoryCurrentPage) {
    var pageNum =3D this.GetParameter('plckCurrentPage'); if(pageNum =
=3D=3D null) pageNum =3D 0;
    var urlPageInfoStr =3D '';
    urlPageInfoStr =3D '&plckNumPerPage=3D' + numPerPage;       =20
    urlPageInfoStr +=3D '&plckCategoryCurrentPage=3D' + =
categoryCurrentPage; =20
    return this.ForumSend("ForumCategories", "forumDest", "ForumMain", =
'plckCurrentPage=3D' + pageNum + urlPageInfoStr);
}
SiteLifeProxy.prototype.Forum =3D function() {
    var forumId =3D this.GetParameter('plckForumId');
    var categoryPageNum =3D =
this.GetParameter('plckCategoryCurrentPage');
    if(categoryPageNum =3D=3D null) { categoryPageNum =3D 0; }
    var discussionPageNum =3D this.GetParameter('plckCurrentPage');
    if (discussionPageNum =3D=3D null) { discussionPageNum =3D 0; }
    var numPerPage =3D this.GetParameter('plckNumPerPage');
    var urlPageInfoStr =3D '';
    if( numPerPage !=3D null ){
        urlPageInfoStr =3D '&plckNumPerPage=3D' + numPerPage;
    }
   return this.ForumSend('Forum', 'forumDest', 'ForumMain', =
'plckForumId=3D' + forumId + '&plckCurrentPage=3D' + discussionPageNum + =
'&plckCategoryCurrentPage=3D' + categoryPageNum + urlPageInfoStr );
}
SiteLifeProxy.prototype.ForumDiscussion =3D function() {
    var dId =3D this.GetParameter("plckDiscussionId");
    var adParam =3D "plckDiscussionId=3D" + dId;
    var showLast =3D this.GetParameter("plckShowLastPage"); if(showLast) =
adParam +=3D "&plckShowLastPage=3Dtrue";
    var pageNum =3D this.GetParameter('plckCurrentPage'); if(pageNum =
=3D=3D null) pageNum =3D 0;
    adParam +=3D "&plckCurrentPage=3D" + pageNum;
    adParam +=3D "&plckCategoryCurrentPage=3D" + =
this.GetParameter('plckCategoryCurrentPage');   =20
    return this.ForumSend("ForumDiscussion", "forumDest", "ForumMain", =
adParam);
}
SiteLifeProxy.prototype.ForumCreateDiscussion =3D function() {
    var adParam =3D "plckRedirectUrl=3D" + =
this.GetParameter("plckRedirectUrl");
    var fId =3D this.GetParameter("plckForumId"); adParam +=3D =
"&plckForumId=3D" + fId;
    var curView =3D this.GetParameter("plckCurrentView"); if(curView) =
adParam +=3D "&plckCurrentView=3D" + curView;
    var curPage =3D this.GetParameter("plckCurrentPage"); if(curPage) =
adParam +=3D "&plckCurrentPage=3D" + curPage;
    var dId =3D this.GetParameter("plckDiscussionId"); if(dId) adParam =
+=3D "&plckDiscussionId=3D" + dId;
    adParam +=3D "&plckCategoryCurrentPage=3D" + =
this.GetParameter('plckCategoryCurrentPage');   =20
    return this.ForumSend("ForumCreateDiscussion", "forumDest", =
"ForumMain", adParam);
}
SiteLifeProxy.prototype.ForumMain =3D function() {
    return this.ForumSend("ForumMain", "forumDest", "ForumMain");
}
SiteLifeProxy.prototype.ForumCreatePost =3D function() {
    var adParam =3D "plckDiscussionId=3D" + =
this.GetParameter("plckDiscussionId") + "&plckRedirectUrl=3D" + =
this.EscapeValue(window.location.href);
    var PostId =3D this.GetParameter("plckPostId"); if(PostId) adParam =
=3D adParam + "&plckPostId=3D" + PostId;
    var IsReply =3D this.GetParameter("plckIsReply"); if(IsReply) =
adParam =3D adParam + "&plckIsReply=3D" + IsReply;
    var curPage =3D this.GetParameter("plckCurrentPage"); if(curPage) =
adParam =3D adParam + "&plckCurrentPage=3D" + curPage;
    adParam +=3D "&plckCategoryCurrentPage=3D" + =
this.GetParameter("plckCategoryCurrentPage");=20
    return this.ForumSend("ForumCreatePost", "forumDest", "ForumMain", =
adParam);
}
SiteLifeProxy.prototype.ForumEditPost =3D function() {
    var adParam =3D "plckDiscussionId=3D" + =
this.GetParameter("plckDiscussionId") + "&plckRedirectUrl=3D" + =
this.EscapeValue(window.location.href);
    var PostId =3D this.GetParameter("plckPostId"); if(PostId) adParam =
=3D adParam + "&plckPostId=3D" + PostId;
    var CurrPage =3D this.GetParameter("plckCurrentPage"); if(!CurrPage) =
CurrPage=3D"0"; adParam =3D adParam + "&plckCurrentPage=3D" + CurrPage;
    adParam +=3D "&plckCategoryCurrentPage=3D" + =
this.GetParameter('plckCategoryCurrentPage');   =20
    return this.ForumSend("ForumEditPost", "forumDest", "ForumMain", =
adParam);
}
SiteLifeProxy.prototype.ForumEditProfile =3D function() {
    return this.ForumSend("ForumEditProfile", "forumDest", "ForumMain", =
"plckRedirectUrl=3D" + this.EscapeValue(window.location.href));
}
SiteLifeProxy.prototype.ToggleExpand =3D function(imageId, tableId) {
  if (!this.collapsedCategories) {
    var cookie =3D document.cookie && =
document.cookie.match(/forumCatState=3D([^;]+)/);=20
    cookie =3D (cookie ? cookie[1].replace(/^\s+|\s+$/g, '') : []);=20
    this.collapsedCategories =3D (cookie.length ? =
unescape(cookie).split('|') : []);
  }
  var tableElem =3D document.getElementById(tableId), imgElem =3D =
document.getElementById(imageId),
      id =3D tableId.split(':')[1], cats =3D this.collapsedCategories, =
expire;
  if (tableElem.style.display =3D=3D 'none') {
    tableElem.style.display =3D 'block';
    imgElem.src =3D this.__baseUrl + '/Content/images/forums/minus.gif';
    for (var i =3D 0, length =3D cats.length; i < length; i++) {
      if ((cats[i] =3D=3D id) || (cats[i] =3D=3D=3D ''))
        cats.splice(i,1);
    }
  }
  else {
    tableElem.style.display =3D 'none';
    cats.push(id);=20
    imgElem.src =3D this.__baseUrl + '/Content/images/forums/plus.gif';
  }
  this.SetCookie('forumCatState', cats.join('|'));
}

SiteLifeProxy.prototype.ForumSearch =3D function(suffix) {
    var searchText =3D =
document.getElementById('plckSearchText'+suffix).value;
    searchText =3D FixSearchString(searchText);
    var searchArea =3D =
document.getElementById('plckSearchArea'+suffix).value;
    this.LoadForumPage("ForumSearchPaginate", "plckSearchText", =
searchText, "plckSearchArea", searchArea, "plckCurrentPage", "0");
    return false;
}
SiteLifeProxy.prototype.ForumSearchKeyPress =3D function(event, suffix) =
{
    if(IsEnter(event)){return this.ForumSearch(suffix);}else{return =
true;}
}
SiteLifeProxy.prototype.ForumSearchPaginate =3D function() {=09
    return this.ForumSend('ForumSearchPaginate', 'forumDest', =
'ForumMain', 'plckSearchArea=3D' + this.GetParameter('plckSearchArea') + =
'&plckSearchText=3D' + this.GetParameter('plckSearchText') + =
'&plckCurrentPage=3D' + this.GetParameter('plckCurrentPage'));
}

SiteLifeProxy.prototype.ForumSpecificForumSearchKeyPress =3D =
function(event, suffix, forumId) {
    if(IsEnter(event)){return this.ForumSpecificForumSearch(suffix, =
forumId);}else{return true;}
}
SiteLifeProxy.prototype.ForumSpecificForumSearch =3D function(suffix, =
forumId) {
    var searchText =3D =
document.getElementById('plckSearchText'+suffix).value;
    searchText =3D FixSearchString(searchText);
    this.LoadForumPage("ForumSearchSpecificForumPaginate", =
"plckSearchText", searchText, "plckForumId", forumId, "plckCurrentPage", =
"0");
    return false;
}
SiteLifeProxy.prototype.ForumSearchSpecificForumPaginate =3D =
function(title) {=09
    return this.ForumSend('ForumSearchSpecificForumPaginate', =
'forumDest', 'ForumMain', 'plckForumId=3D' + =
this.GetParameter('plckForumId') + '&plckSearchText=3D' + =
this.GetParameter('plckSearchText') + '&plckCurrentPage=3D' + =
this.GetParameter('plckCurrentPage'));
}

SiteLifeProxy.prototype.LoadForumPage =3D function(PageName, paramName, =
paramVal) {
    var params =3D new Object();=20
    params['plckForumPage'] =3D PageName;
    for(ii=3D1; ii< this.LoadForumPage.arguments.length; ii+=3D2) { =
params[this.LoadForumPage.arguments[ii]] =3D =
this.LoadForumPage.arguments[ii+1];}
    this.ReloadPage(params);
    return false;
}

SiteLifeProxy.prototype.ForumSend =3D function(ApiName, DestDiv, =
ScriptName, AddParams){
    var url =3D this.__baseUrl + '/Forums/' + ApiName + =
'?plckElementId=3D' + DestDiv;
    if(AddParams) url +=3D '&' + AddParams;
    var plckPostSort =3D this.GetParameter('plckPostSort');
    if (plckPostSort !=3D null){
		url +=3D "&plckPostSort=3D" + plckPostSort;
	}
    this.__Send(url, ScriptName, 'widget:forums', arguments);
    return false;
}

SiteLifeProxy.prototype.ForumDiscussionEdit =3D function(discussionId, =
curView, curPage) {
    return this.ForumSend('ForumDiscussionEdit', 'forumDest', =
'ForumMain', 'plckDiscussionId=3D' + discussionId + =
'&plckCurrentView=3D' + curView + '&plckCurrentPage=3D' + curPage + =
'&plckRedirectUrl=3D' + this.EscapeValue(window.location.href));
}

SiteLifeProxy.prototype.ForumDiscussionToggleIsSticky =3D =
function(discussionId, curView, curPage) {
    return this.ForumSend('ForumDiscussionToggleIsSticky', 'forumDest', =
'ForumMain', 'plckDiscussionId=3D' + discussionId + '&plckCurView=3D' + =
curView + '&plckCurrentPage=3D' + curPage);
}

SiteLifeProxy.prototype.ForumDiscussionToggleIsClosed =3D =
function(discussionId, curView, curPage) {
    return this.ForumSend('ForumDiscussionToggleIsClosed', 'forumDest', =
'ForumMain', 'plckDiscussionId=3D' + discussionId + '&plckCurView=3D' + =
curView + '&plckCurrentPage=3D' + curPage );
}

SiteLifeProxy.prototype.ForumDiscussionDelete =3D function(discussionId, =
curPage) {
  if (confirm("Are you sure you want to delete this discussion?") =3D=3D =
true) {
    return this.ForumSend('ForumDiscussionDelete', 'forumDest', =
'ForumMain', 'plckDiscussionId=3D' + discussionId + =
'&plckCurrentPage=3D' + curPage );
  }
  else {
	return false;
  }
}

SiteLifeProxy.prototype.ForumEdit =3D function(forumId, curPage) {
    return this.ForumSend('ForumEdit', 'forumDest', 'ForumMain', =
'plckForumId=3D' + forumId + '&plckCurrentPage=3D' + curPage  );
}

SiteLifeProxy.prototype.ForumToggleIsClosed =3D function(forumId, =
curPage) {
    return this.ForumSend('ForumToggleIsClosed', 'forumDest', =
'ForumMain', 'plckForumId=3D' + forumId + '&plckCurrentPage=3D' + =
curPage  );
}

SiteLifeProxy.prototype.ForumDelete =3D function(forumId) {
  if (confirm("Are you sure you want to delete this forum?") =3D=3D =
true) {
    return this.ForumSend('ForumDelete', 'forumDest', 'ForumMain', =
'plckForumId=3D' + forumId );
  }
  else {
	return false;
  }
}

SiteLifeProxy.prototype.ForumPostDelete =3D function(postId, curPage) {
  if (confirm("Are you sure you want to delete this post?") =3D=3D true) =
{
    return this.ForumSend('ForumPostDelete', 'forumDest', 'ForumMain', =
'plckPostId=3D' + postId + '&plckCurPage=3D' + curPage);
  }
  else {
	return false;
  }
}

SiteLifeProxy.prototype.ForumBlockUser =3D function(postId, userId, =
value, curPage) {
    return this.ForumSend('ForumBlockUser', 'forumDest', 'ForumMain', =
'plckPostId=3D' + postId + '&plckUserId=3D' + userId + '&plckValue=3D' + =
value + '&plckCurPage=3D' + curPage);
}

SiteLifeProxy.prototype.ForumMyDiscussionsPaginate =3D function(pageNum) =
{
    return this.ForumSend('ForumMyDiscussionsPaginate', =
'ForumMyDiscussionsDiv', 'ForumMain', 'plckMyDiscussionsPage=3D' + =
pageNum);
}

SiteLifeProxy.prototype.ForumImage =3D function() {
    var adParam =3D "plckRedirectUrl=3D" + =
this.GetParameter("plckRedirectUrl");
    var pId =3D this.GetParameter("plckPhotoId"); adParam +=3D =
"&plckPhotoId=3D" + pId;
    return this.ForumSend('ForumImage', 'forumDest', 'ForumMain', =
adParam);
}

SiteLifeProxy.prototype.BaseAdParam =3D function () {
    var adParam =3D "plckRedirectUrl=3D" + =
this.EscapeValue(window.location.href);
    var fId =3D this.GetParameter("plckForumId"); adParam +=3D =
"&plckForumId=3D" + fId;
    var curView =3D this.GetParameter("plckCurrentView"); if(curView) =
adParam +=3D "&plckCurrentView=3D" + curView;
    var curPage =3D this.GetParameter("plckCurrentPage"); if(curPage) =
adParam +=3D "&plckCurrentPage=3D" + curPage;
    return adParam;
}

SiteLifeProxy.prototype.ForumJoinGroup =3D function() {
    var adParam =3D this.BaseAdParam();
    var dId =3D this.GetParameter("plckDiscussionId"); if(dId) adParam =
+=3D "&plckDiscussionId=3D" + dId;
    return this.ForumSend("ForumJoinGroup", "forumDest", "ForumMain", =
adParam);
}

SiteLifeProxy.prototype.ForumLeaveGroup =3D function() {
    var adParam =3D this.BaseAdParam();
    var dId =3D this.GetParameter("plckDiscussionId"); if(dId) adParam =
+=3D "&plckDiscussionId=3D" + dId;
    return this.ForumSend("ForumLeaveGroup", "forumDest", "ForumMain", =
adParam);
}

SiteLifeProxy.prototype.ForumGroupMemberList =3D function() {
    var adParam =3D this.BaseAdParam();
    return this.ForumSend("ForumGroupMemberList", "forumDest", =
"ForumMain", adParam);
}

SiteLifeProxy.prototype.ForumInviteUser =3D function() {
    var adParam =3D this.BaseAdParam();
    return this.ForumSend("ForumInviteUser", "forumDest", "ForumMain", =
adParam);
}

SiteLifeProxy.prototype.ForumGroupConfirm =3D function() {
    var adParam =3D this.BaseAdParam();
    var confirmType =3D this.GetParameter("plckConfirmType"); if =
(confirmType) adParam +=3D "&plckConfirmType=3D" + confirmType;
    return this.ForumSend("ForumGroupConfirm", "forumDest", "ForumMain", =
adParam);
}

SiteLifeProxy.prototype.ForumSendInviteToUser =3D function(username, =
email) {
    var adParam =3D this.BaseAdParam();
    var username =3D this.GetParameter("plckUsername"); if (username) =
adParam +=3D "&plckUsername=3D" + username;
    var email =3D this.GetParameter("plckUserEmail"); if (email) adParam =
+=3D "&plckUserEmail" + email;
    return this.ForumSend("ForumSendInviteToUser", "forumDest", =
"ForumMain", adParam);
}
=0A=

SiteLifeProxy.prototype.Recommend =3D function(keyType, targetKey, =
parentUrl) {
    keyType =3D keyType || "ExternalResource";
    targetKey =3D targetKey || =
gSiteLife.__StripAnchorFromUrl(window.location.href);
    parentUrl =3D parentUrl || window.location.href;
    targetKey =3D targetKey;
    var divId =3D "Recommend" + new Date().getTime();
    this.WriteDiv(divId, "Recommend");
    var url =3D this.__baseUrl +=20
        '/Recommend/Recommend?plckElementId=3D' + divId +=20
        '&plckTargetKey=3D' + gSiteLife.EscapeValue(targetKey) +=20
        '&plckTargetKeyType=3D' + keyType +
        '&plckTargetUrl=3D' + gSiteLife.EscapeValue(parentUrl);
    this.__Send(url);
    return false;  =20
}

SiteLifeProxy.prototype.PostRecommendation =3D function(keyType, =
targetKey, recommendDiv, parentTitle, parentUrl) {
    parentUrl =3D parentUrl || window.location.href;
    var url =3D this.__baseUrl +=20
        '/Recommend/PostRecommendation?plckElementId=3D' + recommendDiv =
+=20
        '&plckTargetKey=3D' + gSiteLife.EscapeValue(targetKey) +=20
        '&plckTargetKeyType=3D' + keyType +
        '&plckTargetUrl=3D' + gSiteLife.EscapeValue(parentUrl);
    if(parentTitle) url +=3D '&plckParentTitle=3D' + =
gSiteLife.EscapeValue(parentTitle);
   =20
    this.__Send(url);
    return false;
}
=0A=

SiteLifeProxy.prototype.RateItem =3D function (itemId, itemType, rating, =
targetDiv, parentTitle, parentUrl) {
    var url =3D this.__baseUrl + '/Rating/Rate?plckElementId=3D' + =
targetDiv +=20
        '&plckTargetKey=3D' + gSiteLife.EscapeValue(itemId) +=20
        '&plckTargetKeyType=3D' + itemType +=20
        '&plckRating=3D' + rating +
        '&plckTargetUrl=3D' + gSiteLife.EscapeValue(parentUrl);
        if(parentTitle) url +=3D '&plckParentTitle=3D' + parentTitle;
    this.__Send(url);
    return false;
}

SiteLifeProxy.prototype.Rating =3D function(itemType, itemId, parentUrl) =
{
    itemType =3D itemType || "ExternalResource";
    itemId =3D itemId || =
gSiteLife.__StripAnchorFromUrl(window.location.href);
    parentUrl =3D parentUrl || window.location.href;
    var divId =3D itemId + "_plckRateDiv_" + new Date().getTime() + =
Math.floor(Math.random()*1000);
    this.WriteDiv(divId, "Rating");
    var url =3D this.__baseUrl + '/Rating/GetRating?plckElementId=3D' + =
divId +
        '&plckTargetKey=3D' + gSiteLife.EscapeValue(itemId) +=20
        '&plckTargetKeyType=3D' + itemType +
        '&plckTargetUrl=3D' + gSiteLife.EscapeValue(parentUrl);
    this.__Send(url);
    return false;  =20
}

SiteLifeProxy.prototype.RatingClickStar =3D function (index, targetKey, =
targetKeyType, targetDiv, parentTitle, parentUrl) {
    gSiteLife.RateItem(targetKey, targetKeyType, index, targetDiv, =
parentTitle, parentUrl);
   =20
}

SiteLifeProxy.prototype.RatingFillStar =3D function(index, targetKey) {
    var stars =3D document.getElementsByName(targetKey+"Stars");
    var label =3D document.getElementById(targetKey + "Rating-label");
    var selectedIndex =3D =
parseInt(document.getElementById(targetKey+"Rating-value").value);
   =20
    if (index < 0 && selectedIndex >=3D 0) index =3D selectedIndex;
    for(i=3D1; i <=3D stars.length; i++) {
        if (index > 0 && i <=3D index) {
            stars[i-1].src =3D this.__baseUrl + =
"/Content/images/icons/fullstar.gif";
        }else {
            stars[i-1].src =3D this.__baseUrl + =
"/Content/images/icons/emptystar.gif";
        }
    }
   switch (index) {
        case 0: label.innerHTML =3D "&nbsp;"; break;
        case 1: label.innerHTML =3D "&nbsp;"; break;
        case 2: label.innerHTML =3D "&nbsp;"; break;
        case 3: label.innerHTML =3D "&nbsp;"; break;
        case 4: label.innerHTML =3D "&nbsp;"; break;
        case 5: label.innerHTML =3D "&nbsp;"; break;
        default: label.innerHTML =3D "&nbsp;";
    }
}
=0A=
SiteLifeProxy.prototype.Review =3D function(parentKeyType, parentKey, =
reviewedTitle, reviewCategory, pageSize, sort, currentPage) {
   =20
    var divId =3D "Reviews_Container";
    this.WriteDiv(divId);
    return this.GetReviews(parentKeyType, parentKey, reviewedTitle, =
reviewCategory, pageSize, sort, currentPage);
}

SiteLifeProxy.prototype.ReviewClickStar =3D function (index, targetKey) =
{
    document.getElementById(targetKey+"Rating-value").value =3D index;
}

SiteLifeProxy.prototype.GetReviews =3D function(parentKeyType, =
parentKey, reviewedTitle, reviewCategory, pageSize, sort, currentPage) {
    parentKeyType =3D parentKeyType || "ExternalResource";
    parentKey =3D gSiteLife.EscapeValue(parentKey) || =
gSiteLife.EscapeValue(gSiteLife.__StripAnchorFromUrl(window.location.href=
));
    reviewedTitle =3D gSiteLife.EscapeValue(reviewedTitle) || =
gSiteLife.EscapeValue(document.title);
    reviewCategory =3D reviewCategory || "Uncategorized";
    pageSize =3D pageSize || 10;
    sort =3D sort || "TimeStampAscending";
    currentPage =3D currentPage || 0;
    var url =3D this.__baseUrl + =
'/Review/Reviews?plckElementId=3DReviews_Container' +
        '&plckTargetKey=3D' + parentKey +=20
        '&plckTargetKeyType=3D' + parentKeyType +
        '&plckReviewedTitle=3D' + reviewedTitle +
        '&plckReviewCategory=3D' + reviewCategory +
        '&plckSort=3D' + sort +=20
        '&plckParentUrl=3D' + =
gSiteLife.EscapeValue(gSiteLife.__StripAnchorFromUrl(window.location.href=
)) +=20
        '&plckParentTitle=3D' + gSiteLife.EscapeValue(document.title) +
        '&plckCurrentPage=3D' + currentPage +
        '&plckPageSize=3D' + pageSize;
    this.__Send(url);
    return false;  =20
}
=0A=
SiteLifeProxy.prototype.SummaryArticlesMostCommented =3D function(count) =
{
 return this.SummaryPanel("SummaryArticlesMostCommented", count);=20
}=20
SiteLifeProxy.prototype.SummaryArticlesMostRecommended =3D =
function(count) {
 return this.SummaryPanel("SummaryArticlesMostRecommended", count);=20
}=20
SiteLifeProxy.prototype.SummaryPhotosRecentPhotosByTag =3D =
function(count, tagFilter, filterBySiteOfOrigin) {
 return this.SummaryPanel("SummaryPhotosRecentPhotosByTag", count, =
tagFilter, filterBySiteOfOrigin);=20
}=20
SiteLifeProxy.prototype.SummaryPhotosRecentUserPhotos =3D =
function(count, tagFilter, filterBySiteOfOrigin) {
 return this.SummaryPanel("SummaryPhotosRecentUserPhotos", count, =
tagFilter, filterBySiteOfOrigin);
}=20
SiteLifeProxy.prototype.SummaryPhotosRecentPhotos =3D function(count, =
tagFilter, filterBySiteOfOrigin) {
 return this.SummaryPanel("SummaryPhotosRecentPhotos", count, tagFilter, =
filterBySiteOfOrigin);=20
}=20
SiteLifeProxy.prototype.SummaryPhotosMostRecommendedPhotos =3D =
function(count, filterBySiteOfOrigin) {
 return this.SummaryPanel("SummaryPhotosMostRecommendedPhotos", count, =
"", filterBySiteOfOrigin);=20
}=20
SiteLifeProxy.prototype.SummaryPhotosMostRecommendedUserPhotos =3D =
function(count, filterBySiteOfOrigin) {
 return this.SummaryPanel("SummaryPhotosMostRecommendedUserPhotos", =
count, "", filterBySiteOfOrigin);=20
}=20
SiteLifeProxy.prototype.SummaryPhotosMostRecommendedGalleries =3D =
function(count) {
 return this.SummaryPanel("SummaryPhotosMostRecommendedGalleries", =
count);=20
}=20
SiteLifeProxy.prototype.SummaryForumsRecentDiscussions =3D =
function(count, filterBySiteOfOrigin, parentIds) {
    var divId=3D "Summary_Container" + this.SID;
    if(this.numSummaryWidgets){ divId +=3D this.numSummaryWidgets++; } =
else { this.numSummaryWidgets =3D 1; }
    this.WriteDiv(divId, divId);
    var methodName =3D "SummaryForumsRecentDiscussions";
    var tagFilter =3D "";
    return this.SummarySend(methodName, divId, divId + "Script", =
"plckCount", count, "plckTagFilter", tagFilter, =
"plckFilterBySiteOfOrigin", filterBySiteOfOrigin, "plckParentIds", =
parentIds);
}=20
SiteLifeProxy.prototype.SummaryBlogsRecent =3D function(count, =
tagFilter) {
    return this.SummaryPanel("SummaryBlogsRecent", count, tagFilter);
}
SiteLifeProxy.prototype.SummaryBlogsRecentPostsByTag =3D function(count, =
tagFilter, filterBySiteOfOrigin) {
 return this.SummaryPanel("SummaryBlogsRecentPostsByTag", count, =
tagFilter, filterBySiteOfOrigin);=20
}=20
SiteLifeProxy.prototype.SummaryBlogsRecentPosts =3D function(count, =
tagFilter, filterBySiteOfOrigin) {
 return this.SummaryPanel("SummaryBlogsRecentPosts", count, tagFilter, =
filterBySiteOfOrigin);=20
}=20
SiteLifeProxy.prototype.SummaryBlogsMostRecommendedPosts =3D =
function(count, tagFilter, filterBySiteOfOrigin) {
    return this.SummaryPanel("SummaryBlogsMostRecommendedPosts", count, =
tagFilter, filterBySiteOfOrigin);
}
SiteLifeProxy.prototype.SummaryPersonaProfileRecent =3D function(count) =
{
    return this.SummaryPanel("SummaryPersonaProfileRecent", count);
}
SiteLifeProxy.prototype.SummaryPanel =3D function(methodName, count, =
tagFilter, filterBySiteOfOrigin) {
    var divId=3D "Summary_Container" + this.SID;
    if(this.numSummaryWidgets){ divId +=3D this.numSummaryWidgets++; } =
else { this.numSummaryWidgets =3D 1; }
    this.WriteDiv(divId, divId);
    return this.SummarySend(methodName, divId, divId + "Script", =
"plckCount", count, "plckTagFilter", tagFilter, =
"plckFilterBySiteOfOrigin", filterBySiteOfOrigin);
}
SiteLifeProxy.prototype.SummarySend =3D function(ApiName, DestDiv, =
ScriptName) {
    var url =3D this.__baseUrl + '/Summary/' + ApiName + =
'?plckElementId=3D' + DestDiv;
    for(ii=3D3; ii< this.SummarySend.arguments.length; ii+=3D2) { =
if(this.SummarySend.arguments[ii+1]) { url +=3D "&" + =
this.SummarySend.arguments[ii] + "=3D" + =
this.SummarySend.arguments[ii+1];} }
    this.__Send(url, ScriptName);
    return false;
}
=0A=



var gSiteLife =3D new =
SiteLifeProxy("http://community.washingtonpost.com/ver1.0");
gSiteLife.apiKey =3D "${APIKey}";
gSiteLife.SID =3D "";

    // legacy behavior
    gSiteLife.AddEventHandler('ExternalResourceLink', function(rk) =
{return rk;});

if(gSiteLife.GetParameter('plckPersonaPage') && =
gSiteLife.GetParameter('plckPersonaPage').indexOf('PersonaBlog') =3D=3D =
0) {
document.write("<link href=3D" + =
"'http://community.washingtonpost.com/ver1.0/blog/BlogRss?plckBlogId=3D" =
+ gSiteLife.GetParameter('newspaperUserId') + "' title=3D'" + =
gSiteLife.GetParameter('newspaperUserId') + " Blog'" + =
"rel=3D'alternate' type=3D'application/rss+xml' />"); }

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.washingtonpost.com/wp-adv/adproducts/advertisingLinks/advertisingLinks_v2.js

/*if(typeof googleAds !=3D 'undefined' && =
!location.href.match('test_ads=3Dquigo'))
{
googleAds.execute('article',commercialNode,'bottom',3,false)
}*/

if(typeof wpAds !=3D 'undefined' && typeof wpAds.textlinks !=3D =
'undefined' && wpAds.textlinks.article_check())
{
wpAds.textlinks.init('article','bottom',commercialNode);
}

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: 7bit
Content-Location: http://media.washingtonpost.com/wp-srv/javascript/resize.js

if ( !document.getElementById && !document.all )
{
  if(!window.saveInnerWidth)
  {
    window.onresize = resize ;
    window.saveInnerWidth = window.innerWidth ;
    window.saveInnerHeight = window.innerHeight ;
  }
}

function resize()
{
  if (saveInnerWidth < window.innerWidth ||
      saveInnerWidth > window.innerWidth ||
      saveInnerHeight > window.innerHeight ||
      saveInnerHeight < window.innerHeight )
  {
    window.history.go(0) ;
  }
}


if (typeof adTemplate != 'undefined' && adTemplate == 65680) {
top.window.focus();
}
------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://js.revsci.net/gateway/gw.js?csid=J05531

var rsi_k;=0A=
var rsi_now =3D new Date();=0A=
var rsi_csid =3D 'J05531';if(typeof(csids)=3D=3D"undefined"){var =
csids=3D[rsi_csid];}else{csids.push(rsi_csid);};function =
rsiClient(Ca){this._rsiaa=3DCa;this._rsiba=3D0;this._rsica=3D1;this._rsid=
a=3D0;this._rsiea=3D0;this._rsifa=3D0;this._rsiga=3D"0902121";this._rsiha=
=3D"pix04.revsci.net";this._rsiia=3D"js";this._rsija=3D"b";this._rsika=3D=
"3";this._rsila=3D3;this._rsima=3Dnew =
Array();this._rsina=3D0;this._rsioa=3Dnull;this._rsipa=3Dnull;this._rsiqa=
=3Dnull;this._rsira=3Dnull;this._rsisa=3Dnull;this._rsita=3Dnull;this.DM_=
cat=3Dfunction(Da){this._rsioa=3DDa;};this.DM_name=3Dfunction(Ea){this._r=
sipa=3DEa;};this.DM_keywords=3Dfunction(st){this._rsiqa=3Dst;};this.DM_ev=
ent=3Dfunction(Fa){this._rsira=3DFa;};this.DM_addToLoc=3Dfunction(n,v){th=
is._rsisa=3D_rsiua(this._rsisa,n,v);};this.DM_addEncToLoc=3Dfunction(n,v)=
{this.DM_addToLoc(_rsiva(n),_rsiva(v));};this.DM_setLoc=3Dfunction(u){thi=
s._rsisa=3Du;};this.rsi_c=3Dfunction(Ca){this._rsiaa=3DCa;};this.rsi_ral=3D=
function(Ga){this._rsiba=3DGa;};this.rsi_riu=3Dfunction(Ha){this._rsica=3D=
Ha;};this.rsi_tiu=3Dfunction(Ia){this._rsida=3DIa;};this.rsi_m=3Dfunction=
(Ja){this._rsiea=3DJa;};this.rsi_dw=3Dfunction(Ka){this._rsifa=3DKa;};thi=
s.rsi_s=3Dfunction(La){this._rsiha=3DLa;};this.rsi_t=3Dfunction(Ma){this.=
_rsiia=3DMa;};this.rsi_en=3Dfunction(Na){this._rsija=3DNa;};this.rsi_cn=3D=
function(Oa){this._rsika=3DOa;};this.rsi_us=3Dfunction(Pa){this._rsila=3D=
Pa;};this.DM_tag=3Dfunction(){var =
Qa;if(this._rsina=3D=3D0||this._rsiea=3D=3D1){if(typeof(DM_prepClient)=3D=
=3D"function"){DM_prepClient(this._rsiaa,this);}var =
Ra=3Dthis._rsiwa();if(this._rsiia=3D=3D"gif"){Qa=3Dnew =
Image(2,3);Qa.src=3DRa;this._rsima[this._rsima.length]=3DQa;}else =
if(this._rsiia=3D=3D"js"){if(this._rsifa=3D=3D1){document.write("<script =
language=3D\"JavaScript\" type=3D\"text/javascript\" =
src=3D\""+Ra+"\"><"+"/script>");}else{var =
Sa=3Ddocument.createElement("script");Sa.language=3D"JavaScript";Sa.type=3D=
"text/javascript";Sa.src=3DRa;if(document.body=3D=3Dnull){document.getEle=
mentsByTagName("head")[0].appendChild(Sa);}else{document.body.insertBefor=
e(Sa,document.body.firstChild);}Qa=3DSa;}}this._rsina=3D1;}this._rsixa();=
return Qa;};this._rsiwa=3Dfunction(){var =
Ta=3D"";Ta=3D"DM_LOC=3D"+_rsiva(this._rsisa);if(this._rsioa){Ta+=3D"&DM_C=
AT=3D"+_rsiva(this._rsioa);}if(this._rsira){Ta+=3D"&DM_EVT=3D"+_rsiva(thi=
s._rsira);}if(this._rsiqa){Ta+=3D"&DM_KYW=3D"+_rsiva(this._rsiqa);}if(thi=
s._rsica=3D=3D1&&this._rsita){Ta+=3D"&DM_REF=3D"+_rsiva(this._rsita);}if(=
this._rsida=3D=3D1){Ta+=3D"&DM_TIT=3D"+_rsiva(document.title);}if(this._r=
sipa){Ta+=3D"&DM_NAM=3D"+_rsiva(this._rsipa);}Ta+=3D"&DM_EOM=3D1";var =
Ua=3D"http"+(location.protocol=3D=3D"https:"?"s":"")+"://";var =
Va=3D"/"+this._rsiaa+"/"+this._rsija+this._rsika+"/0/"+this._rsila+"/"+th=
is._rsiga+"/";var =
Wa=3DMath.floor(Math.random()*1000000000)+"."+this._rsiia;var =
Xa=3DUa+this._rsiha+Va+Wa+"?D=3D"+_rsiva(Ta)+"&C=3D"+_rsiva(csids);var =
Ya=3DXa.length;if(Ya>=3D2000){if(Xa.charAt(1998)=3D=3D'%'){Xa=3DXa.substr=
(0,1998);}else =
if(Xa.charAt(1999)=3D=3D'%'){Xa=3DXa.substr(0,1999);}else{Xa=3DXa.substr(=
0,2000);}if(Xa.charAt(Xa.length-3)=3D=3D'%'&&Xa.charAt(Xa.length-2)=3D=3D=
'2'&&Xa.charAt(Xa.length-1)=3D=3D'5'){Xa=3DXa.substr(0,Xa.length-3);}}ret=
urn =
Xa;};this._rsixa=3Dfunction(){this._rsita=3D_rsiya(document.referrer.toSt=
ring());this._rsisa=3D(this._rsiba=3D=3D1)?this._rsita:_rsiya(window.loca=
tion.href);this._rsioa=3Dnull;this._rsipa=3Dnull;this._rsiqa=3Dnull;this.=
_rsira=3Dnull;};this._rsixa();}var =
_rsiva;if(typeof(encodeURIComponent)=3D=3D"function"){_rsiva=3DencodeURIC=
omponent;}else{var _rsiza=3Dnew =
RegExp("[\x00-\x20]|[\x22-\x26]|[\x2B-\x2C]|\x2F|[\x3A-\x40]|[\x5B-\x5E]|=
\x60|[\x7B-\x7D]|[\x7F-\uFFFF]","g");_rsiva=3Dfunction(v){return =
v.toString().replace(_rsiza,_rsiAa);}}function _rsiua(u,n,v){return =
u+(u.indexOf("?")=3D=3D-1?"?":"&")+n+"=3D"+v;}function _rsiya(u){var =
i=3Du.indexOf('#');return(i>=3D0)?u.substr(0,i):u;}function =
_rsiBa(i){var Za=3Di.toString(16).toUpperCase();return =
Za.length<2?"0"+Za:Za;}function _rsiAa(c){var =
i=3Dc.charCodeAt(0);if(isNaN(i))return "";if(i<128)return =
"%"+_rsiBa(i);if(i<2048)return =
"%"+_rsiBa(0xC0+(i>>6))+"%"+_rsiBa(0x80+(i&0x3F));if(i<65536)return =
"%"+_rsiBa(0xE0+(i>>12))+"%"+_rsiBa(0x80+(i>>6&0x3F))+"%"+_rsiBa(0x80+(i&=
0x3F));return =
"%"+_rsiBa(0xF0+(i>>18))+"%"+_rsiBa(0x80+(i>>12&0x3F))+"%"+_rsiBa(0x80+(i=
>>6&0x3F))+"%"+_rsiBa(0x80+(i&0x3F));}window[rsi_csid]=3Dnew =
rsiClient(rsi_csid);=0A=
function DM_cat(aa){window[rsi_csid].DM_cat(aa);}function =
DM_name(ba){window[rsi_csid].DM_name(ba);}function =
DM_keywords(kw){window[rsi_csid].DM_keywords(kw);}function =
DM_event(ca){window[rsi_csid].DM_event(ca);}function =
DM_addToLoc(n,v){window[rsi_csid].DM_addToLoc(n,v);}function =
DM_addEncToLoc(n,v){window[rsi_csid].DM_addEncToLoc(n,v);}function =
DM_setLoc(u){window[rsi_csid].DM_setLoc(u);}function =
DM_tag(){window[rsi_csid].DM_tag();}=0A=
=0A=
var =
rsi_td=3Drsi_now.getFullYear()+'_'+(rsi_now.getMonth()+1)+'_'+rsi_now.get=
Date();=0A=
var rsi_ct=3D0;=0A=
var rsi_beg=3Ddocument.cookie.indexOf('rsi_ct=3D');=0A=
if(rsi_beg>=3D0){=0A=
rsi_beg=3Ddocument.cookie.indexOf('=3D',rsi_beg)+1;=0A=
if(rsi_beg>0){=0A=
if(rsi_td=3D=3Ddocument.cookie.substring(rsi_beg,rsi_beg+rsi_td.length)){=0A=
rsi_beg+=3D(rsi_td.length+1);=0A=
var rsi_end=3Ddocument.cookie.indexOf(';',rsi_beg);=0A=
if(rsi_end=3D=3D-1)=0A=
rsi_end=3Ddocument.cookie.length;=0A=
var rsi_par=3DparseInt(document.cookie.substring(rsi_beg,rsi_end));=0A=
if(!isNaN(rsi_par))=0A=
rsi_ct=3Drsi_par;=0A=
}}}=0A=
var rsi_tom=3Dnew Date(rsi_now.getTime()+86400000);=0A=
var rsi_dom=3Dlocation.hostname;=0A=
rsi_dom=3Drsi_dom.replace(/.*(\.[\w\-]+\.[a-zA-Z]{3}$)/,'$1');=0A=
rsi_dom=3Drsi_dom.replace(/.*(\.[\w\-]+\.\w+\.[a-zA-Z]{2}$)/,'$1');=0A=
rsi_dom=3Drsi_dom.replace(/.*(\.[\w\-]{4,}\.[a-zA-Z]{2}$)/,'$1');=0A=
document.cookie=3D('rsi_ct=3D'+rsi_td+':'+(rsi_ct+1)+';expires=3D'+rsi_to=
m.toGMTString()+';path=3D/;domain=3D'+rsi_dom);=0A=
rsi_k =3D '&ko=3D' + rsi_td + '__' + Math.floor((rsi_ct+4)/5);=0A=
document.writeln('<script type=3D"text/javascript" src=3D"' + =
location.protocol + =
'//ads.revsci.net/adserver/ako?activate&csid=3DJ05531' + rsi_k + '" =
charset=3D"ISO-8859-1"></s' + 'cript>');=0A=

------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.washingtonpost.com/wp-srv/ad/audsci.js

function audSciWrite()

{
	//site sniffing--if thisNode exists, this is WP
	asNodeName =3D  (typeof thisNode !=3D 'undefined' && thisNode !=3D =
'')?'thisNode':'commercialNode';
	asNodeValue =3D (typeof thisNode !=3D 'undefined' && thisNode !=3D '')? =
thisNode : commercialNode;=09
	//trims ending slash if there is one
	asNodeValue =3D asNodeValue.replace(/\/$/gi,'');
	asNodeValue =3D asNodeValue.toLowerCase();
	if(location.href.match('test_rs_values')) {document.write(asNodeName + =
'=3D' + asNodeValue + '<br/>')};
	DM_addEncToLoc(asNodeName,asNodeValue)
	//WP only reg-cookie logic:
	if( asNodeName =3D=3D 'thisNode' && typeof getCookie !=3D 'undefined' =
&& getCookie('WPATC') )
	{
		var reg_values=3DgetCookie('WPATC').split(':');
		for(i=3D0;reg_values[i];i++)
		{
			var rv_in_use=3Dreg_values[i].split('=3D');
			DM_addEncToLoc(rv_in_use[0],rv_in_use[1]);
			if(location.href.match('test_rs_values')) =
{document.write(rv_in_use[0] + '=3D' + rv_in_use[1] + '<br/>')};
		}
	}
	DM_tag();
}

try
{
audSciWrite();
}
catch(e){ }


------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.washingtonpost.com/wp-srv/javascript/omniture/omniture-utils.js

var omniture_vars =3D new =
Array('wp_photo_gallery','wp_photo_name','wp_search_keywords','wp_search_=
type','wp_sectionfront','wp_content_type','wp_content_id','wp_headline','=
wp_page_name','wp_section','wp_subsection','wp_author','wp_page_num','wp_=
channel','wp_hierarchy','wp_application','wp_source','wp_topic','wp_blog_=
name','wp_story_id','wp_events','wp_printed','wp_search_result_count');

function echoOmniture() {
	if ( location.search.match(/debugOmniture/) ) {
		var output =3D '' ;
		for (var i=3D0; i<omniture_vars.length; i++) {
			var o_var =3D omniture_vars[i] ;
			try {
				output +=3D '<b>' + o_var + '</b> =3D \'' + eval(o_var) + '\' =
;<br/>' ;
			} catch(error) {
				output +=3D '<b>' + o_var + '</b> is not defined<br/>' ;
			}
		}
		document.write(output);
	}
}
------=_NextPart_000_0000_01CA775C.B5AA8BB0
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://media.washingtonpost.com/wp-srv/javascript/placeSiteMetrix.js

function place_site_metrix(file) {
	if ( typeof(s) =3D=3D"undefined" || (typeof(s) !=3D "undefined" && =
typeof(s.server) =3D=3D "undefined")) {=09
		var output =3D '<!--Tracking code --->';
		output +=3D '<s\cript type=3D"text/javascript" =
src=3D"'+file+'"></s\cript>';
		output +=3D '<!--Tracking code --->';
	=09
		if ( typeof(echoOmniture) =3D=3D "undefined") {=09
			output +=3D '<s\cript type=3D"text/javascript" =
src=3D"http://media.washingtonpost.com/wp-srv/javascript/omniture/omnitur=
e-utils.js"></s\cript>';
		}
		output +=3D '<s\cript>try{echoOmniture()}catch(e){};</s\cript>';
	=09
		if (location.protocol !=3D "file:")
			document.write(output);
	}
}
function placeSiteMetrix() {
	=
place_site_metrix("http://media.washingtonpost.com/wp-srv/javascript/omni=
ture/wp_omniture.js");
}
function placeTestSiteMetrix() {
	=
place_site_metrix("http://www.washingtonpost.com/wp-srv/javascript/omnitu=
re/wp_omniture-test.js");
}
------=_NextPart_000_0000_01CA775C.B5AA8BB0--

