bplist00_WebMainResource_WebSubresources ^WebResourceURL_WebResourceTextEncodingName_WebResourceMIMEType_WebResourceData_WebResourceFrameName_'http://en.wikipedia.org/wiki/DisklavierUUTF-8Ytext/htmlOf Disklavier - Wikipedia, the free encyclopedia
Find out more about navigating Wikipedia and finding information.

Disklavier

From Wikipedia, the free encyclopedia

Jump to: navigation, search

A Disklavier (pronounced as IPA[ˈdɪskləˌvi:ə]) is the brand name for a group of piano-related products made by the Yamaha Corporation. It was introduced in the United States in 1987.

The Disklavier is essentially a player piano that uses electromechanical solenoids and optical sensors connected to LEDs that allow it to play notes and use the pedals independent of any human operator. It can store data, such as as a performance played on it by a human pianist, and replay it accurately. Disklaviers also have inputs for data from MIDI and from several storage devices including floppy disks, CD-ROM, serial cables, and USB.

[Image of a Disklavier Grand]

Disklaviers come in upright, GranTouch™, baby grand, and grand piano styles (including the nine-foot concert grand), along with a professional line of Disklaviers called the Disklavier Pro. Yamaha claims that the Disklavier Pro reproduces key and pedal strokes with greater precision than does the standard line of the instrument. It is the official instrument of the Minnesota International Piano-e-Competition, now in its 6th year. The next competition is scheduled for the Summer of 2009.

Contents

[hide]

[edit] Mark II, Mark IIXG, Mark III

Since its inception, Yamaha Disklavier has been under constant development. Major features added to the instrument line have included the ability to record and play standard midi files from and to a floppy disc, the XG™ Tonebank, the addition of synchronous audio tracks (combined with analogue midi) via CD Rom (for playback), the SmartKey™ system of learning and entertainment for beginners, Karaoke functions, and various multi-tracking recording options. Additionally, from the inception of III, Disklaviers have had, as a standard feature, the ability to play silently, using headphones to hear sampled notes and pedaling, at which time the hammers never strike the strings.

[edit] Pro

In 1999, Yamaha introduced the first "Diskalvier Pro" to the American market. The "II Pro" was its first incarnation, marked by a decidedly more accurate playback over anything preceding it. The Pro utilized both an "Enhanced" and "XP" mode - the latter utilizing special "XP data" which subdivided the standard commands associated with traditional midi. Thus, 127 degrees of midi velocity were converted to 1015 such degrees. Additionally, pedal data was vastly increased to measurements of 256 increments of measurement allowing for fine half and quarter pedaling by the artist. This enhanced detail of servo-controlled measurement gave the Disklavier Pro playback a much-greater "human" sense of musical reproduction.

[edit] Mark IV

The current Mark IV series, introduced in 2004, of the Disklavier and Disklavier Pro has wireless networking capability which enables the user to control the piano via either a PDA-style WiFi-connected remote or a tablet-shaped touch-screen TFT-color remote. The Mark IV series also features an 80 gigabyte hard drive and a slim console, known as the Media Center, located under the left side of the keyboard. Users may connect midi devices to the Disklavier, utilizing the Disklavier as a midi controller or having the Disklavier controlled by midi data sent from an outside source.

In the most effective guise of technological demonstration, a user may also connect a video camera to the Disklavier IV and without any additional equipment utilize v-sync capabilities made possible by on-board SMPTE time code. With it a player may be recorded visually in perfect sync with all key and pedal strokes recorded during a performance. In general, users of the IV system benefit from the use of special "Hi-Def" midi files which make use of over 1000 gradations of touch measurements, even exceeding the range of human touch limitations, under certain conditions.

[edit] Specialized Use

In 2006, Matthew Teeter and Chris Dobrian, researchers at the University of California, Irvine, developed the first third-party Disklavier software controller. The software runs on Windows, Mac, or Linux, and replicates the functionality provided by the PDA/Tablet PC remotes. The software and its source code is released for free at http://music.arts.uci.edu/dobrian/disklavier/. In November of 2007, Kevin Goroway used that example code to create DKVBrowser which is an open source project hosted at http://sourceforge.net/projects/dkvbrowser. It is also multiplatform, and provides features that are not available on the proprietary interfaces provided by Yamaha, including wildcard searching.

Disklavier IV and IV Pro are under constant development, and the software is entirely updatable, thanks to the use of an on-board Linux computer which the user may update with firmware provided by Yamaha.

Disklavier remains the most advanced self-regulating system of piano reproduction in the world and is, hence, sought for use in modern composition.

[edit] Education

Yamaha Disklavier IV has naturally found its way into music teaching studios across the United States and, to a lesser extent, abroad. Experimentation and development is now underway on a new, revolutionary system of teaching called "Remote Lesson" which allows the literal connection of two or more Disklaviers via hi-speed Internet connections, permitting intimate collaboration between two or more pianists from and to any points on the globe where the technology exists. Additionally, chatware - visual and audible may be added and synchronized to afford total communication between or among the individuals participating in the connection. Disklaviers have also been used, frequently, as a feedback tool for teachers and students wishing to illustrate strengths and weaknesses in a performance.

Since the notes played are easily edited, Disklavier is also being utilized in recording studios for economical playback, negating the need for numerous takes per recording track.

[edit] External links

Personal tools
Languages
P"&*.37;@DI_WebResourceResponse_7http://en.wikipedia.org/skins-1.5/common/shared.css?179Obplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver( &,-345WXYZ[\]^_`abcdefghijklmnopqrswxU$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1'& '()$+WNS.base[NS.relative_7http://en.wikipedia.org/skins-1.5/common/shared.css?179./01X$classesZ$classname12UNSURLXNSObject#A' v - 6789HWNS.keysZNS.objects%:;<=>?@ABCDEFG IJKLMNOPQRSTUV !"#$WX-Cache]Cache-Control\Content-TypeVServer^Content-LengthTDateTEtagZConnectionSAgeWExpiresSVia]Accept-Ranges^X-Cache-Lookup]Last-Modified_8HIT from sq23.wikimedia.org, HIT from sq34.wikimedia.org_max-age=2592000Xtext/cssVApacheT5390_Wed, 01 Oct 2008 15:25:41 GMT_"150e-457ee04ba6500"Zkeep-aliveR17_Fri, 31 Oct 2008 15:25:41 GMT_`1.0 sq23.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq34.wikimedia.org:80 (squid/2.6.STABLE21)Ubytes_@HIT from sq23.wikimedia.org:3128, HIT from sq34.wikimedia.org:80_Sun, 28 Sep 2008 05:28:20 GMT./tuuv2_NSMutableDictionary\NSDictionary./yzz{2_NSHTTPURLResponse]NSURLResponse)27:PRdPU^ilr{"16;FJRVds%(H3@CHL`|nXtext/cssO/** * CSS in this file is used by *all* skins (that have any CSS at all). Be * careful what you put in here, since what looks good in one skin may not in * another, but don't ignore the poor non-Monobook users either. */ .mw-plusminus-null { color: #aaa; } .texvc { direction: ltr; unicode-bidi: embed; } img.tex { vertical-align: middle; } span.texhtml { font-family: serif; } /* add a bit of margin space between the preview and the toolbar */ /* this replaces the ugly


we used to insert into the page source */ #wikiPreview.ontop { margin-bottom: 1em; } /* Stop floats from intruding into edit area in previews */ #toolbar, #wpTextbox1 { clear: both; } div#mw-js-message { margin: 1em 5%; padding: 0.5em 2.5%; border: solid 1px #ddd; background-color: #fcfcfc; } /* Edit section links */ .editsection { float: right; margin-left: 5px; } /** * File histories */ table.filehistory { border:1px solid #ccc; border-collapse:collapse; } table.filehistory th, table.filehistory td { padding: 0 0.2em 0 0.2em; vertical-align:top; border:1px solid #ccc; } table.filehistory th { text-align: left; } table.filehistory td.mw-imagepage-filesize, table.filehistory th.mw-imagepage-filesize { white-space:nowrap; } table.filehistory td.filehistory-selected { font-weight: bold; } /* * rev_deleted stuff */ li span.deleted, span.history-deleted { text-decoration: line-through; color: #888; font-style: italic; } /** * Forms */ body.ltr td.mw-label { text-align: right; } body.ltr td.mw-input { text-align: left; } body.ltr td.mw-submit { text-align: left; } body.rtl td.mw-label { text-align: left; } body.rtl td.mw-input { text-align: right; } body.rtl td.mw-submit { text-align: right; } td.mw-label { vertical-align: top; } td.mw-submit { white-space: nowrap; } /** * Image captions */ body.rtl .thumbcaption { text-align:right; } body.rtl .magnify { float:left; } body.ltr .thumbcaption { text-align:left; } body.ltr .magnify { float:right; } /** * Hidden categories */ .mw-hidden-cats-hidden { display: none; } .catlinks-allhidden { display: none; } /* Convenience links to edit block, delete and protect reasons */ p.mw-ipb-conveniencelinks, p.mw-protect-editreasons, p.mw-filedelete-editreasons, p.mw-delete-editreasons { font-size: 90%; float: right; } /* Search results */ div.searchresult { font-size: 95%; width:38em; } .mw-search-results li { padding-bottom: 1em; } .mw-search-result-data { color: green; font-size: 97%; } div#mw-search-interwiki { float: right; width: 18em; border-style: solid; border-color: #AAAAAA; border-width: 1px; margin-top: 2ex; } div#mw-search-interwiki li { font-size: 95%; } .mw-search-interwiki-more { float: right; font-size: 90%; } span.searchalttitle { font-size: 95%; } div.searchdidyoumean { font-size: 127%; padding-bottom:1ex; padding-top:1ex; } /* * UserRights stuff */ .mw-userrights-disabled { color: #888; } table.mw-userrights-groups * td,table.mw-userrights-groups * th { padding-right: 1.5em; } /* * OpenSearch ajax suggestions */ .os-suggest { overflow: auto; overflow-x: hidden; position: absolute; top: 0px; left: 0px; width: 0px; background-color: white; background-color: Window; border-style: solid; border-color: #AAAAAA; border-width: 1px; z-index:99; visibility:hidden; font-size:95%; } table.os-suggest-results { font-size: 95%; cursor: pointer; border: 0; border-collapse: collapse; width: 100%; } td.os-suggest-result, td.os-suggest-result-hl { white-space: nowrap; background-color: white; background-color: Window; color: black; color: WindowText; padding: 2px; } td.os-suggest-result-hl, td.os-suggest-result-hl-webkit { background-color: #4C59A6; color: white; } td.os-suggest-result-hl { /* System colors are misimplemented in Safari 3.0 and earlier, making highlighted text illegible... */ background-color: Highlight; color: HighlightText; } .os-suggest-toggle { position: relative; left: 1ex; font-size: 65%; } .os-suggest-toggle-def { position: absolute; top: 0px; left: 0px; font-size: 65%; visibility: hidden; } /* Page history styling */ /* the auto-generated edit comments */ .autocomment { color: gray; } #pagehistory .history-user { margin-left: 0.4em; margin-right: 0.2em; } #pagehistory span.minor { font-weight: bold; } #pagehistory li { border: 1px solid white; } #pagehistory li.selected { background-color: #f9f9f9; border: 1px dashed #aaa; } /* * Special:ListGroupRights styling * Special:Statistics styling */ table.mw-listgrouprights-table, table.mw-statistics-table { border: 1px solid #ccc; border-collapse: collapse; } table.mw-listgrouprights-table tr { vertical-align: top; } table.mw-listgrouprights-table td, table.mw-listgrouprights-table th, table.mw-statistics-table td, table.mw-statistics-table th { padding: 0.5em 0.2em 0.5em 0.2em; border: 1px solid #ccc; } td.mw-statistics-numbers { text-align: right; } /* Special:SpecialPages styling */ h4.mw-specialpagesgroup { background-color: #dcdcdc; padding: 2px; margin: .3em 0em 0em 0em; } .mw-specialpagerestricted { font-weight: bold; } #shared-image-dup, #shared-image-conflict { font-style: italic; } /* Special:EmailUser styling */ table.mw-emailuser-table { width: 98%; } td#mw-emailuser-sender, td#mw-emailuser-recipient { font-weight: bold; } _?@ABCDEFG IJKLMNOPQRSTUV !"#$WX-Cache]Cache-Control\Content-TypeVServer^Content-LengthTDateTEtagZConnectionSAgeWExpiresSVia]Accept-Ranges^X-Cache-Lookup]Last-Modified_9MISS from sq20.wikimedia.org, HIT from sq17.wikimedia.org_max-age=2592000Xtext/cssVApacheT4852_Wed, 01 Oct 2008 15:25:10 GMT_"12f4-486d4436"Zkeep-aliveR20_Fri, 31 Oct 2008 15:25:10 GMT_`1.0 sq20.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)Ubytes_@HIT from sq20.wikimedia.org:3128, HIT from sq17.wikimedia.org:80_Thu, 03 Jul 2008 21:27:18 GMT./tuuv2_NSMutableDictionary\NSDictionary./yzz{2_NSHTTPURLResponse]NSURLResponse)27:PRdUZcnqw '6;@KOW[ix &)I4ADIMa|oO/* ** MediaWiki Print style sheet for CSS2-capable browsers. ** Copyright Gabriel Wicke, http://www.aulinx.de/ ** ** Derived from the plone (http://plone.org/) styles ** Copyright Alexander Limi */ /* Thanks to A List Apart (http://alistapart.com/) for useful extras */ a.stub, a.new{ color:#ba0000; text-decoration:none; } #toc { /*border:1px solid #2f6fab;*/ border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; } .tocindent { margin-left: 2em; } .tocline { margin-bottom: 0px; } /* images */ div.floatright { float: right; clear: right; margin: 0; position:relative; border: 0.5em solid White; border-width: 0.5em 0 0.8em 1.4em; } div.floatright p { font-style: italic;} div.floatleft { float: left; margin: 0.3em 0.5em 0.5em 0; position:relative; border: 0.5em solid White; border-width: 0.5em 1.4em 0.8em 0; } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: 0.5em; border-style: solid; border-color: White; width: auto; overflow: hidden; } div.thumb div { border:1px solid #cccccc; padding: 3px !important; background-color:#f9f9f9; font-size: 94%; text-align: center; } div.thumb div a img { border:1px solid #cccccc; } div.thumb div div.thumbcaption { border: none; padding: 0.3em 0 0.1em 0; } div.magnify { display: none; } div.tright { float: right; clear: right; border-width: 0.5em 0 0.8em 1.4em; } div.tleft { float: left; margin-right:0.5em; border-width: 0.5em 1.4em 0.8em 0; } img.thumbborder { border: 1px solid #dddddd; } /* table standards */ table.rimage { float:right; width:1pt; position:relative; margin-left:1em; margin-bottom:1em; text-align:center; } body { background: White; /*font-size: 11pt !important;*/ color: Black; margin: 0; padding: 0; } .noprint, div#jump-to-nav, div.top, div#column-one, #colophon, .editsection, .toctoggle, .tochidden, div#f-poweredbyico, div#f-copyrightico, li#viewcount, li#about, li#disclaimer, li#privacy { /* Hides all the elements irrelevant for printing */ display: none; } ul { list-style-type: square; } #content { background: none; border: none ! important; padding: 0 ! important; margin: 0 ! important; } #footer { background : white; color : black; border-top: 1px solid black; } h1, h2, h3, h4, h5, h6 { font-weight: bold; } p, .documentDescription { margin: 1em 0 ! important; line-height: 1.2em; } .tocindent p { margin: 0 0 0 0 ! important; } pre { border: 1pt dashed black; white-space: pre; font-size: 8pt; overflow: auto; padding: 1em 0; background : white; color : black; } table.listing, table.listing td { border: 1pt solid black; border-collapse: collapse; } a { color: Black !important; background: none !important; padding: 0 !important; } a:link, a:visited { color: #520; background: transparent; text-decoration: underline; } #content a.external.text:after, #content a.external.autonumber:after { /* Expand URLs for printing */ content: " (" attr(href) ") "; } #globalWrapper { width: 100% !important; min-width: 0 !important; } #content { background : white; color : black; } #column-content { margin: 0 !important; } #column-content #content { padding: 1em; margin: 0 !important; } /* MSIE/Win doesn't understand 'inherit' */ a, a.external, a.new, a.stub { color: black ! important; text-decoration: none ! important; } /* Continue ... */ a, a.external, a.new, a.stub { color: inherit ! important; text-decoration: inherit ! important; } img { border: none; } img.tex { vertical-align: middle; } span.texhtml { font-family: serif; } #siteNotice { display: none; } table.gallery { border: 1px solid #cccccc; margin: 2px; padding: 2px; background-color:#ffffff; } table.gallery tr { vertical-align:top; } div.gallerybox { border: 1px solid #cccccc; margin: 2px; background-color:#f9f9f9; width: 150px; } div.gallerybox div.thumb { text-align: center; border: 1px solid #cccccc; margin: 2px; } div.gallerytext { font-size: 94%; padding: 2px 4px; } /* ** Diff rendering */ table.diff { background:white; } td.diff-otitle { background:#ffffff; } td.diff-ntitle { background:#ffffff; } td.diff-addedline { background:#ccffcc; font-size: smaller; border: solid 2px black; } td.diff-deletedline { background:#ffffaa; font-size: smaller; border: dotted 2px black; } td.diff-context { background:#eeeeee; font-size: smaller; } .diffchange { color: silver; font-weight: bold; text-decoration: underline; } _7http://en.wikipedia.org/skins-1.5/monobook/main.css?179Obplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver( &,-345WXYZ[\]^_`abcdefghijklmnopqrswxU$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1'& '()$+WNS.base[NS.relative_7http://en.wikipedia.org/skins-1.5/monobook/main.css?179./01X$classesZ$classname12UNSURLXNSObject#A' ,> 6789HWNS.keysZNS.objects%:;<=>?@ABCDEFG IJKLMNOPQRSTUV !"#$WX-Cache]Cache-Control\Content-TypeVServer^Content-LengthTDateTEtagZConnectionSAgeWExpiresSVia]Accept-Ranges^X-Cache-Lookup]Last-Modified_9MISS from sq24.wikimedia.org, HIT from sq17.wikimedia.org_max-age=2592000Xtext/cssVApacheU27398_Wed, 01 Oct 2008 15:25:41 GMT_"6b06-4574c237761c0"Zkeep-aliveR16_Fri, 31 Oct 2008 15:25:41 GMT_`1.0 sq24.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)Ubytes_@HIT from sq24.wikimedia.org:3128, HIT from sq17.wikimedia.org:80_Sat, 20 Sep 2008 04:20:31 GMT./tuuv2_NSMutableDictionary\NSDictionaryk./yzz{2_NSHTTPURLResponse]NSURLResponse)27:PRdPU^ilr{"16;FJRVds'*J5BEJNb|pOk/* ** MediaWiki 'monobook' style sheet for CSS2-capable browsers. ** Copyright Gabriel Wicke - http://wikidev.net/ ** License: GPL (http://www.gnu.org/copyleft/gpl.html) ** ** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John ** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher, ** Michael Zeltner and Geir Bækholt) ** All you guys rock :) */ #column-content { width: 100%; float: right; margin: 0 0 .6em -12.2em; padding: 0; } #content { margin: 2.8em 0 0 12.2em; padding: 0 1em 1em 1em; position: relative; z-index: 2; } #column-one { padding-top: 160px; } #content { background: white; color: black; border: 1px solid #aaa; border-right: none; line-height: 1.5em; } /* the left column width is specified in class .portlet */ /* Font size: ** We take advantage of keyword scaling- browsers won't go below 9px ** More at http://www.w3.org/2003/07/30-font-size ** http://style.cleverchimp.com/font_size_intervals/altintervals.html */ body { font: x-small sans-serif; background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat; color: black; margin: 0; padding: 0; } /* scale back up to a sane default */ #globalWrapper { font-size: 127%; width: 100%; margin: 0; padding: 0; } .visualClear { clear: both; } /* general styles */ table { font-size: 100%; color: black; /* we don't want the bottom borders of

s to be visible through floated tables */ background-color: white; } fieldset table { /* but keep table layouts in forms clean... */ background: none; } a { text-decoration: none; color: #002bb8; background: none; } a:visited { color: #5a3696; } a:active { color: #faa700; } a:hover { text-decoration: underline; } a.stub { color: #772233; } a.new, #p-personal a.new { color: #ba0000; } a.new:visited, #p-personal a.new:visited { color: #a55858; } img { border: none; vertical-align: middle; } p { margin: .4em 0 .5em 0; line-height: 1.5em; } p img { margin: 0; } hr { height: 1px; color: #aaa; background-color: #aaa; border: 0; margin: .2em 0 .2em 0; } h1, h2, h3, h4, h5, h6 { color: black; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } h1 { font-size: 188%; } h1 .editsection { font-size: 53%; } h2 { font-size: 150%; } h2 .editsection { font-size: 67%; } h3, h4, h5, h6 { border-bottom: none; font-weight: bold; } h3 { font-size: 132%; } h3 .editsection { font-size: 76%; font-weight: normal; } h4 { font-size: 116%; } h4 .editsection { font-size: 86%; font-weight: normal; } h5 { font-size: 100%; } h5 .editsection { font-weight: normal; } h6 { font-size: 80%; } h6 .editsection { font-size: 125%; font-weight: normal; } ul { line-height: 1.5em; list-style-type: square; margin: .3em 0 0 1.5em; padding: 0; list-style-image: url(bullet.gif); } ol { line-height: 1.5em; margin: .3em 0 0 3.2em; padding: 0; list-style-image: none; } li { margin-bottom: .1em; } dt { font-weight: bold; margin-bottom: .1em; } dl { margin-top: .2em; margin-bottom: .5em; } dd { line-height: 1.5em; margin-left: 2em; margin-bottom: .1em; } fieldset { border: 1px solid #2f6fab; margin: 1em 0 1em 0; padding: 0 1em 1em; line-height: 1.5em; } fieldset.nested { margin: 0 0 0.5em 0; padding: 0 0.5em 0.5em; } legend { padding: .5em; font-size: 95%; } form { border: none; margin: 0; } textarea { width: 100%; padding: .1em; } input.historysubmit { padding: 0 .3em .3em .3em !important; font-size: 94%; cursor: pointer; height: 1.7em !important; margin-left: 1.6em; } select { vertical-align: top; } abbr, acronym, .explain { border-bottom: 1px dotted black; color: black; background: none; cursor: help; } q { font-family: Times, "Times New Roman", serif; font-style: italic; } /* disabled for now blockquote { font-family: Times, "Times New Roman", serif; font-style: italic; }*/ code { background-color: #f9f9f9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #f9f9f9; line-height: 1.1em; } /* ** the main content area */ #siteSub { display: none; } #jump-to-nav { display: none; } #contentSub, #contentSub2 { font-size: 84%; line-height: 1.2em; margin: 0 0 1.4em 1em; color: #7d7d7d; width: auto; } span.subpages { display: block; } /* Some space under the headers in the content area */ #bodyContent h1, #bodyContent h2 { margin-bottom: .6em; } #bodyContent h3, #bodyContent h4, #bodyContent h5 { margin-bottom: .3em; } .firstHeading { margin-bottom: .1em; /* These two rules hack around bug 2013 (fix for more limited bug 11325). When bug 2013 is fixed properly, they should be removed. */ line-height: 1.2em; padding-bottom: 0; } /* user notification thing */ .usermessage { background-color: #ffce7b; border: 1px solid #ffa500; color: black; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; } #siteNotice { text-align: center; font-size: 95%; padding: 0 .9em; } #siteNotice p { margin: 0; padding: 0; } .success { color: green; font-size: larger; } .error { color: red; font-size: larger; } .errorbox, .successbox { font-size: larger; border: 2px solid; padding: .5em 1em; float: left; margin-bottom: 2em; color: #000; } .errorbox { border-color: red; background-color: #fff2f2; } .successbox { border-color: green; background-color: #dfd; } .errorbox h2, .successbox h2 { font-size: 1em; font-weight: bold; display: inline; margin: 0 .5em 0 0; border: none; } .catlinks { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; margin-top: 1em; clear: both; } /* currently unused, intended to be used by a metadata box in the bottom-right corner of the content area */ .documentDescription { /* The summary text describing the document */ font-weight: bold; display: block; margin: 1em 0; line-height: 1.5em; } .documentByLine { text-align: right; font-size: 90%; clear: both; font-weight: normal; color: #76797c; } /* emulate center */ .center { width: 100%; text-align: center; } *.center * { margin-left: auto; margin-right: auto; } /* small for tables and similar */ .small, .small * { font-size: 94%; } table.small { font-size: 100%; } /* ** content styles */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } #toc h2, .toc h2 { display: inline; border: none; padding: 0; font-size: 100%; font-weight: bold; } #toc #toctitle, .toc #toctitle, #toc .toctitle, .toc .toctitle { text-align: center; } #toc ul, .toc ul { list-style-type: none; list-style-image: none; margin-left: 0; padding-left: 0; text-align: left; } #toc ul ul, .toc ul ul { margin: 0 0 0 2em; } #toc .toctoggle, .toc .toctoggle { font-size: 94%; } .mw-warning { margin-left: 50px; margin-right: 50px; text-align: center; } /* images */ div.floatright, table.floatright { clear: right; float: right; position: relative; margin: 0 0 .5em .5em; border: 0; /* border: .5em solid white; border-width: .5em 0 .8em 1.4em; */ } div.floatright p { font-style: italic; } div.floatleft, table.floatleft { float: left; clear: left; position: relative; margin: 0 .5em .5em 0; border: 0; /* margin: .3em .5em .5em 0; border: .5em solid white; border-width: .5em 1.4em .8em 0; */ } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: .5em; border-style: solid; border-color: white; width: auto; } div.thumbinner { border: 1px solid #ccc; padding: 3px !important; background-color: #f9f9f9; font-size: 94%; text-align: center; overflow: hidden; } html .thumbimage { border: 1px solid #ccc; } html .thumbcaption { border: none; text-align: left; line-height: 1.4em; padding: 3px !important; font-size: 94%; } div.magnify { float: right; border: none !important; background: none !important; } div.magnify a, div.magnify img { display: block; border: none !important; background: none !important; } div.tright { clear: right; float: right; border-width: .5em 0 .8em 1.4em; } div.tleft { float: left; clear: left; margin-right: .5em; border-width: .5em 1.4em .8em 0; } img.thumbborder { border: 1px solid #dddddd; } .hiddenStructure { display: none; } /* ** classes for special content elements like town boxes ** intended to be referenced directly from the wiki src */ /* ** User styles */ /* table standards */ table.rimage { float: right; position: relative; margin-left: 1em; margin-bottom: 1em; text-align: center; } .toccolours { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } /* ** edit views etc */ .special li { line-height: 1.4em; margin: 0; padding: 0; } /* ** keep the whitespace in front of the ^=, hides rule from konqueror ** this is css3, the validator doesn't like it when validating as css2 */ #bodyContent a.external, #bodyContent a[href ^="gopher://"] { background: url(external.png) center right no-repeat; padding-right: 13px; } #bodyContent a[href ^="https://"], .link-https { background: url(lock_icon.gif) center right no-repeat; padding-right: 16px; } #bodyContent a[href ^="mailto:"], .link-mailto { background: url(mail_icon.gif) center right no-repeat; padding-right: 18px; } #bodyContent a[href ^="news://"] { background: url(news_icon.png) center right no-repeat; padding-right: 18px; } #bodyContent a[href ^="ftp://"], .link-ftp { background: url(file_icon.gif) center right no-repeat; padding-right: 18px; } #bodyContent a[href ^="irc://"], #bodyContent a.extiw[href ^="irc://"], .link-irc { background: url(discussionitem_icon.gif) center right no-repeat; padding-right: 18px; } #bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"], #bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"], #bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"], #bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"], #bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"], #bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"], .link-audio { background: url("audio.png") center right no-repeat; padding-right: 13px; } #bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"], #bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"], #bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"], #bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"], .link-video { background: url("video.png") center right no-repeat; padding-right: 13px; } #bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"], #bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"], #bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"], .link-document { background: url("document.png") center right no-repeat; padding-right: 12px; } /* disable interwiki styling */ #bodyContent a.extiw, #bodyContent a.extiw:active { color: #36b; background: none; padding: 0; } #bodyContent a.external { color: #36b; } /* this can be used in the content area to switch off special external link styling */ #bodyContent .plainlinks a { background: none !important; padding: 0 !important; } /* ** Structural Elements */ /* ** general portlet styles (elements in the quickbar) */ .portlet { border: none; margin: 0 0 .5em; padding: 0; float: none; width: 11.6em; overflow: hidden; } .portlet h4 { font-size: 95%; font-weight: normal; white-space: nowrap; } .portlet h5 { background: transparent; padding: 0 1em 0 .5em; display: inline; height: 1em; text-transform: lowercase; font-size: 91%; font-weight: normal; white-space: nowrap; } .portlet h6 { background: #ffae2e; border: 1px solid #2f6fab; border-style: solid solid none solid; padding: 0 1em 0 1em; text-transform: lowercase; display: block; font-size: 1em; height: 1.2em; font-weight: normal; white-space: nowrap; } .pBody { font-size: 95%; background-color: white; color: black; border-collapse: collapse; border: 1px solid #aaa; padding: 0 .8em .3em .5em; } .portlet h1, .portlet h2, .portlet h3, .portlet h4 { margin: 0; padding: 0; } .portlet ul { line-height: 1.5em; list-style-type: square; list-style-image: url(bullet.gif); font-size: 95%; } .portlet li { padding: 0; margin: 0; } /* ** Logo properties */ #p-logo { top: 0; left: 0; position: absolute; /*needed to use z-index */ z-index: 3; height: 155px; width: 12em; overflow: visible; } #p-logo h5 { display: none; } #p-logo a, #p-logo a:hover { display: block; height: 155px; width: 12.2em; background-repeat: no-repeat; background-position: 35% 50% !important; text-decoration: none; } /* ** Search portlet */ #p-search { position: relative; z-index: 3; } input.searchButton { margin-top: 1px; font-size: 95%; } #searchGoButton { padding-left: .5em; padding-right: .5em; font-weight: bold; } #searchInput { width: 10.9em; margin: 0; font-size: 95%; } #p-search .pBody { padding: .5em .4em .4em .4em; text-align: center; } /* ** the personal toolbar */ #p-personal { position: absolute; left: 0; top: 0; z-index: 0; } #p-personal { width: 100%; white-space: nowrap; padding: 0; margin: 0; border: none; background: none; overflow: visible; line-height: 1.2em; } #p-personal h5 { display: none; } #p-personal .portlet, #p-personal .pBody { z-index: 0; padding: 0; margin: 0; border: none; overflow: visible; background: none; } /* this is the ul contained in the portlet */ #p-personal ul { border: none; line-height: 1.4em; color: #2f6fab; padding: 0 2em 0 3em; margin: 0; text-align: right; list-style: none; z-index: 0; background: none; cursor: default; } #p-personal li { z-index: 0; border: none; padding: 0; display: inline; color: #2f6fab; margin-left: 1em; line-height: 1.2em; background: none; } #p-personal li a { text-decoration: none; color: #005896; padding-bottom: .2em; background: none; } #p-personal li a:hover { background-color: white; padding-bottom: .2em; text-decoration: none; } #p-personal li.active a:hover { background-color: transparent; } /* the icon in front of the user name, single quotes in bg url to hide it from iemac */ li#pt-userpage, li#pt-anonuserpage, li#pt-login { background: url(user.gif) top left no-repeat; padding-left: 20px; text-transform: none; } #p-personal ul { text-transform: lowercase; } #p-personal li.active { font-weight: bold; } /* ** the page-related actions- page/talk, edit etc */ #p-cactions { position: absolute; top: 1.3em; left: 11.5em; margin: 0; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #p-cactions ul { list-style: none; } #p-cactions li { display: inline; border: 1px solid #aaa; border-bottom: none; padding: 0 0 .1em 0; margin: 0 .3em 0 0; overflow: visible; background: white; } #p-cactions li.selected { border-color: #fabd23; padding: 0 0 .2em 0; font-weight: bold; } #p-cactions li a { background-color: #fbfbfb; color: #002bb8; border: none; padding: 0 .8em .3em; position: relative; z-index: 0; margin: 0; text-decoration: none; } #p-cactions li.selected a { z-index: 3; padding: 0 1em .2em!important; background-color: white; } #p-cactions .new a { color: #ba0000; } #p-cactions li a:hover { z-index: 3; text-decoration: none; background-color: white; } #p-cactions h5 { display: none; } #p-cactions li.istalk { margin-right: 0; } #p-cactions li.istalk a { padding-right: .5em; } #p-cactions #ca-addsection a { padding-left: .4em; padding-right: .4em; } /* offsets to distinguish the tab groups */ li#ca-talk { margin-right: 1.6em; } li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print { margin-left: 1.6em; } #p-cactions .pBody { font-size: 1em; background-color: transparent; color: inherit; border-collapse: inherit; border: 0; padding: 0; } #p-cactions .hiddenStructure { display: none; } #p-cactions li a { text-transform: lowercase; } /* ** the remaining portlets */ #p-tbx, #p-lang { position: relative; z-index: 3; } /* TODO: #t-iscite is only used by the Cite extension, come up with some * system which allows extensions to add to this file on the fly */ #t-ispermalink, #t-iscite { color: #999; } /* ** footer */ #footer { background-color: white; border-top: 1px solid #fabd23; border-bottom: 1px solid #fabd23; margin: .6em 0 1em 0; padding: .4em 0 1.2em 0; text-align: center; font-size: 90%; } #footer li { display: inline; margin: 0 1.3em; } #f-poweredbyico, #f-copyrightico { margin: 0 8px; position: relative; top: -2px; /* Bump it up just a tad */ } #f-poweredbyico { float: right; height: 1%; } #f-copyrightico { float: left; height: 1%; } /* js pref toc */ #preftoc { margin: 0; padding: 0; width: 100%; clear: both; } #preftoc li { background-color: #f0f0f0; color: #000; } #preftoc li { margin: 1px -2px 1px 2px; float: left; padding: 2px 0 3px 0; border: 1px solid #fff; border-right-color: #716f64; border-bottom: 0; position: relative; white-space: nowrap; list-style-type: none; list-style-image: none; z-index: 3; } #preftoc li.selected { font-weight: bold; background-color: #f9f9f9; border: 1px solid #aaa; border-bottom: none; cursor: default; top: 1px; padding-top: 2px; margin-right: -3px; } #preftoc > li.selected { top: 2px; } #preftoc a, #preftoc a:active { display: block; color: #000; padding: 0 .7em; position: relative; text-decoration: none; } #preftoc li.selected a { cursor: default; text-decoration: none; } #prefcontrol { padding-top: 2em; clear: both; } #preferences { margin: 0; border: 1px solid #aaa; clear: both; padding: 1.5em; background-color: #F9F9F9; } .prefsection { border: none; padding: 0; margin: 0; } .prefsection fieldset { border: 1px solid #aaa; float: left; margin-right: 2em; } .prefsection legend { font-weight: bold; } .prefsection table, .prefsection legend { background-color: #F9F9F9; } .mainLegend { display: none; } div.prefsectiontip { font-size: x-small; padding: .2em 2em; color: #666; } .btnSavePrefs { font-weight: bold; padding-left: .3em; padding-right: .3em; } .preferences-login { clear: both; margin-bottom: 1.5em; } .prefcache { font-size: 90%; margin-top: 2em; } div#userloginForm form, div#userlogin form#userlogin2 { margin: 0 3em 1em 0; border: 1px solid #aaa; clear: both; padding: 1.5em 2em; background-color: #f9f9f9; float: left; } .rtl div#userloginForm form, .rtl div#userlogin form#userlogin2 { float: right; } div#userloginForm table, div#userlogin form#userlogin2 table { background-color: #f9f9f9; } div#userloginForm h2, div#userlogin form#userlogin2 h2 { padding-top: 0; } div#userlogin .captcha, div#userloginForm .captcha { border: 1px solid #bbb; padding: 1.5em 2em; background-color: white; } #loginend, #signupend { clear: both; } #userloginprompt, #languagelinks { font-size: 85%; } #login-sectiontip { font-size: 85%; line-height: 1.2; padding-top: 2em; } #userlogin .loginText, #userlogin .loginPassword { width: 12em; } #userloginlink a, #wpLoginattempt, #wpCreateaccount { font-weight: bold; } /* ** IE/Mac fixes, hope to find a validating way to move this ** to a separate stylesheet. This would work but doesn't validate: ** @import("IEMacFixes.css"); */ /* tabs: border on the a, not the div */ * > html #p-cactions li { border: none; } * > html #p-cactions li a { border: 1px solid #aaa; border-bottom: none; } * > html #p-cactions li.selected a { border-color: #fabd23; } /* footer icons need a fixed width */ * > html #f-poweredbyico, * > html #f-copyrightico { width: 88px; } * > html #bodyContent, * > html #bodyContent pre { overflow-x: auto; width: 100%; padding-bottom: 25px; } /* more IE fixes */ /* float/negative margin brokenness */ * html #footer {margin-top: 0;} * html #column-content { display: inline; margin-bottom: 0; } * html div.editsection { font-size: smaller; } #pagehistory li.selected { position: relative; } /* Mac IE 5.0 fix; floated content turns invisible */ * > html #column-content { float: none; } * > html #column-one { position: absolute; left: 0; top: 0; } * > html #footer { margin-left: 13.2em; } .redirectText { font-size: 150%; margin: 5px; } .printfooter { display: none; } .not-patrolled { background-color: #ffa; } div.patrollink { clear: both; font-size: 75%; text-align: right; } span.newpage, span.minor, span.bot { font-weight: bold; } span.unpatrolled { font-weight: bold; color: red; } .sharedUploadNotice { font-style: italic; } span.updatedmarker { color: black; background-color: #0f0; } table.gallery { border: 1px solid #ccc; margin: 2px; padding: 2px; background-color: white; } table.gallery tr { vertical-align: top; } table.gallery td { vertical-align: top; background-color: #f9f9f9; border: solid 2px white; } /* Keep this temporarily so that cached pages will display right */ table.gallery td.galleryheader { text-align: center; font-weight: bold; } table.gallery caption { font-weight: bold; } div.gallerybox { margin: 2px; } div.gallerybox div.thumb { text-align: center; border: 1px solid #ccc; margin: 2px; } div.gallerytext { overflow: hidden; font-size: 94%; padding: 2px 4px; } span.comment { font-style: italic; } span.changedby { font-size: 95%; } .previewnote { text-indent: 3em; color: #c00; border-bottom: 1px solid #aaa; padding-bottom: 1em; margin-bottom: 1em; } .previewnote p { margin: 0; padding: 0; } .editExternally { border: 1px solid gray; background-color: #ffffff; padding: 3px; margin-top: 0.5em; float: left; font-size: small; text-align: center; } .editExternallyHelp { font-style: italic; color: gray; } .toggle { margin-left: 2em; text-indent: -2em; } /* Classes for EXIF data display */ table.mw_metadata { font-size: 0.8em; margin-left: 0.5em; margin-bottom: 0.5em; width: 300px; } table.mw_metadata caption { font-weight: bold; } table.mw_metadata th { font-weight: normal; } table.mw_metadata td { padding: 0.1em; } table.mw_metadata { border: none; border-collapse: collapse; } table.mw_metadata td, table.mw_metadata th { text-align: center; border: 1px solid #aaaaaa; padding-left: 0.1em; padding-right: 0.1em; } table.mw_metadata th { background-color: #f9f9f9; } table.mw_metadata td { background-color: #fcfcfc; } table.collapsed tr.collapsable { display: none; } /* filetoc */ ul#filetoc { text-align: center; border: 1px solid #aaaaaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; margin-bottom: 0.5em; margin-left: 0; margin-right: 0; } #filetoc li { display: inline; list-style-type: none; padding-right: 2em; } input#wpSummary { width: 80%; } /* @bug 1714 */ input#wpSave, input#wpDiff { margin-right: 0.33em; } #wpSave { font-weight: bold; } /* Classes for article validation */ table.revisionform_default { border: 1px solid #000000; } table.revisionform_focus { border: 1px solid #000000; background-color:#00BBFF; } tr.revision_tr_default { background-color:#EEEEEE; } tr.revision_tr_first { background-color:#DDDDDD; } p.revision_saved { color: green; font-weight:bold; } #mw_trackbacks { border: solid 1px #bbbbff; background-color: #eeeeff; padding: 0.2em; } /* Allmessages table */ #allmessagestable th { background-color: #b2b2ff; } #allmessagestable tr.orig { background-color: #ffe2e2; } #allmessagestable tr.new { background-color: #e2ffe2; } #allmessagestable tr.def { background-color: #f0f0ff; } /* noarticletext */ div.noarticletext { border: 1px solid #ccc; background: #fff; padding: .2em 1em; color: #000; } div#searchTargetContainer { left: 10px; top: 10px; width: 90%; background: white; } div#searchTarget { padding: 3px; margin: 5px; background: #F0F0F0; border: solid 1px blue; } div#searchTarget ul li { list-style: none; } div#searchTarget ul li:before { color: orange; content: "\00BB \0020"; } div#searchTargetHide { float:right; border:solid 1px black; background:#DCDCDC; padding:2px; } div.multipageimagenavbox { border: solid 1px silver; padding: 4px; margin: 1em; background: #f0f0f0; } div.multipageimagenavbox div.thumb { border: none; margin-left: 2em; margin-right: 2em; } div.multipageimagenavbox hr { margin: 6px; } table.multipageimage td { text-align: center; } /** Special:Version */ table#sv-ext, table#sv-hooks, table#sv-software { margin: 1em; padding:0em; } #sv-ext td, #sv-hooks td, #sv-software td, #sv-ext th, #sv-hooks th, #sv-software th { border: 1px solid #A0A0A0; padding: 0 0.15em 0 0.15em; } #sv-ext th, #sv-hooks th, #sv-software th { background-color: #F0F0F0; color: black; padding: 0 0.15em 0 0.15em; } tr.sv-space{ height: 0.8em; border:none; } tr.sv-space td { display: none; } /* Table pager (e.g. Special:Imagelist) - remove underlines from the navigation link - collapse borders - set the borders to outsets (similar to Special:Allmessages) - remove line wrapping for all td and th, set background color - restore line wrapping for the last two table cells (description and size) */ .TablePager_nav a { text-decoration: none; } .TablePager { border-collapse: collapse; } .TablePager, .TablePager td, .TablePager th { border: 1px solid #aaaaaa; padding: 0 0.15em 0 0.15em; } .TablePager th { background-color: #eeeeff } .TablePager td { background-color: #ffffff } .TablePager tr:hover td { background-color: #eeeeff } .imagelist td, .imagelist th { white-space: nowrap } .imagelist .TablePager_col_links { background-color: #eeeeff } .imagelist .TablePager_col_img_description { white-space: normal } .imagelist th.TablePager_sort { background-color: #ccccff } .templatesUsed { margin-top: 1.5em; } .mw-summary-preview { margin: 0.1em 0; } /* Friendlier slave lag warnings */ div.mw-lag-warn-normal, div.mw-lag-warn-high { padding: 3px; text-align: center; margin: 3px auto; } div.mw-lag-warn-normal { border: 1px solid #FFCC66; background-color: #FFFFCC; } div.mw-lag-warn-high { font-weight: bold; border: 2px solid #FF0033; background-color: #FFCCCC; } /* Recreating-deleted-page/reupload file warning and log entries */ div#mw-upload-deleted-warn, div#mw-deleted-notice, div#mw-recreate-deleted-warn { padding: 3px; margin-bottom: 3px; border: 2px solid #2F6FAB; } div#mw-upload-deleted-warn ul li, div#mw-deleted-notice ul li, div#mw-recreate-deleted-warn ul li { font-size: 90%; } .MediaTransformError { background-color: #ccc; padding: 0.1em; } .MediaTransformError td { text-align: center; vertical-align: middle; font-size: 90%; } /** Special:Search stuff */ div#mw-search-interwiki-caption { text-align: center; font-weight: bold; font-size: 95%; } .mw-search-interwiki-project { font-size: 97%; text-align: left; padding-left: 0.2em; padding-right: 0.15em; padding-bottom: 0.2em; padding-top: 0.15em; background: #cae8ff; } span.searchmatch { font-weight: bold; color: red; } /* God-damned hack for the crappy layout */ .os-suggest { font-size: 127%; }  !_http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400Uutf-8OSbplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver* &,-345YZ[\]^_`abcdefghijklmnopqrstuvw{|U$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1)( '()$+WNS.base[NS.relative_http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400./01X$classesZ$classname12UNSURLXNSObject#A'  6789IWNS.keysZNS.objects':;<=>?@ABCDEFGH JKLMNOPQRSTUVWX !"#$%&WX-Cache]Cache-Control\X-Powered-By_Content-Encoding\Content-TypeVServer^Content-LengthTDateZConnectionSAgeWExpiresSVia^X-Vary-Options^X-Cache-LookupTVary_9MISS from sq39.wikimedia.org, HIT from sq34.wikimedia.org_:public, s-maxage=2678400, max-age=2678400, max-age=2592000_PHP/5.2.4-2ubuntu5wm1Tgzip_text/css; charset=utf-8VApacheT8638_Wed, 01 Oct 2008 15:25:42 GMTZkeep-aliveR14_Fri, 31 Oct 2008 15:25:42 GMT_`1.0 sq39.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq34.wikimedia.org:80 (squid/2.6.STABLE21)_"Accept-Encoding;list-contains=gzip_@HIT from sq39.wikimedia.org:3128, HIT from sq34.wikimedia.org:80_Accept-Encoding./xyyz2_NSMutableDictionary\NSDictionarys./}~~2_NSHTTPURLResponse]NSURLResponse)27:PRd   "$&8:<>@BDFHJLNPRTV^ly.k_ %3Os/*
 */
 
/* Main page fixes */
#interwiki-completelist {
    font-weight: bold;
}
body.page-Main_Page #ca-delete {
    display: none !important;
}

/* Edit window toolbar */
#toolbar {
    height: 22px;
    margin-bottom: 6px;
}

/* Make the list of references smaller */
ol.references {
    font-size: 100%;
}
.references-small { 
    font-size: 90%;
}

/* VALIDATOR NOTICE: the following is correct, but the W3C validator doesn't accept it */
/* -moz-* is a vendor-specific extension (CSS 2.1 4.1.2.1) */
/* column-count is from the CSS3 module "CSS Multi-column Layout" */
/* Please ignore any validator errors caused by these two lines */
.references-2column {
    font-size: 90%;
    -moz-column-count: 2;
    -webkit-column-count: 2;
    column-count: 2;
}

.same-bg { background: none; }

/* Highlight clicked reference in blue to help navigation */
ol.references > li:target {
    background-color: #DEF;
}

sup.reference:target { 
    background-color: #DEF;
}

/* Styling for citations */
cite {
    font-style: normal;
    word-wrap: break-word;
}

/* If there is an inline link to a full citation, the full citation will turn blue when the inline link is clicked */
cite:target { 
    background-color: #DEF;
}

/* For linked citation numbers and document IDs, where the number need not be shown on a screen or a handheld, but should be included in the printed version */

@media screen, handheld, projection {
    cite *.printonly {
        display: none;
    }
}


/* wikitable/prettytable class for skinning normal tables */
table.wikitable,
table.prettytable {
    margin: 1em 1em 1em 0;
    background: #f9f9f9;
    border: 1px #aaa solid;
    border-collapse: collapse;
}
.wikitable th, .wikitable td,
.prettytable th, .prettytable td {
    border: 1px #aaa solid;
    padding: 0.2em;
}
.wikitable th,
.prettytable th {
    background: #f2f2f2;
    text-align: center;
}
.wikitable caption,
.prettytable caption {
    margin-left: inherit;
    margin-right: inherit;
    font-weight: bold;
}


/* default skin for navigation boxes */
table.navbox {            /* navbox container style */
  border:1px solid #aaa;
  width:100%; 
  margin:auto;
  clear:both;
  font-size:88%;
  text-align:center;
  padding:1px;
}
table.navbox + table.navbox {
  margin-top:-1px;        /* single pixel border between adjacent navboxes (doesn't work for IE6, but that's okay) */
}
.navbox-title, .navbox-abovebelow, table.navbox th {
  text-align:center;      /* title and above/below styles */
  padding-left:1em;
  padding-right:1em;
}
.navbox-group {           /* group style */
  white-space:nowrap;
  text-align:right;
  font-weight:bold;
  padding-left:1em;
  padding-right:1em;
}
.navbox, .navbox-subgroup {
  background:#fdfdfd;     /* Background color */
}
.navbox-list {
  border-color:#fdfdfd;   /* Must match background color */
}
.navbox-title, table.navbox th {
  background:#ccccff;     /* Level 1 color */
}
.navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title {
  background:#ddddff;     /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
  background:#e6e6ff;     /* Level 3 color */
}
.navbox-even {
  background:#f7f7f7;     /* Even row striping */
}
.navbox-odd {
  background:transparent; /* Odd row striping */
}

/* Infobox template style */
.infobox {
    border: 1px solid #aaa;
    background-color: #f9f9f9;
    color: black;
    margin: 0.5em 0 0.5em 1em;
    padding: 0.2em;
    float: right;
    clear: right;
}
.infobox td,
.infobox th {
    vertical-align: top;
}
.infobox caption {
    font-size: larger;
    margin-left: inherit;
}
.infobox.bordered {
    border-collapse: collapse;
}
.infobox.bordered td,
.infobox.bordered th {
    border: 1px solid #aaa;
}
.infobox.bordered .borderless td,
.infobox.bordered .borderless th {
    border: 0;
}

.infobox.sisterproject {
    width: 20em;
    font-size: 90%;
}

.infobox.standard-talk {
    border: 1px solid #c0c090;
    background-color: #f8eaba;
}
.infobox.standard-talk.bordered td,
.infobox.standard-talk.bordered th {
    border: 1px solid #c0c090;
}

/* styles for bordered infobox with merged rows */
.infobox.bordered .mergedtoprow td,
.infobox.bordered .mergedtoprow th {
    border: 0;
    border-top: 1px solid #aaa;
    border-right: 1px solid #aaa;
}

.infobox.bordered .mergedrow td,
.infobox.bordered .mergedrow th {
    border: 0;
    border-right: 1px solid #aaa;
}

/* Styles for geography infoboxes, e.g. countries, country subdivisions, cities, etc. */
.infobox.geography {
    text-align: left;
    border-collapse: collapse;
    line-height: 1.2em; 
    font-size: 90%;
}

.infobox.geography  td,
.infobox.geography  th {
    border-top: solid 1px #aaa;
    padding: 0.4em 0.6em 0.4em 0.6em;
}
.infobox.geography .mergedtoprow td,
.infobox.geography .mergedtoprow th {
    border-top: solid 1px #aaa;
    padding: 0.4em 0.6em 0.2em 0.6em;
}

.infobox.geography .mergedrow td,
.infobox.geography .mergedrow th {
    border: 0;
    padding: 0 0.6em 0.2em 0.6em;
}

.infobox.geography .mergedbottomrow td,
.infobox.geography .mergedbottomrow th {
    border-top: 0;
    border-bottom: solid 1px #aaa;
    padding: 0 0.6em 0.4em 0.6em;
}

.infobox.geography .maptable td,
.infobox.geography .maptable th {
    border: 0;
    padding: 0;
}

/* Style for "notices" */
.notice {
    margin: 1em;
    padding: 0.2em;
}

#disambig {
    border-top: 1px solid #ccc; 
    border-bottom: 1px solid #ccc;
}

/* Persondata and other (future) metadata,
   "table.InChI" and ".InChI-label" are temporary. */
table.InChI,
table.persondata {
    border: 1px solid #aaa;
    display: none;
    speak: none;
}
.InChI-label,
.persondata-label {
    color: #aaa;
}

/* Makes redirects appear in italics in categories and on [[Special:Allpages]] */
.redirect-in-category, .allpagesredirect {
    font-style: italic;
}

/* Class for links with loudspeaker icon next to them */
/* (Used in [[Template:Audio]] and the like to make the speaker clickable) */

.audiolink a {
    background: url("http://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Loudspeaker.svg/11px-Loudspeaker.svg.png") center left no-repeat !important;
    padding-left: 16px !important;
    padding-right: 0 !important;
}

/* Icons for medialist templates [[Template:Listen]], [[Template:Multi-listen_start]], [[Template:Video]], [[Template:Multi-video_start]] */

div.listenlist {
    background: url("http://upload.wikimedia.org/wikipedia/commons/thumb/a/a6/Gnome-speakernotes.png/30px-Gnome-speakernotes.png");
    padding-left: 40px;
}

div.videolist, div.multivideolist {
    background: url("http://upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png");
    padding-left: 50px;
}

/* Style rules for media list templates */
div.medialist {
    min-height: 50px;
    margin: 1em;
    background-position: top left;
    background-repeat: no-repeat;
}

div.medialist ul {
    list-style-type: none; 
    list-style-image: none;
    margin: 0;
}

div.medialist ul li {
    padding-bottom: 0.5em;
}

div.medialist ul li li {
    font-size: 91%;
    padding-bottom: 0;
}

/* Change the external link icon to an Adobe icon for all PDF files */
/* (in browsers that support these CSS selectors, like Mozilla and Opera) */
#bodyContent a[href$=".pdf"].external, 
#bodyContent a[href*=".pdf?"].external, 
#bodyContent a[href*=".pdf#"].external,
#bodyContent a[href$=".PDF"].external, 
#bodyContent a[href*=".PDF?"].external, 
#bodyContent a[href*=".PDF#"].external,
#mw_content a[href$=".pdf"].external, 
#mw_content a[href*=".pdf?"].external, 
#mw_content a[href*=".pdf#"].external,
#mw_content a[href$=".PDF"].external, 
#mw_content a[href*=".PDF?"].external, 
#mw_content a[href*=".PDF#"].external {
    background: url(http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Icons-mini-file_acrobat.gif/15px-Icons-mini-file_acrobat.gif) center right no-repeat;
    padding-right: 16px;
}

/* Change the external link icon to an Adobe icon anywhere the PDFlink class */
/* is used (notably Template:PDFlink). This works in IE, unlike the above. */
span.PDFlink a {
    background: url(http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Icons-mini-file_acrobat.gif/15px-Icons-mini-file_acrobat.gif) center right no-repeat !important;
    padding-right: 17px !important;
}

span.geolink a {
    background: url(http://upload.wikimedia.org/wikipedia/en/a/a7/Monobook-globe.png) center right no-repeat !important;
    padding-right: 11px !important;
}

/* Content in columns with CSS instead of tables [[Template:Columns]] */
div.columns-2 div.column {
    float: left;
    width: 50%;
    min-width: 300px;
}

div.columns-3 div.column {
    float: left;
    width: 33.3%;
    min-width: 200px;
}

div.columns-4 div.column {
    float: left;
    width: 25%;
    min-width: 150px;
}

div.columns-5 div.column {
    float: left;
    width: 20%;
    min-width: 120px;
}

/*Add formatting to make sure that "external references" from [[Template:Ref]] do
  not get URL expansion, not even when printed. The mechanism up to MediaWiki 1.4 was
  that the HTML code contained a SPAN following the anchor A; this SPAN had the class
  "urlexpansion", which was not displayed on screen, but was shown when the medium was
  "print". The rules below ensure (a) that there is no extra padding to the right of
  the anchor (displayed as "[]"), (b) that there is no "external link arrow" for
  the link, and (c) that this SPAN of class "urlexpansion" is never shown.
  ~~~~
*/

.plainlinksneverexpand {
    background: none ! important;
    padding: 0 ! important;
}

.plainlinksneverexpand .urlexpansion {
    display: none ! important;
}

/* Make sure that ext links displayed within "plainlinksneverexpand" don't get
   the arrow...
*/
.plainlinksneverexpand a {
    background: none !important;
    padding: 0 !important;
}

/* With MediaWiki 1.5, the mechanism has changed: instead of a SPAN of class "urlexpansion"
   following the anchor A, the anchor itself now has class "external autonumber" and the
   expansion is inserted when printing (see the common printing style sheet at
   http://en.wikipedia.org/skins-1.5/common/commonPrint.css) using the ":after" pseudo-
   element of CSS. We have to switch this off for links due to Template:Ref!
*/
.plainlinksneverexpand a.external.text:after {
    display: none !important;
}
.plainlinksneverexpand a.external.autonumber:after {
    display: none !important;
}

/* Messagebox templates */
.messagebox {
    border: 1px solid #aaa;
    background-color: #f9f9f9;
    width: 80%;
    margin: 0 auto 1em auto;
    padding: .2em;
}
.messagebox.merge {
    border: 1px solid #c0b8cc;
    background-color: #f0e5ff;
    text-align: center;
}
.messagebox.cleanup {
    border: 1px solid #9f9fff;
    background-color: #efefff;
    text-align: center;
}
.messagebox.standard-talk {
    border: 1px solid #c0c090;
    background-color: #f8eaba;
    margin: 4px auto;
}
.messagebox.nested-talk {
    border: 1px solid #c0c090;
    background-color: #f8eaba;
    width: 100%;
    margin: 2px 0 0 0;
    padding: 2px;
}
.messagebox.small {
    width: 238px;
    font-size: 85%;
    float: right;
    clear: both;
    margin: 0 0 1em 1em;
    line-height: 1.25em; 
}
.messagebox.small-talk {
    width: 238px;
    font-size: 85%;
    float: right;
    clear: both;
    margin: 0 0 1em 1em;
    line-height: 1.25em; 
    background: #F8EABA;
}


/* Article message box styles */
table.ambox {            /* 10% = Will not overlap with other elements */
    margin: -1px 10% 0px;    /* -1px = Single border between stacked boxes in all browsers */
    border: 1px solid #aaa; 
    border-left: 10px solid #1e90ff;    /* Default "notice" blue */
    background: #fbfbfb; 
}
.ambox th.mbox-text, .ambox td.mbox-text,
th.ambox-text, td.ambox-text {     /* The message body cell(s) */
    border: none; 
    padding: 0.25em 0.5em;         /* 0.5em left/right */
    width: 100%;                   /* Make all amboxes the same width regardless of text length */
}
.ambox td.mbox-image,
td.ambox-image {                   /* The left image cell */
    border: none; 
    padding: 2px 0 2px 0.5em;      /* 0.5em left, 0px right */
    text-align: center; 
}
.ambox td.mbox-imageright,
td.ambox-imageright {              /* The right image cell */
    border: none; 
    padding: 2px 0.5em 2px 0;      /* 0px left, 0.5em right */
    text-align: center; 
}
 
table.ambox-notice {
    border-left: 10px solid #1e90ff;    /* Blue */
}
table.ambox-speedy {
    border-left: 10px solid #b22222;    /* Red */
    background: #fee;                   /* Pink */
}
table.ambox-serious,
table.ambox-delete {    /* "serious" is deprecated, use "delete" instead. */
    border-left: 10px solid #b22222;    /* Red */
}
table.ambox-content {
    border-left: 10px solid #f28500;    /* Orange */
}
table.ambox-style {
    border-left: 10px solid #f4c430;    /* Yellow */
}
table.ambox-merge,
table.ambox-move {    /* "merge" is deprecated, use "move" instead. */
    border-left: 10px solid #9932cc;    /* Purple */
}
table.ambox-protection {
    border-left: 10px solid #bba;       /* Gray-gold */
}
 
/* Image message box styles */
table.imbox {
    margin: 4px 10%; 
    border-collapse: collapse; 
    border: 3px solid #1e90ff;    /* Default "notice" blue */
    background: #fbfbfb;
}
.imbox .mbox-text .imbox,
.imbox-text .imbox {     /* For imboxes inside imbox-text cells. */
    margin: 0 -0.5em;    /* 0.9 - 0.5 = 0.4em left/right. */
}
.mbox-inside .imbox {    /* For imboxes inside other templates. */
    margin: 4px;
}
.imbox th.mbox-text, .imbox td.mbox-text,
th.imbox-text, td.imbox-text {    /* The message body cell(s) */
    border: none; 
    padding: 0.25em 0.9em;        /* 0.9em left/right */
    width: 100%;
}
.imbox td.mbox-image,
td.imbox-image {                  /* The left image cell */
    border: none; 
    padding: 2px 0 2px 0.9em;     /* 0.9em left, 0px right */
    text-align: center; 
}
.imbox td.mbox-imageright,
td.imbox-imageright {             /* The right image cell */
    border: none;
    padding: 2px 0.9em 2px 0;     /* 0px left, 0.9em right */
    text-align: center; 
}
 
table.imbox-notice {
    border: 3px solid #1e90ff;    /* Blue */
}
table.imbox-speedy {
    border: 3px solid #b22222;    /* Red */
    background: #fee;             /* Pink */
}
table.imbox-delete {
    border: 3px solid #b22222;    /* Red */
}
table.imbox-content {
    border: 3px solid #f28500;    /* Orange */
}
table.imbox-style {
    border: 3px solid #f4c430;    /* Yellow */
}
table.imbox-move {
    border: 3px solid #9932cc;    /* Purple */
}
table.imbox-protection {
    border: 3px solid #bba;       /* Gray-gold */
}
table.imbox-license {
    border: 3px solid #88a;       /* Dark gray */
    background: #f7f8ff;          /* Light gray */
}
table.imbox-featured {
    border: 3px solid #cba135;    /* Brown-gold */
}
 
/* Category message box styles */
table.cmbox {
    margin: 3px 10%;
    border-collapse: collapse;
    border: 1px solid #aaa; 
    background: #DFE8FF;           /* Default "notice" blue */
}
.cmbox th.mbox-text, .cmbox td.mbox-text,
th.cmbox-text, td.cmbox-text {     /* The message body cell(s) */
    border: none; 
    padding: 0.25em 0.5em;         /* 0.5em left/right */
    width: 100%;
}
.cmbox td.mbox-image,
td.cmbox-image {                   /* The left image cell */
    border: none; 
    padding: 2px 0 2px 0.5em;      /* 0.5em left, 0px right */
    text-align: center; 
}
.cmbox td.mbox-imageright,
td.cmbox-imageright {              /* The right image cell */
    border: none;
    padding: 2px 0.8em 2px 0;      /* 0px left, 0.8em right */
    text-align: center; 
}
 
table.cmbox-notice {
    background: #DFE8FF;    /* Blue */
}
table.cmbox-speedy {
    margin-top: 4px;
    margin-bottom: 4px;
    border: 4px solid #b22222;    /* Red */
    background: #FFDBDB;          /* Pink */
}
table.cmbox-delete {
    background: #FFDBDB;    /* Red */
}
table.cmbox-content {
    background: #FFE7CE;    /* Orange */
}
table.cmbox-style {
    background: #FFF9DB;    /* Yellow */
}
table.cmbox-move {
    background: #F1D0FF;    /* Purple */
}
table.cmbox-protection {
    background: #EFEFE1;    /* Gray-gold */
}
 
/* Other pages message box styles */
table.ombox {
    margin: 4px 10%; 
    border-collapse: collapse; 
    border: 1px solid #aaa;       /* Default "notice" gray */
    background: #f9f9f9;
}
table.ombox-small {               /* For the "small=yes" option */
    clear: right;
    float: right;
    margin: 4px 0 4px 1em;
    width: 238px;
    font-size: 88%;
    line-height: 1.25em;
}
.ombox th.mbox-text, .ombox td.mbox-text,
th.ombox-text, td.ombox-text {    /* The message body cell(s) */
    border: none; 
    padding: 0.25em 0.9em;        /* 0.9em left/right */
    width: 100%;
}
.ombox td.mbox-image,
td.ombox-image {                  /* The left image cell */
    border: none; 
    padding: 2px 0 2px 0.9em;     /* 0.9em left, 0px right */
    text-align: center; 
}
.ombox td.mbox-imageright,
td.ombox-imageright {             /* The right image cell */
    border: none;
    padding: 2px 0.9em 2px 0;     /* 0px left, 0.9em right */
    text-align: center; 
}
 
table.ombox-notice {
    border: 1px solid #aaa;       /* Gray */
}
table.ombox-speedy {
    border: 2px solid #b22222;    /* Red */
    background: #fee;             /* Pink */
}
table.ombox-delete {
    border: 2px solid #b22222;    /* Red */
}
table.ombox-content {
    border: 1px solid #f28500;    /* Orange */
}
table.ombox-style {
    border: 1px solid #f4c430;    /* Yellow */
}
table.ombox-move {
    border: 1px solid #9932cc;    /* Purple */
}
table.ombox-protection {
    border: 2px solid #bba;       /* Gray-gold */
}
 
/* Talk page message box styles */
table.tmbox {
    margin: 4px 10%;
    border-collapse: collapse;
    border: 1px solid #c0c090;    /* Default "notice" gray-brown */
    background: #f8eaba;
}
table.tmbox-small {               /* For the "small=yes" option */
    clear: right;
    float: right;
    margin: 4px 0 4px 1em;
    width: 238px;
    font-size: 88%;
    line-height: 1.25em;
}
.mbox-inside .tmbox {    /* For tmboxes inside other templates. */
    margin: 2px;
}
.tmbox th.mbox-text, .tmbox td.mbox-text,
th.tmbox-text, td.tmbox-text {    /* The message body cell(s) */
    border: none;
    padding: 0.25em 0.9em;        /* 0.9em left/right */
    width: 100%;
}
.tmbox td.mbox-image,
td.tmbox-image {                  /* The left image cell */
    border: none;
    padding: 2px 0px 2px 0.9em;   /* 0.9em left, 0px right */
    text-align: center;
}
.tmbox td.mbox-imageright,
td.tmbox-imageright {             /* The right image cell */
    border: none;
    padding: 2px 0.9em 2px 0px;   /* 0px left, 0.9em right */
    text-align: center;
}
 
table.tmbox-speedy {
    border: 2px solid #b22222;    /* Red */
    background: #fee;             /* Pink */
}
table.tmbox-delete {
    border: 2px solid #b22222;    /* Red */
}
table.tmbox-content {
    border: 2px solid #f28500;    /* Orange */
}
table.tmbox-style {
    border: 2px solid #f4c430;    /* Yellow */
}
table.tmbox-move {
    border: 2px solid #9932cc;    /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
    border: 1px solid #c0c090;    /* Gray-brown */
}


/* Put a checker background at the image description page only visible if the image has transparent background */
#file img {
    background: url("http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png") repeat;
}

/* Support for Template:IPA, Template:Unicode and Template:Polytonic. The inherit declaration resets the font for all browsers except MSIE6.  The empty comment must remain. Please copy any changes to [[Template:IPA fonts]] and [[Template:Unicode fonts]]. */
.IPA {
    font-family: "Charis SIL", "Doulos SIL", Gentium, GentiumAlt, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode";
    font-family /**/:inherit;
}
.Unicode {
    font-family: Code2000, Code2001, "Free Serif", "TITUS Cyberbit Basic", "Doulos SIL", "Chrysanthi Unicode", "Bitstream Cyberbit", "Bitstream CyberBase", Thryomanes, Gentium, GentiumAlt, "Lucida Grande", "Free Sans", "Arial Unicode MS", "Microsoft Sans Serif", "Lucida Sans Unicode";
    font-family /**/:inherit;
}
.latinx {
    font-family: Code2000, Code2001, "TITUS Cyberbit Basic", "Microsoft Sans Serif";
    font-family /**/:inherit;
}
.polytonic {
    font-family: "Athena Unicode", Gentium, "Palatino Linotype", "Arial Unicode MS", "Lucida Sans Unicode", "Lucida Grande", Code2000; 
    font-family /**/:inherit;
}
.mufi {
    font-family: Alphabetum, Cardo, LeedsUni, Junicode, "TITUS Cyberbit Basic", ALPHA-Demo;
}

/* Pseudo-classes in support of [[Template:lang]]. */

:lang(he) {
    font-family: "SBL Hebrew", "Ezra SIL SR", "Ezra SIL", Cardo, "Chrysanthi Unicode", "TITUS Cyberbit Basic", "Arial Unicode MS", Narkisim, "Times New Roman";
    font-family /**/:inherit;
}
:lang(fa) {
    font-family: "Nafees Nastaleeq", "Pak Nastaleeq", PDMS_Jauhar;
    font-family /**/:inherit;
}
:lang(ps) {
    font-family: "Nafees Nastaleeq", "Pak Nastaleeq", PDMS_Jauhar;
    font-family /**/:inherit;
}
:lang(ur) {
    font-family: "Nafees Nastaleeq", "Pak Nastaleeq", PDMS_Jauhar;
    font-family /**/:inherit;
}
:lang(sux-Xsux) {
    font-family: Akkadian;
    font-family /**/:inherit;
}
:lang(ja) {
       font-family: Code2000, "Arial Unicode MS", "Bitstream Cyberbit", "Bitstream CyberCJK", IPAGothic, IPAPGothic, IPAUIGothic, "Kochi Gothic", IPAMincho, IPAPMincho;
    font-family /**/:inherit;
}
:lang(ko) {
    font-family: "Adobe Myungjo Std M", AppleMyungjo, "Baekmuk Batang", "Baekmuk Gulim", Batang, Dotum, DotumChe, Gulim, GulimChe, HYGothic-Extra, HYMyeongJo-Extra, "New Gulim", UnBatang, UnDotum, UnYetgul, UWKMJF;
    font-family /**/:inherit;
}
:lang(zh-Hans) {
    font-family: "Adobe Song Std L", "AR PL ShanHeiSun Uni", "AR PL ShanHeiSun Uni MBE", "MS Hei", "MS Song", SimHei;
    font-family /**/:inherit;
}
:lang(zh-Hant) {
    font-family: "Adobe Ming Std L", "AR PL New Sung", "AR PL ZenKai Uni", "AR PL ZenKai Uni MBE", MingLiU, PMingLiU;
    font-family /**/:inherit;
}
:lang(grc) {
    font-family: "Athena Unicode", Gentium, "Palatino Linotype", "Arial Unicode MS", "Lucida Sans Unicode", "Lucida Grande", Code2000;
    font-family /**/:inherit;
}

#wpSave {
    font-weight: bold;
}

/* class hiddenStructure is defunct. See [[Wikipedia:hiddenStructure]] */
.hiddenStructure {
    display: inline ! important;
    color: #f00; 
    background-color: #0f0;
}

/* suppress missing interwiki image links where #ifexist cannot be used due to high number of requests */
/* use restricted to rail icon management pages */
/* see .hidden-redlink on http://meta.wikimedia.org/wiki/MediaWiki:Common.css */
.check-icon a.new {
    display: none; 
    speak:none;
}

/* Removes underlines from links */
.nounderlines a { 
    text-decoration: none;
}

/* Remove underline from IPA links */
.IPA a:link, .IPA a:visited {
    text-decoration: none;
}

#EnWpMpBook { background-image: url(http://upload.wikimedia.org/wikipedia/en/7/7e/MP-open-book.png); }
#EnWpMpSearch { background: url(http://upload.wikimedia.org/wikipedia/en/a/ae/MP-magnifying-glass.png) no-repeat top right; }
#EnWpMpSearchInner { float: right; width: 20em; text-align: center; }
#EnWpMpBook2 { background-image: url(http://upload.wikimedia.org/wikipedia/commons/8/8e/MP-open-book2.png); }

/* Standard Navigationsleisten, aka box hiding thingy from .de.  Documentation at [[Wikipedia:NavFrame]]. */

div.Boxmerge,
div.NavFrame {
    margin: 0;
    padding: 4px;
    border: 1px solid #aaa;
    text-align: center;
    border-collapse: collapse;
    font-size: 95%;
}
div.Boxmerge div.NavFrame {
    border-style: none;
    border-style: hidden;
}
div.NavFrame + div.NavFrame {
    border-top-style: none;
    border-top-style: hidden;
}
div.NavPic {
    background-color: #fff;
    margin: 0;
    padding: 2px;
    float: left;
}
div.NavFrame div.NavHead {
    height: 1.6em;
    font-weight: bold;
    background-color: #ccf;
    position:relative;
}
div.NavFrame p {
    font-size: 100%;
}
div.NavFrame div.NavContent {
    font-size: 100%;
}
div.NavFrame div.NavContent p {
    font-size: 100%;
}
div.NavEnd {
    margin: 0;
    padding: 0;
    line-height: 1px;
    clear: both;
}
a.NavToggle {
    position: absolute;
    top: 0;
    right: 3px;
    font-weight: normal;
    font-size: 90%;
}

/* Coloured watchlist numbers */
.mw-plusminus-pos {
    color: #006400; /* darkgreen */
}

/* .mw-plusminus-null currently at developer default */

.mw-plusminus-neg {
    color: #8B0000; /* darkred */
}

.dablink {
    font-style: italic;
    padding-left: 2em;
}

.dablink i {
    font-style: normal;
}

/* Style for horizontal UL lists */
.horizontal ul {
    padding: 0;
    margin: 0;
}

.horizontal li { 
    padding: 0 0.6em 0 0.4em;
    display: inline;
    border-right: 1px solid;
}

.horizontal li:last-child {
    border-right: none;
    padding-right: 0;
}

/* Geographical coordinates 

To display coordinates using the notation in the source code, write this in your User:Username/monobook.css:
   .geo-default { display: inline } .geo-nondefault { display: none } 
   .geo-dec { display: inline } .geo-dms { display: inline }

To display coordinates using decimal notation, write this in your User:Username/monobook.css:
   .geo-default { display: inline } .geo-nondefault { display: inline } 
   .geo-dec { display: inline } .geo-dms { display: none }

To display coordinates using DMS notation, write this in your User:Username/monobook.css:
   .geo-default { display: inline } .geo-nondefault { display: inline } 
   .geo-dec { display: none }   .geo-dms { display: inline }

To display coordinates in both decimal and DMS notation, write this in your User:Username/monobook.css:
   .geo-default { display: inline } .geo-nondefault { display: inline } 
   .geo-dec { display: inline }   .geo-dms { display: inline }
   .geo-multi-punct { display: inline }

See [[Template:Coor link]] for how these are used.

Note that the classes "geo", "longitude", and "latitude" are not just styles but also used by the [[Geo microformat]], so the names should not be changed.

*/

.geo-default { display: inline; }
.geo-nondefault { display: none; }
.geo-dms { display: inline; }
.geo-dec { display: inline; }
.geo-multi-punct { display: none; }

.longitude, .latitude {
    white-space: nowrap;
}

/* This is used for the Geo microformat, but no style is needed for now other than .geo-dec. */
.geo { }

/***** end Geo-related */

/* When 
is used on the table of contents, the ToC will display without numbers */ .nonumtoc .tocnumber { display:none; } .nonumtoc #toc ul, .nonumtoc .toc ul { line-height: 1.5em; list-style: none; margin: .3em 0 0; padding: 0; } .nonumtoc #toc ul ul, .nonumtoc .toc ul ul { margin: 0 0 0 2em; } /* Allow limiting of which header levels are shown in a TOC;
, for instance, will limit to showing ==headings== and ===headings=== but no further (as long as there are no =headings= on the page, which there shouldn't be according to the MoS). */ .toclimit-2 .toclevel-2 {display:none;} .toclimit-3 .toclevel-3 {display:none;} .toclimit-4 .toclevel-4 {display:none;} .toclimit-5 .toclevel-5 {display:none;} .toclimit-6 .toclevel-6 {display:none;} .toclimit-7 .toclevel-7 {display:none;} /* Allow transcluded pages to display in lists rather than a table. Compatible in Firefox; incompatible in IE6. */ .listify td {display:list-item;} .listify tr {display:block;} .listify table {display:block;} /* Styling for Template:Quote */ blockquote.templatequote { margin-top: 0; } blockquote.templatequote div.templatequotecite { line-height: 1em; text-align: left; padding-left: 2em; margin-top: 0; } blockquote.templatequote div.templatequotecite cite { font-size: 85%; } div.user-block { padding: 5px; border: 1px solid #A9A9A9; background-color: #FFEFD5; } /* Prevents line breaks in links */ .nowraplinks a { white-space: nowrap; } /* For template documentation */ .template-documentation { clear: both; margin: 1em 0 0 0; border: 1px solid #aaa; background-color: #ecfcf4; padding: 5px; } .thumbinner { min-width: 100px; } /* Inline div's in ImageMaps (code borrowed from de.wiki) */ .imagemap-inline div { display: inline; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Reduce line-height for and */ sup, sub { line-height: 1em; } /* The backgrounds for galleries. */ #content .gallerybox div.thumb { background-color: #F9F9F9; /* Light gray padding */ } .gallerybox .thumb img { background: white url("http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png") repeat; } /* .ns-0 = articles, .ns-2 = user pages, .ns-100 = portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background: white; /* No chequered background */ } /* Prevent boxes from overlapping the category listings */ #mw-subcategories, #mw-pages, #mw-category-media { clear: both; } /* Selectively hide headers in WikiProject banners */ .wpb .wpb-header {display: none} .wpbs-inner .wpb .wpb-header {display: block} /* for IE */ .wpbs-inner .wpb .wpb-header {display: table-row} /* for real browsers */ /*
*/#$%_http://en.wikipedia.org/w/index.php?title=MediaWiki:Print.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400OPbplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver* &,-345YZ[\]^_`abcdefghijklmnopqrstuvw{|U$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1)( '()$+WNS.base[NS.relative_http://en.wikipedia.org/w/index.php?title=MediaWiki:Print.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400./01X$classesZ$classname12UNSURLXNSObject#A' ` 6789IWNS.keysZNS.objects':;<=>?@ABCDEFGH JKLMNOPQRSTUVWX !"#$%&WX-Cache]Cache-Control\X-Powered-By_Content-Encoding\Content-TypeVServer^Content-LengthTDateZConnectionSAgeWExpiresSVia^X-Vary-Options^X-Cache-LookupTVary_8HIT from sq19.wikimedia.org, HIT from sq17.wikimedia.org_:public, s-maxage=2678400, max-age=2678400, max-age=2592000_PHP/5.2.4-2ubuntu5wm1Tgzip_text/css; charset=utf-8VApacheS726_Wed, 01 Oct 2008 15:25:46 GMTZkeep-aliveR10_Fri, 31 Oct 2008 15:25:46 GMT_`1.0 sq19.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)_"Accept-Encoding;list-contains=gzip_@HIT from sq19.wikimedia.org:3128, HIT from sq17.wikimedia.org:80_Accept-Encoding./xyyz2_NSMutableDictionary\NSDictionary./}~~2_NSHTTPURLResponse]NSURLResponse)27:PRd   !#%79;=?ACEGIKMOQSU]kx,i\ "0O/* ATTENTION ADMINISTRATORS: This is the print CSS for all skins. Any major changes to this page should be first proposed on the [[Wikipedia:Village pump (technical)]]. Testing can be done on your own user Monobook.css. In [[Mozilla]] and [[Opera (web browser)|Opera]], you can also test style changes dynamically with the [http://www.squarefree.com/bookmarklets/webdevel.html test styles] bookmarklet from squarefree.com. It pops up a window for adding style rules, and updates the page as you type. Always check with the [http://jigsaw.w3.org/css-validator/ W3C CSS Validation Service] before and after any changes. See also: [[Wikipedia:Catalogue of CSS classes]]. Thank you. */ /*
 */

/* Do not expand URLs within citations for printing. The URLs should be included explicitly, to avoid confusion */

#content cite a.external.text:after {
    display: none;
}

.navbox {
    display: none;
}

.infobox.sisterproject {
    display: none;
}

/* When in mainspace, don't print article message boxes */

.ns-0 .ambox {
    display: none;
}

/* Removes useless links from printout */

#privacy, #about, #disclaimer {
    display: none;
}

.editlink, .noprint, .metadata, .dablink {
    display: none
}


/* 
*/'()_http://en.wikipedia.org/w/index.php?title=MediaWiki:Monobook.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400OEbplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver* &,-345YZ[\]^_`abcdefghijklmnopqrstuvw{|U$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1)( '()$+WNS.base[NS.relative_http://en.wikipedia.org/w/index.php?title=MediaWiki:Monobook.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400./01X$classesZ$classname12UNSURLXNSObject#A'Y 6789IWNS.keysZNS.objects':;<=>?@ABCDEFGH JKLMNOPQRSTUVWX !"#$%&WX-Cache]Cache-Control\X-Powered-By_Content-Encoding\Content-TypeVServer^Content-LengthTDateZConnectionSAgeWExpiresSVia^X-Vary-Options^X-Cache-LookupTVary_8HIT from sq36.wikimedia.org, HIT from sq17.wikimedia.org_:public, s-maxage=2678400, max-age=2678400, max-age=2592000YPHP/5.2.1Tgzip_text/css; charset=utf-8VApacheT2210_Wed, 01 Oct 2008 15:25:55 GMTZkeep-aliveQ1_Fri, 31 Oct 2008 15:25:55 GMT_`1.0 sq36.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)_"Accept-Encoding;list-contains=gzip_@HIT from sq36.wikimedia.org:3128, HIT from sq17.wikimedia.org:80_Accept-Encoding./xyyz2_NSMutableDictionary\NSDictionary ./}~~2_NSHTTPURLResponse]NSURLResponse)27:PRd   "$&(:<>@BDFHJLNPRTVX`n{/lv{Qv%O /*
 */

/* Don't display some stuff on the main page */
body.page-Main_Page #deleteconfirm, body.page-Portal_Wikipedia #deleteconfirm,
body.page-Main_Page #t-cite,
body.page-Main_Page #lastmod, body.page-Portal_Wikipedia #lastmod, 
body.page-Main_Page #siteSub, body.page-Portal_Wikipedia #siteSub, 
body.page-Main_Page #contentSub, body.page-Portal_Wikipedia #contentSub, 
body.page-Main_Page h1.firstHeading, body.page-Portal_Wikipedia h1.firstHeading {
    display: none !important;
}

/* Donations link to be uncommented during fund-raising drives  */
#siteNotice {
    margin-top: 5px;
    margin-bottom: -.5em;
    text-align: center;
    background-color: transparent;
}

/*
#fundraising {
    text-align: center;
    border: 1px solid gray;
    padding: 5px;
}
*/

/* BEGIN LIGHT BLUE SECTION
   Make content area light blue in all namespaces except articles (main namespace). 
   This is done by setting the background color for all #content areas 
   to light blue, and then overriding it back to white for any #content 
   enclosed in a .ns-0 (main namespace). We do the same for the "tab" 
   backgrounds and some other objects. */

#content,
#p-cactions li a:hover, #p-cactions li.selected a,
#content div.thumb {    /* "Margin" for thumbs, padding for galleries */
    background-color: #F8FCFF;   /* Light blue */
}
#p-cactions li a {
    background-color: #F7F9FB;   /* Light blue-gray inactive tabs */
}

.ns-0 #content,
.ns-0 #p-cactions li a:hover, .ns-0 #p-cactions li.selected a, 
.ns-0 #content div.thumb {
    background-color: white;     /* Set back to white for articles */
}
.ns-0 #p-cactions li a {
    background-color: #FBFBFB;   /* Light gray inactive tabs in articles */
}

/* Category lists and diffs transparent instead of white. */
#mw-subcategories table, #mw-pages table,
table.diff, td.diff-otitle, td.diff-ntitle {
    background-color: transparent;
}
/* END LIGHT BLUE SECTION */

/* Talk page tab "+" / "new section". 
   Sets the same padding as the other tabs have. */
#p-cactions #ca-addsection a {
    padding-left: .8em;
    padding-right: .8em;
}


/* block quotations */
#content blockquote {
    font-size: 93.75%; /* equivalent of 15px in 16px default */
    margin: 1em 1.6em; /* same indent as an unordered list */
}
#content blockquote p {
    line-height:inherit;
}

/* Display "From Wikipedia, the free encyclopedia" */
#siteSub {
    display: inline;
    font-size: 92%;
    font-weight: normal;
}

/* Bold 'edit this page' link to encourage newcomers */
#ca-edit a { font-weight: bold !important; }

@media print {
    #content { background: #fff; } /* white background on print */
}

/* Accessibility experiment: make diff changes not just colour-based */ 

.diffchange {
    font-weight: bold;
    background-color: inherit;
}

td.diff-addedline, td.diff-deletedline, td.diff-context {
    vertical-align: top;
    font-size: 85%;
    color: inherit;
}

#pt-login {
    font-weight: bold;
    font-size: 110%;
}

p.error {
    font-weight: bold;
}


/* TOC margin in articles (and article previews). */
.ns-0 #wikiPreview > table#toc,
.ns-0 #bodyContent > table#toc {
    margin-top: .5em;
}


/* Class styles */

/* .toccolours added here because version in 
   monobook/main.css wasn't being used by the print style */
.toccolours { 
    border: 1px solid #aaa;
    background-color: #f9f9f9;
    padding: 5px;
    font-size: 95%;
}

/* Don't underline links in portlets/specialchars even with pref "Underline links:Always" */
.portlet a, #editpage-specialchars a  { text-decoration: none; }
.portlet a:hover, #editpage-specialchars a:hover { text-decoration: underline; }

/* For positioning icons at top-right, used in Templates
   "Spoken Article" and "Featured Article" */
div.topicon {
    position: absolute; 
    z-index: 100; 
    top: 10px;
    display: block !important;
}

#coordinates {  
    position: absolute;
    z-index: 1;
    border: none;
    background: none;
    right: 30px;
    top: 3.7em;
    float: right;
    margin: 0.0em;
    padding: 0.0em;
    line-height: 1.5em;
    text-align: right;
    text-indent: 0;
    font-size: 85%;
    text-transform: none;
    white-space: nowrap;
}

.portlet li {
    list-style-image: url("http://upload.wikimedia.org/wikipedia/en/1/18/Monobook-bullet.png");
}

li.FA {
    list-style-image: url("http://upload.wikimedia.org/wikipedia/en/d/d4/Monobook-bullet-star.png");
}

/* Infobox template style */
.infobox {
    border: 1px solid #aaa;
    background-color: #f9f9f9;
    color: black;
}

.infobox.bordered td,
.infobox.bordered th {
    border: 1px solid #aaa;
}

/* Styles for bordered infobox with merged rows */
.infobox.bordered .mergedtoprow td,
.infobox.bordered .mergedtoprow th {
    border-top: 1px solid #aaa;
    border-right: 1px solid #aaa;
}

.infobox.bordered .mergedrow td,
.infobox.bordered .mergedrow th {
    border-right: 1px solid #aaa;
}

/* Makes the background of a framed image white instead of gray. */
/* Only visible with transparent images. */
div.thumb div a img {
    background-color: #fff;
}

/* Remove white border from thumbnails */
div.thumb {
    border: none;
}

div.tright {
    border: none;
    margin: 0.5em 0 0.8em 1.4em;
}

div.tleft {
    border: none;
    margin: 0.5em 1.4em 0.8em 0;
}

/* Allow disabling of "external" color on internal links in some situations */
#bodyContent .plainlinks2 a.external[href^="http://en.wikipedia.org"] {
    color: #002bb8 !important
}

/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors > li {
    list-style: none;
}

ul.permissions-errors {
    margin: 0;
}

/* 
*/+,-_Mhttp://en.wikipedia.org/w/index.php?title=-&action=raw&maxage=2678400&gen=cssObplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver* &,-345YZ[\]^_`abcdefghijklmnopqrstuvw{|U$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1)( '()$+WNS.base[NS.relative_Mhttp://en.wikipedia.org/w/index.php?title=-&action=raw&maxage=2678400&gen=css./01X$classesZ$classname12UNSURLXNSObject#A' 6789IWNS.keysZNS.objects':;<=>?@ABCDEFGH JKLMNOPQRSTUVWX !"#$%&WX-Cache]Cache-Control\X-Powered-By_Content-Encoding\Content-TypeVServer^Content-LengthTDateZConnectionSAgeWExpiresSVia^X-Vary-Options^X-Cache-LookupTVary_8HIT from sq23.wikimedia.org, HIT from sq17.wikimedia.org_:public, s-maxage=2678400, max-age=2678400, max-age=2592000_PHP/5.2.4-2ubuntu5wm1Tgzip_text/css; charset=utf-8VApacheR92_Wed, 01 Oct 2008 15:25:38 GMTZkeep-aliveR18_Fri, 31 Oct 2008 15:25:38 GMT_`1.0 sq23.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)_"Accept-Encoding;list-contains=gzip_@HIT from sq23.wikimedia.org:3128, HIT from sq17.wikimedia.org:80_Accept-Encoding./xyyz2_NSMutableDictionary\NSDictionaryK./}~~2_NSHTTPURLResponse]NSURLResponse)27:PRdhmv  "0=P]dsx.FKelo EOK/* generated user stylesheet */ a.new, #quickbar a.new { color: #CC2200; } /012_8http://en.wikipedia.org/skins-1.5/common/wikibits.js?179Obplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver( &,-345WXYZ[\]^_`abcdefghijklmnopqrswxU$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1'& '()$+WNS.base[NS.relative_8http://en.wikipedia.org/skins-1.5/common/wikibits.js?179./01X$classesZ$classname12UNSURLXNSObject#A'Z&_ 6789HWNS.keysZNS.objects%:;<=>?@ABCDEFG IJKLMNOPQRSTUV !"#$WX-Cache]Cache-Control\Content-TypeVServer^Content-LengthTDateTEtagZConnectionSAgeWExpiresSVia]Accept-Ranges^X-Cache-Lookup]Last-Modified_8HIT from sq33.wikimedia.org, HIT from sq17.wikimedia.org_max-age=2592000_application/x-javascriptVApacheU27737_Wed, 01 Oct 2008 15:25:48 GMT_"6c59-4574c237761c0"Zkeep-aliveQ8_Fri, 31 Oct 2008 15:25:48 GMT_`1.0 sq33.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)Ubytes_@HIT from sq33.wikimedia.org:3128, HIT from sq17.wikimedia.org:80_Sat, 20 Sep 2008 04:20:31 GMT./tuuv2_NSMutableDictionary\NSDictionarylY./yzz{2_NSHTTPURLResponse]NSURLResponse)27:PRdQV_jms|#27<GKSWet.9;[',0FSV[_s|_application/x-javascriptOlY// MediaWiki JavaScript support functions var clientPC = navigator.userAgent.toLowerCase(); // Get client info var is_gecko = /gecko/.test( clientPC ) && !/khtml|spoofer|netscape\/7\.0/.test(clientPC); var webkit_match = clientPC.match(/applewebkit\/(\d+)/); if (webkit_match) { var is_safari = clientPC.indexOf('applewebkit') != -1 && clientPC.indexOf('spoofer') == -1; var is_safari_win = is_safari && clientPC.indexOf('windows') != -1; var webkit_version = parseInt(webkit_match[1]); } var is_khtml = navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ); // For accesskeys; note that FF3+ is included here! var is_ff2 = /firefox\/[2-9]|minefield\/3/.test( clientPC ); // These aren't used here, but some custom scripts rely on them var is_ff2_win = is_ff2 && clientPC.indexOf('windows') != -1; var is_ff2_x11 = is_ff2 && clientPC.indexOf('x11') != -1; if (clientPC.indexOf('opera') != -1) { var is_opera = true; var is_opera_preseven = window.opera && !document.childNodes; var is_opera_seven = window.opera && document.childNodes; var is_opera_95 = /opera\/(9.[5-9]|[1-9][0-9])/.test( clientPC ); } // Global external objects used by this script. /*extern ta, stylepath, skin */ // add any onload functions in this hook (please don't hard-code any events in the xhtml source) var doneOnloadHook; if (!window.onloadFuncts) { var onloadFuncts = []; } function addOnloadHook(hookFunct) { // Allows add-on scripts to add onload functions if(!doneOnloadHook) { onloadFuncts[onloadFuncts.length] = hookFunct; } else { hookFunct(); // bug in MSIE script loading } } function hookEvent(hookName, hookFunct) { if (window.addEventListener) { window.addEventListener(hookName, hookFunct, false); } else if (window.attachEvent) { window.attachEvent("on" + hookName, hookFunct); } } function importScript(page) { return importScriptURI(wgScript + '?action=raw&ctype=text/javascript&title=' + encodeURIComponent(page.replace(/ /g,'_'))); } var loadedScripts = {}; // included-scripts tracker function importScriptURI(url) { if (loadedScripts[url]) { return null; } loadedScripts[url] = true; var s = document.createElement('script'); s.setAttribute('src',url); s.setAttribute('type','text/javascript'); document.getElementsByTagName('head')[0].appendChild(s); return s; } function importStylesheet(page) { return importStylesheetURI(wgScript + '?action=raw&ctype=text/css&title=' + encodeURIComponent(page.replace(/ /g,'_'))); } function importStylesheetURI(url) { return document.createStyleSheet ? document.createStyleSheet(url) : appendCSS('@import "' + url + '";'); } function appendCSS(text) { var s = document.createElement('style'); s.type = 'text/css'; s.rel = 'stylesheet'; if (s.styleSheet) s.styleSheet.cssText = text //IE else s.appendChild(document.createTextNode(text + '')) //Safari sometimes borks on null document.getElementsByTagName('head')[0].appendChild(s); return s; } // special stylesheet links if (typeof stylepath != 'undefined' && typeof skin != 'undefined') { if (is_opera_preseven) { importStylesheetURI(stylepath+'/'+skin+'/Opera6Fixes.css'); } else if (is_opera_seven && !is_opera_95) { importStylesheetURI(stylepath+'/'+skin+'/Opera7Fixes.css'); } else if (is_khtml) { importStylesheetURI(stylepath+'/'+skin+'/KHTMLFixes.css'); } } if (wgBreakFrames) { // Un-trap us from framesets if (window.top != window) { window.top.location = window.location; } } // for enhanced RecentChanges function toggleVisibility(_levelId, _otherId, _linkId) { var thisLevel = document.getElementById(_levelId); var otherLevel = document.getElementById(_otherId); var linkLevel = document.getElementById(_linkId); if (thisLevel.style.display == 'none') { thisLevel.style.display = 'block'; otherLevel.style.display = 'none'; linkLevel.style.display = 'inline'; } else { thisLevel.style.display = 'none'; otherLevel.style.display = 'inline'; linkLevel.style.display = 'none'; } } function showTocToggle() { if (document.createTextNode) { // Uses DOM calls to avoid document.write + XHTML issues var linkHolder = document.getElementById('toctitle'); if (!linkHolder) { return; } var outerSpan = document.createElement('span'); outerSpan.className = 'toctoggle'; var toggleLink = document.createElement('a'); toggleLink.id = 'togglelink'; toggleLink.className = 'internal'; toggleLink.href = 'javascript:toggleToc()'; toggleLink.appendChild(document.createTextNode(tocHideText)); outerSpan.appendChild(document.createTextNode('[')); outerSpan.appendChild(toggleLink); outerSpan.appendChild(document.createTextNode(']')); linkHolder.appendChild(document.createTextNode(' ')); linkHolder.appendChild(outerSpan); var cookiePos = document.cookie.indexOf("hidetoc="); if (cookiePos > -1 && document.cookie.charAt(cookiePos + 8) == 1) { toggleToc(); } } } function changeText(el, newText) { // Safari work around if (el.innerText) { el.innerText = newText; } else if (el.firstChild && el.firstChild.nodeValue) { el.firstChild.nodeValue = newText; } } function toggleToc() { var toc = document.getElementById('toc').getElementsByTagName('ul')[0]; var toggleLink = document.getElementById('togglelink'); if (toc && toggleLink && toc.style.display == 'none') { changeText(toggleLink, tocHideText); toc.style.display = 'block'; document.cookie = "hidetoc=0"; } else { changeText(toggleLink, tocShowText); toc.style.display = 'none'; document.cookie = "hidetoc=1"; } } var mwEditButtons = []; var mwCustomEditButtons = []; // eg to add in MediaWiki:Common.js function escapeQuotes(text) { var re = new RegExp("'","g"); text = text.replace(re,"\\'"); re = new RegExp("\\n","g"); text = text.replace(re,"\\n"); return escapeQuotesHTML(text); } function escapeQuotesHTML(text) { var re = new RegExp('&',"g"); text = text.replace(re,"&"); re = new RegExp('"',"g"); text = text.replace(re,"""); re = new RegExp('<',"g"); text = text.replace(re,"<"); re = new RegExp('>',"g"); text = text.replace(re,">"); return text; } /** * Set the accesskey prefix based on browser detection. */ var tooltipAccessKeyPrefix = 'alt-'; if (is_opera) { tooltipAccessKeyPrefix = 'shift-esc-'; } else if (!is_safari_win && is_safari && webkit_version > 526) { tooltipAccessKeyPrefix = 'ctrl-alt-'; } else if (!is_safari_win && (is_safari || clientPC.indexOf('mac') != -1 || clientPC.indexOf('konqueror') != -1 )) { tooltipAccessKeyPrefix = 'ctrl-'; } else if (is_ff2) { tooltipAccessKeyPrefix = 'alt-shift-'; } var tooltipAccessKeyRegexp = /\[(ctrl-)?(alt-)?(shift-)?(esc-)?(.)\]$/; /** * Add the appropriate prefix to the accesskey shown in the tooltip. * If the nodeList parameter is given, only those nodes are updated; * otherwise, all the nodes that will probably have accesskeys by * default are updated. * * @param Array nodeList -- list of elements to update */ function updateTooltipAccessKeys( nodeList ) { if ( !nodeList ) { // skins without a "column-one" element don't seem to have links with accesskeys either var columnOne = document.getElementById("column-one"); if ( columnOne ) updateTooltipAccessKeys( columnOne.getElementsByTagName("a") ); // these are rare enough that no such optimization is needed updateTooltipAccessKeys( document.getElementsByTagName("input") ); updateTooltipAccessKeys( document.getElementsByTagName("label") ); return; } for ( var i = 0; i < nodeList.length; i++ ) { var element = nodeList[i]; var tip = element.getAttribute("title"); if ( tip && tooltipAccessKeyRegexp.exec(tip) ) { tip = tip.replace(tooltipAccessKeyRegexp, "["+tooltipAccessKeyPrefix+"$5]"); element.setAttribute("title", tip ); } } } /** * Add a link to one of the portlet menus on the page, including: * * p-cactions: Content actions (shown as tabs above the main content in Monobook) * p-personal: Personal tools (shown at the top right of the page in Monobook) * p-navigation: Navigation * p-tb: Toolbox * * This function exists for the convenience of custom JS authors. All * but the first three parameters are optional, though providing at * least an id and a tooltip is recommended. * * By default the new link will be added to the end of the list. To * add the link before a given existing item, pass the DOM node of * that item (easily obtained with document.getElementById()) as the * nextnode parameter; to add the link _after_ an existing item, pass * the node's nextSibling instead. * * @param String portlet -- id of the target portlet ("p-cactions", "p-personal", "p-navigation" or "p-tb") * @param String href -- link URL * @param String text -- link text (will be automatically lowercased by CSS for p-cactions in Monobook) * @param String id -- id of the new item, should be unique and preferably have the appropriate prefix ("ca-", "pt-", "n-" or "t-") * @param String tooltip -- text to show when hovering over the link, without accesskey suffix * @param String accesskey -- accesskey to activate this link (one character, try to avoid conflicts) * @param Node nextnode -- the DOM node before which the new item should be added, should be another item in the same list * * @return Node -- the DOM node of the new item (an LI element) or null */ function addPortletLink(portlet, href, text, id, tooltip, accesskey, nextnode) { var node = document.getElementById(portlet); if ( !node ) return null; node = node.getElementsByTagName( "ul" )[0]; if ( !node ) return null; var link = document.createElement( "a" ); link.appendChild( document.createTextNode( text ) ); link.href = href; var item = document.createElement( "li" ); item.appendChild( link ); if ( id ) item.id = id; if ( accesskey ) { link.setAttribute( "accesskey", accesskey ); tooltip += " ["+accesskey+"]"; } if ( tooltip ) { link.setAttribute( "title", tooltip ); } if ( accesskey && tooltip ) { updateTooltipAccessKeys( new Array( link ) ); } if ( nextnode && nextnode.parentNode == node ) node.insertBefore( item, nextnode ); else node.appendChild( item ); // IE compatibility (?) return item; } /** * Set up accesskeys/tooltips from the deprecated ta array. If doId * is specified, only set up for that id. Note that this function is * deprecated and will not be supported indefinitely -- use * updateTooltipAccessKey() instead. * * @param mixed doId string or null */ function akeytt( doId ) { // A lot of user scripts (and some of the code below) break if // ta isn't defined, so we make sure it is. Explictly using // window.ta avoids a "ta is not defined" error. if (!window.ta) window.ta = new Array; // Make a local, possibly restricted, copy to avoid clobbering // the original. var ta; if ( doId ) { ta = [doId]; } else { ta = window.ta; } // Now deal with evil deprecated ta var watchCheckboxExists = document.getElementById( 'wpWatchthis' ) ? true : false; for (var id in ta) { var n = document.getElementById(id); if (n) { var a = null; var ak = ''; // Are we putting accesskey in it if (ta[id][0].length > 0) { // Is this object a object? If not assume it's the next child. if (n.nodeName.toLowerCase() == "a") { a = n; } else { a = n.childNodes[0]; } // Don't add an accesskey for the watch tab if the watch // checkbox is also available. if (a && ((id != 'ca-watch' && id != 'ca-unwatch') || !watchCheckboxExists)) { a.accessKey = ta[id][0]; ak = ' ['+tooltipAccessKeyPrefix+ta[id][0]+']'; } } else { // We don't care what type the object is when assigning tooltip a = n; ak = ''; } if (a) { a.title = ta[id][1]+ak; } } } } var checkboxes; var lastCheckbox; function setupCheckboxShiftClick() { checkboxes = []; lastCheckbox = null; var inputs = document.getElementsByTagName('input'); addCheckboxClickHandlers(inputs); } function addCheckboxClickHandlers(inputs, start) { if ( !start) start = 0; var finish = start + 250; if ( finish > inputs.length ) finish = inputs.length; for ( var i = start; i < finish; i++ ) { var cb = inputs[i]; if ( !cb.type || cb.type.toLowerCase() != 'checkbox' ) continue; var end = checkboxes.length; checkboxes[end] = cb; cb.index = end; cb.onclick = checkboxClickHandler; } if ( finish < inputs.length ) { setTimeout( function () { addCheckboxClickHandlers(inputs, finish); }, 200 ); } } function checkboxClickHandler(e) { if (typeof e == 'undefined') { e = window.event; } if ( !e.shiftKey || lastCheckbox === null ) { lastCheckbox = this.index; return true; } var endState = this.checked; var start, finish; if ( this.index < lastCheckbox ) { start = this.index + 1; finish = lastCheckbox; } else { start = lastCheckbox; finish = this.index - 1; } for (var i = start; i <= finish; ++i ) { checkboxes[i].checked = endState; } lastCheckbox = this.index; return true; } function toggle_element_activation(ida,idb) { if (!document.getElementById) { return; } document.getElementById(ida).disabled=true; document.getElementById(idb).disabled=false; } function toggle_element_check(ida,idb) { if (!document.getElementById) { return; } document.getElementById(ida).checked=true; document.getElementById(idb).checked=false; } /* Written by Jonathan Snook, http://www.snook.ca/jonathan Add-ons by Robert Nyman, http://www.robertnyman.com Author says "The credit comment is all it takes, no license. Go crazy with it!:-)" From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/ */ function getElementsByClassName(oElm, strTagName, oClassNames){ var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName); var arrReturnElements = new Array(); var arrRegExpClassNames = new Array(); if(typeof oClassNames == "object"){ for(var i=0; i 0) { if (table.tHead && table.tHead.rows.length > 0) { firstRow = table.tHead.rows[table.tHead.rows.length-1]; } else { firstRow = table.rows[0]; } } if (!firstRow) return; // We have a first row: assume it's the header, and make its contents clickable links for (var i = 0; i < firstRow.cells.length; i++) { var cell = firstRow.cells[i]; if ((" "+cell.className+" ").indexOf(" unsortable ") == -1) { cell.innerHTML += '  ↓'; } } if (ts_alternate_row_colors) { ts_alternate(table); } } function ts_getInnerText(el) { if (typeof el == "string") return el; if (typeof el == "undefined") { return el }; if (el.textContent) return el.textContent; // not needed but it is faster if (el.innerText) return el.innerText; // IE doesn't have textContent var str = ""; var cs = el.childNodes; var l = cs.length; for (var i = 0; i < l; i++) { switch (cs[i].nodeType) { case 1: //ELEMENT_NODE str += ts_getInnerText(cs[i]); break; case 3: //TEXT_NODE str += cs[i].nodeValue; break; } } return str; } function ts_resortTable(lnk) { // get the span var span = lnk.getElementsByTagName('span')[0]; var td = lnk.parentNode; var tr = td.parentNode; var column = td.cellIndex; var table = tr.parentNode; while (table && !(table.tagName && table.tagName.toLowerCase() == 'table')) table = table.parentNode; if (!table) return; // Work out a type for the column if (table.rows.length <= 1) return; // Skip the first row if that's where the headings are var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1); var itm = ""; for (var i = rowStart; i < table.rows.length; i++) { if (table.rows[i].cells.length > column) { itm = ts_getInnerText(table.rows[i].cells[column]); itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, ""); if (itm != "") break; } } var sortfn = ts_sort_caseinsensitive; if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/)) sortfn = ts_sort_date; else if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/)) sortfn = ts_sort_date; else if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/)) sortfn = ts_sort_date; // pound dollar euro yen currency cents else if (itm.match(/(^[\u00a3$\u20ac\u00a4\u00a5]|\u00a2$)/)) sortfn = ts_sort_currency; // We allow a trailing percent sign, which we just strip. This works fine // if percents and regular numbers aren't being mixed. else if (itm.match(/^[+-]?\d[\d,]*(\.[\d,]*)?([eE][+-]?\d[\d,]*)?\%?$/) || itm.match(/^[+-]?\.\d[\d,]*([eE][+-]?\d[\d,]*)?\%?$/) || itm.match(/^0x[\da-f]+$/i)) sortfn = ts_sort_numeric; var reverse = (span.getAttribute("sortdir") == 'down'); var newRows = new Array(); for (var j = rowStart; j < table.rows.length; j++) { var row = table.rows[j]; var keyText = ts_getInnerText(row.cells[column]); var oldIndex = (reverse ? -j : j); newRows[newRows.length] = new Array(row, keyText, oldIndex); } newRows.sort(sortfn); var arrowHTML; if (reverse) { arrowHTML = '↓'; newRows.reverse(); span.setAttribute('sortdir','up'); } else { arrowHTML = '↑'; span.setAttribute('sortdir','down'); } // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones // don't do sortbottom rows for (var i = 0; i < newRows.length; i++) { if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1) table.tBodies[0].appendChild(newRows[i][0]); } // do sortbottom rows only for (var i = 0; i < newRows.length; i++) { if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1) table.tBodies[0].appendChild(newRows[i][0]); } // Delete any other arrows there may be showing var spans = getElementsByClassName(tr, "span", "sortarrow"); for (var i = 0; i < spans.length; i++) { spans[i].innerHTML = '↓'; } span.innerHTML = arrowHTML; if (ts_alternate_row_colors) { ts_alternate(table); } } function ts_dateToSortKey(date) { // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX if (date.length == 11) { switch (date.substr(3,3).toLowerCase()) { case "jan": var month = "01"; break; case "feb": var month = "02"; break; case "mar": var month = "03"; break; case "apr": var month = "04"; break; case "may": var month = "05"; break; case "jun": var month = "06"; break; case "jul": var month = "07"; break; case "aug": var month = "08"; break; case "sep": var month = "09"; break; case "oct": var month = "10"; break; case "nov": var month = "11"; break; case "dec": var month = "12"; break; // default: var month = "00"; } return date.substr(7,4)+month+date.substr(0,2); } else if (date.length == 10) { if (ts_europeandate == false) { return date.substr(6,4)+date.substr(0,2)+date.substr(3,2); } else { return date.substr(6,4)+date.substr(3,2)+date.substr(0,2); } } else if (date.length == 8) { yr = date.substr(6,2); if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; } if (ts_europeandate == true) { return yr+date.substr(3,2)+date.substr(0,2); } else { return yr+date.substr(0,2)+date.substr(3,2); } } return "00000000"; } function ts_parseFloat(num) { if (!num) return 0; num = parseFloat(num.replace(/,/g, "")); return (isNaN(num) ? 0 : num); } function ts_sort_date(a,b) { var aa = ts_dateToSortKey(a[1]); var bb = ts_dateToSortKey(b[1]); return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]); } function ts_sort_currency(a,b) { var aa = ts_parseFloat(a[1].replace(/[^0-9.,]/g,'')); var bb = ts_parseFloat(b[1].replace(/[^0-9.,]/g,'')); return (aa != bb ? aa - bb : a[2] - b[2]); } function ts_sort_numeric(a,b) { var aa = ts_parseFloat(a[1]); var bb = ts_parseFloat(b[1]); return (aa != bb ? aa - bb : a[2] - b[2]); } function ts_sort_caseinsensitive(a,b) { var aa = a[1].toLowerCase(); var bb = b[1].toLowerCase(); return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]); } function ts_sort_default(a,b) { return (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]); } function ts_alternate(table) { // Take object table and get all it's tbodies. var tableBodies = table.getElementsByTagName("tbody"); // Loop through these tbodies for (var i = 0; i < tableBodies.length; i++) { // Take the tbody, and get all it's rows var tableRows = tableBodies[i].getElementsByTagName("tr"); // Loop through these rows // Start at 1 because we want to leave the heading row untouched for (var j = 0; j < tableRows.length; j++) { // Check if j is even, and apply classes for both possible results var oldClasses = tableRows[j].className.split(" "); var newClassName = ""; for (var k = 0; k < oldClasses.length; k++) { if (oldClasses[k] != "" && oldClasses[k] != "even" && oldClasses[k] != "odd") newClassName += oldClasses[k] + " "; } tableRows[j].className = newClassName + (j % 2 == 0 ? "even" : "odd"); } } } /* * End of table sorting code */ /** * Add a cute little box at the top of the screen to inform the user of * something, replacing any preexisting message. * * @param String -or- Dom Object message HTML to be put inside the right div * @param String className Used in adding a class; should be different for each * call to allow CSS/JS to hide different boxes. null = no class used. * @return Boolean True on success, false on failure */ function jsMsg( message, className ) { if ( !document.getElementById ) { return false; } // We special-case skin structures provided by the software. Skins that // choose to abandon or significantly modify our formatting can just define // an mw-js-message div to start with. var messageDiv = document.getElementById( 'mw-js-message' ); if ( !messageDiv ) { messageDiv = document.createElement( 'div' ); if ( document.getElementById( 'column-content' ) && document.getElementById( 'content' ) ) { // MonoBook, presumably document.getElementById( 'content' ).insertBefore( messageDiv, document.getElementById( 'content' ).firstChild ); } else if ( document.getElementById('content') && document.getElementById( 'article' ) ) { // Non-Monobook but still recognizable (old-style) document.getElementById( 'article').insertBefore( messageDiv, document.getElementById( 'article' ).firstChild ); } else { return false; } } messageDiv.setAttribute( 'id', 'mw-js-message' ); if( className ) { messageDiv.setAttribute( 'class', 'mw-js-message-'+className ); } if (typeof message === 'object') { while (messageDiv.hasChildNodes()) // Remove old content messageDiv.removeChild(messageDiv.firstChild); messageDiv.appendChild (message); // Append new content } else { messageDiv.innerHTML = message; } return true; } /** * Inject a cute little progress spinner after the specified element * * @param element Element to inject after * @param id Identifier string (for use with removeSpinner(), below) */ function injectSpinner( element, id ) { var spinner = document.createElement( "img" ); spinner.id = "mw-spinner-" + id; spinner.src = stylepath + "/common/images/spinner.gif"; spinner.alt = spinner.title = "..."; if( element.nextSibling ) { element.parentNode.insertBefore( spinner, element.nextSibling ); } else { element.parentNode.appendChild( spinner ); } } /** * Remove a progress spinner added with injectSpinner() * * @param id Identifier string */ function removeSpinner( id ) { var spinner = document.getElementById( "mw-spinner-" + id ); if( spinner ) { spinner.parentNode.removeChild( spinner ); } } function runOnloadHook() { // don't run anything below this for non-dom browsers if (doneOnloadHook || !(document.getElementById && document.getElementsByTagName)) { return; } // set this before running any hooks, since any errors below // might cause the function to terminate prematurely doneOnloadHook = true; updateTooltipAccessKeys( null ); akeytt( null ); setupCheckboxShiftClick(); sortables_init(); // Run any added-on functions for (var i = 0; i < onloadFuncts.length; i++) { onloadFuncts[i](); } } /** * Add an event handler to an element * * @param Element element Element to add handler to * @param String attach Event to attach to * @param callable handler Event handler callback */ function addHandler( element, attach, handler ) { if( window.addEventListener ) { element.addEventListener( attach, handler, false ); } else if( window.attachEvent ) { element.attachEvent( 'on' + attach, handler ); } } /** * Add a click event handler to an element * * @param Element element Element to add handler to * @param callable handler Event handler callback */ function addClickHandler( element, handler ) { addHandler( element, 'click', handler ); } //note: all skins should call runOnloadHook() at the end of html output, // so the below should be redundant. It's there just in case. hookEvent("load", runOnloadHook); 4516_4http://en.wikipedia.org/skins-1.5/common/ajax.js?179Obplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver( &,-345WXYZ[\]^_`abcdefghijklmnopqrswxU$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1'& '()$+WNS.base[NS.relative_4http://en.wikipedia.org/skins-1.5/common/ajax.js?179./01X$classesZ$classname12UNSURLXNSObject#A' / 6789HWNS.keysZNS.objects%:;<=>?@ABCDEFG IJKLMNOPQRSTUV !"#$WX-Cache]Cache-Control\Content-TypeVServer^Content-LengthTDateTEtagZConnectionSAgeWExpiresSVia]Accept-Ranges^X-Cache-Lookup]Last-Modified_9MISS from sq30.wikimedia.org, HIT from sq34.wikimedia.org_max-age=2592000_application/x-javascriptVApacheT4777_Wed, 01 Oct 2008 15:25:55 GMT_"12a9-4539b7a50e200"Zkeep-aliveQ2_Fri, 31 Oct 2008 15:25:55 GMT_`1.0 sq30.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq34.wikimedia.org:80 (squid/2.6.STABLE21)Ubytes_@HIT from sq30.wikimedia.org:3128, HIT from sq34.wikimedia.org:80_Mon, 04 Aug 2008 05:19:04 GMT./tuuv2_NSMutableDictionary\NSDictionary./yzz{2_NSHTTPURLResponse]NSURLResponse)27:PRdMR[fiox .38CGOSap~*57W#(,BORW[o|}O// remote scripting library // (c) copyright 2005 modernmethod, inc var sajax_debug_mode = false; var sajax_request_type = "GET"; /** * if sajax_debug_mode is true, this function outputs given the message into * the element with id = sajax_debug; if no such element exists in the document, * it is injected. */ function sajax_debug(text) { if (!sajax_debug_mode) return false; var e= document.getElementById('sajax_debug'); if (!e) { e= document.createElement("p"); e.className= 'sajax_debug'; e.id= 'sajax_debug'; var b= document.getElementsByTagName("body")[0]; if (b.firstChild) b.insertBefore(e, b.firstChild); else b.appendChild(e); } var m= document.createElement("div"); m.appendChild( document.createTextNode( text ) ); e.appendChild( m ); return true; } /** * compatibility wrapper for creating a new XMLHttpRequest object. */ function sajax_init_object() { sajax_debug("sajax_init_object() called..") var A; try { // Try the new style before ActiveX so we don't // unnecessarily trigger warnings in IE 7 when // set to prompt about ActiveX usage A = new XMLHttpRequest(); } catch (e) { try { A=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { A=new ActiveXObject("Microsoft.XMLHTTP"); } catch (oc) { A=null; } } } if (!A) sajax_debug("Could not create connection object."); return A; } /** * Perform an ajax call to mediawiki. Calls are handeled by AjaxDispatcher.php * func_name - the name of the function to call. Must be registered in $wgAjaxExportList * args - an array of arguments to that function * target - the target that will handle the result of the call. If this is a function, * if will be called with the XMLHttpRequest as a parameter; if it's an input * element, its value will be set to the resultText; if it's another type of * element, its innerHTML will be set to the resultText. * * Example: * sajax_do_call('doFoo', [1, 2, 3], document.getElementById("showFoo")); * * This will call the doFoo function via MediaWiki's AjaxDispatcher, with * (1, 2, 3) as the parameter list, and will show the result in the element * with id = showFoo */ function sajax_do_call(func_name, args, target) { var i, x, n; var uri; var post_data; uri = wgServer + ((wgScript == null) ? (wgScriptPath + "/index.php") : wgScript) + "?action=ajax"; if (sajax_request_type == "GET") { if (uri.indexOf("?") == -1) uri = uri + "?rs=" + encodeURIComponent(func_name); else uri = uri + "&rs=" + encodeURIComponent(func_name); for (i = 0; i < args.length; i++) uri = uri + "&rsargs[]=" + encodeURIComponent(args[i]); //uri = uri + "&rsrnd=" + new Date().getTime(); post_data = null; } else { post_data = "rs=" + encodeURIComponent(func_name); for (i = 0; i < args.length; i++) post_data = post_data + "&rsargs[]=" + encodeURIComponent(args[i]); } x = sajax_init_object(); if (!x) { alert("AJAX not supported"); return false; } try { x.open(sajax_request_type, uri, true); } catch (e) { if (window.location.hostname == "localhost") { alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing."); } throw e; } if (sajax_request_type == "POST") { x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1"); x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); } x.setRequestHeader("Pragma", "cache=yes"); x.setRequestHeader("Cache-Control", "no-transform"); x.onreadystatechange = function() { if (x.readyState != 4) return; sajax_debug("received (" + x.status + " " + x.statusText + ") " + x.responseText); //if (x.status != 200) // alert("Error: " + x.status + " " + x.statusText + ": " + x.responseText); //else if ( typeof( target ) == 'function' ) { target( x ); } else if ( typeof( target ) == 'object' ) { if ( target.tagName == 'INPUT' ) { if (x.status == 200) target.value= x.responseText; //else alert("Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")"); } else { if (x.status == 200) target.innerHTML = x.responseText; else target.innerHTML= "
Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")
"; } } else { alert("bad target for sajax_do_call: not a function or object: " + target); } return; } sajax_debug(func_name + " uri = " + uri + " / post = " + post_data); x.send(post_data); sajax_debug(func_name + " waiting.."); delete x; return true; } /** * @return boolean whether the browser supports XMLHttpRequest */ function wfSupportsAjax() { var request = sajax_init_object(); var supportsAjax = request ? true : false; delete request; return supportsAjax; } 891:_9http://en.wikipedia.org/skins-1.5/common/mwsuggest.js?179Obplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver( &,-345WXYZ[\]^_`abcdefghijklmnopqrswxU$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1'& '()$+WNS.base[NS.relative_9http://en.wikipedia.org/skins-1.5/common/mwsuggest.js?179./01X$classesZ$classname12UNSURLXNSObject#A' 3 6789HWNS.keysZNS.objects%:;<=>?@ABCDEFG IJKLMNOPQRSTUV !"#$WX-Cache]Cache-Control\Content-TypeVServer^Content-LengthTDateTEtagZConnectionSAgeWExpiresSVia]Accept-Ranges^X-Cache-Lookup]Last-Modified_9MISS from sq35.wikimedia.org, HIT from sq34.wikimedia.org_max-age=2592000_application/x-javascriptVApacheU25334_Wed, 01 Oct 2008 15:25:54 GMT_"62f6-4574c237761c0"Zkeep-aliveQ3_Fri, 31 Oct 2008 15:25:54 GMT_`1.0 sq35.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq34.wikimedia.org:80 (squid/2.6.STABLE21)Ubytes_@HIT from sq35.wikimedia.org:3128, HIT from sq34.wikimedia.org:80_Sat, 20 Sep 2008 04:20:31 GMT./tuuv2_NSMutableDictionary\NSDictionaryb./yzz{2_NSHTTPURLResponse]NSURLResponse)27:PRdRW`knt}$38=HLTXfu0;=] ).2HUX]au|Ob/* * OpenSearch ajax suggestion engine for MediaWiki * * uses core MediaWiki open search support to fetch suggestions * and show them below search boxes and other inputs * * by Robert Stojnic (April 2008) */ // search_box_id -> Results object var os_map = {}; // cached data, url -> json_text var os_cache = {}; // global variables for suggest_keypress var os_cur_keypressed = 0; var os_last_keypress = 0; var os_keypressed_count = 0; // type: Timer var os_timer = null; // tie mousedown/up events var os_mouse_pressed = false; var os_mouse_num = -1; // if true, the last change was made by mouse (and not keyboard) var os_mouse_moved = false; // delay between keypress and suggestion (in ms) var os_search_timeout = 250; // these pairs of inputs/forms will be autoloaded at startup var os_autoload_inputs = new Array('searchInput', 'searchInput2', 'powerSearchText', 'searchText'); var os_autoload_forms = new Array('searchform', 'searchform2', 'powersearch', 'search' ); // if we stopped the service var os_is_stopped = false; // max lines to show in suggest table var os_max_lines_per_suggest = 7; // number of steps to animate expansion/contraction of container width var os_animation_steps = 6; // num of pixels of smallest step var os_animation_min_step = 2; // delay between steps (in ms) var os_animation_delay = 30; // max width of container in percent of normal size (1 == 100%) var os_container_max_width = 2; // currently active animation timer var os_animation_timer = null; /** Timeout timer class that will fetch the results */ function os_Timer(id,r,query){ this.id = id; this.r = r; this.query = query; } /** Timer user to animate expansion/contraction of container width */ function os_AnimationTimer(r, target){ this.r = r; var current = document.getElementById(r.container).offsetWidth; this.inc = Math.round((target-current) / os_animation_steps); if(this.inc < os_animation_min_step && this.inc >=0) this.inc = os_animation_min_step; // minimal animation step if(this.inc > -os_animation_min_step && this.inc <0) this.inc = -os_animation_min_step; this.target = target; } /** Property class for single search box */ function os_Results(name, formname){ this.searchform = formname; // id of the searchform this.searchbox = name; // id of the searchbox this.container = name+"Suggest"; // div that holds results this.resultTable = name+"Result"; // id base for the result table (+num = table row) this.resultText = name+"ResultText"; // id base for the spans within result tables (+num) this.toggle = name+"Toggle"; // div that has the toggle (enable/disable) link this.query = null; // last processed query this.results = null; // parsed titles this.resultCount = 0; // number of results this.original = null; // query that user entered this.selected = -1; // which result is selected this.containerCount = 0; // number of results visible in container this.containerRow = 0; // height of result field in the container this.containerTotal = 0; // total height of the container will all results this.visible = false; // if container is visible } /** Hide results div */ function os_hideResults(r){ var c = document.getElementById(r.container); if(c != null) c.style.visibility = "hidden"; r.visible = false; r.selected = -1; } /** Show results div */ function os_showResults(r){ if(os_is_stopped) return; os_fitContainer(r); var c = document.getElementById(r.container); r.selected = -1; if(c != null){ c.scrollTop = 0; c.style.visibility = "visible"; r.visible = true; } } function os_operaWidthFix(x){ // TODO: better css2 incompatibility detection here if(is_opera || is_khtml || navigator.userAgent.toLowerCase().indexOf('firefox/1')!=-1){ return 30; // opera&konqueror & old firefox don't understand overflow-x, estimate scrollbar width } return 0; } function os_encodeQuery(value){ if (encodeURIComponent) { return encodeURIComponent(value); } if(escape) { return escape(value); } return null; } function os_decodeValue(value){ if (decodeURIComponent) { return decodeURIComponent(value); } if(unescape){ return unescape(value); } return null; } /** Brower-dependent functions to find window inner size, and scroll status */ function f_clientWidth() { return f_filterResults ( window.innerWidth ? window.innerWidth : 0, document.documentElement ? document.documentElement.clientWidth : 0, document.body ? document.body.clientWidth : 0 ); } function f_clientHeight() { return f_filterResults ( window.innerHeight ? window.innerHeight : 0, document.documentElement ? document.documentElement.clientHeight : 0, document.body ? document.body.clientHeight : 0 ); } function f_scrollLeft() { return f_filterResults ( window.pageXOffset ? window.pageXOffset : 0, document.documentElement ? document.documentElement.scrollLeft : 0, document.body ? document.body.scrollLeft : 0 ); } function f_scrollTop() { return f_filterResults ( window.pageYOffset ? window.pageYOffset : 0, document.documentElement ? document.documentElement.scrollTop : 0, document.body ? document.body.scrollTop : 0 ); } function f_filterResults(n_win, n_docel, n_body) { var n_result = n_win ? n_win : 0; if (n_docel && (!n_result || (n_result > n_docel))) n_result = n_docel; return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result; } /** Get the height available for the results container */ function os_availableHeight(r){ var absTop = document.getElementById(r.container).style.top; var px = absTop.lastIndexOf("px"); if(px > 0) absTop = absTop.substring(0,px); return f_clientHeight() - (absTop - f_scrollTop()); } /** Get element absolute position {left,top} */ function os_getElementPosition(elemID){ var offsetTrail = document.getElementById(elemID); var offsetLeft = 0; var offsetTop = 0; while (offsetTrail){ offsetLeft += offsetTrail.offsetLeft; offsetTop += offsetTrail.offsetTop; offsetTrail = offsetTrail.offsetParent; } if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != 'undefined'){ offsetLeft += document.body.leftMargin; offsetTop += document.body.topMargin; } return {left:offsetLeft,top:offsetTop}; } /** Create the container div that will hold the suggested titles */ function os_createContainer(r){ var c = document.createElement("div"); var s = document.getElementById(r.searchbox); var pos = os_getElementPosition(r.searchbox); var left = pos.left; var top = pos.top + s.offsetHeight; c.className = "os-suggest"; c.setAttribute("id", r.container); document.body.appendChild(c); // dynamically generated style params // IE workaround, cannot explicitely set "style" attribute c = document.getElementById(r.container); c.style.top = top+"px"; c.style.left = left+"px"; c.style.width = s.offsetWidth+"px"; // mouse event handlers c.onmouseover = function(event) { os_eventMouseover(r.searchbox, event); }; c.onmousemove = function(event) { os_eventMousemove(r.searchbox, event); }; c.onmousedown = function(event) { return os_eventMousedown(r.searchbox, event); }; c.onmouseup = function(event) { os_eventMouseup(r.searchbox, event); }; return c; } /** change container height to fit to screen */ function os_fitContainer(r){ var c = document.getElementById(r.container); var h = os_availableHeight(r) - 20; var inc = r.containerRow; h = parseInt(h/inc) * inc; if(h < (2 * inc) && r.resultCount > 1) // min: two results h = 2 * inc; if((h/inc) > os_max_lines_per_suggest ) h = inc * os_max_lines_per_suggest; if(h < r.containerTotal){ c.style.height = h +"px"; r.containerCount = parseInt(Math.round(h/inc)); } else{ c.style.height = r.containerTotal+"px"; r.containerCount = r.resultCount; } } /** If some entries are longer than the box, replace text with "..." */ function os_trimResultText(r){ // find max width, first see if we could expand the container to fit it var maxW = 0; for(var i=0;i maxW) maxW = e.offsetWidth; } var w = document.getElementById(r.container).offsetWidth; var fix = 0; if(r.containerCount < r.resultCount){ fix = 20; // give 20px for scrollbar } else fix = os_operaWidthFix(w); if(fix < 4) fix = 4; // basic padding maxW += fix; // resize container to fit more data if permitted var normW = document.getElementById(r.searchbox).offsetWidth; var prop = maxW / normW; if(prop > os_container_max_width) prop = os_container_max_width; else if(prop < 1) prop = 1; var newW = Math.round( normW * prop ); if( w != newW ){ w = newW; if( os_animation_timer != null ) clearInterval(os_animation_timer.id) os_animation_timer = new os_AnimationTimer(r,w); os_animation_timer.id = setInterval("os_animateChangeWidth()",os_animation_delay); w -= fix; // this much is reserved } // trim results if(w < 10) return; for(var i=0;i w && (e.offsetWidth < lastW || iteration<2)){ changedText = true; lastW = e.offsetWidth; var l = e.innerHTML; e.innerHTML = l.substring(0,l.length-replace)+"..."; iteration++; replace = 4; // how many chars to replace } if(changedText){ // show hint for trimmed titles document.getElementById(r.resultTable+i).setAttribute("title",r.results[i]); } } } /** Invoked on timer to animate change in container width */ function os_animateChangeWidth(){ var r = os_animation_timer.r; var c = document.getElementById(r.container); var w = c.offsetWidth; var inc = os_animation_timer.inc; var target = os_animation_timer.target; var nw = w + inc; if( (inc > 0 && nw >= target) || (inc <= 0 && nw <= target) ){ // finished ! c.style.width = target+"px"; clearInterval(os_animation_timer.id) os_animation_timer = null; } else{ // in-progress c.style.width = nw+"px"; } } /** Handles data from XMLHttpRequest, and updates the suggest results */ function os_updateResults(r, query, text, cacheKey){ os_cache[cacheKey] = text; r.query = query; r.original = query; if(text == ""){ r.results = null; r.resultCount = 0; os_hideResults(r); } else{ try { var p = eval('('+text+')'); // simple json parse, could do a safer one if(p.length<2 || p[1].length == 0){ r.results = null; r.resultCount = 0; os_hideResults(r); return; } var c = document.getElementById(r.container); if(c == null) c = os_createContainer(r); c.innerHTML = os_createResultTable(r,p[1]); // init container table sizes var t = document.getElementById(r.resultTable); r.containerTotal = t.offsetHeight; r.containerRow = t.offsetHeight / r.resultCount; os_fitContainer(r); os_trimResultText(r); os_showResults(r); } catch(e){ // bad response from server or such os_hideResults(r); os_cache[cacheKey] = null; } } } /** Create the result table to be placed in the container div */ function os_createResultTable(r, results){ var c = document.getElementById(r.container); var width = c.offsetWidth - os_operaWidthFix(c.offsetWidth); var html = ""; r.results = new Array(); r.resultCount = results.length; for(i=0;i"+title+""; } html+="
" return html; } /** Fetch namespaces from checkboxes or hidden fields in the search form, if none defined use wgSearchNamespaces global */ function os_getNamespaces(r){ var namespaces = ""; var elements = document.forms[r.searchform].elements; for(i=0; i < elements.length; i++){ var name = elements[i].name; if(typeof name != 'undefined' && name.length > 2 && name[0]=='n' && name[1]=='s' && ((elements[i].type=='checkbox' && elements[i].checked) || (elements[i].type=='hidden' && elements[i].value=="1")) ){ if(namespaces!="") namespaces+="|"; namespaces+=name.substring(2); } } if(namespaces == "") namespaces = wgSearchNamespaces.join("|"); return namespaces; } /** Update results if user hasn't already typed something else */ function os_updateIfRelevant(r, query, text, cacheKey){ var t = document.getElementById(r.searchbox); if(t != null && t.value == query){ // check if response is still relevant os_updateResults(r, query, text, cacheKey); } r.query = query; } /** Fetch results after some timeout */ function os_delayedFetch(){ if(os_timer == null) return; var r = os_timer.r; var query = os_timer.query; os_timer = null; var path = wgMWSuggestTemplate.replace("{namespaces}",os_getNamespaces(r)) .replace("{dbname}",wgDBname) .replace("{searchTerms}",os_encodeQuery(query)); // try to get from cache, if not fetch using ajax var cached = os_cache[path]; if(cached != null){ os_updateIfRelevant(r, query, cached, path); } else{ var xmlhttp = sajax_init_object(); if(xmlhttp){ try { xmlhttp.open("GET", path, true); xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && typeof os_updateIfRelevant == 'function') { os_updateIfRelevant(r, query, xmlhttp.responseText, path); } }; xmlhttp.send(null); } catch (e) { if (window.location.hostname == "localhost") { alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing."); } throw e; } } } } /** Init timed update via os_delayedUpdate() */ function os_fetchResults(r, query, timeout){ if(query == ""){ os_hideResults(r); return; } else if(query == r.query) return; // no change os_is_stopped = false; // make sure we're running /* var cacheKey = wgDBname+":"+query; var cached = os_cache[cacheKey]; if(cached != null){ os_updateResults(r,wgDBname,query,cached); return; } */ // cancel any pending fetches if(os_timer != null && os_timer.id != null) clearTimeout(os_timer.id); // schedule delayed fetching of results if(timeout != 0){ os_timer = new os_Timer(setTimeout("os_delayedFetch()",timeout),r,query); } else{ os_timer = new os_Timer(null,r,query); os_delayedFetch(); // do it now! } } /** Change the highlighted row (i.e. suggestion), from position cur to next */ function os_changeHighlight(r, cur, next, updateSearchBox){ if (next >= r.resultCount) next = r.resultCount-1; if (next < -1) next = -1; r.selected = next; if (cur == next) return; // nothing to do. if(cur >= 0){ var curRow = document.getElementById(r.resultTable + cur); if(curRow != null) curRow.className = "os-suggest-result"; } var newText; if(next >= 0){ var nextRow = document.getElementById(r.resultTable + next); if(nextRow != null) nextRow.className = os_HighlightClass(); newText = r.results[next]; } else newText = r.original; // adjust the scrollbar if any if(r.containerCount < r.resultCount){ var c = document.getElementById(r.container); var vStart = c.scrollTop / r.containerRow; var vEnd = vStart + r.containerCount; if(next < vStart) c.scrollTop = next * r.containerRow; else if(next >= vEnd) c.scrollTop = (next - r.containerCount + 1) * r.containerRow; } // update the contents of the search box if(updateSearchBox){ os_updateSearchQuery(r,newText); } } function os_HighlightClass() { var match = navigator.userAgent.match(/AppleWebKit\/(\d+)/); if (match) { var webKitVersion = parseInt(match[1]); if (webKitVersion < 523) { // CSS system highlight colors broken on old Safari // https://bugs.webkit.org/show_bug.cgi?id=6129 // Safari 3.0.4, 3.1 known ok return "os-suggest-result-hl-webkit"; } } return "os-suggest-result-hl"; } function os_updateSearchQuery(r,newText){ document.getElementById(r.searchbox).value = newText; r.query = newText; } /** Find event target */ function os_getTarget(e){ if (!e) e = window.event; if (e.target) return e.target; else if (e.srcElement) return e.srcElement; else return null; } /******************** * Keyboard events ********************/ /** Event handler that will fetch results on keyup */ function os_eventKeyup(e){ var targ = os_getTarget(e); var r = os_map[targ.id]; if(r == null) return; // not our event // some browsers won't generate keypressed for arrow keys, catch it if(os_keypressed_count == 0){ os_processKey(r,os_cur_keypressed,targ); } var query = targ.value; os_fetchResults(r,query,os_search_timeout); } /** catch arrows up/down and escape to hide the suggestions */ function os_processKey(r,keypressed,targ){ if (keypressed == 40){ // Arrow Down if (r.visible) { os_changeHighlight(r, r.selected, r.selected+1, true); } else if(os_timer == null){ // user wants to get suggestions now r.query = ""; os_fetchResults(r,targ.value,0); } } else if (keypressed == 38){ // Arrow Up if (r.visible){ os_changeHighlight(r, r.selected, r.selected-1, true); } } else if(keypressed == 27){ // Escape document.getElementById(r.searchbox).value = r.original; r.query = r.original; os_hideResults(r); } else if(r.query != document.getElementById(r.searchbox).value){ // os_hideResults(r); // don't show old suggestions } } /** When keys is held down use a timer to output regular events */ function os_eventKeypress(e){ var targ = os_getTarget(e); var r = os_map[targ.id]; if(r == null) return; // not our event var keypressed = os_cur_keypressed; if(keypressed == 38 || keypressed == 40){ var d = new Date() var now = d.getTime(); if(now - os_last_keypress < 120){ os_last_keypress = now; return; } } os_keypressed_count++; os_processKey(r,keypressed,targ); } /** Catch the key code (Firefox bug) */ function os_eventKeydown(e){ if (!e) e = window.event; var targ = os_getTarget(e); var r = os_map[targ.id]; if(r == null) return; // not our event os_mouse_moved = false; os_cur_keypressed = (window.Event) ? e.which : e.keyCode; os_last_keypress = 0; os_keypressed_count = 0; } /** Event: loss of focus of input box */ function os_eventBlur(e){ var targ = os_getTarget(e); var r = os_map[targ.id]; if(r == null) return; // not our event if(!os_mouse_pressed) os_hideResults(r); } /** Event: focus (catch only when stopped) */ function os_eventFocus(e){ // nothing happens here? } /******************** * Mouse events ********************/ /** Mouse over the container */ function os_eventMouseover(srcId, e){ var targ = os_getTarget(e); var r = os_map[srcId]; if(r == null || !os_mouse_moved) return; // not our event var num = os_getNumberSuffix(targ.id); if(num >= 0) os_changeHighlight(r,r.selected,num,false); } /* Get row where the event occured (from its id) */ function os_getNumberSuffix(id){ var num = id.substring(id.length-2); if( ! (num.charAt(0) >= '0' && num.charAt(0) <= '9') ) num = num.substring(1); if(os_isNumber(num)) return parseInt(num); else return -1; } /** Save mouse move as last action */ function os_eventMousemove(srcId, e){ os_mouse_moved = true; } /** Mouse button held down, register possible click */ function os_eventMousedown(srcId, e){ var targ = os_getTarget(e); var r = os_map[srcId]; if(r == null) return; // not our event var num = os_getNumberSuffix(targ.id); os_mouse_pressed = true; if(num >= 0){ os_mouse_num = num; // os_updateSearchQuery(r,r.results[num]); } // keep the focus on the search field document.getElementById(r.searchbox).focus(); return false; // prevents selection } /** Mouse button released, check for click on some row */ function os_eventMouseup(srcId, e){ var targ = os_getTarget(e); var r = os_map[srcId]; if(r == null) return; // not our event var num = os_getNumberSuffix(targ.id); if(num >= 0 && os_mouse_num == num){ os_updateSearchQuery(r,r.results[num]); os_hideResults(r); document.getElementById(r.searchform).submit(); } os_mouse_pressed = false; // keep the focus on the search field document.getElementById(r.searchbox).focus(); } /** Check if x is a valid integer */ function os_isNumber(x){ if(x == "" || isNaN(x)) return false; for(var i=0;i= '0' && c <= '9') ) return false; } return true; } /** When the form is submitted hide everything, cancel updates... */ function os_eventOnsubmit(e){ var targ = os_getTarget(e); os_is_stopped = true; // kill timed requests if(os_timer != null && os_timer.id != null){ clearTimeout(os_timer.id); os_timer = null; } // Hide all suggestions for(i=0;i?_Nhttp://en.wikipedia.org/w/index.php?title=-&action=raw&gen=js&useskin=monobookObplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver* &,-345YZ[\]^_`abcdefghijklmnopqrstuvw{|U$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1)( '()$+WNS.base[NS.relative_Nhttp://en.wikipedia.org/w/index.php?title=-&action=raw&gen=js&useskin=monobook./01X$classesZ$classname12UNSURLXNSObject#A' / 6789IWNS.keysZNS.objects':;<=>?@ABCDEFGH JKLMNOPQRSTUVWX !"#$%&WX-Cache]Cache-Control\X-Powered-By_Content-Encoding\Content-TypeVServer^Content-LengthTDateZConnectionSAgeWExpiresSVia^X-Vary-Options^X-Cache-LookupTVary_8HIT from sq35.wikimedia.org, HIT from sq34.wikimedia.org_:public, s-maxage=2678400, max-age=2678400, max-age=2592000_PHP/5.2.4-2ubuntu5wm1Tgzip_text/javascript; charset=utf-8VApacheT8826_Wed, 01 Oct 2008 15:25:47 GMTZkeep-aliveR11_Fri, 31 Oct 2008 15:25:47 GMT_`1.0 sq35.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq34.wikimedia.org:80 (squid/2.6.STABLE21)_"Accept-Encoding;list-contains=gzip_@HIT from sq35.wikimedia.org:3128, HIT from sq34.wikimedia.org:80_Accept-Encoding./xyyz2_NSMutableDictionary\NSDictionaryt./}~~2_NSHTTPURLResponse]NSURLResponse)27:PRdinw   #1>Q^ety/GLmty*O_text/javascriptOt/* generated javascript */ var skin = 'monobook'; var stylepath = '/skins-1.5'; /* MediaWiki:Common.js */ // /* Import more specific scripts if necessary */ if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages { importScript("MediaWiki:Common.js/edit.js") } else if (wgPageName == "Special:Watchlist") //watchlist scripts { importScript("MediaWiki:Common.js/watchlist.js") } else if (wgPageName == "Special:Search") //scripts specific to Special:Search { importScript("MediaWiki:Common.js/search.js") } /** Sysop Javascript ******************************************************* * * Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]]. */ function sysopFunctions() { if ( wgUserGroups && !window.disableSysopJS ) { for ( var g = 0; g < wgUserGroups.length; ++g ) { if ( wgUserGroups[g] == "sysop" ) { importScript( "MediaWiki:Sysop.js" ); break; } } } } addOnloadHook( sysopFunctions ); /** WikiMiniAtlas ******************************************************* * * Description: WikiMiniAtlas is a popup click and drag world map. * This script causes all of our coordinate links to display the WikiMiniAtlas popup button. * The script itself is located on meta because it is used by many projects. * See [[Meta:WikiMiniAtlas]] for more information. * Maintainers: [[User:Dschwen]] */ if (wgServer == "https://secure.wikimedia.org") { var metaBase = "https://secure.wikimedia.org/wikipedia/meta"; } else { var metaBase = "http://meta.wikimedia.org"; } importScriptURI(metaBase+"/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400") /* Scripts specific to Internet Explorer */ if (navigator.appName == "Microsoft Internet Explorer") { /** Internet Explorer bug fix ************************************************** * * Description: Fixes IE horizontal scrollbar bug * Maintainers: [[User:Tom-]]? */ var oldWidth; var docEl = document.documentElement; function fixIEScroll() { if (!oldWidth || docEl.clientWidth > oldWidth) doFixIEScroll(); else setTimeout(doFixIEScroll, 1); oldWidth = docEl.clientWidth; } function doFixIEScroll() { docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : ""; } document.attachEvent("onreadystatechange", fixIEScroll); document.attachEvent("onresize", fixIEScroll); /** * Remove need for CSS hacks regarding MSIE and IPA. */ if (document.createStyleSheet) { document.createStyleSheet().addRule('.IPA', 'font-family: "Doulos SIL", "Charis SIL", Gentium, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode";'); } //Import scripts specific to Internet Explorer 6 if (navigator.appVersion.substr(22, 1) == "6") { importScript("MediaWiki:Common.js/IE60Fixes.js") } } /* Test if an element has a certain class ************************************** * * Description: Uses regular expressions and caching for better performance. * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]] */ var hasClass = (function () { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); /** Interwiki links to featured articles *************************************** * * Description: Highlights interwiki links to featured articles (or * equivalents) by changing the bullet before the interwiki link * into a star. * Maintainers: [[User:R. Koot]] */ function LinkFA() { if ( document.getElementById( "p-lang" ) ) { var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" ); for ( var i = 0; i < InterwikiLinks.length; i++ ) { if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) { InterwikiLinks[i].className += " FA" InterwikiLinks[i].title = "This is a featured article in another language."; } } } } addOnloadHook( LinkFA ); /** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See * [[Wikipedia:NavFrame]]. * Maintainers: [[User:R. Koot]] */ var autoCollapse = 2; var collapseCaption = "hide"; var expandCaption = "show"; function collapseTable( tableIndex ) { var Button = document.getElementById( "collapseButton" + tableIndex ); var Table = document.getElementById( "collapsibleTable" + tableIndex ); if ( !Table || !Button ) { return false; } var Rows = Table.rows; if ( Button.firstChild.data == collapseCaption ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = "none"; } Button.firstChild.data = expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } } function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = new Object(); var Tables = document.getElementsByTagName( "table" ); for ( var i = 0; i < Tables.length; i++ ) { if ( hasClass( Tables[i], "collapsible" ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; if (!HeaderRow) continue; var Header = HeaderRow.getElementsByTagName( "th" )[0]; if (!Header) continue; NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); var Button = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption ); Button.style.styleFloat = "right"; Button.style.cssFloat = "right"; Button.style.fontWeight = "normal"; Button.style.textAlign = "right"; Button.style.width = "6em"; ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( "[" ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( "]" ) ); Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; } } for ( var i = 0; i < tableIndex; i++ ) { if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) { collapseTable( i ); } else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) { element = NavigationBoxes[i]; while (element.parentNode) { element = element.parentNode; if ( hasClass( element, "outercollapse" ) ) { collapseTable ( i ); break; } else if (element.getAttribute("id") == "bodyContent" ) break; } } } } addOnloadHook( createCollapseButtons ); /** Dynamic Navigation Bars (experimental) ************************************* * * Description: See [[Wikipedia:NavFrame]]. * Maintainers: UNMAINTAINED */ // set up the words in your language var NavigationBarHide = '[' + collapseCaption + ']'; var NavigationBarShow = '[' + expandCaption + ']'; // shows and hides content and picture (if available) of navigation bars // Parameters: // indexNavigationBar: the index of navigation bar to be toggled function toggleNavigationBar(indexNavigationBar) { var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); if (!NavFrame || !NavToggle) { return false; } // if shown now if (NavToggle.firstChild.data == NavigationBarHide) { for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if ( hasClass( NavChild, 'NavPic' ) ) { NavChild.style.display = 'none'; } if ( hasClass( NavChild, 'NavContent') ) { NavChild.style.display = 'none'; } } NavToggle.firstChild.data = NavigationBarShow; // if hidden now } else if (NavToggle.firstChild.data == NavigationBarShow) { for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if (hasClass(NavChild, 'NavPic')) { NavChild.style.display = 'block'; } if (hasClass(NavChild, 'NavContent')) { NavChild.style.display = 'block'; } } NavToggle.firstChild.data = NavigationBarHide; } } // adds show/hide-button to navigation bars function createNavigationBarToggleButton() { var indexNavigationBar = 0; // iterate over all < div >-elements var divs = document.getElementsByTagName("div"); for (var i = 0; NavFrame = divs[i]; i++) { // if found a navigation bar if (hasClass(NavFrame, "NavFrame")) { indexNavigationBar++; var NavToggle = document.createElement("a"); NavToggle.className = 'NavToggle'; NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); var isCollapsed = hasClass( NavFrame, "collapsed" ); /* * Check if any children are already hidden. This loop is here for backwards compatibility: * the old way of making NavFrames start out collapsed was to manually add style="display:none" * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make * the content visible without JavaScript support), the new recommended way is to add the class * "collapsed" to the NavFrame itself, just like with collapsible tables. */ for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) { if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) { if ( NavChild.style.display == 'none' ) { isCollapsed = true; } } } if (isCollapsed) { for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) { NavChild.style.display = 'none'; } } } var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide); NavToggle.appendChild(NavToggleText); // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for(var j=0; j < NavFrame.childNodes.length; j++) { if (hasClass(NavFrame.childNodes[j], "NavHead")) { NavFrame.childNodes[j].appendChild(NavToggle); } } NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); } } } addOnloadHook( createNavigationBarToggleButton ); /** Main Page layout fixes ********************************************************* * * Description: Adds an additional link to the complete list of languages available. * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]] */ function mainPageAppendCompleteListLink() { addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/List_of_Wikipedias', 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias') } if ((wgTitle == 'Main Page' && wgNamespaceNumber == 0) || (wgTitle == 'Wikipedia' && wgNamespaceNumber == 100)) { addOnloadHook(mainPageAppendCompleteListLink); } /** "Technical restrictions" title fix ***************************************** * * Description: For pages that have something like Template:Wrongtitle, replace * the title, but only if it is cut-and-pasteable as a valid * wikilink. For instance, "NZR WB class" can be changed to * "NZR WB class", but [[C#]] is not an equivalent wikilink, * so [[C Sharp]] doesn't have its main title changed. * * The function looks for a banner like this: *
... title ...
* An element with id=DisableRealTitle disables the function. * Maintainers: Remember_the_dot */ if (wgIsArticle) //prevents the "Editing " prefix from disappearing during preview { addOnloadHook(function() { var realTitle = document.getElementById("RealTitle") if (realTitle) { //normalizes a title or a namespace name (but not both) //trims leading and trailing underscores and converts (possibly multiple) spaces and underscores to single underscores function normalizeTitle(title) { return title.replace(/^_+/, "").replace(/_+$/, "").replace(/[\s_]+/g, "_") } if (realTitle.textContent) //everyone but IE { var realTitleText = realTitle.textContent } else //IE { var realTitleText = realTitle.innerText } var normalizedRealTitle var normalizedPageTitle var indexOfColon = realTitleText.indexOf(":") var normalizedNamespaceName = normalizeTitle(realTitleText.substring(0, indexOfColon)).toLowerCase() //make namespace prefix lowercase and uppercase the first letter of the title if (indexOfColon == -1 || wgCanonicalNamespace.toLowerCase() != normalizedNamespaceName) //no namespace prefix - either no colon or a nonsensical namespace prefix (for example, "Foo" in "Foo: The Story of My Life") { normalizedRealTitle = normalizeTitle(realTitleText) normalizedRealTitle = normalizedRealTitle.charAt(0).toUpperCase() + normalizedRealTitle.substring(1) normalizedPageTitle = wgPageName.charAt(0).toUpperCase() + wgPageName.substring(1) } else //using a namespace prefix { var normalizedRealPageTitle = normalizeTitle(realTitleText.substring(indexOfColon + 1)) normalizedRealTitle = normalizedNamespaceName if (normalizedNamespaceName != "") //namespace 0 is a special case where the leading colon should never be shown { normalizedRealTitle += ":" } normalizedRealTitle += normalizedRealPageTitle.charAt(0).toUpperCase() + normalizedRealPageTitle.substring(1) normalizedPageTitle = wgPageName.substring(0, wgPageName.indexOf(":") + 1).toLowerCase() + wgPageName.substring(wgPageName.indexOf(":") + 1) } if (normalizedRealTitle == normalizedPageTitle) //normalized titles match, so we can do full replacement { var h1 = document.getElementsByTagName("h1")[0] //remove all child nodes, including text while (h1.firstChild) { h1.removeChild(h1.firstChild) } //populate with nodes of real title while (realTitle.firstChild) //the children are moved to a new parent element { h1.appendChild(realTitle.firstChild) } //delete the real title banner since the problem is solved var realTitleBanner = document.getElementById("RealTitleBanner") realTitleBanner.parentNode.removeChild(realTitleBanner) } //no matter what, correct the page title document.title = realTitleText + " - Wikipedia, the free encyclopedia" } }) } /** Anon tips and donation banner ************************** * * Description: This implements an anon tips / donation banner. It includes a workaround for * the Z-index bug found in Internet Explorer. It correctly places the anon notice * on the page, even under IE6. See this Google search for more information about the bug: * http://www.google.com/search?q=z-index+ie6+bug * Maintainers: [[User:Gmaxwell]], [[User:MZMcBride]] */ if(wgUserName == null && skin == 'monobook') addOnloadHook((function (){ var message=new Array(); message[0]='Your continued donations keep Wikipedia running!'; message[1]='Make a donation to Wikipedia and give the gift of knowledge!'; message[2]='Wikipedia is sustained by people like you. Please donate today.'; message[3]='Help us improve Wikipedia by supporting it financially.'; message[4]='You can support Wikipedia by making a tax-deductible donation.' message[5]='Help us provide free content to the world by donating today!'; message[6]='Learn more about using Wikipedia for research.'; message[7]='Ten things you may not know about Wikipedia.'; message[8]='Ten things you may not know about images on Wikipedia.'; message[9]='Learn more about citing Wikipedia.'; message[10]='Have questions? Find out how to ask questions and get answers.'; message[11]='Find out more about navigating Wikipedia and finding information.'; message[12]='Interested in contributing to Wikipedia?'; var weightLimit = 6; var biasPercent = 0.815; var whichMessage = (Math.random() < biasPercent) ? weightLimit : message.length; whichMessage = Math.floor(Math.random() * whichMessage); var wrapper = document.getElementById("globalWrapper"); if (wrapper) { var div = document.createElement('div'); div.id = "anon-banner"; div.style.cssText = "position:absolute; z-index:40; left:155px; top:1px; clear:both; float:left; font-size:90%; font-style:italic; white-space:nowrap"; div.innerHTML = message[whichMessage]; wrapper.insertBefore(div, wrapper.firstChild); } })); /** Table sorting fixes ************************************************ * * Description: Disables code in table sorting routine to set classes on even/odd rows * Maintainers: [[User:Random832]] */ ts_alternate_row_colors = false; /** Modernista referrer ************************************************ * * Description: Adds a notice to pages viewed through modernista.com * Maintainers: [[User:Random832]] */ addOnloadHook(function(){ if(/modernista\.com/.test(document.referrer)) { jsMsg('


You ' +'appear to have come here from the Modernista website. They ' +'enclose Wikipedia’s content with a frame and overlay their ' +'own navigation banner on top. Wikipedia does not endorse ' +'Modernista and its appearance here should not be taken to ' +'imply this.
'); } }); /***** uploadwizard_newusers ******** * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]] * * Maintainers: [[User:Krimpet]] ****/ function uploadwizard_newusers() { if (wgNamespaceNumber == 4 && wgTitle == "Upload" && wgAction == "view") { var oldDiv = document.getElementById("autoconfirmedusers"), newDiv = document.getElementById("newusers"); if (oldDiv && newDiv) { if (typeof wgUserGroups == "object" && wgUserGroups) { for (i = 0; i < wgUserGroups.length; i++) { if (wgUserGroups[i] == "autoconfirmed") { oldDiv.style.display = "block"; newDiv.style.display = "none"; return; } } } oldDiv.style.display = "none"; newDiv.style.display = "block"; return; } } } addOnloadHook(uploadwizard_newusers); /** IPv6 AAAA connectivity testing ******************************************************* * * Description: Uses hidden images to measure the possible negative impact of IPv6 * enabling the Wikimedia sites. * This works by adding a hidden div to the footer with several image tags. * The source addresses of the image tags are set to domainnames which have v4, v6 and * both address types set. The script times how long objects take to load. * Results are sent back to the server. http://ipv6and4.labs.wikimedia.org/stats.html * Based on http://www.braintrust.co.nz/ipv6wwwtest/ * Contact: [[User:Gmaxwell]], [[User:Mark Bergsma]], [[User:Mindspillage]] */ var __ipv6wwwtest_factor = 100; var __ipv6wwwtest_done = 0; if ((wgServer != "https://secure.wikimedia.org") && (Math.floor(Math.random()*__ipv6wwwtest_factor)==42)) { var __ipv6wwwtest_timeoutMsec = 10000; // Timeout for 'final' result message in milliseconds var __ipv6wwwtest_hostSuffix = ".labs.wikimedia.org"; // Suffix to go on the IMG hostnames var __ipv6wwwtest_stopAtTimeout = true; // Whether to stop when the timeout is reached or not var __ipv6wwwtest_pageLoadTime; var __ipv6wwwtest_timeout = false; var __ipv6wwwtest_ipv4LoadTime = false; var __ipv6wwwtest_ipv4relLoadTime = false; var __ipv6wwwtest_ipv6LoadTime = false; var __ipv6wwwtest_ipv6bigLoadTime = false; var __ipv6wwwtest_ipv6and4LoadTime = false; var __ipv6wwwtest_id = Math.floor(Math.random()*Math.pow(2,31)); function __ipv6wwwtest_startTest() { __ipv6wwwtest_pageLoadTime = new Date(); document.getElementById("__ipv6wwwtest_ipv4Img").src = "http://ipv4" + __ipv6wwwtest_hostSuffix +"/ipv4.gif?id=" + __ipv6wwwtest_id; document.getElementById("__ipv6wwwtest_ipv4relImg").src = "//ipv4" + __ipv6wwwtest_hostSuffix +"/ipv4.gif?rel=1&id=" + __ipv6wwwtest_id; document.getElementById("__ipv6wwwtest_ipv6Img").src = "http://ipv6" + __ipv6wwwtest_hostSuffix +"/ipv6.gif?id=" + __ipv6wwwtest_id; document.getElementById("__ipv6wwwtest_ipv6and4Img").src = "http://ipv6and4" + __ipv6wwwtest_hostSuffix +"/ipv6and4.gif?id=" + __ipv6wwwtest_id; document.getElementById("__ipv6wwwtest_ipv6bigImg").src = "http://ipv6" + __ipv6wwwtest_hostSuffix +"/ipv6big.gif?id=" + __ipv6wwwtest_id; } function __ipv6wwwtest_sendResults(stage) { document.getElementById("__ipv6wwwtest_resultsImg").src = "http://results" + __ipv6wwwtest_hostSuffix +"/results.gif?id=" + __ipv6wwwtest_id + "&stage=" + stage + "&timeout=" + __ipv6wwwtest_timeoutMsec + "&stop_at_timeout=" + __ipv6wwwtest_stopAtTimeout + "&ipv4=" + __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv4LoadTime) + "&ipv6=" + __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv6LoadTime) + "&ipv6and4=" + __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv6and4LoadTime) + "&ipv6big=" + __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv6bigLoadTime) +"&ipv4rel="+ __ipv6wwwtest_getLoadTime(__ipv6wwwtest_ipv4relLoadTime) + "&rate=" + __ipv6wwwtest_factor; }; function __ipv6wwwtest_getLoadTime(item) { if (item == false) { return "NaN"; } else { return (item.getTime() - __ipv6wwwtest_pageLoadTime.getTime()); } } function __ipv6wwwtest_checkFinished() { if ( (! __ipv6wwwtest_ipv6LoadTime) || (! __ipv6wwwtest_ipv4LoadTime) || (! __ipv6wwwtest_ipv6and4LoadTime) || (! __ipv6wwwtest_ipv6bigLoadTime) || (! __ipv6wwwtest_getLoadTime)) { if (!__ipv6wwwtest_timeout) { __ipv6wwwtest_timeout = window.setTimeout('__ipv6wwwtest_sendFinalResults()',__ipv6wwwtest_timeoutMsec); } __ipv6wwwtest_sendResults('partial'); } else { __ipv6wwwtest_sendFinalResults(); } } function __ipv6wwwtest_sendFinalResults() { if (__ipv6wwwtest_done==0) { if (__ipv6wwwtest_timeout) { window.clearTimeout(__ipv6wwwtest_timeout); } __ipv6wwwtest_sendResults('final'); if (__ipv6wwwtest_stopAtTimeout) { document.getElementById("__ipv6wwwtest_ipv4Img").src = ""; document.getElementById("__ipv6wwwtest_ipv4relImg").src = ""; document.getElementById("__ipv6wwwtest_ipv6Img").src = ""; document.getElementById("__ipv6wwwtest_ipv6and4Img").src = ""; document.getElementById("__ipv6wwwtest_ipv6bigImg").src = ""; } } __ipv6wwwtest_done=1; } addOnloadHook(function() { v6sub=document.getElementById("footer"); v6sub.innerHTML=v6sub.innerHTML+'
'; if (document.getElementById("__ipv6wwwtest_ipv4Img") && document.getElementById("__ipv6wwwtest_ipv6Img") && document.getElementById("__ipv6wwwtest_ipv6and4Img") && document.getElementById("__ipv6wwwtest_ipv6bigImg")) { __ipv6wwwtest_startTest(); } }); } /** Disambig editintro ******************************************************** * * Description: Adds an editintro on disambiguation pages. Original code * located at [[User:RockMFR/disambigeditintro.js]]. * * Maintainers: [[User:RockMFR]], [[User:Quiddity]] */ if (wgNamespaceNumber == 0) addOnloadHook(function(){ if (!document.getElementById('disambig')) return var el = document.getElementById('ca-edit') if (el) el = el.getElementsByTagName('a')[0] if (el) el.href += '&editintro=Template:Disambig_editintro' }) // /* MediaWiki:Monobook.js */ /* Any JavaScript here will be loaded for users using the MonoBook skin */AB>C_http://meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400Obplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver, &,-345[\]^_`abcdefghijklmnopqrstuvwxyz{U$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1+* '()$+WNS.base[NS.relative_http://meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400./01X$classesZ$classname12UNSURLXNSObject#A= z 6789JWNS.keysZNS.objects):;<=>?@ABCDEFGHI KLMNOPQRSTUVWXYZ !"#$%&'(WX-Cache]Cache-Control\X-Powered-ByTVary_Content-Encoding\Content-TypeVServer^Content-LengthTDateZConnectionSAgeWExpiresSVia^X-Vary-Options^X-Cache-Lookup]Last-Modified_HIT from sq17.wikimedia.org_6public, s-maxage=21600, max-age=86400, max-age=2592000_PHP/5.2.4-2ubuntu5wm1_Accept-EncodingTgzip_text/javascript; charset=utf-8VApacheT5650_Thu, 09 Oct 2008 18:31:04 GMTZkeep-aliveQ8_Sat, 08 Nov 2008 18:31:04 GMT_.1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)_"Accept-Encoding;list-contains=gzip_HIT from sq17.wikimedia.org:80_Wed, 24 Sep 2008 14:08:10 GMT./|}}~2_NSMutableDictionary\NSDictionary:<./2_NSHTTPURLResponse]NSURLResponse)27:PRd   "$79;=?ACEGIKMOQSUW_mzXp2WxO: // Script to embed interactive maps into pages that have coordinate templates
// also check my user page [[User:Dschwen]] for more tools
//
// Revision 11.2

var wikiminiatlas =
{
 config:
 {
  width  : 600,
  height : 400,
  zoom : -1,
  quicklink : false,
  quicklinkurl : 'http://maps.google.com/maps?ll={latdegdec},{londegdec}&spn={span},{span}&q={latdegdec},{londegdec}',
  enabled : true,
  onlytitle : false,
  iframeurl : 'http://stable.toolserver.org/wma/iframe.html',
  imgbase   : 'http://stable.toolserver.org/wma/tiles/',
  coordurls : [
                'http://stable.toolserver.org/geohack/geohack.php?',
                'http://stable.ts.wikimedia.org/geohack/geohack.php?',
                'http://toolserver.org/~magnus/geo/geohack.php?',
                'http://tools.wikimedia.de/~magnus/geo/geohack.php?',
                'http://www8.brinkster.com/erikbaas/wiki/maps.asp?',
                'http://www.nsesoftware.nl/wiki/maps.asp?' 
              ],
  buttonImage: 
'http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Erioll_world.svg/18px-Erioll_world.svg.png'
 },

 strings:
 {
  buttonTooltip : {
   af:'Vertoon ligging op \'n interaktiwe kaart.',
   als:'Ort uf dr interaktivä Chartä zeigä',
   ar:'شاهد الموقع على الخريطة التفاعلية',
   bg:'покажи местоположението на интерактивната карта',
   ca:'mostra la localització en un mapa interactiu',
   da:'vis beliggenhed på interaktivt kort',
   de:'Ort auf interaktiver Karte anzeigen',
   el:'εμφάνιση τοποθεσίας σε διαδραστικό χάρτη',
   en:'show location on an interactive map',
   eo:'Montru lokigon sur interaktiva karto',
   eu:'erakutsi kokalekua mapa interaktibo batean',
   es:'mostrar el lugar en un mapa interactivo',
   fr:'Montrer la localisation sur une carte interactive',
   fur:'mostre la localizazion suntune mape interative',
   fy:'it plak op in oanpasbere kaart oanjaan',
   gl:'Amosar o lugar nun mapa interactivo',
   he:'הראה מיקום במפה האינטראקטיבית',
   hr:'prikaži lokaciju na interaktivnom zemljovidu',
   hu:'Mutasd a helyet egy interaktív térképen!',
   it:'mostra la località su una carta interattiva',
   is:'sýna staðsetningu á gagnvirku korti',
   id:'Tunjukkan letak di peta interaktif',
   ja:'インタラクティブ地図上に位置を表示',
   km:'បង្ហាញទីតាំងនៅលើផែនទីអន្តរកម្ម',
   lt:'Rodyti vietą interaktyviame žemėlapyje',
   mk:'Prikazi go mestoto na interaktivnata mapa',
   nl:'de locatie op een interactieve kaart tonen',
   no:'vis beliggenhet på interaktivt kart',
   pl:'Pokaż lokalizację na mapie interaktywnej',
   pt:'mostrar a localidade num mapa interactivo',
   ro:'arată locaţia pe o hartă interactivă',
   ru:'показать положение на интерактивной карте',
   sk:'zobraz miesto na interaktívnej mape',
   sl:'prikaži lokacijo na interaktivnem zemljevidu',
   sq:'trego vendndodhjen në hartë',
   fi:'näytä paikka interaktiivisella kartalla',
   sv:'visa platsen på en interaktiv karta',
   uk:'показати положення на інтерактивній карті',
   vi:'xem vị trí này trên bản đồ tương tác',
   vo:'Jonön topi su kaed itjäfidik',
   zh:'显示该地在地图上的位置',
   'zh-cn':'显示该地在地图上的位置',
   'zh-sg':'显示该地在地图上的位置',
   'zh-tw':'顯示該地在地圖上的位置',
   'zh-hk':'顯示該地在地圖上的位置'
  },
  close : {
   af:'Sluit',
   als:'Zuä machä',
   bg:'затвори',
   ca:'tanca',
   da:'luk',
   de:'schließen',
   el:'έξοδος',
   en:'close',
   eo:'fermu', 
   eu:'itxi',
   es:'cerrar',
   fr:'Quitter',
   fur:'siere',
   fy:'ticht',
   gl:'pechar',
   he:'לסגור',
   hr:'zatvori',
   hu:'bezárás',
   id:'tutup',
   is:'loka',
   it:'chiudi',
   ja:'閉じる',
   km:'បិទ',
   lt:'uždaryti',
   mk:'zatvori',
   nl:'sluiten',
   no:'lukk',
   pl:'zamknij',
   pt:'fechar',
   ro:'închide',
   ru:'закрыть',
   sk:'zatvoriť',
   sl:'zapri',
   sq:'mbylle',
   fi:'sulje',
   sv:'stäng',
   uk:'закрити',
   vi:'đóng',
   vo:'färmükön',
   zh:'关闭',
   'zh-cn':'关闭',
   'zh-sg':'关闭',
   'zh-tw':'關閉',
   'zh-hk':'關閉',
   ar:'غلق'
  }
 },

 link : null,
 links : null,
 bodyc : null,

 language : '',
 site: '',
 iframe : { div: null, iframe: null, closebutton: null },
 mapbutton: null,
 marker : { lat:0, lon:0 },

 coordinates : null,
 coord_index: 0,
 coord_params: '',
 coord_filter: null,

 quicklinkbox : null,
 quicklinkdest : null,

 region_index : 0,
 coordinate_region : '',

 WikiMiniAtlasHTML : '',

 hookUpMapbutton : function( mb )
 {
  var mapparam = mb.mapparam;
  var mapy     = wikiminiatlas.totalOffset( mb, 0 ) + 20;

  function doEvent()
  {
   wikiminiatlas.toggleIFrame( mapparam, mapy );
   return true;
  }
  mb.onclick = doEvent;
 },

 // vertikale position auf der Seite bestimmen
 totalOffset : function( obj, offset )
 {
  if( obj.offsetParent == null || 
      obj.offsetParent.id == 'content' )
   return offset + obj.offsetTop;
  else
   return wikiminiatlas.totalOffset(obj.offsetParent, offset + obj.offsetTop );
 },

 // move iframe around and toggle visibility
 toggleIFrame : function( mp, my )
 {
  with(wikiminiatlas)
  {
   var newurl = config.iframeurl + '?' + mp;

   if(iframe.div.style.visibility != "visible" ||
      ( ( iframe.iframe.src != newurl ) && ( my !== undefined ) ) )
   {
    if( iframe.iframe.src != newurl )
    {
     iframe.iframe.src = newurl;
    }
    iframe.div.style.top = my + 'px';
    iframe.div.style.visibility="visible";
   }
   else
    iframe.div.style.visibility="hidden";
  }
  return false;
 },

 // start the timer to fade in the quicklink tooltip
 qlStart : function()
 {
 },

 // abort the timer, hide the tooltip 
 qlStop : function()
 {
 },
 
 // show the tooltip menu
 qlShowMenu : function()
 {
 },
 
 // fill in the map-service templates 
 qlURL : function( lat, lon, zoom )
 {
  var url = wikiminiatlas.config.quicklinkurl;

  url = url.replace( /\{latdegdec\}/g, lat );
  url = url.replace( /\{londegdec\}/g, lon );

  var span = Math.pow( 2.0, zoom) / 150.0;
  url = url.replace( /\{span\}/g, span.toFixed(4) );

  return url;
 },
 
 // Check against coordinate urls
 isMaplink : function( url_orig )
 {
  if( typeof(url_orig) != 'string' ) return false;

  // needed for the russian WP
  var url, err;
  try { url = decodeURI( url_orig ) } catch( err ) { url = url_orig }

  with(wikiminiatlas)
  {
   // for( var key = 0; key < config.coordurls.length; key++ ) {
   for( var key in config.coordurls ) {
    if( url.substr(0,config.coordurls[key].length) == config.coordurls[key] )
     return true;
   }
  }
  
  return false;
 },

 // Insert the IFrame into the page.
 loader : function()
 {
  // apply settings
  if( typeof(wma_settings) == 'object' )
   for (var key in wma_settings)
   {
    if( typeof(wma_settings[key]) == typeof(wikiminiatlas.config[key]) )
     wikiminiatlas.config[key] = wma_settings[key];
   }

  if( wikiminiatlas.config.enabled == false ) return;

  with(wikiminiatlas)
  {
   site = window.location.host.substr(0,window.location.host.indexOf('.'));
   language = wgUserLanguage;

   var len; // cache array length for iterations

   // remove stupid icons from title coordinates
   var coord_title = document.getElementById('coordinates') || document.getElementById('coordinates-title');
   if( coord_title ) {
    var icons = coord_title.getElementsByTagName('a');
    len = icons.length;
    for( var key = 0; key < len; key++ ) {
     if( typeof(icons[key]) == 'object' &&
         icons[key] != null &&
         icons[key].className == 'image' ) 
      icons[key].parentNode.removeChild(icons[key]);
    }
   }


   if( config.onlytitle )
   {
    bodyc = document.getElementById('coordinates') || document.getElementById('coordinates-title');
    if( bodyc == null ) return;
   }
   else
   {
    // the french moved their title coordinates outside of bodyContent!
    if( site == 'fr' )
      bodyc = document.getElementById('content') || document;
    else
      bodyc = document.getElementById('bodyContent') || document;
   }

   links = bodyc.getElementsByTagName('a');
   len = links.length;
   for( var key = 0; key < len; key++ )
   {
    link = links[key];
    if( link.className == 'external text' && isMaplink(link.href) )
    {
     coordinates = link.href.replace( /−/g, '-' );
     coord_index = coordinates.indexOf('params=');
     if(coord_index>-1)
     {
      coord_params = coordinates.substr(coord_index+7);

      // degrees
      coord_filter = /([\d+-.]+)_([NS])_([\d+-.]+)_([EOW])/;
      if(coord_filter.test(coord_params))
      {
       coord_filter.exec(coord_params);
       marker.lat=RegExp.$1;
       if(RegExp.$2=='S') marker.lat*=-1;
       marker.lon=RegExp.$3;
       if(RegExp.$4=='W') marker.lon*=-1;
      }

      // degrees, minutes
      coord_filter = /([\d+-.]+)_([\d+-.]+)_([NS])_([\d+-.]+)_([\d+-.]+)_([EOW])/;
      if(coord_filter.test(coord_params))
      {
       coord_filter.exec(coord_params);
       marker.lat=(1.0*RegExp.$1) + (RegExp.$2/60.0);
       if(RegExp.$3=='S') marker.lat*=-1;
       marker.lon=(1.0*RegExp.$4) + (RegExp.$5/60.0);
       if(RegExp.$6=='W') marker.lon*=-1;
      }

      // degrees, minutes, seconds (+ fix for weird russian coords)
      coord_filter = /([\d+-.]+)_([\d+-.]*)_([\d+-.]*)_([NS])_([\d+-.]+)_([\d+-.]*)_([\d+-.]*)_([EOW])/;
      if(coord_filter.test(coord_params))
      {
       coord_filter.exec(coord_params);
       marker.lat=(1.0*RegExp.$1) + (RegExp.$2/60.0) + (RegExp.$3/3600.0);
       if(RegExp.$4=='S') marker.lat*=-1;
       marker.lon=(1.0*RegExp.$5) + (RegExp.$6/60.0) + (RegExp.$7/3600.0);
       if(RegExp.$8=='W') marker.lon*=-1;
      }
 
/*
      region_index = coordinates.indexOf('region:');
      if(region_index>-1)
      {
       coordinate_region = coordinates.substr(region_index+7);
       coordinate_region = coordinate_region.substr(0,coordinate_region.indexOf('"'));
      }
*/

      // check the globe parameter
      var clc = coordinates.toLowerCase();
      if( ( clc.indexOf('globe:') > -1 ) && ( clc.indexOf('globe:earth') == -1 ) )
      { 
       break;
      }

      // If given use dim or scale for a zoomlevel
      var zoomlevel = config.zoom;
      if( zoomlevel < 0 )
      {
       var ds_filter = /(dim|scale):([\d+-.]+)/;
       if( ds_filter.test( clc ) )
       {
        ds_filter.exec(coord_params);
        var val = ( RegExp.$2 )
        if(  RegExp.$1 == 'dim' )
        {
         // wma shows approx 4e7m at zoom 0
         zoomlevel = Math.log( 4e7/val ) / Math.log( 2 );
        }
        else // scale
        {
         // 1.5e8 is the scale of zoomlevel 0
         zoomlevel = Math.log( 1.5e8/val ) / Math.log( 2 );
        }
        if( zoomlevel > 10 ) zoomlevel = 10;
       }
      }

      // Find a sensible Zoom-level based on type
      if( zoomlevel < 0 )
      {
       zoomlevel = 1;
       if( coord_params.indexOf('type:landmark') >= 0 ) zoomlevel = 8;
       if( coord_params.indexOf('type:city') >= 0 ) zoomlevel = 4;
      }

      // Test the unicode Symbol
      if( site == 'de' && link.parentNode.id != 'coordinates' )
      {
       mapbutton = document.createElement('SPAN');
       mapbutton.appendChild( document.createTextNode('♁') );
       mapbutton.style.color = 'blue';
      }
      else
      {
       mapbutton = document.createElement('img');
       mapbutton.src = config.buttonImage;
      }
      mapbutton.title = strings.buttonTooltip[language] || strings.buttonTooltip.en;
      mapbutton.style.padding = '0px 3px 0px 0px';
      mapbutton.style.cursor = 'pointer';
      mapbutton.className = 'noprint';
      mapbutton.mapparam = 
      marker.lat + '_' + marker.lon + '_' + 
      config.width + '_' + config.height + '_' + 
      site + '_' + zoomlevel + '_' + language;

      // link.parentNode.insertBefore(mapbutton, link.nextSibling);
      link.parentNode.insertBefore(mapbutton,link);
      hookUpMapbutton( mapbutton );

      if ( config.quicklink ) {
        link.href = qlURL( marker.lat, marker.lon, zoomlevel );
        link.onmouseover = qlStart;
        link.onmouseout = qlStop;
      }
     }

/*    var def_zoom = '';
    if( typeof(wikiminiatlas_defaultzoom) == 'number' ) 
     def_zoom = '_' + wikiminiatlas_defaultzoom; */

    }

   } //for

   // prepare quicklink menu box
   if ( coordinates != null && config.quicklink ) {
    quicklinkbox = document.createElement('div');
    // more to come :-)
   }

   // prepare iframe to house the map 
   if ( coordinates != null ) {
    iframe.div = document.createElement('div');
    iframe.div.style.visibility = 'hidden';
    iframe.div.style.width = (config.width+2)+'px';
    iframe.div.style.height = (config.height+2)+'px';
    iframe.div.style.margin = '0px';
    iframe.div.style.padding = '0px';
    iframe.div.style.backgroundColor = 'white';
    iframe.div.style.position = 'absolute';
    iframe.div.style.right = '2em';
    iframe.div.style.top = '1em';
    iframe.div.style.border = '1px solid gray';
    iframe.div.style.zIndex = 13;

    iframe.closebutton = document.createElement('img');
    iframe.closebutton.title = strings.close[language] || strings.close.en;
    // was: config.imgbase + 'button_hide.png'
    iframe.closebutton.src = 'http://upload.wikimedia.org/wikipedia/commons/d/d4/Button_hide.png' 
    iframe.closebutton.style.zIndex = 15;
    iframe.closebutton.style.position = 'absolute';
    iframe.closebutton.style.right = '11px';
    iframe.closebutton.style.top = '9px';
    iframe.closebutton.style.width = '18px';
    iframe.closebutton.style.cursor = 'pointer';
    iframe.closebutton.mapparam = '';

    iframe.closebutton.onclick = toggleIFrame;

    iframe.iframe = document.createElement('iframe');
    iframe.iframe.scrolling = 'no';
    iframe.iframe.frameBorder = '0';
    iframe.iframe.style.zIndex = 14;
    iframe.iframe.style.position = 'absolute';
    iframe.iframe.style.right = '1px';
    iframe.iframe.style.top = '1px';
    iframe.iframe.style.width = (config.width)+'px';
    iframe.iframe.style.height = (config.height)+'px';
    iframe.iframe.style.margin = '0px';
    iframe.iframe.style.padding = '0px';

    iframe.div.appendChild(iframe.iframe);
    iframe.div.appendChild(iframe.closebutton);

    var content = document.getElementById('content') || document.getElementById('mw_content');
    if(content)
      content.insertBefore(iframe.div,content.childNodes[0]);
   }
  } //with
 }

}

//
// Hook up installation function
//
addOnloadHook(wikiminiatlas.loader);

//
EFGH_Mhttp://en.wikipedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.pngObplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver( &,-345WXYZ[\]^_`abcdefghijklmnopqrswxU$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1'& '()$+WNS.base[NS.relative_Mhttp://en.wikipedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png./01X$classesZ$classname12UNSURLXNSObject#A' ^ 6789HWNS.keysZNS.objects%:;<=>?@ABCDEFG IJKLMNOPQRSTUV !"#$WX-Cache]Cache-Control\Content-TypeVServer^Content-LengthTDateTEtagZConnectionSAgeWExpiresSVia]Accept-Ranges^X-Cache-Lookup]Last-Modified_9MISS from sq19.wikimedia.org, HIT from sq17.wikimedia.org_max-age=2592000Yimage/pngVApacheT1933_Wed, 01 Oct 2008 15:25:56 GMT^"78d-4430e552"Zkeep-aliveQ2_Fri, 31 Oct 2008 15:25:56 GMT_`1.0 sq19.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)Ubytes_@HIT from sq19.wikimedia.org:3128, HIT from sq17.wikimedia.org:80_Mon, 03 Apr 2006 09:05:22 GMT./tuuv2_NSMutableDictionary\NSDictionary./yzz{2_NSHTTPURLResponse]NSURLResponse)27:PRdfkt  $18GLQ\`hlz*57W#(,BORW[o|}Yimage/pngOPNG  IHDRXTsBITOPLTE)kѿρvsAyz[gRM%_xqyEiVu P$6=F¤i fOzL 2jcx7 Ɇ#^ߖ :0;xv?W,vDvNmm/!hě+K){ҵ8rٚȸLRl҆ ľs5g!efRE͖ɻpͷ4[&&2m֞@\׊4ξ4IdBSZۺ !zjtTD0N_ԉGLUt2n[yjǹD-bΌ܅j }8tr=͋)b՜ަ|"c˟ZtLֽ MzRFa\׮8CgGMU]{)j}Sĺ@lTYvyˁڒQ)>  pHYs B4IDATH[SuXy"=4*OCCJ L섍\;č6cvF [ަcԁ3K`Nr]E< ?<8|_d*Yͪx9_b*ߨerrO5vauŽʽ㥏X ުC2؍>[&V8[p[Z{Y[xNt8zCÒVYfY>IKfi[ka@kRĻ^xs}̑NkR=t^>.qJ!,5\`kj[[qCg I) ;'==>w^Cy/!!~0 sJ6OgLbxag{n^kooϟt_ŰIc#5p_>5`|)F0`c [iDCxpR'ӧ= i B .N?ئƜ%k,“>gǩ{9--9>X!LQ.jqޥ[.ݹk>( B1VQW%Yu^hRfRjfFba wו%% |>E~`kI-hff@&ǢNp ?-Tn䠾  #}Gڽo&{B ټ*bMI1;Ì02dHm60SMIIֈFiu&xe;~o lO{SD+ lZ3& J]2Q~8;+0c"~dD0B!TP(ZṝKbRS9϶e[?n޳+GlevE5dm6 ABߔϤ+qSPDe~WT\žzH_vscٍ=?ǰd ]#Տؔ T~MQEY|1^):--Gcd*ILBEzP~UUQ$A,"AX%YHrL(ى6txJb<$]Km%' ?$JvcN6IENDB`JKGL_3http://en.wikipedia.org/images/wikimedia-button.pngOdbplist00 X$versionT$topY$archiverX$objects_WebResourceResponse_NSKeyedArchiver& &,-345UVWXYZ[\]^_`abcdefghijklmnostU$null  !"#$%V$classR$3R$8S$10S$11R$5R$6R$4R$7R$2R$9R$0R$1%$ '()$+WNS.base[NS.relative_3http://en.wikipedia.org/images/wikimedia-button.png./01X$classesZ$classname12UNSURLXNSObject#A' ? 6789GWNS.keysZNS.objects#:;<=>?@ABCDEF HIJKLMNOPQRST !"WX-Cache]Cache-Control\Content-TypeVServer^Content-LengthTDateTEtagZConnectionWExpiresSVia]Accept-Ranges^X-Cache-Lookup]Last-Modified_9MISS from sq40.wikimedia.org, HIT from sq17.wikimedia.org_max-age=2592000Yimage/pngVApacheS890_Wed, 01 Oct 2008 15:25:56 GMT^"37a-43597dcd"Zkeep-alive_Fri, 31 Oct 2008 15:25:56 GMT_`1.0 sq40.wikimedia.org:3128 (squid/2.6.STABLE21), 1.0 sq17.wikimedia.org:80 (squid/2.6.STABLE21)Ubytes_@HIT from sq40.wikimedia.org:3128, HIT from sq17.wikimedia.org:80_Fri, 21 Oct 2005 23:46:21 GMT./pqqr2_NSMutableDictionary\NSDictionaryz./uvvw2_NSHTTPURLResponse]NSURLResponse)27:PRdJOXcflu~%*/:BFTcq.&).2FxTOzPNG  IHDRXTsBITOPLTEcdg왙րmnqlB¿s;̹̽z{~ӕӨʓ Fڝ„Z; *ar\ \m-ˬ؆jaZ+V @;ƴҌ*ɫF{"%3naPiq02eyT`[Fx0,IWa_,(c <1 `mԉВ+x/ap~ )ǀa0,a0e`-lY.X6RJ/E~WKL΄lY%exRU_3;KJJ)C1@O!weFg<;OຮRy_JsppKꇉ`w