bplist00_WebSubresources_WebMainResource_WebSubframeArchives"',16;@EJOTY^chmrw| ^WebResourceURL_WebResourceResponse_WebResourceData_WebResourceMIMEType_&http://www.newyorker.com/css/print.cssODbplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_&http://www.newyorker.com/css/print.css*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A|]Ü3456AWNS.keysZNS.objects789:;<=>?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTEtagTVary_IBM_HTTP_ServerUbytesZkeep-aliveXtext/css_Wed, 07 Oct 2009 00:42:05 GMT_Fri, 31 Oct 2008 15:56:43 GMTT2216Tgzip_"4ad407-1d16-a4c3e4c0"_Accept-Encoding*+ab_NSMutableDictionaryac/\NSDictionary*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~ #),2;DFMU`bmoqsuwy{} $/8Xx} -0FnHObody{background:#fff url(i/shell/bg.gif) top center no-repeat;font:small/1.2 Arial,Helvetica,sans-serif} a:link{color:#000;text-decoration:none} a:visited{color:#000;text-decoration:none} a:hover{color:#000;text-decoration:none} a img{border:0} .smallcaps{font-size:.8em} h4.rubric,h4.rubric a:link,h4.rubric a:visited,h4.rubric a:hover{font:normal 10px/1.2em Arial,sans-serif;color:#cd0021;text-transform:uppercase} #topBannerAd,#globalNav,#videobox,#magads,#hdrsubs,#hdrflipbk,#subsNavCont,#archivewrap,#printad,#loginbx,#footer,#sites,#dropmenus,#mag_list,#terms,#cpyrt,.utils,#relatedlinks,h5.alt,.socialLinks,#footerlinks,#bottomFeatures,#keywords,#showNav,.feature.dailyCartoon,.cartoon ul,#xrail,#yrail{display:none} #header{position:relative;background:#fff;border-bottom:none;background:none;display:block !important;padding:12px;padding-left:0px} #logo{background:none;display:block !important} #logo a{background:none;display:block!important;text-indent:-9999px;text-decoration:none} #logo img{display:block !important;border:0px} #printoptions{display:none} #printbody,.pc{background-color:#fff;margin-top:0;padding:0;font:14px "Times New Roman",Times,serif} #printbody p,.pc p{line-height:1.3em;padding-bottom:0} #listFooter,#navigation,#browseMenu,dl.itemtext dd.item_itemlist{display:none} #intro_hed,#itemlistintroheds,#itemlistintro{padding:0px;margin:0px} .feature img{margin-bottom:10px} #itemlist{margin-right:24px;margin-bottom:18px;padding-bottom:18px;padding-top:19px} #itemlistintro:after{content:".";clear:both;display:block;visibility:hidden;height:0} #itemlistintro{padding-bottom:15px;float:left;width:470px} #itemlistintro .captionedphoto{float:left;margin-right:26px} #items{clear:both} #itemlistintroheds{overflow:hidden;float:none !important;float:left} #itemlistintro h1,#itemlistintro h2,#itemlistintro h3{margin-bottom:7px;font-weight:normal;font-size:17px} #intro_hed{font-size:22px;font-weight:normal} #intro_hed{margin-bottom:5px} #showHeader dd{margin-left:0px} #introbodyintro{font-weight:bold;font-size:13px;margin-bottom:5px;text-transform:uppercase} h3#introbodytext{font-size:14px;font-weight:normal} .item{width:100%;padding-bottom:0;margin-bottom:0;background:none;clear:both} .item .itemtext dd{margin-left:0px} .item .captionedphoto{float:left;margin-right:50px;padding-bottom:26px} .item .hed{margin-bottom:3px} .item .hed,.item .hed a{font:13px "Times New Roman",Times,serif;font-weight:bold;line-height:1.3em;text-transform:uppercase} .item .subhed,.item .subhed a{font-size:14px;font-weight:normal;line-height:1.4em;text-decoration:none;margin-bottom:4px} #autohed,#autohed a,.abstractOnly.s_reporting #autohed,.abstractOnly.s_reporting #autohed a,.abstractOnly.s_arts #autohed,.abstractOnly.s_arts #autohed a,.abstractOnly.s_humor #autohed,.abstractOnly.s_humor #autohed a,.abstractOnly.s_fiction #autohed,.abstractOnly.s_fiction #autohed a,.abstractOnly.s_talk #autohed,.abstractOnly.s_talk #autohed a,.abstractOnly.s_online #autohed,.abstractOnly.s_online #autohed a,.abstractOnly.s_magazine #autohed,.abstractOnly.s_magazine #autohed a,.abstractOnly.s_contact #autohed,.abstractOnly.s_contact #autohed a{background-position:-1404px 0;width:130px} #articleheads h1{line-height:1em;margin:7px 0} h4#articleauthor .dd,#articlebody .cartoon,h6#credit{font:normal 10px "Arial";text-transform:uppercase} #printbody p.bibliography{font:normal 14px "Times New Roman";padding-bottom:0;} #articleheads h4.rubric{font-size:11px;margin-bottom:0} #articleheads h1{text-transform:uppercase;font-weight:bold;font-size:28px;margin-bottom:10px} h2#articleintro{font-size:15px;font-weight:normal;font-style:italic;margin:0 0 7px 0} h4#articleauthor{width:345px;margin:0 0 6px 0} h4#articleauthor .c{display:block;font-size:15px;font-weight:normal} h4#articleauthor .dd{display:block;color:#9f9f9f;line-height:1em;margin-top:17px} #articleRail{float:right;margin:12px 0 22px 26px;overflow:hidden} /*#articleRail .captionedphoto p.caption{display:none}*/ #articlebody p{text-indent:1.5em;margin:0;padding:0;font-family:"Times New Roman",Times,serif} #articletext p:first-child{padding-top:10px} .C #articletext p:first-child{padding-top:0} #articlebody p.descender{clear:both;text-indent:0;padding-top:10px} #articlebody p.descender:first-letter{font-size:3em;line-height:.8em;margin-right:2px;display:block;float:left} #articlebody h3{margin-top:10px} #articlebody h3+p,#articlebody p.noindent,p.postsubhead{text-indent:0} html .ss_poetry #articlebody p{text-indent:0} .ss_poetry #articleRail #keywords{display:none} #articletext p.bibliography{text-indent:0;font-size:10px;color:#7f7f7f;margin-top:28px;line-height:1.1em} #articletext p.archivesNotice{text-indent:0;font-size:14px;color:#7f7f7f;margin-top:28px;line-height:1.1em} #articletext p.archivesNotice a:link,#articletext p.archivesNotice a:visited,#articletext p.archivesNotice a:hover{color:#7f7f7f} #articlebody .pullout{padding:20px 0;font-size:12px;line-height:1.2em;text-indent:0;width:100%} #articlebody .pullout span.line{display:block;text-indent:1.7em} #articlebody p span.pullout span.line{display:inline} #articlebody span.pullout .two{display:none} #articlebody p span.pullout .two{display:inline} #articlebody .cartoon{padding:5px 0;float:left;margin-right:10px;text-align:left} #articlebody .cartoon img{margin:5px auto 5px auto;clear:left} h6#credit{color:#9f9f9f} #articleBottom{margin-left:-26px;padding:0 26px} #articleBottom{border-bottom:1px solid #ccc;clear:both;margin:14px 0 5px 0} .vevent .summary,.vevent .label,.vevent .wvname,.vevent .pipe{display:none} .vevent .v,.vevent .date{text-transform:uppercase;font-weight:bold;font-size:13px} .hreview h3,.hreview .label,.hreview .wvname,.hreview .pipe,.hreview .rb,.hreview .ro{display:none} .hreview .description{margin-bottom:10px} .hreview .adr{padding-top:8px} .wv,.hreview .eu,.vevent .eu{font:10px Arial,sans-serif;text-transform:uppercase;margin-top:13px} .vevent .eu,.hreview .cost{margin:15px 0 10px} .dingbat{font-family:"Courier New",Symbol} .paginationContext{font:normal 14px/1.2em "Times New Roman",Times,serif} .subhead{margin-left:-1.5em;font:bold 16px/1.2 "Times New Roman",Times,serif} #articlebody p:first-child .subhead,p.noindent .subhead{margin-left:0} /* ARTS/EVETNS/ */ .s_arts.ss_events #articletext p{text-indent:0} /* */ #showFooter dd{padding-left:0;margin-left:0} /* */ #thumbnails{display:none} .pagination{float:right;text-align:center;font:10px/1.2em Arial;text-transform:uppercase;white-space:nowrap;margin-top:10px} .paginationFirst,.paginationFirst_off,.paginationPrevious_off,.paginationLast{display:none} span.paginationPrevious,span.paginationNext{display:inline} a.paginationPrevious,a.paginationNext{text-decoration:none} span.paginationPrevious{left:-25px;background:url(i/foot/sepr.gif) top right no-repeat;padding-right:5px} span.paginationNext{right:0;background:url(i/foot/sepr.gif) top left no-repeat;padding-left:5px} .pageField a,.pageField a:hover{text-decoration:none} .pageField input{width:20px;text-align:center;height:10px;font-size:10px} body.abstractOnly #articleheads h1, body.abstractOnly #articleheads h4, body.abstractOnly #articleintro, body.abstractOnly #articleRail .captionedphoto {display:none} body.abstractOnly #printbody p.bibliography {color:#000;text-transform:none;font-family:"Times New Roman",Georgia,Times,serif;font-size:12px;padding:0} body.abstractOnly span.bibliography.mag {font-style:italic} Xtext/css _,http://www.newyorker.com/css/printvisual.cssOFbplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_,http://www.newyorker.com/css/printvisual.css*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A<3456AWNS.keysZNS.objects789:;<=>?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTVaryTEtag_IBM_HTTP_ServerUbytesZkeep-aliveXtext/css_Sun, 01 Nov 2009 22:02:17 GMT_Mon, 20 Apr 2009 16:02:19 GMTS817Tgzip_Accept-Encoding_"a0e3-773-a7a7f8c0"*+ab_NSMutableDictionaryac/\NSDictionarys*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~ )/28AJLS[fhsuwy{} $*5>^~/2HnJOs /* HELPERS AND BASE RULES */ body {width:700px} #header { position: relative;background: #fff ;border-bottom: none;background:none; display:block !important;padding:12px} #logo {background:url(i/hed/logo.gif) 0 0 no-repeat;width:700px;height:133px} #logo a {background:none;display:block;width:571px;height:85px;text-indent:-9999px;text-decoration:none;overflow:hidden} #logo img {display:none !important} #printoptions {display:block;width:700px;text-transform:uppercase;display:block;background-color:#fff;margin-top:12px;margin-left:12px} #printoptions h5#goback{float:left;margin:0px} #printoptions h5#printthis{float:right;margin:0px} #printoptions:after{content:".";clear:both;display:block;visibility:hidden;height:0px} #printbody {background-color:#fff;margin-top:0px;padding:10px} /* iPhone Styles go here */ @media screen and (max-device-width: 480px) { body,h4#articleauthor{width:auto;position:relative;z-index:1} #header{border-bottom:1px solid #666;padding-bottom:30px;position:relative;z-index:1} #printbody{border-top:2px solid #040404;margin-top:10px;padding-top:0;} .hentry{padding-top:30px} #printoptions{width:200px;position: absolute;} #printthis,.entry-keywords,.postNav,.entry-categories,.entry-links,.comments{display:none} #goback{display:block;position:absolute;top:15px;left:7px;text-indent:-99999px;z-index:1000;width:171px;height:90px;} #goback a{width:171px;height:90px;background:url(i/iphone/back.gif) 0 0 no-repeat;display:block;-webkit-background-size:171px 90px;} #articlebody p.descender{clear:none} html{-webkit-text-size-adjust:250%} #articletext{-webkit-text-size-adjust:325%} #logo{-webkit-background-size:700px 143px;background-position:-166px -74px;width:536px;height:71px;margin:30px auto 0 auto;} #logo a{width:536px;height:71px;} #articleRail img{width: 500px;margin-right:12px} #articleRail p.caption{width: 500px;} } /* */Xtext/css _+http://www.newyorker.com/css/i/hed/logo.gifObplist00bcX$versionX$objectsY$archiverT$top"()012HIJKLMNOPQRSTUVWX\]U$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_+http://www.newyorker.com/css/i/hed/logo.gif*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A|^l3456?WNS.keysZNS.objects789:;<=> @ABCDEFGVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-LengthTEtag_IBM_HTTP_ServerUbytesZkeep-aliveYimage/gif_Wed, 07 Oct 2009 00:42:06 GMT_Mon, 29 Jan 2007 22:41:49 GMTU10887_"a160-2a87-953ca540"*+YZ_NSMutableDictionaryY[/\NSDictionary**+^__NSHTTPURLResponse`a/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverde_WebResourceResponse#-27V\wz~ $*-3<EGNVaclnprtvxz| 6V\sx fO*GIF89aKKKeee888(((jjj[[[SSS򣣣zzzsss!,'diQ bh,tmx|pH,ȤrFCTجvzxL&u)<|N^G$llS 9p{;TmS'N3 &G) R" S\T0D'-@t8 Ç#J!Ҧ,h́Ax zHɓxCr(XJTr!Pϟ@(SC .XHf[!Lp%իX/%46]@6OA0O۷p` hf: aÈ]] mЗYZxiVϠpAG ܷ MRp&h0  PS ЗqZv`oËe5ࢬ:Ʌ\S0wާ`<0 PZ]{ jQ@6 vax!kc|⋴=PW lG@Wh%_ 4Q @!BVi%Pi$4 eM$Rb]F#zݕ$N>A%|yl̙GDiDpܖ8 f`huugUA*ꨪ$&4Z`]z" v}Y%Ғ@ iڪ`HN w.ԒT(,;FuA YLe^& *jc(e5Y ̻Th@[`k=cAFL |PAF2 Z*dAꟵ@{45ZlWlTQ[pi9=bXV-6k4g0Sd^ )-7 kdI0'0VXvmdeC+Gjy/gcW]QGP|pugZ]砷Φne<t<$`DpXJL9+;Lj!LP.$nPp/LopD !v3h AKmrG:h @0O$ L@ (' $@ @c 7LN""*&Dm^0I  .Xh˓ j7 BHqCd^pcV HHLlg4PbiX@/ D?XRFH%>s_!x@,9Bu R`9LOf$` @~tn H<<u[Z6 >ʭe>C+3HysZvwt@ 'ٗt+T P>!eOUvOwWMC%W+!WsCjacK7*1`K PXc.(#@9Zl[$0d0S7v6XS0?:]<WSAT}&0N+~25@z1Pi9AEgQx6=";"`6ӀPe\U&C(MJQdj '8ׁ^k8t|Wx2Ȅ?`58Ȅr5Wo-3 7%'Hlc>0%H>(@u&lZ1@ցe69x3Qt7m0ls+v-qjrÀE2$Ma34M 0!E.i\PL[p! = 0o I0G{9`Aa׊7M(4Zgqx#PG2fk`=^!5r 4ЋȨ`w'>1hMZyX2 81y3y0k/8Is0.%BOX (H mIIMR~@.XpGS!Rk `GւmMda?JT.8,;@y@u1@{?p $rSII9\%;ɨ|<96P8N\XfXk0> Є}$@. QPrܶI5 #J9=3 \N` 8d@V B ФC 0F 虛30yP1j;~9TXmI#0pI`2Poi0ҧQ'k 6P v# (pYi)Ɏ! 2mQ@WK)刖 Zop\H#fPz'DQLE`Fp06 ڜ4اBD6IqYNѓf:!sJ50{*['`7@$(@*xY7>#0h^z?@Yb2p0T%R$M4 NՈ i$c&n^|eT>%D.Ty AJפ\Ǫ}aW)6kkʌ'`nʤ=i&@'vj4'0ZJjk;|KQ$I:bIckPCj}jby\6 У' 0"G<ß`]<lz9d &в)\l^)l <0 Y@+ ,qOL ]`ڀQL CSF`[pQR CKŬ ˒B`"`=`T#$:!;LlpDс̿A̖@fML&`gt 0kzJV|XpR~uk^b] - hZձ6ֻ<70ف`7+ýR Hٳ`kDp" Ӂ`#,=l809} /XW ْ"M,8g4]'@FJTPD0b] ^|P_p <͡2xȐbJc? bl/W.YI$v~<<9Sǂ!'kɒeW{XE> @qI{#1Uθ#E d֝ƾ$@4SAН A )&N!Ƹ}n^^&M33LߗZޫ{ "8WAYB>7P( "0:@u5 Tjp.YyItMA6m/p)Ȩ>#%G5?| EAmo$% ]^a;]P/8 26.ooCpش~!"=i2.i=܎RZ<b `R)[$B~Oy0 ^'OOϻmTx !7 (FyLjY*{ͣB'j`Xh) 3Գ0ct@о0@P$ DНHP%8\ H(N$pL JHU, ,(yz׵)/CF!Dn2AL081Uچ/ L{|۔bFqL3z^%@3]G2# `o7xHz3"B9l NUm>0ABS|.yyK:HNthTYrX8 d&` "C!$x1@ 8B6a?1R|B kAmt`Kp㈦qԱM;AdābA < u(آ@{KC,}'N ?hlnC$<@e$"JXO`$WqHb8byE %Y!|fj␼_'ep#<;FpHA䴡< Nf=`" y=KփHgd  *E1˼1t|Mf̪xt`3M=G4P5C7\<_'SRP},CZ@<6!ܬ^T+HdVgQ x$6 (uXN 1d̹G\4M+oTNaԡq\slMMF .{ĝq*'@`85`QT) 'RC 7(q (&0^ )ҏ2Si7(1l.lXJdd2 ᔩ ~XMc7Z o|#йN-'pp \EcoP@#//_Ѐ!yX.k qbHg1(4 8%(.p!(|"@09Pn8ş iY7H;O6BT Fh4;few<88a{q9F dlgyu {{0]28ս| '[vuVf'tc[jC@$p]Fg `bҌj5:wgq P8gY"p! -Qu\BD%peh$qrJ& l[N^<# `W6 ALƥd$`ɨ'p'$gPfŁ] (pP%(I Klh@W @AM <&N@R&}a(i\PTg8-S_ ` @ rr@.'' $ d礢̰I@jS>I8XaJSm· 8enlE>ĨMԩ*LFqs>A\@'E@j~()@@nb@Iyψ(yg:JfkM +*,!#l^*.QaD`A^`OA}Zi<N#^*{!`-||TCMaɍ$M l tHL*>z&*ĩj j EhuaJ1@vYEaPxVA=olhpPGvd$\nѩ/f"vTie#{ch-</(U`#vJp1@5F'NĂܲ8+luhFv~-czFF7'@R2(gh[*dX@ZB1q`\(RQon_o7{7 8838/\,|r1Hh@z3Z܌Exΰ"yg!=vjCF3 7qbv@Dš$|Mf~sHHtI# Lm%K%IdXjxB N[O5(8R4(|BdQ7gsGS,tVkVs0vuXTU-& NB8f%"=2(p04p'0K^j \8 ǑqGGX+b3vc;cLH?C$W* tuk5\CpKX{,'bE`FSrU" -dvnnvHiQ,d(Auh'@@h+05u`C(с;`mvozw{V}*(s5oHhfsg/QX">(AE&|EU7'wks8 gj6~CxOןfVʒH< 9x Y ys)aH 谸0{@߀a%']aO0V/y. $~Y.\bp6H$O| LϠBO" HT33U4i6qz ;Yimage/gif _/http://www.newyorker.com/js/jquery-1.3.2.min.jsO`bplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_/http://www.newyorker.com/js/jquery-1.3.2.min.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTEtagTVary_IBM_HTTP_ServerUbytesZkeep-alive_application/x-javascript_Sun, 01 Nov 2009 22:01:56 GMT_Tue, 26 May 2009 16:27:43 GMTU19741Tgzip_"1154a1-dfa6-34c7ddc0"_Accept-Encoding*+ab_NSMutableDictionaryac/\NSDictionaryߦ*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~#,25;DMOV^ikvxz|~ '-8Ss)7ILbndOߦ/* * jQuery JavaScript Library v1.3.2 * http://jquery.com/ * * Copyright (c) 2009 John Resig * Dual licensed under the MIT and GPL licenses. * http://docs.jquery.com/License * * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) * Revision: 6246 */ (function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); /* * Sizzle CSS Selector Engine - v0.9.3 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();_application/x-javascript  !_%http://www.newyorker.com/js/magnet.jsOYbplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_%http://www.newyorker.com/js/magnet.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTVaryTEtag_IBM_HTTP_ServerUbytesZkeep-alive_application/x-javascript_Sun, 01 Nov 2009 22:01:56 GMT_Thu, 08 Oct 2009 16:23:38 GMTU18658Tgzip_Accept-Encoding_"115448-13e48-e2c11680"*+ab_NSMutableDictionaryac/\NSDictionary>H*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~ "(+1:CELT_alnprtvxz|~ #.Ii "0BE[n]O>H/*global MAGNET, console, window, document, jQuery, setTimeout, clearTimeout, clearInterval, setInterval */ /* for jsLint */ /* * Conde Nast Digital Core JavaScript * @copyright 2008-2009 Conde Nast Digital except where specified. All rights reserved. */ /* * Break out of frame */ if (top !== self) { // top.location.replace(location); } /* * Sets jQuery no conflict; */ jQuery.noConflict(); /* SECTION: EXTENSIONS TO NATIVE OBJECTS */ /* Prototypal inheritance, the missing JavaScript method Author: Andrea Giammarchi Example: newObject = Object.make(oldObject); Reference: http://webreflection.blogspot.com/2008/10/big-douglas-begetobject-revisited.html New version recycles function constructor to cut down on memory consumption and is based on Doug Crockford's original prototypal inheritance function */ if (typeof Object.make !== 'function') { Object.make = function(F) { return function(Object) { F.prototype = Object; return new F(); }; }(function() {}); } /* Memoizes a function - this DOES add to the Function.prototype @author Keith Gaughan @see http://talideon.com/weblog/2005/07/javascript-memoization.cfm */ Function.prototype.memoize = function() { var memo = {}, that = this, obj = arguments.length > 0 ? arguments[i] : null, // TODO: fails jslint, references 'i' out of scope... memoizedFn; memoizedFn = function() { var args = [], i, il; for (i = 0, il = arguments.length; i < il; i++) { args[i] = arguments[i]; } if (!(args in memo)) { memo[args] = that.apply(obj, arguments); } return memo[args]; }; memoizedFn.unmemoize = function() { return that; }; return memoizedFn; }; /* Unmemoizes a function */ Function.prototype.unmemoize = function() { MAGNET.debug.info('Attempted to unmemoize a function that was never memoized in the first place'); return null; }; /* Sugar Arrays (c) Creative Commons 2006 http://creativecommons.org/licenses/by-sa/2.5/ Author: Dustin Diaz | http://www.dustindiaz.com Reference: http://www.dustindiaz.com/basement/sugar-arrays.html */ if (!Array.prototype.forEach) { Array.prototype.forEach = function(fn, thisObj) { var scope, i, j; scope = thisObj || window; for (i=0, j=this.length; i < j; ++i) { fn.call(scope, this[i], i, this); } }; Array.prototype.every = function(fn, thisObj) { var scope, i, j; scope = thisObj || window; for (i=0, j=this.length; i < j; ++i) { if (!fn.call(scope, this[i], i, this)) { return false; } } return true; }; Array.prototype.some = function(fn, thisObj) { var scope, i, j; scope = thisObj || window; for (i=0, j=this.length; i < j; ++i) { if (fn.call(scope, this[i], i, this)) { return true; } } return false; }; Array.prototype.map = function(fn, thisObj) { var scope, a, i, j; scope = thisObj || window; a = []; for (i=0, j=this.length; i < j; ++i) { a.push(fn.call(scope, this[i], i, this)); } return a; }; Array.prototype.filter = function(fn, thisObj) { var scope, a, i, j; scope = thisObj || window; a = []; for (i=0, j=this.length; i < j; ++i) { if (!fn.call(scope, this[i], i, this)) { continue; } a.push(this[i]); } return a; }; Array.prototype.indexOf = function(el, start) { var i, j; start = start || 0; for (i=start, j=this.length; i < j; ++i) { if (this[i] === el) { return i; } } return -1; }; Array.prototype.lastIndexOf = function(el, start) { var i; start = start || this.length; if (start >= this.length) { start = this.length; } if (start < 0) { start = this.length + start; } for (i=start; i >= 0; --i) { if (this[i] === el) { return i; } } return -1; }; } /* * Remove items in an array. Not included in the above because it's not * an official part of the upcoming spec, so its implementation should be * checked separately. * @see http://ejohn.org/blog/javascript-array-remove/ (http://ejohn.org/blog/javascript-array-remove/#comment-296138) */ if (!Array.prototype.remove) { Array.prototype.remove = function(from, to) { this.splice(from, (to || from || 1) + (from < 0 ? this.length : 0)); return this.length; }; } /* SECTION: MAGNET CORE METHODS */ if (typeof MAGNET === 'undefined' || !MAGNET) { /** * MAGNET global namespace object * @namespace MAGNET global namespace object */ var MAGNET = {}; } /* The following methods are located at the root of MAGNET, because they deal with primitives that jQuery does not identify. No other functions should be placed at this level. */ /** * Determines whether or not the provided object is a boolean * @param {mixed} mixed The object being testing * @return {boolean} the result */ MAGNET.isBoolean = function(mixed) { return typeof mixed === 'boolean'; }; /** * Determines whether or not the provided object is a date * @param {mixed} mixed The object being tested * @return {boolean} the result */ MAGNET.isDate = function(mixed) { return Object.prototype.toString.call(mixed) === '[object Date]'; }; /** * Determines whether or not the provided string is empty * @param {string} str The string being tested * @return {boolean} the result */ MAGNET.isEmpty = function(str) { return !/\S/.test(str || '') || true; }; /** * Determines whether or not the provided object is null * @param {mixed} mixed The object being testing * @return {boolean} the result */ MAGNET.isNull = function(mixed) { return mixed === null; }; /** * Determines whether or not the provided object is a legal number * @param {mixed} mixed The object being testing * @return {boolean} the result */ MAGNET.isNumber = function(mixed) { return typeof mixed === 'number' && isFinite(mixed); }; /** * Determines whether or not the provided object is of type object * @param {mixed} mixed The object being testing * @return {boolean} the result */ MAGNET.isObject = function(mixed) { return typeof mixed === 'object'; }; /** * Determines whether or not the provided object is a string * @param {mixed} mixed The object being testing * @return {boolean} the result */ MAGNET.isString = function(mixed) { return typeof mixed === 'string'; }; /** * Determines whether or not the provided object is undefined * @param {mixed} mixed The object being testing * @return {boolean} the result */ MAGNET.isUndefined = function(mixed) { return typeof mixed === 'undefined'; }; /* SECTION: MAGNET STATIC CLASSES */ /** * @class MAGNET URL Object * @description Contains methods for dealing with urls, query and hash params * @public * @author Paul Bronshteyn */ MAGNET.url = (function($M) { var /** * Path Cache Array. * @memberOf MAGNET.url * @private * @type object */ pathCache = []; /** * @scope MAGNET.url */ return { /** * Retrieves domain name from the url in the form of domain.com * @param {string} [url] Url to be parsed * @return {string} domain.com */ domain : function(url) { var d = ((url) ? url.replace(/^https*:\/\/|(:|\/).*$/g, '') : location.hostname).split('.'), dl = d.length; return d.slice(dl - 2, dl).join('.'); }, /** * Retrieve current site section * @return {string} Section name */ section : function() { return ((location.pathname.split('/')[1] || '').match(/^[^\.]*$/) || [''])[0]; }, /** * Get query params as object of key, value pairs or a value of a param passed in. If query is not provided, location.search will be used. Result will be caches to queryCache variable for faster access on next call. * @param {string} [param] Parameter to lookup * @param {string} [query] Query string to parse * @param {string} [regex] String key representing regular expression in parsers object * @return {object|string} */ params : function(param, query, regex) { var result = $M.utils.parseStr((query || location.search), (regex || 'query')); return (param) ? result[param] || '' : result; }, /** * Retrive current site path * @return {array} Path */ path : function() { if (!pathCache.length) { pathCache = location.pathname.split('/'); } return pathCache; }, /** * Retrieve the URL fragment identifier * @return {string|boolean} fragment id */ getFragment : function() { return location.hash.substring(1) || false; }, /** * Sets the fragment identifier string */ setFragment : function(value) { location.hash = value || ''; return this; } }; })(MAGNET); /** * @class MAGNET Utilities * @description Collection of utility helper functions * @public * @author Paul Bronshteyn */ MAGNET.utils = (function($M) { var /** * Cache object. * @description Contains result objects for all parsed string using parseStr function. * @memberOf MAGNET.utils * @private * @type object */ cache = {}, /** * Regular expression parsers * @memberOf MAGNET.utils * @private * @type object */ parsers = { /** * Query, hash parser expression. * @description Will parse a url string in the form of ?var=value&var1=value#hash=value&hash1=value1 into key value pair object. * @memberOf MAGNET.utils * @private * @type RegEx expression */ query : /([^?=&]+)(=([^&]*))?/g, /** * Hash parser expression. * @description Will parse url hash string in the form of ?var=value&var1=value into key value pair object. * @memberOf MAGNET.utils * @private * @type RegEx expression */ hash: /([^#=&]+)(=([^&]*))?/g, /** * User cookie hash parser expression. * @description Will parse a cookie value in the form of var=value|var1=value|var2=value into key value pair object. * @memberOf MAGNET.utils * @private * @type RegEx expression */ usercookie : /([^=|]+)(=([^|]*))?/g }; /** * @scope MAGNET.utils */ return { /** * Parse string using a regular expression and return object of key, value pairs. * @param {string} query Query to be parsed * @param {string} regex String key representing regular expression in parsers object * @return {object} Result object of key, value pairs */ parseStr: function(str, regex) { if (cache[str]) { return cache[str]; } cache[str] = {}; (str || '').replace(parsers[regex], function($0, $1, $2, $3) { cache[str][$1] = $3; }); return cache[str]; }, /** * Intval - Check if variable is an integer * @param {mixed} mixed The scalar value being converted to an integer * @param {integer} [base] The base for the conversion, a number (from 2 to 36) * that represents the numeral system to be used (default is base 10) * @return {integer} Return a number (default is 0) */ intval: function(mixed, base) { if (typeof mixed === 'boolean') { return (mixed) ? 1 : 0; } else if (typeof mixed === 'string') { mixed = parseInt(mixed * 1, (base || 10)); return (isNaN(mixed) || !isFinite(mixed)) ? 0 : mixed; } else if (typeof mixed === 'number' && isFinite(mixed)) { return Math.floor(mixed); } return 0; }, /** * Trim string. * @description Remove leading and trailing space, tab and new lines characters * @param {string} str String to be trimmed * @return {string} Trimmed string * @author Ariel Flesler * @see http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html */ trim: function(str) { var start = -1, end = str.length; while (str.charCodeAt(--end) < 33); // TODO: fails jslint - no while block while (++start < end && str.charCodeAt(start) < 33); // TODO: fails jslint - no while block return str.slice(start, end + 1); } }; })(MAGNET); /** * MAGNET Debug Object * @requires jQuery * @class MAGNET Debug Object * @public * @constructor * @author Paul Bronshteyn */ MAGNET.debug = (function($M) { var /** * Log Types (error, warn, info, log, user) * @memberOf MAGNET.debug * @private * @type object */ eType = { error : { f: 'error', msg: 'ERROR' }, warn : { f: 'warn', msg: 'WARNING' }, info : { f: 'info', msg: 'INFO' }, debug : { f: 'debug', msg: 'DEBUG' }, user : { f: 'error', msg: 'USER' } }, /** * Log Types (DEV, STAG, PREV, PROD) * @memberOf MAGNET.debug * @private * @type object */ eEnv = { DEV : 'Development', STAG : 'Staging', PREV : 'Preview', PROD : 'Production' }, /** * Shows error information in console or alert * @memberOf MAGNET.debug * @private * @param {string} type Error Type * @param {string} msg Error message * @param {array} [args] Error details */ show = function(type, msg, args) { var t = eType[type] || eType.debug; if ($M.site.env === 'PROD' && !$M.site.debug) { if (type === 'error' || type === 'user') { //serverlog(t.msg, msg, args); } return; } msg = msg || ''; args = args || []; if (typeof console === 'object' && console[t.f]) { console[t.f](t.msg + ': ' + msg + ' :: ' + args.join(' :: ')); } }; /** * @description Server Log - This might be a good idea for production environment, stay tuned. Use ajax to log everything to the server text file/db * @memberOf MAGNET.debug * @private * @param {string} m Error Type Description * @param {string} msg Error message * @param {array} args Error details */ //serverlog = function(m, msg, args) { //}; if(MAGNET.url.params("debugOff")==='true'){ show=function(){return;} } /** * @scope MAGNET.debug */ return { /** * Log error messages * @param {string} msg Error message * @param {array} [args] Error details */ error : function(msg, args) { show('error', msg, args); return this; }, /** * Log warning messages * @param {string} msg Warning message * @param {array} [args] Warning details */ warn : function(msg, args) { show('warn', msg, args); return this; }, /** * Log info messages * @param {string} msg Info message * @param {array} [args] Info details */ info : function(msg, args) { show('info', msg, args); return this; }, /** * Log debug messages * @param {string} msg Debug message * @param {array} [args] Debug details */ debug : function(msg, args) { show('debug', msg, args); return this; }, /** * Log Try/Catch messages * @param {object} e Error object * @param {array} [args] Error details */ user : function(e, args) { show('user', e.message, [args, e.fileName, e.lineNumber, e.name, e.stack]); return this; }, /** * Speed test your function * @param {function|string} f Function name or it's string representation * @param {array} [args] Arguments that will be passed to the function * @param {integer} [cycles] How many cycles to run the test (default 10000) * @return {console|alert} Prints time in ms in console in FF,Safari,Chrome and alert() on IE */ speedtest : function(f, args, cycles) { var x, i; if ($M.isNumber(args)) { cycles = args; args = []; } if (!jQuery.isArray(args)) { args = []; } cycles = cycles || 10000; if (!jQuery.isFunction(f)) { $M.debug.error('Not a function', [f]); return this; } if (typeof console === 'object') { if (console.time) { x = 'timer' + Math.floor(Math.random() * 1000000); console.time(x); for (i = 0; i < cycles; i++) { f.apply(this, args); } console.timeEnd(x); } else { x = new Date() - 0; for (i = 0; i < cycles; i++) { f.apply(this, args); } x = new Date() - x; console.log(x); } } else { x = new Date() - 0; for (i = 0; i < cycles; i++) { f.apply(this, args); } x = new Date() - x; alert(x); } return this; }, /** * MAGNET Application Debug Object * @class MAGNET Application Debug Object * @constructor * @public * @author Paul Bronshteyn */ app: function() { var /** * Holds setLevel options * @memberOf MAGNET.debug.app * @private * @type object */ options = {}, /** * Shows error information in console or alert. * @description Uses setLevel options to display or supress error messages. Calls parent show() method if setLevel options match * @memberOf MAGNET.debug.app * @link MAGNET.debug.show * @private * @param {string} type Error Type * @param {string} msg Error message * @param {array} [args] Error details */ _show = function(type, msg, args) { if (options[MAGNET.site.env][type]) { show(type, msg, args); } }; /** * @scope MAGNET.debug.app */ return { /** * Set Levels of debuging messages * @param {array} type Log Types (error, warn, info, debug, user) * @param {string} [env] Enviroment (DEV, STAG, PREV, PROD) */ setLevel : function(type, env) { if (!type || !jQuery.isArray(type) || type.length === 0) { return this; } env = (env && env in eEnv) ? env : 'DEV'; options[env] = type; return this; }, /** * Get Levels of debuging messages * @param {string} [env] Enviroment (DEV, STAG, PREV, PROD) * @return {object|array} If enviroment not provided returns reporting object, if provided levels array */ getLevel : function(env) { return (env) ? options[env] || '' : options; }, /** * Log error messages * @link MAGNET.debug.error * @param {string} msg Error message * @param {array} [args] Error details */ error : function(msg, args) { _show('error', msg, args); return this; }, /** * Log warning messages * @link MAGNET.debug.warn * @param {string} msg Warning message * @param {array} [args] Warning details */ warn : function(msg, args) { _show('warn', msg, args); return this; }, /** * Log info messages * @link MAGNET.debug.info * @param {string} msg Info message * @param {array} [args] Info details */ info : function(msg, args) { _show('info', msg, args); return this; }, /** * Log debug messages * @link MAGNET.debug.debug * @param {string} msg Debug message * @param {array} [args] Debug details */ debug : function(msg, args) { _show('debug', msg, args); return this; }, /** * Log Try/Catch messages * @link MAGNET.debug.user * @param {object} e Error object * @param {array} [args] Error details */ user : function(e, args) { _show('user', e.message, [args, e.fileName, e.lineNumber, e.name, e.stack]); return this; } }; } }; })(MAGNET); /** * Intercept window errors, log them quietly. * @description The error will be intercepted on all enviroments and suppresed on production enviroment (this should be optional). * @name onerror * @event * @param {string} msg Error message * @param {string} url URL of the error * @param {integer} line Line number * @return {boolean} */ if(MAGNET.url.params("debugOff")!=='true'){ window.onerror = function(msg, url, line) { MAGNET.debug.error(msg, [url, line]); return (MAGNET.site.env === 'PROD') ? true : false; }; } /** * MAGNET Site Object * @class MAGNET Site Object * @public * @author Paul Bronshteyn */ MAGNET.site = (function($M) { /** @scope MAGNET.site */ return { /** * Site code * @type string */ code : '', /** * Site title * @type string */ title : '', /** * Site name - Lower cased title * @type string */ name : '', /** * Site environment * @type string */ env : '', /** * Site debug. * @description If set will console debug messages in any enviroment. Use query parameter magdebug to toggle debuger. * @type boolean */ debug : !!$M.url.params('magdebug'), /** * Site no ads. * @description If set will disable ad calls on the page. * @type boolean */ noads : !!$M.url.params('magnoads'), /** * Test ads. * @description If not empty we will use this as dart site and zone * @type String */ testads : $M.url.params('dartAdOverride'), /** * Initiate site specific object, sets document.domain * @param {object} settings S * @type function */ init : function(settings) { settings = settings || {}; for (var s in settings) { this[s] = settings[s]; } /** * @name MAGNET.site#dynamicName * @description Dynamically generated site object based on the name of the site. All site specific code will be in this object. * @memberOf MAGNET.site * @type object * @example MAGNET.site.glamour */ this[this.name] = {}; this.domain = $M.url.domain(); try { if (this.domain) { document.domain = this.domain; } $M.debug.info('Document domain was set', [this.domain]); } catch(e) { $M.debug.error(e); } $M.debug.info('MAGNET Started', [this.code, this.title, this.env, this.name, this.debug, this.noads]); return this; } }; })(MAGNET); /********************************************************************************************************************* The above namespaces need to be in the order listed All namespaces below will follow in alphabetical order *********************************************************************************************************************/ /** * @class MAGNET Cookie * @public * @author Paul Bronshteyn */ MAGNET.cookie = (function($M) { var /** * Cookie Cache Object. * @description Contains all the cookies parsed on the page. * @memberOf MAGNET.cookie * @private * @type object */ cookieCache = {}; /** * @scope MAGNET.cookie */ return { /** * Get the value of a cookie with the given name. * @param {string} name Cookie name * @return {string} Cookie value * * @example Get the value of a cookie: MAGNET.cookie.get('the_cookie'); */ get : function(name) { if (cookieCache[name]) { return cookieCache[name]; } var cookies = document.cookie.split('; '), cookie = [], c = 0, cl = cookies.length; for (; c < cl; c++) { cookie = cookies[c].split('='); cookieCache[cookie[0]] = decodeURIComponent(cookie.slice(1).join('=')); if (cookie[0] === name) { return cookieCache[cookie[0]]; } } return ''; }, /** * Delete the cookie with the given name. * @param {string} name Cookie name * * @example Delete the cookie: MAGNET.cookie.del('the_cookie'); */ del : function(name) { return this.set(name, '', { expires: -1 }), delete cookieCache[name]; // TODO: needs refactoring to remove the comma operator }, /** * Create a cookie with the given name and value and other optional parameters. * @param {string} name Cookie name * @param {string} [value] Cookie value * @param {object} [options] Cookie options * * @example Create or set the value of a cookie: MAGNET.cookie.set('the_cookie', 'the_value'); Create a cookie with all available options: MAGNET.cookie.set('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'condenast.com', secure: true }); Delete the cookie: MAGNET.cookie.set('the_cookie', '', { expires: -1 }); */ set : function(name, value, options) { options = options || {}; value = value || ''; options.expires = ($M.isDate(options.expires)) ? options.expires.toGMTString() : ($M.isNumber(options.expires)) ? (new Date(+(new Date) + options.expires * 60 * 60 * 1000)).toGMTString() : ''; var cookie = [name + '=' + encodeURIComponent(value)], option; for (option in options) { // intentionally leave out check for hasOwnProperty? options[option] && cookie.push(option + '=' + options[option]); // TODO: fails jslint because of && } return options.secure && cookie.push('secure'), document.cookie = cookie.join(';'), true; // TODO: needs refactoring to remove comma } }; })(MAGNET); /** * @class MAGNET Dart Object * @description Contains methods to build and update Dart ad calls * @public * @author Paul Bronshteyn */ MAGNET.dart = (function($M) { var /** * Url to loocal dart html page which loads within the frame * @memberOf MAGNET.dart * @private * @type string * @default /ads/displayad.html */ frameUrl = '/ads/displayad.html', /** * DoubleClick server url * @memberOf MAGNET.dart * @private * @type string * @default http://ad.doubleclick.net/adj/ */ dcUrl = 'http://ad.doubleclick.net/adj/', /** * DoubleClick site * @memberOf MAGNET.dart * @private * @type string * @default .dart */ dcSite = '.' + ($M.site.testads || 'dart'), /** * Section of the site * @memberOf MAGNET.dart * @private * @type string * @default /home */ zone = '/' + ($M.site.testads || $M.url.section().replace(/-/g, '_') || 'home'), /** * A unique identifier for the page required by DoubleClick to be sent with every ad call * @memberOf MAGNET.dart * @private * @type integer */ ord = Math.random() * 10000000000000000, /** * Index of the advertising placement on the page * @memberOf MAGNET.dart * @private * @type integer */ tile = 0, /** * Ad placement collection * @memberOf MAGNET.dart * @private * @type object */ ads = {}; /** * @scope MAGNET.dart */ return { /** * Request ad placement * @param {string} placement Dart ad placement name * @param {object} params Dart ad params * @param {boolean} [store] Store ad placement? * @uses MAGNET.frame.refresh */ request : function(placement, params, store) { if ($M.site.noads) { return this; } ads[placement] = { tile : ++tile, params : params, width : jQuery('#' + placement).width() }; ads[placement].url = frameUrl + '?req=' + dcUrl + $M.site.name + dcSite + zone + ';' + ads[placement].params + 'tile=' + ads[placement].tile + ';'; $M.frame.refresh('#' + placement, ads[placement].url + 'ord=' + ord); $M.debug.info('MAGNET Dart Request', [placement, ads[placement], ord]); // store placement? no? if (store === false) { delete ads[placement]; } return this; }, /** * Reserving for future use * @param {string} placement Dart ad placement name */ update : function(placement) { return this; }, /** * Refresh ad placement(s). * @description This will refresh all ad placements provided to the function or all the placements currently on the page. * @param {string,array} [placement] Placement or Placements to refresh * @uses MAGNET.frame.refresh */ refresh : function(placement) { var p = ($M.isString(placement)) ? placement.split(/,|\s+/) : (jQuery.isArray(placement)) ? placement : ads; ord = Math.random() * 10000000000000000; // the next line removes any references to a doubleclick frame busting ads jQuery('script[id*="prscr"], .prWrap').remove(); // refresh frames jQuery.each(p, function(i, v) { var ad = ($M.isNumber(i)) ? v : i; if (ad in ads) { // reset the width, frame busting ads set it to 0px jQuery('#' + ad).width(ads[ad].width); $M.frame.refresh('#' + ad, ads[ad].url + 'ord=' + ord); } }); return this; } }; })(MAGNET); /** * @class MAGNET Date Object * @public * @author Eric Shepherd * @author Paul Bronshteyn */ MAGNET.date = (function($M) { var /** * Month name list * @memberOf MAGNET.date * @private * @type object */ months = { /** * English month names * @memberOf MAGNET.date * @private * @type array */ en : { /** * English long month names * @memberOf MAGNET.date * @private * @type array */ _long: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','), /** * English short month names * @memberOf MAGNET.date * @private * @type array */ _short: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(',') }, /** * Spanish month names * @memberOf MAGNET.date * @private * @type array */ es : { /** * Spanish long month names * @memberOf MAGNET.date * @private * @type array */ _long: 'enero,febraro,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,deciembre'.split(',') } }, days = { /** * English day of the week names * @memberOf MAGNET.date * @private * @type array */ en : { /** * English day of the week long names * @memberOf MAGNET.date * @private * @type array */ _long: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), /** * English day of the week short names * @memberOf MAGNET.date * @private * @type array */ _short: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',') }, /** * Spanish day of the week names * @memberOf MAGNET.date * @private * @type object */ es: { /** * Spanish day of the week long names * @memberOf MAGNET.date * @private * @type array */ _long: 'el domingo,el lines,el martes,el miércoles,el jueves,el viernes,el sábado'.split(',') } }, /** * Takes an argument and a goal length, and prepends 0 digits to reach that length * @param {mixed} arg A number or string representing a number * @param {number} len A length to make the return string * @return {string} A string containing zero digits plus the original number */ zeroPad = function(arg, len) { return Array((len - arg.length + 1)).join('0') + arg.toString(); }, /** * Flags for formatting dates, parallels Java simple date format. * NOTE: Only works in English for now. We'll need a global language identifier probably at the MAGNET.site level * @memberOf MAGNET.date * @private * @type object */ formatFlags = { // G - Era designator, we assume AD for now G : function() { return 'AD'; }, // y - Year y : function(d, number) { var y = d.getFullYear().toString(); y = (number === 2) ? y.substring(y.length - 2, y.length) : zeroPad(y,number); return y; }, // M - Month in year M : function(d, number) { var m = d.getMonth(), opt = {}; if (number < 3) { m = zeroPad(m + 1, number); } else { opt.form = number === 3 ? 'short' : 'long'; m = MAGNET.date.getMonthName(m, opt); } return m; }, // w - Week in year w : function(d, number) { var first = new Date(d.getFullYear(), 0, 1), // January first of the current year w; w = Math.ceil((((d - first) / 86400000 /* ms in a day */) + first.getDay() + 1) / 7); w = zeroPad(w, number); return w; }, // W - Week in month - not currently supported // D - Day in year D : function(d, number) { var first = new Date(d.getFullYear(), 0, 1), day; day = Math.ceil(((d - first) / 86400000 /* ms in a day */) + first.getDay() + 1); day = zeroPad(day, number); return day; }, // d - Day in month d : function(d, number) { return zeroPad(d.getDate(), number); }, // F - Day of week in month - not currently supported // E - Day in week E : function(d, number) { var opt = {}; opt.form = number > 3 ? 'long' : 'short'; return MAGNET.date.getDayName(d.getDay(), opt); }, // a - AM/PM marker a : function(d, number) { return d.getHours() < 12 ? 'AM' : 'PM'; }, // H - Hour in day (0-23) H : function(d, number) { return zeroPad(d.getHours(), number); }, // k - Hour in day (1-24) k : function(d, number) { return zeroPad(d.getHours() + 1, number); }, // K - Hour in am/pm (0-11) K : function(d, number) { var hours = d.getHours(); return zeroPad(hours - 12 >= 0 ? hours - 12 : hours, number); }, // h - Hour in am/pm (1-12) h : function(d, number) { var hours = d.getHours(); return zeroPad((hours - 13 >= 0 ? hours - 12 : hours), number); }, // m - Minute in hour m : function(d, number) { return zeroPad(d.getMinutes(), number); }, // s - Second in minute s : function(d, number) { return zeroPad(d.getSeconds(), number); }, // S - Millisecond S : function(d, number) { return zeroPad(d.getMilliseconds(), number); } // z - Time zone (general) // Not Supported // Z - Time Zone (RFC 822 e.g. -0800) // Not Supported }; /** * @scope MAGNET.date */ return { /** * Determines whether or not the provided year is a leap year * @param {number} year The year being tested * @return {boolean} Whether or not the year is a leap year */ isLeapYear: function(year) { return !!(year && (year % 4 === 0) && (year % 100 !== 0 || year % 400 === 0)); }, /** * Get the number of days in the given month * @param {number} month Month number (0-11) where January is 0 * @param {number} year The year * @return {number} The number of days in the month */ getDaysInMonth: function(month, year) { return (month === 1 && this.isLeapYear(year)) ? 29 : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || 0; }, /** * Get month name. * @description Returns month name for specified month index and language, the language will default to English if not provided. * @param {integer} month Month number (0-11) where January is 0, February is 1 and so on * @param {object} options Language, short or long form * @option {string} lang ISO 639-1 language code (default "en") * @option {string} form Type of form to use (default "long") * @return {string} Month name or Empty * @link http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes */ getMonthName: function(month, options) { options = options || {}; return (months[options.lang || 'en']['_' + (options.form || 'long')])[month] || ''; }, /** * Get month names array. * @description Returns array of month names for specified language * @param {string} lang ISO 639-1 language code * @return {array} Month names or Empty * @link http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes */ getMonthNames: function(lang, options) { options = options || {}; return months[options.lang || 'en']['_' + (options.form || 'long')] || []; }, /** * Get day name. * @description Returns day name for specified month index and language; the langauge will default to English if not provided. * @param {number} day Day number (0-6) where Sunday is 0 * @param {object} options Language, short or long form * @option {string} lang ISO 639-1 language code (default "en") * @option {string} form Type of form to use (default "long") * @return {string} Day name or empty * @link http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes */ getDayName : function(day, options) { options = options || {}; return (days[options.lang || 'en']['_' + (options.form || 'long')])[((day === 7) ? 0 : day)] || ''; }, /** * Get day of the week names array. * @description Returns array of day of week names for specified language * @param {object} [options] Language and name options * @option {string} lang ISO 639-1 language code (default "en") * @option {string} Type of form to use (default "long") * @return {array} Month names or Empty array * @link http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes */ getDayNames: function(options){ options = options || {}; return days[options.lang || 'en']['_' + (options.form || 'long')] || []; }, /** * Format a JavaScript date to a readable format * For now, this is only a format method. It can be expanded to parse a string into a date later. * @description Returns a formatted date * @param {object} d A JavaScript date object * @param {string} pattern A formatting string, per Java's SimpleDateFormat specification * @return {string} A formatted date string * @link http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html */ format: function(d, pattern) { // For now, only accepting date objects. if (!MAGNET.isDate(d)) { MAGNET.debug.warn('date.format() method requires a JavaScript date object to be passed'); return d; } var str = '', p = function(q) { // Utility function to push into the string we will be returning str += q; }, i, il, current = '', flagLength = 1, currentToEnd, subPattern; /// END VAR BLOCK if (MAGNET.isString(pattern)) { for (i = 0, il = pattern.length; i < il; i++) { current = pattern.substr(i,1); // If there's a flag, call it, else parse literally while accounting for single quotes if (formatFlags[current]) { // Keeps increasing flagLength if letters are repeated and match a flag while (pattern.substr(i + flagLength,1) === pattern.substr(i,1)) { flagLength += 1; } // Calls the method for the given flag p(formatFlags[current](d, flagLength)); } else { if (pattern.substr(i,1) === '\'') { if (pattern.substr(i+1,1) !== '\'') { currentToEnd = pattern.substring(i + 1, pattern.length); subPattern = currentToEnd.substring(0, currentToEnd.search(/'/)); p(subPattern); flagLength += subPattern.length; } else { p('\''); } } else { p(pattern.substr(i,1)); } } i += (flagLength - 1); // jump i ahead by the number of letters current = ''; // reset flagLength = 1; // reset } } else { // Fallback to generic toString() representation if no format was passed in str = d.toString(); } return str; } }; })(MAGNET); /** * @class MAGNET Frame * @description Contains methods for dealing with iFrames. * @public * @requires jQuery * @author Paul Bronshteyn */ MAGNET.frame = (function($M) { var /** * Resize iFrame height to fit content on load. * @description This is a private function that is triggered by the onload event of the iFrame. This will also be triggered by the public resize method. * @memberOf MAGNET.frame * @private * @event */ _resize = function() { try { var body = this.contentWindow.document.body; jQuery(this).css({ border : 'none', margin : 0, height : jQuery(body).css({ overflow: 'hidden', margin: 0, border: 0 }).outerHeight() }); } catch(e) { return $M.debug.user(e, [this, this.id]); } }; /** * @scope MAGNET.frame */ return { /** * Bind iFframe resize on iFrame load. * @description Binds the load event to the element passed in. * @param {string} frame ID or class of the iFrame in jQuery excepted format. * @uses MAGNET.frame._resize * * @example Using element id: MAGNET.frame.bindResize('#frame_id'); Using element class: MAGNET.frame.bindResize('.frame_class'); Using multiple and combinations: MAGNET.frame.bindResize('#frame_id, .frame_class'); */ bindResize : function(frame) { jQuery(frame).bind('load', _resize); return this; }, /** * Refresh iFrame * @description Refreshes an iFrame with the current url or with the url if the param (if provided), resizes the frame onload to fit content. * @param {string,array} frames Array, CSV or space-delimitted list of iframe classes or ids or mixed * @param {string} [url] Url for the iFrame(s) to be refreshed with, defaults to refreshing current iFrame url * @param {boolean} [resize] Resize iFrame after refresh, default is true * @uses MAGNET.frame._resize * * @example Refresh iFrame: MAGNET.frame.refresh('#frame_id'); Refresh multiple iFrames (comma-separated): MAGNET.frame.refresh('#frame_id,.frame1,#frame2'); Refresh multiple iFrames (space-separated): MAGNET.frame.refresh('#frame_id .frame1 #frame2'); Refresh iFrame with url: MAGNET.frame.refresh('#frame_id', 'http://www.example.com'); Refresh iFrame with url and do not resize: MAGNET.frame.refresh('#frame_id', 'http://www.example.com', false); */ refresh : function(frames, url, resize) { frames = ($M.isString(frames)) ? frames.split(/,|\s+/) : (jQuery.isArray(frames)) ? frames : []; // frames array empty? exit if (!frames.length) { return this; } // shift arguments if url was ommited if ($M.isBoolean(url)) { resize = url; url = ''; } // == is intentional and checks for values that are null or undefined resize = (resize == null) ? true : resize; // update each frame jQuery.each(frames, function(i, v) { if (!/\S/.test(v)) { return true; } var frame = jQuery(v); if (!frame.length) { return true; } // bind load event if (resize) { frame.bind('load', _resize); } url = url || frame[0].src; // load url provided or refresh // adblock extension throws error, catch it, kill it try { frame[0].contentWindow.location.replace(url); $M.debug.info('MAGNET Frame Refresh', [v, url, resize]); } catch(e) { $M.debug.user(e, [v, url, resize]); } }); return this; }, /** * Resize iFrame height to fit content. * @description Binds the load event to the element passed in and then triggers it. * @param {string} frame ID or class of the iFrame in jQuery excepted format. * @uses MAGNET.frame._resize * * @example Using element id: MAGNET.frame.resize('#frame_id'); Using element class: MAGNET.frame.resize('.frame_class'); Using multiple and combinations: MAGNET.frame.resize('#frame_id, .frame_class'); */ resize : function(frame) { jQuery(frame).bind('load', _resize).triggerHandler('load'); return this; } }; })(MAGNET); /** * @class MAGNET Internal Object * @description Handles functionality for non-production environments. * @public * @author Eric Shepherd */ MAGNET.internal = (function($M) { var servers = { PROD: 'samgdedd02', STAG: 'samgdedh06', DEV: 'samgdedh06' }; return { /** * Returns the correct teamsite server depending on the current * environment variable. Requires MAGNET.platformEnvironment to * be declared. * @memberOf MAGNET.internal * @public * @method getTeamsiteServer * @return {String} The teamsite server name */ getTeamsiteServer : function() { return servers[$M.site.env] || 'serverNotAvailable'; } }; })(MAGNET); /** * @class MAGNET.page * @description Page level information * @public * @author Paul Bronshteyn * @author Eric Shepherd */ MAGNET.page = (function($M) { return { /** * The section of the site we are in * @memberOf MAGNET.page * @public * @return {String} The current site section, or empty */ section : function() { return ((location.pathname.split('/')[1] || '').match(/^[^\.]*$/) || [''])[0]; }, /** * The subsection of the site we are in, if applicable * @memberOf MAGNET.page * @public * @return {String} The subsection of the site, or empty */ subsection : function() { return ((location.pathname.split('/')[2] || '').match(/^[^\.|(\d{4})]*$/) || [''])[0]; }, /** * The content slug of the current page, if applicable * @memberOf MAGNET.page * @public * @return {String} The current page's slug, or empty */ slug : function() { return ((location.pathname.split('/')[location.pathname.split('/').length-1] || '').match(/^[^\.]*$/) || [''])[0]; } }; })(MAGNET); /** * @class MAGNET Search * @public * @author Paul Bronshteyn */ MAGNET.search = (function($M) { var /** * RegEx checks to validate search string * @memberOf MAGNET.search * @private */ checks = { alphanum : /[^0-9a-zA-Z\s]/g, script : //g }; /** * @scope MAGNET.search */ return { /** * Generate search path. * @description Sanitizes the string first, replaces all spaces with - * @param {string} keywords Search keywords * @return {string} Sanitized search path * @uses MAGNET.search.sanitize */ path : function(keywords) { return this.sanitize(keywords).replace(/\s+/g, '-'); }, /** * Sanitize query string. * @description Remove <script/> tags to prevent XSS and all non-alpha numeric characters. * @param {string} keywords Search keywords * @return {string} Sanitized keywords * @uses MAGNET.utils.trim */ sanitize : function(keywords) { return $M.utils.trim(keywords || '').replace(checks.script, '').replace(checks.alphanum, ''); } }; })(MAGNET); /** * @class MAGNET User * @public * @author Paul Bronshteyn */ MAGNET.user = (function($M) { /** * @scope MAGNET.user */ return { /** * Determine if the user is logged in? * @return {boolean} * @uses MAGNET.cookie.get */ isLoggedIn : function() { return ($M.cookie.get('amg_user_record')); }, /** * Get logged in username * @return {string} Username * @uses MAGNET.utils.parseStr * @uses MAGNET.cookie.get */ username : function() { return $M.utils.parseStr($M.cookie.get('amg_user_record'), 'usercookie').username || ''; }, /** * Get user id * @return {string} id * @uses MAGNET.utils.parseStr * @uses MAGNET.cookie.get */ userid : function() { return $M.utils.parseStr($M.cookie.get('amg_user_record'), 'usercookie').uid || 0; } }; })(MAGNET); /* SECTION: MAGNET INSTANTIABLE CLASSES */ /** * Interface creation and verification methods * @class Interface * @constructor * @author Ross Harmes and Dustin Diaz, from Pro JavaScript Design Patterns * * @param name {String} The name of the interface. Preferable to use IName convention. * @param methods {Array} The methods which need to be implemented by the child classes. */ MAGNET.Interface = function(name, methods) { var i, il; if (arguments.length !== 2) { throw new Error('MAGNET.Interface constructor called with ' + arguments.length + ' arguments, but expected exactly 2'); } this.name = name; this.methods = []; for (i = 0, il = methods.length; i < il; i++) { if (typeof methods[i] !== 'string') { throw new Error('MAGNET.Interface constructor expects method names to be passed in as strings'); } this.methods.push(methods[i]); } }; /** * Verifies that a class implements a given interface. * @method ensureImplements * @static * * @param object {Object} Any object to verify */ MAGNET.Interface.ensureImplements = function(object) { var i, il, inter, j, jl, method; if (arguments.length < 2) { throw new Error('Static method MAGNET.Interface.ensureImplements called with ' + arguments.length + ' arguments, but expected at least 2'); } for (i = 1, il = arguments.length; i < il; i++) { inter = arguments[i]; if (inter.constructor !== MAGNET.Interface) { if (jQuery.browser.safari && jQuery.browser.version < 500) { // do nothing - safari 2 can't handle this constructor check, this is a patch fix for now } else { throw new Error('Static method MAGNET.Interface.ensureImplements expects arguments two and above to be instances of MAGNET.Interface.'); } } for (j = 1, jl = inter.methods.length; j < jl; j++) { method = inter.methods[j]; if (!object[method] || typeof object[method] !== 'function') { throw new Error('Static method MAGNET.Interface.ensureImplements: object does not implement the ' + inter.name + ' interface. Method ' + method + ' was not found.'); } } } }; /** * Creates an observable object * @class Observer * @constructor */ MAGNET.Observer = function() { /** * @property * @static */ this.fns = []; }; MAGNET.Observer.prototype = { /** * Subscribes to an observable event * @method subscribe * * @param fn {Function} A function to execute when the subscribed event fires */ subscribe : function(fn) { this.fns.push(fn); }, /** * Unsubscribes to an observable event * @method unsubscribe * * @param fn {Function} A function to remove from those executed when the subscribed event fires */ unsubscribe : function(fn) { this.fns = this.fns.filter( function(el) { if (el !== fn) { return el; } } ); }, /** * Executes the functions bound to the observable * @method fire * * @param o {Object} Parameters to pass to the functions when they are called * @param scope {Object} Optional scope to execute function within, defaults to window */ fire : function(o, thisObj) { var scope = thisObj || window; this.fns.forEach(function(el) { el.call(scope, o); }); } }; /** * Creates a timer * Adapted from GNU licensed JavaScript Timer * Original API Docs: * Pass in the milliseconds to wait and the callback function to assign. * Timer functions are chainable, and can be started, stopped, paused, resumed and restarted. * @class Timer * @constructor * * @param millis {Number} Milliseconds for the timer * @param callback {Function} A callback to execute each time the interval is reached */ MAGNET.Timer = function(millis, callback) { this.interval = millis; this.timer = null; this.callbacks = []; this.multipliers = []; this.tickCounts = []; this.canRun = []; this.stoppedThreads = 0; this.shouldRunOnce = false; this.startedAt = -1; this.pausedAt = -1; this.addCallback(callback); return this; }; MAGNET.Timer.prototype = { preset : function() { // called from start() this.stoppedThreads = 0; this.startedAt = -1; this.pausedAt = -1; for (var i = 0, il = this.callbacks.length; i < il; i++) { this.canRun[i] = true; this.tickCounts[i] = 0; } }, ticks : function(initInterval) { var that = this, i, il; for (i = 0, il = this.callbacks.length; i < il; i++) { if (typeof this.callbacks[i] === 'function' && this.canRun[i]) { this.tickCounts[i]++; if (this.tickCounts[i] === this.multipliers[i]) { this.tickCounts[i] = 0; if (this.runOnce()) { this.canRun[i] = false; this.stoppedThreads++; } window.setTimeout(that.callbacks[i], 0); } } } if (this.runOnce() && this.stoppedThreads === this.callbacks.length) { this.stop(); } if (typeof initInterval === 'number') { this.stop().start(null, true); } }, runOnce : function(isRunOnce) { if (typeof isRunOnce === 'undefined') { return this.shouldRunOnce; } else if (typeof isRunOnce === 'boolean') { this.shouldRunOnce = isRunOnce; } else { MAGNET.logger.getInstance().log.error('Invalid argument for runOnce'); } return this; }, /** * Resets the interval to the specified time or returns the current interval setting * @method getSetInterval * * @param millis {Number} Milliseconds to change the timer's interval to * * @return {Mixed} Either the current interval or the timer object itself after resetting the interval */ getSetInterval : function(millis) { if (typeof millis === 'undefined') { return this.interval; } else if (typeof millis === 'number') { this.interval = Math.floor(millis); } return this; }, /** * Stops the timer. * @method stop */ stop : function(isPausing) { if (this.timer) { if (!isPausing) { this.pausedAt = -1; } try { window.clearInterval(this.timer); } catch(e) { } this.timer = null; } return this; }, isStopped : function() { return ((this.timer === null) && !this.isPaused()); }, /** * Starts the timer * @method start */ start : function(initialInterval, withoutPreset) { // don't use params when calling var tempInterval, that = this; if (this.isPaused()) { return this.resume(); } if (!this.isStopped()) { return this; } if (!withoutPreset) { this.preset(); } tempInterval = this.interval; if (typeof initialInterval === 'number') { tempInterval = initialInterval; } this.timer = window.setInterval(function() { that.ticks(initialInterval); }, tempInterval); this.startedAt = new Date().getTime(); this.startedAt -= (this.interval - tempInterval); return this; }, /** * Pauses the timer, without resetting. Use resume() to restart playing. * @method pause */ pause : function() { if (this.timer) { this.pausedAt = new Date().getTime(); this.stop(true); } return this; }, isPaused : function() { return (this.pausedAt >= 0); }, /** * Resumes playing a paused timer * @method resume */ resume : function() { if (this.isPaused()) { var tempInterval = this.interval - ((this.pausedAt - this.startedAt) % this.interval); this.pausedAt = -1; this.start(tempInterval, true); } return this; }, restart : function() { return this.stop().start(); }, /** * Adds a callback to the array to be executed at the timer's interval * @method addCallback */ addCallback : function(callback, n) { if (typeof callback === 'function') { this.callbacks.push(callback); if (typeof n === 'number') { n = Math.floor(n); this.multipliers.push(n < 1 ? 1 : n); } else { this.multipliers.push(1); } this.tickCounts.push(0); this.canRun.push(true); } return this; }, clearCallbacks : function() { this.callbacks.length = 0; this.multipliers.length = 0; this.canRun.length = 0; this.tickCounts.length = 0; this.stoppedThreads = 0; return this; } }; /** * DOM-related methods * @class dom * @static */ MAGNET.dom = MAGNET.dom || {}; /** * Temporary storage for DOM elements * @property storage * @static */ MAGNET.dom.storage = { activeClass : 'active', inactiveClass : 'inactive', innerTag : 'span' }; /** * Removes an element temporarily from the document tree ('activating' a tab, for example, by removing its link) * @method activateElement * * @param el {Node} A standard DOM element * @param storage {Object} A temporary storage variable * @param klass {String} An optional class name to apply * * @return {Object} The storage variable, now with the element added */ MAGNET.dom.storage.activateElement = function(el, storage, klass) { var oldLink, newLink, newEl, oldContent; // Uses the default class name unless one is provided klass = klass || this.activeClass; // If there is a link present in the element if (el.getElementsByTagName('a').length > 0) { // Stores the link - Note that the cloning of the element is // because of an IE bug where the links get frozen on the hover // state. Creating a new element altogether fixes this bug. For // good browsers, we can just remove the link to storage. if (jQuery.browser.msie || jQuery.browser.safari) { oldLink = el.getElementsByTagName('a')[0]; newLink = jQuery(oldLink).clone(true); // gets link AND event handlers storage = jQuery(newLink).get()[0]; oldLink.parentNode.removeChild(oldLink); } else { storage = el.removeChild(el.getElementsByTagName('a')[0]); } jQuery(el).addClass(klass); // Creates a new span to hold the contents and aid in styling newEl = document.createElement(this.innerTag); oldContent = storage.innerHTML; newEl.innerHTML = oldContent; // Appends the span to the element and returns the storage variable reference el.appendChild(newEl); return storage; } }; /** * Reinserts an element temporarily from the document tree * @method deactivateElement * @static * * @param el {Node} A standard DOM element * @param storage {Object} A temporary storage variable * @param klass {String} An optional class name to apply */ MAGNET.dom.storage.deactivateElement = function(el, storage, klass) { // Uses the default class name unless one is provided klass = klass || this.activeClass; // If there is a span inside the element if (el.getElementsByTagName(this.innerTag).length > 0) { // Gets the span element, remove it and the class name, and add back what is in storage var children = el.getElementsByTagName(this.innerTag); el.removeChild(children[0]); el.appendChild(storage); jQuery(el).removeClass(klass); } }; /** * @description Reg specific methods. If your function is used on * registration, and it doesn't fit anywhere else... then it belongs here. * @class MAGNET Reg * @public * @author Paul Bronshteyn * @author Russell Munson */ MAGNET.reg = (function($M) { var form = {}, reqClass="rqrd"; function formBindings(){ form.bind('submit', function() { var bdayfield = jQuery('#bdayfield', this); if (bdayfield.length && jQuery('#birthYear', this).val()!='YYYY') { bdayfield.val([jQuery('#birthMonth', this).val(), jQuery('#birthDay', this).val(), jQuery('#birthYear', this).val()].join('/')) } }); }; return { /** * Set the form context for the usage in MAGNET.reg * * @public * @param {String} fid Takes jQuery formatted selector pointing to form * @returns {Object} Returns MAGNET.reg for easy command chaining. */ setForm : function(fid){ form = jQuery(fid); formBindings(); return this; }, /** * Return for jQuery object containing the form currently in context * * @public * @returns {Object} jQuery object conaining form currently in context */ getForm : function(){ return form; }, /** * Concatenates values of separate birthday fields with a '/' deliminator * * @public */ setBirthday : function() { var bdayfield = jQuery('#bdayfield', form); if (bdayfield.length) { var fields = bdayfield.val().split('/') jQuery('#birthMonth', form).val(fields[0]) jQuery('#birthDay', form).val(fields[1]) jQuery('#birthYear', form).val(fields[2]) } }, /** * Add css class indicator for required fields. Assumes * standard regForm markup, with parent .row containing class defined in reqClass * * @public */ setReq: function(el) { jQuery(el).parents('.row').addClass(reqClass); }, /** * Remove css class indicator for required fields. Assumes * standard regForm markup, with parent .row containing class defined in reqClass * * @public */ removeReq: function(el) { jQuery(el).parents('.row').removeClass(reqClass); }, /** * Return class name for marking required fields in a reg form * * @public */ getReqClass : function(){ return reqClass; } }; })(MAGNET) /** * @description Methods invloving geo-location, states, provinces, countries... anything * world oriented * @class MAGNET World * @public * @author Paul Bronshteyn * @author Russell Munson */ MAGNET.world = (function($M) { var states = { msg: 'Select your', us: { desc: 'state', code: 'AL,AK,AZ,AR,CA,CO,CT,DE,DC,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY,AE,AA,AP'.split(','), name: 'Alabama,Alaska,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,District of Columbia,Florida,Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,Nevada,New Hampshire,New Jersey,New Mexico,New York,North Carolina,North Dakota,Ohio,Oklahoma,Oregon,Pennsylvania,Rhode Island,South Carolina,South Dakota,Tennessee,Texas,Utah,Vermont,Virginia,Washington,West Virginia,Wisconsin,Wyoming,Armed Forces Europe,Armed Forces Americas,Armed Forces Pacific'.split(',') }, ca: { desc: 'province', code: 'AB,BC,MB,NB,NL,NT,NS,NU,ON,PE,QC,SK,YT'.split(','), name: 'Alberta,British Columbia,Manitoba,New Brunswick,Newfoundland and Labrador,Northwest Territories,Nova Scotia,Nunavuta,Ontario,Prince Edward Island,Quebec,Saskatchewan,Yukon'.split(',') } }, /** * Defaults the form context for the usage in MAGNET.world to the form currently * in context for MAGNET.reg. * * @public * @returns {Object} Returns jQuery object containing a form * @see MAGNET.reg.getForm */ form = function(){ return MAGNET.reg.getForm()}; return { /** * Set the form context for the usage in MAGNET.reg * * @public * @param {String} fid Takes jQuery formatted selector pointing to form * @returns {Object} Returns MAGNET.reg for easy command chaining. */ setForm : function(fid){ form = jQuery(fid); return this; }, /** * Event that handles coordination between the field containing the currently * selected country value, and the field #state which lists the states/provinces * currently supported by CN Digital reg forms. State field is disabled for non-supported * nations * * @type Event * @public */ setState : function() { var stateField = jQuery('#state', form), zipField=jQuery("#zip",form), selection = this.value.toLowerCase(); if (!(selection in states)) { stateField.attr({disabled: 'true'}); zipField.attr({disabled: 'true'}).data("val",zipField[0].value).val(""); stateField[0][0].selected = true; $M.reg.removeReq("#zip, #state"); } else { $M.reg.setReq("#zip, #state"); zipField[0].value=(zipField.attr({disabled: ''}).data("val")||zipField[0].value); var choice=stateField.children("[selected]").val() || false; stateField.empty(); stateField.attr('disabled', '')[0][0] = new Option(states.msg + ' ' + states[selection].desc, ''); jQuery.each(states[selection].code, function(i) { stateField[0][i + 1] = new Option(states[selection].name[i], this); if(choice && choice==this){stateField[0][i + 1].selected=true;} }); } } }; })(MAGNET) _application/x-javascript #$%&_.http://www.newyorker.com/js/ecom/ecomfw.min.jsO^bplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_.http://www.newyorker.com/js/ecom/ecomfw.min.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTVaryTEtag_IBM_HTTP_ServerUbytesZkeep-alive_application/x-javascript_Sun, 01 Nov 2009 22:01:56 GMT_Wed, 14 Oct 2009 19:14:26 GMTT5934Tgzip_Accept-Encoding_"11544f-3770-f8a16880"*+ab_NSMutableDictionaryac/\NSDictionary7p*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~"+14:CLNU]hjuwy{} &,7Rr'5GJ`nbO7p/** This file is generated by a compression script. Please DO NOT edit it directly or your changes may be lost. See General Javascript Guidelines on the techwiki for more information. Compressed by rmunson on Thu Sep 17 12:56:56 EDT 2009 */ /** START * File: ecom/ecomfw.js * Last Updated: Wed Sep 16 14:58:43 2009 */ /* * @version ecomfw.js v2.53.1457 09.16.2009 * @author Paul Bronshteyn * @comment Built by a geek loaded on caffeine ... * @copyright (c) Conde Nast Digital */ if(typeof CNP==="undefined"||!CNP){var CNP={};}CNP.ecom=(function(){var Y="ecom",U=null,s=null,l=true,P=false,M={idx:0},aa="",r=[],H=document,y=location,u=y.search,ai=Y+"_test",S="ecommerce_test_site",T=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,ag=/(^\d{5}$)|(^\d{5}-\d{4}$)/,Q=navigator.userAgent.toLowerCase(),f={safari:/webkit/.test(Q),opera:/opera/.test(Q),msie:/msie/.test(Q)&&!/opera/.test(Q),mozilla:/mozilla/.test(Q)&&!/(compatible|webkit)/.test(Q)},F=((f.mozilla||f.safari)?"offset":"scroll")+"Height",n={allure:[9,""],architecturaldigest:[9,""],bonappetit:[9,""],cookie:[9,""],details:[5,"condenet"],glamour:[12,"condeglamour"],gq:[5,"condenet"],golfdigest:[9,""],luckymag:[9,""],newyorker:[9,""],portfolio:[12,"condenastportfolio"],self:[12,"condenastgourmet"],style:[5,"condenet"],teenvogue:[12,"condeteenvogue"],traveler:[16,"condenasttraveler"],vanityfair:[12,"condevanityfair"],vogue:[5,"condenet"],wired:[9,"condewiredmag"]},ab=function(aj){var al=A("div"),ak=A("iframe");al.id=Y+"usc";W(al.style,{width:H.body.scrollWidth+"px",height:H.body.scrollHeight+"px",filter:"alpha(opacity = 80)",opacity:".80",zIndex:110000000,position:"absolute",left:"0px",top:"0px",background:"#000000"});H.body.appendChild(al);H.body.style.overflow="hidden";X(true);W(ak,{id:Y+"usf",src:i(aj,"iframe","true"),width:749,height:669,scrolling:"no"});W(ak.style,{background:"#ffffff",border:"0px",position:"absolute",zIndex:120000000,left:(H.body.scrollWidth/2-ak.width/2)+"px",top:(H.documentElement.scrollTop||H.body.scrollTop)+50+"px"});H.body.appendChild(ak);k("load",ak,function(){try{this.height=this.contentDocument.body[F]+"px";}catch(am){}});k("resize",window,function(){var an=d(Y+"usc"),am=d(Y+"usf");an.style.width=H.body.scrollWidth+"px";an.style.height=H.body.scrollHeight+"px";am.style.left=(H.body.scrollWidth/2-am.width/2)+"px";});al=ak=null;},A=function(ak,aj){return(aj||H).createElement(ak);},d=function(ak,aj){return(aj||H).getElementById(ak);},m=function(aj,ak){return(ak||H).getElementsByTagName(aj)||[];},X=function(am){var al=m("select"),ak=0,aj=al.length;for(;akPlease try again.";az.style.display="block";},5000);}return false;});},t=function(am){var al=m("input",M[am].p),ak=0,aj=al.length,an=i(u,"as"),ao;for(;ak>16,(am&65280)>>8,am&255);}if(an.charCodeAt(al-2)===61){return aj.substring(0,aj.length-2);}else{if(an.charCodeAt(al-1)===61){return aj.substring(0,aj.length-1);}else{return aj;}}}},ac=function(){var ak=A("div"),aj=A("a");ak.id=ai;ak.innerHTML="!!! ATTENTION !!! YOU ARE USING ECOM PREVIEW SERVER !!! ATTENTION !!!
";W(ak.style,{zIndex:100000000,backgroundColor:"#FFD700",color:"#800000",padding:"4px",fontWeight:"bold",textAlign:"center",border:"1px solid #333333",marginBottom:"10px",position:"fixed",width:"100%",top:"0px"});aj.innerHTML="[ return to normal mode ]";aj.href="#";ak.appendChild(aj);H.body.appendChild(ak);k("click",aj,function(){O.del(ai);H.body.removeChild((e.srcElement||e.target).parentNode);y.search=i(u,S,"");return false;});ak=aj=null;},af={pingPath:"status.jsp",offerPath:"targetedOffer.jsp",subPath:"embeddedForm.jsp",upsellPath:"ccUpsell.jsp",showPath:"showOffer.jsp",domain:x(),host:g(),path:"/ecom/",user:N(),section:E(),timeout:2,https:false,callback:null,params:{},cdn:false,onload:false,contentEnc:"xml",jsEnc:"true",mboxClient:"",pixelPath:"/images/global/spacer.gif"};return{start:function(aj){if(i(u,"nojoy")==="1"){return l=P=false;}for(var al in af){af[al]=i(u,Y+al)||(aj||{})[al]||af[al];}if(af.cdn===false){var ak=i(u,S)||O.get(ai)||"";if(ak){O.set(ai,ak);k("load",self,ac);af.host=ak;}else{O.del(ai);}}else{O.del(ai);}document.domain=af.domain;af.host=z()+af.host.replace(/^https*:\/\/|\/+$/g,"")+af.path;Z();k("load",self,function(){mboxCreate=function(){return false;};if(i(u,"ecomupsell")==="true"){ab(af.host+af.upsellPath);}if(af.onload){af.onload=false;for(var am;am=r.shift();){ah(am);}}});aa=i(u,"nojoytgt");},mbox:function(ak,aj){if(typeof ak.getUID==="function"){w(ak.getUID(),af.showPath,{placementId:aj},"mbox");}},closeiframe:function(){H.body.style.overflow="visible";d(Y+"usf").style.display="none";d(Y+"usc").style.display="none";X(false);setTimeout(function(){H.body.removeChild(d(Y+"usf"));H.body.removeChild(d(Y+"usc"));},2000);},request:function(aj){if((!l&&!P)||aa.indexOf(aj.pid)!==-1){return;}aj=aj||{};aj.doc=(aj.fid)?aj.fid.document:H;aj.p=d(aj.pid,aj.doc);aj.params=aj.params||{};if(!aj.p){return;}aj.enc=aj.enc||af.contentEnc;M[++M.idx]=aj;if(!P||af.onload){return r.push(M.idx);}ah(M.idx);},response:function(au,al){if(typeof M[au]==="undefined"||a(al)){return;}M[au].code=al;var ap=b((af.jsEnc==="jsesc"?unescape(al):B.d(al))),av=null;if(a(ap)){return;}if(M[au].enc==="xml"){if(typeof DOMParser==="function"||typeof DOMParser==="object"){av=(new DOMParser()).parseFromString(ap,"text/xml");if(av.documentElement.nodeName==="parsererror"){return;}}else{av=new ActiveXObject("Microsoft.XMLDOM");av.async="false";av.loadXML(ap);if(av.parseError.errorCode!==0){return;}}if(!av){return;}if(m("targetedOffer",av)[0]){var ao=b(q(m("content",av)[0])),ak=b((ao.match(/]*>([\s\S]*?)<\/script>/i)||[null,null])[1]);if(a(ao)){return;}M[au].p.innerHTML=ao.replace(//g,"");switch(q(m("placementType",av)[0])){case"Banner":case"Link":if(!ak){break;}var ar=A("script");ar.type="text/javascript";ar.id=Y+"js"+au;if(f.msie){ar.text=ak;}else{ar.appendChild(H.createTextNode(ak));}M[au].p.appendChild(ar);M[au].p.removeChild(ar);ar=null;break;case"embeddedForm":D(au);break;case"autoSub":t(au);break;case"testPlacement":case"testPlacement_Banner":case"testPlacement_Link":v(au,ak);break;case"testPlacement_autoSub":v(au,ak);t(au);break;case"testPlacement_embeddedForm":v(au,ak);D(au);break;}if(M[au].callafter){V(M[au].callafter,M[au].fid);}}else{if(m("response",av)[0]){clearTimeout(M[au].frmto);var an=d("frm_error_"+au,M[au].doc);if(m("errors",av)[0]){var aj="",at=m("error",av),aq=0,am=at.length;for(;aq";}an.innerHTML=aj;an.style.display="block";}else{an.style.display="none";an.innerHTML="";if(m("ccUpsellPage",av)[0]){ab(q(m("ccUpsellPage",av)[0]));}m("form",M[au].p)[0].reset();}M[au].btn.disabled="";M[au].btn.value="Submit";}}}else{M[au].p.innerHTML=al;}ae(au);p(au);}};})(); /** END ecom/ecomfw.js */ _application/x-javascript ()*+_-http://www.newyorker.com/js/stats/tracking.jsObplist00wxX$versionX$objectsY$archiverT$top&"()0123STUVWXYZ[\]^_`abcdefghijklmqrU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1$%#$%&[NS.relativeWNS.base_-http://www.newyorker.com/js/stats/tracking.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A<4567EWNS.keysZNS.objects#89:;<=>?@ABCD FGHIJKLMNOPQR !"VServerZConnectionTEtag_Content-EncodingTVary\Content-TypeWExpires]Cache-Control]Accept-Ranges]Last-ModifiedTDateVPragma^Content-Length_IBM_HTTP_ServerZkeep-alive_"19663f2-21fc-25e41f00"Tgzip_Accept-Encoding_application/x-javascript_Sun, 01 Nov 2009 22:02:16 GMT_max-age=0, no-cache, no-storeUbytes_Tue, 20 Jan 2009 19:35:56 GMT_Sun, 01 Nov 2009 22:02:16 GMTXno-cacheT2901*+no_NSMutableDictionarynp/\NSDictionary*+st_NSHTTPURLResponseuv/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiveryz_WebResourceResponse#-27`f'069?HQSU\doq!/4;J\g9BGLbfs|{O!//_application/x-javascript -./0_1http://www.newyorker.com/js/cn-presentation/cn.jsOabplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_1http://www.newyorker.com/js/cn-presentation/cn.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTEtagTVary_IBM_HTTP_ServerUbytesZkeep-alive_application/x-javascript_Sun, 01 Nov 2009 22:01:56 GMT_Mon, 06 Jul 2009 14:54:49 GMTT5336Tgzip_"1154a3-56de-b009c040"_Accept-Encoding*+ab_NSMutableDictionaryac/\NSDictionaryV*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~%.47=FOQX`kmxz|~ )/:Uu*8JMcneOV/*global CN, console, window, document, setTimeout, clearTimeout, clearInterval, setInterval */ /* for jsLint */ /* * Core Conde Nast JavaScript * @copyright 2009 Conde Nast Publications except where specified. All rights reserved. */ /* SECTION: EXTENSIONS TO NATIVE OBJECTS */ /* Prototypal inheritance, the missing JavaScript method Author: Andrea Giammarchi Example: newObject = Object.make(oldObject); Reference: http://webreflection.blogspot.com/2008/10/big-douglas-begetobject-revisited.html New version recycles function constructor to cut down on memory consumption and is based on Doug Crockford's original prototypal inheritance function */ if (typeof Object.make !== 'function') { Object.make = function(F) { return function(Object) { F.prototype = Object; return new F(); }; }(function() {}); } /* Memoizes a function @author Keith Gaughan @reference http://talideon.com/weblog/2005/07/javascript-memoization.cfm */ Function.prototype.memoize = function() { var memo = {}, that = this, obj = arguments.length > 0 ? arguments[i] : null, memoizedFn; memoizedFn = function() { var args = [], i, il; for (i = 0, il = arguments.length; i < il; i++) { args[i] = arguments[i]; } if (!(args in memo)) { memo[args] = that.apply(obj, arguments); } return memo[args]; }; memoizedFn.unmemoize = function() { return that; }; return memoizedFn; }; /* Unmemoizes a function */ Function.prototype.unmemoize = function() { CN.debug.info('Attempted to unmemoize a function that was never memoized in the first place'); return null; }; /* * Remove item(s) from array */ Array.prototype.remove = function(from, to) { this.splice(from, (to || from || 1) + (from < 0 ? this.length : 0)); return this.length; } /* Sugar Arrays (c) Creative Commons 2006 http://creativecommons.org/licenses/by-sa/2.5/ Author: Dustin Diaz | http://www.dustindiaz.com Reference: http://www.dustindiaz.com/basement/sugar-arrays.html */ if (!Array.prototype.forEach) { Array.prototype.forEach = function(fn, thisObj) { var scope, i, j; scope = thisObj || window; for (i=0, j=this.length; i < j; ++i) { fn.call(scope, this[i], i, this); } }; Array.prototype.every = function(fn, thisObj) { var scope, i, j; scope = thisObj || window; for (i=0, j=this.length; i < j; ++i) { if (!fn.call(scope, this[i], i, this)) { return false; } } return true; }; Array.prototype.some = function(fn, thisObj) { var scope, i, j; scope = thisObj || window; for (i=0, j=this.length; i < j; ++i) { if (fn.call(scope, this[i], i, this)) { return true; } } return false; }; Array.prototype.map = function(fn, thisObj) { var scope, a, i, j; scope = thisObj || window; a = []; for (i=0, j=this.length; i < j; ++i) { a.push(fn.call(scope, this[i], i, this)); } return a; }; Array.prototype.filter = function(fn, thisObj) { var scope, a, i, j; scope = thisObj || window; a = []; for (i=0, j=this.length; i < j; ++i) { if (!fn.call(scope, this[i], i, this)) { continue; } a.push(this[i]); } return a; }; Array.prototype.indexOf = function(el, start) { var i, j; start = start || 0; for (i=start, j=this.length; i < j; ++i) { if (this[i] === el) { return i; } } return -1; }; Array.prototype.lastIndexOf = function(el, start) { var i; start = start || this.length; if (start >= this.length) { start = this.length; } if (start < 0) { start = this.length + start; } for (i=start; i >= 0; --i) { if (this[i] === el) { return i; } } return -1; }; } /* SECTION: CN CORE METHODS */ if (typeof CN === 'undefined' || !CN) /** * CN global namespace object * @namespace CN global namespace object */ var CN = {}; /** * Determines whether or not the provided object is a boolean * @param {mixed} mixed The object being testing * @return {boolean} the result */ CN.isBoolean = function(mixed) { return typeof mixed === 'boolean'; } /** * Determines whether or not the provided object is a date * @param {mixed} mixed The object being tested * @return {boolean} the result */ CN.isDate = function(mixed) { return Object.prototype.toString.call(mixed) === '[object Date]'; } /** * Determines whether or not the provided string is empty * @param {string} str The string being tested * @return {boolean} the result */ CN.isEmpty = function(str) { return !/\S/.test(str || '') || true; } /** * Determines whether or not the provided object is null * @param {mixed} mixed The object being testing * @return {boolean} the result */ CN.isNull = function(mixed) { return mixed === null; } /** * Determines whether or not the provided object is a legal number * @param {mixed} mixed The object being testing * @return {boolean} the result */ CN.isNumber = function(mixed) { return typeof mixed === 'number' && isFinite(mixed); } /** * Determines whether or not the provided object is of type object * @param {mixed} mixed The object being testing * @return {boolean} the result */ CN.isObject = function(mixed) { return typeof mixed === 'object'; } /** * Determines whether or not the provided object is a string * @param {mixed} mixed The object being testing * @return {boolean} the result */ CN.isString = function(mixed) { return typeof mixed === 'string'; } /** * Determines whether or not the provided object is undefined * @param {mixed} mixed The object being testing * @return {boolean} the result */ CN.isUndefined = function(mixed) { return typeof mixed === 'undefined'; } /** * @class CN Utilities * @description Collection of utility helper functions * @public * @author Paul Bronshteyn */ CN.utils = (function($C) { var /** * Cache object. * @description Contains result objects for all parsed string using parseStr function. * @memberOf CN.utils * @private * @type object */ cache = {}, /** * Regular expression parsers * @memberOf CN.utils * @private * @type object */ parsers = { /** * Query, hash parser expression. * @description Will parse a url string in the form of ?var=value&var1=value#hash=value&hash1=value1 into key value pair object. * @memberOf CN.utils * @private * @type RegEx expression */ query: /([^?=&]+)(=([^&]*))?/g, /** * User cookie hash parser expression. * @description Will parse a cookie value in the form of var=value|var1=value|var2=value into key value pair object. * @memberOf CN.utils * @private * @type RegEx expression */ usercookie: /([^=|]+)(=([^|]*))?/g } /** * @scope CN.utils */ return { /** * Parse string using a regular expression and return object of key, value pairs. * @param {string} query Query to be parsed * @param {string} regex String key representing regular expression in parsers object * @return {object} Result object of key, value pairs */ parseStr: function(str, regex) { if (cache[str]) return cache[str]; cache[str] = {}; (str || '').replace(parsers[regex], function($0, $1, $2, $3) { cache[str][$1] = $3; }); return cache[str]; }, /** * Intval - Check if variable is an integer * @param {mixed} mixed The scalar value being converted to an integer * @param {integer} [base] The base for the conversion, a number (from 2 to 36) * that represents the numeral system to be used (default is base 10) * @return {integer} Return a number (default is 0) */ intval: function(mixed, base) { if (typeof mixed === 'boolean') return (mixed) ? 1 : 0; else if (typeof mixed === 'string') { mixed = parseInt(mixed * 1, (base || 10)); return (isNaN(mixed) || !isFinite(mixed)) ? 0 : mixed; } else (typeof mixed === 'number' && isFinite(mixed)) return Math.floor(mixed); return 0; }, /** * Trim string. * @description Remove leading and trailing space, tab and new lines characters * @param {string} str String to be trimmed * @return {string} Trimmed string * @author Ariel Flesler * @see http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html */ trim: function(str) { var start = -1, end = str.length; while (str.charCodeAt(--end) < 33); while (++start < end && str.charCodeAt(start) < 33); return str.slice(start, end + 1); }, /** * Transliterate string. * @description converts extended ascii characters to normal versions * @param {string} str String to be transliterated * @param {boolean} strip Whether or not to delete unknown characters. default: true * @return {string} string * @author Daniel Holly Wells */ transliterate: function(str, strip) { if (typeof str == "undefined") {return "";} if (typeof strip == "undefined") {strip = true;} str = escape(str) .replace(/%C[0-5]/g ,'A') .replace(/%C6/g ,'AE') .replace(/%C7/g ,'C') .replace(/%C[8-9|A-B]/g ,'E') .replace(/%C[C-F]/g ,'I') .replace(/%D[2-8]/g ,'O') .replace(/%D[9|A-C]/g ,'U') .replace(/%DD/g ,'Y') .replace(/%u0178/g ,'Y') .replace(/%u017D/g ,'Z') .replace(/%u0160/g ,'S') .replace(/%E[0-5]/g ,'a') .replace(/%E6/g ,'ae') .replace(/%E7/g ,'c') .replace(/%E[8-9|A-B]/g ,'e') .replace(/%E[C-F]/g ,'i') .replace(/%F[2-8]/g ,'o') .replace(/%F[9|A-C]/g ,'u') .replace(/%F[D-F]/g ,'y') .replace(/%u017E/g ,'z') .replace(/%u0161/g ,'s') .replace(/%u2014/g ,'-') .replace(/%u2013/g ,'-') .replace(/%u201[8-9]/g ,"'") .replace(/%u201A/g ,',') .replace(/%u2026/g ,'...') .replace(/%u201[C-D]/g ,'"') .replace(/%3F/g ,'?') .replace(/%21/g ,'!') .replace(/%26/g ,'&') .replace(/%25/g ,'%') .replace(/%24/g ,'$') .replace(/%5E/g ,'^') .replace(/%28/g ,'(') .replace(/%29/g ,')') .replace(/%7E/g ,'~') .replace(/%60/g ,'`') .replace(/%23/g ,'#') .replace(/%3D/g ,'=') .replace(/%2C/g ,',') .replace(/%3C/g ,'<') .replace(/%2E/g ,'>') .replace(/%7C/g ,'|') .replace(/%3A/g ,':') .replace(/%3B/g ,';') .replace(/%7D/g ,'}') .replace(/%7B/g ,'{') .replace(/%5B/g ,'[') .replace(/%5D/g ,']') .replace(/%20/g ,' '); if(strip) { str = str.replace(/%u[0-9|A-F][0-9|A-F][0-9|A-F][0-9|A-F]/g, '').replace(/%u[0-9|A-F][0-9|A-F]/g, '').replace(/%[0-9|A-F][0-9|A-F]/g, ''); } else { str = unescape(str); } return str } } })(CN) /** * @class CN URL Object * @description Contains methods for dealing with url's, query and hash params * @public * @author Paul Bronshteyn */ CN.url = (function($C) { var /** * Path Cache Array. * @memberOf CN.url * @private * @type object */ pathCache = [] /** * @scope CN.url */ return { /** * Retrieves domain name from the url in the form of domain.com * @return {string} domain.com */ domain: function(host) { var d = (host || location.hostname).split(':')[0].split('.'), dl = d.length; return d.slice(dl - 2, dl).join('.'); }, /** * Retrieve current site section * @return {string} Section name */ section: function() { return ((location.pathname.split('/')[1] || '').match(/^[^\.]*$/) || [''])[0]; }, /** * Get query params as object of key, value pairs or a value of a param passed in. If query is not provided, location.search will be used. Result will be caches to queryCache variable for faster access on next call. * @param {string} [param] Parameter to lookup * @param {string} [query] Query string to parse * @return {object|string} */ params: function(param, query) { query = query || location.search; var result = $C.utils.parseStr(query, 'query'); return (param) ? result[param] || '' : result; }, /** * Retrive current site path * @return {array} Path */ path: function() { if (pathCache.length === 0) { pathCache = location.pathname.match(/^\/(.*?)\/?$/)[1].split('/'); // remove leading and trailing slash. } return pathCache; }, /** * Retrieve the URL fragment identifier * @return {string} fragment id */ getFragment : function() { return location.hash.split('#')[1] || false; }, /** * Sets the fragment identifier string */ setFragment : function(value) { location.hash = value; } } })(CN) /** * CN Site Object * @class CN Site Object * @public * @author Paul Bronshteyn */ CN.site = (function($C) { /** @scope CN.site */ return { /** * Site code * @type string */ code: '', /** * Site title * @type string */ title: '', /** * Site name - Lower cased title * @type string */ name: '', /** * Site environment * @type string */ env: '', /** * Site debug. * @description If set will console debug messages in any enviroment. Use query parameter magdebug to toggle debuger. * @type boolean */ debug: !!$C.url.params('cndebug'), /** * Site no ads. * @description If set will disable ad calls on the page. * @type boolean */ noads: !!$C.url.params('cnnoads'), /** * Test ads. * @description If not empty we will use this as dart site and zone * @type String */ testads: $C.url.params('dartAdOverride'), /** * Initiate site specific object, sets document.domain * @type function */ init: function() { /** * @name CN.site#dynamicName * @description Dynamically generated site object based on the name of the site. All site specific code will be in this object. * @memberOf CN.site * @type object * @example CN.site.glamour */ this[this.name] = {}; this.domain = $C.url.domain(); try { if (this.domain) document.domain = this.domain; $C.debug.info('Documment domain was set', [this.domain]); } catch(e) { $C.debug.error(e); } $C.debug.info('CN Started', [this.code, this.title, this.env, this.name, this.debug, this.noads]); } } })(CN) /*********************************************************************************************************************/ /* The above namespaces need to be in the order listed /* All namespaces below will follow in alphabetical order /*********************************************************************************************************************/ /** * @class CN Cookie * @public * @author Paul Bronshteyn */ CN.cookie = (function($C) { var /** * Cookie Cache Object. * @description Contains all the cookies parsed on the page. * @memberOf CN.cookie * @private * @type object */ cookieCache = {}; /** * @scope CN.cookie */ return { /** * Get the value of a cookie with the given name. * @param {string} name Cookie name * @return {string} Cookie value * * @example Get the value of a cookie: CN.cookie.get('the_cookie'); */ get: function(name) { if (cookieCache[name]) return cookieCache[name]; var cookies = document.cookie.split('; '), cookie = [], c = 0, cl = cookies.length; for (; c < cl;) { cookie = cookies[c++].split('='); cookieCache[cookie[0]] = decodeURIComponent(cookie.slice(1).join('=')); if (cookie[0] === name) return cookieCache[cookie[0]]; } return ''; }, /** * Delete the cookie with the given name. * @param {string} name Cookie name * * @example Delete the cookie: CN.cookie.del('the_cookie'); */ del: function(name) { return this.set(name, ''), delete cookieCache[name]; }, /** * Create a cookie with the given name and value and other optional parameters. * @param {string} name Cookie name * @param {string} [value] Cookie value * @param {object} [options] Cookie options * * @example Create or set the value of a cookie: CN.cookie.set('the_cookie', 'the_value'); Create a cookie with all available options: CN.cookie.set('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'condenast.com', secure: true }); Delete the cookie: CN.cookie.set('the_cookie', '', { expires: -1 }); */ set: function(name, value, options) { options = options || {}; value = value || ''; options.expires = $M.isDate(options.expires) ? options.expires.toGMTString() : $M.isNumber(options.expires) ? (new Date(+(new Date) + options.expires * 60 * 60 * 1000)).toGMTString() : ''; var cookie = [name + '=' + encodeURIComponent(value)], option; for (option in options) options[option] && cookie.push(option + '=' + options[option]); return options.secure && cookie.push('secure'), document.cookie = cookie.join(';'), true; } } })(CN) /** * @class CN.page * @description Page level information * @public * @author Paul Bronshteyn * @author Eric Shepherd */ CN.page = (function($C) { return { /** * The section of the site we are in * @memberOf CN.page * @public * @return {String} The current site section, or empty */ section : function() { return ((location.pathname.split('/')[1] || '').match(/^[^\.]*$/) || [''])[0]; }, /** * The subsection of the site we are in, if applicable * @memberOf CN.page * @public * @return {String} The subsection of the site, or empty */ subsection : function() { return ((location.pathname.split('/')[2] || '').match(/^[^\.|(\d{4})]*$/) || [''])[0]; }, /** * The content slug of the current page, if applicable * @memberOf CN.page * @public * @return {String} The current page's slug, or empty */ slug : function() { return ((location.pathname.split('/')[location.pathname.split('/').length-1] || '').match(/^[^\.]*$/) || [''])[0]; } }; })(CN); _application/x-javascript 2345_;http://www.newyorker.com/js/cn-presentation/stats/s_code.jsOkbplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_;http://www.newyorker.com/js/cn-presentation/stats/s_code.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTEtagTVary_IBM_HTTP_ServerUbytesZkeep-alive_application/x-javascript_Sun, 01 Nov 2009 22:01:56 GMT_Mon, 06 Jul 2009 14:57:09 GMTT9558Tgzip_"8b71db-3f10-b861fb40"_Accept-Encoding*+ab_NSMutableDictionaryac/\NSDictionary?*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~$/8>AGPY[bjuw!39D_ 4BTWmnoO?/* SiteCatalyst code version: H.15.1. JS file version 2.2 [updated 4-6-09] updated 08-22-2008: sprop10 forced to all lowercase [Trenton Hansen-Omniture] updated 08-22-2008: sprop23 and evar 23 added for New vs. Repeat Visitors [Trenton Hansen-Omniture] updated 08-22-2008: copy s.pagename into evar2 [Trenton Hansen-Omniture] updated 09-08-2008: For Concierge: copy s.prop24 into evar24 [Caroline Accumanno] updated 01-06-2009: Updated year in Time Parting plugin [Eric Elbaz] updated 03-25-2009: fixed copying s.pagename into evar2, fixed s.prop10 comma issue, copy s.campaign into evar15 [Eric Elbaz] updated 04-06-2009: Added s.trackingServerSecure to capture s_trackingServerSecure value set on the page level [Kevin Wilson] Copyright 1997-2008 Omniture, Inc. More info available at http://www.omniture.com */ /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/ var s_code='',s_objectID;function s_gi(un,pg,ss){var c="=fun@5(~){`Ks=^Q~$d ~.substring(~.indexOf(~;@r~`l@r~=new Fun@5(~.toLowerCase()~s_c_il['+s^qn+']~};s.~.length~.toUpperCase~=new Object~s.wd~','~" +"){@r~t^s~.location~')q='~var ~s.pt(~dynamicAccount~link~s.apv~='+@w(~)@rx^l!Object$aObject.prototype$aObject.prototype[x])~);s.~Element~.getTime()~=new Array~ookieDomainPeriods~s.m_~.protocol~=new " +"Date~BufferedRequests~}c$o(e){~visitor~;@V^is[k],255)}~javaEnabled~conne@5^K~^zc_i~Name~=''~:'')~onclick~}@r~else ~ternalFilters~javascript~s.dl~@Ms.b.addBehavior(\"# default# ~=parseFloat(~'+tm.ge" +"t~cookie~parseInt(~s.rep(~s.^R~track~o^zoid~browser~.parent~window~referrer~colorDepth~String~while(~.host~.lastIndexOf('~s.sq~s.maxDelay~s.vl_g~r=s.m(f)?s[f](~for(~s.un~s.eo~&&s.~t=s.ot(o)~j='1.~#" +"1URL~lugins~document~Type~Sampling~s.rc[un]~Download~Event~');~this~tfs~resolution~s.c_r(~s.c_w(~s.eh~s.isie~s.vl_l~s.vl_t~Height~t,h){t=t?t~tcf~isopera~ismac~escape(~'s_~.href~screen.~s.fl(~Versio" +"n~harCode~&&(~variableProvider~s.pe~)?'Y':'N'~:'';h=h?h~._i~e&&l$ZSESSION'~=='~f',~onload~name~home#1~objectID~}else{~.s_~s.rl[u~Width~s.ssl~o.type~Timeout(~ction~Lifetime~.mrq(\"'+un+'\")~sEnabled" +"~;i++)~'){q='~&&l$ZNONE'){~ExternalLinks~_'+~charSet~onerror~lnk~currencyCode~.src~s=s_gi(~etYear(~Opera~;try{~Math.~s.fsg~s.ns6~s.oun~InlineStats~Track~'0123456789~&&!~s[k]=~s.epa(~m._d~n=s.oid(o)" +"~,'sqs',q);~LeaveQuery~')>=~'=')~&&t~){n=~\",''),~vo)~s.sampled~=s.oh(o);~+(y<1900?~s.disable~ingServer~n]=~true~sess~campaign~lif~if(~'http~,100)~s.co(~x in ~s.ape~ffset~s.c_d~s.br~'&pe~s.gg(~s.gv" +"(~s[mn]~s.qav~,'vo~s.pl~=(apn~Listener~\"s_gs(\")~vo._t~b.attach~d.create~=s.n.app~(''+~'+n~)+'/~s()+'~){p=~():''~a):f(~+1))~a['!'+t]~){v=s.n.~channel~un)~.target~o.value~g+\"_c\"]~\".tl(\")~etscap" +"e~(ns?ns:~omePage~s.d.get~')<~!='~||!~[b](e);~m[t+1](~return~height~events~random~code~'MSIE ~rs,~un,~,pev~INPUT'~floor(~atch~s.num(~[\"s_\"+~s.c_gd~s.dc~s.pg~,'lt~.inner~transa~;s.gl(~\"m_\"+n~idt" +"='+~',s.bc~page~Group,~.fromC~sByTag~?'&~+';'~t&&~1);~[t]=~'+v]~>=5)~[t](~=l[n];~!a[t])~~s._c=^fc';`E=^0`5!`E`fn){`E`fl`U;`E`fn=0;}s^ql=`E`fl;s^qn=`E`fn;s^ql[s^q@ms;`E`fn++;s.m`0m){`2$Em)`4'{$Y0`Af" +"l`0x,l){`2x?$Ex)`30,l):x`Aco`0o`G!o)`2o;`Kn`D,x;^B@vo)@rx`4'select$Y0&&x`4'filter$Y0)n[x]=o[x];`2n`Anum`0x){x`h+x;^B`Kp=0;p127){l=0;e`h;^4n||l<4){e=h`3n%16,n%16+1)+e;n=`tn/16);l++}y+='%u'+e}`6c^s+')y+='%2B';`ly+=^ec)}x=y^yx=x?" +"`u^e''+x),'+`F%2B'):x`5x&&c^Eem==1&&x`4'%u$Y0&&x`4'%U$Y0){i=x`4'%^P^4i>=0){i++`5h`38)`4x`3i,i+1)`C())>=0)`2x`30,i)+'u00'+x`3i);i=x`4'%',i)}}}}`2x`Aepa`0x`1;`2x?un^e`u''+x,'+`F ')):x`Apt`0x,d,f,a`1," +"t=x,z=0,y,r;^4t){y=t`4d);y=y<0?t`B:y;t=t`30,y);^At,$Kt,a)`5r)`2r;z+=y+d`B;t=x`3z,x`B);t=z=0)a=a`30,c)`5t`30,2)==^f')t=t`32);`2(t!`h@d==a)`Afsf`0t,a`1`5`La,`" +"F,'is^tt))@O+=(@O!`h?`F`i+t;`20`Afs`0x,f`1;@O`h;`Lx,`F,'fs^tf);`2@O`Ac_d`h;$rf`0t,a`1`5!$pt))`21;`20`Ac_gd`0`1,d=`E`I^5^v,n=s.fpC`V,p`5!n)n=s.c`V`5d@U@y@en?`tn):2;n=n>2?n:2;p=d^6.')`5p>=0){^4p>=0&&" +"n>1$Id^6.',p-#8n--}@y=p>0&&`Ld,'.`Fc_gd^t0)?d`3p):d}}`2@y`Ac_r`0k`1;k=@w(k);`Kc=' '+s.d.`s,i=c`4' '+k+@c,e=i<0?i:c`4';',i),v=i<0?'':@Wc`3i+2+k`B,e<0?c`B:e));`2v$Z[[B]]'?v:''`Ac_w`0k,v,e`1,d=$r(),l=" +"s.`s@6,t;v`h+v;l=l?$El)`C$J`5^r@Bt=(v!`h?`tl?l:0):-60)`5t){e`Y;e.setTime(e`T+(t*1000))}`kk@Bs.d.`s=k+'`Pv!`h?v:'[[B]]')+'; path=/;'+(^r?' expires='+e.toGMT^3()#6`i+(d?' domain='+d#6`i;`2^Tk)==v}`20" +"`Aeh`0o,e,r,f`1,b=^f'+e+'@Ds^qn,n=-1,l,i,x`5!^Vl)^Vl`U;l=^Vl;^Bi=0;i=5^l!s.^c||`O>=7)){^b`7's`Ff`Fa`Ft`F`Ke,r@M^A$Ka)`ar=s.m(t)?s#Ce):t(e)}`2r^Pr=^b(s,f,a,t)^y@rs.^d^Eu`4$i4@b0)r=s.m(b)?s[b](a):b(a);else{^V(`E,'@F',0,o);^A$Ka`Reh(`E," +"'@F',1)}}`2r`Ag^Ret`0e`1;`2`v`Ag^Roe`7'e`F`Ks=`9,c;^V(^0,\"@F\",1`Re^R=1;c=s.t()`5c)s.d.write(c`Re^R=0;`2@n'`Rg^Rfb`0a){`2^0`Ag^Rf`0w`1,p=w`z,l=w`I;`v=w`5p&&p`I!=l&&p`I^5==l^5){`v=p;`2s.g^Rf(`v)}`2" +"`v`Ag^R`0`1`5!`v){`v=`E`5!s.e^R)`v=s.cet('g^R^t`v,'g^Ret',s.g^Roe,'g^Rfb')}`2`v`Amrq`0u`1,l=@0],n,r;@0]=0`5l)^Bn=0;n5.5)rs=^i$" +"j4095);`lrs=^i$j2047)`kid){@z(id,rs);$d}`ks.d.images&&`O>=3^l!s.^c||`O>=7)^l@P<0||`O>=6.1)`G!s.rc)s.rc`D`5!^M){^M=1`5!s.rl)s.rl`D;@0n]`U;set@4'@r^0`fl)^0.`9@7',750)^yl=@0n]`5l){r.t=ta;r.u=un;r.r=rs" +";l[l`B]=r;`2''}imn+='@D^M;^M++}im=`E[imn]`5!im)im=`E[im@mnew Image;im^zl=0;im.^u`7'e`F^Q^zl=1`5^0`fl)^0.`9@7^Pim@I=rs`5rs`4$0=@b0^l!ta||ta^s_self'||ta^s_top'||(`E.^v@da==`E.^v))){b=e`Y;^4!im^zl&&e`" +"T-b`T<500)e`Y}`2''}`2''`Agg`0v`1`5!`E[^f#A)`E[^f#A`h;`2`E[^f#A`Aglf`0t,a`Gt`30,2)==^f')t=t`32);`Ks=^Q,v=$1t)`5v)s#9v`Agl`0v`1`5$t)`Lv,`F,'gl" +"^t0)`Agv`0v`1;`2s['vpm@Dv]?s['vpv@Dv]:(s[v]?s[v]`i`Ahavf`0t,a`1,b=t`30,4),x=t`34),n=`tx),k='g@Dt,m='vpm@Dt,q=t,v=s.`N@SVa$je=s.`N@S^Os,mn;@V$2t)`5s.@G||^D||^n`G^n^Epe`30,4)$Z@G_'){mn=^n`30,1)`C()+^" +"n`31)`5$3){v=$3.`wVars;e=$3.`w^Os}}v=v?v+`F+^X+`F+^X2:''`5v@U`Lv,`F,'is^tt))s[k]`h`5`H$f'&&e)@Vs.fs(s[k],e)}s[m]=0`5`H`bID`Jvid';`6`H^H@Ag'`c`6`H^1@Ar'`c`6`Hvmk`Jvmt';`6`H@E@Ace'`5s[k]&&s[k]`C()^sA" +"UTO')@V'ISO8859-1';`6s[k]^Eem==2)@V'UTF-8'}`6`H`b`gspace`Jns';`6`Hc`V`Jcdp';`6`H`s@6`Jcl';`6`H^m`Jvvp';`6`H@H`Jcc';`6`H$O`Jch';`6`H$w@5ID`Jxact';`6`H@p`Jv0';`6`H^S`Js';`6`H^2`Jc';`6`H`n^j`Jj';`6`H`" +"d`Jv';`6`H`s@8`Jk';`6`H`y@1`Jbw';`6`H`y^Z`Jbh';`6`H`e`Jct';`6`H^w`Jhp';`6`Hp^I`Jp';`6$px)`Gb^sprop`Jc$F;`6b^seVar`Jv$F;`6b^shier@Ah$F`c`ks[k]@d$Z`N`g'@d$Z`N^K')$4+='&'+q+'`Ps[k]);`2''`Ahav`0`1;$4`h" +";`L^Y,`F,'hav^t0);`2$4`Alnf`0^a`8^p`8:'';`Kte=t`4@c`5t@de>0&&h`4t`3te$L>=0)`2t`30,te);`2''`Aln`0h`1,n=s.`N`gs`5n)`2`Ln,`F,'ln^th);`2''`Altdf`0^a`8^p`8:'';`Kqi=h`4'?^Ph=qi>=0?h`30,qi):h`5#7h`3h`B-(t" +"`B$L^s.'+t)`21;`20`Altef`0^a`8^p`8:''`5#7h`4t)>=0)`21;`20`Alt`0h`1,lft=s.`N^NFile^Ks,lef=s.`NEx`m,@q=s.`NIn`m;@q=@q?@q:`E`I^5^v;h=h`8`5s.`w^NLinks&&lf#7`Llft,`F$ud^th))`2'd'`5s.`w@C^llef||@q)^l!lef" +"||`Llef,`F$ue^th))^l!@q$a`L@q,`F$ue^th)))`2'e';`2''`Alc`7'e`F`Ks=`9,b=^V(^Q,\"`j\"`R@G=@u^Q`Rt(`R@G=0`5b)`2^Q$b`2@n'`Rbc`7'e`F`Ks=`9,f,^b`5s.d^Ed.all^Ed.all.cppXYctnr)$d;^D=e@I`S?e@I`S:e$Q;^b`7\"s" +"\",\"`Ke@M@r^D^l^D.tag`g||^D`z`S||^D`zNode))s.t()`a}\");^b(s`Reo=0'`Roh`0o`1,l=`E`I,h=o^g?o^g:'',i,j,k,p;i=h`4':^Pj=h`4'?^Pk=h`4'/')`5h^li<0||(j>=0&&i>j)||(k>=0&&i>k))$Io`X&&o`X`B>1?o`X:(l`X?l`X`i;" +"i=l.path^v^6/^Ph=(p?p+'//'`i+(o^5?o^5:(l^5?l^5`i)+(h`30,1)$Z/'?l.path^v`30,i<0?0:i$G'`i+h}`2h`Aot`0o){`Kt=o.tag`g;t=t@d`C?t`C$J`5`HSHAPE')t`h`5t`G`H$m&&@3&&@3`C)t=@3`C();`6!#7o^g)t='A';}`2t`Aoid`0o" +"`1,^F,p,c,n`h,x=0`5t@U`x$Io`X;c=o.`j`5o^g^l`HA'||`HAREA')^l!c$ap||p`8`4'`n$Y0))n@i`6c@e`us.rep(`us.rep$Ec,\"\\r@f\"\\n@f\"\\t@f' `F^Px=2}`6$R^l`H$m||`HSUBMIT')@e$R;x=3}`6o@I&&`HIMAGE')n=o@I`5n){`x=" +"^in@t;`xt=x}}`2`x`Arqf`0t,un`1,e=t`4@c,u=e>=0?`F+t`30,e)+`F:'';`2u&&u`4`F+un+`F)>=0?@Wt`3e$L:''`Arq`0un`1,c=un`4`F),v=^T^fsq'),q`h`5c<0)`2`Lv,'&`Frq^t$P;`2`L$k`F,'rq',0)`Asqp`0t,a`1,e=t`4@c,q=e<0?'" +"':@Wt`3e+1)`Rsqq[q]`h`5e>=0)`Lt`30,e),`F@Z`20`Asqs`0$kq`1;^7u[u@mq;`20`Asq`0q`1,k=^fsq',v=^Tk),x,c=0;^7q`D;^7u`D;^7q[q]`h;`Lv,'&`Fsqp',0);`L^C,`F@Zv`h;^B@v^7u`Q)^7q[^7u[x]]+=(^7q[^7u[x]]?`F`i+x;^B@" +"v^7q`Q&&^7q[x]^lx==q||c<2)){v+=(v#5'`i+^7q[x]+'`Px);c++}`2^Uk,v,0)`Awdl`7'e`F`Ks=`9,r=@n,b=^V(`E,\"^u\"),i,o,oc`5b)r=^Q$b^Bi=0;i=0)&&oc`4$T<0)^V(o,\"`j\",0,s.lc);}`2r^P`Es`0`1`5`O>3^l!^W$as.^d||`O#B`Gs.b^E$B^O)s.$B^O('`j#0);`6s.b^Eb.add^O$8)s.b.add^O$8('click#0,false);`l^V(`E,'^u',0,`El)}`Avs`0x`1,v=s.`b^L,g=s.`b^L#2" +"k=^fvsn@D^C+(g?'@Dg`i,n=^Tk),e`Y,y=e.g@K);e.s@Ky+10@j1900:0))`5v){v*=100`5!n`G!^Uk,x,e))`20;n=x`kn%10000>v)`20}`21`Adyasmf`0t,m`G#7m&&m`4t)>=0)`21;`20`Adyasf`0t,m`1,i=t?t`4@c:-1,n,x`5i>=0&&m){`Kn=t" +"`30,i),x=t`3i+1)`5`Lx,`F,'dyasm^tm))`2n}`20`Auns`0`1,x=s.`MSele@5,l=s.`MList,m=s.`MM$o,n,i;^C=^C`8`5x&&l`G!m)m=`E`I^5`5!m.toLowerCase)m`h+m;l=l`8;m=m`8;n=`Ll,';`Fdyas^tm)`5n)^C=n}i=^C`4`F`Rfun=i<0?" +"^C:^C`30,i)`Asa`0un`1;^C=un`5!@Q)@Q=un;`6(`F+@Q+`F)`4$P<0)@Q+=`F+un;^Cs()`Am_i`0n,a`1,m,f=n`30,1),r,l,i`5!`Wl)`Wl`D`5!`Wnl)`Wnl`U;m=`Wl[n]`5!a&&m&&m._e@Um^q)`Wa(n)`5!m){m`D,m._c=^fm';m^qn=`E`fn;m^q" +"l=s^ql;m^ql[m^q@mm;`E`fn++;m.s=s;m._n=n;m._l`U('_c`F_in`F_il`F_i`F_e`F_d`F_dl`Fs`Fn`F_r`F_g`F_g1`F_t`F_t1`F_x`F_x1`F_l'`Rm_l[@mm;`Wnl[`Wnl`B]=n}`6m._r@Um._m){r=m._r;r._m=m;l=m._l;^Bi=0;i=0)x(s);`l`Wm(\"x\",n,x)}m=`Wi(n,1)`5@Xl)@Xl=@X=0;`ot();`2f'`Rm_m`0t,n,d){t='@Dt;`Ks=^Q,i,x,m,f='@Dt`5`Wl&&`Wnl)^Bi=0;i<`Wnl`B@9{x=`Wnl[i]`5!n||x==n){m=`Wi(x)`5m[t]`G`H_d')`2" +"1`5d)m#Cd);`lm#C)`km[t+1]@Um[f]`Gd)$cd);`l$c)}m[f]=1}}`20`AloadModule`0n,u,d,l`1,m,i=n`4':'),g=i<0?$y:n`3i+1),o=0,f,c=s.h?s.h:s.b,^b`5i>=0)n=n`30,i);m=`Wi(n)`5(l$a`Wa(n,g))&&u^Ed&&c^E$C`S`Gd){@X=1;" +"@Xl=1`k@2)u=`uu,@s:`Fhttps:^Pf`7'e`F`9.m_a(\"$F+'\",\"'+g+'\")^P^b`7's`Ff`Fu`Fc`F`Ke,o=0@Mo=s.$C`S(\"script\")`5o){@3=\"text/`n\"`5f)o.^u=f;o@I=u;c.appendChild(o)}`ao=0}`2o^Po=^b(s,f,u,c)}`lm=`Wi(n" +");m._e=1;`2m`Avo1`0t,a`Ga[t]||$M)^Q#9a[t]`Avo2`0t,a`G#E{a#9^Q[t]`5#E$M=1}`Adlt`7'`Ks=`9,d`Y,i,vo,f=0`5`ol)^Bi=0;i<`ol`B@9{vo=`ol[i]`5vo`G!`Wm(\"d\")||d`T-$A>=^8){`ol[i]=0;s.t(@g}`lf=1}`k`oi)clear@4" +"`oi`Rdli=0`5f`G!`oi)`oi=set@4`ot,^8)}`l`ol=0'`Rdl`0vo`1,d`Y`5!@gvo`D;`L^9,`F$52',@g;$A=d`T`5!`ol)`ol`U;`ol[`ol`B]=vo`5!^8)^8=250;`ot()`At`0vo,id`1,trk=1,tm`Y,sed=Math&&@N$g?@N$n@N$g()*1000000000000" +"0):tm`T,@o='s'+@N$ntm`T/10800000)%10+sed,y=tm.g@K),vt=tm.getDate($G`rMonth($G'@jy+1900:y)+' `rHour$H:`rMinute$H:`rSecond$H `rDay()+' `rTimezoneO@x(),^b,^R=s.g^R(),ta`h,q`h,qs`h,$h`h,vb`D$x^9`Runs()" +"`5!s.td){`Ktl=^R`I,a,o,i,x`h,c`h,v`h,p`h,bw`h,bh`h,^G0',k=^U^fcc`F@n',0^o,hp`h,ct`h,pn=0,ps`5^3&&^3.prototype){^G1'`5j.m$o){^G2'`5tm.setUTCDate){^G3'`5^W^E^d&&`O#B^G4'`5pn.toPrecision){^G5';a`U`5a." +"forEach){^G6';i=0;o`D;^b`7'o`F`Ke,i=0@Mi=new Iterator(o)`a}`2i^Pi=^b(o)`5i&&i.next)^G7'}}}}`k`O>=4)x=^hwidth+'x'+^h$e`5s.isns||s.^c`G`O>=3$N`d(^o`5`O>=4){c=^hpixelDepth;bw=`E$v@1;bh=`E$v^Z}}$6=s.n." +"p^I}`6^W`G`O>=4$N`d(^o;c=^h^2`5`O#B{bw=s.d.^J`S.o@x@1;bh=s.d.^J`S.o@x^Z`5!s.^d^Eb){^b`7's`Ftl`F`Ke,hp=0`ph$W\");hp=s.b.isH$W(tl)?\"Y\":\"N\"`a}`2hp^Php=^b(s,tl);^b`7's`F`Ke,ct=0`pclientCaps\");ct=s" +".b.`e`a}`2ct^Pct=^b(s)}}}`lr`h`k$6)^4pn<$6`B&&pn<30){ps=^i$6[pn].^v@t#6`5p`4ps)<0)p+=ps;pn++}s.^S=x;s.^2=c;s.`n^j=j;s.`d=v;s.`s@8=k;s.`y@1=bw;s.`y^Z=bh;s.`e=ct;s.^w=hp;s.p^I=p;s.td=1`k@g{`L^9,`F$52" +"',vb);`L^9,`F$51',@g`ks.useP^I)s.doP^I(s);`Kl=`E`I,r=^R.^J.^1`5!s.^H)s.^H=l^g?l^g:l`5!s.^1)s.^1=r;`Wm('g')`5(vo&&$A)$a`Wm('d')`Gs.@G||^D){`Ko=^D?^D:s.@G`5!o)`2'';`Kp=$2'#1`g'),w=1,^F,@Y,x=`xt,h,l,i" +",oc`5^D&&o==^D){^4o@Un@d$ZBODY'){o=o`z`S?o`z`S:o`zNode`5!o)`2'';^F;@Y;x=`xt}oc=o.`j?''+o.`j:''`5(oc`4$9>=0&&oc`4\"^zoc(\")<0)||oc`4$T>=0)`2''}ta=n?o$Q:1;h@ii=h`4'?^Ph=s.`N@a^3||i<0?h:h`30,i);l=s.`N" +"`g?s.`N`g:s.ln(h);t=s.`N^K?s.`N^K`8:s.lt(h)`5t^lh||l))q+=$0=@G@D(`Hd'||`He'?@w(t):'o')+(h?$0v1`Ph)`i+(l?$0v2`Pl)`i;`ltrk=0`5s.`w@R`G!p$I$2'^H^Pw=0}^F;i=o.sourceIndex`5$1'^x')@e$1'^x^Px=1;i=1`kp&&n@" +"d)qs='&pid`P^ip,255))+(w#5p$zw`i+'&oid`P^in@t)+(x#5o$zx`i+'&ot`Pt)+(i#5oi='+i`i}`k!trk@Uqs)`2'';@h=s.vs(sed)`5trk`G@h)$h=s.mr(@o,(vt#5t`Pvt)`i+s.hav()+q+(qs?qs:s.rq(^C)),0,id,ta);qs`h;`Wm('t')`5s.p" +"_r)s.p_r()}^7(qs);^y`o(@g;`k@g`L^9,`F$51',vb`R@G=^D=s.`N`g=s.`N^K=`E^z^x=s.ppu=^n=^nv1=^nv2=^nv3`h`5$t)`E^z@G=`E^zeo=`E^z`N`g=`E^z`N^K`h`5!id@Us.tc){s.tc=1;s.flush`Z()}`2$h`Atl`0o,t,n,vo`1;s.@G=@uo" +"`R`N^K=t;s.`N`g=n;s.t(@g}`5pg){`E^zco`0o){`K@J\"_\",1,#8`2@uo)`Awd^zgs`0$P{`K@J$k1,#8`2s.t()`Awd^zdc`0$P{`K@J$k#8`2s.t()}}@2=(`E`I`X`8`4@ss@b0`Rd=^J;s.b=s.d.body`5$X`S#4`g){s.h=$X`S#4`g('HEAD')`5s." +"h)s.h=s.h[0]}s.n=navigator;s.u=s.n.userAgent;@P=s.u`4'N$U6/^P`Kapn$D`g,v$D^j,ie=v`4$i'),o=s.u`4'@L '),i`5v`4'@L@b0||o>0)apn='@L';^W$7^sMicrosoft Internet Explorer'`Risns$7^sN$U'`R^c$7^s@L'`R^d=(s.u" +"`4'Mac@b0)`5o>0)`O`qs.u`3o+6));`6ie>0){`O=`ti=v`3ie+5))`5`O>3)`O`qi)}`6@P>0)`O`qs.u`3@P+10));`l`O`qv`Rem=0`5^3#3^k){i=^e^3#3^k(256))`C(`Rem=(i^s%C4%80'?2:(i^s%U0100'?1:0))}s.sa(un`Rvl_l='`bID,vmk,p" +"pu,@E,`b`gspace,c`V,`s@6,#1`g,^H,^1,@H';^Y=^X+',^m,$O,server,#1^K,$w@5ID,purchaseID,@p,state,zip,$f,products,`N`g,`N^K';^B`Kn=1;n<51;n++)^Y+=',prop$F+',eVar$F+',hier$F;^X2=',^S,^2,`n^j,`d,`s@8,`y@1" +",`y^Z,`e,^w,pe$l1$l2$l3,p^I';^Y+=^X2;^9=^Y+',`b^L,`b^L#2`MSele@5,`MList,`MM$o,`w^NLinks,`w@C,`w@R,`N@a^3,`N^NFile^Ks,`NEx`m,`NIn`m,`N@SVa$j`N@S^Os,`N`gs,@G,eo';$t=pg$x^9)`5!ss)`Es()", w=window,l=w.s_c_il,n=navigator,u=n.userAgent,v=n.appVersion,e=v.indexOf('MSIE '),m=u.indexOf('Netscape6/'),a,i,s;if(un){un=un.toLowerCase();if(l)for(i=0;i=0&&x.split)x=(x.split(o)).join(n);else while(i>=0){x=x.substring(0,i)+n+x.substring(i+o.length);i=x.indexOf(o)}return x"); w.s_d=new Function("x","var t='`^@$#',l='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',d,n=0,b,k,w,i=x.lastIndexOf('~~');if(i>0){d=x.substring(0,i);x=x.substring(i+2);while(d){w=d;i" +"=d.indexOf('~');if(i>0){w=d.substring(0,i);d=d.substring(i+1)}else d='';b=parseInt(n/62);k=n-b*62;k=t.substring(b,b+1)+l.substring(k,k+1);x=s_r(x,k,w);n++}for(i=0;i<5;i++){w=t.substring(i,i+1);x=s_" +"r(x,w+' ',w)}}return x"); w.s_fe=new Function("c","return s_r(s_r(s_r(c,'\\\\','\\\\\\\\'),'\"','\\\\\"'),\"\\n\",\"\\\\n\")"); w.s_fa=new Function("f","var s=f.indexOf('(')+1,e=f.indexOf(')'),a='',c;while(s>=0&&s=0){s++;d=1;q='';x=0;f=c.substring(s);a=s_fa(f);e=o=c.indexOf('{',s);e++;while(d>0){h=c.substring(e,e+1);if(q){i" +"f(h==q&&!x)q='';if(h=='\\\\')x=x?0:1;else x=0}else{if(h=='\"'||h==\"'\")q=h;if(h=='{')d++;if(h=='}')d--}if(d>0)e++}c=c.substring(0,s)+'new Function('+(a?a+',':'')+'\"'+s_fe(c.substring(o+1,e))+'\")" +"'+c.substring(e+1);s=c.indexOf('=function(')}return c;"); c=s_d(c);if(e>0){a=parseInt(i=v.substring(e+5));if(a>3)a=parseFloat(i)}else if(m>0)a=parseFloat(u.substring(m+10));else a=parseFloat(v);if(a>=5&&v.indexOf('Opera')<0&&u.indexOf('Opera')<0){w.s_c=new Function("un","pg","ss","var s=this;"+c);return new s_c(un,pg,ss)}else s=new Function("un","pg","ss","var s=new Object;"+s_ft(c)+";return s");return s(un,pg,ss)} _application/x-javascript 789:_+http://www.newyorker.com/js/eventmanager.jsO[bplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_+http://www.newyorker.com/js/eventmanager.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A|]3456AWNS.keysZNS.objects789:;<=>?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTEtagTVary_IBM_HTTP_ServerUbytesZkeep-alive_application/x-javascript_Wed, 07 Oct 2009 00:42:05 GMT_Fri, 09 Mar 2007 21:56:57 GMTT1015Tgzip_"1a375f9-ab5-80979c40"_Accept-Encoding*+ab_NSMutableDictionaryac/\NSDictionary *+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~(.17@IKRZegrtvxz|~ #)4Oo $2DG]n_O // written by Dean Edwards, 2005 // with input from Tino Zijdel - crisp@xs4all.nl // http://dean.edwards.name/weblog/2005/10/add-event/ function addEvent(element, type, handler) { if (element.addEventListener) element.addEventListener(type, handler, false); else { if (!handler.$$guid) handler.$$guid = addEvent.guid++; if (!element.events) element.events = {}; var handlers = element.events[type]; if (!handlers) { handlers = element.events[type] = {}; if (element['on' + type]) handlers[0] = element['on' + type]; element['on' + type] = handleEvent; } handlers[handler.$$guid] = handler; } } addEvent.guid = 1; function removeEvent(element, type, handler) { if (element.removeEventListener) element.removeEventListener(type, handler, false); else if (element.events && element.events[type] && handler.$$guid) delete element.events[type][handler.$$guid]; } function handleEvent(event) { event = event || fixEvent(window.event); var returnValue = true; var handlers = this.events[event.type]; for (var i in handlers) { if (!Object.prototype[i]) { this.$$handler = handlers[i]; if (this.$$handler(event) === false) returnValue = false; } } if (this.$$handler) this.$$handler = null; return returnValue; } function fixEvent(event) { event.preventDefault = fixEvent.preventDefault; event.stopPropagation = fixEvent.stopPropagation; return event; } fixEvent.preventDefault = function() { this.returnValue = false; } fixEvent.stopPropagation = function() { this.cancelBubble = true; } // This little snippet fixes the problem that the onload attribute on the body-element will overwrite // previous attached events on the window object for the onload event if (!window.addEventListener) { document.onreadystatechange = function() { if (window.onload && window.onload != handleEvent) { addEvent(window, 'load', window.onload); window.onload = handleEvent; } } } // Should be moved to its own js file. function ScriptLoader() { this.scripts = new Array(); } ScriptLoader.prototype.init = function(vals) { this.scripts = vals; } // Loads scripts ScriptLoader.prototype.load = function() { for (var i=0; i?_*http://www.newyorker.com/js/ads/adLayer.jsOZbplist00jkX$versionX$objectsY$archiverT$top "()012LMNOPQRSTUVWXYZ[\]^_`deU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_*http://www.newyorker.com/js/ads/adLayer.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A|^IV3456AWNS.keysZNS.objects789:;<=>?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTEtagTVary_IBM_HTTP_ServerUbytesZkeep-alive_application/x-javascript_Wed, 07 Oct 2009 00:42:06 GMT_Fri, 09 Mar 2007 21:49:52 GMTT1312Tgzip_"17b769c-e5e-6742a000"_Accept-Encoding*+ab_NSMutableDictionaryac/\NSDictionary^*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~'-06?HJQYdfqsuwy{} "(3Nn #1CF\n^O^function AdLayer(path, name, options) { this.layerPath = path; this.layerName = name; this.options = options; this.flash; this.hiddenFlash = new Array(); this.create(); this.timer; } // Creates the layer AdLayer.prototype.create = function() { var layerDiv = document.createElement("div"); layerDiv.id = this.layerName; var borderDiv = document.createElement("div"); borderDiv.id = "arrivaltopborder"; layerDiv.appendChild(borderDiv); var closeDiv = document.createElement("div"); closeDiv.id = "closelayer"; layerDiv.appendChild(closeDiv); var iframeNode = document.createElement("iframe"); iframeNode.src = this.layerPath; iframeNode.id = this.layerName + "_frame"; iframeNode.setAttribute("scrolling", "no"); iframeNode.setAttribute("frameBorder",0); layerDiv.appendChild(iframeNode); document.body.appendChild(layerDiv); closeDiv.innerHTML = "close
"; // Safari fix to hide flash because it can't support layers over Flash. var agt=navigator.userAgent.toLowerCase(); if(agt.indexOf("safari")!=-1 || (typeof document.childNodes!="undefined" && typeof document.all=="undefined" && typeof navigator.taintEnabled=="undefined")){ this.timer = setInterval(AdLayer_hideFlash, 2000); } } AdLayer.prototype.closeAdLayer = function() { layerDiv = document.getElementById(this.layerName); layerDiv.style.display = 'none'; for (var i=0; i topY)) && ((elemLeftX < rightX) && (elemRightX > leftX))); } AdLayer.prototype.getDiv = function(flashDiv) { // Climb higher till we get a div. var i = true; parentDiv = flashDiv.parentNode; while (i) { if (parentDiv.tagName == "DIV") { return parentDiv; } if (parentDiv == null || parentDiv == undefined) { i = false; } parentDiv = parentDiv.parentNode; } } AdLayer.prototype.hideFlash = function() { this.hiddenFlash = new Array(); this.flash = document.getElementsByTagName("EMBED"); for (var i=0; i?@ BCDEFGHIJKVServer]Accept-RangesZConnection\Content-TypeTDate]Last-Modified^Content-Length_Content-EncodingTEtagTVary_IBM_HTTP_ServerUbytesZkeep-alive_application/x-javascript_Sun, 01 Nov 2009 22:01:56 GMT_Mon, 09 Feb 2009 16:45:37 GMTT1585Tgzip_"11548c-ece-199e0e40"_Accept-Encoding*+ab_NSMutableDictionaryac/\NSDictionary*+fg_NSHTTPURLResponsehi/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverlm_WebResourceResponse#-27Z`{~(.17@IKRZegrtvxz|~ #)4Oo #1CF\n^O // dart global code // Defines a dart object and global random number and tile counter. dart = new Object(); dart["tile_num"] = undefined; dart["ord"] = Math.random()*10000000000000000; if (location.protocol != "https:") { dart["url"] = "http://ad.doubleclick.net/adj/"; } else { dart["url"] = "https://ad.doubleclick.net/adj/"; } // dart ad reloading code. // Grabs the DART code from the hidden iframe and places that in the ad's div. function dartSwap(placement) { var frameRef = document.getElementById('dartFrame_'+placement); var htmlRef = (frameRef.contentDocument || frameRef.contentWindow.document).getElementById('adHolder').innerHTML; // Destroy the content in the iframe. This prevents double ads running (i hope). (frameRef.contentDocument || frameRef.contentWindow.document).location.replace("/nolayout/blankadcontent"); // Now strip out the doubleclick call that ends up in the iframe's innerHTML. This avoids double doubleclick hits. htmlRef = htmlRef.toString(); var regExp = new RegExp(dart[placement].dartCall,'i'); var frameHTML = new String(htmlRef); frameHTML = frameHTML.replace(regExp, ''); frameHTML = frameHTML.replace(/

Dept. of Hoopla

Buried Treasure

by Lizzie Widdicombe July 27, 2009

The other night, as U.S. Marines were preparing to launch their “Strike of the Sword” offensive against the Taliban in southern Afghanistan, a group of New Yorkers got together at the Metropolitan Museum for a benefit to raise money for the Rebuilding Afghanistan Foundation, and to view a collection of ancient Afghan gold and jewels called the Bactrian Hoard. There are many remarkable things about these jewels, but most impressive is the story of how they survived after they were discovered by a Russian archeologist named Viktor Sarianidi, in 1978. Sarianidi was poking around in northern Afghanistan, looking for artifacts from the Bronze Age, when he stumbled onto six graves—five women and one man, probably a king—from 100 A.D., when the area was inhabited by horseback-riding nomads called Bactrians. Not much is known about the Bactrians, but Herodotus described the burial practices of an earlier generation of nomads in the region:



Here the corpse is placed on a couch, round which, at different distances, daggers are fixed. . . . In some other part of this trench they bury one of the deceased’s concubines, whom they previously strangle, together with the baker, the cook, the groom, his most confidential servant, his horses, the choicest of his effects, and, finally, some golden goblets.

There were more than twenty thousand objects in the graves—bangles, pendants, dagger sheaths. Sarianidi took his findings to the National Museum in Kabul, but the next year the Soviet invasion of Afghanistan interrupted his work. It was the beginning of a bad time for Afghan archeology: in 1993, at the height of the Afghan civil war, the National Museum was used as a military base and was hit by a rocket; when the Taliban came to power, they destroyed thousands of artifacts, including a set of the monumental Bamiyan Buddhas. Everyone assumed that the Bactrian Hoard was lost forever. But it turned out that in 1988 some National Museum workers had secured the hoard in a vault beneath the Presidential palace. For fifteen years, these workers, who came to be called “the Keyholders,” kept the hiding place secret. In 2004, after the U.S. invasion, the vault was opened. The jewels were intact. They have been circling the globe ever since, on a never-ending museum tour. (Next stop: Ottawa.)

Elisabetta Valtz-Fino, the exhibit’s curator, led a tour of the treasures, which included tiger, dolphin, and ram designs (the nomads loved animals). There was a jeweller in the crowd—Tim McClelland, of McTeigue & McClelland jewellers, which helped sponsor the event—and he studied the back of a collapsible gold crown. “This is the Hubble space telescope of jewelry,” he said. Adrianne Dicker-Kadzinski, a former Morgan Stanley investment banker, said she had done a stint in Afghanistan, in 2004, with the U.S. Army Reserve. “Kabul itself was very sad,” she said. “The whole country is like a moonscape—brown, brown, brown.”

Afterward, there was a lamb dinner at La Grenouille (“I feel very Afghan eating this,” the writer Ann Marlowe said) and a raffle: all the guests received little keys; one of them opened a treasure chest containing a special gold-and-lapis bracelet made by McClelland. (The winner was a J. P. Morgan asset manager named Sophie Bosch de Hood.)

As excited as people were to have seen the Bactrian jewels, a sadness wafted over the evening: because of security concerns, the hoard can’t be displayed in Afghanistan. “I’m so mad at Dick Cheney,” said Caroline Firestone, an eighty-year-old philanthropist, who has known the former Vice-President for a long time. “I once gave him my house in Wyoming so he could stay there at Christmas. And he never let me come and talk to him about Afghanistan.” She said she wished Afghanistan hadn’t been “so thoroughly abandoned when we decided to go into Iraq.”

Husain Haqqani, the Pakistani Ambassador to the U.S., made remarks at the dinner, and he was followed by Brent Scowcroft. Haqqani brought up a scene in the movie “Charlie Wilson’s War” where a congressman says, about a school in Afghanistan, “Nobody gives a shit”; and he mentioned the fact that the U.S. supported the mujahideen after the Soviet invasion.

Scowcroft said this was unfair. “We did try to help Afghanistan,” he said. “It was too difficult for us. We were naïve. The Taliban at least promised honest government. Anyway, we lost that.

“It will be a long and difficult struggle,” he continued, standing in front of the treasure chest. “And I hope the patience of this country is up for it. We’ve made some mistakes. We’ve been shortsighted. But I really think we’re starting to get it right.” 

To get more of The New Yorker's signature mix of politics, culture and the arts: Subscribe now
Ytext/htmlUUTF-8 [about:blank_dartFrame_sz300x250O'Ytext/htmlUUTF-8 _+HTTP://rmd.atdmt.com/tl/DocumentDotWrite.jsObplist00Z[X$versionX$objectsY$archiverT$top"()012DEFGHIJKLMNOPTUU$null  !R$6S$10R$2R$7R$3S$11R$8V$classR$4R$9R$0R$5R$1#$%&[NS.relativeWNS.base_+http://rmd.atdmt.com/tl/DocumentDotWrite.js*+,-Z$classnameX$classesUNSURL./UNSURLXNSObject#A<U3456=WNS.keysZNS.objects789:;< >?@ABCUAllowWExpiresZConnectionTDate^Content-Length\Content-TypeSGET_Sat, 07 Nov 2009 16:38:49 GMTZkeep-alive_Sun, 01 Nov 2009 22:02:12 GMTR50_application/x-javascript*+QR_NSMutableDictionaryQS/\NSDictionary2*+VW_NSHTTPURLResponseXY/_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiver\]_WebResourceResponse#-27RXsvz}  &)/8ACJR]_fhjlnpry{},1GKXZ_sw^O2function DocumentDotWrite(s){document.write(s);} _application/x-javascript _phttp://core.insightexpressai.com/adServer/adServerESI.aspx?bannerID=155024&siteID=171741239&creativeID=135421093Obplist00noX$versionX$objectsY$archiverT$top#$%,-./MNOPQRSTUVWXYZ[\]^_`abcdeiU$null R$6R$2R$7R$3R$8V$classR$4R$9R$0R$5R$1" !"#[NS.relativeWNS.base_phttp://core.insightexpressai.com/adServer/adServerESI.aspx?bannerID=155024&siteID=171741239&creativeID=135421093&'()Z$classnameX$classesUNSURL*+UNSURLXNSObject#A? ABCDEFGHIJKL VServerZConnectionTVary\Content-TypeWExpires]Cache-ControlZSet-Cookie\X-Powered-BySP3pTDateVPragma^Content-Length_Microsoft-IIS/6.0Zkeep-alive_Accept-Encoding_text/html; charset=utf-8_Sun, 01 Nov 2009 22:02:18 GMTXno-store_*IXAIBanners1809=155024; domain=.insightexpressai.com; expires=Sat, 01-Nov-2014 12:00:00 GMT; path=/, IXAIBannerCounter155024=1; domain=.insightexpressai.com; expires=Sat, 01-Nov-2014 12:00:00 GMT; path=/, IXAIFirstHit1809=11%2f1%2f2009+4%3a38%3a43+PM; domain=.insightexpressai.com; expires=Sat, 01-Nov-2014 12:00:00 GMT; path=/, IXAILastHit1809=11%2f1%2f2009+4%3a38%3a43+PM; domain=.insightexpressai.com; expires=Sat, 01-Nov-2014 12:00:00 GMT; path=/, IXAICampaignCounter1809=1; domain=.insightexpressai.com; expires=Sat, 01-Nov-2014 12:00:00 GMT; path=/WASP.NET_DCP="OTI DSP COR CUR ADMi DEVi TAI PSA PSD IVD CONi TELi OUR BUS STA"_Sun, 01 Nov 2009 22:02:18 GMTXno-cacheR51&'fg_NSMutableDictionaryfh+\NSDictionary&'jk_NSHTTPURLResponselm+_NSHTTPURLResponse]NSURLResponse_NSKeyedArchiverpq_WebResourceResponse#-27]cz}GLW`fiox%0=AFM\p{NnwzrO3 Ytext/htmlUutf-8 _http://view.atdmt.com/ULA/iview/171741239/direct/01/6645439?click=http://ad.doubleclick.net/click%3Bh=v8/38d8/3/0/%2a/o%3B219346224%3B0-0%3B1%3B15469320%3B4307-300/250%3B34029711/34047589/1%3B%3B%7Eaopt%3D2/1/6a/0%3B%7Esscs%3D%3f_ -->O"Sony_300_600_none_ReaderTouch_swf Ytext/htmlUUTF-8!3Ien},"F"O"X"&.H.Q.Z.2]]]$]VaAdAAAF [v4C{CCCHL`{y-]x    %9,O,j,s,0KK K)KVOYYY[^aUaaaafsssuzzzz{E`i}Q5g[gvgglPVhqȘʳ:ύώCCDDDDDD3D]DgDmDrDuD~DHRHHHI P:PpPzPPQsQtMtWt]