From: <Saved by Windows Internet Explorer 8>
Subject: Lore says it'll pour - early, that is
Date: Sun, 24 Jan 2010 22:26:34 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01CA9D44.4918A7D0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2008/11/02/SPN313RHE6.DTL&type=printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML lang=3Den xml:lang=3D"en" =
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Lore says it'll pour =
- early, that is</TITLE><!-- types/article/printable.tmpl -->
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3Dcontent-type><LINK=20
title=3DSFGate rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://imgs.sfgate.com/css/article/printable01.css" =
media=3Dall><LINK=20
title=3DSFGate rel=3Dstylesheet type=3Dtext/css=20
href=3D"http://imgs.sfgate.com/css/article/printer01.css" =
media=3Dprint><!-- types/article/script.tmpl -->
<SCRIPT language=3Djavascript type=3Dtext/javascript=20
src=3D"http://imgs.sfgate.com/js/ads/ysm/cm.js"></SCRIPT>

<META name=3DPUBDATE content=3D"Nov 02, 2008">
<META name=3DPUBTIME content=3D"00:28 AM"><!-- =
types/widgets/pages/common/post_write_mtime/js_inc.tmpl --><!-- =
cssjs/js/article/std.html generated by articlejs on Wed Jul 22 16:28:57 =
2009 -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://imgs.sfgate.com/js1248305337/cssjs/js/article/std.js"></SCR=
IPT>
<!-- end cssjs/js/article/std.html --><!-- end js_inc.tmpl -->
<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
// set sfgate_f for dropin sfg_hideoneorlast functionality=0A=
var sfgate_f =3D '/c/a/2008/11/02/SPN313RHE6.DTL';=0A=
//]]>=0A=
</SCRIPT>
<!-- types/article/comments_common_script.tmpl --><!-- =
types/widgets/pages/common/post_write_mtime/js_inc.tmpl --><!-- =
cssjs/js/pluckjscache/inc.html generated by pluckjscache on Thu 14 Jan =
2010 01:35:52 PM PST -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://imgs.sfgate.com/js1263504952/cssjs/js/pluckjscache/collecte=
d.js"></SCRIPT>
<!-- end cssjs/js/pluckjscache/inc.html --><!-- end js_inc.tmpl -->
<SCRIPT type=3Dtext/javascript>=0A=
<!--=0A=
document.domain=3D"sfgate.com";=0A=
=0A=
// define common vars (with templates values) known by functions=0A=
=0A=
  var sfgate_serverUrl       =3D =
'http://contribute.sfgate.com/ver1.0/Direct/Process?sid=3Dmy.sfgate.com';=0A=
  =0A=
  var sfgate_file            =3D '/c/a/2008/11/01/SPN313RHE6.DTL';=0A=
  var sfgate_file_pag        =3D '/c/a/2008/11/02/SPN313RHE6.DTL';=0A=
  var sfgate_isCustom        =3D '';=0A=
  var sfgate_isActive        =3D '1';=0A=
  var sfgate_addlink         =3D '<a =
href=3D"/cgi-bin/article/comments/view?f=3D/c/a/2008/11/01/SPN313RHE6.DTL=
&gta=3Dcommentform">Add Your Comment</a>';=0A=
  var sfgate_viewlink        =3D '<a =
href=3D"/cgi-bin/article/comments/view?f=3D/c/a/2008/11/01/SPN313RHE6.DTL=
">View Comments &raquo;</a>';=0A=
  var sfgate_full_filepath   =3D =
'http://www.sfgate.com/cgi-bin/article.cgi?f=3D/c/a/2008/11/01/SPN313RHE6=
.DTL';=0A=
  var sfgate_success_page    =3D =
'/cgi-bin/article/comments/view?f=3D/c/a/2008/11/01/SPN313RHE6.DTL';=0A=
  var sfgate_artsec          =3D 'SP';=0A=
  var sfgate_categories      =3D new Array();    =0A=
  //if ( sfgate_artsec !=3D '' ) {=0A=
  //   sfgate_categories.unshift(sfgate_artsec);=0A=
  //}=0A=
  for (var i in sfgate_categories) {sfgate_categories[i] =3D new =
Category(sfgate_categories[i]);}=0A=
  var sfgate_article_thumbs  =3D new =
Array('http://imgs.sfgate.com/c/pictures/2008/10/30_t/sp-outdoors02_ph_04=
23220592_t.gif');=0A=
=0A=
  var sfgate_alt_pagination_args =3D '';=0A=
=0A=
  var sfgate_rowsPerPage     =3D '';=0A=
  var sfgate_page            =3D '';=0A=
=0A=
  var sfgate_useErrors       =3D '';=0A=
=0A=
  var loginorreg =3D '<h4>Add Your Comment</h4><p>You must be signed in =
to add a comment. <a =
href=3D"/cgi-bin/article/comments/login?dest=3D%2Fcgi-bin%2Farticle%2Fcom=
ments%2Fview%3Ff%3D%2Fc%2Fa%2F2008%2F11%2F02%2FSPN313RHE6.DTL%26gta%3Dcom=
mentform">Sign In</a> | <a =
href=3D"/cgi-bin/webreg/user/reg_art?url=3D%2Fcgi-bin%2Farticle%2Fcomment=
s%2Flogin%3Fdest%3D%252Fcgi-bin%252Farticle%252Fcomments%252Fview%253Ff%2=
53D%252Fc%252Fa%252F2008%252F11%252F02%252FSPN313RHE6.DTL%2526gta%253Dcom=
mentform">Register</a></p>';=0A=
  var form_header =3D '<h4>Add Your Comment</h4> <p>In accordance with =
our <a href=3D"/pages/comments/">Comment Policy</a>, we encourage =
comments that are on topic, relevant and to-the-point. We will remove =
comments that include profanity, personal attacks, racial slurs, threats =
of violence, or other inappropriate material that violates our <a =
href=3D"/pages/termsandconditions/">Terms and Conditions</a>, and will =
block users who make repeated violations. We ask all readers to expect =
diversity of opinion and to treat one another with dignity and =
respect.</p>';=0A=
//  var form_header_bad_words =3D ' We want to keep discussions on =
sfgate.com respectful and readable by a general audience. Please edit =
your comment and re-submit it. If you have any questions about our =
policies, please see our <a =
href=3D"/pages/termsandconditions#submitted_materials">Terms and =
Conditions</a> or send <a href=3D"#test">feedback</a> to our staff.';=0A=
//  var form_header_bad_words =3D 'Your submission included words not =
permitted by our language filter (for example: '+bwords+'). Please avoid =
use of inappropriate language on our site in the future. Thanks.';=0A=
=0A=
// -->=0A=
</SCRIPT>
<!-- types/widgets/pages/common/post_write_mtime/js_inc.tmpl --><!-- =
cssjs/js/comments/std.html generated by commentsjs on Thu 10 Dec 2009 =
12:35:37 AM PST -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://imgs.sfgate.com/js1260434137/cssjs/js/comments/std.js"></SC=
RIPT>
<!-- end cssjs/js/comments/std.html --><!-- end js_inc.tmpl --><!-- end =
types/article/comments_common_script.tmpl --><!-- end =
types/article/script.tmpl --><!-- =
types/widgets/pages/common/post_write_mtime/js_inc.tmpl --><!-- =
cssjs/js/yld/yld_global.html generated by yld_global_js on Tue Oct  7 =
11:11:02 2008 -->
<SCRIPT type=3Dtext/javascript=20
src=3D"http://imgs.sfgate.com/js1223403062/yld/js/yld_global.js"></SCRIPT=
>
<!-- end cssjs/js/yld/yld_global.html --><!-- end js_inc.tmpl --><!-- =
types/widgets/pages/ads/yld_setup.tmpl --><!--  generated by printable =
on  -->
<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
=0A=
yld_mgr.content_topic_id_list=3D["20393501"];=0A=
yld_mgr.site_section_name_list=3D["PrinterFriendly"];=0A=
if (sfgate_IsTsp()) { yld_mgr.site_section_name_list=3D["TopStoryPage"]; =
}=0A=
yld_mgr.slots =3D new Object();=0A=
=0A=
 yld_mgr.slots.Middle1 =3D {ad_size_list: ["300x250"], ad_delivery_mode: =
"ipatf", ad_format_list: []};=0A=
=0A=
=0A=
=0A=
//]]>=0A=
</SCRIPT>
<!-- /templates/types/ads/pages/yld/yld_call.tmpl -->
<SCRIPT type=3Dtext/javascript =
src=3D"http://e.yieldmanager.net/script.js"></SCRIPT>
<!-- end /templates/types/ads/pages/yld/yld_call.tmpl --><!-- end =
types/widgets/pages/ads/yld_setup.tmpl -->
<META name=3DPUBDATE content=3D"Nov 02, 2008">
<META name=3DPUBTIME content=3D"00:28 AM">
<META name=3DGENERATOR content=3D"MSHTML 8.00.6001.18812"></HEAD>
<BODY>
<DIV id=3Dcontainer class=3Demail><!-- =
types/omniture/js/omniture_js.tmpl -->
<DIV style=3D"DISPLAY: none">
<SCRIPT type=3Dtext/javascript=20
src=3D"http://imgs.sfgate.com/js/omniture/s_code.js"></SCRIPT>
</DIV>
<DIV style=3D"DISPLAY: none" id=3Domni_pagename>Article:Lore says it'll =
pour -=20
early, that is:/c/a/2008/11/01/SPN313RHE6.DTL</DIV>
<DIV style=3D"DISPLAY: none" id=3Domni_article_title>Article:Lore says =
it'll pour -=20
early, that is:/c/a/2008/11/01/SPN313RHE6.DTL</DIV>
<DIV style=3D"DISPLAY: none" id=3Domni_obj_article></DIV>
<DIV style=3D"DISPLAY: none" id=3Domni_search_term></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
/* You may give each page an identifying name, server, and channel on=0A=
the next lines. */=0A=
s.pageName=3Ddocument.getElementById('omni_pagename').innerHTML;=0A=
s.server=3D"";=0A=
s.channel=3D"Other Article";=0A=
s.prop1=3Ddocument.getElementById('omni_search_term').innerHTML;=0A=
s.prop2=3D"";=0A=
s.prop3=3D"";=0A=
s.prop4=3D"";=0A=
s.prop5=3D"";=0A=
s.prop6=3D"Article";=0A=
s.prop7=3D"Tom Stienstra";=0A=
s.prop8=3D"OUTDOORS NOTEBOOK";=0A=
s.prop9=3D"";=0A=
s.prop10=3D"";=0A=
s.prop11=3D"";=0A=
s.prop12=3Ddocument.getElementById('omni_article_title').innerHTML;=0A=
s.prop13=3D"SPORTS,SPO,CHRONBREAKNEWS";=0A=
s.prop14=3D"";   /* auto */=0A=
s.prop15=3D"";   /* auto */=0A=
s.prop16=3D"";   /* auto */=0A=
s.prop17=3Ds.getQueryParam('iref');=0A=
s.prop18=3D"SP";=0A=
s.prop19=3Ddocument.getElementById('omni_obj_article').innerHTML;=0A=
s.prop20=3D"";=0A=
//  prequote: =0A=
s.events=3D"event13,event10";=0A=
=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 type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
if(navigator.appVersion.indexOf('MSIE')>=3D0)document.write(unescape('%3C=
')+'\!-'+'-')=0A=
//]]>=0A=
</SCRIPT>
<!--/DO NOT REMOVE/--><!-- End SiteCatalyst code version: H.9. --><!-- =
end types/omniture/js/omniture_js.tmpl --><!-- =
/templates/types/ads/pages/yld/square.tmpl -->
<DIV id=3Dadpos3 class=3D"ad middle1">
<DIV class=3D"adinfo clearfix">advertisement <SPAN class=3Dpipe>|</SPAN> =
<A=20
href=3D"http://www.sfgate.com/mediakit/">your ad here</A> </DIV>
<DIV class=3Dsquare><!-- /templates/types/ads/pages/yld/yld_rich.tmpl =
-->
<DIV class=3Dad>
<SCRIPT type=3Dtext/javascript>=0A=
//<![CDATA[=0A=
if (sfgate_yldslotok("Middle1")) { yld_mgr.place_ad_here("Middle1"); }=0A=
//]]>=0A=
</SCRIPT>
</DIV><!-- end /templates/types/ads/pages/yld/yld_rich.tmpl =
--></DIV></DIV><!-- end /templates/types/ads/pages/yld/square.tmpl -->
<DIV id=3Dheader><A href=3D"http://www.sfgate.com/"><IMG =
class=3Dbrandlogo alt=3DSFGate=20
src=3D"http://imgs.sfgate.com/templates/types/article/graphics/sfgate_pri=
ntable.gif"></A>=20

<FORM class=3Dprintbutton><INPUT class=3Dprintbutton onclick=3Dprint(); =
value=3D"Print This Article" type=3Dbutton></FORM><A=20
class=3Dview_article=20
href=3D"http://www.sfgate.com/cgi-bin/article.cgi?f=3D/c/a/2008/11/02/SPN=
313RHE6.DTL">Back=20
to Article</A> </DIV>
<DIV id=3Dprintheader><IMG class=3Dbrandlogo alt=3DSFGate=20
src=3D"http://imgs.sfgate.com/templates/types/article/graphics/sfgate_pri=
ntable.gif"></DIV>
<H1>Lore says it'll pour - early, that is</H1>
<P class=3Dbyline>Tom Stienstra, Chronicle Outdoors Writer</P>
<P class=3Ddate>Sunday, November 2, 2008</P>
<DIV class=3Dsidebar>
<DIV id=3Dobjecthumbs>
<DIV id=3Dcontentobjects><A=20
href=3D"http://www.sfgate.com/cgi-bin/object/article?f=3D/c/a/2008/11/02/=
SPN313RHE6.DTL&amp;o=3D0&amp;type=3Dprintable"=20
target=3D""><IMG border=3D0=20
alt=3D"Sandhill cranes are arriving on schedule at the Woodbridg..." =
vspace=3D1=20
src=3D"http://imgs.sfgate.com/c/pictures/2008/10/30_t/sp-outdoors02_ph_04=
23220592_t.gif"></A>=20
<A=20
href=3D"http://www.sfgate.com/cgi-bin/object/article?f=3D/c/a/2008/11/02/=
SPN313RHE6.DTL&amp;o=3D1&amp;type=3Dprintable"=20
target=3D""><IMG border=3D0=20
alt=3D"Clouds roll in as a fisherman wets a line off Pier 30. Na..." =
vspace=3D1=20
src=3D"http://imgs.sfgate.com/c/pictures/2008/10/30_t/sp-outdoors02_ph_04=
99238658_t.gif"></A>=20
</DIV>
<DIV class=3Dclear></DIV></DIV></DIV><SPAN id=3Darticlebody>
<P><STRONG>(11-01) 18:46 PDT </STRONG>-- There's a saying in nature, =
"Birds=20
never lie."</P>
<P>There's another that goes: Onion skins very thin, mild winter coming =
in;=20
Onion skins thick and tough, coming winter cold and rough." </P>
<P>And those fuzzy caterpillars: I've seen a half dozen with thick, full =
coats=20
in the past two weeks on mountain trails in Northern California.</P>
<P>There's more: A phenomenon in the ocean has formed called the =
Madden-Julian=20
Oscillation. There's also a linked interface between ocean temperatures =
and=20
coastal land temperatures in Humboldt County that can predict weather. =
And to=20
time the arrival of storms, pay close attention to moon cycles.</P>
<P>I've received a lot of requests for my annual long-range weather=20
forecast/guess for winter, and this is it:</P>
<P>Nature's signs mean a wet late fall and early winter, with =
significant storms=20
arriving around the new moon of late November (Thanksgiving Day), and =
just prior=20
to the full moon in early December (Dec. 8-10 looks promising). After a =
dry=20
period in the early New Year, January and February will bring about =
average=20
precipitation. I don't expect a terribly wet spring in March and April. =
The=20
final result for winter will be about average rainfall, wetter in the =
beginning,=20
a bit drier at the end,</P>
<P>This is why:</P>
<P>-- Birds never lie: The annual migration of sandhill cranes to the =
Woodbridge=20
Ecological Reserve near Lodi and snow geese to Sacramento Wildlife =
Refuge near=20
Willows is right on schedule. The timing of these migrations is often a =
reliable=20
weather predictor.</P>
<P>-- Onion skins: The thickness of skins from onions grown in the San =
Joaquin=20
Valley looks pretty average.</P>
<P>-- Caterpillars: Those furry coats indicate early, heavy =
precipitation is on=20
the way.</P>
<P>-- Ocean/land temperatures: A reliable theory I've developed is that =
when=20
ocean temps and coast land temps are the same, the storms wheel right =
in. That's=20
the case right now in Humboldt County, so look for wet weather. When the =
ocean=20
is colder and the land is warmer, it often acts like a blockade and =
pushes the=20
storms into Oregon, which creates periods of drought, like this past =
spring.</P>
<P>In the mountains, the effect of global climate change probably will =
have snow=20
lines higher than normal for many storms - about 4,000 feet elevation in =
the=20
north state and about 4,500 feet in the Sierra Nevada.</P>
<P>There is one piece of real science that supports this forecast: =
Weather=20
experts have identified the formation of the Madden-Julian Oscillation =
offshore=20
in the Pacific, which typically lasts about 50 days. This forms very wet =
storms=20
propelled to the Pacific Coast. So wherever the jet stream delivers the =
storm=20
highway this late fall and early winter, those storms could be very =
wet.</P>
<P>Last year's forecast, published on Oct. 28, hit the bulls-eye: "The =
Bay Area=20
and Northern California will get a lot of rain through December and =
early=20
January, then lighten considerably, with an early, warm spring, =
especially in=20
the San Joaquin Valley. Southern California will face continuing =
drought."</P>
<H3 class=3Dsubhead>Mountain lions galore</H3>
<P>-- At Point Reyes: While hiking on the Coast Trail near Point Reyes =
Hostel=20
the evening of Oct. 24, <STRONG>Eric Park </STRONG>spotted two mountain =
lions, a=20
mother and her "teenager" cub. "Once-in-a-lifetime experience," he =
said.</P>
<P>-- Streak of light: <STRONG>Rebecca Geries </STRONG>of Siskiyou =
County was=20
driving on a rural two-lane road near College of the Siskiyous when a =
mountain=20
lion darted across the road right in front of her. Nearby at a small =
ranch, two=20
goats were killed.</P>
<P>-- Black panther? Fish and Game says they don't exist, but another =
black=20
mountain lion-sized cat was seen in the East Bay foothills. <STRONG>Larz =

Sherer</STRONG>, an experienced Bay Area hiker, saw the big cat off =
Redwood Road=20
while hiking on the protected watershed of the East Bay Municipal =
Utility=20
District. "It reminded me of a jaguar in the jungle," Sherer said.</P>
<P>-- And yet another: <STRONG>Michaela Graham </STRONG>also reported =
seeing "a=20
big black cat," about 4 feet long, on the ridge at Miller-Knox Regional=20
Shoreline in Richmond. "I've seen it twice in a couple weeks," she said. =
"Jet=20
black."</P>
<P>-- At Mount Tam: Several reports, including photos, came in during =
the past=20
week of a mountain lion sighting at Mount Tamalpais in Marin, including =
a=20
distant silhouette of a lion's head rising up above the ridge against =
the=20
sky.</P>
<H3 class=3Dsubhead>Notes near, far</H3>
<P><STRONG>Search for otters, Part 1: </STRONG>On a trip to the =
spectacular=20
Point Lobos State Reserve near Carmel, field scout <STRONG>Jim Dwyer=20
</STRONG>reported sighting just one otter in six hours. "But it was a =
great=20
show, cracking open and eating an abalone for about 20 minutes," Dwyer=20
reported.</P>
<P><STRONG>Search for otters, Part 2: </STRONG>Elkhorn Slough at Moss =
Landing is=20
the best bet in the state to see the colony of sea otters, best done by =
kayak=20
(inexpensive rentals available). That's how <STRONG>Penny Palmer =
</STRONG>found=20
them last week. "I took a few photographs of the sea otters and their =
babes, an=20
incredible sight to watch."</P>
<P><STRONG>Disappearing lake: </STRONG>The best walk at Jack London =
State=20
Historic Park in Sonoma is the Lake Trail, except the "lake" (actually a =
pond)=20
has disappeared, noted <STRONG>Lucy Johns</STRONG>. Apparently, the =
earth dam=20
was leaking, according to an interpretive specialist, and more water =
trickled=20
out than trickled in.</P>
<P><STRONG>$50 reward: </STRONG>A $50 reward has been posted at Los =
Vaqueros=20
Reservoir near Livermore for any angler who breaks the trout record of =
10.56=20
pounds.</P></SPAN>
<P=20
id=3Durl>http://sfgate.com/cgi-bin/article.cgi?f=3D/c/a/2008/11/02/SPN313=
RHE6.DTL</P>
<P id=3Dpageno>This article appeared on page <STRONG>C - 11</STRONG> of =
the=20
San&nbsp;Francisco&nbsp;Chronicle</P>
<DIV id=3Dfooter>
<DIV id=3Dfootermenu>
<DIV id=3Dchroniclemenu><A=20
href=3D"http://www.sfgate.com/chronicle/info/copyright/">=A9 2008 Hearst =

Communications Inc.</A> | <A =
href=3D"http://www.sfgate.com/pages/privacy/">Privacy=20
Policy</A> | <A href=3D"http://www.sfgate.com/feedback/">Feedback</A> | =
<A=20
href=3D"http://www.sfgate.com/rss/">RSS Feeds</A> | <A=20
href=3D"http://www.sfgate.com/chronicle/faq.shtml">FAQ</A> | <A=20
href=3D"http://www.sfgate.com/index/">Site Index</A> | <A=20
href=3D"http://www.sfgate.com/staff/">Contact</A> </DIV>
<DIV class=3Dclear></DIV></DIV><!-- /#footermenu -->
<DIV class=3Dclear></DIV></DIV></DIV><!--/container --><!-- =
types/quantcast/quantcast.tmpl -->
<SCRIPT type=3Dtext/javascript =
src=3D"http://edge.quantserve.com/quant.js"></SCRIPT>

<SCRIPT type=3Dtext/javascript>_qoptions =3D { labels:"SFGate" }; =
_qacct=3D"p-18RwvsI7rqyEk";quantserve();</SCRIPT>
<NOSCRIPT><A href=3D"http://www.quantcast.com/p-18RwvsI7rqyEk" =
target=3D_blank><IMG=20
style=3D"DISPLAY: none" border=3D0 alt=3DQuantcast=20
src=3D"http://pixel.quantserve.com/pixel/p-18RwvsI7rqyEk.gif?labels=3DSFG=
ate"=20
width=3D1 height=3D1></A>=20
</NOSCRIPT><!-- end types/quantcast/quantcast.tmpl --></BODY></HTML>

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://imgs.sfgate.com/templates/types/article/graphics/sfgate_printable.gif

R0lGODlhZAAOAMQAADEtLqyrq/Hx8UxJSmhlZnZzdLq5uT87PNbV1ePj44SBgp6dncjHx5GPj1pX
WCMfIP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA
ABAALAAAAABkAA4AAAX/ICQahfOcz+AEUOC8cLyKYzGg6Uzv/M4oB0dvSCwWBTccTthQOhsiRNL5
EBp3AQDKeu16IQTqFtIUn6AIrZnbLZ/Y33hPeVA0GoQgWSlbCQ5OAwQlAFwMd4gLCCICDAU4AwwM
NAgLiAECcldKBJk0CXs4QwFKAJM+Im58jWYQCCalLJpEVAMFmKlKkrsMAmE4p0OqfAxmAmpUi7M9
v1QABqFmDLAnAJ+8mQ0OC5JZOC6AKIUOCjgFENTnyzwC1FQJw07TkDSqp4cw4SeTqlbu3I+qrRvy
YwqOO2b2NTvhyR6EgGL4LRHhjsoOBAQcQDHwokEmjQ4IGMgIDQKoHQaUwCAU1YPUwVwoGLg8cUAb
sGhVKCZ88AkAAZkpGxgAcO7BM0ANHolIYcdAAIhnhg05xsdmzHIoFi2UKC5A0pc0BHgiY00EgQEi
SEF4AKUB2gQ81+6Ep4RIyp2OcBww+GDSTGBKVDi4EazBARohR/DsS8ZK3J0spBJhgIwKg7vSIFCt
+1cXGQYIHixwlaWXirX8HItQUPHBgQInJRMRsKC1LVAB9CnAui+KPp8iGBCoXAUU2xZaCEBQoMVB
JsbalkIIAQA7

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://imgs.sfgate.com/c/pictures/2008/10/30_t/sp-outdoors02_ph_0423220592_t.gif

R0lGODlhQABAAPfPAAAAAAsCAAEDCg4KDhEFABMKARoOABQPCx4TBBsTDBoYDwAIFQ0MFAoLGgwQ
GhsWFB4aFBIUHhgYHCMWBCIXDSUcDSMbEikfFCQeHCwjFiwlHQAPJgsUIhYYJRwcJRMaLBsbLSAf
Jx4hLiQhIiklIyIkLCIrLisqLTIrIzIxLiwtNTUzMjg3NjIzOEA4KkY6MEdDP1dLNVlKNBQrTCw7
RiEySSc8TzY5QTAzTTc+SyMvUyMwUS8/XSxBVzVBUz1HXj1IXi9BYS9CazNEZzFDaD5Ubz5NczlP
ej1TcjtVeExFQEJETEhESk5MU2RWTn9UQWRdVEJMakJSaUVSe2xqZGlveXp7f6eJXjlNgThejENW
gUtagEBZjE5filVfhVxsj01olU5knFFilVdqk1prkVNlmVRunVpvnUljolFqpFl4pVNwrFp7rVV2
tlx0s1V8uWR+r2l+qmR8t2J9u2t/uFqGv3+NqXmMuGaFwmqCwmCHyW2PzXGHx3KJwn2NwXSOyG2Q
ynyXxn2Tz26N0XaT1nyU0nWV3XyW222a4Hac5H2e5Xyc7X6h53mh6H+m/4CBhbyrmouWu4+cvbao
oca2qM7DvdjKtPrhuYCWzoGY1o+hw5qlxIKg3pGl152v3qewzoaf4oaj44Sj6ouo6pOt7oWm84in
9Yaq9oys9oGm/oaq+out+pCu9pCv+Y6x/ZOy85Kz/pi3/5W6/5q9/6G26JfC/5zC/53I/6HG/6vD
/aTM/67I/6fR/6vT/63c/7DY/8zGzN3MwODSweTYwujdy/Ti1v//1sHS/+vk5fjx4v/55f336vb0
9f//9vT4/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABAAEAA
AAj+AE8JPKXK1EBVqgSaQmgw4SlUqAQiPLVqoUSHDxViHHiqVEdHHj0yGsjIEceTAldlTEkwoUNT
EQkKRLWq4EaOBlF2PCXq5MiLD23qPHjSZcVTOVfelLkzJMdRAx3FlOmwotGgCSuqrGkVlSmuqlAl
FKtSLFOBHnU6cgQVVSOCXqmmVBm2akuEExfWVFVzoamGCONOLbX0lEmBoxyN5Pu1asGLYiOumvyV
4lakkyebpch5IkHCQzlK9bpKMsGFZDlTbExTM1+uXM1mrlr27NODjRIDVYlVYmOCfSvzTak3cF7V
dCVO1VkrN/DGKg1urTu9L+XXe5EyDs6X4UqOvEX+9xRr8KvfrXpJQ5/c3Xzm0gzfF4yYNfzJ5Sm7
1xTbnTx7hFytV5B12FXEH12lccYbft9hZtlwYYGlX2WzVcjehQCC1RByA03101ZWJchQcRLCJh9Y
Jlb4mksZuTITSo1YpF+B/b333lcoWsgQWeZR5OJm9w3kCkyrwTajha20soqSGWaGo37W9eXSZvgt
h+BkReKo1WStwDJIRbEkeaKNKWIHoUouhtZSbH8ZqSUssRghBxuGwOKKjQVeuJeT8F3G3kNJEfcf
bFpmFmYRRHAywyyu3Enmdo82hh1TXrHYkF5kPrlnLIp8oUMZhKyxCCxkZprjbEUCGNZABkE0G43+
BcaCSxo4TFGGGEggQqqevJq4InWEjhURaQA+CWujtugyAADMMouLLKWGGK2KrVUWU0xaNUnZe67M
oosXAQSQQAAAgIHLrtPiuWdp+2EaF04rZtvaZK7IcksUABhgwQUGAHDLLekGrBlNND320LAzbZtZ
wXy5AsstfORrwQMFMKvLLAKXamaAF2a0aqF4oehKLbp4UAAFGFhAbg26QJuxxqVS9JhDZGVG0FqO
pJKKKrlsIkIAF2igwQHM4tHytEoGDOXAEBFcaWZ3PMHMMao4osouwEDiBAAkrOA1CQBw4MvFdiKd
sZlOh2XKKDSxgokdwlhCzDDJNKNMMJN40AD+CCWEEAIEBnwRxx+wyALL4Y0uSWbSL1OX0rwI6ZzK
IodgogEKHnSgggontJACFDHEAIAJs8CCSuKKM26j6tNCFBhSkDdciysdBEBAAQqQYMEATZDRRx5u
hCGJHT7QwIaj76muZKHcHp4kKqyU1XRmSXoriO0IIEAuAAsYossttoRfyyyl29ko61xyqSTrrsQC
iBqxxLLwi1zGMgsuddg+gQEEMDuHLriIBeIaRUDEKS51B0xX/IrQg1i84XAGIs2S1pCEWYACAAHg
H7mEAIuLhYl1SVtf+l62im7ZYghJQIMi9EAqr0DkK62IBReyIIRmAWAPvcDFLAxHwuQlDXX+dyJg
t3CxCB1MwQhBaARlRgETiCQpfqsYhBEAIAsPomtxIlRfCLnVPFnUohezKEG4mGWLWDTthTR5oqxw
oQpbMAp9mkneZNClOkcFsV4kGwUQwkWA/o3hXMPyiilYMcjoLSlMsFCS0+ZYGsZtMTMOcwVedLaW
NtLiDifA4BgB0ADymQ4mo2CFVwjJiugxzlVxVB4kbXQ+V/jhE6/Q2dWQQYkXAGACFajAAcglgH/J
72CjZEUrplcaVC5sXnJkHKnuFIgqXMEYl1iGM5rxjGJUggkMGAEGHgABAJTAF724henOSMqvtGaR
CHSk4nalpETSazKiOEQm/NAJT0SCBVT+iIAIbtCCEpwABkrIwRnK5wo0/iV6aRzmOeeVtNYoyVFX
XIUBJTmyW+wAgwdIwQpYsIIlNKF/KnhFKA7XNFMo1IlNPGP6WmNK6qWPVD9sFCxqwQssBECXm9QC
LnSxiFKEAg4+sIEoiinKQaJimNQ7ahwzA1MuwRRdZSPV4WzBiy7cFAIJqBgACPE9N5KPh0tKKUqh
R0wnriJ6okzg6Vw6Qlh4awoFyIAGKAaADySrfBJ12OHG+ZeSLvKMpjurQleqvBB2SRa4kAMAKqCB
rAKABzk0HOucBhFROnF6mJ1XGhWHiqcmzZ0ShYUtbgGAuGagf2XQhS14GEJRWhaNZM3+bDE1g1R2
lVCVu4KT/XoRBQJkoAABOAMAy8jOYxbTrzApppLQOltFdlaRTnXp4RgRC1vMoVkCEIVqS8fUJR21
ba8dxUnPSrBWmJRdz1PqFh3lSFi0YQN1SAMIAtBLssn0oQ4l6hkri0rLMpddhmznS0PL1PjJIhFY
EEMdAtiotUr0wcN07RlhQsjnNRKt0FvS+lyVSOYadq+xkMUO3Wq4IG52YOyCrYoznFIUI9SQmoGq
mD4L4rI1OIR3em0pX9u20pTyuGn8cTtpUlBXCFiZ63yw4lhBQHpBxE6tCSVE2EbOY+7Yh6dzBZOb
OsdW3KmphpQqAZ98XPKi4hUS5m/+I7+SZi615o5hdh4jkyxVib7iIa8gWJ7JGdv9Pm/HTRPmnNea
uPZ218gHfKiWO+vdPKc5vE3bc1oLCj1KaznHiyYgkxf9WSeOuVFMrrSl78zjKb+2yIGGCKjPnOXY
LlrVX34wBEVp6dM1rcGnQHMp+7xfSfuYrA1eK61Bfen7mg5doab0jgvK412T4s77dS2lX2HmaVf2
0iVcdVonEz2Yns7RDRZlrln9alSM4hVsA7StY7tsUL+iyJlmNq072zTTOXrX8GY1RKA97EDr+MyA
nvermVzKYmf5x6+ABbUJRsA8S3rXd94ztM98bn9Xet1pZvai8W3pTZdwjsk+hSstHM5jUjQt1yhv
C1l37Fr/7tvWBIdey6On5VU4vLLj3vMZR37GV0T8FKNwRUAAADs=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://imgs.sfgate.com/c/pictures/2008/10/30_t/sp-outdoors02_ph_0499238658_t.gif

R0lGODlhQABAAPcAAAEBAAkFAgsKBg0NCQcIBhELBBEPChgFAw8QDBMRDRoUDRoRAxUUERoWER0Z
FRscGxUXGA8QEiEVDCIbFSIeGh4gHyokHiYiGzEiERwfIB0gICMjIionIywpIywsKSMnKjMtJy8w
LTUyLDs1LTs1LC4zMi0zODM0Mjo3MjU4NTw6NTw9Ojc6OSguNEE6L0I8NEI+OD1BPkNCPExFO0lD
OVJKOzs+QDxDRjpKXTVLaD1Ta0NFQ0lJRUNHSEZLS0pNTElHRFJOS1dOQEtQTltURVNTTl1XSkpO
UU1SUk5WXlJVVFtaVFNXWFVZWlpcXVdYVVBPUGBXRmFZR2RdTGRbTWRfV15gXmlgT2tkU2JiXm1n
V3JsW3VwX11fYVZcYk5XYF5iY15ma2JkZWZoZWppZmVnaWZpa2tsbW5wb3Fxbnh1bmVrcG1vcW5x
c210eXJzdHZ4dnl5dnR2eXZ5fHt8fHl3dnBvc4J9eX6Af4GCfoqHfl5vgGd2hHZ8gXx+gXN/i4B/
gH2BhH6EiX+IinyHkYKDhIeIhouKhIOGiYWKjIuLjIiHjJGNhY+QjZSSi5mVjZqWi4aNkoyOkY2R
lI+UmY+YmpOTlJualJaXmZWZnJqam5eYlqKdlaGem5+gm6Whl6SinKqkm6+rn46cpJacopudop2i
pp6kqpWgpqOjo6mmoa2ppKSlqaWpraqsrLGtprOuqraxq7q0rb24rbWwpaatsqmus6qwtqy0uqy5
vbS1tL25s7G1urW5vbu8vLi3tMC7ssG+u77BvMTBvZ2zwam6w7S9w7q9wb3BxLvHzLLG07bR5rXo
/67l/8PEw8nFw8vLxsLGysbJy8vMysbJxs/RztLSzczO0cTN0cvS1cvW3NHU1NTW2tXa3Nrc3NnZ
09HOyd/h3OPj3c7d5NPf493h49Tk7d7l6tXk6Mbo/NXs/Nfp89jx/OPk4+3s5ePr7uvs6u7w6/Pz
7Pn16+Tt8ubu9Ovx9uPz/O30+uf6/+z8//T28v388vT8/v3+/vL3+CH5BAAAAAAALAAAAABAAEAA
AAj+ADFZsoQJk6aDCEsVBIRpUaFCiBRJ2qTIkiZMmwZqXIQIkEc/febMkWPnjZyTKOWIXOnHj6CX
ghBhLGgQ4UWEBRs5BFRokaJFPi0paiSpaCNFHT/WOWmnKZs2ctyYDNkHZFVBLf9EmlSq1MGaBi0a
HCupEaJCPCFCNNQTqMNFHgH5qeOGpB2ScqDKYcNGTss+Vf8sEgRIK9dUXb/e/NqpEyBFSAvdATRn
Ms+4mJWS7CvnzRuobUKzcTOHDp1AEBEBlTQqkitWsBHjFCgQkFC2HunMqUPnY28/dFoGr7O0ack3
xvl+NinHtMuYkUhlwsTrNSvZmjRqBwRUsung33n+mx65tE4fOec78z3Jt83TNqRXVpVZihSpaMda
wVaoybZGj5Y8FJdpdZRWYGlzyVHcXXexxxcbdpzBxhpsmDQHYH0Et4gkXZHCzTXHHMMLK5gAaNuJ
mLVUhx8r7VZHgwoyZdxdbEh4xhlllHFjgy32oZokk4xSTjfXRIMML6VIUhuKAxJInGdQvnGGcZs1
5RlJOOYohhg5SojSSqlFIsk110jzzJkjstKJJZkBMt5uJCHX1I1S2lHjjXSehJyWW5bBJV9NnTRH
IIG0JMiZiD7jTDDBsJJdib4RGCOUxuF5451p2CEScmds6WmOZUBYkkqAzQESo8OceQyajhIECCX+
TcLZh5sHyjnnGWZICGWFWXL5qY6XvodSMMAUy6gvw+iyJlxxBdLbm3Q8BFwhccgBx4yXzlijln56
ymUZZoBrxoNrnBkML7voossvrmTn6qvOlnaHbnP4ZAhPcYj04qZNpcFGGpZ624W3v25phhmMEhtL
K6mokkonB5XCECBszSvcHUNJoghbeeQRXh2epSHyjTmSIXAXKA888KdmxOKyy7A43EkpjTl6kSKH
LGKIQ4XkUQhkhxiCsyGGHEJryBH2umXKXTjBdMpihGHGGrDAAnMsMacCiiapdL31JRo50oghqPns
sc8900FcHZneSIbJS6PshBNeONGEF03M7QX+GGCIMdoqsKyiCuBVCw7K4aA0nMolYB/Vc8emwRHH
HR6/+CKeoMZdRRV1293E50x8zrcYubISiiqorwJ4LKqvovXhnYDtiCF65IFHHnHEAccccdABB9uZ
2uEvqHCLgbIXVTzBxPLMf95EF32bITjqg6vusuqhgHJJ7I84ckgheIRPR+5v6A7HGwDveDmOZHS7
pRdNMy9/E2DA3zcwVtMCC/6wzLJLLKIIBeMuIbZD1A4PuasDHOCgBs/0a4EmMc9mzkAGLyjBCU94
gtOcoAQlIOGDzaMfGIoFjFdUbX+7mAXWViHARzTiEB1DYAIbCLIImqYQavMDIF6UPPhVoWn+KbMg
FD5IRCQs727FokWxTGjCwIUiFJyAhPdqlzsGjuwMInvDiioyEI+coQpOwJHxPEc3KChheUf4wRCK
qIQkNEGJJITFE+d4ie4xQg+GsJ3u1AAHNKTvDG/oDSA0ARtWAGJLEWpf0zqoBCg48ghQOEIaf0BJ
NRJRFMAQhSheAcVPhOITn7gEI2BoOwQ2UGTpS8MbPKIkV/ACF354Q0fmIEa7eVCSalwjEijpgx74
4Ae//MEROAFFThiTE584RBGy4AjveSx3akClKpHTHECUghW24IUkEJGKnQDiRmKYm92Y0MEiIkGS
6ExnFCEBCEZA4hF1AIA8FcCIPDAwmmn+QENJfsMTrhSjGLiYAy7yIwm5jERKfFkDrsJVBi+EAWVh
iKjUJpoESHDiDpDQwyEeEQJ5ynNeIkMDHMLnh54ACROkuIUxjsEdXmSzFZaYix3gYxLPhAYlbnAD
fPoQCKoQyg1rCAUkMqoHPXACBgAIwAECwAU6qHKkj/PIj1I6ii7cwhzJqIUpMhEJP7DBTwudGnxy
OgcwRKIQLXEDGw6W0zUEFYpDDcUqggCAA8hTDE4Vj24EZSpEUIINXSBFLYxhi1qQAhWYkIQf/MQ3
M+QUMIPIxCmMwQteYGMbpeBDToH6UIwa1aKhwIAECgAAAzDiDsJTwylrZIeq9MEGfaD+BClOUYxo
GKMVpzBFdDSRCEHMwRTI8IU0pEENccBjH/CQhz+WS49k5CIXpyBEH+5AXT1YlAgHkMAEHHCIQ7yh
eJ4CZB/C8AE/nKIW6N0GcrlxDFuUAhnHMMUteqHc5fqDH/idxz722w/7+qMf+jBHMYJAhjhgMQ9L
VUACAOCAOpwhC3NDWRbYEAlUiAEKWYACLmxhi1M4A7/y8EY4xCEOXaQCvuHIRjvg4Y52eKMc7WgH
PbBxDH3048b5wGoxPDoAEcggAAKYgAIWAIAgpCFHEOpDSm0hh2hIqQmSEKw02rFfebjjyuK4Rje2
IQ1WRCMZMqaHPfBBj25kQxpGMkb+MdBbi1vgwqPyNEABArAAIAPgAk/pA0xIcYQPtCIZZXBCGY5R
DnrQw7746Mc/+oGPf9jjHcJwBTK20d//9uMe67jHOchhjnFgAxm96IUvfIGGJsQgBB8IQADkKQA5
B8AAEGDBESigggwcQRBc4QErFEGPcuDDHvW4xz3yYWMAC3scyUCHOZadDmaoQ9PvMPQ6znEOdbBj
HexQhzkwoYg8GCISqiYAAAiwanmuutwE+AEYEGEKO6zCFf3IBzr+S2x96CMf+M4HO9jRbGY049/M
SIfAB56PdYzDGt/whjW44Q60JSISHhWAAAJAAHHD2QMWH3cD6sAIflDZv/7Yx27+5uFibqDjHO0Q
Rze48aFsYEMb3ehGO+Kxcmw4wxfOqIYjMLGKafgCAAtQgAAyDgAUAAAO21iuPKwhijTAmQFA4IQ7
9rHccHhsG9O4uTOgYQ1rQAMa04CGM4bhjGd8nbjUmAaohRuJTbjCF2QIAAYKIICk1l2enfBHPNwh
D3nAYx7++AEaKIEKM5jAoyuwRDY2UYl16GMdqVgHOhLujZV7HRrUgAY4wi6MVUDjTF/vmiuEYQEA
FGDBBCjABDwKC3FAYxihzkUxiNEDPqBiGbhXxygA8ADyQuAHxfDHOzzhX3vAwxtZ74UrTsEKV+hi
1K7gaiQiEQpR/OITrBZAAgz+kIC7c0Ie3+C6NZBRDGXkIgtw8IV/TRGAB0QAAkSHszxVEIhUSKMX
tRgFIU6RCUL8gQ98sAcC+AiX8ApLYHoKoAASUHEWdwfxIA7fkHDi4A7xgAtFUASngAwl4ADytAAP
ME8DIH8iKE8EcAJHkARekAQ4gAM58AU58IKXoAmuQAIAoH0LUHGqJk9HcEE+kAQ3UAItsAHuBwEM
IH+tJk8JsGAkOIJw9ntJcE5q9Es7uAEcEAIhaHEVJ08pEAIdUAEP8AAaUAEVsAEagAAIEAEVYAI3
4ANMcAMr0AMfdAM7sIY9MIc+MAR4uEYdREk74AM7EAM3EAMsYAIrwAIloAL+MSADFeBRWQgAAzAE
MhADMZACKZCIMuADPnADiOgDT2AFYIAGUNIGaDAGpGgGYOAETGAFquiJ4dQ3fLOKRnROvnQDRaAE
T7ACJNiIDlAEQRAEF7gES5AFYnAGaFAEauRYboAHZxEIcRAIaWAGY4AGUTE1a2AGaJArW2IFGPQE
oGMF9NMETLBLPMADQbAD5taIHpAFWUAG6/gGY0AGS9CJMoCIRTAGoTEH5xM+b7AlIgUHbSASgbAV
k1AIlVCQ05cIg2AGTVAGYACORxCIMbADRTCCJyAGSsAD84gCKOABJ7ADQMACKJACTCAGYGASI4UH
iTAHaKCMgjAIgTAIgzD+fZOQCJNQCQ9HCZGQCL0VCFHRKRFFAzSwTCUggrTmAR8gAifAAjsgTJ+j
AjvAAmYgBm3QB4mAB4GAB4KAB2bwj27AN2swBmCQUy85B29QF0YwAi9AAz9QjWsQBkRgBDLAA0Vg
BB4ggiKwBEWwBEZgBE+wBFXglxb5A0VwIw4GMKSIRVbwjlagBFaQBX4kBqOYQZ0oBjUwA0LwAikw
BlbQiTUAlzLwAhwogjOgBVNwBVdAmlgwBTXwAlOQmlNgBFIgBTUQm1HwlkRQAzXgAi5QA6ZpBKZZ
mqZpmlqABVqwBVuABalJAiAwAUaAAjRQlyNYBceJnNQ5BdZ5BamZmlT+sJ1TIAV7SQQ0oAIjMAI0
0JrYOZxYsAXFqZ7GWZxcYJzqyQUNYAQNUHpMeAEWQAEWgJYkMAM10AFAWQNASQMogJYwkJbh2YX4
yQEioAIkIAIiAAIg0AEdcAET8AAO4AAK0AAUQAFpSQIkEANXwAFEd3fy5AANoGAFUAAGoAAT8KIW
+qIv2gAOMAH6eQEamgAKloRJaAE1MAIkYAEWagEcoAIgAAMoQALbNQENsACjRXQOUIQeRQEyWqUo
mqI6qqMKwAAKYAAD8KVgyn1J+KUOoAIWQAMxMJdGUAVFIAQSigI7moBClnEK4ABKOE/b16XblwAL
MAAJMAAGYIYDIAD+BWCGCLB9DMClW8qlXJqECDAACFAAYPqnkGoA3NcAmJqhHqWjDTAA4lZxDcCo
O7qnXypxEneoDICpKbqlGlqniZqqjkqpfgqpZsijqZqqDSBPA7CjV0gAA8AAPBqrYOqnSfiqW3qo
CmasXBqqCZilwaqjrwqswMqjSDimjThuBDB0DJitX8qjtXqoj+qnhxqs4JoAtWqr5mquw0qsiaqr
FWei8veupAqmpioApQqm4Uqvhvqt/Iqv6/qljIit8WqvgOql9ypxpWqvBPul4+qtAjCuxGqugpqw
/5qL2mqqgOqp9zqs+7qv3pqusVqrhUqsE+uvw4qwEgdkEpetCJsbrQGwsbOKr5FKqd/6p+Uqsd9K
qxybr4M6AAEBADs=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://pixel.quantserve.com/pixel/p-18RwvsI7rqyEk.gif?labels=SFGate

R0lGODlhAQABAAAAACwAAAAAAQABAID///8AAAACAkQBADs=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://imgs.sfgate.com/css/article/printable01.css

BODY {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: =
0px; PADDING-TOP: 0px
}
#container {
	PADDING-BOTTOM: 10px; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; =
FONT-FAMILY: Verdana, sans-serif; COLOR: #000; FONT-SIZE: 80%; =
PADDING-TOP: 10px
}
#adpos3 {
	MARGIN: 0px 0px 10px 10px; WIDTH: 336px; DISPLAY: inline; FLOAT: right
}
#header IMG.brandlogo {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 100px; HEIGHT: 14px; =
BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
#header FORM.printbutton {
	BORDER-LEFT: #ccc 1px solid; PADDING-BOTTOM: 0px; MARGIN: 0px 10px; =
PADDING-LEFT: 10px; PADDING-RIGHT: 10px; DISPLAY: inline; BORDER-RIGHT: =
#ccc 1px solid; PADDING-TOP: 0px
}
#header INPUT.printbutton {
	FONT-FAMILY: Verdana, sans-serif; FONT-SIZE: 1em
}
#container DIV.view_article {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: Verdana, Arial, =
Helvetica, sans-serif; FONT-SIZE: 1em; BORDER-TOP: 0px; BORDER-RIGHT: =
0px; PADDING-TOP: 0px
}
#container A.view_article {
	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; COLOR: #015660; =
FONT-SIZE: 1em
}
#container A.view_article:visited {
	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; COLOR: #015660; =
FONT-SIZE: 1em
}
#printheader {
	DISPLAY: none
}
A:link {
	COLOR: #015660; TEXT-DECORATION: none
}
A:visited {
	COLOR: #015660; TEXT-DECORATION: none
}
A:hover {
	TEXT-DECORATION: underline
}
A:hover:visited {
	TEXT-DECORATION: underline
}
H1 {
	FONT-FAMILY: Arial, Helvetica, sans-serif
}
H2 {
	FONT-FAMILY: Arial, Helvetica, sans-serif
}
H3 {
	FONT-FAMILY: Arial, Helvetica, sans-serif
}
H1 {
	MARGIN: 11px 0px 0px; FONT-SIZE: 1.44em
}
H2 {
	MARGIN: 2px 0px 11px; FONT-SIZE: 1.26em
}
P.byline {
	MARGIN: 0px 0px 3px; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; FONT-SIZE: 0.86em
}
P.date {
	MARGIN: 0px 0px 3px; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; FONT-SIZE: 0.86em
}
#objecthumbs {
	MARGIN-TOP: 14px; WIDTH: 600px
}
#objecthumbs IMG {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; MARGIN: 0px =
6px -2px 0px; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid
}
#objecthumbs A.more {
	FONT-SIZE: 0.86em
}
#articlebody {
	LINE-HEIGHT: 1.44em; FONT-FAMILY: Georgia, "Times New Roman", Times, =
serif; FONT-SIZE: 1.2em
}
#articlebody H3 {
	TEXT-TRANSFORM: lowercase; FONT-SIZE: 0.98em
}
#articlebody H3:first-letter {
	TEXT-TRANSFORM: uppercase
}
#articlefooter {
	LINE-HEIGHT: 1.2em; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
FONT-SIZE: 0.74em
}
#articlefooter .imgleft {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; FLOAT: =
left; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid
}
#articlefooter .imgright {
	BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; FLOAT: =
right; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid
}
#articlefooter .clear {
	CLEAR: both
}
#objecthumbs .clear {
	CLEAR: left
}
#chart_start PRE {
	FONT-FAMILY: "Andale Mono", "Lucida Console", monospace; FONT-SIZE: =
0.98em
}
HR {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BACKGROUND-COLOR: #666; HEIGHT: =
1px; COLOR: #666; BORDER-TOP: 0px; BORDER-RIGHT: 0px
}
#chart_link {
	BORDER-BOTTOM: #999 1px solid; BORDER-LEFT: #999 1px solid; =
PADDING-BOTTOM: 6px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; FONT-SIZE: =
0.86em; BORDER-TOP: #999 1px solid; BORDER-RIGHT: #999 1px solid; =
PADDING-TOP: 6px
}
#url {
	FONT-STYLE: italic; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
COLOR: #555; FONT-SIZE: 0.86em
}
#pageno {
	FONT-STYLE: italic; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
COLOR: #555; FONT-SIZE: 0.86em
}
DIV.google {
	MARGIN: 15px 0px; WIDTH: 500px; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; COLOR: #555; FONT-SIZE: 0.86em
}
#footer #chronsections SELECT {
	DISPLAY: inline; FONT: 0.86em Verdana, Arial, sans-serif; FLOAT: left
}
#footer #chronsections INPUT {
	DISPLAY: inline; FONT: 0.86em Verdana, Arial, sans-serif; FLOAT: left
}
#footer #chronsections FORM {
	MARGIN: 0px
}
#footer #chronsections SELECT {
	WIDTH: 220px; MARGIN-RIGHT: 5px
}
#footer #chronsections INPUT {
	WIDTH: 35px; MARGIN-RIGHT: 15px
}
* HTML #footer #chronsections INPUT {
	PADDING-BOTTOM: 0px; LINE-HEIGHT: 0.97em; PADDING-LEFT: 0px; =
PADDING-RIGHT: 0px; HEIGHT: 18px; PADDING-TOP: 0px
}
#footer #chroniclemenu {
	WIDTH: 600px; DISPLAY: inline; FONT-FAMILY: Verdana, Arial, Helvetica, =
sans-serif; FLOAT: left; FONT-SIZE: 0.82em; PADDING-TOP: 3px
}
#footer .clear {
	CLEAR: both
}

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://imgs.sfgate.com/css/article/printer01.css

#container {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; =
PADDING-TOP: 0px
}
#printheader {
	DISPLAY: block
}
#printheader IMG.brandlogo {
	WIDTH: 100px; HEIGHT: 14px
}
H1 A {
	COLOR: #000
}
H1 A:visited {
	COLOR: #000
}
P.byline A {
	COLOR: #000
}
P.byline A:visited {
	COLOR: #000
}
#url {
	FONT-STYLE: normal; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
COLOR: #000
}
#pageno {
	FONT-STYLE: normal; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; =
COLOR: #000
}

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://imgs.sfgate.com/js/ads/ysm/cm.js

// js/ads/ysm/cm.js=0A=
function sfg_ShowListings() {=0A=
  var i=3D6;=0A=
  var last_item =3D 0;=0A=
  if ( typeof zSr !=3D "undefined" && zSr !=3D null && zSr.length > i ) {=0A=
    var lastel =3D zSr.length - 6;=0A=
    document.write('\n<div class=3D"contextualad">\n<div =
class=3D"sfg_ysm001">\n');=0A=
    document.write('<h3><a =
href=3D"http://searchmarketing.yahoo.com/srch/contentmatch.php" =
target=3D"_new">Ads by Yahoo!</a></h3>\n');=0A=
    while (i < zSr.length) {=0A=
      if (i =3D=3D lastel) {=0A=
        last_item =3D 1;=0A=
      }=0A=
      var descr =3D zSr[i++];=0A=
      var unused1 =3D zSr[i++];=0A=
      var clickURL =3D zSr[i++];=0A=
      var title =3D zSr[i++];=0A=
      var sitehost =3D zSr[i++];=0A=
      var unused2 =3D zSr[i++];=0A=
      if (last_item) {=0A=
        document.write('<div class=3D"item_last">\n');=0A=
      } else {=0A=
        document.write('<div class=3D"item">\n');=0A=
      }=0A=
      document.write('<h4><a target=3D"_new" href=3D"' + clickURL + '">' =
+ title + '</a></h4>\n');=0A=
      document.write('<p><a target=3D"_new" href=3D"' + clickURL + '">' =
+ descr + '</a></p>\n');=0A=
      document.write('<p class=3D"sitehost"><a target=3D"_new" href=3D"' =
+ clickURL + '">(' + sitehost + ')</a></p>\n');=0A=
      document.write('</div>\n\n');=0A=
    }=0A=
    document.write('</div>\n</div><!-- end contextual ad -->\n');=0A=
  } else {=0A=
      document.write('<!-- YSM error - no ads returned -->');=0A=
  }=0A=
}=0A=
// end js/ads/ysm/cm.js=0A=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://imgs.sfgate.com/js1248305337/cssjs/js/article/std.js

// types/common/pages/searchbar/sfgate_un_p787.js=0A=
function sfgate_un() {=0A=
    var start =3D document.cookie.indexOf('hd=3D')=0A=
    if (start =3D=3D -1) {=0A=
        return '';=0A=
    }=0A=
    start +=3D3 ;=0A=
    var username =3D document.cookie.substr(start);=0A=
    var end =3D username.indexOf(';');=0A=
    if ( end !=3D -1 ) {=0A=
        username =3D username.substr(0,end);=0A=
    }=0A=
    if ( username.length =3D=3D 0 ) {=0A=
        return '';=0A=
    }=0A=
    end =3D username.indexOf('|');=0A=
    if ( end =3D=3D -1 ) {=0A=
        return '';=0A=
    }=0A=
=0A=
    return username.substr(0,end);=0A=
}=0A=
=0A=
function print_sfgate_un() {=0A=
    var encodedURL =3D escape(window.location);=0A=
    var sfgate_user =3D sfgate_un();=0A=
    if (sfgate_user) {=0A=
        document.write('Hello, <span class=3D"pipe"><a =
href=3D"/cgi-bin/contribute/sn/persona?plckPersonaPage=3DPersonaHome&amp;=
plckUserId=3D'+sfgate_user+'&amp;User=3D'+sfgate_user+'">' + sfgate_user =
+ '</a>');=0A=
        document.write(' | <a =
href=3D"/cgi-bin/webreg/user/account?user=3D' +=0A=
                       sfgate_user + '">My Account</a>');=0A=
        document.write(' | <a =
href=3D"/cgi-bin/webreg/user/loaccount">Sign Out</a></span>');=0A=
    } else {=0A=
        document.write('<span class=3D"pipe"><a =
href=3D"/cgi-bin/webreg/user/xaccount">Sign In</a>');=0A=
        document.write(' | <a =
href=3D"/cgi-bin/webreg/user/reg_cnt">Register</a></span>');=0A=
    }=0A=
}=0A=
=0A=
function print_sfgate_un_stacked() {=0A=
    var encodedURL =3D escape(window.location);=0A=
    var sfgate_user =3D sfgate_un();=0A=
    if (sfgate_user) {=0A=
        document.write('Hello, <a =
href=3D"/cgi-bin/contribute/sn/persona?plckPersonaPage=3DPersonaHome&amp;=
plckUserId=3D'+sfgate_user+'&amp;User=3D'+sfgate_user+'">' + sfgate_user =
+ '</a>');=0A=
        document.write('<span =
style=3D"display:block;line-height:15px;"><a =
href=3D"/cgi-bin/webreg/user/account?user=3D' + sfgate_user + '">My =
Account</a></span>');=0A=
        document.write('<span =
style=3D"display:block;line-height:15px;"><a =
href=3D"/cgi-bin/webreg/user/loaccount">Sign Out</a></span>');=0A=
    } else {=0A=
        document.write('<span =
style=3D"display:block;line-height:15px;"><a =
href=3D"/cgi-bin/webreg/user/xaccount">Sign In</a></span>');=0A=
        document.write('<span =
style=3D"display:block;line-height:15px;"><a =
href=3D"/cgi-bin/webreg/user/reg_cnt">Register</a></span>');=0A=
    }=0A=
}=0A=
function sfgate_get_hd_cookie_username() {=0A=
//try { console.log('detect hd un #1: ' + document.cookie); } catch(err) =
{}=0A=
    var start =3D document.cookie.indexOf('hd=3D')=0A=
//try { console.log('found "hd=3D" @: ' + start); } catch(err) {}=0A=
    if (start =3D=3D -1) {=0A=
        return '';=0A=
    }=0A=
    start +=3D3 ;=0A=
    var username =3D document.cookie.substr(start);=0A=
=0A=
//try { console.log('detect hd un #2: ' + username); } catch(err) {}=0A=
    var end =3D username.indexOf(';');=0A=
    if ( end !=3D -1 ) {=0A=
        username =3D username.substr(0,end);=0A=
    }=0A=
=0A=
//try { console.log('detect hd un #3: ' + username); } catch(err) {}=0A=
    if ( username.length =3D=3D 0 ) {=0A=
        return '';=0A=
    }=0A=
    end =3D username.indexOf('|');=0A=
    if ( end =3D=3D -1 ) {=0A=
        return '';=0A=
    }=0A=
//try { console.log('detect hd un #4: ' + username); } catch(err) {}=0A=
=0A=
    return username.substr(0,end);=0A=
}=0A=
=0A=
function sfgate_get_at_cookie_username() {=0A=
    var start =3D document.cookie.indexOf('at=3D');=0A=
    if (start =3D=3D -1) {=0A=
        return '';=0A=
    }=0A=
    start +=3D3 ;=0A=
    var username =3D document.cookie.substr(start);=0A=
=0A=
    var end =3D username.indexOf(';');=0A=
    if ( end !=3D -1 ) {=0A=
        username =3D username.substr(0,end);=0A=
    }=0A=
=0A=
    username_found =3D 0;=0A=
=0A=
    // the next line could potentially match a URL parameter with a key =
ending in 'u=3D' (i.e. 'foou=3D'=0A=
    // the best solution to handle this case is a '.split("&")'=0A=
    //   then loop through that array,=0A=
    //   then test line.substr(0, 2) against 'u=3D' =0A=
    allATCookieParams	=3D username.split('&');=0A=
=0A=
    for (i=3D0; i<allATCookieParams.length; i++) {=0A=
        if(allATCookieParams[i].substr(0,2) =3D=3D 'u=3D') {=0A=
            username =3D allATCookieParams[i].substr(2);=0A=
            username_found =3D 1;=0A=
            i =3D allATCookieParams.length; // equivelent to a break=0A=
        }=0A=
    }=0A=
=0A=
    if(username_found !=3D 1)=0A=
        return '';=0A=
=0A=
    var end2 =3D username.indexOf('&');=0A=
    if ( end2 !=3D -1 ) {=0A=
        username =3D username.substr(0,end2);=0A=
    }=0A=
=0A=
    var end =3D username.indexOf(';');=0A=
    if ( end !=3D -1 ) {=0A=
        username =3D username.substr(0,end);=0A=
    }=0A=
=0A=
    if ( username.length =3D=3D 0 ) {=0A=
        return '';=0A=
    }=0A=
    end =3D username.indexOf('&');=0A=
    if ( end !=3D -1 ) {=0A=
        username =3D username.substr(0,end);=0A=
    }=0A=
=0A=
    return username;=0A=
}=0A=
=0A=
function sfgate_at_is_bad () {=0A=
    var start =3D document.cookie.indexOf('at=3D');=0A=
    if (start =3D=3D -1) {=0A=
        return 0;=0A=
    }=0A=
    start +=3D3 ;=0A=
    var at =3D document.cookie.substr(start);=0A=
=0A=
    var end =3D at.indexOf(';');=0A=
    if ( end !=3D -1 ) {=0A=
        at =3D at.substr(0,end);=0A=
    }=0A=
=0A=
    if (at.indexOf('pwd_md5_tmpl') !=3D -1) { return 1; }=0A=
=0A=
    return 0;=0A=
}=0A=
=0A=
// end types/common/pages/searchbar/sfgate_un_p787.js=0A=
=0A=
/*=0A=
 types/article/sharing02.js=0A=
share functions=0A=
ssaux, pfagan 03/2007=0A=
*/=0A=
=0A=
// Build an URL for the share service passed in the function argument=0A=
=0A=
function sfgate_share(service) {=0A=
    // Get href and title=0A=
    // PDS URL correction, remove when going live=0A=
    var url =3D location.href;=0A=
    url =3D url.replace(/^http:\/\/[a-z]+\.u\./i,'http://www.');=0A=
    encodedurl =3D encodeURIComponent(url);=0A=
    var encodedtitle =3D encodeURIComponent(document.title);=0A=
=0A=
    var serviceUrl =3D null;=0A=
    if (service =3D=3D 'delicious') {=0A=
        serviceURL =3D 'http://del.icio.us/post?v=3D4&noui&jump=3Dclose'=0A=
            + '&url=3D'      + encodedurl=0A=
            + '&title=3D'    + encodedtitle;=0A=
    } else if (service =3D=3D 'digg') {=0A=
        serviceURL =3D 'http://digg.com/submit?phase=3D2'=0A=
            + '&url=3D'      + encodedurl=0A=
            + '&title=3D'    + encodedtitle;=0A=
    } else if (service =3D=3D 'facebook') {=0A=
        serviceURL =3D 'http://www.facebook.com/sharer.php'=0A=
            + '?u=3D' + encodedurl=0A=
            + '&t=3D' + encodedtitle;=0A=
    } else if (service =3D=3D 'fark') {=0A=
        serviceURL =3D 'http://www.fark.com/cgi/fark/submit.pl'=0A=
            + '?new_url=3D'     + encodedurl=0A=
            + '&new_comment=3D' + encodedtitle;=0A=
    } else if (service =3D=3D 'google') {=0A=
        serviceURL =3D 'http://www.google.com/bookmarks/mark?op=3Dadd'=0A=
            + '&bkmk=3D'       + encodedurl=0A=
            + '&title=3D'      + encodedtitle=0A=
            + '&labels=3D'     + ''=0A=
            + '&annotation=3D' + '';=0A=
    } else if (service =3D=3D 'newsvine') {=0A=
        serviceURL =3D 'http://www.newsvine.com/_tools/seed&save'=0A=
            + '?u=3D'      + encodedurl;=0A=
    } else if (service =3D=3D 'reddit') {=0A=
        serviceURL =3D 'http://reddit.com/submit'=0A=
            + '?url=3D'      + encodedurl=0A=
            + '&title=3D'    + encodedtitle;=0A=
    } else if (service =3D=3D 'slashdot') {=0A=
        serviceURL =3D 'http://slashdot.org/bookmark.pl'=0A=
            + '?url=3D'   + encodedurl=0A=
            + '&title=3D' + encodedtitle;=0A=
    } else if (service =3D=3D 'technorati') {=0A=
        serviceURL =3D 'http://technorati.com/faves?sub=3Dfavthis'=0A=
            + '&add=3D' + encodedurl;=0A=
    }=0A=
    if ( serviceURL !=3D null ) {=0A=
        var theNewWin =3D =
window.open(serviceURL,'sfgateshare','width=3D900,height=3D640,resizable=3D=
yes,toolbar=3Dno,location=3Dno,scrollbars=3Dyes');=0A=
        if ( typeof theNewWin !=3D "undefined" &&=0A=
             theNewWin !=3D null ) {=0A=
            theNewWin.focus();=0A=
        }=0A=
    }=0A=
    // remove the layer.=0A=
    document.getElementById('sharepop1').style.display=3D'none';=0A=
    document.getElementById('sharepop1mask').style.display=3D'none';=0A=
}=0A=
// end  types/article/sharing02.js=0A=
=0A=
// templates/types/article/fontprefs.js=0A=
var sfgate_sizeclasses =3D {xs: {minus: null, plus: 'sm'},=0A=
                          sm: {minus: 'xs', plus: 'md'},=0A=
                          md: {minus: 'sm', plus: 'lg'},=0A=
                          lg: {minus: 'md', plus: 'xl'},=0A=
                          xl: {minus: 'lg', plus: null}}=0A=
=0A=
var sfgate_bt_fonts =3D {georgia: 1,=0A=
                       verdana: 1,=0A=
                       times: 1,=0A=
                       arial: 1};=0A=
=0A=
function sfgate_validate_fprefs(textclass) {=0A=
=0A=
    var textclasses =3D textclass.split(' ');=0A=
    var fontclass   =3D textclasses[0];=0A=
    var sizeclass   =3D textclasses[1];=0A=
=0A=
    if ( typeof fontclass =3D=3D "undefined" ||=0A=
         typeof sizeclass =3D=3D "undefined" ||=0A=
         typeof sfgate_sizeclasses[sizeclass] =3D=3D "undefined" ||=0A=
         typeof sfgate_bt_fonts[fontclass] =3D=3D "undefined" ) {=0A=
        return null;=0A=
    }=0A=
    return {fc: fontclass,=0A=
            sc: sizeclass};=0A=
}=0A=
=0A=
function sfgate_chfont_mo(e) {=0A=
    if (!e) var e =3D window.event;=0A=
    var tg =3D (window.event) ? e.srcElement : e.target;=0A=
    if (tg.id !=3D 'fontpopup' ) return;=0A=
    var reltg =3D (e.relatedTarget) ? e.relatedTarget : e.toElement;=0A=
    while (reltg !=3D tg && reltg.nodeName !=3D 'BODY')=0A=
    reltg=3D reltg.parentNode=0A=
    if (reltg=3D=3D tg) return;=0A=
    // Otherwise, mouseout took place when mouse actually left layer=0A=
    // Handle event=0A=
    document.getElementById('fontpopup').style.display=3D'none';=0A=
}=0A=
=0A=
// returns an object that contains the=0A=
// bodytext element and the current fontclass and size class=0A=
// of that element. All error checking is done=0A=
// here.=0A=
function sfgate_getbodytext_obj (loc) {=0A=
    var textel   =3D document.getElementById('fontprefs_' + loc);=0A=
=0A=
    if ( typeof textel =3D=3D "undefined" ||=0A=
         typeof textel.className =3D=3D "undefined" ) {=0A=
        return null;=0A=
    }=0A=
=0A=
    var c_obj =3D sfgate_validate_fprefs(textel.className);=0A=
    if ( c_obj =3D=3D null ) {=0A=
        return null;=0A=
    }=0A=
    return {el: textel,=0A=
                    fc: c_obj.fc,=0A=
                    sc: c_obj.sc};=0A=
}=0A=
=0A=
// change font family=0A=
function sfgate_chfont(newfont) {=0A=
    var c_obj_top =3D sfgate_getbodytext_obj('top');=0A=
    var c_obj_bottom =3D sfgate_getbodytext_obj('bottom');=0A=
=0A=
    if ( c_obj_top =3D=3D null ) {=0A=
        return;=0A=
    }=0A=
    if ( c_obj_bottom =3D=3D null ) {=0A=
        return;=0A=
    }=0A=
=0A=
    var tc =3D newfont + ' ' + c_obj_top.sc;=0A=
    c_obj_top.el.className =3D tc;=0A=
    c_obj_bottom.el.className =3D tc;=0A=
    sfgate_set_fprefs(tc);=0A=
}=0A=
=0A=
// change font size=0A=
=0A=
function sfgate_chsize(direction) {=0A=
//alert("in chsize, " + direction);=0A=
    var c_obj_top =3D sfgate_getbodytext_obj('top');=0A=
    var c_obj_bottom =3D sfgate_getbodytext_obj('bottom');=0A=
=0A=
    if ( c_obj_top =3D=3D null ||=0A=
         sfgate_sizeclasses[c_obj_top.sc][direction] =3D=3D null ) {=0A=
        return;=0A=
    }=0A=
    if ( c_obj_bottom =3D=3D null ||=0A=
         sfgate_sizeclasses[c_obj_bottom.sc][direction] =3D=3D null ) {=0A=
        return;=0A=
    }=0A=
=0A=
    var tc =3D c_obj_top.fc + ' ' +  =
sfgate_sizeclasses[c_obj_top.sc][direction];=0A=
    c_obj_top.el.className =3D tc;=0A=
    c_obj_bottom.el.className =3D tc;=0A=
    sfgate_set_fprefs(tc);=0A=
=0A=
}=0A=
=0A=
function sfgate_setsize(sizeclass) {=0A=
    var c_obj_top =3D sfgate_getbodytext_obj('top');=0A=
    var c_obj_bottom =3D sfgate_getbodytext_obj('bottom');=0A=
=0A=
    if ( c_obj_top =3D=3D null ||=0A=
         typeof sfgate_sizeclasses[sizeclass] =3D=3D "undefined" ) {=0A=
        return;=0A=
    }=0A=
    if ( c_obj_bottom =3D=3D null ||=0A=
         typeof sfgate_sizeclasses[sizeclass] =3D=3D "undefined" ) {=0A=
        return;=0A=
    }=0A=
=0A=
    c_obj_top.el.className =3D c_obj_top.fc + ' ' +  sizeclass;=0A=
    c_obj_bottom.el.className =3D c_obj_top.fc + ' ' +  sizeclass;=0A=
}=0A=
=0A=
// set cookie function, not yet in use=0A=
=0A=
function sfgate_set_fprefs(fprefs) {=0A=
    var nextyear =3D new Date();=0A=
    nextyear.setDate(nextyear.getDate() + 365);=0A=
    document.cookie =3D 'fprefs=3D' + escape(fprefs) +=0A=
                '; expires=3D' + nextyear.toUTCString() +=0A=
                '; path=3D/' +=0A=
                '; domain=3D.sfgate.com';=0A=
}=0A=
=0A=
function sfgate_get_fprefs() {=0A=
    var start =3D document.cookie.indexOf('fprefs')=0A=
    if (start =3D=3D -1) {=0A=
        return;=0A=
    }=0A=
    start +=3D7 ;=0A=
    var cookieVal =3D document.cookie.substr(start);=0A=
    var end =3D cookieVal.indexOf(';');=0A=
    if ( end !=3D -1 ) {=0A=
        cookieVal =3D cookieVal.substr(0,end);=0A=
    }=0A=
    if ( cookieVal.length =3D=3D 0 ) {=0A=
        return;=0A=
    }=0A=
    cookieVal =3D unescape(cookieVal);=0A=
=0A=
    var c_obj =3D sfgate_validate_fprefs(cookieVal);=0A=
    if ( c_obj =3D=3D null ) {=0A=
        return;=0A=
    }=0A=
=0A=
    var textel_top =3D document.getElementById('fontprefs_top');=0A=
    var textel_bottom   =3D document.getElementById('fontprefs_bottom');=0A=
=0A=
    if (textel_top =3D=3D null) {=0A=
        return;=0A=
    }=0A=
    if (textel_bottom =3D=3D null) {=0A=
        return;=0A=
    }=0A=
=0A=
    textel_top.className =3D cookieVal;=0A=
    textel_bottom.className =3D cookieVal;=0A=
=0A=
    var radiob =3D document.getElementById('font_radio_' + c_obj.fc);=0A=
    if (radiob =3D=3D null) {=0A=
        return;=0A=
    }=0A=
=0A=
    radiob.checked =3D true;=0A=
}=0A=
// end templates/types/article/fontprefs.js=0A=
=0A=
// js/utils/fstore.js=0A=
// utility functions to store values in hidden inputs=0A=
// get integer value stored in form input el. Returns 0 if el is null=0A=
function sfggifel(el) {=0A=
    if ( el ) {=0A=
        return parseInt(el.value);=0A=
    }=0A=
    return 0;=0A=
}=0A=
// set integer in input id;=0A=
function sfgsitel(el, num) {=0A=
    sfgsstel(el,num); =0A=
}=0A=
// get boolean value.=0A=
function sfggbfel(el) {=0A=
    if ( el ) {=0A=
        if ( el.value =3D=3D "True" ) {=0A=
            return true;=0A=
        }=0A=
    }=0A=
    return false;=0A=
}=0A=
// set boolean value=0A=
function sfgsbtel(el, b) {=0A=
    sfgsstel(el, (b ? "True" : "False" ));=0A=
}=0A=
// get string value=0A=
function sfggsfel(el) {=0A=
    if ( el ) {=0A=
        return el.value;=0A=
    }=0A=
    return '';=0A=
}=0A=
// set string value=0A=
function sfgsstel(el, s) {=0A=
    if ( el ) {=0A=
        el.value =3D s;=0A=
    }=0A=
}=0A=
// end js/utils/fstore.js=0A=
=0A=
// begin: js/utils/rot.js=0A=
function sfgate_dump(s) {=0A=
    if ( window.dump ) {=0A=
        dump(s);=0A=
    }=0A=
}=0A=
=0A=
function sfgrot(n,s,domid,freq,jump,loop) {=0A=
    this.numels =3D n;=0A=
    this.show =3D s;=0A=
    this.show_orig =3D s;=0A=
    if ( this.show > this.numels ) {=0A=
        this.show =3D this.numels;=0A=
    }=0A=
    this.stateids =3D new Array();=0A=
    this.tabids =3D new Array();=0A=
    this.timeout;=0A=
    this.domid =3D domid;=0A=
    this.freq =3D freq;=0A=
    this.loop =3D loop;=0A=
    this.numrot =3D 1 * n; // hardcoded for now=0A=
    this.currotnum =3D 0;=0A=
    this.jump =3D jump;=0A=
    if ( this.jump > this.show ) {=0A=
        this.jump =3D this.show;=0A=
    }=0A=
    window[this.domid] =3D this;=0A=
}=0A=
=0A=
sfgrot.prototype.getDomXEl =3D function(subel) {=0A=
    return document.getElementById(this.domid+subel);=0A=
}=0A=
=0A=
sfgrot.prototype.setup =3D function() {=0A=
    var lastTest =3D 0;=0A=
    for ( var i =3D 1; i <=3D this.numels && lastTest =3D=3D 0 ; i++ ) {=0A=
        var el =3D this.getDomXEl(i);=0A=
        if ( el =3D=3D null ) {=0A=
            // we don't have a complete set <=3D> none=0A=
            this.stateids[0] =3D null;=0A=
            lastTest =3D 1;=0A=
        } else {=0A=
            this.stateids[i-1] =3D el;=0A=
        }=0A=
    }=0A=
    lastTest =3D 0;=0A=
    for ( i =3D 1; i <=3D this.numels && lastTest =3D=3D 0 ; i++ ) {=0A=
        el =3D this.getDomXEl('_tab'+i);=0A=
        if ( el =3D=3D null ) {=0A=
            // we don't have a complete set <=3D> none=0A=
            this.tabids[0] =3D null;=0A=
            lastTest =3D 1;=0A=
        } else {=0A=
            this.tabids[i-1] =3D el;=0A=
        }=0A=
    }=0A=
    // buttons=0A=
    this.playb =3D this.getDomXEl('_play');=0A=
    this.pauseb =3D this.getDomXEl('_pause');=0A=
    this.nextben =3D this.getDomXEl('_next_en');=0A=
    this.prevben =3D this.getDomXEl('_prev_en');=0A=
    this.nextbdis =3D this.getDomXEl('_next_dis');=0A=
    this.prevbdis =3D this.getDomXEl('_prev_dis');=0A=
    this.showing =3D this.getDomXEl('_showing');=0A=
    // input form element to keep data=0A=
    this.idi =3D this.getDomXEl('_idi');=0A=
    this.pi  =3D this.getDomXEl('_pi');=0A=
    this.showid(sfggifel(this.idi));=0A=
    if ( this.show_orig >=3D this.numels ) {=0A=
        if ( this.nextben ) {=0A=
            this.nextben.style.display =3D 'none';=0A=
        }=0A=
        if ( this.nextbdis ) {=0A=
            this.nextbdis.style.display =3D 'none';=0A=
        }=0A=
        if ( this.prevben ) {=0A=
            this.prevben.style.display =3D 'none';=0A=
        }=0A=
        if ( this.prevbdis ) {=0A=
            this.prevbdis.style.display =3D 'none';=0A=
        }=0A=
        if ( this.showing ) {=0A=
            this.showing.style.display =3D 'none';=0A=
        }=0A=
    } else {=0A=
       this.setnextprev(sfggifel(this.idi));=0A=
    }=0A=
    if (!this.setshowing) {=0A=
       this.setshowing =3D this.setshowingtext;=0A=
    }=0A=
    this.setshowing(sfggifel(this.idi));=0A=
    this.rotate();=0A=
}=0A=
=0A=
sfgrot.prototype.showid =3D function (id) {=0A=
    if ( this.loop ) {=0A=
    } else if ( id < 1 || id > this.numels ) {=0A=
        return;=0A=
    }=0A=
    id--;=0A=
    var i;=0A=
    var ns =3D this.show;=0A=
    if ( this.stateids[0] !=3D null ) { // do we use main ids?=0A=
        for ( i =3D id; i < this.numels ;i++ ){=0A=
            if ( ns > 0 ) {=0A=
                this.stateids[i].style.display =3D 'block';=0A=
                ns--;=0A=
            } else {=0A=
                this.stateids[i].style.display =3D 'none';=0A=
            }=0A=
        }                 =0A=
        for ( i =3D 0; i < id ;i++ ){=0A=
            if ( this.freq !=3D 0 && ns > 0 ) {=0A=
                this.stateids[i].style.display =3D 'block';=0A=
                ns--;=0A=
            } else {=0A=
                this.stateids[i].style.display =3D 'none';=0A=
            }=0A=
        }                 =0A=
    }=0A=
=0A=
    if ( this.tabids[0] !=3D null ) { // do we use tabs?=0A=
        // note: makes not sense to have more than one tab=0A=
        // selected.=0A=
        for ( i =3D 0; i < this.numels ; i++ ){=0A=
            this.tabids[i].className =3D '';=0A=
        }                 =0A=
        this.tabids[id].className =3D 'selected';=0A=
    }=0A=
=0A=
    // restore for storing.=0A=
    id =3D id + 1;=0A=
    sfgsitel(this.idi,id);=0A=
}=0A=
=0A=
sfgrot.prototype.mshowid =3D function (id) {=0A=
    this.stop();=0A=
    this.showid(id);=0A=
}=0A=
=0A=
sfgrot.prototype.stop =3D function () {=0A=
    clearTimeout(this.timeout);=0A=
    sfgsbtel(this.pi, false);=0A=
    if ( this.playb ) {=0A=
        this.playb.style.display =3D 'block';=0A=
    }=0A=
    if ( this.pauseb ) {=0A=
        this.pauseb.style.display =3D 'none';=0A=
    }=0A=
}=0A=
=0A=
sfgrot.prototype.play =3D function () {=0A=
    sfgsbtel(this.pi, true);=0A=
    var cur =3D this.nextel(true);=0A=
    this.showid(cur);=0A=
    this.currotnum =3D 1; // not zero since we've already moved one.=0A=
    this.rotate();=0A=
}=0A=
=0A=
sfgrot.prototype.start =3D function () {=0A=
    if ( this.playb ) {=0A=
        this.playb.style.display =3D 'none';=0A=
    }=0A=
    if ( this.pauseb ) {=0A=
        this.pauseb.style.display =3D 'block';=0A=
    }=0A=
}=0A=
=0A=
sfgrot.prototype.rotate =3D function () {=0A=
    if ( this.freq !=3D 0 && sfggbfel(this.pi) && this.currotnum < =
this.numrot ) {=0A=
        clearTimeout(this.timeout)=0A=
        this.start();=0A=
        this.currotnum =3D this.currotnum + 1;=0A=
        var cur =3D this.nextel(true);=0A=
        this.timeout =3D =
setTimeout(this.domid+'.showid('+cur+');'+this.domid+'.rotate();', =
this.freq);=0A=
    } else {=0A=
        this.stop();=0A=
    }        =0A=
}=0A=
=0A=
sfgrot.prototype.nextel =3D function (up) {=0A=
    var cur =3D sfggifel(this.idi);=0A=
    if ( typeof cur =3D=3D "undefined" ) {=0A=
        cur =3D 1;=0A=
    } else {=0A=
        if ( up ) {=0A=
            cur =3D cur + this.jump;=0A=
            if ( cur > this.numels ) {=0A=
                if (this.loop) {=0A=
                  cur =3D 1;=0A=
                } else {=0A=
                  cur =3D cur - this.numels;=0A=
                }=0A=
            }=0A=
        } else {=0A=
            cur =3D cur - this.jump;=0A=
            if ( cur < 1 ) {=0A=
                if (this.loop) {=0A=
                  if ((this.numels % this.jump) =3D=3D 0) {=0A=
                    cur =3D this.numels - this.jump + 1;=0A=
                  } else {=0A=
                    cur =3D this.numels - (this.numels % this.jump) + 1;=0A=
                  }=0A=
                } else {=0A=
                  cur =3D cur + this.numels;=0A=
                }=0A=
            }=0A=
        }=0A=
    }=0A=
    return cur;=0A=
}=0A=
=0A=
sfgrot.prototype.setnextprev =3D function (cur) {=0A=
    if ( this.loop ) { return; }=0A=
    if ( cur > ( this.numels - this.show ) ) {=0A=
        this.nonext =3D true;=0A=
        if ( this.nextben ) {=0A=
            this.nextben.style.display =3D 'none';=0A=
        }=0A=
        if ( this.nextbdis ) {=0A=
            this.nextbdis.style.display =3D 'inline';=0A=
        }=0A=
    } else {=0A=
        this.nonext =3D false;=0A=
        if ( this.nextben ) {=0A=
            this.nextben.style.display =3D 'inline';=0A=
        }=0A=
        if ( this.nextbdis ) {=0A=
            this.nextbdis.style.display =3D 'none';=0A=
        }=0A=
    }        =0A=
    if ( cur > this.show ) {=0A=
        this.noprev =3D false;=0A=
        if ( this.prevben ) {=0A=
            this.prevben.style.display =3D 'inline';=0A=
        }=0A=
        if ( this.prevbdis ) {=0A=
            this.prevbdis.style.display =3D 'none';=0A=
        }=0A=
    } else {=0A=
        this.noprev =3D true;=0A=
        if ( this.prevben ) {=0A=
            this.prevben.style.display =3D 'none';=0A=
        }=0A=
        if ( this.prevbdis ) {=0A=
            this.prevbdis.style.display =3D 'inline';=0A=
        }=0A=
    }=0A=
}=0A=
=0A=
sfgrot.prototype.next =3D function () {=0A=
    if ( this.nextben ) {=0A=
        this.nextben.blur();=0A=
    }=0A=
    if ( this.nexbdis ) {=0A=
        this.nextbdis.blur();=0A=
    }=0A=
=0A=
    if ( this.nonext ) {=0A=
        return;=0A=
    }=0A=
    var cur =3D this.nextel(true);=0A=
    this.showid(cur);=0A=
    this.setnextprev(cur);=0A=
    this.setshowing(cur);=0A=
}=0A=
=0A=
sfgrot.prototype.prev =3D function () {=0A=
    if ( this.prevben ) {=0A=
        this.prevben.blur();=0A=
    }=0A=
    if ( this.prevbdis ) {=0A=
        this.prevbdis.blur();=0A=
    }=0A=
    if ( this.noprev ) {=0A=
        return;=0A=
    }=0A=
    var cur =3D this.nextel(false);=0A=
    this.showid(cur);=0A=
    this.setnextprev(cur);=0A=
    this.setshowing(cur);=0A=
}=0A=
=0A=
var sfgate_pho001_showing_value =3D 'Showing: ';=0A=
=0A=
sfgrot.prototype.setshowingtext =3D function (cur) {=0A=
    if ( this.showing =3D=3D null ) {=0A=
        return;=0A=
    }=0A=
    var showing =3D sfgate_pho001_showing_value+cur+'-';=0A=
    if ( cur <=3D ( this.numels - this.show ) ) {=0A=
        var showend =3D cur + this.show - 1;=0A=
        showing +=3D showend;=0A=
    } else {=0A=
        showing +=3D this.numels;=0A=
    }=0A=
    showing +=3D ' of '+this.numels;=0A=
    this.showing.innerHTML =3D showing;=0A=
}=0A=
// end: js/utils/rot.js=0A=
=0A=
// types/topmost/js/topmost.js=0A=
// Preload Tab Images=0A=
var most_read =3D    new Image(); most_read.src =3D    =
"http://imgs.sfgate.com/graphics/contentmodules/topmost/cre/most_read_on.=
gif";=0A=
var most_emailed =3D new Image(); most_emailed.src =3D =
"http://imgs.sfgate.com/graphics/contentmodules/topmost/cre/most_emailed_=
on.gif";=0A=
var most_commented =3D  new Image(); most_commented.src =3D  =
"http://imgs.sfgate.com/graphics/contentmodules/topmost/cre/most_commente=
d_on.gif";=0A=
=0A=
var divids=3Dnew Array('mostread','mostemailed','topstories');=0A=
var tabids=3Dnew Array('most_read','most_emailed','most_commented');=0A=
=0A=
=0A=
function switchid(id,tab){  =0A=
        hideallids();=0A=
        showdiv(id,tab);=0A=
}=0A=
=0A=
function hideallids(){=0A=
        //loop through the array and hide each element by id=0A=
        for (var i=3D0;i<divids.length;i++){=0A=
                hidediv(divids[i],tabids[i]);=0A=
        }                 =0A=
}=0A=
=0A=
function hidediv(id,taboff) {=0A=
        //safe function to hide an element with a specified id=0A=
        if (document.getElementById) { // DOM3 =3D IE5, NS6=0A=
                document.getElementById(id).style.display =3D 'none';=0A=
        }=0A=
        else {=0A=
                if (document.layers) { // Netscape 4=0A=
                        document.id.display =3D 'none';=0A=
                }=0A=
                else { // IE 4=0A=
                        document.all.id.style.display =3D 'none';=0A=
                }=0A=
        }=0A=
        // switch tab image to off state=0A=
        document.getElementById(taboff).src =3D =
"http://imgs.sfgate.com/graphics/contentmodules/topmost/cre/"+taboff+"_of=
f.gif";=0A=
}=0A=
=0A=
function showdiv(id,tab) {=0A=
        //safe function to show an element with a specified id=0A=
                  =0A=
        if (document.getElementById) { // DOM3 =3D IE5, NS6=0A=
                document.getElementById(id).style.display =3D 'block';=0A=
        }=0A=
        else {=0A=
                if (document.layers) { // Netscape 4=0A=
                        document.id.display =3D 'block';=0A=
                }=0A=
                else { // IE 4=0A=
                        document.all.id.style.display =3D 'block';=0A=
                }=0A=
        }=0A=
        // switch tab image to current selection=0A=
        document.getElementById(tab).src =3D =
"http://imgs.sfgate.com/graphics/contentmodules/topmost/cre/"+tab+"_on.gi=
f";=0A=
}=0A=
// end types/topmost/js/topmost.js=0A=
=0A=
// /js/utils/hideoneorlast.js=0A=
// remove one of the articles=0A=
function sfg_hideoneorlast(id_prefix) {=0A=
   if ( window.sfgate_f !=3D=3D undefined ) {=0A=
      var curid =3D id_prefix + '_' + window.sfgate_f;=0A=
      var curidel =3D document.getElementById(curid);=0A=
      if ( ! curidel ) {=0A=
         curidel =3D document.getElementById(id_prefix + '_last_row');=0A=
      }=0A=
      if ( curidel ) {=0A=
         curidel.style.display =3D 'none';=0A=
      }=0A=
   }=0A=
}=0A=
// end /js/utils/hideoneorlast.js=0A=
=0A=
/* js/jsan/Ajax.js=0A=
Ajax - Simple Ajax Support Library=0A=
=0A=
DESCRIPTION:=0A=
=0A=
This library defines simple cross-browser functions for rudimentary Ajax=0A=
support.=0A=
=0A=
AUTHORS:=0A=
=0A=
    Ingy d=C3=B6t Net <ingy@cpan.org>=0A=
    Kang-min Liu <gugod@gugod.org>=0A=
=0A=
COPYRIGHT:=0A=
=0A=
Copyright Ingy d=C3=B6t Net 2006. All rights reserved.=0A=
=0A=
Ajax.js is free software. =0A=
=0A=
This library is free software; you can redistribute it and/or modify it=0A=
under the terms of the GNU Lesser General Public License as published by=0A=
the Free Software Foundation; either version 2.1 of the License, or (at=0A=
your option) any later version.=0A=
=0A=
This library is distributed in the hope that it will be useful, but=0A=
WITHOUT ANY WARRANTY; without even the implied warranty of=0A=
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser=0A=
General Public License for more details.=0A=
=0A=
    http://www.gnu.org/copyleft/lesser.txt=0A=
=0A=
 =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D*/=0A=
=0A=
if (! this.Ajax) Ajax =3D function () {};=0A=
proto =3D Ajax.prototype;=0A=
=0A=
Ajax.VERSION =3D '0.10';=0A=
=0A=
// Allows one to override with something more drastic.=0A=
// Can even be done "on the fly" using a bookmarklet.=0A=
// As an example, the test suite overrides this to test error conditions.=0A=
proto.die =3D function(e) { throw(e) };=0A=
=0A=
// The simple user interface function to GET. If no callback is used the=0A=
// function is synchronous.=0A=
=0A=
Ajax.get =3D function(url, callback) {=0A=
    return (new Ajax()).get(=0A=
        { 'url': url, 'onComplete': callback }=0A=
    );=0A=
}=0A=
=0A=
// The simple user interface function to POST. If no callback is used the=0A=
// function is synchronous.=0A=
Ajax.post =3D function(url, data, callback) {=0A=
    return (new Ajax()).post(=0A=
        { 'url': url, 'data': data, 'onComplete': callback }=0A=
    );=0A=
}=0A=
=0A=
// Object interface=0A=
proto.get =3D function(params) {=0A=
    this._init_object(params);=0A=
    this.request.open('GET', this.url, Boolean(this.onComplete));=0A=
    return this._send();=0A=
}=0A=
=0A=
proto.post =3D function(params) {=0A=
    this._init_object(params);=0A=
    this.request.open('POST', this.url, Boolean(this.onComplete));=0A=
    this.request.setRequestHeader(=0A=
        'Content-Type', =0A=
        'application/x-www-form-urlencoded'=0A=
    );=0A=
    return this._send();=0A=
}=0A=
=0A=
// Set up the Ajax object with a working XHR object.=0A=
proto._init_object =3D function(params) {=0A=
    for (key in params) {=0A=
        if (! key.match(/^url|data|onComplete$/))=0A=
            throw("Invalid Ajax parameter: " + key);=0A=
        this[key] =3D params[key];=0A=
    }=0A=
=0A=
    if (! this.url)=0A=
        throw("'url' required for Ajax get/post method");=0A=
=0A=
    if (this.request)=0A=
        throw("Don't yet support multiple requests on the same Ajax =
object");=0A=
=0A=
    this.request =3D new XMLHttpRequest();=0A=
=0A=
    if (! this.request)=0A=
        return this.die("Your browser doesn't do Ajax");=0A=
    if (this.request.readyState !=3D 0)=0A=
        return this.die("Ajax readyState should be 0");=0A=
=0A=
    return this;=0A=
}=0A=
=0A=
proto._send =3D function() {=0A=
    var self =3D this;=0A=
    if (this.onComplete) {=0A=
        this.request.onreadystatechange =3D function() {=0A=
            self._check_asynchronous();=0A=
        };=0A=
    }=0A=
    this.request.send(this.data);=0A=
    return Boolean(this.onComplete)=0A=
        ? this=0A=
        : this._check_synchronous();=0A=
}=0A=
=0A=
// TODO Allow handlers for various readyStates and statusCodes.=0A=
// Make these be the default handlers.=0A=
proto._check_status =3D function() {=0A=
    if (this.request.status !=3D 200) {=0A=
        return this.die(=0A=
            'Ajax request for "' + this.url +=0A=
            '" failed with status: ' + this.request.status=0A=
        );=0A=
    }=0A=
}=0A=
=0A=
proto._check_synchronous =3D function() {=0A=
    this._check_status();=0A=
    return this.request.responseText;=0A=
}=0A=
=0A=
proto._check_asynchronous =3D function() {=0A=
    if (this.request.readyState !=3D 4) return;=0A=
    this._check_status();=0A=
    this.onComplete(this.request.responseText);=0A=
}=0A=
=0A=
// IE support=0A=
if (window.ActiveXObject && !window.XMLHttpRequest) {=0A=
    window.XMLHttpRequest =3D function() {=0A=
        var name =3D (navigator.userAgent.toLowerCase().indexOf('msie =
5') !=3D -1)=0A=
            ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP';=0A=
        return new ActiveXObject(name);=0A=
    }=0A=
}=0A=
=0A=
// end js/jsan/Ajax.js=0A=
=0A=
// js/polls/polls.js=0A=
function $(id) {=0A=
 if (document.all) {    // IE=0A=
  var i, o, objs =3D document.all[id];=0A=
  for (i=3D0;i<objs.length;i++) {=0A=
   o =3D objs[i];=0A=
   if (o.attributes['id'] && (o.attributes['id'].value =3D=3D id)) =
return o;=0A=
  }=0A=
 } else {=0A=
  return document.getElementById(id);=0A=
 }=0A=
}=0A=
function voteRequest(frm) {=0A=
 var i, p =3D $(frm.name+'/vote');=0A=
 if (p) p.style.cursor =3D 'wait';=0A=
 p =3D frm.name;=0A=
 $(p).style.cursor =3D 'wait';=0A=
 // // // $(p).parentNode.style.cursor =3D 'wait';=0A=
 Ajax.get(p+'/v');=0A=
 var answer=3D0;=0A=
 for (i=3D0;i<frm.answer.length;i++) {=0A=
  if (frm.answer[i].checked=3D=3Dtrue) answer=3Dfrm.answer[i].value;=0A=
 }=0A=
 $(p).innerHTML =3D Ajax.get(frm.action + '?p=3D' + p + '&answer=3D' + =
answer);=0A=
 $(p).style.cursor =3D 'auto';=0A=
 return false;=0A=
}=0A=
function ajaxLink(href) {=0A=
 href.style.cursor =3D 'wait';=0A=
 $(href.name).innerHTML =3D Ajax.get(href);=0A=
 return false;=0A=
}=0A=
function displayDiv(href) { href.blur(); $(href.name).style.display =3D =
'block'; return false; }=0A=
function hideDiv(href)    { href.blur(); $(href.name).style.display =3D =
'none' ; return false; }=0A=
// end js/polls/polls.js=0A=
=0A=
=0A=
=0A=
=0A=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://imgs.sfgate.com/js1263504952/cssjs/js/pluckjscache/collected.js

////////////////////////////////////////////////////////////////////////=0A=
//  begin: /templates/types/widgets/pages/cssjs/pluckjscache.tmpl=0A=
//  cssjs/js/pluckjscache/collected.js generated by pluckjscache on Thu =
14 Jan 2010 01:35:52 PM PST=0A=
////////////////////////////////////////////////////////////////////////=0A=
=0A=
/*=0A=
Copyright (c) 2008, Yahoo! Inc. All rights reserved.=0A=
Code licensed under the BSD License:=0A=
http://developer.yahoo.net/yui/license.txt=0A=
version: 2.6.0=0A=
*/=0A=
if(typeof YAHOO=3D=3D"undefined"||!YAHOO){var =
YAHOO=3D{};}YAHOO.namespace=3Dfunction(){var =
A=3Darguments,E=3Dnull,C,B,D;for(C=3D0;C<A.length;C=3DC+1){D=3DA[C].split=
(".");E=3DYAHOO;for(B=3D(D[0]=3D=3D"YAHOO")?1:0;B<D.length;B=3DB+1){E[D[B=
]]=3DE[D[B]]||{};E=3DE[D[B]];}}return =
E;};YAHOO.log=3Dfunction(D,A,C){var =
B=3DYAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return =
false;}};YAHOO.register=3Dfunction(A,E,D){var =
I=3DYAHOO.env.modules;if(!I[A]){I[A]=3D{versions:[],builds:[]};}var =
B=3DI[A],H=3DD.version,G=3DD.build,F=3DYAHOO.env.listeners;B.name=3DA;B.v=
ersion=3DH;B.build=3DG;B.versions.push(H);B.builds.push(G);B.mainClass=3D=
E;for(var =
C=3D0;C<F.length;C=3DC+1){F[C](B);}if(E){E.VERSION=3DH;E.BUILD=3DG;}else{=
YAHOO.log("mainClass is undefined for module =
"+A,"warn");}};YAHOO.env=3DYAHOO.env||{modules:[],listeners:[]};YAHOO.env=
.getVersion=3Dfunction(A){return =
YAHOO.env.modules[A]||null;};YAHOO.env.ua=3Dfunction(){var =
C=3D{ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0};var =
B=3Dnavigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=3D1;}A=3DB.match=
(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=3DparseFloat(A[1]);if(/ =
Mobile\//.test(B)){C.mobile=3D"Apple";}else{A=3DB.match(/NokiaN[^\/]*/);i=
f(A){C.mobile=3DA[0];}}A=3DB.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=3DA[=
0];}}if(!C.webkit){A=3DB.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=
=3DparseFloat(A[1]);A=3DB.match(/Opera =
Mini[^;]*/);if(A){C.mobile=3DA[0];}}else{A=3DB.match(/MSIE\s([^;]*)/);if(=
A&&A[1]){C.ie=3DparseFloat(A[1]);}else{A=3DB.match(/Gecko\/([^\s]*)/);if(=
A){C.gecko=3D1;A=3DB.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=3DparseFl=
oat(A[1]);}}}}}return =
C;}();(function(){YAHOO.namespace("util","widget","example");if("undefine=
d"!=3D=3Dtypeof YAHOO_config){var =
B=3DYAHOO_config.listener,A=3DYAHOO.env.listeners,D=3Dtrue,C;if(B){for(C=3D=
0;C<A.length;C=3DC+1){if(A[C]=3D=3DB){D=3Dfalse;break;}}if(D){A.push(B);}=
}}})();YAHOO.lang=3DYAHOO.lang||{};(function(){var =
A=3DYAHOO.lang,C=3D["toString","valueOf"],B=3D{isArray:function(D){if(D){=
return A.isNumber(D.length)&&A.isFunction(D.splice);}return =
false;},isBoolean:function(D){return typeof =
D=3D=3D=3D"boolean";},isFunction:function(D){return typeof =
D=3D=3D=3D"function";},isNull:function(D){return =
D=3D=3D=3Dnull;},isNumber:function(D){return typeof =
D=3D=3D=3D"number"&&isFinite(D);},isObject:function(D){return(D&&(typeof =
D=3D=3D=3D"object"||A.isFunction(D)))||false;},isString:function(D){retur=
n typeof D=3D=3D=3D"string";},isUndefined:function(D){return typeof =
D=3D=3D=3D"undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(F,E){for(va=
r D=3D0;D<C.length;D=3DD+1){var =
H=3DC[D],G=3DE[H];if(A.isFunction(G)&&G!=3DObject.prototype[H]){F[H]=3DG;=
}}}:function(){},extend:function(H,I,G){if(!I||!H){throw new =
Error("extend failed, please check that "+"all dependencies are =
included.");}var =
E=3Dfunction(){};E.prototype=3DI.prototype;H.prototype=3Dnew =
E();H.prototype.constructor=3DH;H.superclass=3DI.prototype;if(I.prototype=
.constructor=3D=3DObject.prototype.constructor){I.prototype.constructor=3D=
I;}if(G){for(var D in =
G){if(A.hasOwnProperty(G,D)){H.prototype[D]=3DG[D];}}A._IEEnumFix(H.proto=
type,G);}},augmentObject:function(H,G){if(!G||!H){throw new =
Error("Absorb failed, verify dependencies.");}var =
D=3Darguments,F,I,E=3DD[2];if(E&&E!=3D=3Dtrue){for(F=3D2;F<D.length;F=3DF=
+1){H[D[F]]=3DG[D[F]];}}else{for(I in G){if(E||!(I in =
H)){H[I]=3DG[I];}}A._IEEnumFix(H,G);}},augmentProto:function(G,F){if(!F||=
!G){throw new Error("Augment failed, verify dependencies.");}var =
D=3D[G.prototype,F.prototype];for(var =
E=3D2;E<arguments.length;E=3DE+1){D.push(arguments[E]);}A.augmentObject.a=
pply(this,D);},dump:function(D,I){var =
F,H,K=3D[],L=3D"{...}",E=3D"f(){...}",J=3D", ",G=3D" =3D> =
";if(!A.isObject(D)){return D+"";}else{if(D instanceof Date||("nodeType" =
in D&&"tagName" in D)){return D;}else{if(A.isFunction(D)){return =
E;}}}I=3D(A.isNumber(I))?I:3;if(A.isArray(D)){K.push("[");for(F=3D0,H=3DD=
.length;F<H;F=3DF+1){if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L=
);}else{K.push(D[F]);}K.push(J);}if(K.length>1){K.pop();}K.push("]");}els=
e{K.push("{");for(F in =
D){if(A.hasOwnProperty(D,F)){K.push(F+G);if(A.isObject(D[F])){K.push((I>0=
)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}}if(K.length>1){K.po=
p();}K.push("}");}return K.join("");},substitute:function(S,E,L){var =
I,H,G,O,P,R,N=3D[],F,J=3D"dump",M=3D" =
",D=3D"{",Q=3D"}";for(;;){I=3DS.lastIndexOf(D);if(I<0){break;}H=3DS.index=
Of(Q,I);if(I+1>=3DH){break;}F=3DS.substring(I+1,H);O=3DF;R=3Dnull;G=3DO.i=
ndexOf(M);if(G>-1){R=3DO.substring(G+1);O=3DO.substring(0,G);}P=3DE[O];if=
(L){P=3DL(O,P,R);}if(A.isObject(P)){if(A.isArray(P)){P=3DA.dump(P,parseIn=
t(R,10));}else{R=3DR||"";var =
K=3DR.indexOf(J);if(K>-1){R=3DR.substring(4);}if(P.toString=3D=3D=3DObjec=
t.prototype.toString||K>-1){P=3DA.dump(P,parseInt(R,10));}else{P=3DP.toSt=
ring();}}}else{if(!A.isString(P)&&!A.isNumber(P)){P=3D"~-"+N.length+"-~";=
N[N.length]=3DF;}}S=3DS.substring(0,I)+P+S.substring(H+1);}for(I=3DN.leng=
th-1;I>=3D0;I=3DI-1){S=3DS.replace(new =
RegExp("~-"+I+"-~"),"{"+N[I]+"}","g");}return =
S;},trim:function(D){try{return =
D.replace(/^\s+|\s+$/g,"");}catch(E){return D;}},merge:function(){var =
G=3D{},E=3Darguments;for(var =
F=3D0,D=3DE.length;F<D;F=3DF+1){A.augmentObject(G,E[F],true);}return =
G;},later:function(K,E,L,G,H){K=3DK||0;E=3DE||{};var =
F=3DL,J=3DG,I,D;if(A.isString(L)){F=3DE[L];}if(!F){throw new =
TypeError("method =
undefined");}if(!A.isArray(J)){J=3D[G];}I=3Dfunction(){F.apply(E,J);};D=3D=
(H)?setInterval(I,K):setTimeout(I,K);return{interval:H,cancel:function(){=
if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};},isValue:fu=
nction(D){return(A.isObject(D)||A.isString(D)||A.isNumber(D)||A.isBoolean=
(D));}};A.hasOwnProperty=3D(Object.prototype.hasOwnProperty)?function(D,E=
){return D&&D.hasOwnProperty(E);}:function(D,E){return =
!A.isUndefined(D[E])&&D.constructor.prototype[E]!=3D=3DD[E];};B.augmentOb=
ject(A,B,true);YAHOO.util.Lang=3DA;A.augment=3DA.augmentProto;YAHOO.augme=
nt=3DA.augmentProto;YAHOO.extend=3DA.extend;})();YAHOO.register("yahoo",Y=
AHOO,{version:"2.6.0",build:"1321"});/*=0A=
Copyright (c) 2008, Yahoo! Inc. All rights reserved.=0A=
Code licensed under the BSD License:=0A=
http://developer.yahoo.net/yui/license.txt=0A=
version: 2.6.0=0A=
*/=0A=
YAHOO.lang.JSON=3D(function(){var =
l=3DYAHOO.lang,_UNICODE_EXCEPTIONS=3D/[\u0000\u00ad\u0600-\u0604\u070f\u1=
7b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_E=
SCAPES=3D/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,_VALUES=3D/"[^"\\\n\r]*"|t=
rue|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,_BRACKETS=3D/(?:^|:|,)=
(?:\s*\[)+/g,_INVALID=3D/^[\],:{}\s]*$/,_SPECIAL_CHARS=3D/[\\\"\x00-\x1f\=
x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u=
2060-\u206f\ufeff\ufff0-\uffff]/g,_CHARS=3D{"\b":"\\b","\t":"\\t","\n":"\=
\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function =
_revive(data,reviver){var walk=3Dfunction(o,key){var =
k,v,value=3Do[key];if(value&&typeof value=3D=3D=3D"object"){for(k in =
value){if(l.hasOwnProperty(value,k)){v=3Dwalk(value,k);if(v=3D=3D=3Dundef=
ined){delete value[k];}else{value[k]=3Dv;}}}}return =
reviver.call(o,key,value);};return typeof =
reviver=3D=3D=3D"function"?walk({"":data},""):data;}function =
_char(c){if(!_CHARS[c]){_CHARS[c]=3D"\\u"+("0000"+(+(c.charCodeAt(0))).to=
String(16)).slice(-4);}return _CHARS[c];}function _prepare(s){return =
s.replace(_UNICODE_EXCEPTIONS,_char);}function _isValid(str){return =
l.isString(str)&&_INVALID.test(str.replace(_ESCAPES,"@").replace(_VALUES,=
"]").replace(_BRACKETS,""));}function =
_string(s){return'"'+s.replace(_SPECIAL_CHARS,_char)+'"';}function =
_stringify(h,key,d,w,pstack){var o=3Dtypeof =
w=3D=3D=3D"function"?w.call(h,key,h[key]):h[key],i,len,j,k,v,isArray,a;if=
(o instanceof Date){o=3Dl.JSON.dateToString(o);}else{if(o instanceof =
String||o instanceof Boolean||o instanceof =
Number){o=3Do.valueOf();}}switch(typeof o){case"string":return =
_string(o);case"number":return =
isFinite(o)?String(o):"null";case"boolean":return =
String(o);case"object":if(o=3D=3D=3Dnull){return"null";}for(i=3Dpstack.le=
ngth-1;i>=3D0;--i){if(pstack[i]=3D=3D=3Do){return"null";}}pstack[pstack.l=
ength]=3Do;a=3D[];isArray=3Dl.isArray(o);if(d>0){if(isArray){for(i=3Do.le=
ngth-1;i>=3D0;--i){a[i]=3D_stringify(o,i,d-1,w,pstack)||"null";}}else{j=3D=
0;if(l.isArray(w)){for(i=3D0,len=3Dw.length;i<len;++i){k=3Dw[i];v=3D_stri=
ngify(o,k,d-1,w,pstack);if(v){a[j++]=3D_string(k)+":"+v;}}}else{for(k in =
o){if(typeof =
k=3D=3D=3D"string"&&l.hasOwnProperty(o,k)){v=3D_stringify(o,k,d-1,w,pstac=
k);if(v){a[j++]=3D_string(k)+":"+v;}}}}a.sort();}}pstack.pop();return =
isArray?"["+a.join(",")+"]":"{"+a.join(",")+"}";}return =
undefined;}return{isValid:function(s){return =
_isValid(_prepare(s));},parse:function(s,reviver){s=3D_prepare(s);if(_isV=
alid(s)){return _revive(eval("("+s+")"),reviver);}throw new =
SyntaxError("parseJSON");},stringify:function(o,w,d){if(o!=3D=3Dundefined=
){if(l.isArray(w)){w=3D(function(a){var =
uniq=3D[],map=3D{},v,i,j,len;for(i=3D0,j=3D0,len=3Da.length;i<len;++i){v=3D=
a[i];if(typeof =
v=3D=3D=3D"string"&&map[v]=3D=3D=3Dundefined){uniq[(map[v]=3Dj++)]=3Dv;}}=
return uniq;})(w);}d=3Dd>=3D0?d:1/0;return =
_stringify({"":o},"",d,w,[]);}return =
undefined;},dateToString:function(d){function _zeroPad(v){return =
v<10?"0"+v:v;}return =
d.getUTCFullYear()+"-"+_zeroPad(d.getUTCMonth()+1)+"-"+_zeroPad(d.getUTCD=
ate())+"T"+_zeroPad(d.getUTCHours())+":"+_zeroPad(d.getUTCMinutes())+":"+=
_zeroPad(d.getUTCSeconds())+"Z";},stringToDate:function(str){if(/^(\d{4})=
-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/.test(str)){var d=3Dnew =
Date();d.setUTCFullYear(RegExp.$1,(RegExp.$2|0)-1,RegExp.$3);d.setUTCHour=
s(RegExp.$4,RegExp.$5,RegExp.$6);return d;}return =
str;}};})();YAHOO.register("json",YAHOO.lang.JSON,{version:"2.6.0",build:=
"1321"});document.iframeLoaders =3D {};

iframe =3D function() { this.initialize.apply(this, arguments); };
iframe.prototype =3D {
	initialize: function(form, options,count){
		if (!options) options =3D {};
		this.form =3D form;
		this.uniqueId =3D count;
		document.iframeLoaders[this.uniqueId] =3D this;
		var url =3D form.action + '?jsonRequest=3D' + =
escape(form.elements[0].value); // change form submit to string; similar =
to changing form method to get
		var firstSlash =3D url.indexOf("/", url.indexOf("//")+2);
		this.transport =3D this.getTransport((firstSlash > 0) ? =
url.substring(0, firstSlash) : "");
		this.onComplete =3D options.onComplete || null;
		this.update =3D this.$(options.update) || null;
		this.updateMultiple =3D options.multiple || false;
		if (((navigator.vendor && (navigator.vendor.indexOf('Apple')) > -1) || =
window.opera) // safari and opera only
     && (/\/Direct\/Process(\?|$)/.test(form.action)) && form.elements =
&& (form.elements.length =3D=3D 1)) { // only change calls that contain =
1 element and whose actions end with /Direct/Process
			var doc =3D this.transport.contentWindow || =
this.transport.contentDocument; // retrieve the document of the iframe
			if (url.length < 80000) { // allow fallback to normal submission (80k =
is the max length for urls in safari)
				if (doc.document) // make sure we have the document and not the =
window
					doc =3D doc.document;
			=09
				try { // if this fails, fallback to normal submission
					doc.location.replace(url); // use location.replace to overwrite =
elements in history=20
					return;
				} catch (e) { };
			}
		}
		form.target=3D 'frame_'+this.uniqueId;
		form.setAttribute("target", 'frame_'+this.uniqueId); // in case the =
other one fails.
		form.submit();
	},

	onStateChange: function() {
		this.transport =3D this.$('frame_'+this.uniqueId);
		try {	 var doc =3D this.transport.contentDocument.body.innerHTML; =
this.transport.contentDocument.close(); }	// For NS6
		catch (e){=20
			try{ var doc =3D =
this.transport.contentWindow.document.body.innerHTML; =
this.transport.contentWindow.document.close(); } // For IE5.5 and IE6
			 catch (e){
				 try { var doc =3D this.transport.document.body.innerHTML; =
this.transport.document.body.close(); } // for IE5
					catch (e) {
						try	{ var doc =3D =
window.frames['frame_'+this.uniqueId].document.body.innerText; } // for =
really nasty browsers
						catch (e) { //alert(e);=20
						} // forget it.
				 }
			}
		}
		this.transport.responseText =3D doc;
		if (this.onComplete) =
setTimeout(this.bind(function(){this.onComplete(this.transport);}, =
this), 10);
		if (this.update) setTimeout(this.bind(function(){this.update.innerHTML =
=3D this.transport.responseText;}, this), 10);
		if (this.updateMultiple){ setTimeout(this.bind(function(){ // JSON =
support!
				try	{ var hasscript =3D false; eval("var inputObject =3D =
"+this.transport.responseText);	// we're expecting a JSON object, eval =
it to inputObject
					for (var i in inputObject) { if (i =3D=3D 'script') { hasscript =3D =
true; } // check if we passed some javascript along too
						else {if ( elm =3D this.$(i)) { elm.innerHTML =3D inputObject[i]; =
} else {=20
						//alert("element "+i+" not found!");=20
						} } // if it's not script, update the corresponding div
					} if (hasscript) eval(inputObject['script']); // some =
on-the-fly-javascript exchanging support too
				} catch (e) { //alert('There was an error processing: =
'+this.transport.responseText);=20
				} // in case of an error				=09
			}, this), 10);
		}=09
	},

	getTransport: function(baseUrl) {
		var divElm =3D document.createElement('DIV'), frame;
		divElm.setAttribute('style', 'width: 0; height: 0; margin: 0; padding: =
0; visibility: hidden; overflow: hidden');
		if (navigator.userAgent.indexOf('MSIE') > 0 && =
navigator.userAgent.indexOf('Opera') =3D=3D -1) {// switch to the crappy =
solution for IE
			divElm.style.width =3D 0;
			divElm.style.height =3D 0;
			divElm.style.margin =3D 0;
			divElm.style.padding =3D 0;
			divElm.style.visibility =3D 'hidden';
			divElm.style.overflow =3D 'hidden';
			divElm.innerHTML =3D '<iframe name=3D\"frame_'+this.uniqueId+'\" =
id=3D\"frame_'+this.uniqueId+'\" src=3D\"' + baseUrl + =
'/ver1.0/Content/blank.html\" =
onload=3D\"setTimeout(function(){document.iframeLoaders['+this.uniqueId+'=
].onStateChange()},20);"></iframe>';
		} else {
			frame =3D document.createElement("iframe");
			frame.setAttribute("name", "frame_"+this.uniqueId);
			frame.setAttribute("id", "frame_"+this.uniqueId);
			frame.addEventListener("load", this.bind(function(){ =
this.onStateChange(); }, this), false);
			divElm.appendChild(frame);
		}
    (RequestBatch.container || document.body).appendChild(divElm);
		return frame;
	},
 =20
  bind: function(functionObject, referenceObject) {
    return function() {
      return functionObject.apply(referenceObject, arguments);
    }
  },
 =20
  '$': function(id) {
    return document.getElementById(id);
  }
};
if (typeof(RequestBatch) =3D=3D=3D 'undefined') {
    RequestBatch =3D function() {
      this.initialize.apply(this, arguments);
    };
    // for unique id
    var counter =3D 0;

    // how many requests are still pending?
    var pendingRequests =3D 0;

    function DirectAccessErrorHandler(msg,ex){
    //alert(msg);
    }
    (function() {
   =20
        function buildJsonpUrl(serverUrl, jsonString, callbackName) {
            var separator =3D serverUrl.indexOf('?') =3D=3D -1 ? "?" : =
"&";
            // use Jsonp endpoint instead of Process
            serverUrl =3D serverUrl.replace('/Process', '/Jsonp');
            return serverUrl + separator + "r=3D" + =
encodeURIComponent(jsonString) + '&cb=3D' + callbackName;
        }

        function useJsonp(serverUrl, jsonString, callbackName) {
            // use Jsonp endpoint instead of Process
            serverUrl =3D buildJsonpUrl(serverUrl, jsonString, =
callbackName);
            var isIE =3D /*@cc_on!@*/false;
            if ((isIE && serverUrl.length < 2083) || (!isIE && =
serverUrl.length < 4000)) {
                return serverUrl;
            }
            return false;
        }
       =20
        // Cookie and HTTP Param manipulations
        // generates a list of user keys
        function getCurrentUserFromCookie() {
            var ca =3D document.cookie.split(';');
            for (var i =3D 0; i < ca.length; i++) {
                var c =3D ca[i];
		            while (c.charAt(0) =3D=3D=3D " ") c =3D c.substring(1, =
c.length);
		            var eqIndex =3D c.indexOf("=3D");
		            if (eqIndex > 0) {
			              name =3D c.substring(0, eqIndex);
			              value =3D c.substring(eqIndex + 1);
			              if (name.toLowerCase() =3D=3D 'hd') {
			                  value =3D unescape(value);
			                  value =3D value.split('|');
        		            =09
			                  return value[0];
			              }
                }
            }
            return null;
        }
       =20
        function createSrcUrl(baseUrl, url, userId, gcid, currentTime) { =

            var regexstring =3D /\DDirect\/Process\?\w\S*/;
            myregexp =3D new RegExp(regexstring);
            baseUrl =3D baseUrl.indexOf('?') =3D=3D -1 ? =
baseUrl.replace('/Direct/Process', '/Stats/Tracker.gif') : =
baseUrl.replace(myregexp, '/Stats/Tracker.gif');
           =20
            return srcUrl =3D baseUrl + "?plckUrl=3D" + =
encodeURIComponent(url) + "&plckUserId=3D" + userId + "&plckGcid=3D" + =
gcid + "&plckCurrentTime=3D" + currentTime;
        }

        // the core object to request batches
        RequestBatch.prototype =3D {
            initialize: function() {
                this.UniqueId =3D counter++;
                this.Requests =3D new Array()
            },
           =20
            gcid: "daapiCall",
           =20
            InsertTrackerNode: function(serverUrl, requestUrl, =
userIdTrckr, gcid, currentTime) {
				if (document.getElementById('slImgNodeTrckr') =3D=3D=3D null) {
					var trackImgNode =3D document.createElement('img');
					trackImgNode.setAttribute('id', "slImgNodeTrckr");
					trackImgNode.src =3D createSrcUrl(serverUrl, requestUrl, =
userIdTrckr, gcid, currentTime);
					if (trackImgNode.style.setAttribute) {
						trackImgNode.style.setAttribute('display', 'none');
					} else {
						trackImgNode.setAttribute('style', 'display:none');
					}
					document.getElementsByTagName('body')[0].appendChild =
(trackImgNode);
				}
            },
           =20
            InitializeTracking: function() {
				// create a request url for stats controller
                var requestUrl =3D location.href;
                var userId =3D getCurrentUserFromCookie();
                var d =3D new Date();
                var me =3D this;
               =20
                // We are using jQuery's object detection to determine =
if the browser is ready for us
				// to insert our stat tracker node.
				// Mozilla, Opera and webkit nightlies currently support this event
				if (document.addEventListener) {
					// Use the handy event callback
					document.addEventListener( "DOMContentLoaded", function(){=0A=
						document.removeEventListener( "DOMContentLoaded", =
arguments.callee, false );=0A=
						me.InsertTrackerNode(serverUrl, requestUrl, userId, me.gcid, =
d.getTime());=0A=
					}, false );
				=09
				// If IE event model is used
				} else if (document.attachEvent) {					=09
					// ensure firing before onload,=0A=
					// maybe late but safe also for iframes=0A=
					document.attachEvent("onreadystatechange", function(){=0A=
						if ( document.readyState =3D=3D=3D "complete" ) {=0A=
							document.detachEvent( "onreadystatechange", arguments.callee );=0A=
							me.InsertTrackerNode(serverUrl, requestUrl, userId, me.gcid, =
d.getTime());=0A=
						}=0A=
					});=0A=
=0A=
					// If IE and not an iframe=0A=
					// continually check to see if the document is ready=0A=
					if ( document.documentElement.doScroll && window =3D=3D window.top =
) (function(){=0A=
=0A=
						try {=0A=
							// If IE is used, use the trick by Diego Perini=0A=
							// http://javascript.nwbox.com/IEContentLoaded/=0A=
							document.documentElement.doScroll("left");=0A=
						} catch( error ) {=0A=
							setTimeout( arguments.callee, 0 );=0A=
							return;=0A=
						}=0A=
=0A=
						// and execute any waiting functions=0A=
						me.InsertTrackerNode(serverUrl, requestUrl, userId, me.gcid, =
d.getTime());=0A=
					})();
				}
            },

            HasTemplate: function() {
                return typeof (this["Template"]) !=3D "undefined";
            },

            AddToRequest: function(requestThis) {
                this.Requests[this.Requests.length] =3D requestThis;
            },
           =20
            BeginRequest: function(serverUrl, callback) {
                pendingRequests++;

                if (!RequestBatch.callbacks) {
                    RequestBatch.callbacks =3D {};
                }

                // the cc_on comment below is important.. if you remove =
it, it will change the processing of the script
                // see =
http://msdn.microsoft.com/en-us/library/8ka90k2e(VS.85).aspx for details =
of conditional compilation
                var jsonString =3D YAHOO.lang.JSON.stringify(this), ie =
=3D /*@cc_on!@*/false;
                if (ie && !RequestBatch.container) { // forcibly take =
this route only for ie
                    var body =3D document.body, div;
                    RequestBatch.container =3D div =3D =
body.insertBefore(document.createElement('div'), body.firstChild);
                    div.style.height =3D div.style.width =3D =
div.style.margin =3D div.style.padding =3D 0;
                    div.style.visibility =3D div.style.overflow =3D =
'hidden';
                    div.style.display =3D 'none';
                }
                // generate our callback function that will call their =
callback function via closure semantics
                var daapiCallbackName =3D 'daapiCallback' + =
this.UniqueId;
                var thisRequest =3D this;
                if (jsonpServerUrl =3D useJsonp(serverUrl, jsonString, =
'RequestBatch.callbacks.' + daapiCallbackName)) {
                    // insert script node with callback function =3D =
daapiCallbackName
                    var jsonpScriptNode =3D =
document.createElement('script');
                    jsonpScriptNode.type =3D "text/javascript";
                    jsonpScriptNode.src =3D jsonpServerUrl;
                    var headElem =3D =
document.getElementsByTagName('head')[0];
                    RequestBatch.callbacks[daapiCallbackName] =3D =
(function(userCallback, headElem, scriptNode) {
                        return function(responses) {
                            if (thisRequest.HasTemplate()) {
                                userCallback(responses);
                            } else {
                                // clean up after ourselves
                                userCallback(responses.ResponseBatch);
                                userCallback =3D headElem =3D scriptNode =
=3D null;
                            }
                        }
                    })(callback, headElem, jsonpScriptNode);
                    headElem.appendChild(jsonpScriptNode);
                }
                else {
                    var form =3D generateForm(this.UniqueId, serverUrl, =
jsonString);
                    new iframe(form, { onComplete: function(request) { =
processResponse(callback, request, thisRequest.HasTemplate()); } }, =
this.UniqueId);
                }
                // Insert tracker image node for stat tracking.
                thisRequest.InitializeTracking();
                // in case they reuse the requestbatch
                this.UniqueId =3D counter++;
            }
        };
    })();
}

function generateForm(formId, serverUrl, inputVal) {
    // create the form
	var form =3D document.createElement("form");
	form.acceptCharset =3D "UTF-8";
	form.name =3D "f" + formId;
	form.id =3D "f" + formId;
	form.action =3D serverUrl;

	// create the input element on the form
	var inputElem =3D document.createElement("input");
	inputElem.name =3D "jsonRequest";
	inputElem.type =3D "hidden";
	inputElem.value =3D inputVal;
	form.appendChild(inputElem);

	// Firefox has a behavior on refresh that displays a popup confirming =
that is it reloading a form.
	// We work around this by attempting to perform a get action if the =
size is below a threshold, else
	// we will run as a post
	form.method =3D "post";
    if(navigator.userAgent.toLowerCase().indexOf('firefox') !=3D -1) {
        var separator =3D serverUrl.indexOf('?') =3D=3D -1 ? "?" : "&";
        var fullRequestURL =3D serverUrl + separator + "jsonRequest=3D"+ =
escape(inputVal);
        if (fullRequestURL.length < 4000) {
            // we plan to perform a get, so we need to parse the sid out =
of the url and place it
            // inside the form
            var sidPos =3D serverUrl.indexOf('sid=3D');
            if (sidPos !=3D -1) {
                var endPos =3D serverUrl.indexOf('&', sidPos);
                var sid =3D serverUrl.substring(sidPos + =
'sid=3D'.length, endPos =3D=3D -1 ? serverUrl.length : endPos);
	            var sidInputElem =3D document.createElement("input");
	            sidInputElem.name =3D "sid";
	            sidInputElem.type =3D "hidden";
	            sidInputElem.value =3D sid;
	            form.appendChild(sidInputElem);
	            // remove the sid from the url
	            form.action =3D serverUrl.substring(0, sidPos-1);
            }
            form.method =3D "get";
        }
    }

	(RequestBatch.container || document.body).appendChild(form);
	return form;
}

function processResponse(callback, request, isTemplated)
{
    pendingRequests--;
    try {
        if (isTemplated) {
            callback(request.ResponseText);
        } else {
            var jsonResponse =3D unescape(request.responseText);
            jsonResponse =3D jsonResponse.replace(/\\\>/g, ">");
            var responseObject =3D YAHOO.lang.JSON.parse(jsonResponse);
            try {
                callback(responseObject.ResponseBatch);
            } catch (e) {
                DirectAccessErrorHandler("exception during client =
callback", e);
            }
        }
    } catch (e) {
        DirectAccessErrorHandler("exception during processResponse", e);
    }
}

function getPendingRequestCount()
{
    return pendingRequests;
}

// =
-------------------------------------------------------------------------=
-----------
// This file contains all the request type objects for the SiteLife JSON =
Direct API.
// Create instances of these objects, place them in a RequestBatch, and =
send them off.
// =
-------------------------------------------------------------------------=
-----------

(function() { // wrapped in a function to keep the Class variable out of =
the global scope
    var Class =3D function() {
        return function() {
            this.initialize.apply(this, arguments);
        }
    };
    // Identify a user
    UserKey =3D Class();
    UserKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.UserKey =3D data;
        }
    };
    // Identify a comment
    CommentKey =3D Class();
    CommentKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.CommentKey =3D data;
        }
    };
    // Identify an article
    ArticleKey =3D Class();
    ArticleKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.ArticleKey =3D data;
        }
    };

    // Identify a persona message
    PersonaMessageKey =3D Class();
    PersonaMessageKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.PersonaMessageKey =3D data;
        }
    };

    // Identify a review
    ReviewKey =3D Class();
    ReviewKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.ReviewKey =3D data;
        }
    };

    // Identify a gallery
    GalleryKey =3D Class();
    GalleryKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.GalleryKey =3D data;
        }
    };

    // Identify a photo
    PhotoKey =3D Class();
    PhotoKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.PhotoKey =3D data;
        }
    };

    // Identify a video
    VideoKey =3D Class();
    VideoKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.VideoKey =3D data;
        }
    };

    // Identify a blog with this blog key
    BlogKey =3D Class();
    BlogKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.BlogKey =3D data;
        }
    };

    // Identify a blog post with this blog post key
    BlogPostKey =3D Class();
    BlogPostKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.BlogPostKey =3D data;
        }
    };

    // Identify a custom item with this CustomItemKey
    CustomItemKey =3D Class();
    CustomItemKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.CustomItemKey =3D data;
        }
    };

    // Identify a custom collection with this CustomCollectionKey
    CustomCollectionKey =3D Class();
    CustomCollectionKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.CustomCollectionKey =3D data;
        }
    };


    // Identify a Forum Category
    ForumCategoryKey =3D Class();
    ForumCategoryKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.ForumCategoryKey =3D data;
        }
    };

    // Identify a Forum
    ForumKey =3D Class();
    ForumKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.ForumKey =3D data;
        }
    };

    // Identify a forum discussion with this DiscussionKey
    DiscussionKey =3D Class();
    DiscussionKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.DiscussionKey =3D data;
        }
    };

    // Identify a Forum Post
    ForumPostKey =3D Class();
    ForumPostKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.ForumPostKey =3D data;
        }
    };

    // Identify an Event
    EventKey =3D Class();
    EventKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.EventKey =3D data;
        }
    };

    // Identify an Event
    EventSetKey =3D Class();
    EventSetKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.EventSetKey =3D data;
        }
    };

    // Identify a Community Group
    CommunityGroupKey =3D Class();
    CommunityGroupKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.CommunityGroupKey =3D data;
        }
    };

    // Identify a CommunityGroup Membership
    CommunityGroupMembershipKey =3D Class();
    CommunityGroupMembershipKey.prototype =3D {
        initialize: function(communityGroupKey, userKey) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.UserKey =3D userKey;
            this.CommunityGroupMembershipKey =3D data;
        }
    };


    // Identify a CommunityGroup Invitation
    CommunityGroupInvitationKey =3D Class();
    CommunityGroupInvitationKey.prototype =3D {
        initialize: function(communityGroupKey, userKey) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.UserKey =3D userKey;
            this.CommunityGroupInvitationKey =3D data;
        }
    };

    // Identify a CommunityGroup Registrant
    CommunityGroupRegistrantKey =3D Class();
    CommunityGroupRegistrantKey.prototype =3D {
        initialize: function(communityGroupKey, userKey) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.UserKey =3D userKey;
            this.CommunityGroupRegistrantKey =3D data;
        }
    };

    // Identify a CommunityGroup Banned User
    CommunityGroupBannedUserKey =3D Class();
    CommunityGroupBannedUserKey.prototype =3D {
        initialize: function(communityGroupKey, userKey) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.UserKey =3D userKey;
            this.CommunityGroupBannedUserKey =3D data;
        }
    };

    PollKey =3D Class();
    PollKey.prototype =3D {
        initialize: function(pollKey) {
            var data =3D new Object();
            data.Key =3D pollKey;
            this.PollKey =3D data;
        }
    }

    // Points/Badging
    BadgeFamilyKey =3D Class();
    BadgeFamilyKey.prototype =3D {
        initialize: function(badgeFamilyKey) {
            var data =3D new Object();
            data.Key =3D badgeFamilyKey;
            this.BadgeFamilyKey =3D data;
        }
    }

    LeaderboardKey =3D Class();
    LeaderboardKey.prototype =3D {
        initialize: function(leaderboardKey) {
            var data =3D new Object();
            data.Key =3D leaderboardKey;
            this.LeaderboardKey =3D data;
        }
    }
   =20
    FeedActivityKey =3D Class();
    FeedActivityKey.prototype =3D {
        initialize: function(feedActivityKey){
            var data =3D new Object();
            data.Key =3D feedActivityKey;
            this.FeedActivityKey =3D data;
        }
    }
   =20
    RatingsReferenceKey =3D Class();
    RatingsReferenceKey.prototype =3D {
        initialize: function(ratingsReferenceKey){
            var data =3D new Object();
            data.Key =3D ratingsReferenceKey;
            this.RatingsReferenceKey =3D data;
        }
    }

    // Wrapper to request a comment page
    CommentPage =3D Class();
    CommentPage.prototype =3D {
        initialize: function(articleKey, numberPerPage, onPage, sort, =
findCommentKey) {
            var data =3D new Object();
            data.ArticleKey =3D articleKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            data.FindCommentKey =3D findCommentKey;
            this.CommentPage =3D data;
        }
    };

    // Wrapper to request a persona message page
    PersonaMessagePage =3D Class();
    PersonaMessagePage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage, sort) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.PersonaMessagePage =3D data;
        }
    };

    // Wrapper to request a review page
    ReviewPage =3D Class();
    ReviewPage.prototype =3D {
        initialize: function(articleKey, numberPerPage, onPage, sort) {
            var data =3D new Object();
            data.ArticleKey =3D articleKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.ReviewPage =3D data;
        }
    };

    // wrapper to request a page of reviews by user
    UserReviewPage =3D Class();
    UserReviewPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage, sort) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.UserReviewPage =3D data;
        }
    };

    // Wrapper of types a gallery can contain
    MediaType =3D Class();
    MediaType.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.MediaType =3D data;
        }
    };
    // Wrapper to request a page of public galleries
    PublicGalleryPage =3D Class();
    PublicGalleryPage.prototype =3D {
        initialize: function(numberPerPage, onPage, mediaType) {
            var data =3D new Object();
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.MediaType =3D mediaType;
            this.PublicGalleryPage =3D data;
        }
    };
    // Wrapper to request a page of user galleries
    UserGalleryPage =3D Class();
    UserGalleryPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage, mediaType) =
{
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.MediaType =3D mediaType;
            this.UserGalleryPage =3D data;
        }
    };
    // Wrapper to request a page of photos
    PhotoPage =3D Class();
    PhotoPage.prototype =3D {
        initialize: function(galleryKey, numberPerPage, onPage, sort) {
            var data =3D new Object();
            data.GalleryKey =3D galleryKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.PhotoPage =3D data;
        }
    };
    // Wrapper to request a page of videos
    VideoPage =3D Class();
    VideoPage.prototype =3D {
        initialize: function(galleryKey, numberPerPage, onPage, sort) {
            var data =3D new Object();
            data.GalleryKey =3D galleryKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.VideoPage =3D data;
        }
    };
    // Wrapper to request a comment action
    CommentAction =3D Class();
    CommentAction.prototype =3D {
        initialize: function(commentOnKey, onPageUrl, onPageTitle, =
commentBody) {
            var data =3D new Object();
            data.CommentOnKey =3D commentOnKey;
            data.OnPageUrl =3D onPageUrl;
            data.OnPageTitle =3D onPageTitle;
            data.CommentBody =3D commentBody;
            this.CommentAction =3D data;
        }
    };
    // Wrapper to request a review action
    ReviewAction =3D Class();
    ReviewAction.prototype =3D {
        initialize: function(reviewOnThisKey, onPageUrl, onPageTitle,
                        reviewTitle, reviewRating, reviewBody, =
reviewPros, reviewCons) {
            var data =3D new Object();
            data.ReviewOnKey =3D reviewOnThisKey;
            data.OnPageUrl =3D onPageUrl;
            data.OnPageTitle =3D onPageTitle;
            data.ReviewTitle =3D reviewTitle;
            data.ReviewRating =3D reviewRating;
            data.ReviewBody =3D reviewBody;
            data.ReviewPros =3D reviewPros;
            data.ReviewCons =3D reviewCons;
            this.ReviewAction =3D data;
        }
    };
    // Wrapper to request a recommend action
    RecommendAction =3D Class();
    RecommendAction.prototype =3D {
        initialize: function(recommendThisKey, articleTitle) {
            var data =3D new Object();
            data.RecommendThisKey =3D recommendThisKey;
            if (articleTitle) {
                data.OnPageTitle =3D articleTitle;
            }

            this.RecommendAction =3D data;
        }
    };
    // Wrapper to request a rate action
    RateAction =3D Class();
    RateAction.prototype =3D {
        initialize: function(rateThisKey, rating, multiRate, =
ratingsReferenceKey) {
            var data =3D new Object();
            data.RateThisKey =3D rateThisKey;
            data.Rating =3D rating;
            if (typeof (multiRate) !=3D "undefined") {
                data.MultiRate =3D multiRate;
            }
            if (typeof (ratingsReferenceKey) !=3D=3D "undefined") {
                    data.RatingsReferenceKey =3D ratingsReferenceKey;
            }
            this.RateAction =3D data;
        }
    };

    // Permanently delete a gallery, video or photo
    DeleteContentAction =3D Class();
    DeleteContentAction.prototype =3D {
        initialize: function(deleteThisContent) {
            var data =3D new Object();
            data.DeleteThisContent =3D deleteThisContent;
            this.DeleteContentAction =3D data;
        }
    };

    // Email from the SiteLife system
    EmailContentAction =3D Class();
    EmailContentAction.prototype =3D {
        initialize: function(toAddress, subject, body) {
            var data =3D new Object();
            data.ToAddress =3D toAddress;
            data.Subject =3D subject;
            data.Body =3D body;
            this.EmailContentAction =3D data;
        }
    };

    // Email from the SiteLife system with user key as target
    EmailContentWithUserIDAction =3D Class();
    EmailContentWithUserIDAction.prototype =3D {
        initialize: function(toUserKey, subject, body) {
            var data =3D new Object();
            data.UserKey =3D toUserKey;
            data.Subject =3D subject;
            data.Body =3D body;
            this.EmailContentWithUserIDAction =3D data;
        }
    };

    // Wrapper to request a report abuse action
    ReportAbuseAction =3D Class();
    ReportAbuseAction.prototype =3D {
        initialize: function(reportThisKey, abuseReason, =
abuseDescription) {
            var data =3D new Object();
            data.ReportThisKey =3D reportThisKey;
            data.AbuseReason =3D abuseReason;
            data.AbuseDescription =3D abuseDescription;
            this.ReportAbuseAction =3D data;
        }
    };
    // Category used for discovery
    Category =3D Class();
    Category.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.Category =3D data;
        }
    };
    // Section used for discovery
    Section =3D Class();
    Section.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.Section =3D data;
        }
    };
    // Update or create an article
    UpdateArticleAction =3D Class();
    UpdateArticleAction.prototype =3D {
        initialize: function(updateArticle, onPageUrl, onPageTitle, =
section, categories) {
            var data =3D new Object();
            data.UpdateArticle =3D updateArticle;
            data.OnPageUrl =3D onPageUrl;
            data.OnPageTitle =3D onPageTitle;
            data.Section =3D section;
            data.Categories =3D categories;
            this.UpdateArticleAction =3D data;
        }
    };
    // Update or create a gallery
    UpdateGalleryAction =3D Class();
    UpdateGalleryAction.prototype =3D {
        initialize: function(updateGallery, galleryType, mediaType, =
title, description, tags, section, galleryPromo) {
            var data =3D new Object();
            data.UpdateGallery =3D updateGallery;
            data.GalleryType =3D galleryType;
            data.MediaType =3D mediaType;
            data.Title =3D title;
            data.Description =3D description;
            data.Tags =3D tags;
            data.Section =3D section;
            data.GalleryPromo =3D galleryPromo;
            this.UpdateGalleryAction =3D data;
        }
    };
    // Update or create a photo
    UpdatePhotoAction =3D Class();
    UpdatePhotoAction.prototype =3D {
        initialize: function(updatePhoto, title, description, tags, =
section) {
            var data =3D new Object();
            data.UpdatePhoto =3D updatePhoto;
            data.Title =3D title;
            data.Description =3D description;
            data.Tags =3D tags;
            data.Section =3D section;
            this.UpdatePhotoAction =3D data;
        }
    };
    // Update or create a video
    UpdateVideoAction =3D Class();
    UpdateVideoAction.prototype =3D {
        initialize: function(updateVideo, title, description, tags, =
section) {
            var data =3D new Object();
            data.UpdateVideo =3D updateVideo;
            data.Title =3D title;
            data.Description =3D description;
            data.Tags =3D tags;
            data.Section =3D section;
            this.UpdateVideoAction =3D data;
        }
    };
    //=20
    GalleryType =3D Class();
    GalleryType.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.GalleryType =3D data;
        }
    };
    // GalleryPromo used for setting promotional text for public =
galleries
    GalleryPromo =3D Class();
    GalleryPromo.prototype =3D {
        initialize: function(title, body, photoKey) {
            var data =3D new Object();
            data.Title =3D title;
            data.Body =3D body;
            data.PhotoKey =3D photoKey;
            this.GalleryPromo =3D data;
        }
    };
    // UserTier used for discovery
    UserTier =3D Class();
    UserTier.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.UserTier =3D data;
        }
    };
    // MembershipTier used for community groups
    MembershipTier =3D Class();
    MembershipTier.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.MembershipTier =3D data;
        }
    };
    // Activity used for discovery
    Activity =3D Class();
    Activity.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.Activity =3D data;
        }
    };
    // Discovery on articles
    DiscoverArticlesAction =3D Class();
    DiscoverArticlesAction.prototype =3D {
        initialize: function(searchSections, searchCategories, =
limitToContributors, activity, age, maximumNumberOfDiscoveries) {
            var data =3D new Object();
            data.SearchSections =3D searchSections;
            data.SearchCategories =3D searchCategories;
            data.LimitToContributors =3D limitToContributors;
            data.Activity =3D activity;
            data.Age =3D age;
            data.MaximumNumberOfDiscoveries =3D =
maximumNumberOfDiscoveries;

            this.DiscoverArticlesAction =3D data;
        }
    };

    // Action used to add a friend
    AddFriendAction =3D Class();
    AddFriendAction.prototype =3D {
        initialize: function(friendUserKey) {
            var data =3D new Object();
            data.FriendUserKey =3D friendUserKey;
            this.AddFriendAction =3D data;
        }
    };

    // Action used to add a message
    AddPersonaMessageAction =3D Class();
    AddPersonaMessageAction.prototype =3D {
        initialize: function(toUserKey, body) {
            var data =3D new Object();
            data.ToUserKey =3D toUserKey;
            data.Body =3D body;
            this.AddPersonaMessageAction =3D data;
        }
    };

    // Action used to remove a message
    RemovePersonaMessageAction =3D Class();
    RemovePersonaMessageAction.prototype =3D {
        initialize: function(personaMessageKey) {
            var data =3D new Object();
            data.PersonaMessageKey =3D personaMessageKey;
            this.RemovePersonaMessageAction =3D data;
        }
    };

    // Action used to approve a friend
    ApproveFriendAction =3D Class();
    ApproveFriendAction.prototype =3D {
        initialize: function(friendUserKey, isApproved) {
            var data =3D new Object();
            data.FriendUserKey =3D friendUserKey;
            data.IsApproved =3D isApproved;
            this.ApproveFriendAction =3D data;
        }
    };

    // Action used to remove a friend
    RemoveFriendAction =3D Class();
    RemoveFriendAction.prototype =3D {
        initialize: function(friendUserKey) {
            var data =3D new Object();
            data.FriendUserKey =3D friendUserKey;
            this.RemoveFriendAction =3D data;
        }
    };

    // Action used to add an enemy
    AddEnemyAction =3D Class();
    AddEnemyAction.prototype =3D {
        initialize: function(enemyUserKey) {
            var data =3D new Object();
            data.EnemyUserKey =3D enemyUserKey;
            this.AddEnemyAction =3D data;
        }
    };

    // Action used to remove an enemy
    RemoveEnemyAction =3D Class();
    RemoveEnemyAction.prototype =3D {
        initialize: function(enemyUserKey) {
            var data =3D new Object();
            data.EnemyUserKey =3D enemyUserKey;
            this.RemoveEnemyAction =3D data;
        }
    };

    // Wrapper to request a friend page
    FriendPage =3D Class();
    FriendPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage, =
isPendingList, filterKey, filterValue) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.IsPendingList =3D isPendingList;
            data.FilterKey =3D filterKey;
            data.FilterValue =3D filterValue;
            this.FriendPage =3D data;
        }
    };

    // Wrapper to request if a given user key is a friend of the user =
specified by the second parameter
    // if the userKey parameter is not specified, the currently =
logged-in user is used
    IsFriend =3D Class();
    IsFriend.prototype =3D {
        initialize: function(friendUserKey, userKey) {
            var data =3D new Object();
            data.FriendUserKey =3D friendUserKey;
            data.UserKey =3D userKey;
            this.IsFriend =3D data;
        }
    };

    // Wrapper to request a friend page
    EnemyPage =3D Class();
    EnemyPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage, sort) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.EnemyPage =3D data;
        }
    };

    // Discovery on content
    DiscoverContentAction =3D Class();
    DiscoverContentAction.prototype =3D {
        initialize: function(searchSections, searchCategories, =
limitToContributors, activity, contentType, age, =
maximumNumberOfDiscoveries, filterBySiteOfOrigin, parentKeys) {
            var data =3D new Object();
            data.SearchSections =3D searchSections;
            data.SearchCategories =3D searchCategories;
            data.LimitToContributors =3D limitToContributors;
            data.Activity =3D activity;
            data.ContentType =3D contentType;
            data.Age =3D age;
            data.MaximumNumberOfDiscoveries =3D =
maximumNumberOfDiscoveries;
            data.FilterBySiteOfOrigin =3D filterBySiteOfOrigin;
            if (parentKeys) {
                data.ParentKeys =3D parentKeys;
            }
            this.DiscoverContentAction =3D data;
        }
    };

    // Content type for discovery
    ContentType =3D Class();
    ContentType.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.ContentType =3D data;
        }
    };

    UpdateUserProfileAction =3D Class();
    UpdateUserProfileAction.prototype =3D {
        initialize: function(userKey,
                            aboutMe,
                            location,
                            signature,
                            dateOfBirth,
                            sex,
                            personaPrivacyMode,
                            commentsTabVisible,
                            photosTabVisible,
                            messagesOpenToEveryone,
                            isEmailNotificationsEnabled,
                            selectedStyleId,
                            customAnswers,
                            extendedProfile) {

            var data =3D new Object();
            data.UserKey =3D userKey;
            data.AboutMe =3D aboutMe;
            data.Location =3D location;
            data.Signature =3D signature;
            data.DateOfBirth =3D dateOfBirth;
            data.Sex =3D sex;
            data.PersonaPrivacyMode =3D personaPrivacyMode;
            data.CommentsTabVisible =3D commentsTabVisible;
            data.PhotosTabVisible =3D photosTabVisible;
            data.MessagesOpenToEveryone =3D messagesOpenToEveryone;
            data.IsEmailNotificationsEnabled =3D =
isEmailNotificationsEnabled;
            data.SelectedStyleId =3D selectedStyleId;
            data.CustomAnswers =3D customAnswers;
            data.ExtendedProfile =3D extendedProfile;
            this.UpdateUserProfileAction =3D data;
        }
    };

    UpdateUserBlockedSettingAction =3D Class();
    UpdateUserBlockedSettingAction.prototype =3D {
        initialize: function(userKey, isBlocked) {
            var data =3D new Object;
            data.UserKey =3D userKey;
            data.IsBlocked =3D isBlocked;
            this.UpdateUserBlockedSettingAction =3D data;
        }
    };

    SearchAction =3D Class();
    SearchAction.prototype =3D {
        initialize: function(searchType, searchString, numberPerPage, =
onPage) {
            var data =3D new Object();
            data.SearchType =3D searchType;
            data.SearchString =3D searchString;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.SearchAction =3D data;
        }
    };

    // Wrapper to request a watch item page
    WatchItemPage =3D Class();
    WatchItemPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.WatchItemPage =3D data;
        }
    };

    // Wrapper to add a watch item
    AddWatchItemAction =3D Class();
    AddWatchItemAction.prototype =3D {
        initialize: function(userKey, watchTargetKey, title, url) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.WatchTargetKey =3D watchTargetKey;
            data.WatchItemTitle =3D title;
            data.WatchItemUrl =3D url;
            this.AddWatchItemAction =3D data;
        }
    };

    // Wrapper to delete a watch item
    DeleteWatchItemAction =3D Class();
    DeleteWatchItemAction.prototype =3D {
        initialize: function(userKey, watchTargetKey) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.WatchTargetKey =3D watchTargetKey;
            this.DeleteWatchItemAction =3D data;
        }
    };

    // Wrapper to request a blog post page
    BlogPostPage =3D Class();
    BlogPostPage.prototype =3D {
        initialize: function(blogKey, numberPerPage, onPage, sort, =
blogPostState, restrictToOwner, includeFuturePosts) {
            var data =3D new Object();
            data.BlogKey =3D blogKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            data.BlogPostState =3D blogPostState;
            if ((typeof (restrictToOwner) =3D=3D 'undefined') || =
(restrictToOwner =3D=3D null)) {
                // Default to false for backwards compatibility
                restrictToOwner =3D false;
            }
            data.RestrictToOwner =3D restrictToOwner.toString();
            if ((typeof (includeFuturePosts) =3D=3D 'undefined') || =
(includeFuturePosts =3D=3D null)) {
                // Default to false for backwards compatibility
                includeFuturePosts =3D false;
            }
            data.IncludeFuturePosts =3D includeFuturePosts.toString();
            this.BlogPostPage =3D data;
        }
    };

    // Wrapper to request a blog post page by Tag
    BlogPostsByTagPage =3D Class();
    BlogPostsByTagPage.prototype =3D {
        initialize: function(blogKey, tag, numberPerPage, onPage, sort) =
{
            var data =3D new Object();
            data.BlogKey =3D blogKey;
            data.Tag =3D tag;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.BlogPostsByTagPage =3D data;
        }
    };


    // Wrapper to request a blog post archive count
    BlogPostArchiveCount =3D Class();
    BlogPostArchiveCount.prototype =3D {
        initialize: function(blogKey) {
            var data =3D new Object();
            data.BlogKey =3D blogKey;
            this.BlogPostArchiveCount =3D data;
        }
    };


    // Wrapper to request a blog post archive content page
    BlogPostArchiveContentPage =3D Class();
    BlogPostArchiveContentPage.prototype =3D {
        initialize: function(blogKey, month, numberPerPage, onPage, =
sort) {
            var data =3D new Object();
            data.BlogKey =3D blogKey;
            data.Month =3D month;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.BlogPostArchiveContentPage =3D data;
        }
    };


    // Wrapper to request a user comment page
    UserCommentPage =3D Class();
    UserCommentPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage, sort, =
commentsOnly) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            data.CommentsOnly =3D commentsOnly;
            this.UserCommentPage =3D data;
        }
    };


    // Wrapper to request blog tag=20
    RecentBlogTag =3D Class();
    RecentBlogTag.prototype =3D {
        initialize: function(blogKey) {
            var data =3D new Object();
            data.BlogKey =3D blogKey;
            this.RecentBlogTag =3D data;
        }
    };


    // Wrapper to request recent user photo page
    RecentUserPhotoPage =3D Class();
    RecentUserPhotoPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.RecentUserPhotoPage =3D data;
        }
    };

    // Wrapper to request recent user video page
    RecentUserVideoPage =3D Class();
    RecentUserVideoPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.RecentUserVideoPage =3D data;
        }
    };


    // Wrapper to request recent public gallery page
    RecentPublicGalleryPage =3D Class();
    RecentPublicGalleryPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.RecentPublicGalleryPage =3D data;
        }
    };


    // Wrapper to request recent user activity page
    RecentUserActivity =3D Class();
    RecentUserActivity.prototype =3D {
        initialize: function(userKey) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            this.RecentUserActivity =3D data;
        }
    };


    // Wrapper to request page of user media submission counts
    UserMediaSubmissionsCountPage =3D Class();
    UserMediaSubmissionsCountPage.prototype =3D {
        initialize: function(userKey, mediaType, numberPerPage, onPage) =
{
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.MediaType =3D mediaType;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.UserMediaSubmissionsCountPage =3D data;
        }
    };


    // Wrapper to request recent forum discussion page
    RecentForumDiscussionPage =3D Class();
    RecentForumDiscussionPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.RecentForumDiscussionPage =3D data;
        }
    };


    // Wrapper to request user group forum page
    UserGroupForumPage =3D Class();
    UserGroupForumPage.prototype =3D {
        initialize: function(userKey, numberPerPage, onPage, sort) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.UserGroupForumPage =3D data;
        }
    };

    // Update or create a blog
    UpdateBlogAction =3D Class();
    UpdateBlogAction.prototype =3D {
        initialize: function(updateBlog, title, tagline, =
blogRollEntries, blogType, commentApproval) {
            var data =3D new Object();
            data.BlogKey =3D updateBlog;
            data.Title =3D title;
            data.Tagline =3D tagline;
            data.BlogRollEntries =3D blogRollEntries;
            data.BlogType =3D blogType;
            if ((typeof (commentApproval) =3D=3D 'undefined' || =
(commentApproval =3D=3D null))) {
                // Default to Everyone for backwards compatibility.
                commentApproval =3D "NoChange";
            }
            data.CommentApproval =3D commentApproval;
            this.UpdateBlogAction =3D data;
        }
    };

    // The blogRollEntry used in UpdateBlogAction
    BlogRollEntry =3D Class();
    BlogRollEntry.prototype =3D {
        initialize: function(name, url) {
            var data =3D new Object();
            data.Name =3D name;
            data.Url =3D url;
            this.BlogRollEntry =3D data;
        }
    };

    // Bookmark used in UpdateCommunityGroupAction
    Bookmark =3D Class();
    Bookmark.prototype =3D {
        initialize: function(title, link) {
            var data =3D new Object();
            data.Title =3D title;
            data.Link =3D link;
            this.Bookmark =3D data;
        }
    };

    // CommunityGroupVisibility used in UpdateCommunityGroupAction
    CommunityGroupVisibility =3D Class();
    CommunityGroupVisibility.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.CommunityGroupVisibility =3D data;
        }
    };

    // Update or create a blog post, key can be either a post key =
(update case)
    // or a blog key (create case)
    UpdateBlogPostAction =3D Class();
    UpdateBlogPostAction.prototype =3D {
        initialize: function(key, title, body, tags, publishDate, =
published) {
            var data =3D new Object();
            data.TargetThis =3D key;
            data.Title =3D title;
            data.Body =3D body;
            data.Tags =3D tags;
            data.Date =3D publishDate;
            data.Published =3D published;
            this.UpdateBlogPostAction =3D data;
        }
    };

    // Identify a forum discussion with this DiscussionKey=20
    DiscussionKey =3D Class();
    DiscussionKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.DiscussionKey =3D data;
        }
    };

    // Identify a custom item with this CustomItemKey
    CustomItemKey =3D Class();
    CustomItemKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.CustomItemKey =3D data;
        }
    };

    // Identify a custom collection with this CustomCollectionKey
    CustomCollectionKey =3D Class();
    CustomCollectionKey.prototype =3D {
        initialize: function(key) {
            var data =3D new Object();
            data.Key =3D key;
            this.CustomCollectionKey =3D data;
        }
    };

    // Update or create a custom item in storage
    UpdateCustomItemAction =3D Class();
    UpdateCustomItemAction.prototype =3D {
        initialize: function(customItemKey, name, mimeType, displayText, =
content, includeInRecentActivity) {
            var data =3D new Object();
            data.CustomItemKey =3D customItemKey;
            data.Name =3D name;
            data.MimeType =3D mimeType;
            data.DisplayText =3D displayText;
            data.Content =3D content;
            if ((typeof (includeInRecentActivity) =3D=3D 'undefined') || =
(includeInRecentActivity =3D=3D null)) {
                // Default to true for backwards compatibility
                includeInRecentActivity =3D true;
            }
            data.IncludeInRecentActivity =3D includeInRecentActivity
            this.UpdateCustomItemAction =3D data;
        }
    };

    // Add a new custom collection to storage
    AddCustomCollectionAction =3D Class();
    AddCustomCollectionAction.prototype =3D {
        initialize: function(customCollectionKey, customCollectionName) =
{
            var data =3D new Object();
            data.CustomCollectionKey =3D customCollectionKey;
            data.CustomCollectionName =3D customCollectionName;
            this.AddCustomCollectionAction =3D data;
        }
    };

    // Insert an item into a custom collection
    InsertIntoCollectionAction =3D Class();
    InsertIntoCollectionAction.prototype =3D {
        initialize: function(customCollectionKey, insertThisKey, =
position) {
            var data =3D new Object();
            data.CustomCollectionKey =3D customCollectionKey;
            data.InsertThisKey =3D insertThisKey;
            data.Position =3D position;
            this.InsertIntoCollectionAction =3D data;
        }
    };

    // Remove an item from a custom collection (position can be null to =
specify to remove all occurrences of item)
    RemoveFromCollectionAction =3D Class();
    RemoveFromCollectionAction.prototype =3D {
        initialize: function(customCollectionKey, removeThisKey, =
position) {
            var data =3D new Object();
            data.CustomCollectionKey =3D customCollectionKey;
            data.RemoveThisKey =3D removeThisKey;
            data.Position =3D position;
            this.RemoveFromCollectionAction =3D data;
        }
    };

    // Get a page of items out of a custom collection
    CustomCollectionPage =3D Class();
    CustomCollectionPage.prototype =3D {
        initialize: function(customCollectionKey, numberPerPage, onPage, =
sort) {
            var data =3D new Object();
            data.CustomCollectionKey =3D customCollectionKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.CustomCollectionPage =3D data;
        }
    };


    // Get a page of items out of a custom collection
    EditorMessageRequest =3D Class();
    EditorMessageRequest.prototype =3D {
        initialize: function() {
            this.EditorMessageRequest =3D new Object();
        }
    };

    // Retrieve a user's tags for the given content type
    UserTags =3D Class();
    UserTags.prototype =3D {
        initialize: function(userKey, contentType) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.ContentType =3D contentType;
            this.UserTags =3D data;
        }
    };


    // Get an item's ContentPolicy
    GetContentPolicyAction =3D Class();
    GetContentPolicyAction.prototype =3D {
        initialize: function(targetKey, userTier, action) {
            var data =3D new Object();
            data.TargetKey =3D targetKey;
            data.UserTier =3D userTier;
            data.ContentPolicyActionType =3D action;
            this.GetContentPolicyAction =3D data;
        }
    }

    // Set an item's ContentPolicy
    SetContentPolicyAction =3D Class();
    SetContentPolicyAction.prototype =3D {
        initialize: function(targetKey, userTier, action, policy) {
            var data =3D new Object();
            data.TargetKey =3D targetKey;
            data.UserTier =3D userTier;
            data.ContentPolicyActionType =3D action;
            data.ContentPolicy =3D policy;
            this.SetContentPolicyAction =3D data;
        }
    }

    ContentPolicy =3D Class();
    ContentPolicy.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.ContentPolicy =3D data;
        }
    };

    ContentPolicyActionType =3D Class();
    ContentPolicyActionType.prototype =3D {
        initialize: function(name) {
            var data =3D new Object();
            data.Name =3D name;
            this.ContentPolicyActionType =3D data;
        }
    };

    // Updates a Forum's meta data
    UpdateForumAction =3D Class();
    UpdateForumAction.prototype =3D {
        initialize: function(forumKey, title, description) {
            var data =3D new Object();
            data.ForumKey =3D forumKey;
            data.Title =3D title;
            data.Description =3D description;
            this.UpdateForumAction =3D data;
        }
    };

    //Adds/Updates a Forum Discussion's meta data. If the key is a =
ForumKey, it will be added as a new Discussion.
    //If the key is a ForumDiscussionKey, the existing forum discussion =
will be updated.
    UpdateForumDiscussionAction =3D Class();
    UpdateForumDiscussionAction.prototype =3D {
        initialize: function(key, title, body, isQuestion, isPoll, =
section, categories) {
            var data =3D new Object();
            data.TargetThis =3D key;
            data.Title =3D title;
            data.Body =3D body;
            data.IsQuestion =3D typeof (isQuestion) =3D=3D 'string' ? =
isQuestion : (isQuestion ? "true" : "false");
            data.IsPoll =3D typeof (isPoll) =3D=3D 'string' ? isPoll : =
(isPoll ? "true" : "false");
            if (typeof (section) !=3D "undefined") {
                data.Section =3D section;
            }
            if (typeof (categories) !=3D "undefined") {
                data.Categories =3D categories;
            }
            this.UpdateForumDiscussionAction =3D data;
        }
    };

    //Adds/Updates a Forum Post's meta data. If the key is a =
ForumDiscussionKey, it will be added as a new Post.
    //If the key is a ForumPostKey, the existing forum post will be =
updated.
    UpdateForumPostAction =3D Class();
    UpdateForumPostAction.prototype =3D {
        initialize: function(key, title, body, isQuestion) {
            var data =3D new Object();
            data.TargetThis =3D key;
            data.Title =3D title;
            data.Body =3D body;
            data.IsQuestion =3D isQuestion;
            this.UpdateForumPostAction =3D data;
        }
    };

    //Updates a Forum Discussion's Sticky flag
    ForumToggleDiscussionStickyAction =3D Class();
    ForumToggleDiscussionStickyAction.prototype =3D {
        initialize: function(discussionKey) {
            var data =3D new Object();
            data.DiscussionKey =3D discussionKey;
            this.ForumToggleDiscussionStickyAction =3D data;
        }
    };

    //Opens/Closes a Forum Discussion
    ForumToggleDiscussionClosedAction =3D Class();
    ForumToggleDiscussionClosedAction.prototype =3D {
        initialize: function(discussionKey) {
            var data =3D new Object();
            data.DiscussionKey =3D discussionKey;
            this.ForumToggleDiscussionClosedAction =3D data;
        }
    };

    //Retrieves a paginated list of Discussions for a particular Forum
    ForumDiscussionsPage =3D Class();
    ForumDiscussionsPage.prototype =3D {
        initialize: function(forumKey, numberPerPage, oneBasedOnPage, =
sort) {
            var data =3D new Object();
            data.ForumKey =3D forumKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            this.ForumDiscussionsPage =3D data;
        }
    };

    //Retrieves a paginated list of Posts for a particular Forum
    ForumPostsPage =3D Class();
    ForumPostsPage.prototype =3D {
        initialize: function(forumDiscussionKey, numberPerPage, =
oneBasedOnPage, sort, findPostKey) {
            var data =3D new Object();
            data.DiscussionKey =3D forumDiscussionKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            data.FindPostKey =3D findPostKey;
            this.ForumPostsPage =3D data;
        }
    };

    //Retrieves a paginated list of forums for a particular category
    ForumCategoriesPage =3D Class();
    ForumCategoriesPage.prototype =3D {
        initialize: function(numberPerPage, oneBasedOnPage) {
            var data =3D new Object();
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            this.ForumCategoriesPage =3D data;
        }
    };

    //Retrieves a paginated list of forums for a particular category
    ForumsPage =3D Class();
    ForumsPage.prototype =3D {
        initialize: function(categoryKey, numberPerPage, oneBasedOnPage, =
sort) {
            var data =3D new Object();
            data.ForumCategoryKey =3D categoryKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            this.ForumsPage =3D data;
        }
    };

    ForumSearchAction =3D Class();
    ForumSearchAction.prototype =3D {
        initialize: function(searchKey, searchString, numberPerPage, =
onPage) {
            var data =3D new Object();
            data.TargetThis =3D searchKey;
            data.SearchString =3D searchString;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.ForumSearchAction =3D data;
        }
    };

    // Retrieves a paginated list of community groups
    CommunityGroupPage =3D Class();
    CommunityGroupPage.prototype =3D {
        initialize: function(numberPerPage, oneBasedOnPage, sort, =
section) {
            var data =3D new Object();
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            if ((typeof (section) =3D=3D 'undefined') || (section =3D=3D =
null)) {
                // Default section to All
                section =3D new Section("All");
            }
            data.Section =3D section;
            this.CommunityGroupPage =3D data;
        }
    };

    // Retrieves a paginated list of community groups
    CommunityGroupMembership =3D Class();
    CommunityGroupMembership.prototype =3D {
        initialize: function(groupKey, userKey) {
            var data =3D new Object();
            data.CommunityGroupKey =3D groupKey;
            data.UserKey =3D userKey;
            this.CommunityGroupMembership =3D data;
        }
    };


    // Retrieves a paginated list of community groups
    CommunityGroupMembershipPage =3D Class();
    CommunityGroupMembershipPage.prototype =3D {
        initialize: function(key, numberPerPage, oneBasedOnPage, sort, =
membershipFilter) {
            var data =3D new Object();
            data.Key =3D key;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            data.MembershipFilter =3D membershipFilter;
            this.CommunityGroupMembershipPage =3D data;
        }
    };

    // Retrieves a paginated list of registrants
    CommunityGroupRegistrantPage =3D Class();
    CommunityGroupRegistrantPage.prototype =3D {
        initialize: function(key, numberPerPage, oneBasedOnPage, sort) {
            var data =3D new Object();
            data.CommunityGroupKey =3D key;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            this.CommunityGroupRegistrantPage =3D data;
        }
    };

    // Retrieves a paginated list of banned users
    CommunityGroupBannedUserPage =3D Class();
    CommunityGroupBannedUserPage.prototype =3D {
        initialize: function(key, numberPerPage, oneBasedOnPage, sort) {
            var data =3D new Object();
            data.CommunityGroupKey =3D key;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            this.CommunityGroupBannedUserPage =3D data;
        }
    };

    // Retrieves a paginated list of invited users
    CommunityGroupInvitedUserPage =3D Class();
    CommunityGroupInvitedUserPage.prototype =3D {
        initialize: function(key, numberPerPage, oneBasedOnPage, sort) {
            var data =3D new Object();
            data.CommunityGroupKey =3D key;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            this.CommunityGroupInvitedUserPage =3D data;
        }
    };



    // Creates a new or updates an existing community group
    UpdateCommunityGroupAction =3D Class();
    UpdateCommunityGroupAction.prototype =3D {
        initialize: function(key, title, description, categories, =
visibility, bookmarks, section, photoKey) {
            var data =3D new Object();
            data.CommunityGroupKey =3D key;
            data.Title =3D title;
            data.Description =3D description;
            data.Categories =3D categories;
            data.Visibility =3D visibility,
        data.Bookmarks =3D bookmarks;
            data.Section =3D section;
            data.PhotoKey =3D photoKey;
            this.UpdateCommunityGroupAction =3D data;
        }
    };

    // Updates an existing commnity group's bookmarks
    UpdateCommunityGroupBookmarksAction =3D Class();
    UpdateCommunityGroupBookmarksAction.prototype =3D {
        initialize: function(key, bookmarks) {
            var data =3D new Object();
            data.CommunityGroupKey =3D key;
            data.Bookmarks =3D bookmarks;
            this.UpdateCommunityGroupBookmarksAction =3D data;
        }
    };

    // Creates or updates a user's membership in a group, with options =
to ban the user from the group.
    UpdateCommunityGroupMembershipAction =3D Class();
    UpdateCommunityGroupMembershipAction.prototype =3D {
        initialize: function(communityGroupKey, userKey, membershipTier, =
isBanned, banMessage) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.UserKey =3D userKey;
            data.MembershipTier =3D membershipTier;
            data.IsBanned =3D isBanned;
            data.BanMessage =3D banMessage;
            this.UpdateCommunityGroupMembershipAction =3D data;
        }
    };

    // Enables a user to request membership in a community group or an =
admin to invite a non-member.
    RequestCommunityGroupMembershipAction =3D Class();
    RequestCommunityGroupMembershipAction.prototype =3D {
        initialize: function(communityGroupKey, userKey, message) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.UserKey =3D userKey;
            data.Message =3D message;
            this.RequestCommunityGroupMembershipAction =3D data;
        }
    };

    //Retrieves a paginated list of Events for a particular EventSetKey
    EventsPage =3D Class();
    EventsPage.prototype =3D {
        initialize: function(eventSetKey, startDate, endDate, =
numberPerPage, oneBasedOnPage, sort) {
            var data =3D new Object();
            data.EventSetKey =3D eventSetKey;
            data.StartDate =3D startDate;
            data.EndDate =3D endDate;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D oneBasedOnPage;
            data.Sort =3D sort;
            this.EventsPage =3D data;
        }
    };

    // Update or creates an Event, key can be either an EventKey (update =
case)
    // or an EventSetKey (create case)
    UpdateEventAction =3D Class();
    UpdateEventAction.prototype =3D {
        initialize: function(key, title, description, location, =
bookmarkName, bookmarkUrl, startDate, endDate, utcOffset) {
            var data =3D new Object();
            data.TargetThis =3D key;
            data.Title =3D title;
            data.Description =3D description;
            data.Location =3D location;
            data.BookmarkName =3D bookmarkName;
            data.BookmarkUrl =3D bookmarkUrl;
            data.StartDate =3D startDate;
            data.EndDate =3D endDate;
            data.UtcOffset =3D utcOffset;
            this.UpdateEventAction =3D data;
        }
    };


    // Retrieve a paginated list of recent group activities
    RecentMiniFeedActivity =3D Class();
    RecentMiniFeedActivity.prototype =3D {
        initialize: function(communityGroupKey, onPage, numberPerPage) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.OnPage =3D onPage;
            data.NumberPerPage =3D numberPerPage
            this.RecentMiniFeedActivity =3D data;
        }
    }

    //Retrieve a list of Most Active Users in a CommunityGroup
    CommunityGroupMostActiveMembers =3D Class();
    CommunityGroupMostActiveMembers.prototype =3D {
        initialize: function(communityGroupKey, age, =
maximumNumberOfMembers) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.Age =3D age;
            data.MaximumNumberOfMembers =3D maximumNumberOfMembers
            this.CommunityGroupMostActiveMembers =3D data;
        }
    }

    // perform a search for content within a specific community group
    CommunityGroupSearchAction =3D Class();
    CommunityGroupSearchAction.prototype =3D {
        initialize: function(communityGroupKey, searchType, =
searchString, numberPerPage, onPage) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.SearchType =3D searchType;
            data.SearchString =3D searchString;
            data.OnPage =3D onPage;
            data.NumberPerPage =3D numberPerPage;
            this.CommunityGroupSearchAction =3D data;
        }
    }

    // perform a search for content within a specific community group
    RequestDeleteCommunityGroupAction =3D Class();
    RequestDeleteCommunityGroupAction.prototype =3D {
        initialize: function(communityGroupKey, deleteReason) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.DeleteReason =3D deleteReason;
            this.RequestDeleteCommunityGroupAction =3D data;
        }
    }

    CommunityGroupRecentForumDiscussions =3D Class();
    CommunityGroupRecentForumDiscussions.prototype =3D {
        initialize: function(communityGroupKey, age, =
maximumNumberOfDiscussions) {
            var data =3D new Object();
            data.CommunityGroupKey =3D communityGroupKey;
            data.Age =3D age;
            data.MaximumNumberOfDiscussions =3D =
maximumNumberOfDiscussions;
            this.CommunityGroupRecentForumDiscussions =3D data;
        }
    }


    SystemTimeInfo =3D Class();
    SystemTimeInfo.prototype =3D {
        initialize: function() {
            var data =3D new Object();
            this.SystemTimeInfo =3D data;
        }
    }

    PrivateMessageFolderList =3D Class();
    PrivateMessageFolderList.prototype =3D {
        initialize: function() {
            var data =3D new Object();
            this.PrivateMessageFolderList =3D data;
        }
    }


    PrivateMessage =3D Class();
    PrivateMessage.prototype =3D {
        initialize: function(folderID, messageID) {
            var data =3D new Object();
            data.FolderID =3D folderID;
            data.MessageID =3D messageID;
            this.PrivateMessage =3D data;
        }
    }

    PrivateMessagePage =3D Class();
    PrivateMessagePage.prototype =3D {
        initialize: function(folderID, numberPerPage, onPage, =
messageReadState) {
            var data =3D new Object();
            data.FolderID =3D folderID;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.MessageReadState =3D messageReadState;
            this.PrivateMessagePage =3D data;
        }
    }

    PrivateMessageSendAction =3D Class();
    PrivateMessageSendAction.prototype =3D {
        initialize: function(subject, body, recipientList) {
            var data =3D new Object();
            data.Subject =3D subject;
            data.Body =3D body;
            data.RecipientList =3D recipientList;
            this.PrivateMessageSendAction =3D data;
        }
    }

    PrivateMessageMoveMessageAction =3D Class();
    PrivateMessageMoveMessageAction.prototype =3D {
        initialize: function(sourceFolderID, destinationFolderID, =
messageIDList) {
            var data =3D new Object();
            data.SourceFolderID =3D sourceFolderID;
            data.DestinationFolderID =3D destinationFolderID;
            data.MessageIDList =3D messageIDList;
            this.PrivateMessageMoveMessageAction =3D data;
        }
    }

    PrivateMessageDeleteMessageAction =3D Class();
    PrivateMessageDeleteMessageAction.prototype =3D {
        initialize: function(sourceFolderID, messageIDList) {
            var data =3D new Object();
            data.SourceFolderID =3D sourceFolderID;
            data.MessageIDList =3D messageIDList;
            this.PrivateMessageDeleteMessageAction =3D data;
        }
    }

    PrivateMessageEmptyTrashAction =3D Class();
    PrivateMessageEmptyTrashAction.prototype =3D {
        initialize: function() {
            var data =3D new Object();
            this.PrivateMessageEmptyTrashAction =3D data;
        }
    }


    PrivateMessageCreateFolderAction =3D Class();
    PrivateMessageCreateFolderAction.prototype =3D {
        initialize: function() {
            var data =3D new Object();
            data.FolderID =3D "Inbox";
            this.PrivateMessageCreateFolderAction =3D data;
        }
    }

    FirstUnreadPost =3D Class();
    FirstUnreadPost.prototype =3D {
        initialize: function(discussionKey, numberPerPage, sort) {
            var data =3D new Object();
            data.DiscussionKey =3D discussionKey;
            data.NumberPerPage =3D numberPerPage;
            data.Sort =3D sort;
            this.FirstUnreadPost =3D data;
        }
    }

    LatestPost =3D Class();
    LatestPost.prototype =3D {
        initialize: function(discussionKey, numberPerPage, sort) {
            var data =3D new Object();
            data.DiscussionKey =3D discussionKey;
            data.NumberPerPage =3D numberPerPage;
            data.Sort =3D sort;
            this.LatestPost =3D data;
        }
    }

    UpdateDiscussionLastReadAction =3D Class();
    UpdateDiscussionLastReadAction.prototype =3D {
        initialize: function(discussionKey, postKey, forceUpdate) {
            var data =3D new Object();
            data.DiscussionKey =3D discussionKey;
            if (postKey) {
                data.ForumPostKey =3D postKey;
            }
            if (forceUpdate) {
                data.ForceUpdate =3D true;
            }
            else {
                data.ForceUpdate =3D false;
            }
            this.UpdateDiscussionLastReadAction =3D data;
        }
    }

    UpdateForumAllReadAction =3D Class();
    UpdateForumAllReadAction.prototype =3D {
        initialize: function(forumKey) {
            var data =3D new Object();
            data.ForumKey =3D forumKey;
            this.UpdateForumAllReadAction =3D data;
        }
    }

    UpdateCategoryAllReadAction =3D Class();
    UpdateCategoryAllReadAction.prototype =3D {
        initialize: function(categoryKey) {
            var data =3D new Object();
            data.ForumCategoryKey =3D categoryKey;
            this.UpdateCategoryAllReadAction =3D data;
        }
    }

    UpdateExternalUserIdAction =3D Class();
    UpdateExternalUserIdAction.prototype =3D {
        initialize: function(externalSiteName, externalSiteUserId, =
forUser) {
            var data =3D new Object();
            data.ExternalSiteName =3D externalSiteName;
            data.ExternalSiteUserId =3D externalSiteUserId;
            data.ForUser =3D forUser;
            this.UpdateExternalUserIdAction =3D data;
        }
    }

    UpdateSubscriptionAction =3D Class();
    UpdateSubscriptionAction.prototype =3D {
        initialize: function(discussionKey, subscribe) {
            var data =3D new Object();
            data.DiscussionKey =3D discussionKey;
            data.Subscribe =3D subscribe;
            this.UpdateSubscriptionAction =3D data;
        }
    }

    UpdatePollAction =3D Class();
    UpdatePollAction.prototype =3D {
        initialize: function(pollOnKey, question, answers) {
            var data =3D new Object();
            data.PollOnKey =3D pollOnKey;
            data.Question =3D question;
            data.Answers =3D answers;
            this.UpdatePollAction =3D data;
        }
    }

    TogglePollIsClosedAction =3D Class();
    TogglePollIsClosedAction.prototype =3D {
        initialize: function(pollKey) {
            var data =3D new Object();
            data.ToggleThisPoll =3D pollKey;
            this.TogglePollIsClosedAction =3D data;
        }
    }

    PostPollAnswerAction =3D Class();
    PostPollAnswerAction.prototype =3D {
        initialize: function(pollToAnswer, indexOfAnswer) {
            var data =3D new Object();
            data.PollToAnswer =3D pollToAnswer;
            data.IndexOfAnswer =3D indexOfAnswer;
            this.PostPollAnswerAction =3D data;
        }
    }

    PollPage =3D Class();
    PollPage.prototype =3D {
        initialize: function(pollOnKey, numberPerPage, onPage, sort) {
            var data =3D new Object();
            data.PollOnKey =3D pollOnKey;
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Sort =3D sort;
            this.PollPage =3D data;
        }
    }

    CheckFilteredWords =3D Class();
    CheckFilteredWords.prototype =3D {
        initialize: function(keyValueDictionary) { // key is the string =
ID, value is the string to be checked - formatted like { =
"key1":"string1", "key2":"string2" }.
            var data =3D new Object();
            data.WordDictionary =3D keyValueDictionary;
            this.CheckFilteredWords =3D data;
        }
    }

    //Points&Badging
    AwardPointsAction =3D Class();
    AwardPointsAction.prototype =3D {
        initialize: function(userKey, points, currencyType) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.Points =3D points;
            data.CurrencyType =3D currencyType;
            this.AwardPointsAction =3D data;
        }
    }

    BadgeFamily =3D Class();
    BadgeFamily.prototype =3D {
        initialize: function(badgeFamilyKey) {
            var data =3D new Object();
            data.BadgeFamilyKey =3D badgeFamilyKey;
            this.BadgeFamily =3D data;
        }
    }

    BadgeFamilies =3D Class();
    BadgeFamilies.prototype =3D {
        initialize: function() {
            var data =3D new Object();
            this.BadgeFamilies =3D data;
        }
    }

    BadgingEventAction =3D Class();
    BadgingEventAction.prototype =3D {
        initialize: function(activityName, activityTags, userTags) {
            var data =3D new Object();
            data.ActivityName =3D activityName;
            data.ActivityTags =3D activityTags
            data.UserTags =3D userTags;
            this.BadgingEventAction =3D data;
        }
    }

    GrantBadgeAction =3D Class();
    GrantBadgeAction.prototype =3D {
        initialize: function(userKey, badgeFamilyKey, badgeKey) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.BadgeFamilyKey =3D badgeFamilyKey
            data.BadgeKey =3D badgeKey;
            this.GrantBadgeAction =3D data;
        }
    }

    Leaderboard =3D Class();
    Leaderboard.prototype =3D {
        initialize: function(leaderboardKey) {
            var data =3D new Object();
            data.LeaderboardKey =3D leaderboardKey;
            this.Leaderboard =3D data;
        }
    }

    Leaderboards =3D Class();
    Leaderboards.prototype =3D {
        initialize: function() {
            var data =3D new Object();
            this.Leaderboards =3D data;
        }
    }

    LeaderboardRankingsPage =3D Class();
    LeaderboardRankingsPage.prototype =3D {
        initialize: function(leaderboardKey, oneBasedOnPage) {
            var data =3D new Object();
            data.LeaderboardKey =3D leaderboardKey;
            data.OnPage =3D oneBasedOnPage;
            this.LeaderboardRankingsPage =3D data;
        }
    }

    RevokeBadgeAction =3D Class();
    RevokeBadgeAction.prototype =3D {
        initialize: function(userKey, badgeFamilyKey, badgeKey) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            data.BadgeFamilyKey =3D badgeFamilyKey
            data.BadgeKey =3D badgeKey;
            this.RevokeBadgeAction =3D data;
        }
    }

    PointsAndBadgingRuleValidationAction =3D Class();
    PointsAndBadgingRuleValidationAction.prototype =3D {
        initialize: function(rules) {
            var data =3D new Object();
            data.Rules =3D rules;
            this.PointsAndBadgingRuleValidationAction =3D data;
        }
    }

    AbuseItemPage =3D Class();
    AbuseItemPage.prototype =3D {
        initialize: function(numberPerPage, onPage, section, =
maxReportsPerItem) {
            var data =3D new Object();
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            data.Section =3D section;
            data.MaxReportsPerItem =3D maxReportsPerItem;
            this.AbuseItemPage =3D data;
        }
    }

    AbuseItem =3D Class();
    AbuseItem.prototype =3D {
        initialize: function(targetKey) {
            var data =3D new Object();
            data.TargetKey =3D targetKey;
            this.AbuseItem =3D data;
        }
    }

    ClearAbuseAction =3D Class();
    ClearAbuseAction.prototype =3D {
        initialize: function(targetKey) {
            var data =3D new Object();
            data.TargetKey =3D targetKey;
            this.ClearAbuseAction =3D data;
        }
    }

    SetCommentBlockingStateAction =3D Class();
    SetCommentBlockingStateAction.prototype =3D {
        initialize: function(commentKey, blockingState) {
            var data =3D new Object();
            data.CommentKey =3D commentKey;
            data.CommentBlockingState =3D blockingState;
            this.SetCommentBlockingStateAction =3D data;
        }
    }
    //Community feed
    CommunityFeedRequest =3D Class();
    CommunityFeedRequest.prototype =3D {
        initialize: function(activityForTypes, count) {
            var data =3D new Object();
            data.ActivityForTypes =3D activityForTypes;
            data.Count =3D count;
            this.CommunityFeedRequest =3D data;
        }
    }

    // updates the flag on individual content as to
    // whether or not the content will be included in
    // discovery results
    UpdateDiscoveryFilterFlagOnContentAction =3D Class();
    UpdateDiscoveryFilterFlagOnContentAction.prototype =3D {
        initialize: function(content, excludeContentFlag, siteList) {
            var data =3D new Object();
            data.DiscoveryFilterFlagExcludeThisContent =3D content;
            data.ExcludeContentFlag =3D excludeContentFlag;
            data.SiteList =3D siteList;
            this.UpdateDiscoveryFilterFlagOnContentAction =3D data;
        }
    };

    SendTwitterMessageAction =3D Class();
    SendTwitterMessageAction.prototype =3D {
        initialize: function(message, url, template) {
            var data =3D new Object();
            data.Message =3D message;
            data.Url =3D url;
            data.Template =3D template;
            this.SendTwitterMessageAction =3D data;
        }
    }

    UserTwitterStatus =3D Class();
    UserTwitterStatus.prototype =3D {
        initialize: function(userKey) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            this.UserTwitterStatus =3D data;
        }
    }


    UserTwitterFriends =3D Class();
    UserTwitterFriends.prototype =3D {
        initialize: function(numberPerPage, onPage) {
            var data =3D new Object();
            data.NumberPerPage =3D numberPerPage;
            data.OnPage =3D onPage;
            this.UserTwitterFriends =3D data;
        }
    }

    UserExtendedPrefs =3D Class();
    UserExtendedPrefs.prototype =3D {
        initialize: function(userKey) {
            var data =3D new Object();
            data.UserKey =3D userKey;
            this.UserExtendedPrefs =3D data;
        }
    }
    FriendFeedRequest =3D Class();
    FriendFeedRequest.prototype =3D {
        initialize: function(forUserKey, pageNumber) {
            var data =3D new Object();
            data.ForUserKey =3D forUserKey;
            data.PageNumber =3D pageNumber;
            this.FriendFeedRequest =3D data;
        }
    }
   =20
    AddFriendFeedReactionRequest =3D Class();
    AddFriendFeedReactionRequest.prototype =3D {
        initialize: function(reactionOnKey, authorUserKey, body) {
            var data =3D new Object();
            data.ReactionOnKey =3D reactionOnKey;
            data.AuthorKey =3D authorUserKey;
            data.Body =3D body;
            this.AddFriendFeedReactionRequest =3D data;
	}
    }
   =20
    UpdateUserExtendedPrefAction =3D Class();
    UpdateUserExtendedPrefAction.prototype =3D {
        initialize: function(name, value) {
            var data =3D new Object();
            data.PrefName =3D name;
            data.PrefValue =3D value;
            this.UpdateUserExtendedPrefAction =3D data;
        }
    }
   =20
    UpdateUserPathRequest =3D Class();
    UpdateUserPathRequest.prototype =3D {
        initialize: function(userKey, path){
            var data =3D new Object();
            data.User =3D userKey;
            data.Path =3D path;
            this.UpdateUserPathRequest =3D data;
        }
    }
   =20
    DeleteFriendFeedReactionRequest =3D Class();
    DeleteFriendFeedReactionRequest.prototype =3D {
        initialize: function(onFeedActivityKey, reactionKey) {
            var data =3D new Object();
            data.ReactionOnKey =3D onFeedActivityKey;
            data.ReactionKey =3D reactionKey;
            this.DeleteFriendFeedReactionRequest =3D data;
        }
    }
   =20
    UsersForPathRequest =3D Class();
    UsersForPathRequest.prototype =3D {
        initialize: function(forPath, includeSubPaths){
            var data =3D new Object();
            data.Path =3D forPath;
            data.IncludeSubPaths =3D includeSubPaths;
            this.UsersForPathRequest =3D data;
        }
    }
   =20
    SetFriendFeedUserVisibilityRequest =3D Class();
    SetFriendFeedUserVisibilityRequest.prototype =3D {
        initialize: function(feedOwner, forUser, isVisible){
            var data =3D new Object();
            data.FeedOwnerUserKey =3D feedOwner;
            data.ForUserKey =3D forUser;
            data.Visible =3D isVisible;
            this.SetFriendFeedUserVisibilityRequest =3D data;
        }
    }
   =20
    HiddenFriendFeedUsersRequest =3D Class();
    HiddenFriendFeedUsersRequest.prototype =3D {
        initialize: function(forUserKey){
            var data =3D new Object();
            data.ForUserKey =3D forUserKey;
            this.HiddenFriendFeedUsersRequest =3D data;
	}
    }
   =20
    PathForUserRequest =3D Class();
    PathForUserRequest.prototype =3D {
        initialize: function(forUserKey){
            var data =3D Object();
            data.User =3D forUserKey;
            this.PathForUserRequest =3D data;
        }
    }
})();
document.domain =3D "sfgate.com";

var slFacebookProxy =3D function(){
	this.ApiKey =3D "29547cbcea476b5f36f2aa1e8fc469b7";
	this.Templates =3D {
							'ArticleComment' : '99213245594'			};

	this.connectStatus =3D null;
};

slFacebookProxy.prototype.loadScript =3D function(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);
}

slFacebookProxy.prototype.init =3D function(callback, iterCount){
	// If no API key, do nothing, call callback immediately.
	if(!this.ApiKey || this.ApiKey =3D=3D ""){
		if(callback) callback();
		return;
	}
	if (!iterCount){
		iterCount =3D 0;
	}
	if (iterCount > 10){
		return; // give up
	}
	var me =3D this;
	//Crazy hack for removing document.write
	if(!document.getElementById("FB_HiddenContainer")){
		try{
			if(!window.document.body){
				document.write('<div style=3D"position: absolute; top: -10000px; =
left: -10000px; width: 0px; height: 0px;" =
id=3D"FB_HiddenContainer"></div>');
			}
			else{
				var fbHiddenDiv =3D document.createElement("div");
				fbHiddenDiv.id =3D "FB_HiddenContainer";
				fbHiddenDiv.style.position =3D "absolute";
				fbHiddenDiv.style.left =3D "-10000px";
				fbHiddenDiv.style.top =3D "-10000px";
				fbHiddenDiv.style.width =3D "0px";
				fbHiddenDiv.style.height =3D "0px";
				window.document.body.insertBefore(fbHiddenDiv, =
window.document.body.firstChild);
			}
		}
		catch(e){
			setTimeout(function(){
				me.init(callback, ++iterCount);
			}, 100);
			return;
		}
	}

	// Race condition where Fb isn't loaded yet...
	if(!window.FB){
		if(this.alreadyIncludedFeatureLoader){
			setTimeout(function(){
				me.init(callback, ++iterCount);
			}, 100);
		}
		else{
			=
this.loadScript('http://www.connect.facebook.com/js/api_lib/v0.4/FeatureL=
oader.js.php', function(){
				me.init(callback, ++iterCount);
			});
			this.alreadyIncludedFeatureLoader =3D true;
		}
		return;
	}

	if(!this.initialized){
		this.initialized =3D true;
		FB.init("29547cbcea476b5f36f2aa1e8fc469b7", "/FacebookXd.html");
	}

	FB.ensureInit(function(){
		// Get current status
		FB.Connect.get_status().waitUntilReady(function( status ){
			me.connectStatus =3D status;

			if(callback){
				callback();
			}
		});
	});
};

// Initialize a global facebook API
var slFB =3D new slFacebookProxy();

slFacebookProxy.prototype.linkImages =3D function(images, url){
	var fb_images =3D [];
	for(i=3D0; i<images.length; i++){
		fb_images.push({'src': images[i], 'href': url});

	}
	return fb_images;
};

slFacebookProxy.prototype.trunc =3D function(text, maxLen){
	if(!maxLen){
		maxLen =3D 200;
	}

	if(text.length > maxLen){
		text =3D text.substring(0, maxLen);
		text =3D text + "...";
	}

	return text;
};

// New since Facebook depreciated FB.Connect.showFeedDialog....
// template_name is totally ignored.
// variables: Now includes some special values...
//    name : the title of the article (we used to call it "Title".  We =
accept both (for now))
//    href : link to the article (we used to call it "URL")
//    description : Body of the article (we used to call it =
"Comment_Body")
//    caption : "{*actor*} commented on an article" or whatever.  used =
to be part of template bundle.
//    media : Images and stuff.  Array of {'type' : 'image', 'src' : =
image src, 'href' : url to link}
//    action_links : array like: {'text': 'Read the full article', =
'href' : url}
//    share_text : prompt to the user ("Share this comment on Facebook")
//
slFacebookProxy.prototype.submitFeedStory =3D function(template_name, =
variables, callback, userComment){
	var me =3D this;
	if(!this.ApiKey || this.ApiKey =3D=3D ""){
		if(callback) callback();
		return;
	}
=09
	// Convert older parameters from the TemplateBundles days...
	if(variables){
		variables["name"] =3D variables["name"] || variables["Title"];
		variables["href"] =3D variables["href"] || variables["URL"];
		variables["description"] =3D variables["description"] || =
variables["Comment_Body"];
	}
=09
	this.init(function(){
		FB.Connect.streamPublish(userComment, variables, =
variables["action_links"], null, variables["share_text"], callback, =
true);=09
	});
};

slFacebookProxy.prototype.submitArticleComment =3D function(title, url, =
excerpt, comment_body, images, callback){
	var me =3D this;
	if(!this.ApiKey || this.ApiKey =3D=3D ""){
		if(callback) callback();
		return;
	}
=09
	var variables =3D {
		'name' : title,
		'href' : url,
		'description' : me.trunc(excerpt)
	}
=09
	// setup images if there are any...
	if(images && images.length > 0){
		variables['media'] =3D [];
		for(var i=3D0; i<images.length; i++){
			variables['media'].push({'type' : 'image', 'src' : images[i], 'href' =
: url});
		}
	}
=09
	variables['action_links'] =3D [{'text': 'Read the full article', 'href' =
: url}];
=09
	this.submitFeedStory("ArticleComment", variables, callback, =
comment_body);
};

slFacebookProxy.prototype.getUrlParameters =3D function(url){
	var ret =3D {};
	var params =3D null;

	var startPos =3D url.indexOf('?');
	if(startPos >=3D 0){
		var endPos =3D url.indexOf('#');
		if(endPos < startPos){
			endPos =3D url.length;
		}

		params =3D url.substring(startPos+1, endPos);

		var splitParams =3D params.split("&");
		for(i=3D0; i<splitParams.length; i++){
			var kvp =3D splitParams[i].split('=3D');
			if(kvp[0]){
				ret[kvp[0]] =3D kvp[1] || "";
			}
		}
	}

	return ret;
};

slFacebookProxy.prototype.showInviteFriendsDialog =3D function(title, =
header, invite_text, next_page, type, accept_text, accept_url){
	var params =3D this.getUrlParameters(next_page);
	this.init(function(){
	    var the_fbml =3D "";
		the_fbml +=3D '<fb:fbml>';
		the_fbml +=3D '	<fb:request-form style=3D"width: 750px; height: =
660px;" action=3D"' + next_page + '" method=3D"GET" invite=3D"true" =
type=3D"' + type + '" content=3D"' + invite_text + ' <fb:req-choice =
url=3D\'' + accept_url + '\' label=3D\'' + accept_text + '\'/>">';

		// add input params
		for(var i in params){
			the_fbml +=3D '<input type=3D"hidden" name=3D"'+i+'" =
value=3D"'+params[i]+'">';
		}

		the_fbml +=3D	'		<fb:multi-friend-selector showborder=3D"false" =
bypass=3D"cancel" actiontext=3D"' + header + '"/>';
		the_fbml +=3D '	</fb:request-form>';
		the_fbml +=3D '</fb:fbml>';

		var dlg =3D new FB.UI.FBMLPopupDialog(title, the_fbml);
		dlg.setContentWidth(750);
		dlg.setContentHeight(660);
		dlg.set_placement(FB.UI.PopupPlacement.center);
		dlg.show();
	});
};

slFacebookProxy.prototype.isLoggedIn =3D function(){
	return (this.connectStatus !=3D FB.ConnectState.userNotLoggedIn);
};

slFacebookProxy.prototype.currentUserFacebookId =3D function(){
	//return this.currentUserId;
	if(FB.Facebook.apiClient.get_session()){
		return FB.Facebook.apiClient.get_session().uid;
	}

	else return null;
};

slFacebookProxy.prototype.isConnectedUser =3D function(){
	return (this.connectStatus =3D=3D FB.ConnectState.connected);
};

slFacebookProxy.prototype.connectEnabled =3D function(){
	return (this.ApiKey !=3D "");
};

slFacebookProxy.prototype.renderFbml =3D function(){
	FB.XFBML.Host.parseDomTree();
};

slFacebookProxy.prototype.onLogin =3D function(callback){
	this.init(function(){
		FB.Facebook.get_sessionWaitable().waitUntilReady( callback );
	});
};

slFacebookProxy.prototype.queryConnectStatus =3D function(callback){
	this.init(function(){
		FB.Connect.get_status().waitUntilReady( callback );
	});
};

slFacebookProxy.prototype.login =3D function(callback){
	var me =3D this;
	this.init(function(){
		FB.Connect.requireSession(function(){
			FB.Connect.get_status().waitUntilReady(function( status ){
				me.connectStatus =3D status;

				if(callback){
					me.onLogin(callback);
				}
			});
		});
	});
};

slFacebookProxy.prototype.logout =3D function(callback){
	this.init(function(){
		FB.Connect.logout(callback);
	});
};


var slTwitterProxy =3D function(){
	this.daapiUrl =3D "http://contribute.sfgate.com/ver1.0/Direct/Process";
};

// Post an arbitrary comment to twitter
//=20
// message: Your comment or whatever.  REQUIRED
// url: Long form of URL for a link to your comment. Default: ""
// template: a .NET style format string where {0} is the message and {1} =
is the URL.  default: "{0} {1}"
//
slTwitterProxy.prototype.sendMessage =3D function(message, url, =
template, callback){
	if(!url){
		url =3D "";
	}
	if(!template){
		template =3D "{0} {1}";
	}

	var request =3D new RequestBatch();
	request.AddToRequest(new SendTwitterMessageAction(message, url, =
template));
	request.BeginRequest(this.daapiUrl, callback);
};

slTwitterProxy.prototype.checkUserStatus =3D function(userKey, =
callback){
	var request =3D new RequestBatch();
	request.AddToRequest(new UserTwitterStatus(new UserKey(userKey)));
	request.BeginRequest(this.daapiUrl, function(responseBatch) {
      if(responseBatch.Responses && responseBatch.Responses[0] && =
responseBatch.Responses[0].UserTwitterStatus) {
          callback(true, =
responseBatch.Responses[0].UserTwitterStatus.Status);
      }
      else {
          callback(false);
      }
	});
};

slTwitterProxy.prototype.login =3D function(callback){
	var me =3D this;
	window.twitterAuthComplete =3D function(screenName){
	    // Convenient timeout just to put this in the right scope.
	    setTimeout(function(){
		    me.twitterLoginWindow.close();
        	=09
	        if(window.focus){
	            window.focus();
	        }
    	=09
		    if(callback){
			    callback(screenName);
		    }
		}, 1);
	};
=09
	me.twitterLoginWindow =3D =
window.open("http://contribute.sfgate.com/ver1.0/Persona/BeginTwitterAuth=
",'twitterLoginWindow','');
	return false;
};

slTwitterProxy.prototype.checkConnected =3D function(callback){
	var request =3D new RequestBatch();
	request.AddToRequest(new UserTwitterStatus(new UserKey()));
	request.BeginRequest(this.daapiUrl, function(responseBatch){
		if(responseBatch.Responses && responseBatch.Responses[0] && =
responseBatch.Responses[0].UserTwitterStatus){
			callback(true, =
responseBatch.Responses[0].UserTwitterStatus.ScreenName);
		}
		else{
			callback(false);
		}
	});
};

slTwitterProxy.prototype.setTweetMyCommentsPref =3D function(newValue, =
callback){
	this.extendedPrefs =3D null;
=09
	var stringValue =3D "False";
	if(newValue){
		stringValue =3D "True";
	}
=09
	var request =3D new RequestBatch();
	request.AddToRequest(new =
UpdateUserExtendedPrefAction("TweetMyComments", stringValue));
	request.BeginRequest(this.daapiUrl, callback);
};

slTwitterProxy.prototype.setPersonaTwitterWidgetPref =3D =
function(newValue, callback){
	this.extendedPrefs =3D null;

	var stringValue =3D "False";
	if(newValue){
		stringValue =3D "True";
	}
=09
	var request =3D new RequestBatch();
	request.AddToRequest(new =
UpdateUserExtendedPrefAction("PersonaTwitterWidget", stringValue));
	request.BeginRequest(this.daapiUrl, callback);
};

// Convenience function so we only end up requesting prefs from server =
once.
//
slTwitterProxy.prototype.getUserExtendedPrefs =3D function(callback){
	if(this.extendedPrefs){
		callback(this.extendedPrefs);
		return;
	}

	var me =3D this;
	var request =3D new RequestBatch();
	request.AddToRequest(new UserExtendedPrefs(new UserKey()));
	request.BeginRequest(this.daapiUrl, function(responseBatch){
		if(responseBatch && responseBatch.Responses && =
responseBatch.Responses[0]){
			me.extendedPrefs =3D =
responseBatch.Responses[0].UserExtendedPrefs.Prefs;
			callback(me.extendedPrefs);
		}
	});
}

slTwitterProxy.prototype.checkTweetMyCommentsPref =3D =
function(callback){
	this.getUserExtendedPrefs(function(prefs){
		if(!prefs || !prefs.TweetMyComments || prefs.TweetMyComments !=3D =
"True"){
			callback(false);
		}
		else{
			callback(true);
		}
	});
};

slTwitterProxy.prototype.checkPersonaTwitterWidgetPref =3D =
function(callback){
	this.getUserExtendedPrefs(function(prefs){
		if(!prefs || !prefs.PersonaTwitterWidget || prefs.PersonaTwitterWidget =
!=3D "True"){
			callback(false);
		}
		else{
			callback(true);
		}
	});
};

var slTwitter =3D new slTwitterProxy();=0A=
=0A=
////////////////////////////////////////////////////////////////////////=0A=
//  end: /templates/types/widgets/pages/cssjs/pluckjscache.tmpl=0A=
////////////////////////////////////////////////////////////////////////=0A=
=0A=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://imgs.sfgate.com/js1260434137/cssjs/js/comments/std.js

// js/utils/ck.js get/set cookies=0A=
=0A=
function sfgate_ck(name) {=0A=
    this.ck =3D name;=0A=
    this.val =3D this.get_ck(name);=0A=
    this.defined =3D (typeof this.val !=3D "undefined");=0A=
}=0A=
=0A=
sfgate_ck.prototype.get_ck =3D function (name) {=0A=
    var start_str =3D name+'=3D';=0A=
    var start =3D document.cookie.indexOf(start_str);=0A=
    if (start =3D=3D -1) {=0A=
        return;=0A=
    }=0A=
    start =3D start+start_str.length;=0A=
    var cookieVal =3D document.cookie.substr(start);=0A=
    var end =3D cookieVal.indexOf(';');=0A=
    if ( end !=3D -1 ) {=0A=
        cookieVal =3D cookieVal.substr(0,end);=0A=
    }=0A=
    if ( cookieVal.length =3D=3D 0 ) {=0A=
        return;=0A=
    }=0A=
    cookieVal =3D unescape(cookieVal);=0A=
    return cookieVal;=0A=
}=0A=
=0A=
sfgate_ck.prototype.set =3D function (val, domain, path, expire) {=0A=
    var ck_str =3D this.ck+'=3D'+val+'; domain=3D'+domain+'; =
path=3D'+path+'; expires=3D'+expire;=0A=
    document.cookie=3Dthis.ck+'=3D'+val+'; domain=3D'+domain+'; =
path=3D'+path+'; expires=3D'+expire;=0A=
}=0A=
=0A=
sfgate_ck.prototype.del =3D function () {=0A=
    var d =3D new Date();=0A=
    d.setFullYear(1970, 1, 1);=0A=
    this.set('1', '.sfgate.com', '/', d.toUTCString());=0A=
}=0A=
sfgate_ck.prototype.set_days =3D function (days, val) {=0A=
    var d =3D new Date();=0A=
    d.setDate(d.getDate()+days);=0A=
    this.set(val, '.sfgate.com', '/', d.toUTCString());=0A=
}=0A=
sfgate_ck.prototype.set_week_end =3D function (val) {=0A=
    var d=3D new Date(); var dd =3D d.getDay(); dd =3D (7-dd)%7;=0A=
    d.setDate(d.getDate()+dd); d.setHours(23);=0A=
    d.setMinutes(59);d.setSeconds(59);=0A=
    this.set(val, '.sfgate.com', '/', d.toUTCString());=0A=
}=0A=
sfgate_ck.prototype.set_day_end =3D function (val) {=0A=
    var d=3D new Date();=0A=
    d.setHours(23);d.setMinutes(59);d.setSeconds(59);=0A=
    this.set(val, '.sfgate.com', '/', d.toUTCString());=0A=
}=0A=
=0A=
// end js/utils/ck.js get/set cookies=0A=
=0A=
 document.domain=3D"sfgate.com";=0A=
=0A=
 function sfgate_comments_bodyonload() {=0A=
    try {=0A=
      if (sfgate_isActive) {=0A=
        sfgate_setFormState();=0A=
      }=0A=
      sfgate_presetCommentsPerPageLinks();=0A=
      sfgate_presetSortOrderLinks();=0A=
    } catch(err) {}=0A=
  }=0A=
=0A=
  var serverUrl          =3D sfgate_serverUrl;  =0A=
=0A=
  var sfgate_articleKey  =3D new ArticleKey(sfgate_file);=0A=
  var sfgate_user        =3D sfgate_un();=0A=
  var sfgate_userKey     =3D new UserKey(sfgate_user);=0A=
=0A=
  var sfgate_rowsPerPage =3D 10;=0A=
  var cpp_value          =3D 10;=0A=
=0A=
  var cgis =3D new Object();    // gets all cgi parameters=0A=
  sfgate_GetCgiParams();=0A=
=0A=
  function refreshCommentVariables() {=0A=
    sfgate_presetSortOrderLinks();=0A=
    sfgate_presetCommentsPerPageLinks();=0A=
    sfgate_pluck_pages_per =3D Math.ceil( (sfgate_cppg_count) / (10) ); =
// Number of pluck requests (max of 10 comments per request) to make per =
CGI page=0A=
  }=0A=
=0A=
  function clearDisplayedComments() {=0A=
    // There should probably be one seperate DIV with a unique ID for =
each Pluck page of comments (one for 1-10 and another for 11-20)=0A=
    // That would ensure correct sequence of display even if AJAX =
responses return in the wrong order=0A=
    // This will not be necessary for a max of 20 responses per page =
(since they can all be handled on the same BatchRequest/Response).=0A=
    sfgate_response_elm[0].innerHTML =3D '';=0A=
    sfgate_response_elm[1].innerHTML =3D '';=0A=
  }=0A=
=0A=
  function sfgate_sortOrderSet(newValueString) {=0A=
    if(newValueString =3D=3D 'TimeStampAscending' || newValueString =
=3D=3D 'TimeStampDescending' || newValueString =3D=3D =
'RecommendationsDescending') {=0A=
      document.getElementById('sfgate_comment_sorder').value =3D =
newValueString;=0A=
    } else {=0A=
      document.getElementById('sfgate_comment_sorder').value =3D =
'TimeStampDescending';=0A=
    }=0A=
=0A=
    =
sfgate_setSortOrderCookie(document.getElementById('sfgate_comment_sorder'=
).value);=0A=
    refreshCommentVariables();=0A=
=0A=
    window.location =3D sfgate_success_page+'&o=3D1';=0A=
    return false;=0A=
  }=0A=
=0A=
  function sfgate_setSortOrderCookie(withValue) {=0A=
    if(withValue =3D=3D 'TimeStampDescending' || withValue =3D=3D =
'TimeStampAscending' || withValue =3D=3D 'RecommendationsDescending') {=0A=
      var nextyear =3D new Date();=0A=
        nextyear.setDate(nextyear.getDate() + 365);=0A=
        document.cookie =3D 'comments_sort_order=3D' + escape( withValue =
) +=0A=
                  '; expires=3D' + nextyear.toUTCString() +=0A=
                  '; path=3D/' +=0A=
                  '; domain=3D.sfgate.com';=0A=
//      sfgate_comment_sort_o.value =3D withValue;=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_presetCSOandCPPValues() {=0A=
    sfgate_presetSortOrderLinks();=0A=
    sfgate_presetCommentsPerPageLinks();=0A=
  }=0A=
=0A=
  function sfgate_getSortOrderVal() {=0A=
    var cso_cookie_text =3D =
document.cookie.indexOf('comments_sort_order');=0A=
    var defaultCSOValue =3D 'TimeStampDescending';=0A=
    if (cso_cookie_text =3D=3D -1) {=0A=
      return defaultCSOValue;=0A=
    }=0A=
    sort_value =3D document.cookie.substr(cso_cookie_text + 20);=0A=
    cso_terminatingCharIndex =3D sort_value.indexOf(';');=0A=
    if(cso_terminatingCharIndex >=3D 0) {=0A=
      sort_value =3D sort_value.split(';')[0];=0A=
    }=0A=
    return sort_value;=0A=
  }=0A=
=0A=
  function sfgate_presetSortOrderLinks() {=0A=
    var cso_cookie_text =3D =
document.cookie.indexOf('comments_sort_order');=0A=
    var defaultCSOValue =3D 'TimeStampDescending';=0A=
    if (cso_cookie_text =3D=3D -1) {=0A=
      sfgate_setSortOrderCookie(defaultCSOValue);=0A=
    }=0A=
    sort_value =3D document.cookie.substr(cso_cookie_text + 20);=0A=
    cso_terminatingCharIndex =3D sort_value.indexOf(';');=0A=
    if(cso_terminatingCharIndex >=3D 0) {=0A=
      sort_value =3D sort_value.split(';')[0];=0A=
    }=0A=
    try {=0A=
      if(sort_value =3D=3D 'TimeStampDescending') {=0A=
        document.getElementById('oldest_first_span').innerHTML =3D '<a =
href=3D"javascript:void(0);" onclick=3D"return =
sfgate_sortOrderSet(\'TimeStampAscending\')">Oldest</a>';=0A=
        document.getElementById('newest_first_span').innerHTML =3D =
'<span style=3D"font-weight: bold;">Newest</span>';=0A=
        document.getElementById('most_recommended_span').innerHTML =3D =
'<a href=3D"javascript:void(0);" onclick=3D"return =
sfgate_sortOrderSet(\'RecommendationsDescending\')">Recommended</a>';=0A=
      } else if(sort_value =3D=3D 'RecommendationsDescending') {=0A=
        document.getElementById('oldest_first_span').innerHTML =3D '<a =
href=3D"javascript:void(0);" onclick=3D"return =
sfgate_sortOrderSet(\'TimeStampAscending\')">Oldest</a>';=0A=
        document.getElementById('newest_first_span').innerHTML =3D '<a =
href=3D"javascript:void(0);" onclick=3D"return =
sfgate_sortOrderSet(\'TimeStampDescending\')">Newest</a>';=0A=
        document.getElementById('most_recommended_span').innerHTML =3D =
'<span style=3D"font-weight: bold;">Recommended</span>';=0A=
      } else {=0A=
        sort_value =3D 'TimeStampAscending';=0A=
        document.getElementById('oldest_first_span').innerHTML =3D =
'<span style=3D"font-weight: bold;">Oldest</span>';=0A=
        document.getElementById('newest_first_span').innerHTML =3D '<a =
href=3D"javascript:void(0);" onclick=3D"return =
sfgate_sortOrderSet(\'TimeStampDescending\')">Newest</a>';=0A=
        document.getElementById('most_recommended_span').innerHTML =3D =
'<a href=3D"javascript:void(0);" onclick=3D"return =
sfgate_sortOrderSet(\'RecommendationsDescending\')">Recommended</a>';=0A=
      }=0A=
      sfgate_comment_sort =3D sort_value;=0A=
    } catch (e) {}=0A=
  }=0A=
=0A=
  function sfgate_commentsPerPageSet(newValueString) {=0A=
    if(newValueString =3D=3D '10' || newValueString =3D=3D '20') {=0A=
      document.getElementById('sfgate_comments_per_page').value =3D =
newValueString;=0A=
    }=0A=
    =
sfgate_setCommentsPerPageCookie(document.getElementById('sfgate_comments_=
per_page').value);=0A=
    sfgate_presetCommentsPerPageLinks();=0A=
=0A=
    refreshCommentVariables();=0A=
    window.location =3D sfgate_success_page+'&o=3D1';=0A=
=0A=
    return false;=0A=
  }=0A=
=0A=
  function sfgate_setCommentsPerPageCookie(withValue) {=0A=
    if(withValue =3D=3D '10' || withValue =3D=3D '20') {=0A=
      var nextyear =3D new Date();=0A=
        nextyear.setDate(nextyear.getDate() + 365);=0A=
        document.cookie =3D 'comments_per_pg=3D' + escape( withValue ) +=0A=
                  '; expires=3D' + nextyear.toUTCString() +=0A=
                  '; path=3D/' +=0A=
                  '; domain=3D.sfgate.com';=0A=
      document.getElementById('sfgate_comments_per_page').value =3D =
withValue;=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_presetCommentsPerPageLinks() {=0A=
    var ccpp_cookie_text =3D document.cookie.indexOf('comments_per_pg');=0A=
    var defaultCPPValue  =3D '10';=0A=
    if (ccpp_cookie_text =3D=3D -1) {=0A=
      sfgate_setCommentsPerPageCookie(defaultCPPValue);=0A=
    }=0A=
    cpp_value =3D document.cookie.substr(ccpp_cookie_text + 16);=0A=
    ccpp_terminatingCharIndex =3D cpp_value.indexOf(';');=0A=
    if(ccpp_terminatingCharIndex >=3D 0) {=0A=
      cpp_value =3D cpp_value.split(';')[0];=0A=
    }=0A=
    try {=0A=
      if(cpp_value =3D=3D '20') {=0A=
        document.getElementById('cpp_10_span').innerHTML =3D '<a =
href=3D"javascript:void(0);" onclick=3D"return =
sfgate_commentsPerPageSet(\'10\')">10</a>';=0A=
        document.getElementById('cpp_20_span').innerHTML =3D '<span =
style=3D"font-weight: bold;">20</span>';=0A=
      } else {=0A=
        cpp_value =3D '10';=0A=
        document.getElementById('cpp_20_span').innerHTML =3D '<a =
href=3D"javascript:void(0);" onclick=3D"return =
sfgate_commentsPerPageSet(\'20\')">20</a>';=0A=
        document.getElementById('cpp_10_span').innerHTML =3D '<span =
style=3D"font-weight: bold;">10</span>';=0A=
      }=0A=
      sfgate_cppg_count =3D cpp_value;=0A=
    } catch (e) {}=0A=
  }=0A=
=0A=
=0A=
=0A=
  function sfgate_LoadArticle() {=0A=
  // if Pluck didn't return requesttypes.js (i.e. in maintenance mode), =
we can't display comments=0A=
    if(!sfgate_articleKey)=0A=
      return;=0A=
    sfgate_comments_bodyonload();=0A=
    sfgate_page=3D'1';=0A=
    sfgate_comment_sort=3D'RecommendationsDescending';=0A=
    var requestBatch =3D new RequestBatch();=0A=
    requestBatch.AddToRequest(new UpdateArticleAction(sfgate_articleKey, =
'http://'+document.location.host+sfgate_success_page, sfgate_title, new =
Section(sfgate_section), sfgate_categories));=0A=
    requestBatch.AddToRequest(sfgate_articleKey);=0A=
    requestBatch.AddToRequest(new CommentPage(new =
ArticleKey(sfgate_file), 10, 1, 'RecommendationsDescending'));=0A=
    requestBatch.BeginRequest(sfgate_serverUrl, function (responseBatch) =
{=0A=
      for (var i =3D 0; responseBatch.Responses.length > i; ++i) {=0A=
        if (responseBatch.Responses[i].CommentPage !=3D null) {=0A=
          =
sfgate_HandleRecommendedComments(responseBatch.Responses[i].CommentPage);=0A=
        } else if(responseBatch.Responses[i].Article !=3D null) {=0A=
          sfgate_ShowArticleComments(responseBatch.Responses[i].Article);=0A=
        }=0A=
      }=0A=
    });=0A=
  }=0A=
=0A=
  function sfgate_GetCommentsPage(pagenum) {=0A=
=0A=
    sfgate_comments_bodyonload();=0A=
    refreshCommentVariables();=0A=
    //  Retrofit for multiple Pluck page reqests per CGI page=0A=
    if (pagenum) { sfgate_page =3D pagenum; } else { =
sfgate_CgiPageNum(); } // sfgate_page now contains the current CGI page =
num to display=0A=
    var pluck_page_offset      =3D ( (sfgate_page - 1) * =
sfgate_pluck_pages_per ) + 1;=0A=
    var pluckPageNumsArray	=3D Array(); // contains the Pluck page =
numbers of all Pluck pages to be requested for this CGI page=0A=
=0A=
    for (i=3D0; i<sfgate_pluck_pages_per; i++) {=0A=
      pluckPageNumsArray[i] =3D parseInt(pluck_page_offset) + i;=0A=
    }=0A=
=0A=
    //  Instead of one RequestBatch, we will use an array (one element =
for each Pluck comment batch of 10)=0A=
    clearDisplayedComments(); // clear all previous comments=0A=
=0A=
    var requestBatchArray =3D Array();=0A=
    for (i=3D0; i < pluckPageNumsArray.length; i++) {=0A=
      requestBatchArray[i] =3D new RequestBatch();=0A=
      requestBatchArray[i].AddToRequest(sfgate_userKey);=0A=
      if (cgis['plckFindCommentKey']) {=0A=
        requestBatchArray[i].AddToRequest(new =
CommentPage(sfgate_articleKey, 10, 1, sfgate_comment_sort, new =
CommentKey(cgis['plckFindCommentKey'])));=0A=
        requestBatchArray[i].BeginRequest(sfgate_serverUrl, function =
(responseBatch) {=0A=
          for (var j =3D 0; responseBatch.Responses.length > j; ++j) {=0A=
            if (responseBatch.Responses[j].CommentPage !=3D null) {=0A=
              =
sfgate_HandleCommentsPermalinkPage(responseBatch.Responses[j].CommentPage=
);=0A=
            }=0A=
          }=0A=
        });=0A=
        return;=0A=
      }=0A=
      requestBatchArray[i].AddToRequest(new =
CommentPage(sfgate_articleKey, 10, pluckPageNumsArray[i], =
sfgate_comment_sort));=0A=
      requestBatchArray[i].BeginRequest(sfgate_serverUrl, function =
(responseBatch) {=0A=
        for (var j =3D 0; responseBatch.Responses.length > j; ++j) {=0A=
          if (responseBatch.Responses[j].CommentPage !=3D null) {=0A=
            =
sfgate_HandleCommentsPage(responseBatch.Responses[j].CommentPage,(i =
=3D=3D pluckPageNumsArray.length ? true : false));=0A=
          }=0A=
        }=0A=
      });=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_HandleCommentsPermalinkPage(plCommentPage) {=0A=
    sfgate_page =3D plCommentPage.OnPage;=0A=
    var reqPage =3D sfgate_page;=0A=
    if (sfgate_pluck_pages_per > 1) {=0A=
      if ( reqPage % 2 =3D=3D 0 ) {=0A=
        --reqPage;=0A=
        sfgate_page =3D =
parseInt(parseInt(sfgate_page)/parseInt(sfgate_pluck_pages_per));=0A=
      } else {=0A=
        ++reqPage;=0A=
        sfgate_page =3D =
parseInt((parseInt(sfgate_page)+1)/parseInt(sfgate_pluck_pages_per));=0A=
      }=0A=
      var plRB =3D new RequestBatch();=0A=
      plRB.AddToRequest(sfgate_userKey);=0A=
      plRB.AddToRequest(new CommentPage(sfgate_articleKey, 10, reqPage, =
sfgate_comment_sort));=0A=
      plRB.BeginRequest(sfgate_serverUrl, function (responseBatch) {=0A=
        for (var j =3D 0; responseBatch.Responses.length > j; ++j) {=0A=
          if (responseBatch.Responses[j].CommentPage !=3D null) {=0A=
            =
sfgate_HandleCommentsPage(responseBatch.Responses[j].CommentPage,false);=0A=
          }=0A=
        }=0A=
      });=0A=
    }=0A=
    sfgate_HandleCommentsPage(plCommentPage,true);=0A=
  }=0A=
=0A=
  function sfgate_ShowArticleComments(sfgate_article) {=0A=
    var sfgate_comment_question =3D '';=0A=
    var sfgate_commentCnt =3D 0;=0A=
    if (sfgate_article !=3D null) {=0A=
      var sfgate_commentCnt =3D sfgate_article.Comments.NumberOfComments=0A=
    }=0A=
    if (sfgate_commentCnt > 0) {=0A=
      sfgate_topCnt.innerHTML    =3D '('+sfgate_commentCnt+')';=0A=
      sfgate_bottomCnt.innerHTML =3D '('+sfgate_commentCnt+')';=0A=
      if (sfgate_custom_label) {=0A=
        sfgate_comment_question =3D sfgate_custom_label;=0A=
      } else {=0A=
        sfgate_comment_question =3D sfgate_comment_label2;=0A=
      }=0A=
      if (!sfgate_isActive) {=0A=
        sfgate_comment_question +=3D sfgate_comment_append2;=0A=
      }=0A=
      sfgate_mostRecCnt.innerHTML =3D sfgate_commentCnt;=0A=
    } else {=0A=
      sfgate_topCnt.innerHTML    =3D '(0)';=0A=
      sfgate_bottomCnt.innerHTML =3D '(0)';=0A=
      if (sfgate_custom_label) { =0A=
        sfgate_comment_question =3D sfgate_custom_label;=0A=
        if (sfgate_isActive) {=0A=
          sfgate_comment_question +=3D sfgate_comment_append1;=0A=
        } else {=0A=
          sfgate_comment_question +=3D sfgate_comment_append2;=0A=
        }=0A=
      } else {=0A=
        if (sfgate_isActive) {=0A=
          sfgate_comment_question =3D sfgate_comment_label1;=0A=
        } else {=0A=
          sfgate_comment_question =3D 'Comments are closed.';=0A=
        }=0A=
      }=0A=
    }=0A=
    sfgate_question.innerHTML =3D sfgate_comment_question;=0A=
    if (sfgate_isActive) { sfgate_addlink_elm.innerHTML  =3D =
sfgate_addlink; }=0A=
    sfgate_viewlink_elm.innerHTML =3D sfgate_viewlink;=0A=
  }=0A=
=0A=
  function historyFunc(f) {=0A=
    document.getElementByID('hFrame').innerHTML =3D "f";=0A=
  }=0A=
=0A=
=0A=
  function sfgate_clean_html(s) {=0A=
    var re =3D /<[^>]*>/g;=0A=
    if ( re.test(s) ) {=0A=
        s =3D s.replace(re,'');=0A=
        s =3D '[html markup was removed from this comment] '+s;=0A=
    }=0A=
    return s;=0A=
  }=0A=
=0A=
  function sfgate_SubmitComments(form) {=0A=
    // comment out the next two lines to test comment submission without =
user key checking=0A=
    if (!sfgate_un()) {sfgate_reports_elm1.innerHTML =3D 'Your session =
has expired! Please login.'; sfgate_reports_elm2.innerHTML =3D ''; =
sfgate_disableForm(); return false; }=0A=
    if (sfgate_user !=3D sfgate_un()) { if (sfgate_RenewUserKey()) {} =
else {return false;} }=0A=
=0A=
    var requestBatch =3D new RequestBatch();=0A=
    requestBatch.AddToRequest(sfgate_userKey);=0A=
    =0A=
    requestBatch.AddToRequest(new CommentAction(sfgate_articleKey, =
'http://'+document.location.host+sfgate_success_page, sfgate_page_title, =
rmdupnls(form.comment.value)));=0A=
var soval =3D sfgate_getSortOrderVal();=0A=
if (soval =3D=3D 'RecommendationsDescending') {sfgate_comment_sort =3D =
'TimeStampDescending'}=0A=
    requestBatch.AddToRequest(new CommentPage(sfgate_articleKey, 1, =
sfgate_rowsPerPage, sfgate_comment_sort));=0A=
    requestBatch.BeginRequest(sfgate_serverUrl, =
sfgate_HandleSubmitComments);=0A=
//try { console.log(requestBatch); } catch(err) {}=0A=
    return false;=0A=
  }=0A=
=0A=
  function updateRecommendationAndAbuseDisplay(withComment) {=0A=
    if(withComment && withComment.CommentBody) {=0A=
      var thisCommentKeyObj =3D withComment.CommentKey;=0A=
      var thisCommentKeyStr =3D thisCommentKeyObj.Key;=0A=
      var theRecommendationThumbImgDiv  =3D =
document.getElementById('RecommendationThumbImg:'+thisCommentKeyStr);=0A=
      var theRecommendationLabelDiv  =3D =
document.getElementById('RecommendationLabel:'+thisCommentKeyStr);=0A=
      var theRecommendationCountSpan    =3D =
document.getElementById('RecommendationCount:'+thisCommentKeyStr);=0A=
      var theAbuseLink                  =3D =
document.getElementById('AbuseLink:'+thisCommentKeyStr);=0A=
      if(theRecommendationThumbImgDiv) {=0A=
        if(withComment.CurrentUserHasRecommended =3D=3D "True") {=0A=
          var disldiv =3D document.createElement('div');=0A=
          disldiv.id =3D 'RecommendationLabel:'+thisCommentKeyStr;=0A=
          disldiv.className =3D 'recommendlabel recommended checked';=0A=
          disldiv.innerHTML =3D '(<span =
id=3D"RecommendationCount:'+thisCommentKeyStr+'">'+withComment.NumberOfRe=
commendations+'</span>)';=0A=
          =
theRecommendationThumbImgDiv.parentNode.removeChild(theRecommendationThum=
bImgDiv);=0A=
          theRecommendationLabelDiv.parentNode.insertBefore(disldiv, =
theRecommendationLabelDiv);=0A=
          =
theRecommendationLabelDiv.parentNode.removeChild(theRecommendationLabelDi=
v);=0A=
        } else {=0A=
          theRecommendationThumbImgDiv.className =3D 'recommend';=0A=
        }=0A=
      } else {=0A=
//        alert("Could not find id: " + =
'RecommendationThumbImg:'+thisCommentKeyStr);=0A=
      }=0A=
=0A=
      if(theRecommendationCountSpan) {=0A=
        theRecommendationCountSpan.innerHTML =3D =
withComment.NumberOfRecommendations;=0A=
      } else {}=0A=
=0A=
      if(theAbuseLink) {=0A=
        if(withComment.CurrentUserHasReportedAbuse =3D=3D "True") { // =
has the logged in user reported abuse on this comment?=0A=
          theAbuseLink.innerHTML =3D '[Reported]';=0A=
        } else {=0A=
          theAbuseLink.innerHTML =3D '[Report Abuse]';=0A=
        }=0A=
      } else {}=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_HandleSubmitRecommendation(responseBatch) {=0A=
    for (var i =3D 0; i < responseBatch.Responses.length; i++) {=0A=
      if(responseBatch.Responses[i].CommentPage) {=0A=
        for(var j =3D 0; j < =
responseBatch.Responses[i].CommentPage.Comments.length; j++) {=0A=
          var thisComment =3D =
responseBatch.Responses[i].CommentPage.Comments[j];=0A=
          if(thisComment) {=0A=
            updateRecommendationAndAbuseDisplay(thisComment);=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_SubmitRecommendation(key, sl_commentPage) {=0A=
    var Apache =3D new sfgate_ck('Apache');=0A=
    if ( ! Apache.defined ) {=0A=
        alert('Use of the Recommend feature requires you to accept =
cookies. Thanks.');=0A=
        return false;=0A=
    }=0A=
    if (sfgate_un() && sfgate_user !=3D sfgate_un()) { if =
(sfgate_RenewUserKey()) {} else {return false;} }=0A=
    var requestBatch =3D new RequestBatch();=0A=
    requestBatch.AddToRequest(sfgate_userKey);=0A=
    requestBatch.AddToRequest(new RecommendAction(new CommentKey(key)));=0A=
// need to fix the following line: 'sfgate_page' is always in blocks of =
10, not in 10/20 variable=0A=
    requestBatch.AddToRequest(new CommentPage(sfgate_articleKey, =
sfgate_rowsPerPage, sl_commentPage, sfgate_comment_sort));=0A=
    requestBatch.BeginRequest(sfgate_serverUrl, =
sfgate_HandleSubmitRecommendation);=0A=
  }=0A=
=0A=
  function updateDisapprovalDisplay(withArticle) {=0A=
    if(withArticle && withArticle.ArticleKey && =
withArticle.ArticleKey.Key) {=0A=
      var thisArticleKeyObj =3D withArticle.ArticleKey;=0A=
      var thisArticleKeyStr =3D withArticle.ArticleKey.Key;=0A=
      var theDisapprovalThumbImgDiv  =3D =
document.getElementById('DisapprovalThumbImg:'+thisArticleKeyStr);=0A=
      var theDisapprovalLabelDiv     =3D =
document.getElementById('DisapprovalLabel:'+thisArticleKeyStr);=0A=
      var theDisapprovalCountSpan    =3D =
document.getElementById('DisapprovalCount:'+thisArticleKeyStr);=0A=
//      if(theDisapprovalThumbImgDiv && sfgate_userKey.UserKey.Key && =
(withArticle.Ratings.CurrentUserRating !=3D '0')) {=0A=
      if(theDisapprovalThumbImgDiv && =
(withArticle.Ratings.CurrentUserRating !=3D '0')) {=0A=
//        var disdiv =3D document.createElement('div');=0A=
//        disdiv.id =3D 'DisapprovalThumbImg:'+thisArticleKeyStr;=0A=
//        disdiv.className =3D 'disapprove';=0A=
        var disldiv =3D document.createElement('div');=0A=
        disldiv.id =3D 'DisapprovalLabel:'+thisArticleKeyStr;=0A=
        disldiv.className =3D 'disapprovelabel disapproved checked';=0A=
        disldiv.innerHTML =3D '(<span =
id=3D"DisapprovalCount:'+thisArticleKeyStr+'">'+withArticle.Ratings.Numbe=
rOfRatings+'</span>)';=0A=
//        theDisapprovalThumbImgDiv.parentNode.insertBefore(disdiv, =
theDisapprovalThumbImgDiv);=0A=
        =
theDisapprovalThumbImgDiv.parentNode.removeChild(theDisapprovalThumbImgDi=
v);=0A=
        theDisapprovalLabelDiv.parentNode.insertBefore(disldiv, =
theDisapprovalLabelDiv);=0A=
        =
theDisapprovalLabelDiv.parentNode.removeChild(theDisapprovalLabelDiv);=0A=
      }=0A=
      if(theDisapprovalCountSpan) {=0A=
        theDisapprovalCountSpan.innerHTML =3D =
withArticle.Ratings.NumberOfRatings;=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_handleSubmitDisapproval(responseBatch) {=0A=
    for (var i =3D 0; i < responseBatch.Responses.length; i++) {=0A=
      if(responseBatch.Responses[i].Article) {=0A=
        if(responseBatch.Responses[i].Article.ArticleKey && =
responseBatch.Responses[i].Article.ArticleKey.Key) {=0A=
          if(responseBatch.Responses[i].Article.ArticleKey.Key.substr(0, =
26) =3D=3D 'CommentArticle:CommentKey:')=0A=
            updateDisapprovalDisplay(responseBatch.Responses[i].Article);=0A=
        }=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_SubmitDisapproval(forCommentWithKey) {=0A=
    var Apache =3D new sfgate_ck('Apache');=0A=
    if ( ! Apache.defined ) {=0A=
        alert('Use of the Recommend feature requires you to accept =
cookies. Thanks.');=0A=
        return false;=0A=
    }=0A=
    if (sfgate_un() && sfgate_user !=3D sfgate_un()) { if =
(sfgate_RenewUserKey()) {} else {return false;} }=0A=
    var requestBatch =3D new RequestBatch();=0A=
    requestBatch.AddToRequest(sfgate_userKey);=0A=
    var fakeArticle_ArticleKey =3D new ArticleKey("CommentArticle:" + =
forCommentWithKey);=0A=
    requestBatch.AddToRequest(new =
UpdateArticleAction(fakeArticle_ArticleKey, '', '', null, null));=0A=
    requestBatch.AddToRequest(new RateAction(fakeArticle_ArticleKey, 1));=0A=
    requestBatch.AddToRequest(fakeArticle_ArticleKey);=0A=
=0A=
//    requestBatch.AddToRequest(new CommentPage(sfgate_articleKey, =
sfgate_rowsPerPage, sfgate_page, sfgate_comment_sort));=0A=
//    requestBatch.BeginRequest(sfgate_serverUrl, sfgate_HandleComments);=0A=
=0A=
    requestBatch.BeginRequest(sfgate_serverUrl, =
sfgate_handleSubmitDisapproval);=0A=
  }=0A=
=0A=
  function sfgate_handleRequestDisapprovals(responseBatch) {=0A=
    for (var i =3D 0; i < responseBatch.Responses.length; i++) {=0A=
      if(responseBatch.Responses[i].Article) {=0A=
        if(responseBatch.Responses[i].Article.ArticleKey && =
responseBatch.Responses[i].Article.ArticleKey.Key) {=0A=
          updateDisapprovalDisplay(responseBatch.Responses[i].Article);=0A=
        }=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  // function called from a responseHandler to request one disapproval =
article (fake article tied to a comment) for each comment =0A=
  function sfgate_requestDisapprovals(commentpage) {=0A=
//    if(responseBatch.Responses.length > 0) {=0A=
      var numberOfArticlesAdded =3D 0;=0A=
      var requestBatch =3D new RequestBatch();=0A=
      requestBatch.AddToRequest(sfgate_userKey);=0A=
//      for(var i =3D 0; i < responseBatch.Responses.length; i++) {=0A=
//        if(responseBatch.Responses[i].Comment) {=0A=
//          requestBatch.AddToRequest(new Article(new =
ArticleKey('CommentArticle:'+responseBatch.Responses[i].Comment.CommentKe=
y.Key)));=0A=
//          numberOfArticlesAdded++;=0A=
//        }  else if(responseBatch.Responses[i].CommentPage) {=0A=
            for(var j =3D 0; j < commentpage.Comments.length; j++) {=0A=
              requestBatch.AddToRequest(new =
ArticleKey('CommentArticle:'+commentpage.Comments[j].CommentKey.Key));=0A=
              numberOfArticlesAdded++;=0A=
            }=0A=
//        }=0A=
//      }=0A=
      if(numberOfArticlesAdded > 0)=0A=
        requestBatch.BeginRequest(sfgate_serverUrl, =
sfgate_handleRequestDisapprovals);=0A=
//    }=0A=
  }=0A=
=0A=
  function sfgate_handleSubmitAbuse(responseBatch) {=0A=
    for (var i =3D 0; i < responseBatch.Responses.length; i++) {=0A=
      if(responseBatch.Responses[i].CommentPage) {=0A=
        for(var j =3D 0; j < =
responseBatch.Responses[i].CommentPage.Comments.length; j++) {=0A=
          var thisComment =3D =
responseBatch.Responses[i].CommentPage.Comments[j];=0A=
          if(thisComment) {=0A=
            updateRecommendationAndAbuseDisplay(thisComment);=0A=
          }=0A=
        }=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_SubmitReportAbuse(form) {=0A=
    if (sfgate_un() && sfgate_user !=3D sfgate_un()) { if =
(sfgate_RenewUserKey()) {} else {return false;} }=0A=
    sfgate_HideDiv("ReportAbuse_Menu");=0A=
    var requestBatch =3D new RequestBatch();=0A=
    requestBatch.AddToRequest(sfgate_userKey);=0A=
    requestBatch.AddToRequest(new ReportAbuseAction(new =
CommentKey(form.key.value), =
form.reason[form.reason.selectedIndex].value, form.comment.value));=0A=
=0A=
// need to fix the following line: 'sfgate_page' is hard-coded in blocks =
of 10, not in 10/20 variable=0A=
    requestBatch.AddToRequest(new CommentPage(sfgate_articleKey, =
sfgate_rowsPerPage, sfgate_page, sfgate_comment_sort));=0A=
    requestBatch.BeginRequest(sfgate_serverUrl, =
sfgate_handleSubmitAbuse);=0A=
=0A=
    form.key.value =3D '';=0A=
    form.reason.selectedIndex =3D 0;=0A=
    form.comment.value =3D '';=0A=
  }=0A=
=0A=
  function sfgate_HandleCommentsPage (commentpage, loadanchor) { =0A=
    var sfgate_start_page =3D ( (sfgate_page - 1) * =
sfgate_pluck_pages_per ) + 1;=0A=
    batchNum =3D (commentpage.OnPage - sfgate_start_page) + 1;=0A=
    if(batchNum =3D=3D 1) {=0A=
      sfgate_DrawPagination(commentpage);=0A=
      sfgate_DrawCommentsHeader(commentpage);=0A=
    }=0A=
    sfgate_DrawComments(commentpage, batchNum);=0A=
    if (loadanchor && cgis['plckFindCommentKey']) {=0A=
      window.location.href =3D '#'+cgis['plckFindCommentKey'];=0A=
    } else if (cgis['gta']) {=0A=
      window.location.href =3D '#'+cgis['gta'];=0A=
    }=0A=
    sfgate_requestDisapprovals(commentpage);=0A=
  }=0A=
=0A=
  function sfgate_HandleSubmitComments(responseBatch) {=0A=
    var re =3D /^.*\(for example: (.+)\).*$/;=0A=
    for(var i =3D 0; i < responseBatch.Messages.length; i++) {=0A=
      if (responseBatch.Messages[i].Message.match(re)) {=0A=
        var bwords =3D RegExp.$1;=0A=
        if((bwords) && bwords !=3D '') {=0A=
          var form_header_bad_words =3D 'Your submission included words =
not permitted by our language filter (for example: '+bwords+'). Please =
avoid use of inappropriate language on our site in the future. Thanks.';=0A=
          sfgate_form_verbiage.innerHTML =3D '<h4>Add Your =
Comment</h4><h4 class=3D"error">Comment Not Posted</h4><p =
class=3D"error">'+form_header_bad_words+'</p>';=0A=
          try {slTwitter.twitterLoginWindow.close()} catch (e) {};=0A=
          return false;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    // if we reach this point, there is no "bad word" error in the =
response message array.=0A=
=0A=
    var re =3D /^.*(rapid posting).*$/;=0A=
    for(var i =3D 0; i < responseBatch.Messages.length; i++) {=0A=
      if (responseBatch.Messages[i].Message.match(re)) {=0A=
        var rpost =3D RegExp.$1;=0A=
        if((rpost) && rpost !=3D '') {=0A=
          var form_header_bad_words =3D 'We restrict rapid posting of =
comments to prevent spam. You already have posted a comment within the =
last several seconds. Please try again later.';=0A=
          sfgate_form_verbiage.innerHTML =3D '<h4>Add Your =
Comment</h4><h4 class=3D"error">Comment Not Posted</h4><p =
class=3D"error">'+form_header_bad_words+'</p>';=0A=
          try {slTwitter.twitterLoginWindow.close()} catch (e) {};=0A=
          return false;=0A=
        }=0A=
      }=0A=
    }=0A=
=0A=
    // if we reach this point, there is no "rapid posting" error in the =
response message array.=0A=
=0A=
    // the following line is assumed to work, depending on =
message/response permutations received from Pluck=0A=
    // We will get a false-negative if the 'ok' message is not in the =
0th element of the Message Array=0A=
    // Assuming Pluck returns messages in the order in which the =
RequestBatch calls were made=0A=
    // i.e. First Message element corresponds to the first RequestBatch =
call with a message to return=0A=
    if(responseBatch.Messages[0].Message !=3D 'okay' && =
responseBatch.Messages[0].Message !=3D 'ok') {=0A=
      var appendedMessages      =3D '<span style=3D"font-style: italic; =
background-color: #D0D0D0;">';=0A=
=0A=
      for(var i =3D 0; i < responseBatch.Messages.length; i++) {=0A=
        appendedMessages +=3D '<font style=3D"font-weight: bold;">[' + i =
+ ']</font> ' + responseBatch.Messages[i].Message + '<br />';=0A=
      }=0A=
      appendedMessages +=3D '</span>';=0A=
=0A=
      var form_header_error_verbiage =3D 'Apologies for the =
inconvenience but we are unable to submit this comment due to a =
technical system glitch. We are actively working to correct this issue. =
Thanks for your patience.' + 'Your submission was not processed due to =
an error. <br />' + appendedMessages;=0A=
      sfgate_form_verbiage.innerHTML =3D '<h4>Add Your Comment</h4><h4 =
class=3D"error">Comment Not Posted</h4><p =
class=3D"error">'+form_header_error_verbiage+'</p>';=0A=
      try {slTwitter.twitterLoginWindow.close()} catch (e) {};=0A=
      return false;=0A=
    }=0A=
    =0A=
    var soval =3D sfgate_getSortOrderVal();=0A=
    if (soval =3D=3D 'RecommendationsDescending') =
{sfgate_setSortOrderCookie('TimeStampDescending'); =
sfgate_presetSortOrderLinks();}=0A=
    var gotopage =3D 1;=0A=
    if(sfgate_comment_sort =3D=3D 'TimeStampAscending' /*&& =
responseBatch.Responses[1].CommentPage.NumberOfComments > =
sfgate_rowsPerPage*/) {=0A=
      FBgotopage =3D gotopage =3D =
Math.ceil(responseBatch.Responses[1].CommentPage.NumberOfComments / =
sfgate_cppg_count);=0A=
    }=0A=
=0A=
    var tw_check =3D =
document.getElementById("twitter_connect_checkbox").checked;=0A=
    if(tw_check){=0A=
      //Send it to twitter now?=0A=
      slTwitterCheckConnected(sfgate_twitterCheckConnected);=0A=
    } else if(!sfgate_handleFacebook()){=0A=
      window.location =3D sfgate_success_page+'&o=3D'+gotopage;=0A=
    }=0A=
    return false;=0A=
  }=0A=
=0A=
  function slTwitterCheckConnected (callback){=0A=
	var request =3D new RequestBatch();=0A=
	request.AddToRequest(new UserTwitterStatus(sfgate_userKey));=0A=
       request.AddToRequest(new RecentUserActivity(sfgate_userKey));=0A=
	request.BeginRequest(sfgate_serverUrl, function(responseBatch){=0A=
		if(responseBatch.Responses && responseBatch.Responses[0] && =
responseBatch.Responses[0].UserTwitterStatus){=0A=
                     var cKey =3D =
responseBatch.Responses[1].RecentUserActivity.UserActivities[0].Comment.C=
ommentKey.Key;=0A=
                     var permalink =3D =
'http://'+document.location.host+sfgate_success_page+'&plckFindCommentKey=
=3D'+cKey; //+'#'+cKey;=0A=
			callback(true, =
responseBatch.Responses[0].UserTwitterStatus.ScreenName,permalink);=0A=
		}=0A=
		else{=0A=
			callback(false);=0A=
		}=0A=
	});=0A=
  };=0A=
=0A=
  var twitterWin =3D new Object();=0A=
=0A=
  function slTwitterLogin (callback) {=0A=
	var me =3D slTwitter;=0A=
	window.twitterAuthComplete =3D function(screenName){=0A=
	    // Convenient timeout just to put this in the right scope.=0A=
	    setTimeout(function(){=0A=
		    me.twitterLoginWindow.close();=0A=
        		=0A=
	        if(window.focus){=0A=
	            window.focus();=0A=
	        }=0A=
    		=0A=
		    if(callback){=0A=
			    callback(screenName);=0A=
		    }=0A=
		}, 1);=0A=
       };=0A=
=0A=
       var w =3D 800;=0A=
       var h =3D 470;=0A=
       var x =3D parseInt(screen.width/2)-(parseInt(w/2)+8);=0A=
       var y =3D parseInt(screen.height/2)-(parseInt(h/2)+50);=0A=
=0A=
       if (w > screen.width || h > screen.height) { w =3D screen.width; =
h =3D screen.height; x =3D 0; y =3D 0; }=0A=
=0A=
       twitterWin.moveTo(x,y);=0A=
       twitterWin.resizeTo(w,h);=0A=
       twitterWin.focus();=0A=
       twitterWin.location.href =3D =
'http://contributestage.sfgate.com/ver1.0/Persona/BeginTwitterAuth';=0A=
       if (navigator.appName!=3D"Microsoft Internet Explorer")  =
{twitterWin.opener.blur();}=0A=
       me.twitterLoginWindow =3D twitterWin;=0A=
=0A=
	return false;=0A=
  }=0A=
  =0A=
  =0A=
  function sfgate_showTwitterPopup() {=0A=
    var x =3D parseInt(screen.width/2)-58;=0A=
    var y =3D parseInt(screen.height/2)-100;=0A=
    twitterWin =3D =
window.open('http://'+document.location.host+'/js/pluck/comments/BeginTwi=
tterAuth.html', =
'twitterLoginWindow','width=3D100,height=3D100,resize=3D0,scrollbars=3D1,=
menubar=3D0,toolbar=3D0,left=3D'+x+',top=3D'+y+',location=3D0,directories=
=3D0,status=3D1');=0A=
    twitterWin.blur();=0A=
    window.focus();=0A=
    slTwitter.twitterLoginWindow =3D twitterWin;=0A=
  } =0A=
=0A=
  function sfgate_twitterCheckConnected (connected,screenname,permalink) =
{=0A=
    if (connected) {=0A=
      try {twitterWin.close()} catch (e) {};=0A=
//      try {slTwitter.twitterLoginWindow.close()} catch (e) {};=0A=
      var sfgate_comment_value =3D =
document.getElementById('sfgate_comment_input').value;=0A=
      slTwitter.sendMessage(sfgate_comment_value, permalink,'', =
sfgate_finishCommentShare);=0A=
    } else {=0A=
//      slTwitter.login(sfgate_finishTwitterLogin);=0A=
      slTwitterLogin(sfgate_finishTwitterLogin);=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_twitterLogin () {=0A=
//    slTwitter.login(sfgate_finishTwitterLogin);=0A=
    slTwitterLogin(sfgate_finishTwitterLogin);=0A=
  }=0A=
=0A=
  function sfgate_finishTwitterLogin () {=0A=
//    self.focus();=0A=
//    slTwitter.checkConnected(sfgate_finishTwitterComment);=0A=
    slTwitterCheckConnected(sfgate_finishTwitterComment);=0A=
  }=0A=
=0A=
  function sfgate_finishTwitterComment (connected,screenname,permalink) {=0A=
    if (connected) {=0A=
      try {twitterWin.close()} catch (e) {};=0A=
      var sfgate_comment_value =3D =
document.getElementById('sfgate_comment_input').value;=0A=
      slTwitter.sendMessage(sfgate_comment_value, permalink,'', =
sfgate_finishCommentShare);=0A=
    } else {=0A=
      sfgate_finishCommentShare();=0A=
    }=0A=
    try {slTwitter.twitterLoginWindow.close()} catch (e) {};=0A=
  } =0A=
=0A=
  function sfgate_finishCommentShare () {=0A=
    if(!sfgate_handleFacebook()){=0A=
      window.location =3D sfgate_success_page+'&o=3D'+FBgotopage;=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_handleFacebook() {=0A=
    var fb_check =3D =
document.getElementById("facebook_connect_checkbox").checked;=0A=
    if(fb_check && slFB.connectEnabled()){=0A=
      //Send it to facebook now=0A=
      var sfgate_comment_value =3D =
document.getElementById('sfgate_comment_input').value;=0A=
      slFB.submitArticleComment(sfgate_page_title, sfgate_full_filepath, =
sfgate_article_paratext, rmdupnls(sfgate_comment_value), =
sfgate_article_thumbs, handleFacebookCallback);=0A=
      return true;=0A=
    }=0A=
    return false;=0A=
  }=0A=
=0A=
  var FBgotopage =3D 1;=0A=
  function handleFacebookCallback() {=0A=
    window.location =3D sfgate_success_page+'&o=3D'+FBgotopage;=0A=
  }=0A=
=0A=
  function sfgate_RenewUserKey() {=0A=
    if (confirm('You are logged in as '+sfgate_un()+' not =
'+sfgate_user+'. Is this OK?')) {=0A=
      sfgate_user    =3D sfgate_un();=0A=
      sfgate_userKey =3D new UserKey(sfgate_user);=0A=
      return true;=0A=
    }=0A=
    return false;=0A=
  }=0A=
=0A=
  function sfgate_HandleRecommendedComments(commentpage) {=0A=
    var newcommentpage =3D new Array();=0A=
    var cnt =3D 1;=0A=
    var maxcnt =3D 3;=0A=
    for(var i =3D 0; i < commentpage.Comments.length; i++) {=0A=
      if (cnt > maxcnt) { break; }=0A=
      if (commentpage.Comments[i].NumberOfRecommendations < 1 || =
commentpage.Comments[i].Author.IsBlocked =3D=3D 'True' || =
commentpage.Comments[i].ContentBlockingState =3D=3D 'BlockedByAdmin') { =
continue; }=0A=
      newcommentpage.push(commentpage.Comments[i]);=0A=
      cnt++;=0A=
    }=0A=
    if (cnt > 1) {=0A=
      sfgate_mostRecComments.style.display =3D "block";=0A=
      sfgate_CommentsViewall.style.display =3D "block";=0A=
      commentpage.Comments =3D newcommentpage;=0A=
      sfgate_DrawComments(commentpage,1);=0A=
      sfgate_requestDisapprovals(commentpage);=0A=
    }=0A=
  }=0A=
=0A=
function rmdupnls (text) {=0A=
    // first remove all tags.=0A=
    text =3D sfgate_clean_html(text);=0A=
    // Now we add brs where it makes sense.=0A=
    text =3D text.replace(/\r\n\r\n(\r\n)+/g,'<br /><br />');=0A=
    text =3D text.replace(/\r\n/g,'<br />');=0A=
    text =3D text.replace(/\n\n\n+/g,'<br /><br />');=0A=
    text =3D text.replace(/\n/g,'<br />');=0A=
    text =3D text.replace(/\r\r\r+/g,'<br /><br />');=0A=
    text =3D text.replace(/\r/g,'<br />');=0A=
    return text;=0A=
}=0A=
=0A=
function sfgate_clean_html2(s) {=0A=
    // We want to keep brs (be we limit them to two in a row.=0A=
    var cmtlines =3D s.split('<br />');=0A=
    var cmt =3D '';=0A=
    var consecutivebrs =3D 0;=0A=
    for (var k =3D 0; cmtlines.length > k; k++) {=0A=
        if ( cmtlines[k].match(/^\s*$/) ) {=0A=
            consecutivebrs++;=0A=
        } else {=0A=
            consecutivebrs =3D 0;=0A=
        }=0A=
        if ( consecutivebrs >=3D 3) {=0A=
            continue;=0A=
        }=0A=
        // ok, not a blank line, we clean other tags, then add a br=0A=
        cmt +=3D sfgate_clean_html(cmtlines[k])+( (k =3D=3D =
(cmtlines.length - 1)) ? '' : '<br />');=0A=
    }=0A=
    return cmt;=0A=
}    =0A=
=0A=
  function sfgate_HandleResponseMessages(responseBatch) {=0A=
    for (var i=3D0; i < responseBatch.Messages.length; i++) {=0A=
      sfgate_appendError('MessageTime:' + =
responseBatch.Messages[i].MessageTime);=0A=
      sfgate_appendError('Message ' + i + ':' + =
responseBatch.Messages[i].Message);=0A=
    }=0A=
    sfgate_printErrors();=0A=
  }=0A=
  =0A=
  function sfgate_DrawComments(commentpage, pageNum) {=0A=
    if (commentpage !=3D null) {=0A=
      var comments_page_output         =3D '';=0A=
      if(pageNum =3D=3D "1" && commentpage.Comments.length < 1) {=0A=
        sfgate_response_elm[0].innerHTML   =3D '<div style=3D"padding: =
10px; font-family: Verdana,sans-serif; font-size: 0.86em; line-height: =
16px;">No comments\=0A=
 yet.</div>';=0A=
      } else {=0A=
        for(var i =3D 0; i < commentpage.Comments.length; i++) {=0A=
          comments_page_output +=3D =
sfgate_AddCommentRow(commentpage.Comments[i], i, commentpage.OnPage);=0A=
        }=0A=
 =0A=
        if(parseInt(pageNum) >=3D 1 && parseInt(pageNum) <=3D 8) {=0A=
          sfgate_response_elm[(parseInt(pageNum) - 1)].innerHTML   +=3D =
comments_page_output;=0A=
        } else {=0A=
          sfgate_response_elm[0].innerHTML   +=3D comments_page_output;=0A=
        }=0A=
      }=0A=
    } else {=0A=
//      alert("No CommentPage in response");=0A=
      if(pageNum =3D=3D 1)=0A=
        sfgate_response_elm[0].innerHTML   =3D '<div style=3D"padding: =
10px; font-family: Verdana,sans-serif; font-size: 0.86em; line-height: =
16px;">No comment\=0A=
s.</div>';=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_AddCommentRow(comment, index, fromCommentPage) {=0A=
    var comment_output =3D '';=0A=
    var item_odd =3D '';=0A=
    if (index % 2 =3D=3D 0) { item_odd =3D ' odd'; }=0A=
    comment_output =3D '<div =
id=3D"commentDisplayRow:'+comment.CommentKey.Key+'" class=3D"item =
'+item_odd+'">';=0A=
    comment_output +=3D '<a name=3D"'+comment.CommentKey.Key+'"></a>';=0A=
    if(comment.Author.IsBlocked =3D=3D 'True' && sfgate_user !=3D =
comment.Author.DisplayName) {=0A=
      comment_output +=3D '<h4>This comment was left by a user who has =
been blocked by an SFGate editor.</h4>';=0A=
//    } else if(comment.ContentBlockingState =3D=3D 'BlockedByAdmin') {=0A=
//      comment_output +=3D '<h4>This comment has been blocked by an =
SFGate editor.</h4>';=0A=
    } else {=0A=
      thisPhotoAvatarUrl =3D (comment.ContentBlockingState =3D=3D =
'BlockedByAdmin' ? =
'http://contribute.sfgate.com/ver1.0/Content/images/no-user-image.gif' : =
comment.Author.AvatarPhotoUrl);=0A=
=0A=
      comment_output +=3D '<table cellpadding=3D"0" cellspacing=3D"0" =
style=3D"width: 100%;"><tr><td style=3D"width: 70px;">';=0A=
      comment_output +=3D '<img alt=3D"" title=3D"" src=3D"' + =
thisPhotoAvatarUrl + '" style=3D"float: left; margin: 0px 10px 0px 0px; =
border: 1px solid #000000;" />';=0A=
      comment_output +=3D '</td><td>';=0A=
=0A=
      if(comment.ContentBlockingState =3D=3D 'BlockedByAdmin')=0A=
        comment_output +=3D '<h4 style=3D"float: left;">username =
withheld</h4>';=0A=
      else=0A=
        comment_output +=3D '<h4 style=3D"float: left;"><a =
href=3D"/cgi-bin/contribute/sn/persona?User=3D' + =
comment.Author.DisplayName + '">' + comment.Author.DisplayName + =
'</a></h4>';=0A=
=0A=
      comment_output +=3D '<span class=3D"details" style=3D"display: =
inline; width: auto; float: left; margin-left: 8px;">' + =
comment.PostedAtTime + '</span>';=0A=
      comment_output +=3D '<br style=3D"clear: both;" />';=0A=
=0A=
      if(comment.ContentBlockingState =3D=3D 'BlockedByAdmin') {=0A=
       comment_output +=3D '<p>This comment violated SFGate\'s Terms and =
Conditions, and has been removed.</p>';=0A=
      } else {=0A=
        comment_output +=3D '<p>' + =
sfgate_clean_html2(comment.CommentBody) + '</p>';=0A=
        comment_output +=3D '<br style=3D"clear: both; height: 6px; =
line-height: 6px;" />';=0A=
        var recommended =3D '';=0A=
        comment_output +=3D '<span =
class=3D"recommendlinelabel">Recommend: &nbsp; &nbsp;</span>';=0A=
        if (comment.CurrentUserHasRecommended =3D=3D 'True') { =0A=
          comment_output +=3D '<div class=3D"recommendlabel recommended =
checked" id=3D"RecommendationLabel:'+comment.CommentKey.Key+'">\n';=0A=
          comment_output +=3D '(<span =
id=3D"RecommendationCount:'+comment.CommentKey.Key+'">'+comment.NumberOfR=
ecommendations+'</span>)\n';=0A=
          comment_output +=3D '</div>\n';=0A=
        } else {=0A=
          comment_output +=3D '<a class=3D"recommend" =
id=3D"RecommendationThumbImg:'+comment.CommentKey.Key+'" href=3D"#" =
onclick=3D"javascript:sfgate_SubmitRecommendation(\''+comment.CommentKey.=
Key+'\', '+fromCommentPage+'); return false;"></a>';=0A=
          comment_output +=3D '<a class=3D"recommendlabel" href=3D"#" =
id=3D"RecommendationLabel:'+comment.CommentKey.Key+'" =
onclick=3D"javascript:sfgate_SubmitRecommendation(\''+comment.CommentKey.=
Key+'\', '+fromCommentPage+'); return false;" =
alt=3D"'+comment.CommentKey.Key+'">';=0A=
          comment_output +=3D '(<span =
id=3D"RecommendationCount:'+comment.CommentKey.Key+'">'+comment.NumberOfR=
ecommendations+'</span>)';=0A=
          comment_output +=3D '</a>';=0A=
        }=0A=
        // display the disapproval thumb and label=0A=
        var disapproved =3D '';=0A=
//        if (comment.CurrentUserHasDisapproved =3D=3D 'True') { =
disapproved =3D ' checked'; }=0A=
        comment_output +=3D '<a class=3D"disapprove'+disapproved+'" =
id=3D"DisapprovalThumbImg:CommentArticle:'+comment.CommentKey.Key+'" =
href=3D"#" =
onclick=3D"javascript:sfgate_SubmitDisapproval(\''+comment.CommentKey.Key=
+'\'); return false;"></a>';=0A=
        comment_output +=3D '<a class=3D"disapprovelabel" href=3D"#" =
id=3D"DisapprovalLabel:CommentArticle:'+comment.CommentKey.Key+'" =
onclick=3D"javascript:sfgate_SubmitDisapproval(\''+comment.CommentKey.Key=
+'\'); return false;">';=0A=
        comment_output +=3D '(<span =
id=3D"DisapprovalCount:CommentArticle:'+comment.CommentKey.Key+'">0</span=
>)';=0A=
        comment_output +=3D '</a>';=0A=
=0A=
        // display the abuse-reporting mechanism=0A=
        var reported =3D '';=0A=
        comment_output +=3D '<span style=3D"float: right;">';=0A=
        if (comment.CurrentUserHasReportedAbuse =3D=3D 'True') { =
reported =3D ' checked'; }=0A=
        comment_output +=3D '<a class=3D"'+reported+'" href=3D"#" =
onclick=3D"javascript:sfgate_ShowReportAbuse(event,\''+comment.CommentKey=
.Key+'\'); return false;" /></a><a class=3D"reportabuselabel" =
id=3D"AbuseLink:'+comment.CommentKey.Key+'" href=3D"#" =
onclick=3D"javascript:sfgate_ShowReportAbuse(event,\''+comment.CommentKey=
.Key+'\'); return false;">';=0A=
        if (comment.CurrentUserHasReportedAbuse =3D=3D 'True') { =
comment_output +=3D '[Reported]'; } else { comment_output +=3D '[Report =
Abuse]'; }=0A=
        comment_output +=3D '</a>';=0A=
        comment_output +=3D '</span>';=0A=
=0A=
        // display comment permalink=0A=
        comment_output +=3D '<span style=3D"float: right;">\n';=0A=
        comment_output +=3D '<a =
href=3D"'+sfgate_success_page+'&plckFindCommentKey=3D'+comment.CommentKey=
.Key+'"><img class=3D"permalink_icon" alt=3D"Permalink" =
src=3D"http://imgs.sfgate.com/graphics/article/comments_permalink_icon.gi=
f"/></a>\n';=0A=
        comment_output +=3D '<a class=3D"permalinklabel" =
href=3D"'+sfgate_success_page+'&plckFindCommentKey=3D'+comment.CommentKey=
.Key+'">Permalink</a>\n';=0A=
        comment_output +=3D '</span>\n';=0A=
=0A=
      }=0A=
      comment_output +=3D '</td></tr></table>';=0A=
    }=0A=
    comment_output +=3D '<div class=3D"clear"></div></div><!--/.item =
-->';=0A=
    return comment_output;=0A=
  }=0A=
=0A=
  function sfgate_DrawCommentsHeader(commentpage) {=0A=
    var sfgate_commentCnt =3D 0;=0A=
    if (commentpage !=3D null) {=0A=
      var sfgate_commentCnt =3D commentpage.NumberOfComments;=0A=
    }=0A=
    if (sfgate_commentCnt > 0) {=0A=
      sfgate_topCnt.innerHTML =3D '('+sfgate_commentCnt+')';=0A=
    } else {=0A=
      sfgate_topCnt.innerHTML =3D '(0)';=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_DrawPagination(commentpage) {=0A=
    if (commentpage !=3D null) {=0A=
      var pagination                   =3D 'View Page: ';=0A=
      var comment_total                =3D commentpage.NumberOfComments;=0A=
      var pagenum                      =3D 1;=0A=
      var current_comments_per_page    =3D sfgate_cppg_count;=0A=
=0A=
      //  BEGIN PAGINATION CALCULATION CODE -- by David Wortham; 07 Dec =
2007=0A=
      var preferredPaginationPageSize  =3D 10;                           =
         // maximum number of pagination links to be displayed per CGI =
page=0A=
      var currentPaginationPage        =3D Math.floor(commentpage.OnPage =
/ sfgate_pluck_pages_per);                    // uses the number of =
Pluck comments per page=0A=
      var totalPaginationPages         =3D =
Math.ceil(commentpage.NumberOfComments / current_comments_per_page);=0A=
      var lowestPaginationPage         =3D 1;                            =
         // Leftmost page number in the pagination links=0A=
      var highestPaginationPage        =3D totalPaginationPages;         =
         // Rightmost page number in the pagination links=0A=
=0A=
      if(currentPaginationPage <=3D 4) { // display the first (up to 10) =
page numbers=0A=
        lowestPaginationPage           =3D 1;=0A=
        highestPaginationPage          =3D =
Math.min(preferredPaginationPageSize, totalPaginationPages);=0A=
      } else if(totalPaginationPages - currentPaginationPage <=3D 6) { =
// display the last (up to 10) page numbers=0A=
        highestPaginationPage          =3D totalPaginationPages;=0A=
        lowestPaginationPage           =3D =
Math.max(highestPaginationPage - preferredPaginationPageSize, 1);=0A=
      } else { // display up to 3 page numbers before and up to 6 after=0A=
        lowestPaginationPage           =3D  Math.max(1, =
currentPaginationPage - 3);=0A=
        highestPaginationPage          =3D =
Math.min(totalPaginationPages, currentPaginationPage + 6);=0A=
      }=0A=
      pagenum =3D lowestPaginationPage=0A=
      //  END PAGINATION CALCULATION CODE=0A=
=0A=
      // Handle the "prev" link=0A=
      if(commentpage.OnPage > 1) {=0A=
        pagination +=3D '<a =
href=3D"'+sfgate_success_page+'&o=3D'+(parseInt(sfgate_page)-1)+'">&laquo=
;&nbsp;Prev</a> ';=0A=
      } else {=0A=
//        pagination +=3D '&laquo;&nbsp;Prev ';=0A=
      }=0A=
=0A=
      // create HTML for numbered pagination links=0A=
      do {=0A=
        if(pagenum =3D=3D sfgate_page) {=0A=
          pagination +=3D '<strong>'+pagenum+'</strong>';=0A=
        } else {=0A=
          pagination +=3D '<a =
href=3D"'+sfgate_success_page+'&o=3D'+pagenum+'">'+pagenum+'</a>';=0A=
        }=0A=
        pagenum =3D pagenum+1;=0A=
        comment_total =3D comment_total - commentpage.NumberPerPage;=0A=
      } while (pagenum <=3D highestPaginationPage);=0A=
=0A=
      // Handle the "next" link=0A=
      if(commentpage.OnPage < Math.ceil( commentpage.NumberOfComments / =
commentpage.NumberPerPage / sfgate_pluck_pages_per ) ) {=0A=
        pagination +=3D ' <a =
href=3D"'+sfgate_success_page+'&o=3D'+(parseInt(sfgate_page)+1)+'">Next&n=
bsp;&raquo;</a>';=0A=
      } else {=0A=
//        pagination +=3D ' Next&nbsp;&raquo;';=0A=
      }=0A=
=0A=
      sfgate_pagination_elm.innerHTML =3D pagination;=0A=
    } else {=0A=
      try { console.log("No CommentPage in response."); } catch(err) { }=0A=
    }=0A=
  }=0A=
=0A=
  var sfgate_ResponseErrors =3D new Array(); // array used to collect =
respons errors/messages=0A=
=0A=
  function sfgate_appendError(errorMessage) {=0A=
    if(!sfgate_useErrors) {return;}=0A=
    sfgate_ResponseErrors.push(errorMessage);=0A=
  }=0A=
=0A=
  function sfgate_printErrors() {=0A=
    if(!sfgate_useErrors) {return;}=0A=
    var sfgate_collectedErrors =3D 'RESPONSE ERRORS/MESSAGES:';=0A=
    for (var i=3D0; i < sfgate_ResponseErrors.length; i++) {=0A=
      sfgate_collectedErrors +=3D '<br />'+sfgate_ResponseErrors[i];=0A=
    }=0A=
    sfgate_errors_elm.innerHTML =3D sfgate_collectedErrors;=0A=
    sfgate_ResponseErrors =3D new Array();=0A=
  }=0A=
=0A=
  function sfgate_enableForm() {=0A=
    sfgate_comment_input.disabled =3D false;=0A=
    sfgate_submit_button.disabled =3D false;=0A=
    sfgate_form_verbiage.innerHTML =3D form_header;=0A=
    sfgate_counter_input.style.visibility =3D 'visible';=0A=
    document.getElementById("share_connect_option").style.display =3D =
"block";=0A=
  }=0A=
=0A=
  function sfgate_disableForm() {=0A=
    sfgate_comment_input.disabled =3D true;=0A=
    sfgate_submit_button.disabled =3D true;=0A=
    sfgate_form_verbiage.innerHTML =3D loginorreg;=0A=
    sfgate_counter_input.style.visibility =3D 'hidden';=0A=
    document.getElementById("share_connect_option").style.display =3D =
"none";=0A=
  }=0A=
=0A=
  function sfgate_FBcbck (cb) {=0A=
    var sfgate_cbck =3D new sfgate_ck('sfgate_FBcbck');=0A=
    if (cb.checked) {=0A=
      sfgate_cbck.set_days(3650,'1');=0A=
    } else {=0A=
      sfgate_cbck.set_days(3650,'');=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_TWcbck (cb) {=0A=
    var sfgate_cbck =3D new sfgate_ck('sfgate_TWcbck');=0A=
    if (cb.checked) {=0A=
      sfgate_cbck.set_days(3650,'1');=0A=
    } else {=0A=
      sfgate_cbck.set_days(3650,'');=0A=
    }=0A=
  }=0A=
  =0A=
  function sfgate_setFormState() {=0A=
    var sfgate_cbck =3D new sfgate_ck('sfgate_FBcbck');=0A=
    var sfgate_TWcbck =3D new sfgate_ck('sfgate_TWcbck');=0A=
    if(sfgate_un()) {=0A=
      if (sfgate_TWcbck.val =3D=3D '1') {=0A=
        document.getElementById("twitter_connect_checkbox").checked =3D =
true;=0A=
        document.getElementById('sfgate_submit_button').onclick =3D =
sfgate_showTwitterPopup;=0A=
      }=0A=
      // Check if current user is facebook user, show "submit to =
facebook" checkbox if he is=0A=
      slFB.init(=0A=
        function() {=0A=
            if (sfgate_cbck.val =3D=3D '1') {=0A=
              =
document.getElementById("facebook_connect_checkbox").checked =3D true;=0A=
            }=0A=
        }=0A=
      );=0A=
      sfgate_enableForm();=0A=
    } else {=0A=
      sfgate_disableForm();=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_CgiPageNum() {=0A=
//    var qs =3D window.location.search;=0A=
//    qs =3D qs.substring(1, qs.length);=0A=
    var qs =3D window.location.search.substring(1, =
window.location.search.length);=0A=
    if (qs.length > 1) {=0A=
      var qarray =3D qs.split("&");=0A=
      var re =3D /^o=3D(\d+)$/;=0A=
      for(var i=3D0; i < qarray.length; i++) {=0A=
        if (qarray[i].match(re)) {=0A=
          sfgate_page =3D RegExp.$1;=0A=
          return;=0A=
        }=0A=
      }=0A=
      sfgate_page =3D 1;=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_GetCgiParams() {=0A=
    var qs =3D window.location.search.substring(1, =
window.location.search.length);=0A=
    if (qs.length > 1) {=0A=
      var qarray =3D qs.split("&");=0A=
      for(var i=3D0; i < qarray.length; i++) {=0A=
        var kv =3D qarray[i].split("=3D"); =0A=
        cgis[kv[0]] =3D kv[1];=0A=
      }=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_mouseX(evt) {=0A=
    if (evt.pageX) {=0A=
      return evt.pageX;=0A=
    } else if (evt.clientX) {=0A=
      return evt.clientX + (document.documentElement.scrollLeft ? =
document.documentElement.scrollLeft : document.body.scrollLeft);=0A=
    } else {=0A=
      return null;=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_mouseY(evt) {=0A=
    if (evt.pageY) {=0A=
      return evt.pageY;=0A=
    } else if (evt.clientY) {=0A=
      return evt.clientY + (document.documentElement.scrollTop ? =
document.documentElement.scrollTop : document.body.scrollTop);=0A=
    } else {=0A=
      return null;=0A=
    }=0A=
  }=0A=
=0A=
  function sfgate_HideDiv(id){=0A=
    document.getElementById(id).style.display =3D "none";=0A=
  }=0A=
=0A=
  function sfgate_ShowDivAtMouse(evt, id) {=0A=
    posx =3D sfgate_mouseX(evt);// - 170;=0A=
    posy =3D sfgate_mouseY(evt);=0A=
    //normalize to make sure we at least appear on the screen=0A=
    if(posx < 0) posx =3D 10;=0A=
    if(posy < 0) posy =3D 10;=0A=
    document.getElementById(id).style.left =3D posx + "px";=0A=
    document.getElementById(id).style.top =3D posy + "px";=0A=
    document.getElementById(id).style.display =3D "block";=0A=
  }=0A=
=0A=
  function sfgate_ShowReportAbuse(evt, key) {=0A=
    document.getElementById("ReportAbuse_CommentKey").value =3D key;=0A=
    sfgate_ShowDivAtMouse(evt, "ReportAbuse_Menu");=0A=
  }=0A=
=0A=
=0A=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://imgs.sfgate.com/js1223403062/yld/js/yld_global.js

// /templates/types/widgets/pages/cssjs/yld_global_js.tmpl=0A=
// /js/ads/yld/yld_global.js=0A=
=0A=
if (typeof yld_mgr =3D=3D 'undefined') { yld_mgr =3D new Object(); }=0A=
yld_mgr.pub_id =3D "22658131511";=0A=
yld_mgr.site_name =3D "SFGate";=0A=
yld_mgr.request_type =3D "ac";=0A=
yld_mgr.container_type =3D "js";=0A=
yld_mgr.content_lang=3D"en-US";=0A=
=0A=
function sfgate_IsTsp() {=0A=
   var ref =3D document.referrer;=0A=
   var refRE =3D /^http:\/\/[a-z.]*sfgate\.com(\/|\/index.s?html)?$/;=0A=
   if ( ! ref.match(refRE) ) {=0A=
      return false;=0A=
   }=0A=
   var qs =3D window.location.search.substring(1, =
window.location.search.length);=0A=
   if (qs.length > 1) {=0A=
      var qarray =3D qs.split("&");=0A=
      var re =3D /^tsp=3D/;=0A=
      for(var i=3D0; i < qarray.length; i++) {=0A=
         if (qarray[i].match(re)) {=0A=
            return true;=0A=
         }=0A=
      }=0A=
   }=0A=
   return false;=0A=
}=0A=
=0A=
function sfgate_yldslotok(pos) {=0A=
   if (typeof yld_mgr.slots !=3D 'undefined') {=0A=
      if (typeof yld_mgr.slots[pos] !=3D 'undefined'=0A=
         && typeof yld_mgr.slots[pos]['ad_size_list'] !=3D 'undefined'=0A=
         && yld_mgr.slots[pos]['ad_size_list']=0A=
         && typeof yld_mgr.slots[pos]['ad_delivery_mode'] !=3D =
'undefined'=0A=
         && yld_mgr.slots[pos]['ad_delivery_mode']=0A=
         && typeof yld_mgr.slots[pos]['ad_format_list'] !=3D 'undefined'=0A=
         && yld_mgr.slots[pos]['ad_format_list']) {=0A=
         return true;=0A=
      } else {=0A=
         return false;=0A=
      }=0A=
   } else {=0A=
      return false;=0A=
   }=0A=
}=0A=
=0A=
// end /js/ads/yld/yld_global.js=0A=
=0A=
// end /templates/types/widgets/pages/cssjs/yld_global_js.tmpl=0A=
=0A=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://e.yieldmanager.net/script.js

(function(){var u=3Dwindow.yld_mgr;if(typeof(u)!=3D"object"){return}var =
h=3D"ym_";var l=3D1990;var =
k=3D"default_"+Math.round(9999999999*Math.random());u.is_data_call=3Du.re=
quest_type=3D=3D"bc";u.non_ad_request_type=3Du.request_type=3D=3D"bc"||u.=
request_type=3D=3D"fc";u.is_multi_ad_call=3Du.slots?true:false;u.is_sync_=
call=3Du.container_type=3D=3D"js";u.proxy_url=3D"http://e.yieldmanager.ne=
t/chunkPasser.html";var =
f=3D(!navigator.userAgent.match(/AppleWebKit\/([^ =
]*)/)&&!navigator.userAgent.match(/opera/gi)&&navigator.userAgent.match(/=
msie/gi));u.place_ad_here=3Dfunction(y){if(u.is_data_call){var =
x=3Dyld_mgr.getDataCallUrl(y);document.write('<iframe src=3D"'+x+'" =
height=3D0px width=3D0px =
style=3D"display:none">+</iframe>');return}if(u.is_sync_call){if(yld_mgr.=
show_ad_sync){yld_mgr.show_ad_sync(y)}}else{document.write("<div =
id=3D'"+h+y+"'></div>");if(yld_mgr.show_ad_here){yld_mgr.show_ad_here(h+y=
)}}};u.getIndex=3Dfunction(x){return =
yld_mgr.call_index[x]};u.getDataCallUrl=3Dfunction(x){if(yld_mgr.fac_data=
_call_urls&&yld_mgr.fac_data_call_urls.hasOwnProperty(x)){return =
yld_mgr.fac_data_call_urls[x]}else{return""}};u.getSlotName=3Dfunction(x)=
{return h+u.slot_names[x]};u.getNumberOfSlots=3Dfunction(){var =
y=3D0;for(var x in =
this.slots){if(this.slots.hasOwnProperty(x)){y++}}return y};function =
c(){if(u.is_data_call){a();if(!u.is_multi_ad_call){u.place_ad_here(k)}ret=
urn}var x=3Dd();s(x)}function =
s(x){if(u.is_sync_call&&!u.is_data_call){document.write('<script =
type=3D"text/javascript" =
src=3D"'+x+'"><\/script>')}else{if(!u.is_multi_ad_call){u.place_ad_here(k=
)}var y=3Ddocument.createElement("script");y.src=3Dx;var =
z=3Ddocument.getElementsByTagName("head")[0];yld_mgr.script_element=3Dy;w=
indow.setTimeout(function(){z.appendChild(y)},20)}}function =
e(y,z,x){return[j("fmt"+z,y.ad_format_list,1),j("sz"+z,y.ad_size_list,0),=
i("fSz"+z,g(y.ad_fit_size)?1:0),w("dlv"+z,y.ad_delivery_mode),j("conTy"+z=
,y.content_type_list,1),w("mrkr"+z,y.ad_marker),w("pltID"+z,y.palette_nam=
e),w("InvId"+z,y.inventory_id),j("rTg"+z,y.reporting_tag_list,1),j("cCat"=
+z,y.cstm_content_cat_list,1),w("sltId"+z,(u.is_sync_call&&u.is_multi_ad_=
call)?(z+""):x),w("mxCnt"+z,y.max_count)].join("")}function v(){var =
x=3Du.content_topic_id_list||u.pub_content_cat_id_list;return[w("pubId",u=
.pub_id),w("site",u.site_name),(u.non_ad_request_type)?w("rTy",u.request_=
type):"",w("cntTy",u.container_type?u.container_type:"dif"),w("inEnc",u.a=
d_input_encoding),j("cTopId",x,0),w("rd",u.redirect_clk_wrapper),w("cDst"=
,u.clk_dest),w("age",u.user_age),w("gdr",u.user_gender),w("inc",u.user_in=
come),j("cSctn",u.cstm_sctn_list||u.site_section_name_list,1),w("zip",u.u=
ser_zip),w("cty",u.user_city),w("dma",u.user_dma),w("st",u.user_state),w(=
"ctry",u.user_country),w("enc",u.ad_output_encoding),w("aTgt",u.audience_=
targeting),w("ctLng",u.content_lang),w("pUsrId",u.partner_user_id),w("tra=
ce",u.trace_id)].join("")}function =
t(y){u.call_index=3D{};u.slot_names=3D{};var =
z;if(!u.is_multi_ad_call){z=3De(u,"",h+k);if(p(y+z.length)){return""}u.ca=
ll_index[k]=3D0;u.slot_names[0]=3Dk;return z}var A=3D0;var =
x=3D"";for(var B in =
u.slots){if(u.slots.hasOwnProperty(B)){z=3De(u.slots[B],A,h+B);if(p(y+x.l=
ength+z.length)){return =
x}x+=3Dz;u.call_index[B]=3DA;u.slot_names[A]=3DB;A++}}return x}function =
q(x){var =
y=3D[(!x)?i("tagTy",(u.is_sync_call?"multi_secure":"uni")):"",(u.is_multi=
_ad_call)?i("nAdP",u.getNumberOfSlots()):"",i("rFrame",((window.top=3D=3D=
window.self)?"1":"0")),w("flv",r()),i("cb",(new =
Date()).getTime()),w("url",n())].join("");return y}function b(A){var =
C=3D"";var =
z=3Dw("ref",document.referrer);if(p(A+C.length+z.length)){return =
C}C+=3Dz;A+=3Dz.length;if(!u.non_ad_request_type&&!g(u.disable_content_se=
nd)){var y=3D"";if(f){var B=3Dl-4-A;if(B>0){var =
x=3DB>500?500:B;y=3Dm(document.getElementsByTagName("HTML")[0].innerHTML.=
substr(0,x)).substr(0,B);y=3Dy.replace(/%\w?$/,"")}}else{y=3Dm(document.g=
etElementsByTagName("HTML")[0].innerHTML.substr(0,500))}if(y){C+=3Di("byt=
",y)}}return C}function d(){var =
x=3Du.enable_test_call?"http://open.ad.yieldmanager.net/atest1?":"http://=
open.ad.yieldmanager.net/a1?";if("https:"=3D=3Dwindow.location.protocol){=
x=3Du.enable_test_call?"https://open.ad.yieldmanager.net/atest1?":"https:=
//open.ad.yieldmanager.net/a1?"}x+=3D"V=3D3";x+=3Dv();x+=3Dq(false);x+=3D=
t(x.length);x+=3Db(x.length);return x}function =
a(){yld_mgr.fac_data_call_urls=3D{};if(!u.is_multi_ad_call){yld_mgr.fac_d=
ata_call_urls[k]=3Do(u,k);return}for(var x in =
u.slots){if(u.slots.hasOwnProperty(x)){yld_mgr.fac_data_call_urls[x]=3Do(=
u.slots[x],x)}}}function o(z,y){var =
x=3Du.enable_test_call?"http://open.ad.yieldmanager.net/atest1?":"http://=
open.ad.yieldmanager.net/a1?";if("https:"=3D=3Dwindow.location.protocol){=
x=3Du.enable_test_call?"https://open.ad.yieldmanager.net/atest1?":"https:=
//open.ad.yieldmanager.net/a1?"}x+=3D"V=3D3";if(!u.container_type||(u.con=
tainer_type=3D=3D"dif")){u.container_type=3D"iframe";x+=3Dv();u.container=
_type=3D"dif"}else{x+=3Dv()}if(u.is_multi_ad_call){u.is_multi_ad_call=3Df=
alse;x+=3Dq(true);u.is_multi_ad_call=3Dtrue}else{x+=3Dq(true)}x+=3De(z,""=
,h+y);x+=3Db(x.length);return x}function p(x){if(f&&(x>l)){return =
true}return false}function n(){var =
x=3D"";try{if(top.location){x=3Dtop.location.href}}catch(y){}return =
x}function r(){var z=3Dnew =
Object();z.installed=3Dfalse;z.version=3D"0.0";if(navigator.plugins&&navi=
gator.plugins.length){for(var =
y=3D0;y<navigator.plugins.length;y++){if(navigator.plugins[y].name.indexO=
f("Shockwave =
Flash")!=3D-1){z.version=3Dnavigator.plugins[y].description.split("Shockw=
ave Flash =
")[1];z.installed=3Dtrue;break}}}else{if(window.ActiveXObject){for(y=3D2;=
y<10;y++){try{oFlash=3Dnew =
ActiveXObject("ShockwaveFlash.ShockwaveFlash."+y);if(oFlash){z.installed=3D=
true;z.version=3Dy+".0"}}catch(A){}}}}if(!z.installed){return"nf"}return =
z.version}function =
m(x){if(x){if(typeof(encodeURIComponent)=3D=3D"function"){return =
encodeURIComponent(x)}else{return escape(x)}}return x}function =
i(y,z){var x=3D"";if(z){x+=3D"&"+y+"=3D"+z}return x}function =
w(x,y){return i(x,m(y))}function j(A,x,B){var =
y=3D"";if(x&&x.length){y+=3D"&"+A+"=3D"+(B?m(x[0]):x[0]);for(var =
z=3D1;z<x.length;z++){y+=3D","+(B?m(x[z]):x[z])}}return y}function =
g(x){return parseInt(x,10)}c()})();
------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://imgs.sfgate.com/js/omniture/s_code.js

/* SiteCatalyst code version: H.10.=0A=
Copyright 1997-2007 Omniture, Inc. More info available at=0A=
http://www.omniture.com */=0A=
/************************ ADDITIONAL FEATURES ************************=0A=
     Plugins=0A=
*/=0A=
/* Specify the Report Suite ID(s) to track here */=0A=
var s_account=3D"hearstsfgatecom"=0A=
var s=3Ds_gi(s_account)=0A=
=0A=
/* Google Referrer Change Patch v1.1 */=0A=
function s_rf(s){s._rf_f=3Dnew Function('t','l','var =
s=3Dthis,i=3Dt?t.indexOf("=3D"):-1,n=3D(l.substring(0,1)=3D=3D"!");l=3Dn?=
l.substring(1):l;if(t){if(i>0){if((","+l+",").indexOf(","+t.substring(0,i=
)+",")>=3D0)t=3Dn?""'=0A=
+':t;else t=3Dn?t:""}if(t)s._rf_b+=3D(s._rf_b?"&":"")+t}');s._rf=3Dnew =
Function('x','var =
s=3Dthis,y,i,h,a,b,l=3D"q,ie,start,search_key,word,kw,cd";y=3Dx=3D""+x;i=3D=
y.indexOf("?");if(i>=3D0){a=3D"&"+y.substring(i+1)+"&";'=0A=
+'y=3Dy.substring(0,i);h=3Dy.toLowerCase();i=3D0;if(h.substring(0,7)=3D=3D=
"http://")i+=3D7;else =
if(h.substring(0,8)=3D=3D"https://")i+=3D8;h=3Dh.substring(i);i=3Dh.index=
Of("/");if(i>0){h=3Dh.substring(0,i);if(h.indexOf("goo'=0A=
+'gle")>=3D0&&(a.indexOf("&q=3D")>=3D0||a.indexOf("&ie=3D")>=3D0||a.index=
Of("&start=3D")>=3D0||a.indexOf("&search_key=3D")>=3D0||a.indexOf("&word=3D=
")>=3D0||a.indexOf("&kw=3D")>=3D0||a.indexOf("&cd=3D")>=3D0)){s._rf_b=3D"=
";s.pt(a,"'=0A=
+'&","_rf_f",l);s.pt(a,"&","_rf_f","!"+l);b=3Ds._rf_b;if(b!=3Da)return =
y+"?"+b}}}return x');s._rf_fl=3Ds.fl;s.fl=3Dnew Function('x','l','var =
s=3Dthis;if(x&&l=3D=3D255)x=3Ds._rf(x);return s._rf_fl(x,l)');s._rf_hav=3D=0A=
s.hav;s.hav=3Dnew Function('var =
s=3Dthis,x=3Ds.referrer;if(x)s.referrer=3Ds.fl(x,255);return =
s._rf_hav()')}s_rf(s);=0A=
=0A=
/************************** CONFIG SECTION **************************/=0A=
/* You may add or alter any code config here. */=0A=
/* Link Tracking Config */=0A=
s.trackDownloadLinks=3Dtrue=0A=
s.trackExternalLinks=3Dtrue=0A=
s.trackInlineStats=3Dtrue=0A=
s.linkDownloadFileTypes=3D"exe,zip,wav,mp3,mov,mpg,avi,wmv,doc,pdf,xls"=0A=
s.linkInternalFilters=3D"javascript:,sfgate"=0A=
s.linkLeaveQueryString=3Dfalse=0A=
s.linkTrackVars=3D"None"=0A=
s.linkTrackEvents=3D"None"=0A=
/* Plugin Config */=0A=
s.usePlugins=3Dtrue=0A=
function s_doPlugins(s) {=0A=
	=0A=
/* External Campaign Tracking */=0A=
if(!s.campaign){=0A=
	s.campaign=3Ds.getQueryParam('cmpid')=0A=
	s.campaign=3Ds.getValOnce(s.campaign,'s_campaign',0)=0A=
}=0A=
/* Lowercase variables */=0A=
if(s.prop1) s.prop1=3Ds.prop1.toLowerCase()=0A=
=0A=
/* Copy search term to eVar */=0A=
if(s.prop1){=0A=
	s.eVar1=3Ds.prop1=0A=
=0A=
	/* Set de-duped onsite search event */=0A=
	var t_search=3Ds.getValOnce(s.eVar1,'ev1',0)=0A=
	if(t_search) s.events=3Ds.apl(s.events,'event1',',',1)=0A=
}=0A=
=0A=
/* Set Page View Event */=0A=
s.events=3Ds.events?s.events+',event2':'event2';=0A=
=0A=
/* Copy Page Name, Channel, & Article Title to eVars */=0A=
if(s.pageName) s.eVar3=3Ds.pageName=0A=
if(s.channel) s.eVar4=3Ds.channel=0A=
if(s.prop12) s.eVar5=3Ds.prop12=0A=
=0A=
/* Time Parting Plug-in PST */=0A=
s.prop14=3Ds.getTimeParting('h','-8','2007'); // Set hour =0A=
s.prop15=3Ds.getTimeParting('d','-8','2007'); // Set day=0A=
s.prop16=3Ds.getTimeParting('w','-8','2007'); // Set Weekend / Weekday=0A=
=0A=
}=0A=
s.doPlugins=3Ds_doPlugins=0A=
/************************** PLUGINS SECTION *************************/=0A=
/* You may insert any plugins you wish to use here.                 */=0A=
/*=0A=
 * Plugin: getTimeParting 1.3 - Set timeparting values based on time zone=0A=
 */=0A=
=0A=
s.getTimeParting=3Dnew Function("t","z","y",""=0A=
+"dc=3Dnew Date('1/1/2000');f=3D15;ne=3D8;if(dc.getDay()!=3D6||"=0A=
+"dc.getMonth()!=3D0){return'Data Not Available'}else{;z=3DparseInt(z);"=0A=
+"if(y=3D=3D'2009'){f=3D8;ne=3D1};gmar=3Dnew =
Date('3/1/'+y);dsts=3Df-gmar.getDay("=0A=
+");gnov=3Dnew Date('11/1/'+y);dste=3Dne-gnov.getDay();spr=3Dnew =
Date('3/'"=0A=
+"+dsts+'/'+y);fl=3Dnew Date('11/'+dste+'/'+y);cd=3Dnew Date();"=0A=
+"if(cd>spr&&cd<fl){z=3Dz+1}else{z=3Dz};utc=3Dcd.getTime()+(cd.getTimezon=
eO"=0A=
+"ffset()*60000);tz=3Dnew Date(utc + =
(3600000*z));thisy=3Dtz.getFullYear("=0A=
+");var days=3D['Sunday','Monday','Tuesday','Wednesday','Thursday','Fr"=0A=
+"iday','Saturday'];if(thisy!=3Dy){return'Data Not Available'}else{;thi"=0A=
+"sh=3Dtz.getHours();thismin=3Dtz.getMinutes();thisd=3Dtz.getDay();var =
dow=3D"=0A=
+"days[thisd];var ap=3D'AM';var dt=3D'Weekday';var =
mint=3D'00';if(thismin>3"=0A=
+"0){mint=3D'30'}if(thish>=3D12){ap=3D'PM';thish=3Dthish-12};if =
(thish=3D=3D0){th"=0A=
+"ish=3D12};if(thisd=3D=3D6||thisd=3D=3D0){dt=3D'Weekend'};var =
timestring=3Dthish+'"=0A=
+":'+mint+ap;var daystring=3Ddow;var =
endstring=3Ddt;if(t=3D=3D'h'){return tim"=0A=
+"estring}if(t=3D=3D'd'){return daystring};if(t=3D=3D'w'){return en"=0A=
+"dstring}}};"=0A=
);=0A=
/*=0A=
 * Plugin Utility: apl v1.1=0A=
 */=0A=
s.apl=3Dnew Function("L","v","d","u",""=0A=
+"var s=3Dthis,m=3D0;if(!L)L=3D'';if(u){var =
i,n,a=3Ds.split(L,d);for(i=3D0;i<a."=0A=
+"length;i++){n=3Da[i];m=3Dm||(u=3D=3D1?(n=3D=3Dv):(n.toLowerCase()=3D=3D=
v.toLowerCas"=0A=
+"e()));}}if(!m)L=3DL?L+d+v:v;return L");=0A=
/*=0A=
 * Plugin: getQueryParam 2.1 - return query string parameter(s)=0A=
 */=0A=
s.getQueryParam=3Dnew Function("p","d","u",""=0A=
+"var =
s=3Dthis,v=3D'',i,t;d=3Dd?d:'';u=3Du?u:(s.pageURL?s.pageURL:s.wd.locati"=0A=
+"on);if(u=3D=3D'f')u=3Ds.gtfs().location;while(p){i=3Dp.indexOf(',');i=3D=
i<0?p"=0A=
+".length:i;t=3Ds.p_gpv(p.substring(0,i),u+'');if(t)v+=3Dv?d+t:t;p=3Dp.su=
bs"=0A=
+"tring(i=3D=3Dp.length?i:i+1)}return v");=0A=
s.p_gpv=3Dnew Function("k","u",""=0A=
+"var =
s=3Dthis,v=3D'',i=3Du.indexOf('?'),q;if(k&&i>-1){q=3Du.substring(i+1);v"=0A=
+"=3Ds.pt(q,'&','p_gvf',k)}return v");=0A=
s.p_gvf=3Dnew Function("t","k",""=0A=
+"if(t){var =
s=3Dthis,i=3Dt.indexOf('=3D'),p=3Di<0?t:t.substring(0,i),v=3Di<0?'T"=0A=
+"rue':t.substring(i+1);if(p.toLowerCase()=3D=3Dk.toLowerCase())return =
s."=0A=
+"epa(v)}return ''");=0A=
/*=0A=
 * Plugin: getValOnce 0.2 - get a value once per session or number of =
days=0A=
 */=0A=
s.getValOnce=3Dnew Function("v","c","e",""=0A=
+"var s=3Dthis,k=3Ds.c_r(c),a=3Dnew =
Date;e=3De?e:0;if(v){a.setTime(a.getTime("=0A=
+")+e*86400000);s.c_w(c,v,e?a:0);}return v=3D=3Dk?'':v");=0A=
=0A=
/* WARNING: Changing any of the below variables will cause drastic=0A=
changes to how your visitor data is collected.  Changes should only be=0A=
made when instructed to do so by your account manager.*/=0A=
s.visitorNamespace=3D"hearst"=0A=
s.trackingServer=3D"om.sfgate.com"=0A=
s.trackingServerSecure=3D"som.sfgate.com"=0A=
s.dc=3D112=0A=
=0A=
/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/=0A=
var s_objectID;function s_c2fe(f){var x=3D'',s=3D0,e,a,b,c;while(1){e=3D=0A=
f.indexOf('"',s);b=3Df.indexOf('\\',s);c=3Df.indexOf("\n",s);if(e<0||(b>=3D=0A=
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):=0A=
'')+(e=3D=3Dc?'\\n':'\\'+f.substring(e,e+1));s=3De+1}else return x=0A=
+f.substring(s)}return f}function s_c2fa(f){var s=3Df.indexOf('(')+1,e=3D=0A=
f.indexOf(')'),a=3D'',c;while(s>=3D0&&s<e){c=3Df.substring(s,s+1);if(c=3D=
=3D',')=0A=
a+=3D'","';else if(("\n\r\t ").indexOf(c)<0)a+=3Dc;s++}return =
a?'"'+a+'"':=0A=
a}function s_c2f(cc){cc=3D''+cc;var fc=3D'var f=3Dnew Function(',s=3D=0A=
cc.indexOf(';',cc.indexOf('{')),e=3Dcc.lastIndexOf('}'),o,a,d,q,c,f,h,x=0A=
fc+=3Ds_c2fa(cc)+',"var s=3Dnew Object;';c=3Dcc.substring(s+1,e);s=3D=0A=
c.indexOf('function');while(s>=3D0){d=3D1;q=3D'';x=3D0;f=3Dc.substring(s)=
;a=3D=0A=
s_c2fa(f);e=3Do=3Dc.indexOf('{',s);e++;while(d>0){h=3Dc.substring(e,e+1);=
if(=0A=
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"'"=0A=
)q=3Dh;if(h=3D=3D'{')d++;if(h=3D=3D'}')d--}if(d>0)e++}c=3Dc.substring(0,s=
)=0A=
+'new Function('+(a?a+',':'')+'"'+s_c2fe(c.substring(o+1,e))+'")'=0A=
+c.substring(e+1);s=3Dc.indexOf('function')}fc+=3Ds_c2fe(c)+';return =
s");'=0A=
eval(fc);return f}function s_gi(un,pg,ss){var c=3D"function s_c(un,pg,s"=0A=
+"s){var s=3Dthis;s.wd=3Dwindow;if(!s.wd.s_c_in){s.wd.s_c_il=3Dnew =
Array;s."=0A=
+"wd.s_c_in=3D0;}s._il=3Ds.wd.s_c_il;s._in=3Ds.wd.s_c_in;s._il[s._in]=3Ds=
;s.w"=0A=
+"d.s_c_in++;s.m=3Dfunction(m){return =
(''+m).indexOf('{')<0};s.fl=3Dfunct"=0A=
+"ion(x,l){return x?(''+x).substring(0,l):x};s.co=3Dfunction(o){if(!o)r"=0A=
+"eturn o;var n=3Dnew Object,x;for(x in o)if(x.indexOf('select')<0&&x.i"=0A=
+"ndexOf('filter')<0)n[x]=3Do[x];return =
n};s.num=3Dfunction(x){x=3D''+x;for"=0A=
+"(var p=3D0;p<x.length;p++)if(('0123456789').indexOf(x.substring(p,p+1"=0A=
+"))<0)return 0;return 1};s.rep=3Dfunction(x,o,n){var =
i=3Dx.indexOf(o);wh"=0A=
+"ile(x&&i>=3D0){x=3Dx.substring(0,i)+n+x.substring(i+o.length);i=3Dx.ind=
ex"=0A=
+"Of(o,i+n.length)}return x};s.ape=3Dfunction(x){var =
s=3Dthis,h=3D'01234567"=0A=
+"89ABCDEF',i,c=3Ds.charSet,n,l,e,y=3D'';c=3Dc?c.toUpperCase():'';if(x){x=
=3D'"=0A=
+"'+x;if(c=3D=3D'AUTO'&&('').charCodeAt){for(i=3D0;i<x.length;i++){c=3Dx.=
subs"=0A=
+"tring(i,i+1);n=3Dx.charCodeAt(i);if(n>127){l=3D0;e=3D'';while(n||l<4){e=
=3Dh"=0A=
+".substring(n%16,n%16+1)+e;n=3DparseInt(n/16);l++}y+=3D'%u'+e}else =
if(c=3D"=0A=
+"=3D'+')y+=3D'%2B';else =
y+=3Descape(c)}x=3Dy}else{x=3Dx?s.rep(escape(''+x),'+'"=0A=
+",'%2B'):x;if(x&&c&&s.em=3D=3D1&&x.indexOf('%u')<0&&x.indexOf('%U')<0){i=
"=0A=
+"=3Dx.indexOf('%');while(i>=3D0){i++;if(h.substring(8).indexOf(x.substri=
"=0A=
+"ng(i,i+1).toUpperCase())>=3D0)return x.substring(0,i)+'u00'+x.substri"=0A=
+"ng(i);i=3Dx.indexOf('%',i)}}}}return x};s.epa=3Dfunction(x){var =
s=3Dthis;"=0A=
+"return x?unescape(s.rep(''+x,'+',' ')):x};s.pt=3Dfunction(x,d,f,a){va"=0A=
+"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"=0A=
+"ubstring(0,y);r=3Ds.m(f)?s[f](t,a):f(t,a);if(r)return =
r;z+=3Dy+d.length"=0A=
+";t=3Dx.substring(z,x.length);t=3Dz<x.length?t:''}return =
''};s.isf=3Dfunct"=0A=
+"ion(t,a){var =
c=3Da.indexOf(':');if(c>=3D0)a=3Da.substring(0,c);if(t.subst"=0A=
+"ring(0,2)=3D=3D's_')t=3Dt.substring(2);return =
(t!=3D''&&t=3D=3Da)};s.fsf=3Dfuncti"=0A=
+"on(t,a){var =
s=3Dthis;if(s.pt(a,',','isf',t))s.fsg+=3D(s.fsg!=3D''?',':'')"=0A=
+"+t;return 0};s.fs=3Dfunction(x,f){var =
s=3Dthis;s.fsg=3D'';s.pt(x,',','fsf"=0A=
+"',f);return s.fsg};s.c_d=3D'';s.c_gdf=3Dfunction(t,a){var =
s=3Dthis;if(!s."=0A=
+"num(t))return 1;return 0};s.c_gd=3Dfunction(){var =
s=3Dthis,d=3Ds.wd.locat"=0A=
+"ion.hostname,n=3Ds.fpCookieDomainPeriods,p;if(!n)n=3Ds.cookieDomainPeri=
"=0A=
+"ods;if(d&&!s.c_d){n=3Dn?parseInt(n):2;n=3Dn>2?n:2;p=3Dd.lastIndexOf('.'=
);"=0A=
+"if(p>=3D0){while(p>=3D0&&n>1){p=3Dd.lastIndexOf('.',p-1);n--}s.c_d=3Dp>=
0&&s"=0A=
+".pt(d,'.','c_gdf',0)?d.substring(p):d}}return s.c_d};s.c_r=3Dfunction"=0A=
+"(k){var s=3Dthis;k=3Ds.ape(k);var c=3D' '+s.d.cookie,i=3Dc.indexOf(' =
'+k+'=3D"=0A=
+"'),e=3Di<0?i:c.indexOf(';',i),v=3Di<0?'':s.epa(c.substring(i+2+k.length=
"=0A=
+",e<0?c.length:e));return =
v!=3D'[[B]]'?v:''};s.c_w=3Dfunction(k,v,e){var"=0A=
+" =
s=3Dthis,d=3Ds.c_gd(),l=3Ds.cookieLifetime,t;v=3D''+v;l=3Dl?(''+l).toUppe=
rCa"=0A=
+"se():'';if(e&&l!=3D'SESSION'&&l!=3D'NONE'){t=3D(v!=3D''?parseInt(l?l:0)=
:-60"=0A=
+");if(t){e=3Dnew =
Date;e.setTime(e.getTime()+(t*1000))}}if(k&&l!=3D'NONE'"=0A=
+"){s.d.cookie=3Dk+'=3D'+s.ape(v!=3D''?v:'[[B]]')+'; =
path=3D/;'+(e&&l!=3D'SESSI"=0A=
+"ON'?' expires=3D'+e.toGMTString()+';':'')+(d?' =
domain=3D'+d+';':'');ret"=0A=
+"urn s.c_r(k)=3D=3Dv}return 0};s.eh=3Dfunction(o,e,r,f){var =
s=3Dthis,b=3D's_'+"=0A=
+"e+'_'+s._in,n=3D-1,l,i,x;if(!s.ehl)s.ehl=3Dnew =
Array;l=3Ds.ehl;for(i=3D0;i<"=0A=
+"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"=0A=
+" =
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"=0A=
+"}if(x.b){x.o[b]=3Dx.b;return b}return =
0};s.cet=3Dfunction(f,a,t,o,b){va"=0A=
+"r =
s=3Dthis,r;if(s.apv>=3D5&&(!s.isopera||s.apv>=3D7))eval('try{r=3Ds.m(f)?s=
"=0A=
+"[f](a):f(a)}catch(e){r=3Ds.m(t)?s[t](e):t(e)}');else{if(s.ismac&&s.u."=0A=
+"indexOf('MSIE =
4')>=3D0)r=3Ds.m(b)?s[b](a):b(a);else{s.eh(s.wd,'onerror'"=0A=
+",0,o);r=3Ds.m(f)?s[f](a):f(a);s.eh(s.wd,'onerror',1)}}return r};s.gtf"=0A=
+"set=3Dfunction(e){var s=3Dthis;return s.tfs};s.gtfsoe=3Dnew =
Function('e',"=0A=
+"'var s=3Ds_c_il['+s._in+'];s.eh(window,\"onerror\",1);s.etfs=3D1;var =
c=3D"=0A=
+"s.t();if(c)s.d.write(c);s.etfs=3D0;return =
true');s.gtfsfb=3Dfunction(a)"=0A=
+"{return window};s.gtfsf=3Dfunction(w){var =
s=3Dthis,p=3Dw.parent,l=3Dw.locat"=0A=
+"ion;s.tfs=3Dw;if(p&&p.location!=3Dl&&p.location.host=3D=3Dl.host){s.tfs=
=3Dp;r"=0A=
+"eturn s.gtfsf(s.tfs)}return s.tfs};s.gtfs=3Dfunction(){var =
s=3Dthis;if("=0A=
+"!s.tfs){s.tfs=3Ds.wd;if(!s.etfs)s.tfs=3Ds.cet('gtfsf',s.tfs,'gtfset',s.=
"=0A=
+"gtfsoe,'gtfsfb')}return s.tfs};s.mr=3Dfunction(sess,q,ta){var =
s=3Dthis,"=0A=
+"dc=3Ds.dc,t1=3Ds.trackingServer,t2=3Ds.trackingServerSecure,ns=3Ds.visi=
torN"=0A=
+"amespace,unc=3Ds.rep(s.fun,'_','-'),imn=3D's_i_'+s.fun,im,b,e,rs=3D'htt=
p'"=0A=
+"+(s.ssl?'s':'')+'://'+(t1?(s.ssl&&t2?t2:t1):((ns?ns:(s.ssl?'102':un"=0A=
+"c))+'.'+(s.dc?s.dc:112)+'.2o7.net'))+'/b/ss/'+s.un+'/1/H.10-Pdvu-2/"=0A=
+"'+sess+'?[AQB]&ndh=3D1'+(q?q:'')+(s.q?s.q:'')+'&[AQE]';if(s.isie&&!s."=0A=
+"ismac){if(s.apv>5.5)rs=3Ds.fl(rs,4095);else =
rs=3Ds.fl(rs,2047)}if(s.d.i"=0A=
+"mages&&s.apv>=3D3&&(!s.isopera||s.apv>=3D7)&&(s.ns6<0||s.apv>=3D6.1)){i=
m=3D"=0A=
+"s.wd[imn];if(!im)im=3Ds.wd[imn]=3Dnew =
Image;im.src=3Drs;if(rs.indexOf('&p"=0A=
+"e=3D')>=3D0&&(!ta||ta=3D=3D'_self'||ta=3D=3D'_top'||(s.wd.name&&ta=3D=3D=
s.wd.name))"=0A=
+"){b=3De=3Dnew Date;while(e.getTime()-b.getTime()<500)e=3Dnew =
Date}return "=0A=
+"''}return '<im'+'g sr'+'c=3D\"'+rs+'\" width=3D1 height=3D1 border=3D0 =
alt=3D"=0A=
+"\"\">'};s.gg=3Dfunction(v){var s=3Dthis;return =
s.wd['s_'+v]};s.glf=3Dfunc"=0A=
+"tion(t,a){if(t.substring(0,2)=3D=3D's_')t=3Dt.substring(2);var =
s=3Dthis,v=3Ds"=0A=
+".gg(t);if(v)s[t]=3Dv};s.gl=3Dfunction(v){var =
s=3Dthis;if(s.pg)s.pt(v,',',"=0A=
+"'glf',0)};s.gv=3Dfunction(v){var s=3Dthis;return =
s['vpm_'+v]?s['vpv_'+v"=0A=
+"]:(s[v]?s[v]:'')};s.havf=3Dfunction(t,a){var =
s=3Dthis,b=3Dt.substring(0,4"=0A=
+"),x=3Dt.substring(4),n=3DparseInt(x),k=3D'g_'+t,m=3D'vpm_'+t,q=3Dt,v=3D=
s.linkTr"=0A=
+"ackVars,e=3Ds.linkTrackEvents;s[k]=3Ds.gv(t);if(s.lnk||s.eo){v=3Dv?v+',=
'+"=0A=
+"s.vl_l:'';if(v&&!s.pt(v,',','isf',t))s[k]=3D'';if(t=3D=3D'events'&&e)s[=
k]"=0A=
+"=3Ds.fs(s[k],e)}s[m]=3D0;if(t=3D=3D'visitorID')q=3D'vid';else =
if(t=3D=3D'pageURL'"=0A=
+"){q=3D'g';s[k]=3Ds.fl(s[k],255)}else =
if(t=3D=3D'referrer'){q=3D'r';s[k]=3Ds.fl("=0A=
+"s[k],255)}else if(t=3D=3D'vmk')q=3D'vmt';else =
if(t=3D=3D'charSet'){q=3D'ce';if("=0A=
+"s[k]&&s[k].toUpperCase()=3D=3D'AUTO')s[k]=3D'ISO8859-1';else =
if(s[k]&&s.e"=0A=
+"m=3D=3D2)s[k]=3D'UTF-8'}else =
if(t=3D=3D'visitorNamespace')q=3D'ns';else if(t=3D=3D'"=0A=
+"cookieDomainPeriods')q=3D'cdp';else =
if(t=3D=3D'cookieLifetime')q=3D'cl';els"=0A=
+"e if(t=3D=3D'variableProvider')q=3D'vvp';else =
if(t=3D=3D'currencyCode')q=3D'cc'"=0A=
+";else if(t=3D=3D'channel')q=3D'ch';else =
if(t=3D=3D'transactionID')q=3D'xact';el"=0A=
+"se if(t=3D=3D'campaign')q=3D'v0';else =
if(s.num(x)){if(b=3D=3D'prop')q=3D'c'+n;e"=0A=
+"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],"=0A=
+"255)}}if(s[k]&&t!=3D'linkName'&&t!=3D'linkType')s.qav+=3D'&'+q+'=3D'+s.=
ape("=0A=
+"s[k]);return ''};s.hav=3Dfunction(){var =
s=3Dthis;s.qav=3D'';s.pt(s.vl_t,'"=0A=
+",','havf',0);return =
s.qav};s.lnf=3Dfunction(t,h){t=3Dt?t.toLowerCase():"=0A=
+"'';h=3Dh?h.toLowerCase():'';var =
te=3Dt.indexOf('=3D');if(t&&te>0&&h.index"=0A=
+"Of(t.substring(te+1))>=3D0)return t.substring(0,te);return =
''};s.ln=3Df"=0A=
+"unction(h){var s=3Dthis,n=3Ds.linkNames;if(n)return =
s.pt(n,',','lnf',h)"=0A=
+";return =
''};s.ltdf=3Dfunction(t,h){t=3Dt?t.toLowerCase():'';h=3Dh?h.toLow"=0A=
+"erCase():'';var =
qi=3Dh.indexOf('?');h=3Dqi>=3D0?h.substring(0,qi):h;if(t&"=0A=
+"&h.substring(h.length-(t.length+1))=3D=3D'.'+t)return 1;return =
0};s.lte"=0A=
+"f=3Dfunction(t,h){t=3Dt?t.toLowerCase():'';h=3Dh?h.toLowerCase():'';if(=
t&"=0A=
+"&h.indexOf(t)>=3D0)return 1;return 0};s.lt=3Dfunction(h){var =
s=3Dthis,lft"=0A=
+"=3Ds.linkDownloadFileTypes,lef=3Ds.linkExternalFilters,lif=3Ds.linkInte=
rn"=0A=
+"alFilters;lif=3Dlif?lif:s.wd.location.hostname;h=3Dh.toLowerCase();if(s=
"=0A=
+".trackDownloadLinks&&lft&&s.pt(lft,',','ltdf',h))return 'd';if(s.tr"=0A=
+"ackExternalLinks&&(lef||lif)&&(!lef||s.pt(lef,',','ltef',h))&&(!lif"=0A=
+"||!s.pt(lif,',','ltef',h)))return 'e';return ''};s.lc=3Dnew Function("=0A=
+"'e','var =
s=3Ds_c_il['+s._in+'],b=3Ds.eh(this,\"onclick\");s.lnk=3Ds.co(th"=0A=
+"is);s.t();s.lnk=3D0;if(b)return this[b](e);return true');s.bc=3Dnew =
Fun"=0A=
+"ction('e','var s=3Ds_c_il['+s._in+'],f;if(s.d&&s.d.all&&s.d.all.cppXY"=0A=
+"ctnr)return;s.eo=3De.srcElement?e.srcElement:e.target;eval(\"try{if(s"=0A=
+".eo&&(s.eo.tagName||s.eo.parentElement||s.eo.parentNode))s.t()}catc"=0A=
+"h(f){}\");s.eo=3D0');s.ot=3Dfunction(o){var =
a=3Do.type,b=3Do.tagName;return"=0A=
+" (a&&a.toUpperCase?a:b&&b.toUpperCase?b:o.href?'A':'').toUpperCase("=0A=
+")};s.oid=3Dfunction(o){var =
s=3Dthis,t=3Ds.ot(o),p=3Do.protocol,c=3Do.onclick,"=0A=
+"n=3D'',x=3D0;if(!o.s_oid){if(o.href&&(t=3D=3D'A'||t=3D=3D'AREA')&&(!c||=
!p||p.to"=0A=
+"LowerCase().indexOf('javascript')<0))n=3Do.href;else =
if(c){n=3Ds.rep(s."=0A=
+"rep(s.rep(s.rep(''+c,\"\\r\",''),\"\\n\",''),\"\\t\",''),' ','');x=3D"=0A=
+"2}else =
if(o.value&&(t=3D=3D'INPUT'||t=3D=3D'SUBMIT')){n=3Do.value;x=3D3}else if"=0A=
+"(o.src&&t=3D=3D'IMAGE')n=3Do.src;if(n){o.s_oid=3Ds.fl(n,100);o.s_oidt=3D=
x}}re"=0A=
+"turn o.s_oid};s.rqf=3Dfunction(t,un){var =
s=3Dthis,e=3Dt.indexOf('=3D'),u=3De>"=0A=
+"=3D0?','+t.substring(0,e)+',':'';return =
u&&u.indexOf(','+un+',')>=3D0?s"=0A=
+".epa(t.substring(e+1)):''};s.rq=3Dfunction(un){var =
s=3Dthis,c=3Dun.indexO"=0A=
+"f(','),v=3Ds.c_r('s_sq'),q=3D'';if(c<0)return =
s.pt(v,'&','rqf',un);retu"=0A=
+"rn s.pt(un,',','rq',0)};s.sqp=3Dfunction(t,a){var =
s=3Dthis,e=3Dt.indexOf("=0A=
+"'=3D'),q=3De<0?'':s.epa(t.substring(e+1));s.sqq[q]=3D'';if(e>=3D0)s.pt(=
t.su"=0A=
+"bstring(0,e),',','sqs',q);return 0};s.sqs=3Dfunction(un,q){var =
s=3Dthis"=0A=
+";s.squ[un]=3Dq;return 0};s.sq=3Dfunction(q){var =
s=3Dthis,k=3D's_sq',v=3Ds.c_r"=0A=
+"(k),x,c=3D0;s.sqq=3Dnew Object;s.squ=3Dnew =
Object;s.sqq[q]=3D'';s.pt(v,'&',"=0A=
+"'sqp',0);s.pt(s.un,',','sqs',q);v=3D'';for(x in s.squ)s.sqq[s.squ[x]]"=0A=
+"+=3D(s.sqq[s.squ[x]]?',':'')+x;for(x in =
s.sqq)if(x&&s.sqq[x]&&(x=3D=3Dq||"=0A=
+"c<2)){v+=3D(v?'&':'')+s.sqq[x]+'=3D'+s.ape(x);c++}return =
s.c_w(k,v,0)};"=0A=
+"s.wdl=3Dnew Function('e','var =
s=3Ds_c_il['+s._in+'],r=3Dtrue,b=3Ds.eh(s.wd,"=0A=
+"\"onload\"),i,o,oc;if(b)r=3Dthis[b](e);for(i=3D0;i<s.d.links.length;i++=
"=0A=
+"){o=3Ds.d.links[i];oc=3Do.onclick?\"\"+o.onclick:\"\";if((oc.indexOf(\"=
"=0A=
+"s_gs(\")<0||oc.indexOf(\".s_oc(\")>=3D0)&&oc.indexOf(\".tl(\")<0)s.eh"=0A=
+"(o,\"onclick\",0,s.lc);}return r');s.wds=3Dfunction(){var =
s=3Dthis;if(s"=0A=
+".apv>3&&(!s.isie||!s.ismac||s.apv>=3D5)){if(s.b&&s.b.attachEvent)s.b."=0A=
+"attachEvent('onclick',s.bc);else if(s.b&&s.b.addEventListener)s.b.a"=0A=
+"ddEventListener('click',s.bc,false);else s.eh(s.wd,'onload',0,s.wdl"=0A=
+")}};s.vs=3Dfunction(x){var =
s=3Dthis,v=3Ds.visitorSampling,g=3Ds.visitorSamp"=0A=
+"lingGroup,k=3D's_vsn_'+s.un+(g?'_'+g:''),n=3Ds.c_r(k),e=3Dnew =
Date,y=3De.ge"=0A=
+"tYear();e.setYear(y+10+(y<1900?1900:0));if(v){v*=3D100;if(!n){if(!s.c"=0A=
+"_w(k,x,e))return 0;n=3Dx}if(n%10000>v)return 0}return =
1};s.dyasmf=3Dfun"=0A=
+"ction(t,m){if(t&&m&&m.indexOf(t)>=3D0)return 1;return =
0};s.dyasf=3Dfunc"=0A=
+"tion(t,m){var s=3Dthis,i=3Dt?t.indexOf('=3D'):-1,n,x;if(i>=3D0&&m){var =
n=3Dt."=0A=
+"substring(0,i),x=3Dt.substring(i+1);if(s.pt(x,',','dyasmf',m))return "=0A=
+"n}return 0};s.uns=3Dfunction(){var =
s=3Dthis,x=3Ds.dynamicAccountSelection"=0A=
+",l=3Ds.dynamicAccountList,m=3Ds.dynamicAccountMatch,n,i;s.un.toLowerCas=
"=0A=
+"e();if(x&&l){if(!m)m=3Ds.wd.location.host;if(!m.toLowerCase)m=3D''+m;l=3D=
"=0A=
+"l.toLowerCase();m=3Dm.toLowerCase();n=3Ds.pt(l,';','dyasf',m);if(n)s.un=
"=0A=
+"=3Dn}i=3Ds.un.indexOf(',');s.fun=3Di<0?s.un:s.un.substring(0,i)};s.sa=3D=
fun"=0A=
+"ction(un){var s=3Dthis;s.un=3Dun;if(!s.oun)s.oun=3Dun;else =
if((','+s.oun+"=0A=
+"',').indexOf(un)<0)s.oun+=3D','+un;s.uns()};s.t=3Dfunction(){var =
s=3Dthis"=0A=
+",trk=3D1,tm=3Dnew =
Date,sed=3DMath&&Math.random?Math.floor(Math.random()*1"=0A=
+"0000000000000):tm.getTime(),sess=3D's'+Math.floor(tm.getTime()/108000"=0A=
+"00)%10+sed,yr=3Dtm.getYear(),vt=3Dtm.getDate()+'/'+tm.getMonth()+'/'+(y=
"=0A=
+"r<1900?yr+1900:yr)+' '+tm.getHours()+':'+tm.getMinutes()+':'+tm.get"=0A=
+"Seconds()+' '+tm.getDay()+' '+tm.getTimezoneOffset(),tfs=3Ds.gtfs(),t"=0A=
+"a=3D'',q=3D'',qs=3D'';s.gl(s.vl_g);s.uns();if(!s.q){var =
tl=3Dtfs.location,a"=0A=
+",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',"=0A=
+"0)?'Y':'N',hp=3D'',ct=3D'',pn=3D0,ps;if(String&&String.prototype){j=3D\=
"1.1"=0A=
+"\";if(j.match){j=3D\"1.2\";if(tm.setUTCDate){j=3D\"1.3\";if(s.isie&&s.i=
"=0A=
+"smac&&s.apv>=3D5)j=3D\"1.4\";if(pn.toPrecision){j=3D\"1.5\";a=3Dnew =
Array;i"=0A=
+"f(a.forEach){j=3D\"1.6\";i=3D0;o=3Dnew Object;eval(\"try{i=3Dnew =
Iterator(o"=0A=
+")}catch(e){}\");if(i&&i.next)j=3D\"1.7\"}}}}}if(s.apv>=3D4)x=3Dscreen.w=
id"=0A=
+"th+'x'+screen.height;if(s.isns||s.isopera){if(s.apv>=3D3){v=3Ds.n.javaE=
"=0A=
+"nabled()?'Y':'N';if(s.apv>=3D4){c=3Dscreen.pixelDepth;bw=3Ds.wd.innerWi=
dt"=0A=
+"h;bh=3Ds.wd.innerHeight;}}s.pl=3Ds.n.plugins}else =
if(s.isie){if(s.apv>=3D"=0A=
+"4){v=3Ds.n.javaEnabled()?'Y':'N';c=3Dscreen.colorDepth;if(s.apv>=3D5){b=
w=3D"=0A=
+"s.d.documentElement.offsetWidth;bh=3Ds.d.documentElement.offsetHeight"=0A=
+";if(!s.ismac&&s.b){eval(\"try{s.b.addBehavior('#default#homePage');"=0A=
+"hp=3Ds.b.isHomePage(tl)?'Y':'N'}catch(e){}\");eval(\"try{s.b.addBehav"=0A=
+"ior('#default#clientCaps');ct=3Ds.b.connectionType}catch(e){}\")}}}el"=0A=
+"se =
r=3D''}if(s.pl)while(pn<s.pl.length&&pn<30){ps=3Ds.fl(s.pl[pn].name,"=0A=
+"100)+';';if(p.indexOf(ps)<0)p+=3Dps;pn++}s.q=3D(x?'&s=3D'+s.ape(x):'')+=
(c"=0A=
+"?'&c=3D'+s.ape(c):'')+(j?'&j=3D'+j:'')+(v?'&v=3D'+v:'')+(k?'&k=3D'+k:''=
)+(b"=0A=
+"w?'&bw=3D'+bw:'')+(bh?'&bh=3D'+bh:'')+(ct?'&ct=3D'+s.ape(ct):'')+(hp?'&=
hp"=0A=
+"=3D'+hp:'')+(p?'&p=3D'+s.ape(p):'')}if(s.usePlugins)s.doPlugins(s);var =
"=0A=
+"l=3Ds.wd.location,r=3Dtfs.document.referrer;if(!s.pageURL)s.pageURL=3Dl=
;i"=0A=
+"f(!s.referrer)s.referrer=3Dr;if(s.lnk||s.eo){var =
o=3Ds.eo?s.eo:s.lnk;if"=0A=
+"(!o)return '';var =
p=3Ds.gv('pageName'),w=3D1,t=3Ds.ot(o),n=3Ds.oid(o),x=3Do.s"=0A=
+"_oidt,h,l,i,oc;if(s.eo&&o=3D=3Ds.eo){while(o&&!n&&t!=3D'BODY'){o=3Do.pa=
rent"=0A=
+"Element?o.parentElement:o.parentNode;if(!o)return =
'';t=3Ds.ot(o);n=3Ds."=0A=
+"oid(o);x=3Do.s_oidt}oc=3Do.onclick?''+o.onclick:'';if((oc.indexOf(\"s_g=
"=0A=
+"s(\")>=3D0&&oc.indexOf(\".s_oc(\")<0)||oc.indexOf(\".tl(\")>=3D0)return=
"=0A=
+" =
''}ta=3Dn?o.target:1;h=3Do.href?o.href:'';i=3Dh.indexOf('?');h=3Ds.linkLe=
a"=0A=
+"veQueryString||i<0?h:h.substring(0,i);l=3Ds.linkName?s.linkName:s.ln("=0A=
+"h);t=3Ds.linkType?s.linkType.toLowerCase():s.lt(h);if(t&&(h||l))q+=3D'&=
"=0A=
+"pe=3Dlnk_'+(t=3D=3D'd'||t=3D=3D'e'?s.ape(t):'o')+(h?'&pev1=3D'+s.ape(h)=
:'')+(l?"=0A=
+"'&pev2=3D'+s.ape(l):'');else =
trk=3D0;if(s.trackInlineStats){if(!p){p=3Ds."=0A=
+"gv('pageURL');w=3D0}t=3Ds.ot(o);i=3Do.sourceIndex;if(s.gg('objectID')){=
n=3D"=0A=
+"s.gg('objectID');x=3D1;i=3D1}if(p&&n&&t)qs=3D'&pid=3D'+s.ape(s.fl(p,255=
))+("=0A=
+"w?'&pidt=3D'+w:'')+'&oid=3D'+s.ape(s.fl(n,100))+(x?'&oidt=3D'+x:'')+'&o=
t=3D"=0A=
+"'+s.ape(t)+(i?'&oi=3D'+i:'')}}if(!trk&&!qs)return '';if(s.p_r)s.p_r()"=0A=
+";var =
code=3D'';if(trk&&s.vs(sed))code=3Ds.mr(sess,(vt?'&t=3D'+s.ape(vt):'"=0A=
+"')+s.hav()+q+(qs?qs:s.rq(s.un)),ta);s.sq(trk?'':qs);s.lnk=3Ds.eo=3Ds.li=
"=0A=
+"nkName=3Ds.linkType=3Ds.wd.s_objectID=3Ds.ppu=3D'';if(s.pg)s.wd.s_lnk=3D=
s.wd."=0A=
+"s_eo=3Ds.wd.s_linkName=3Ds.wd.s_linkType=3D'';return =
code};s.tl=3Dfunction("=0A=
+"o,t,n){var =
s=3Dthis;s.lnk=3Ds.co(o);s.linkType=3Dt;s.linkName=3Dn;s.t()};s."=0A=
+"ssl=3D(s.wd.location.protocol.toLowerCase().indexOf('https')>=3D0);s.d=3D=
"=0A=
+"document;s.b=3Ds.d.body;s.n=3Dnavigator;s.u=3Ds.n.userAgent;s.ns6=3Ds.u=
.ind"=0A=
+"exOf('Netscape6/');var =
apn=3Ds.n.appName,v=3Ds.n.appVersion,ie=3Dv.indexO"=0A=
+"f('MSIE '),o=3Ds.u.indexOf('Opera =
'),i;if(v.indexOf('Opera')>=3D0||o>0)"=0A=
+"apn=3D'Opera';s.isie=3D(apn=3D=3D'Microsoft Internet =
Explorer');s.isns=3D(apn"=0A=
+"=3D=3D'Netscape');s.isopera=3D(apn=3D=3D'Opera');s.ismac=3D(s.u.indexOf=
('Mac')>"=0A=
+"=3D0);if(o>0)s.apv=3DparseFloat(s.u.substring(o+6));else =
if(ie>0){s.apv"=0A=
+"=3DparseInt(i=3Dv.substring(ie+5));if(s.apv>3)s.apv=3DparseFloat(i)}els=
e "=0A=
+"if(s.ns6>0)s.apv=3DparseFloat(s.u.substring(s.ns6+10));else =
s.apv=3Dpar"=0A=
+"seFloat(v);s.em=3D0;if(String.fromCharCode){i=3Descape(String.fromCharC=
"=0A=
+"ode(256)).toUpperCase();s.em=3D(i=3D=3D'%C4%80'?2:(i=3D=3D'%U0100'?1:0)=
)}s.sa"=0A=
+"(un);s.vl_l=3D'visitorID,vmk,ppu,charSet,visitorNamespace,cookieDomai"=0A=
+"nPeriods,cookieLifetime,pageName,pageURL,referrer,currencyCode,purc"=0A=
+"haseID';s.vl_t=3Ds.vl_l+',variableProvider,channel,server,pageType,tr"=0A=
+"ansactionID,campaign,state,zip,events,products,linkName,linkType';f"=0A=
+"or(var =
n=3D1;n<51;n++)s.vl_t+=3D',prop'+n+',eVar'+n+',hier'+n;s.vl_g=3Ds."=0A=
+"vl_t+',trackDownloadLinks,trackExternalLinks,trackInlineStats,linkL"=0A=
+"eaveQueryString,linkDownloadFileTypes,linkExternalFilters,linkInter"=0A=
+"nalFilters,linkNames';s.pg=3Dpg;s.gl(s.vl_g);if(!ss)s.wds()}",=0A=
l=3Dwindow.s_c_il,n=3Dnavigator,u=3Dn.userAgent,v=3Dn.appVersion,e=3Dv.in=
dexOf(=0A=
'MSIE =
'),m=3Du.indexOf('Netscape6/'),a,i,s;if(l)for(i=3D0;i<l.length;i++){=0A=
s=3Dl[i];if(s.oun=3D=3Dun)return s;else =
if(s.fs(s.oun,un)){s.sa(un);return s=0A=
}}if(e>0){a=3DparseInt(i=3Dv.substring(e+5));if(a>3)a=3DparseFloat(i)}=0A=
else if(m>0)a=3DparseFloat(u.substring(m+10));else a=3DparseFloat(v);if(a=0A=
>=3D5&&v.indexOf('Opera')<0&&u.indexOf('Opera')<0){eval(c);return new=0A=
s_c(un,pg,ss)}else s=3Ds_c2f(c);return s(un,pg,ss)}function s_co(o){=0A=
var s=3Ds_gi("^",1,1);return s.co(o)}function s_gs(un){var =
s=3Ds_gi(un,1,1=0A=
);return s.t()}function s_dc(un){var s=3Ds_gi(un,1);return s.t()}=0A=

------=_NextPart_000_0000_01CA9D44.4918A7D0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://edge.quantserve.com/quant.js

//=0A=
// For correct measurement, DO NOT HOST THIS FROM ANOTHER SERVER=0A=
//=0A=
function _qcdst(){if(_qctzoff(0)!=3D_qctzoff(6))return 1;return 0;}=0A=
function _qctzoff(m){=0A=
var d1=3Dnew Date(2000,m,1,0,0,0,0);=0A=
var t=3Dd1.toGMTString();=0A=
var d3=3Dnew Date(t.substring(0,t.lastIndexOf(" ")-1));=0A=
return d1-d3;=0A=
}=0A=
function _qceuc(s){=0A=
if(typeof(encodeURIComponent)=3D=3D'function'){return =
encodeURIComponent(s);}=0A=
else{return escape(s);}=0A=
}=0A=
function _qcrnd(){return Math.round(Math.random()*2147483647);}=0A=
function _qcgc(n){=0A=
 var v=3D'';=0A=
 var c=3Ddocument.cookie;if(!c)return v;=0A=
 var i=3Dc.indexOf(n+"=3D");=0A=
 var len=3Di+n.length+1;=0A=
 if(i>-1){=0A=
  var end=3Dc.indexOf(";", len);=0A=
  if(end<0)end=3Dc.length;=0A=
  v=3Dc.substring(len,end);=0A=
 }=0A=
 return v;=0A=
}=0A=
function _qcdomain(){=0A=
 var d=3Ddocument.domain;=0A=
 if(d.substring(0,4)=3D=3D"www.")d=3Dd.substring(4,d.length);=0A=
 var a=3Dd.split(".");var len=3Da.length;=0A=
 if(len<3)return d;=0A=
 var e=3Da[len-1];=0A=
 if(e.length<3)return d;=0A=
 d=3Da[len-2]+"."+a[len-1];=0A=
 return d;=0A=
}=0A=
function _qcsc(m){=0A=
 var s=3D"";var d=3D_qcdomain();=0A=
 if =
(m=3D=3D"ad"||d=3D=3D"doubleclick.net"||d=3D=3D"atdmt.com"||d=3D=3D"yield=
manager.com"||d=3D=3D"fimserve.com"||=0A=
  =
d=3D=3D"tribalfusion.com"||d=3D=3D"trafficmp.com"){s+=3D";fpan=3Du;fpa=3D=
";return s;}=0A=
 var u=3Ddocument;var a=3D_qcgc("__qca");=0A=
 if(a.length>0){s+=3D";fpan=3D0;fpa=3D"+a;}=0A=
 else{=0A=
  var da=3Dnew Date();=0A=
  a=3D'P0-'+_qcrnd()+'-'+da.getTime();=0A=
  u.cookie=3D"__qca=3D"+a+"; expires=3DSun, 18 Jan 2038 00:00:00 GMT; =
path=3D/; domain=3D"+d;=0A=
  a=3D_qcgc("__qca");=0A=
  if(a.length>0){s+=3D";fpan=3D1;fpa=3D"+a;}=0A=
  else{s+=3D";fpan=3Du;fpa=3D";}=0A=
 }=0A=
 return s;=0A=
}=0A=
function _qcdc(n){=0A=
 document.cookie=3Dn+"=3D; expires=3DThu, 01 Jan 1970 00:00:01 GMT; =
path=3D/; domain=3D"+_qcdomain();=0A=
}=0A=
function _qpxload(){=0A=
 if((_qimg)&& typeof _qimg.width =3D=3D"number"){=0A=
  if (_qimg.width=3D=3D3){_qcdc("__qca");}=0A=
}}=0A=
function quantserve(){=0A=
 var r=3D_qcrnd();=0A=
 var =
sr=3D'',qo=3D'',qm=3D'',url=3D'',ref=3D'',je=3D'u',ns=3D'1',media=3D'webp=
age',event=3D'load';=0A=
 if(typeof _qoptions !=3D"undefined" && _qoptions!=3Dnull){=0A=
  for(var k in _qoptions){=0A=
   if(typeof(_qoptions[k])!=3D'string'){continue;}=0A=
   if(k=3D=3D'qacct'){_qacct=3D_qoptions[k];}=0A=
   else{qo+=3D';'+k+'=3D'+_qceuc(_qoptions[k]);}=0A=
   if(k=3D=3D'media'){media=3D_qoptions[k];}=0A=
   if(k=3D=3D'event'){event=3D_qoptions[k];}=0A=
  }=0A=
  _qoptions=3Dnull;=0A=
 }=0A=
 if((typeof _qacct =3D=3D"undefined")||(_qacct.length=3D=3D0))return;=0A=
 if(media=3D=3D'webpage' && event=3D=3D'load'){=0A=
  if((typeof _qpixelsent =
!=3D"undefined")&&(_qpixelsent=3D=3D_qacct))return;=0A=
  _qpixelsent=3D_qacct;}=0A=
 var ce=3D(navigator.cookieEnabled)?"1":"0";=0A=
 if(typeof navigator.javaEnabled =
!=3D'undefined')je=3D(navigator.javaEnabled())?"1":"0";=0A=
 if(typeof _qmeta !=3D"undefined" && =
_qmeta!=3Dnull){qm=3D';m=3D'+_qceuc(_qmeta);_qmeta=3Dnull;}=0A=
 =
if(self.screen){sr=3Dscreen.width+"x"+screen.height+"x"+screen.colorDepth=
;}=0A=
 var d=3Dnew Date();=0A=
 var dst=3D_qcdst();=0A=
 var dg=3D"P9304-W-MS-8";var qs=3D"http://pixel.quantserve.com";=0A=
 var fp=3D_qcsc(media);=0A=
 if(window.location && =
window.location.href)url=3D_qceuc(window.location.href);=0A=
 if(window.document && =
window.document.referrer)ref=3D_qceuc(window.document.referrer);=0A=
 if(self=3D=3Dtop)ns=3D'0';=0A=
 _qimg=3Dnew Image();=0A=
 _qimg.alt=3D"";=0A=
 =
_qimg.src=3Dqs+'/pixel'+';r=3D'+r+fp+';ns=3D'+ns+';url=3D'+url+';ref=3D'+=
ref+';ce=3D'+ce+';je=3D'+je+';sr=3D'+sr+';dg=3D'+dg+';dst=3D'+dst+';et=3D=
'+d.getTime()+';tzo=3D'+d.getTimezoneOffset()+';a=3D'+_qacct+qo+qm;=0A=
 _qimg.onload=3Dfunction() {_qpxload();}=0A=
}=0A=
quantserve();=0A=

------=_NextPart_000_0000_01CA9D44.4918A7D0--

