From: Subject: EIA-422 - Wikipedia, the free encyclopedia Date: Thu, 7 Apr 2011 20:26:59 -0700 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01CBF562.25C13410" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5994 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01CBF562.25C13410 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: file://C:\Documents and Settings\Dan Fraser\My Documents\_TruTechnology\Design Info\RS485\RS-422.htm =EF=BB=BF EIA-422 - Wikipedia, = the free encyclopedia

EIA-422

From Wikipedia, the free encyclopedia

  (Redirected from RS-422)
Jump to: navigation= ,=20 search

American national standard ANSI/TIA/EIA-422-B (formerly = RS-422)=20 and its international equivalent ITU-T Recommendation V.11 (also=20 known as X.27), are technical standards that = specify=20 the "electrical characteristics of the balanced voltage digital = interface=20 circuit"[1]<= /SUP>.=20 It provides for data transmission, using balanced or = differential signaling, with unidirectional/non-reversible, terminated or=20 non-terminated transmission lines, point to point, or multi-drop. In = contrast to=20 RS-485 (which is=20 multi-point instead of multi-drop) EIA-422/V.11 does not allow multiple = drivers=20 but only multiple receivers.

The current title of the ANSI standard is TIA-422 Electrical=20 Characteristics of Balanced Voltage Differential Interface Circuits = and is=20 now in revision B, published in May 1994, and was reaffirmed = by the Telecommunications=20 Industry Association in 2005.

Several key advantages offered by this standard include the = differential=20 receiver, a differential driver and data rates as high as 10 megabaud at 12 metres (40 = ft). The=20 specification itself does not set an upper limit on data rate, but = rather shows=20 how signal rate degrades with cable length. The figure plotting this = stops at 10=20 Mbit/s.

EIA-422 only specifies the electrical signaling characteristics of a = single=20 balanced signal. Protocols and pin assignments are defined in other=20 specifications. The mechanical connections for this interface are = specified by=20 EIA-530 (DB-25 = connector) or EIA-449 (DC-37 = connector), however=20 devices exist which have 4 screw-posts to implement the transmit and = receive=20 pair only. The maximum cable length is 1200 m. Maximum data rates are 10 = Mbit/s=20 at 12 m or 100 kbit/s at 1200 m. EIA-422 cannot implement a truly = multi-point=20 communications network (such as with EIA-485), however one driver can be = connected to up to ten receivers.

A common use of EIA-422 is for RS-232 extenders. In = video=20 editing studios it is used to link control signals for all video and = audio=20 players/recorders to a central control board. Also, an RS-232-compatible = variant of=20 RS-422 using a mini-DIN-8 = connector=20 was widely used on Macintosh = hardware until=20 it was replaced by Intel's Universal = Serial=20 Bus on the iMac=20 in 1998.

EIA-422 can interoperate with interfaces designed to MIL-STD-188-114B, = but they=20 are not identical. EIA-422 uses a nominal 0 to 5 Volt signal while = MIL-STD-188-114B=20 uses a signal symmetric about 0 V. However the tolerance for common mode = voltage=20 in both specifications allows them to interoperate. Care must be taken = with the=20 termination network.

EIA-423 is a=20 similar specification for unbalanced signaling.

When used in relation to communications wiring, RS-422 wiring refers = to cable=20 made of 2 sets of twisted pair, = often with=20 each pair being shielded, and a ground wire. While a double pair cable = may be=20 practical for many RS-422 applications, the RS-422 specification only = defines=20 one signal path and does not assign any function to it. Any complete = cable=20 assembly (i.e. with connectors) should be labeled with the specification = that=20 defined the signal function and mechanical layout of the connector, such = as=20 RS-449.


3DWikibooks=20
Wikibooks has a book = on the=20 topic of=20

This article was originally = based on=20 material from the Free=20 On-line Dictionary of Computing, which is licensed under=20 the GFDL= .

[edit]=20 External links

[edit]=20 References

  1. ^=20 TIA/EIA STANDARD, Electrical Characteristics of Balanced Voltage = Digital=20 Interface Circuits, TIA/EIA-422-B, May 1994

[edit]=20 See also

  • B&B Electronics "RS-422 and RS-485 Application Note" B&B=20 Electronics Manufacturing Company, retrieved from [1]
  • National Semiconductor Application Note AN-1031 "TIA/EIA-422-B = Overview",=20 January 2000, National Semiconductor Inc., retrieved from [2]
  • National Semiconductor Application Note AN-759 "Comparing EIA-485 = and=20 EIA-422-A Line Drivers and Receivers in Multipoint Applications", = February=20 1991, National Semiconductor Inc., retrieved from [3]
  • National Semiconductor Application Note AN-214 "Transmission Line = Drivers=20 and Receivers or TIA/EIA Standards RS-422 and RS-423" August 1993, = National=20 Semiconductor Inc., retrieved from [4]
  • Maxim IC Application Note 723 "Selecting and Using RS-232, RS-422, = and=20 RS-485 Serial Data Standards" Dec 2000,

Maxim Integrated Products, Inc., retrieved from [5]

  • Texas Instruments Application Report "422 and 485 Standards = Overview and=20 System Configurations" June 2002, Texas Instruments, retrieved from [6]
  • Texas Instruments Application Report "Comparing Bus Solutions" = February=20 2004, Texas Instruments, retrieved from [7]
Retrieved from "http://en.wikipedia.org/wik= i/EIA-422"
Navigation
Interaction
Languages
  • Deutsch
  • Espa=C3=B1ol
  • =ED=95=9C=EA=B5=AD=EC=96=B4<= /A>
  • Italiano
  • Nederlands
  • =E6=97=A5=E6=9C=AC=E8=AA=9E=
  • Portugu=C3=AAs
  • =D0=A0=D1=83=D1=81=D1=81=D0= =BA=D0=B8=D0=B9
  • =E4=B8=AD=E6=96=87
  • =
3D"Wikimedia
------=_NextPart_000_0000_01CBF562.25C13410 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Dan%20Fraser/My%20Documents/_TruTechnology/Design%20Info/RS485/RS-422_files/50px-Wikibooks-logo-en.png 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 ------=_NextPart_000_0000_01CBF562.25C13410 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Dan%20Fraser/My%20Documents/_TruTechnology/Design%20Info/RS485/RS-422_files/poweredby_mediawiki_88x31.png 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 ------=_NextPart_000_0000_01CBF562.25C13410 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Dan%20Fraser/My%20Documents/_TruTechnology/Design%20Info/RS485/RS-422_files/wikimedia-button.png iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAMAAABUFvrSAAAAA3NCSVQICAjb4U/gAAAAilBMVEVj ZGeGh4nn6+yZmZni5uTW1taAgYNtbnGkpKYBhbLd3t1svZdCroKtrq/Cv79ztMs7ncDMzMy5t7en zL3Hx8h6e37l5eXw8PDK0dOVwtOozdsfkrnKk47E1tUNiba8RjxKs4bN3eKawM2SybIslr5Yp8TV 4N+80dbY5Oek08O5zNJ+wqW20cf29vZ09tAFAAAACXBIWXMAAArwAAAK8AFCrDSYAAACh0lEQVR4 Xs3RiZKbMAwGYMu3zX2T+072fP/XqwSUppM0bLfdmf1DxlhmvhGCRV8UFmVfkm8Ig/0beLnZbJYf cuNKT8Htr6BLcvuBCAv5o/Pf4HjTJ/4AbCyICVhRXk6JUssBXiqVpK16FCvyXJcPHvgJn5xLVD7C ydqdHsKEWjsN7x3B2QC3Kun2k5mE29Rhh4eiH3JcHOgN1vt/h/fIXN7CbZEtl8us2IbFauH6YRir FBO0Wqa6K1bM5gzLQDvGtNKMGdEqrcmrRth7fyIlCMPtM26et2EYUGlxwZ0w3jKDz2WWeVSZ9Z5g lltGBY8B8LERtHgwLPeUHsZJ7FfoYc/o0vq2X+Ms8Chj1gD+he/gCjzBMasMq6hgbdSJwtCSsaiC K3jh1i8FgWFwfg0pxQXhmceAYZkwLO5hMGUPx2DtLWxZLlg2wFJKhC9FBwZ+gFcES0zOhGxZJaVl eKmqUrKDVV+QGACJo6ClqgDwDjPC87cRHjveS0rVSimiAZalAdXBQ4ExkEAfTyGcd2WjRhhnPDv3 o5AdvN3N6OPJT4fguq4T51J5uIJf65RK9efTw3Pn3PwcjHBwnq+dS+qHiadgzvkT9nc8o9zDwWp3 xEns+MOU412W3Z72MKcG0119CF7lITjIXepw6nesSliuhS0BIg48ByEzDaXW+Z9gnqC0QOoJf3x+ xN3pXpMRt23FJXAuFHBdRpFQXEbl3Y4bCj85TJrMZrMkXXduc5syaoSHpsGLVl2WStRNE5XNTQju Qj1TEKUk5N7CGiypNApcc4BYaVClju7CQ+bY6YCn8+ZusmsArk8ewEQn6WKxOCZz3kzDXEzB71fh T7sn/v4/QvBNvjv8RfkBEHe0Bwh42FAAAAAASUVORK5CYII= ------=_NextPart_000_0000_01CBF562.25C13410 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Dan%20Fraser/My%20Documents/_TruTechnology/Design%20Info/RS485/RS-422_files/commonPrint.css A.stub { COLOR: #ba0000; TEXT-DECORATION: none } A.new { COLOR: #ba0000; TEXT-DECORATION: none } #toc { BORDER-BOTTOM: #aaaaaa 1px solid; BORDER-LEFT: #aaaaaa 1px solid; = PADDING-BOTTOM: 5px; BACKGROUND-COLOR: #f9f9f9; PADDING-LEFT: 5px; = PADDING-RIGHT: 5px; BORDER-TOP: #aaaaaa 1px solid; BORDER-RIGHT: #aaaaaa = 1px solid; PADDING-TOP: 5px } .tocindent { MARGIN-LEFT: 2em } .tocline { MARGIN-BOTTOM: 0px } DIV.floatright { BORDER-BOTTOM: white 0.8em solid; POSITION: relative; BORDER-LEFT: = white 1.4em solid; MARGIN: 0px; FLOAT: right; CLEAR: right; BORDER-TOP: = white 0.5em solid; BORDER-RIGHT: white 0px solid } DIV.floatright P { FONT-STYLE: italic } DIV.floatleft { BORDER-BOTTOM: white 0.8em solid; POSITION: relative; BORDER-LEFT: = white 0px solid; MARGIN: 0.3em 0.5em 0.5em 0px; FLOAT: left; BORDER-TOP: = white 0.5em solid; BORDER-RIGHT: white 1.4em solid } DIV.floatleft P { FONT-STYLE: italic } DIV.thumb { BORDER-BOTTOM-STYLE: solid; BORDER-BOTTOM-COLOR: white; = BORDER-RIGHT-STYLE: solid; BORDER-TOP-COLOR: white; WIDTH: auto; = BORDER-TOP-STYLE: solid; MARGIN-BOTTOM: 0.5em; BORDER-RIGHT-COLOR: = white; BORDER-LEFT-STYLE: solid; OVERFLOW: hidden; BORDER-LEFT-COLOR: = white } DIV.thumb DIV { BORDER-BOTTOM: #cccccc 1px solid; TEXT-ALIGN: center; BORDER-LEFT: = #cccccc 1px solid; PADDING-BOTTOM: 3px !important; BACKGROUND-COLOR: = #f9f9f9; PADDING-LEFT: 3px !important; PADDING-RIGHT: 3px !important; = FONT-SIZE: 94%; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px = solid; PADDING-TOP: 3px !important } DIV.thumb DIV A IMG { BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; = BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid } DIV.thumb DIV DIV.thumbcaption { BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: = 0.1em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: medium none; = BORDER-RIGHT: medium none; PADDING-TOP: 0.3em } DIV.magnify { DISPLAY: none } DIV.tright { BORDER-RIGHT-WIDTH: 0px; FLOAT: right; BORDER-TOP-WIDTH: 0.5em; = BORDER-BOTTOM-WIDTH: 0.8em; CLEAR: right; BORDER-LEFT-WIDTH: 1.4em } DIV.tleft { BORDER-RIGHT-WIDTH: 1.4em; FLOAT: left; BORDER-TOP-WIDTH: 0.5em; = BORDER-BOTTOM-WIDTH: 0.8em; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0.5em } IMG.thumbborder { BORDER-BOTTOM: #dddddd 1px solid; BORDER-LEFT: #dddddd 1px solid; = BORDER-TOP: #dddddd 1px solid; BORDER-RIGHT: #dddddd 1px solid } TABLE.rimage { POSITION: relative; TEXT-ALIGN: center; WIDTH: 1pt; MARGIN-BOTTOM: 1em; = FLOAT: right; MARGIN-LEFT: 1em } BODY { PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: = 0px; BACKGROUND: white; COLOR: black; PADDING-TOP: 0px } .noprint { DISPLAY: none } DIV#jump-to-nav { DISPLAY: none } DIV.top { DISPLAY: none } DIV#column-one { DISPLAY: none } #colophon { DISPLAY: none } .editsection { DISPLAY: none } .toctoggle { DISPLAY: none } .tochidden { DISPLAY: none } DIV#f-poweredbyico { DISPLAY: none } DIV#f-copyrightico { DISPLAY: none } LI#viewcount { DISPLAY: none } LI#about { DISPLAY: none } LI#disclaimer { DISPLAY: none } LI#privacy { DISPLAY: none } UL { LIST-STYLE-TYPE: square } #content { BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: = 0px !important; MARGIN: 0px; PADDING-LEFT: 0px !important; = PADDING-RIGHT: 0px !important; BACKGROUND: none transparent scroll = repeat 0% 0%; BORDER-TOP: medium none; BORDER-RIGHT: medium none; = PADDING-TOP: 0px !important } #footer { BACKGROUND: white; COLOR: black; BORDER-TOP: black 1px solid } H1 { FONT-WEIGHT: bold } H2 { FONT-WEIGHT: bold } H3 { FONT-WEIGHT: bold } H4 { FONT-WEIGHT: bold } H5 { FONT-WEIGHT: bold } H6 { FONT-WEIGHT: bold } P { LINE-HEIGHT: 1.2em; MARGIN: 1em 0px } .documentDescription { LINE-HEIGHT: 1.2em; MARGIN: 1em 0px } .tocindent P { MARGIN: 0px } PRE { BORDER-BOTTOM: black 1pt dashed; BORDER-LEFT: black 1pt dashed; = PADDING-BOTTOM: 1em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; WHITE-SPACE: = pre; BACKGROUND: white; COLOR: black; FONT-SIZE: 8pt; OVERFLOW: auto; = BORDER-TOP: black 1pt dashed; BORDER-RIGHT: black 1pt dashed; = PADDING-TOP: 1em } TABLE.listing { BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; = BORDER-COLLAPSE: collapse; BORDER-TOP: black 1pt solid; BORDER-RIGHT: = black 1pt solid } TABLE.listing TD { BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; = BORDER-COLLAPSE: collapse; BORDER-TOP: black 1pt solid; BORDER-RIGHT: = black 1pt solid } A { PADDING-BOTTOM: 0px !important; PADDING-LEFT: 0px !important; = PADDING-RIGHT: 0px !important; BACKGROUND: none transparent scroll = repeat 0% 0%; COLOR: black !important; PADDING-TOP: 0px !important } A:link { BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #520; = TEXT-DECORATION: underline } A:visited { BACKGROUND: none transparent scroll repeat 0% 0%; COLOR: #520; = TEXT-DECORATION: underline } #content A.text.external:after { CONTENT: " (" attr(href) ") " } #content A.autonumber.external:after { CONTENT: " (" attr(href) ") " } #globalWrapper { MIN-WIDTH: 0px !important; WIDTH: 100% !important } #content { BACKGROUND: white; COLOR: black } #column-content { MARGIN: 0px } #column-content #content { PADDING-BOTTOM: 1em; MARGIN: 0px; PADDING-LEFT: 1em; PADDING-RIGHT: = 1em; PADDING-TOP: 1em } A { COLOR: black !important; TEXT-DECORATION: none !important } A.external { COLOR: black !important; TEXT-DECORATION: none !important } A.new { COLOR: black !important; TEXT-DECORATION: none !important } A.stub { COLOR: black !important; TEXT-DECORATION: none !important } A { COLOR: inherit !important; TEXT-DECORATION: inherit !important } A.external { COLOR: inherit !important; TEXT-DECORATION: inherit !important } A.new { COLOR: inherit !important; TEXT-DECORATION: inherit !important } A.stub { COLOR: inherit !important; TEXT-DECORATION: inherit !important } IMG { BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: = medium none; BORDER-RIGHT: medium none } IMG.tex { VERTICAL-ALIGN: middle } SPAN.texhtml { FONT-FAMILY: serif } DIV.townBox { BORDER-BOTTOM: gray 1px solid; POSITION: relative; BORDER-LEFT: gray = 1px solid; PADDING-BOTTOM: 0.3em; PADDING-LEFT: 0.3em; WIDTH: 200px; = PADDING-RIGHT: 0.3em; BACKGROUND: white; FLOAT: right; MARGIN-LEFT: 1em; = CLEAR: right; OVERFLOW: hidden; BORDER-TOP: gray 1px solid; = BORDER-RIGHT: gray 1px solid; PADDING-TOP: 0.3em } DIV.townBox DL { PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0.3em; PADDING-LEFT: 0px; = PADDING-RIGHT: 0px; FONT-SIZE: 96%; PADDING-TOP: 0px } DIV.townBox DL DT { MARGIN: 0.4em 0px 0px; BACKGROUND: none transparent scroll repeat 0% 0% } DIV.townBox DL DD { BACKGROUND-COLOR: #f3f3f3; MARGIN: 0.1em 0px 0px 1.1em } #siteNotice { DISPLAY: none } TABLE.gallery { BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; = PADDING-BOTTOM: 2px; BACKGROUND-COLOR: #ffffff; MARGIN: 2px; = PADDING-LEFT: 2px; PADDING-RIGHT: 2px; BORDER-TOP: #cccccc 1px solid; = BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 2px } TABLE.gallery TR { VERTICAL-ALIGN: top } DIV.gallerybox { BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; = BACKGROUND-COLOR: #f9f9f9; MARGIN: 2px; WIDTH: 150px; BORDER-TOP: = #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid } DIV.gallerybox DIV.thumb { BORDER-BOTTOM: #cccccc 1px solid; TEXT-ALIGN: center; BORDER-LEFT: = #cccccc 1px solid; MARGIN: 2px; BORDER-TOP: #cccccc 1px solid; = BORDER-RIGHT: #cccccc 1px solid } DIV.gallerytext { PADDING-BOTTOM: 2px; PADDING-LEFT: 4px; PADDING-RIGHT: 4px; FONT-SIZE: = 94%; PADDING-TOP: 2px } TABLE.diff { BACKGROUND: white } TD.diff-otitle { BACKGROUND: #ffffff } TD.diff-ntitle { BACKGROUND: #ffffff } TD.diff-addedline { BORDER-BOTTOM: black 2px solid; BORDER-LEFT: black 2px solid; = BACKGROUND: #ccffcc; FONT-SIZE: smaller; BORDER-TOP: black 2px solid; = BORDER-RIGHT: black 2px solid } TD.diff-deletedline { BORDER-BOTTOM: black 2px dotted; BORDER-LEFT: black 2px dotted; = BACKGROUND: #ffffaa; FONT-SIZE: smaller; BORDER-TOP: black 2px dotted; = BORDER-RIGHT: black 2px dotted } TD.diff-context { BACKGROUND: #eeeeee; FONT-SIZE: smaller } .diffchange { COLOR: silver; FONT-WEIGHT: bold; TEXT-DECORATION: underline } ------=_NextPart_000_0000_01CBF562.25C13410 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Dan%20Fraser/My%20Documents/_TruTechnology/Design%20Info/RS485/RS-422_files/wikibits.js // MediaWiki JavaScript support functions=0A= =0A= var clientPC =3D navigator.userAgent.toLowerCase(); // Get client info=0A= var is_gecko =3D ((clientPC.indexOf('gecko')!=3D-1) && = (clientPC.indexOf('spoofer')=3D=3D-1)=0A= && (clientPC.indexOf('khtml') =3D=3D -1) && = (clientPC.indexOf('netscape/7.0')=3D=3D-1));=0A= var is_safari =3D ((clientPC.indexOf('applewebkit')!=3D-1) && = (clientPC.indexOf('spoofer')=3D=3D-1));=0A= var is_khtml =3D (navigator.vendor =3D=3D 'KDE' || ( document.childNodes = && !document.all && !navigator.taintEnabled ));=0A= // For accesskeys=0A= var is_ff2_win =3D (clientPC.indexOf('firefox/2')!=3D-1 || = clientPC.indexOf('minefield/3')!=3D-1) && = clientPC.indexOf('windows')!=3D-1;=0A= var is_ff2_x11 =3D (clientPC.indexOf('firefox/2')!=3D-1 || = clientPC.indexOf('minefield/3')!=3D-1) && clientPC.indexOf('x11')!=3D-1;=0A= if (clientPC.indexOf('opera') !=3D -1) {=0A= var is_opera =3D true;=0A= var is_opera_preseven =3D (window.opera && !document.childNodes);=0A= var is_opera_seven =3D (window.opera && document.childNodes);=0A= var is_opera_95 =3D = (clientPC.search(/opera\/(9.[5-9]|[1-9][0-9])/)!=3D-1);=0A= }=0A= =0A= // Global external objects used by this script.=0A= /*extern ta, stylepath, skin */=0A= =0A= // add any onload functions in this hook (please don't hard-code any = events in the xhtml source)=0A= var doneOnloadHook;=0A= =0A= if (!window.onloadFuncts) {=0A= var onloadFuncts =3D [];=0A= }=0A= =0A= function addOnloadHook(hookFunct) {=0A= // Allows add-on scripts to add onload functions=0A= onloadFuncts[onloadFuncts.length] =3D hookFunct;=0A= }=0A= =0A= function hookEvent(hookName, hookFunct) {=0A= if (window.addEventListener) {=0A= window.addEventListener(hookName, hookFunct, false);=0A= } else if (window.attachEvent) {=0A= window.attachEvent("on" + hookName, hookFunct);=0A= }=0A= }=0A= =0A= // document.write special stylesheet links=0A= if (typeof stylepath !=3D 'undefined' && typeof skin !=3D 'undefined') {=0A= if (is_opera_preseven) {=0A= document.write('');=0A= } else if (is_opera_seven && !is_opera_95) {=0A= document.write('');=0A= } else if (is_khtml) {=0A= document.write('');=0A= }=0A= }=0A= =0A= if (wgBreakFrames) {=0A= // Un-trap us from framesets=0A= if (window.top !=3D window) {=0A= window.top.location =3D window.location;=0A= }=0A= }=0A= =0A= // for enhanced RecentChanges=0A= function toggleVisibility(_levelId, _otherId, _linkId) {=0A= var thisLevel =3D document.getElementById(_levelId);=0A= var otherLevel =3D document.getElementById(_otherId);=0A= var linkLevel =3D document.getElementById(_linkId);=0A= if (thisLevel.style.display =3D=3D 'none') {=0A= thisLevel.style.display =3D 'block';=0A= otherLevel.style.display =3D 'none';=0A= linkLevel.style.display =3D 'inline';=0A= } else {=0A= thisLevel.style.display =3D 'none';=0A= otherLevel.style.display =3D 'inline';=0A= linkLevel.style.display =3D 'none';=0A= }=0A= }=0A= =0A= function historyRadios(parent) {=0A= var inputs =3D parent.getElementsByTagName('input');=0A= var radios =3D [];=0A= for (var i =3D 0; i < inputs.length; i++) {=0A= if (inputs[i].name =3D=3D "diff" || inputs[i].name =3D=3D "oldid") {=0A= radios[radios.length] =3D inputs[i];=0A= }=0A= }=0A= return radios;=0A= }=0A= =0A= // check selection and tweak visibility/class onclick=0A= function diffcheck() {=0A= var dli =3D false; // the li where the diff radio is checked=0A= var oli =3D false; // the li where the oldid radio is checked=0A= var hf =3D document.getElementById('pagehistory');=0A= if (!hf) {=0A= return true;=0A= }=0A= var lis =3D hf.getElementsByTagName('li');=0A= for (var i=3D0;i=3D 0) ? "-" : "+") + ((tzHour < 10) ? "0" : = "") + tzHour + ((tzMin < 10) ? "0" : "") + tzMin;=0A= if (tz !=3D tzString) {=0A= var junk =3D msg.split('$1');=0A= document.write(junk[0] + "UTC" + tzString + junk[1]);=0A= }=0A= }=0A= =0A= function unhidetzbutton() {=0A= var tzb =3D document.getElementById('guesstimezonebutton');=0A= if (tzb) {=0A= tzb.style.display =3D 'inline';=0A= }=0A= }=0A= =0A= // in [-]HH:MM format...=0A= // won't yet work with non-even tzs=0A= function fetchTimezone() {=0A= // FIXME: work around Safari bug=0A= var localclock =3D new Date();=0A= // returns negative offset from GMT in minutes=0A= var tzRaw =3D localclock.getTimezoneOffset();=0A= var tzHour =3D Math.floor( Math.abs(tzRaw) / 60);=0A= var tzMin =3D Math.abs(tzRaw) % 60;=0A= var tzString =3D ((tzRaw >=3D 0) ? "-" : "") + ((tzHour < 10) ? "0" : = "") + tzHour +=0A= ":" + ((tzMin < 10) ? "0" : "") + tzMin;=0A= return tzString;=0A= }=0A= =0A= function guessTimezone(box) {=0A= document.getElementsByName("wpHourDiff")[0].value =3D fetchTimezone();=0A= }=0A= =0A= function showTocToggle() {=0A= if (document.createTextNode) {=0A= // Uses DOM calls to avoid document.write + XHTML issues=0A= =0A= var linkHolder =3D document.getElementById('toctitle');=0A= if (!linkHolder) {=0A= return;=0A= }=0A= =0A= var outerSpan =3D document.createElement('span');=0A= outerSpan.className =3D 'toctoggle';=0A= =0A= var toggleLink =3D document.createElement('a');=0A= toggleLink.id =3D 'togglelink';=0A= toggleLink.className =3D 'internal';=0A= toggleLink.href =3D 'javascript:toggleToc()';=0A= toggleLink.appendChild(document.createTextNode(tocHideText));=0A= =0A= outerSpan.appendChild(document.createTextNode('['));=0A= outerSpan.appendChild(toggleLink);=0A= outerSpan.appendChild(document.createTextNode(']'));=0A= =0A= linkHolder.appendChild(document.createTextNode(' '));=0A= linkHolder.appendChild(outerSpan);=0A= =0A= var cookiePos =3D document.cookie.indexOf("hidetoc=3D");=0A= if (cookiePos > -1 && document.cookie.charAt(cookiePos + 8) =3D=3D 1) {=0A= toggleToc();=0A= }=0A= }=0A= }=0A= =0A= function changeText(el, newText) {=0A= // Safari work around=0A= if (el.innerText) {=0A= el.innerText =3D newText;=0A= } else if (el.firstChild && el.firstChild.nodeValue) {=0A= el.firstChild.nodeValue =3D newText;=0A= }=0A= }=0A= =0A= function toggleToc() {=0A= var toc =3D = document.getElementById('toc').getElementsByTagName('ul')[0];=0A= var toggleLink =3D document.getElementById('togglelink');=0A= =0A= if (toc && toggleLink && toc.style.display =3D=3D 'none') {=0A= changeText(toggleLink, tocHideText);=0A= toc.style.display =3D 'block';=0A= document.cookie =3D "hidetoc=3D0";=0A= } else {=0A= changeText(toggleLink, tocShowText);=0A= toc.style.display =3D 'none';=0A= document.cookie =3D "hidetoc=3D1";=0A= }=0A= }=0A= =0A= var mwEditButtons =3D [];=0A= var mwCustomEditButtons =3D []; // eg to add in MediaWiki:Common.js=0A= =0A= // this function generates the actual toolbar buttons with localized text=0A= // we use it to avoid creating the toolbar where javascript is not = enabled=0A= function addButton(imageFile, speedTip, tagOpen, tagClose, sampleText, = imageId) {=0A= // Don't generate buttons for browsers which don't fully=0A= // support it.=0A= mwEditButtons[mwEditButtons.length] =3D=0A= {"imageId": imageId,=0A= "imageFile": imageFile,=0A= "speedTip": speedTip,=0A= "tagOpen": tagOpen,=0A= "tagClose": tagClose,=0A= "sampleText": sampleText};=0A= }=0A= =0A= // this function generates the actual toolbar buttons with localized text=0A= // we use it to avoid creating the toolbar where javascript is not = enabled=0A= function mwInsertEditButton(parent, item) {=0A= var image =3D document.createElement("img");=0A= image.width =3D 23;=0A= image.height =3D 22;=0A= image.className =3D "mw-toolbar-editbutton";=0A= if (item.imageId) image.id =3D item.imageId;=0A= image.src =3D item.imageFile;=0A= image.border =3D 0;=0A= image.alt =3D item.speedTip;=0A= image.title =3D item.speedTip;=0A= image.style.cursor =3D "pointer";=0A= image.onclick =3D function() {=0A= insertTags(item.tagOpen, item.tagClose, item.sampleText);=0A= return false;=0A= };=0A= =0A= parent.appendChild(image);=0A= return true;=0A= }=0A= =0A= function mwSetupToolbar() {=0A= var toolbar =3D document.getElementById('toolbar');=0A= if (!toolbar) { return false; }=0A= =0A= var textbox =3D document.getElementById('wpTextbox1');=0A= if (!textbox) { return false; }=0A= =0A= // Don't generate buttons for browsers which don't fully=0A= // support it.=0A= if (!(document.selection && document.selection.createRange)=0A= && textbox.selectionStart =3D=3D=3D null) {=0A= return false;=0A= }=0A= =0A= for (var i =3D 0; i < mwEditButtons.length; i++) {=0A= mwInsertEditButton(toolbar, mwEditButtons[i]);=0A= }=0A= for (var i =3D 0; i < mwCustomEditButtons.length; i++) {=0A= mwInsertEditButton(toolbar, mwCustomEditButtons[i]);=0A= }=0A= return true;=0A= }=0A= =0A= function escapeQuotes(text) {=0A= var re =3D new RegExp("'","g");=0A= text =3D text.replace(re,"\\'");=0A= re =3D new RegExp("\\n","g");=0A= text =3D text.replace(re,"\\n");=0A= return escapeQuotesHTML(text);=0A= }=0A= =0A= function escapeQuotesHTML(text) {=0A= var re =3D new RegExp('&',"g");=0A= text =3D text.replace(re,"&");=0A= re =3D new RegExp('"',"g");=0A= text =3D text.replace(re,""");=0A= re =3D new RegExp('<',"g");=0A= text =3D text.replace(re,"<");=0A= re =3D new RegExp('>',"g");=0A= text =3D text.replace(re,">");=0A= return text;=0A= }=0A= =0A= // apply tagOpen/tagClose to selection in textarea,=0A= // use sampleText instead of selection if there is none=0A= function insertTags(tagOpen, tagClose, sampleText) {=0A= var txtarea;=0A= if (document.editform) {=0A= txtarea =3D document.editform.wpTextbox1;=0A= } else {=0A= // some alternate form? take the first one we can find=0A= var areas =3D document.getElementsByTagName('textarea');=0A= txtarea =3D areas[0];=0A= }=0A= var selText, isSample =3D false;=0A= =0A= if (document.selection && document.selection.createRange) { // IE/Opera=0A= =0A= //save window scroll position=0A= if (document.documentElement && document.documentElement.scrollTop)=0A= var winScroll =3D document.documentElement.scrollTop=0A= else if (document.body)=0A= var winScroll =3D document.body.scrollTop;=0A= //get current selection =0A= txtarea.focus();=0A= var range =3D document.selection.createRange();=0A= selText =3D range.text;=0A= //insert tags=0A= checkSelectedText();=0A= range.text =3D tagOpen + selText + tagClose;=0A= //mark sample text as selected=0A= if (isSample && range.moveStart) {=0A= if (window.opera)=0A= tagClose =3D tagClose.replace(/\n/g,'');=0A= range.moveStart('character', - tagClose.length - selText.length); =0A= range.moveEnd('character', - tagClose.length); =0A= }=0A= range.select(); =0A= //restore window scroll position=0A= if (document.documentElement && document.documentElement.scrollTop)=0A= document.documentElement.scrollTop =3D winScroll=0A= else if (document.body)=0A= document.body.scrollTop =3D winScroll;=0A= =0A= } else if (txtarea.selectionStart || txtarea.selectionStart =3D=3D '0') = { // Mozilla=0A= =0A= //save textarea scroll position=0A= var textScroll =3D txtarea.scrollTop;=0A= //get current selection=0A= txtarea.focus();=0A= var startPos =3D txtarea.selectionStart;=0A= var endPos =3D txtarea.selectionEnd;=0A= selText =3D txtarea.value.substring(startPos, endPos);=0A= //insert tags=0A= checkSelectedText();=0A= txtarea.value =3D txtarea.value.substring(0, startPos)=0A= + tagOpen + selText + tagClose=0A= + txtarea.value.substring(endPos, txtarea.value.length);=0A= //set new selection=0A= if (isSample) {=0A= txtarea.selectionStart =3D startPos + tagOpen.length;=0A= txtarea.selectionEnd =3D startPos + tagOpen.length + selText.length;=0A= } else {=0A= txtarea.selectionStart =3D startPos + tagOpen.length + selText.length = + tagClose.length;=0A= txtarea.selectionEnd =3D txtarea.selectionStart;=0A= }=0A= //restore textarea scroll position=0A= txtarea.scrollTop =3D textScroll;=0A= } =0A= =0A= function checkSelectedText(){=0A= if (!selText) {=0A= selText =3D sampleText;=0A= isSample =3D true;=0A= } else if (selText.charAt(selText.length - 1) =3D=3D ' ') { //exclude = ending space char=0A= selText =3D selText.substring(0, selText.length - 1);=0A= tagClose +=3D ' '=0A= } =0A= }=0A= =0A= }=0A= =0A= =0A= /**=0A= * Set the accesskey prefix based on browser detection.=0A= */=0A= var tooltipAccessKeyPrefix =3D 'alt-';=0A= if (is_opera) {=0A= tooltipAccessKeyPrefix =3D 'shift-esc-';=0A= } else if (is_safari=0A= || navigator.userAgent.toLowerCase().indexOf('mac') !=3D -1=0A= || navigator.userAgent.toLowerCase().indexOf('konqueror') !=3D -1 ) {=0A= tooltipAccessKeyPrefix =3D 'ctrl-';=0A= } else if (is_ff2_x11 || is_ff2_win) {=0A= tooltipAccessKeyPrefix =3D 'alt-shift-';=0A= }=0A= var tooltipAccessKeyRegexp =3D /\[(ctrl-)?(alt-)?(shift-)?(esc-)?.\]$/;=0A= =0A= /**=0A= * Add the appropriate prefix to the accesskey shown in the tooltip.=0A= * If the nodeList parameter is given, only those nodes are updated;=0A= * otherwise, all the nodes that will probably have accesskeys by=0A= * default are updated.=0A= *=0A= * @param Array nodeList -- list of elements to update=0A= */=0A= function updateTooltipAccessKeys( nodeList ) {=0A= if ( !nodeList ) {=0A= // skins without a "column-one" element don't seem to have links with = accesskeys either=0A= var columnOne =3D document.getElementById("column-one");=0A= if ( columnOne )=0A= updateTooltipAccessKeys( columnOne.getElementsByTagName("a") );=0A= // these are rare enough that no such optimization is needed=0A= updateTooltipAccessKeys( document.getElementsByTagName("input") );=0A= updateTooltipAccessKeys( document.getElementsByTagName("label") );=0A= return;=0A= }=0A= =0A= for ( var i =3D 0; i < nodeList.length; i++ ) {=0A= var element =3D nodeList[i];=0A= var tip =3D element.getAttribute("title");=0A= var key =3D element.getAttribute("accesskey");=0A= if ( key && tooltipAccessKeyRegexp.exec(tip) ) {=0A= tip =3D tip.replace(tooltipAccessKeyRegexp,=0A= "["+tooltipAccessKeyPrefix+key+"]");=0A= element.setAttribute("title", tip );=0A= }=0A= }=0A= }=0A= =0A= /**=0A= * Add a link to one of the portlet menus on the page, including:=0A= *=0A= * p-cactions: Content actions (shown as tabs above the main content in = Monobook)=0A= * p-personal: Personal tools (shown at the top right of the page in = Monobook)=0A= * p-navigation: Navigation=0A= * p-tb: Toolbox=0A= *=0A= * This function exists for the convenience of custom JS authors. All=0A= * but the first three parameters are optional, though providing at=0A= * least an id and a tooltip is recommended.=0A= *=0A= * By default the new link will be added to the end of the list. To=0A= * add the link before a given existing item, pass the DOM node of=0A= * that item (easily obtained with document.getElementById()) as the=0A= * nextnode parameter; to add the link _after_ an existing item, pass=0A= * the node's nextSibling instead.=0A= *=0A= * @param String portlet -- id of the target portlet ("p-cactions", = "p-personal", "p-navigation" or "p-tb")=0A= * @param String href -- link URL=0A%3d.html * @param String text -- link text (will be automatically lowercased by = CSS for p-cactions in Monobook)=0A= * @param String id -- id of the new item, should be unique and = preferably have the appropriate prefix ("ca-", "pt-", "n-" or "t-")=0A= * @param String tooltip -- text to show when hovering over the link, = without accesskey suffix=0A= * @param String accesskey -- accesskey to activate this link (one = character, try to avoid conflicts)=0A= * @param Node nextnode -- the DOM node before which the new item should = be added, should be another item in the same list=0A= *=0A= * @return Node -- the DOM node of the new item (an LI element) or null=0A= */=0A= function addPortletLink(portlet, href, text, id, tooltip, accesskey, = nextnode) {=0A= var node =3D document.getElementById(portlet);=0A= if ( !node ) return null;=0A= node =3D node.getElementsByTagName( "ul" )[0];=0A= if ( !node ) return null;=0A= =0A= var link =3D document.createElement( "a" );=0A= link.appendChild( document.createTextNode( text ) );=0A= link.href =3D href;=0A= =0A= var item =3D document.createElement( "li" );=0A= item.appendChild( link );=0A= if ( id ) item.id =3D id;=0A= =0A= if ( accesskey ) {=0A= link.setAttribute( "accesskey", accesskey );=0A= tooltip +=3D " ["+accesskey+"]";=0A= }=0A= if ( tooltip ) {=0A= link.setAttribute( "title", tooltip );=0A= }=0A= if ( accesskey && tooltip ) {=0A= updateTooltipAccessKeys( new Array( link ) );=0A= }=0A= =0A= if ( nextnode && nextnode.parentNode =3D=3D node )=0A= node.insertBefore( item, nextnode );=0A= else=0A= node.appendChild( item ); // IE compatibility (?)=0A= =0A= return item;=0A= }=0A= =0A= =0A= /**=0A= * Set up accesskeys/tooltips from the deprecated ta array. If doId=0A= * is specified, only set up for that id. Note that this function is=0A= * deprecated and will not be supported indefinitely -- use=0A= * updateTooltipAccessKey() instead.=0A= *=0A= * @param mixed doId string or null=0A= */=0A= function akeytt( doId ) {=0A= // A lot of user scripts (and some of the code below) break if=0A= // ta isn't defined, so we make sure it is. Explictly using=0A= // window.ta avoids a "ta is not defined" error.=0A= if (!window.ta) window.ta =3D new Array;=0A= =0A= // Make a local, possibly restricted, copy to avoid clobbering=0A= // the original.=0A= var ta;=0A= if ( doId ) {=0A= ta =3D [doId];=0A= } else {=0A= ta =3D window.ta;=0A= }=0A= =0A= // Now deal with evil deprecated ta=0A= var watchCheckboxExists =3D document.getElementById( 'wpWatchthis' ) ? = true : false;=0A= for (var id in ta) {=0A= var n =3D document.getElementById(id);=0A= if (n) {=0A= var a =3D null;=0A= var ak =3D '';=0A= // Are we putting accesskey in it=0A= if (ta[id][0].length > 0) {=0A= // Is this object a object? If not assume it's the next child.=0A= =0A= if (n.nodeName.toLowerCase() =3D=3D "a") {=0A= a =3D n;=0A= } else {=0A= a =3D n.childNodes[0];=0A= }=0A= // Don't add an accesskey for the watch tab if the watch=0A= // checkbox is also available.=0A= if (a && ((id !=3D 'ca-watch' && id !=3D 'ca-unwatch') || = !watchCheckboxExists)) {=0A= a.accessKey =3D ta[id][0];=0A= ak =3D ' ['+tooltipAccessKeyPrefix+ta[id][0]+']';=0A= }=0A= } else {=0A= // We don't care what type the object is when assigning tooltip=0A= a =3D n;=0A= ak =3D '';=0A= }=0A= =0A= if (a) {=0A= a.title =3D ta[id][1]+ak;=0A= }=0A= }=0A= }=0A= }=0A= =0A= function setupRightClickEdit() {=0A= if (document.getElementsByTagName) {=0A= var spans =3D document.getElementsByTagName('span');=0A= for (var i =3D 0; i < spans.length; i++) {=0A= var el =3D spans[i];=0A= if(el.className =3D=3D 'editsection') {=0A= addRightClickEditHandler(el);=0A= }=0A= }=0A= }=0A= }=0A= =0A= function addRightClickEditHandler(el) {=0A= for (var i =3D 0; i < el.childNodes.length; i++) {=0A= var link =3D el.childNodes[i];=0A= if (link.nodeType =3D=3D 1 && link.nodeName.toLowerCase() =3D=3D 'a') {=0A= var editHref =3D link.getAttribute('href');=0A= // find the enclosing (parent) header=0A= var prev =3D el.parentNode;=0A= if (prev && prev.nodeType =3D=3D 1 &&=0A= prev.nodeName.match(/^[Hh][1-6]$/)) {=0A= prev.oncontextmenu =3D function(e) {=0A= if (!e) { e =3D window.event; }=0A= // e is now the event in all browsers=0A= var targ;=0A= if (e.target) { targ =3D e.target; }=0A= else if (e.srcElement) { targ =3D e.srcElement; }=0A= if (targ.nodeType =3D=3D 3) { // defeat Safari bug=0A= targ =3D targ.parentNode;=0A= }=0A= // targ is now the target element=0A= =0A= // We don't want to deprive the noble reader of a context menu=0A= // for the section edit link, do we? (Might want to extend this=0A= // to all 's?)=0A= if (targ.nodeName.toLowerCase() !=3D 'a'=0A= || targ.parentNode.className !=3D 'editsection') {=0A= document.location =3D editHref;=0A= return false;=0A= }=0A= return true;=0A= };=0A= }=0A= }=0A= }=0A= }=0A= =0A= var checkboxes;=0A= var lastCheckbox;=0A= =0A= function setupCheckboxShiftClick() {=0A= checkboxes =3D [];=0A= lastCheckbox =3D null;=0A= var inputs =3D document.getElementsByTagName('input');=0A= addCheckboxClickHandlers(inputs);=0A= }=0A= =0A= function addCheckboxClickHandlers(inputs, start) {=0A= if ( !start) start =3D 0;=0A= =0A= var finish =3D start + 250;=0A= if ( finish > inputs.length )=0A= finish =3D inputs.length;=0A= =0A= for ( var i =3D start; i < finish; i++ ) {=0A= var cb =3D inputs[i];=0A= if ( !cb.type || cb.type.toLowerCase() !=3D 'checkbox' )=0A= continue;=0A= var end =3D checkboxes.length;=0A= checkboxes[end] =3D cb;=0A= cb.index =3D end;=0A= cb.onclick =3D checkboxClickHandler;=0A= }=0A= =0A= if ( finish < inputs.length ) {=0A= setTimeout( function () {=0A= addCheckboxClickHandlers(inputs, finish);=0A= }, 200 );=0A= }=0A= }=0A= =0A= function checkboxClickHandler(e) {=0A= if (typeof e =3D=3D 'undefined') {=0A= e =3D window.event;=0A= }=0A= if ( !e.shiftKey || lastCheckbox =3D=3D=3D null ) {=0A= lastCheckbox =3D this.index;=0A= return true;=0A= }=0A= var endState =3D this.checked;=0A= var start, finish;=0A= if ( this.index < lastCheckbox ) {=0A= start =3D this.index + 1;=0A= finish =3D lastCheckbox;=0A= } else {=0A= start =3D lastCheckbox;=0A= finish =3D this.index - 1;=0A= }=0A= for (var i =3D start; i <=3D finish; ++i ) {=0A= checkboxes[i].checked =3D endState;=0A= }=0A= lastCheckbox =3D this.index;=0A= return true;=0A= }=0A= =0A= function toggle_element_activation(ida,idb) {=0A= if (!document.getElementById) {=0A= return;=0A= }=0A= document.getElementById(ida).disabled=3Dtrue;=0A= document.getElementById(idb).disabled=3Dfalse;=0A= }=0A= =0A= function toggle_element_check(ida,idb) {=0A= if (!document.getElementById) {=0A= return;=0A= }=0A= document.getElementById(ida).checked=3Dtrue;=0A= document.getElementById(idb).checked=3Dfalse;=0A= }=0A= =0A= /**=0A= * Restore the edit box scroll state following a preview operation,=0A= * and set up a form submission handler to remember this state=0A= */=0A= function scrollEditBox() {=0A= var editBox =3D document.getElementById( 'wpTextbox1' );=0A= var scrollTop =3D document.getElementById( 'wpScrolltop' );=0A= var editForm =3D document.getElementById( 'editform' );=0A= if( editBox && scrollTop ) {=0A= if( scrollTop.value )=0A= editBox.scrollTop =3D scrollTop.value;=0A= addHandler( editForm, 'submit', function() {=0A= document.getElementById( 'wpScrolltop' ).value =3D = document.getElementById( 'wpTextbox1' ).scrollTop; =0A= } );=0A= }=0A= }=0A= hookEvent( 'load', scrollEditBox );=0A= =0A= var allmessages_nodelist =3D false;=0A= var allmessages_modified =3D false;=0A= var allmessages_timeout =3D false;=0A= var allmessages_running =3D false;=0A= =0A= function allmessagesmodified() {=0A= allmessages_modified =3D !allmessages_modified;=0A= allmessagesfilter();=0A= }=0A= =0A= function allmessagesfilter() {=0A= if ( allmessages_timeout )=0A= window.clearTimeout( allmessages_timeout );=0A= =0A= if ( !allmessages_running )=0A= allmessages_timeout =3D window.setTimeout( 'allmessagesfilter_do();', = 500 );=0A= }=0A= =0A= function allmessagesfilter_do() {=0A= if ( !allmessages_nodelist )=0A= return;=0A= =0A= var text =3D document.getElementById('allmessagesinput').value;=0A= var nodef =3D allmessages_modified;=0A= =0A= allmessages_running =3D true;=0A= =0A= for ( var name in allmessages_nodelist ) {=0A= var nodes =3D allmessages_nodelist[name];=0A= var display =3D ( name.indexOf( text ) =3D=3D -1 ? 'none' : '' );=0A= =0A= for ( var i =3D 0; i < nodes.length; i++)=0A= nodes[i].style.display =3D=0A= ( nodes[i].className =3D=3D "def" && nodef=0A= ? 'none' : display );=0A= }=0A= =0A= if ( text !=3D document.getElementById('allmessagesinput').value ||=0A= nodef !=3D allmessages_modified )=0A= allmessagesfilter_do(); // repeat=0A= =0A= allmessages_running =3D false;=0A= }=0A= =0A= function allmessagesfilter_init() {=0A= if ( allmessages_nodelist )=0A= return;=0A= =0A= var nodelist =3D new Array();=0A= var templist =3D new Array();=0A= =0A= var table =3D document.getElementById('allmessagestable');=0A= if ( !table ) return;=0A= =0A= var rows =3D document.getElementsByTagName('tr');=0A= for ( var i =3D 0; i < rows.length; i++ ) {=0A= var id =3D rows[i].getAttribute('id')=0A= if ( id && id.substring(0,16) !=3D 'sp-allmessages-r' ) continue;=0A= templist[ id ] =3D rows[i];=0A= }=0A= =0A= var spans =3D table.getElementsByTagName('span');=0A= for ( var i =3D 0; i < spans.length; i++ ) {=0A= var id =3D spans[i].getAttribute('id')=0A= if ( id && id.substring(0,17) !=3D 'sp-allmessages-i-' ) continue;=0A= if ( !spans[i].firstChild || spans[i].firstChild.nodeType !=3D 3 ) = continue;=0A= =0A= var nodes =3D new Array();=0A= var row1 =3D templist[ id.replace('i', 'r1') ];=0A= var row2 =3D templist[ id.replace('i', 'r2') ];=0A= =0A= if ( row1 ) nodes[nodes.length] =3D row1;=0A= if ( row2 ) nodes[nodes.length] =3D row2;=0A= nodelist[ spans[i].firstChild.nodeValue ] =3D nodes;=0A= }=0A= =0A= var k =3D document.getElementById('allmessagesfilter');=0A= if (k) { k.style.display =3D ''; }=0A= =0A= allmessages_nodelist =3D nodelist;=0A= }=0A= =0A= hookEvent( "load", allmessagesfilter_init );=0A= =0A= /*=0A= Written by Jonathan Snook, http://www.snook.ca/jonathan=0A= Add-ons by Robert Nyman, http://www.robertnyman.com=0A= Author says "The credit comment is all it takes, no license. Go crazy = with it!:-)"=0A= From = http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname= /=0A= */=0A= function getElementsByClassName(oElm, strTagName, oClassNames){=0A= var arrElements =3D (strTagName =3D=3D "*" && oElm.all)? oElm.all : = oElm.getElementsByTagName(strTagName);=0A= var arrReturnElements =3D new Array();=0A= var arrRegExpClassNames =3D new Array();=0A= if(typeof oClassNames =3D=3D "object"){=0A= for(var i=3D0; i 0) {=0A= if (table.tHead && table.tHead.rows.length > 0) {=0A= firstRow =3D table.tHead.rows[table.tHead.rows.length-1];=0A= } else {=0A= firstRow =3D table.rows[0];=0A= }=0A= }=0A= if (!firstRow) return;=0A= =0A= // We have a first row: assume it's the header, and make its contents = clickable links=0A= for (var i =3D 0; i < firstRow.cells.length; i++) {=0A= var cell =3D firstRow.cells[i];=0A= if ((" "+cell.className+" ").indexOf(" unsortable ") =3D=3D -1) {=0A= cell.innerHTML +=3D '  ';=0A= }=0A= }=0A= if (ts_alternate_row_colors) {=0A= ts_alternate(table);=0A= }=0A= }=0A= =0A= function ts_getInnerText(el) {=0A= if (typeof el =3D=3D "string") return el;=0A= if (typeof el =3D=3D "undefined") { return el };=0A= if (el.textContent) return el.textContent; // not needed but it is = faster=0A= if (el.innerText) return el.innerText; // IE doesn't have = textContent=0A= var str =3D "";=0A= =0A= var cs =3D el.childNodes;=0A= var l =3D cs.length;=0A= for (var i =3D 0; i < l; i++) {=0A= switch (cs[i].nodeType) {=0A= case 1: //ELEMENT_NODE=0A= str +=3D ts_getInnerText(cs[i]);=0A= break;=0A= case 3: //TEXT_NODE=0A= str +=3D cs[i].nodeValue;=0A= break;=0A= }=0A= }=0A= return str;=0A= }=0A= =0A= function ts_resortTable(lnk) {=0A= // get the span=0A= var span =3D lnk.getElementsByTagName('span')[0];=0A= =0A= var td =3D lnk.parentNode;=0A= var tr =3D td.parentNode;=0A= var column =3D td.cellIndex;=0A= =0A= var table =3D tr.parentNode;=0A= while (table && !(table.tagName && table.tagName.toLowerCase() =3D=3D = 'table'))=0A= table =3D table.parentNode;=0A= if (!table) return;=0A= =0A= // Work out a type for the column=0A= if (table.rows.length <=3D 1) return;=0A= =0A= // Skip the first row if that's where the headings are=0A= var rowStart =3D (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);=0A= =0A= var itm =3D "";=0A= for (var i =3D rowStart; i < table.rows.length; i++) {=0A= if (table.rows[i].cells.length > column) {=0A= itm =3D ts_getInnerText(table.rows[i].cells[column]);=0A= itm =3D itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");=0A= if (itm !=3D "") break;=0A= }=0A= }=0A= =0A= sortfn =3D ts_sort_caseinsensitive;=0A= if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/))=0A= sortfn =3D ts_sort_date;=0A= if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/))=0A= sortfn =3D ts_sort_date;=0A= if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/))=0A= sortfn =3D ts_sort_date;=0A= if (itm.match(/^[\u00a3$\u20ac]/)) // pound dollar euro=0A= sortfn =3D ts_sort_currency;=0A= if (itm.match(/^[\d.,]+\%?$/))=0A= sortfn =3D ts_sort_numeric;=0A= =0A= var reverse =3D (span.getAttribute("sortdir") =3D=3D 'down');=0A= =0A= var newRows =3D new Array();=0A= for (var j =3D rowStart; j < table.rows.length; j++) {=0A= var row =3D table.rows[j];=0A= var keyText =3D ts_getInnerText(row.cells[column]);=0A= var oldIndex =3D (reverse ? -j : j);=0A= =0A= newRows[newRows.length] =3D new Array(row, keyText, oldIndex);=0A= }=0A= =0A= newRows.sort(sortfn);=0A= =0A= var arrowHTML;=0A= if (reverse) {=0A= arrowHTML =3D '';=0A= newRows.reverse();=0A= span.setAttribute('sortdir','up');=0A= } else {=0A= arrowHTML =3D '';=0A= span.setAttribute('sortdir','down');=0A= }=0A= =0A= // We appendChild rows that already exist to the tbody, so it moves = them rather than creating new ones=0A= // don't do sortbottom rows=0A= for (var i =3D 0; i < newRows.length; i++) {=0A= if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") =3D=3D = -1)=0A= table.tBodies[0].appendChild(newRows[i][0]);=0A= }=0A= // do sortbottom rows only=0A= for (var i =3D 0; i < newRows.length; i++) {=0A= if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") !=3D -1)=0A= table.tBodies[0].appendChild(newRows[i][0]);=0A= }=0A= =0A= // Delete any other arrows there may be showing=0A= var spans =3D getElementsByClassName(tr, "span", "sortarrow");=0A= for (var i =3D 0; i < spans.length; i++) {=0A= spans[i].innerHTML =3D ' bb ? 1 : a[2] - b[2]);=0A= }=0A= =0A= function ts_sort_currency(a,b) {=0A= var aa =3D ts_parseFloat(a[1].replace(/[^0-9.]/g,''));=0A= var bb =3D ts_parseFloat(b[1].replace(/[^0-9.]/g,''));=0A= return (aa !=3D bb ? aa - bb : a[2] - b[2]);=0A= }=0A= =0A= function ts_sort_numeric(a,b) {=0A= var aa =3D ts_parseFloat(a[1]);=0A= var bb =3D ts_parseFloat(b[1]);=0A= return (aa !=3D bb ? aa - bb : a[2] - b[2]);=0A= }=0A= =0A= function ts_sort_caseinsensitive(a,b) {=0A= var aa =3D a[1].toLowerCase();=0A= var bb =3D b[1].toLowerCase();=0A= return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);=0A= }=0A= =0A= function ts_sort_default(a,b) {=0A= return (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]);=0A= }=0A= =0A= function ts_alternate(table) {=0A= // Take object table and get all it's tbodies.=0A= var tableBodies =3D table.getElementsByTagName("tbody");=0A= // Loop through these tbodies=0A= for (var i =3D 0; i < tableBodies.length; i++) {=0A= // Take the tbody, and get all it's rows=0A= var tableRows =3D tableBodies[i].getElementsByTagName("tr");=0A= // Loop through these rows=0A= // Start at 1 because we want to leave the heading row untouched=0A= for (var j =3D 0; j < tableRows.length; j++) {=0A= // Check if j is even, and apply classes for both possible results=0A= var oldClasses =3D tableRows[j].className.split(" ");=0A= var newClassName =3D "";=0A= for (var k =3D 0; k < oldClasses.length; k++) {=0A= if (oldClasses[k] !=3D "" && oldClasses[k] !=3D "even" && = oldClasses[k] !=3D "odd")=0A= newClassName +=3D oldClasses[k] + " ";=0A= }=0A= tableRows[j].className =3D newClassName + (j % 2 =3D=3D 0 ? "even" : = "odd");=0A= }=0A= }=0A= }=0A= =0A= /*=0A= * End of table sorting code=0A%3d.html */=0A= =0A= =0A= /**=0A= * Add a cute little box at the top of the screen to inform the user of=0A= * something, replacing any preexisting message.=0A= *=0A= * @param String message HTML to be put inside the right div=0A= * @param String className Used in adding a class; should be different = for each=0A= * call to allow CSS/JS to hide different boxes. null =3D no class = used.=0A= * @return Boolean True on success, false on failure=0A= */=0A= function jsMsg( message, className ) {=0A= if ( !document.getElementById ) {=0A= return false;=0A= }=0A= // We special-case skin structures provided by the software. Skins that=0A= // choose to abandon or significantly modify our formatting can just = define=0A= // an mw-js-message div to start with.=0A= var messageDiv =3D document.getElementById( 'mw-js-message' );=0A= if ( !messageDiv ) {=0A= messageDiv =3D document.createElement( 'div' );=0A= if ( document.getElementById( 'column-content' )=0A= && document.getElementById( 'content' ) ) {=0A= // MonoBook, presumably=0A= document.getElementById( 'content' ).insertBefore(=0A= messageDiv,=0A= document.getElementById( 'content' ).firstChild=0A= );=0A= } else if ( document.getElementById('content')=0A= && document.getElementById( 'article' ) ) {=0A= // Non-Monobook but still recognizable (old-style)=0A= document.getElementById( 'article').insertBefore(=0A= messageDiv,=0A= document.getElementById( 'article' ).firstChild=0A= );=0A= } else {=0A= return false;=0A= }=0A= }=0A= =0A= messageDiv.setAttribute( 'id', 'mw-js-message' );=0A= if( className ) {=0A= messageDiv.setAttribute( 'class', 'mw-js-message-'+className );=0A= }=0A= messageDiv.innerHTML =3D message;=0A= return true;=0A= }=0A= =0A= /**=0A= * Inject a cute little progress spinner after the specified element=0A= *=0A= * @param element Element to inject after=0A= * @param id Identifier string (for use with removeSpinner(), below)=0A= */=0A= function injectSpinner( element, id ) {=0A= var spinner =3D document.createElement( "img" );=0A= spinner.id =3D "mw-spinner-" + id;=0A= spinner.src =3D stylepath + "/common/images/spinner.gif";=0A= spinner.alt =3D spinner.title =3D "...";=0A= if( element.nextSibling ) {=0A= element.parentNode.insertBefore( spinner, element.nextSibling );=0A= } else {=0A= element.parentNode.appendChild( spinner );=0A= }=0A= }=0A= =0A= /**=0A= * Remove a progress spinner added with injectSpinner()=0A= *=0A= * @param id Identifier string=0A= */=0A= function removeSpinner( id ) {=0A= var spinner =3D document.getElementById( "mw-spinner-" + id );=0A= if( spinner ) {=0A= spinner.parentNode.removeChild( spinner );=0A= }=0A= }=0A= =0A= function runOnloadHook() {=0A= // don't run anything below this for non-dom browsers=0A= if (doneOnloadHook || !(document.getElementById && = document.getElementsByTagName)) {=0A= return;=0A= }=0A= =0A= // set this before running any hooks, since any errors below=0A= // might cause the function to terminate prematurely=0A= doneOnloadHook =3D true;=0A= =0A= histrowinit();=0A= unhidetzbutton();=0A= tabbedprefs();=0A= updateTooltipAccessKeys( null );=0A= akeytt( null );=0A= scrollEditBox();=0A= setupCheckboxShiftClick();=0A= sortables_init();=0A= =0A= // Run any added-on functions=0A= for (var i =3D 0; i < onloadFuncts.length; i++) {=0A= onloadFuncts[i]();=0A= }=0A= }=0A= =0A= /**=0A= * Add an event handler to an element=0A= *=0A= * @param Element element Element to add handler to=0A= * @param String attach Event to attach to=0A= * @param callable handler Event handler callback=0A= */=0A= function addHandler( element, attach, handler ) {=0A= if( window.addEventListener ) {=0A= element.addEventListener( attach, handler, false );=0A= } else if( window.attachEvent ) {=0A= element.attachEvent( 'on' + attach, handler );=0A= }=0A= }=0A= =0A= /**=0A= * Add a click event handler to an element=0A= *=0A= * @param Element element Element to add handler to=0A= * @param callable handler Event handler callback=0A= */=0A= function addClickHandler( element, handler ) {=0A= addHandler( element, 'click', handler );=0A= }=0A= //note: all skins should call runOnloadHook() at the end of html output,=0A= // so the below should be redundant. It's there just in case.=0A= hookEvent("load", runOnloadHook);=0A= hookEvent("load", mwSetupToolbar);=0A= ------=_NextPart_000_0000_01CBF562.25C13410 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Dan%20Fraser/My%20Documents/_TruTechnology/Design%20Info/RS485/RS-422_files/ajax.js // remote scripting library=0A= // (c) copyright 2005 modernmethod, inc=0A= var sajax_debug_mode =3D false;=0A= var sajax_request_type =3D "GET";=0A= =0A= /**=0A= * if sajax_debug_mode is true, this function outputs given the message = into =0A= * the element with id =3D sajax_debug; if no such element exists in the = document, =0A= * it is injected.=0A= */=0A= function sajax_debug(text) {=0A= if (!sajax_debug_mode) return false;=0A= =0A= var e=3D document.getElementById('sajax_debug');=0A= =0A= if (!e) {=0A= e=3D document.createElement("p");=0A= e.className=3D 'sajax_debug';=0A= e.id=3D 'sajax_debug';=0A= =0A= var b=3D document.getElementsByTagName("body")[0];=0A= =0A= if (b.firstChild) b.insertBefore(e, b.firstChild);=0A= else b.appendChild(e);=0A= }=0A= =0A= var m=3D document.createElement("div");=0A= m.appendChild( document.createTextNode( text ) );=0A= =0A= e.appendChild( m );=0A= =0A= return true;=0A= }=0A= =0A= /**=0A= * compatibility wrapper for creating a new XMLHttpRequest object.=0A= */=0A= function sajax_init_object() {=0A= sajax_debug("sajax_init_object() called..")=0A= var A;=0A= try {=0A= // Try the new style before ActiveX so we don't=0A= // unnecessarily trigger warnings in IE 7 when=0A= // set to prompt about ActiveX usage=0A= A =3D new XMLHttpRequest();=0A= } catch (e) {=0A= try {=0A= A=3Dnew ActiveXObject("Msxml2.XMLHTTP");=0A= } catch (e) {=0A= try {=0A= A=3Dnew ActiveXObject("Microsoft.XMLHTTP");=0A= } catch (oc) {=0A= A=3Dnull;=0A= }=0A= }=0A= }=0A= if (!A)=0A= sajax_debug("Could not create connection object.");=0A= =0A= return A;=0A= }=0A= =0A= /**=0A= * Perform an ajax call to mediawiki. Calls are handeled by = AjaxDispatcher.php=0A= * func_name - the name of the function to call. Must be registered in = $wgAjaxExportList=0A= * args - an array of arguments to that function=0A= * target - the target that will handle the result of the call. If this = is a function,=0A= * if will be called with the XMLHttpRequest as a parameter; = if it's an input=0A= * element, its value will be set to the resultText; if it's = another type of=0A= * element, its innerHTML will be set to the resultText.=0A= *=0A= * Example:=0A= * sajax_do_call('doFoo', [1, 2, 3], = document.getElementById("showFoo"));=0A= *=0A= * This will call the doFoo function via MediaWiki's AjaxDispatcher, with=0A= * (1, 2, 3) as the parameter list, and will show the result in the = element=0A= * with id =3D showFoo=0A= */=0A= function sajax_do_call(func_name, args, target) {=0A= var i, x, n;=0A= var uri;=0A= var post_data;=0A= uri =3D wgServer +=0A= ((wgScript =3D=3D null) ? (wgScriptPath + "/index.php") : wgScript) +=0A= "?action=3Dajax";=0A= if (sajax_request_type =3D=3D "GET") {=0A= if (uri.indexOf("?") =3D=3D -1)=0A= uri =3D uri + "?rs=3D" + encodeURIComponent(func_name);=0A= else=0A= uri =3D uri + "&rs=3D" + encodeURIComponent(func_name);=0A= for (i =3D 0; i < args.length; i++)=0A= uri =3D uri + "&rsargs[]=3D" + encodeURIComponent(args[i]);=0A= //uri =3D uri + "&rsrnd=3D" + new Date().getTime();=0A= post_data =3D null;=0A= } else {=0A= post_data =3D "rs=3D" + encodeURIComponent(func_name);=0A= for (i =3D 0; i < args.length; i++)=0A= post_data =3D post_data + "&rsargs[]=3D" + = encodeURIComponent(args[i]);=0A= }=0A= x =3D sajax_init_object();=0A= if (!x) {=0A= alert("AJAX not supported");=0A= return false;=0A= }=0A= =0A= try {=0A= x.open(sajax_request_type, uri, true);=0A= } catch (e) {=0A= if (window.location.hostname =3D=3D "localhost") {=0A= alert("Your browser blocks XMLHttpRequest to 'localhost', try using a = real hostname for development/testing.");=0A= }=0A= throw e;=0A= }=0A= if (sajax_request_type =3D=3D "POST") {=0A= x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");=0A= x.setRequestHeader("Content-Type", = "application/x-www-form-urlencoded");=0A= }=0A= x.setRequestHeader("Pragma", "cache=3Dyes");=0A= x.setRequestHeader("Cache-Control", "no-transform");=0A= x.onreadystatechange =3D function() {=0A= if (x.readyState !=3D 4)=0A= return;=0A= =0A= sajax_debug("received (" + x.status + " " + x.statusText + ") " + = x.responseText);=0A= =0A= //if (x.status !=3D 200)=0A= // alert("Error: " + x.status + " " + x.statusText + ": " + = x.responseText);=0A= //else=0A= =0A= if ( typeof( target ) =3D=3D 'function' ) {=0A= target( x );=0A= }=0A= else if ( typeof( target ) =3D=3D 'object' ) {=0A= if ( target.tagName =3D=3D 'INPUT' ) {=0A= if (x.status =3D=3D 200) target.value=3D x.responseText;=0A= //else alert("Error: " + x.status + " " + x.statusText + " (" + = x.responseText + ")");=0A= }=0A= else {=0A= if (x.status =3D=3D 200) target.innerHTML =3D x.responseText;=0A= else target.innerHTML=3D "
Error: " + x.status + = " " + x.statusText + " (" + x.responseText + ")
";=0A= }=0A= }=0A= else {=0A= alert("bad target for sajax_do_call: not a function or object: " + = target);=0A= }=0A= =0A= return;=0A= }=0A= =0A= sajax_debug(func_name + " uri =3D " + uri + " / post =3D " + post_data);=0A= x.send(post_data);=0A= sajax_debug(func_name + " waiting..");=0A= delete x;=0A= =0A= return true;=0A= }=0A= ------=_NextPart_000_0000_01CBF562.25C13410 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Dan%20Fraser/My%20Documents/_TruTechnology/Design%20Info/RS485/RS-422_files/index.php /* generated javascript */=0A= var skin =3D 'monobook';=0A= var stylepath =3D '/skins-1.5';=0A= =0A= /* MediaWiki:Common.js */=0A= /** Import module = *************************************************************=0A= *=0A= * Description: Includes a raw wiki page as javascript or CSS, =0A= * used for including user made modules.=0A= * Maintainers: [[User:AzaToth]]=0A= */=0A= importedScripts =3D {}; // object keeping track of included scripts, so = a script ain't included twice=0A= function importScript( page ) {=0A= if( importedScripts[page] ) {=0A= return;=0A= }=0A= importedScripts[page] =3D true;=0A= var url =3D wgScriptPath=0A= + '/index.php?title=3D'=0A= + encodeURIComponent( page.replace( / /g, '_' ) )=0A= + '&action=3Draw&ctype=3Dtext/javascript';=0A= var scriptElem =3D document.createElement( 'script' );=0A= scriptElem.setAttribute( 'src' , url );=0A= scriptElem.setAttribute( 'type' , 'text/javascript' );=0A= document.getElementsByTagName( 'head' )[0].appendChild( scriptElem = );=0A= }=0A= =0A= function importStylesheet( page ) {=0A= var sheet =3D '@import "'=0A= + wgScriptPath=0A= + '/index.php?title=3D'=0A= + encodeURIComponent( page.replace( / /g, '_' ) )=0A= + '&action=3Draw&ctype=3Dtext/css";'=0A= var styleElem =3D document.createElement( 'style' );=0A= styleElem.setAttribute( 'type' , 'text/css' );=0A= styleElem.appendChild( document.createTextNode( sheet ) );=0A= document.getElementsByTagName( 'head' )[0].appendChild( styleElem );=0A= }=0A= =0A= /* Test if an element has a certain class = **************************************=0A= *=0A= * Description: Uses regular expressions and caching for better = performance.=0A= * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]=0A= */=0A= =0A= var hasClass =3D (function () {=0A= var reCache =3D {};=0A= return function (element, className) {=0A= return (reCache[className] ? reCache[className] : = (reCache[className] =3D new RegExp("(?:\\s|^)" + className + = "(?:\\s|$)"))).test(element.className);=0A= };=0A= })();=0A= =0A= /** Internet Explorer bug fix = **************************************************=0A= *=0A= * Description: Fixes IE horizontal scrollbar bug=0A= * Maintainers: [[User:Tom-]]?=0A= */=0A= =0A= if (navigator.appName =3D=3D "Microsoft Internet Explorer" && = document.compatMode =3D=3D "CSS1Compat")=0A= {=0A= var oldWidth;=0A= var docEl =3D document.documentElement;=0A= =0A= function fixIEScroll()=0A= {=0A= if (!oldWidth || docEl.clientWidth > oldWidth)=0A= doFixIEScroll();=0A= else=0A= setTimeout(doFixIEScroll, 1);=0A= =0A= oldWidth =3D docEl.clientWidth;=0A= }=0A= =0A= function doFixIEScroll() {=0A= docEl.style.overflowX =3D (docEl.scrollWidth - docEl.clientWidth < = 4) ? "hidden" : "";=0A= }=0A= =0A= document.attachEvent("onreadystatechange", fixIEScroll);=0A= attachEvent("onresize", fixIEScroll);=0A= }=0A= =0A= /** Interwiki links to featured articles = ***************************************=0A= *=0A= * Description: Highlights interwiki links to featured articles (or=0A= * equivalents) by changing the bullet before the = interwiki link=0A= * into a star.=0A= * Maintainers: [[User:R. Koot]]=0A= */=0A= =0A= function LinkFA() =0A= {=0A= if ( document.getElementById( "p-lang" ) ) {=0A= var InterwikiLinks =3D document.getElementById( "p-lang" = ).getElementsByTagName( "li" );=0A= =0A= for ( var i =3D 0; i < InterwikiLinks.length; i++ ) {=0A= if ( document.getElementById( InterwikiLinks[i].className + = "-fa" ) ) {=0A= InterwikiLinks[i].className +=3D " FA"=0A= InterwikiLinks[i].title =3D "This is a featured article = in another language.";=0A= }=0A= }=0A= }=0A= }=0A= =0A= addOnloadHook( LinkFA );=0A= =0A= /** Collapsible tables = *********************************************************=0A= *=0A= * Description: Allows tables to be collapsed, showing only the = header. See=0A= * [[Wikipedia:NavFrame]].=0A= * Maintainers: [[User:R. Koot]]=0A= */=0A= =0A= var autoCollapse =3D 2;=0A= var collapseCaption =3D "hide";=0A= var expandCaption =3D "show";=0A= =0A= function collapseTable( tableIndex )=0A= {=0A= var Button =3D document.getElementById( "collapseButton" + = tableIndex );=0A= var Table =3D document.getElementById( "collapsibleTable" + = tableIndex );=0A= =0A= if ( !Table || !Button ) {=0A= return false;=0A= }=0A= =0A= var Rows =3D Table.rows;=0A= =0A= if ( Button.firstChild.data =3D=3D collapseCaption ) {=0A= for ( var i =3D 1; i < Rows.length; i++ ) {=0A= Rows[i].style.display =3D "none";=0A= }=0A= Button.firstChild.data =3D expandCaption;=0A= } else {=0A= for ( var i =3D 1; i < Rows.length; i++ ) {=0A= Rows[i].style.display =3D Rows[0].style.display;=0A= }=0A= Button.firstChild.data =3D collapseCaption;=0A= }=0A= }=0A= =0A= function createCollapseButtons()=0A= {=0A= var tableIndex =3D 0;=0A= var NavigationBoxes =3D new Object();=0A= var Tables =3D document.getElementsByTagName( "table" );=0A= =0A= for ( var i =3D 0; i < Tables.length; i++ ) {=0A= if ( hasClass( Tables[i], "collapsible" ) ) {=0A= =0A= /* only add button and increment count if there is a header = row to work with */=0A= var HeaderRow =3D Tables[i].getElementsByTagName( "tr" )[0];=0A= if (!HeaderRow) continue;=0A= var Header =3D HeaderRow.getElementsByTagName( "th" )[0];=0A= if (!Header) continue;=0A= =0A= NavigationBoxes[ tableIndex ] =3D Tables[i];=0A= Tables[i].setAttribute( "id", "collapsibleTable" + = tableIndex );=0A= =0A= var Button =3D document.createElement( "span" );=0A= var ButtonLink =3D document.createElement( "a" );=0A= var ButtonText =3D document.createTextNode( collapseCaption = );=0A= =0A= Button.style.styleFloat =3D "right";=0A= Button.style.cssFloat =3D "right";=0A= Button.style.fontWeight =3D "normal";=0A= Button.style.textAlign =3D "right";=0A= Button.style.width =3D "6em";=0A= =0A= ButtonLink.style.color =3D Header.style.color;=0A= ButtonLink.setAttribute( "id", "collapseButton" + = tableIndex );=0A= ButtonLink.setAttribute( "href", = "javascript:collapseTable(" + tableIndex + ");" );=0A= ButtonLink.appendChild( ButtonText );=0A= =0A= Button.appendChild( document.createTextNode( "[" ) );=0A= Button.appendChild( ButtonLink );=0A= Button.appendChild( document.createTextNode( "]" ) );=0A= =0A= Header.insertBefore( Button, Header.childNodes[0] );=0A= tableIndex++;=0A= }=0A= }=0A= =0A= for ( var i =3D 0; i < tableIndex; i++ ) {=0A= if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( = tableIndex >=3D autoCollapse && hasClass( NavigationBoxes[i], = "autocollapse" ) ) ) {=0A= collapseTable( i );=0A= }=0A= }=0A= }=0A= =0A= addOnloadHook( createCollapseButtons );=0A= =0A= /** Dynamic Navigation Bars (experimental) = *************************************=0A= *=0A= * Description: See [[Wikipedia:NavFrame]].=0A= * Maintainers: UNMAINTAINED=0A= */=0A= =0A= // set up the words in your language=0A= var NavigationBarHide =3D '[' + collapseCaption + ']';=0A= var NavigationBarShow =3D '[' + expandCaption + ']';=0A= =0A= // shows and hides content and picture (if available) of navigation = bars=0A= // Parameters:=0A= // indexNavigationBar: the index of navigation bar to be toggled=0A= function toggleNavigationBar(indexNavigationBar)=0A= {=0A= var NavToggle =3D document.getElementById("NavToggle" + = indexNavigationBar);=0A= var NavFrame =3D document.getElementById("NavFrame" + = indexNavigationBar);=0A= =0A= if (!NavFrame || !NavToggle) {=0A= return false;=0A= }=0A= =0A= // if shown now=0A= if (NavToggle.firstChild.data =3D=3D NavigationBarHide) {=0A= for (=0A= var NavChild =3D NavFrame.firstChild;=0A= NavChild !=3D null;=0A= NavChild =3D NavChild.nextSibling=0A= ) {=0A= if ( hasClass( NavChild, 'NavPic' ) ) {=0A= NavChild.style.display =3D 'none';=0A= }=0A= if ( hasClass( NavChild, 'NavContent') ) {=0A= NavChild.style.display =3D 'none';=0A= }=0A= }=0A= NavToggle.firstChild.data =3D NavigationBarShow;=0A= =0A= // if hidden now=0A= } else if (NavToggle.firstChild.data =3D=3D NavigationBarShow) {=0A= for (=0A= var NavChild =3D NavFrame.firstChild;=0A= NavChild !=3D null;=0A= NavChild =3D NavChild.nextSibling=0A= ) {=0A= if (hasClass(NavChild, 'NavPic')) {=0A= NavChild.style.display =3D 'block';=0A= }=0A= if (hasClass(NavChild, 'NavContent')) {=0A= NavChild.style.display =3D 'block';=0A= }=0A= }=0A= NavToggle.firstChild.data =3D NavigationBarHide;=0A= }=0A= }=0A= =0A= // adds show/hide-button to navigation bars=0A= function createNavigationBarToggleButton()=0A= {=0A= var indexNavigationBar =3D 0;=0A= // iterate over all < div >-elements =0A= var divs =3D document.getElementsByTagName("div");=0A= for(=0A= var i=3D0; =0A= NavFrame =3D divs[i]; =0A= i++=0A= ) {=0A= // if found a navigation bar=0A= if (hasClass(NavFrame, "NavFrame")) {=0A= =0A= indexNavigationBar++;=0A= var NavToggle =3D document.createElement("a");=0A= NavToggle.className =3D 'NavToggle';=0A= NavToggle.setAttribute('id', 'NavToggle' + = indexNavigationBar);=0A= NavToggle.setAttribute('href', = 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');=0A= =0A= var NavToggleText =3D = document.createTextNode(NavigationBarHide);=0A= for (=0A= var NavChild =3D NavFrame.firstChild;=0A= NavChild !=3D null;=0A= NavChild =3D NavChild.nextSibling=0A= ) {=0A= if ( hasClass( NavChild, 'NavPic' ) || hasClass( = NavChild, 'NavContent' ) ) {=0A= if (NavChild.style.display =3D=3D 'none') {=0A= NavToggleText =3D = document.createTextNode(NavigationBarShow);=0A= break;=0A= }=0A= }=0A= }=0A= =0A= NavToggle.appendChild(NavToggleText);=0A= // Find the NavHead and attach the toggle link (Must be = this complicated because Moz's firstChild handling is borked)=0A= for(=0A= var j=3D0; =0A= j < NavFrame.childNodes.length; =0A= j++=0A= ) {=0A= if (hasClass(NavFrame.childNodes[j], "NavHead")) {=0A= NavFrame.childNodes[j].appendChild(NavToggle);=0A= }=0A= }=0A= NavFrame.setAttribute('id', 'NavFrame' + = indexNavigationBar);=0A= }=0A= }=0A= }=0A= =0A= addOnloadHook( createNavigationBarToggleButton );=0A= =0A= /** Main Page layout fixes = *********************************************************=0A= *=0A= * Description: Various layout fixes for the main page, = including an=0A= * additional link to the complete list of = languages available=0A= * and the renaming of the 'Article' to to 'Main = Page'.=0A= * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex = Smotrov]]=0A= */=0A= =0A= function mainPageRenameNamespaceTab() {=0A= try {=0A= var Node =3D document.getElementById( 'ca-nstab-main' = ).firstChild;=0A= if ( Node.textContent ) { // Per DOM Level 3=0A= Node.textContent =3D 'Main Page';=0A= } else if ( Node.innerText ) { // IE doesn't handle .textContent=0A= Node.innerText =3D 'Main Page';=0A= } else { // Fallback=0A= Node.replaceChild( Node.firstChild, = document.createTextNode( 'Main Page' ) ); =0A= }=0A= } catch(e) {=0A= // bailing out!=0A= }=0A= }=0A= =0A= if ( wgTitle =3D=3D 'Main Page' && ( wgNamespaceNumber =3D=3D 0 || = wgNamespaceNumber =3D=3D 1 ) ) {=0A= addOnloadHook( mainPageRenameNamespaceTab );=0A= }=0A= =0A= if ( wgTitle =3D=3D 'Main Page' && wgNamespaceNumber =3D=3D 0 ) {=0A= addOnloadHook( mainPageAppendCompleteListLink );=0A= }=0A= =0A= function mainPageAppendCompleteListLink() {=0A= addPortletLink('p-lang', = 'http://meta.wikimedia.org/wiki/List_of_Wikipedias', =0A= 'Complete list', 'interwiki-completelist', 'Complete list of = Wikipedias')=0A= }=0A= =0A= /** Extra toolbar options = ******************************************************=0A= *=0A= * Description: UNDOCUMENTED=0A= * Maintainers: [[User:MarkS]]?, [[User:Voice of All]], [[User:R. = Koot]]=0A= */=0A= =0A= //This is a modified copy of a script by User:MarkS for extra features = added by User:Voice of All.=0A= // This is based on the original code on Wikipedia:Tools/Editing tools=0A= // To disable this script, add mwCustomEditButtons =3D []; = to [[Special:Mypage/monobook.js]]=0A= =0A= if (mwCustomEditButtons) {=0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png",=0A= "speedTip": "Redirect",=0A= "tagOpen": "#REDIRECT [[",=0A= "tagClose": "]]",=0A= "sampleText": "Insert text"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png",=0A= "speedTip": "Strike",=0A= "tagOpen": "",=0A= "tagClose": "",=0A= "sampleText": "Strike-through text"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/1/13/Button_enter.png",=0A= "speedTip": "Line break",=0A= "tagOpen": "
",=0A= "tagClose": "",=0A= "sampleText": ""};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png",=0A= "speedTip": "Superscript",=0A= "tagOpen": "",=0A= "tagClose": "",=0A= "sampleText": "Superscript text"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/7/70/Button_lower_letter.png",=0A= "speedTip": "Subscript",=0A= "tagOpen": "",=0A= "tagClose": "",=0A= "sampleText": "Subscript text"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/5/58/Button_small.png",=0A= "speedTip": "Small",=0A= "tagOpen": "",=0A= "tagClose": "",=0A= "sampleText": "Small Text"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png",=0A= "speedTip": "Insert hidden Comment",=0A= "tagOpen": "",=0A= "sampleText": "Comment"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/1/12/Button_gallery.png",=0A= "speedTip": "Insert a picture gallery",=0A= "tagOpen": "\n\n",=0A= "tagClose": "\n",=0A= "sampleText": = "Image:Example.jpg|Caption1\nImage:Example.jpg|Caption2"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png",=0A= "speedTip": "Insert block of quoted text",=0A= "tagOpen": "
\n",=0A= "tagClose": "\n
",=0A= "sampleText": "Block quote"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png",=0A= "speedTip": "Insert a table",=0A= "tagOpen": '{| class=3D"wikitable"\n|-\n',=0A= "tagClose": "\n|}",=0A= "sampleText": "! header 1\n! header 2\n! header 3\n|-\n| row 1, = cell 1\n| row 1, cell 2\n| row 1, cell 3\n|-\n| row 2, cell 1\n| row 2, = cell 2\n| row 2, cell 3"};=0A= =0A= mwCustomEditButtons[mwCustomEditButtons.length] =3D {=0A= "imageFile": = "http://upload.wikimedia.org/wikipedia/commons/7/79/Button_reflink.png",=0A= "speedTip": "Insert a reference",=0A= "tagOpen": "",=0A= "tagClose": "",=0A= "sampleText": "Insert footnote text here"};=0A= =0A= }=0A= =0A= /**/=0A= =0A= /** pageview counter = ***********************************************************=0A= *=0A= * Description: Please talk to de:User:LeonWeber before changing = anything or =0A= * if there are any issues with that.=0A= * Maintainers: [[:de:User:LeonWeber]]?=0A= */=0A= =0A= // this should be adjusted to a good value.=0A= // BE CAREFUL, you will break zedler if it's too low!=0A= // And then DaB. will kill Leon :-(=0A= var disable_counter =3D 0;=0A= var counter_factor =3D 6000;=0A= =0A= function pgcounter_setup()=0A= {=0A= if(disable_counter =3D=3D 0)=0A= {=0A= var url =3D window.location.href;=0A= if(Math.floor(Math.random()*counter_factor)=3D=3D42) // the = probability thing=0A= {=0A= if(wgIsArticle=3D=3Dtrue || wgArticleId=3D=3D0) // do not count = history pages etc.=0A= {=0A= var pgcountNs =3D wgCanonicalNamespace;=0A= if(wgCanonicalNamespace=3D=3D"")=0A= {=0A= pgcountNs =3D "0";=0A= }=0A= var cnt_url =3D "http://pgcount.wikimedia.de/index.png?ns=3D" + = pgcountNs + "&title=3D" + encodeURI(wgTitle) + "&factor=3D" + = counter_factor +"&wiki=3Denwiki";=0A= var img =3D new Image(); =0A= img.src =3D cnt_url;=0A= }=0A= }=0A= }=0A= }=0A= // Do not use aOnloadFunctions[aOnloadFunctions.length] =3D = pgcounter_setup;, some browsers don't like that.=0A= pgcounter_setup();=0A= =0A= /** "Technical restrictions" title fix = *****************************************=0A= *=0A= * Description:=0A= * Maintainers: User:Interiot, User:Mets501, User:Freakofnurture=0A= */=0A= //=0A= // For pages that have something like Template:Lowercase, replace the = title, but only if it is cut-and-pasteable as a valid wikilink.=0A= // (for instance iPod's title is updated. But [[C#]] is not an = equivalent=0A= // wikilink, so [[C Sharp]] doesn't have its main title changed)=0A= // Likewise for users who have selected the U.K. date format ("1 = March") the =0A= // titles of day-of-the-year articles will appear in that style. Users = with any=0A= // other date setting are not affected.=0A= //=0A= // The function looks for a banner like this: =0A= // <div id=3D"RealTitleBanner"> ... <span = id=3D"RealTitle">title</span> ... </div>=0A= // An element with id=3DDisableRealTitle disables the function.=0A= //=0A= var disableRealTitle =3D 0; // users can set disableRealTitle =3D 1 = locally to disable.=0A= if (wgIsArticle) { // don't display the RealTitle when editing, since = it is apparently inconsistent (doesn't show when editing sections, = doesn't show when not previewing)=0A= addOnloadHook(function() {=0A= try {=0A= var realTitleBanner =3D = document.getElementById("RealTitleBanner");=0A= if (realTitleBanner && = !document.getElementById("DisableRealTitle") && !disableRealTitle ) {=0A= var realTitle =3D document.getElementById("RealTitle");=0A= if (realTitle) {=0A= var realTitleHTML =3D realTitle.innerHTML;=0A= realTitleText =3D pickUpText(realTitle);=0A= =0A= var isPasteable =3D 0;=0A= //var containsHTML =3D //gi, "") ); // contains = HTML that will be ignored when cut-n-pasted as a wikilink=0A= // calculate whether the title is pasteable=0A= var verifyTitle =3D realTitleText.replace(/^ +/, ""); = // trim left spaces=0A= verifyTitle =3D verifyTitle.charAt(0).toUpperCase() + = verifyTitle.substring(1, verifyTitle.length); // uppercase first = character=0A= =0A= // if the namespace prefix is there, remove it on our = verification copy. If it isn't there, add it to the original realValue = copy.=0A= if (wgNamespaceNumber !=3D 0) {=0A= if (wgCanonicalNamespace =3D=3D = verifyTitle.substr(0, wgCanonicalNamespace.length).replace(/ /g, "_") && = verifyTitle.charAt(wgCanonicalNamespace.length) =3D=3D ":") {=0A= verifyTitle =3D = verifyTitle.substr(wgCanonicalNamespace.length + 1);=0A= } else {=0A= realTitleText =3D = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleText;=0A= realTitleHTML =3D = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleHTML;=0A= }=0A= }=0A= =0A= // verify whether wgTitle matches=0A= verifyTitle =3D verifyTitle.replace(/[\s_]+/g, " "); = // underscores and multiple spaces to single spaces=0A= verifyTitle =3D verifyTitle.replace(/^\s+/, = "").replace(/\s+$/, ""); // trim left and right spaces=0A= verifyTitle =3D verifyTitle.charAt(0).toUpperCase() + = verifyTitle.substring(1, verifyTitle.length); // uppercase first = character=0A= if ( (verifyTitle =3D=3D wgTitle) || (verifyTitle =3D=3D = wgTitle.replace(/^(.+)?(January|February|March|April|May|June|July|August= |September|October|November|December)\s+([12]?[0-9]|3[0123])([^\d].*)?$/g= , "$1$3 $2$4") )) isPasteable =3D 1;=0A= var h1 =3D document.getElementsByTagName("h1")[0];=0A= if (h1 && isPasteable) {=0A= h1.innerHTML =3D containsTooMuchHTML ? realTitleText = : realTitleHTML;=0A= if (!containsTooMuchHTML)=0A= realTitleBanner.style.display =3D "none";=0A= }=0A= document.title =3D realTitleText + " - Wikipedia, the = free encyclopedia";=0A= }=0A= }=0A= } catch (e) {=0A= /* Something went wrong. */=0A= }=0A= });=0A= }=0A= =0A= // similar to innerHTML, but only returns the text portions of the = insides, excludes HTML=0A= function pickUpText(aParentElement) {=0A= var str =3D "";=0A= =0A= function pickUpTextInternal(aElement) {=0A= var child =3D aElement.firstChild;=0A= while (child) {=0A= if (child.nodeType =3D=3D 1) // ELEMENT_NODE =0A= pickUpTextInternal(child);=0A= else if (child.nodeType =3D=3D 3) // TEXT_NODE=0A= str +=3D child.nodeValue;=0A= =0A= child =3D child.nextSibling;=0A= }=0A= }=0A= =0A= pickUpTextInternal(aParentElement);=0A= return str;=0A= }=0A= =0A= //fix edit summary prompt for undo=0A= //this code fixes the fact that the undo function combined with the "no = edit summary prompter" causes problems if leaving the=0A= //edit summary unchanged=0A= //this was added by [[User:Deskana]], code by [[User:Tra]]=0A= addOnloadHook(function () {=0A= if (document.location.search.indexOf("undo=3D") !=3D -1=0A= && document.getElementsByName('wpAutoSummary')[0]) {=0A= document.getElementsByName('wpAutoSummary')[0].value=3D'1';=0A= }=0A= })=0A= =0A= /** Add dismiss button to watchlist-message = *************************************=0A= *=0A= * Description: Hide the watchlist message for one week.=0A= * Maintainers: [[User:Ruud Koot|Ruud Koot]]=0A= */=0A= =0A= function addDismissButton() {=0A= var watchlistMessage =3D = document.getElementById("watchlist-message");=0A= if ( watchlistMessage =3D=3D null ) return;=0A= var watchlistCookieID =3D = watchlistMessage.className.replace(/cookie\-ID\_/ig,'');=0A= =0A= if ( document.cookie.indexOf( "hidewatchlistmessage-" + = watchlistCookieID + "=3Dyes" ) !=3D -1 ) {=0A= watchlistMessage.style.display =3D "none";=0A= }=0A= =0A= var Button =3D document.createElement( "span" );=0A= var ButtonLink =3D document.createElement( "a" );=0A= var ButtonText =3D document.createTextNode( "dismiss" );=0A= =0A= ButtonLink.setAttribute( "id", "dismissButton" );=0A= ButtonLink.setAttribute( "href", = "javascript:dismissWatchlistMessage();" );=0A= ButtonLink.setAttribute( "title", "Hide this message for one week" );=0A= ButtonLink.appendChild( ButtonText );=0A= =0A= Button.appendChild( document.createTextNode( "[" ) );=0A= Button.appendChild( ButtonLink );=0A= Button.appendChild( document.createTextNode( "]" ) );=0A= =0A= watchlistMessage.appendChild( Button );=0A= }=0A= =0A= function dismissWatchlistMessage() {=0A= var e =3D new Date();=0A= e.setTime( e.getTime() + (7*24*60*60*1000) );=0A= var watchlistMessage =3D = document.getElementById("watchlist-message");=0A= var watchlistCookieID =3D = watchlistMessage.className.replace(/cookie\-ID\_/ig,'');=0A= document.cookie =3D "hidewatchlistmessage-" + watchlistCookieID + = "=3Dyes; expires=3D" + e.toGMTString() + "; path=3D/";=0A= watchlistMessage.style.display =3D "none";=0A= }=0A= =0A= addOnloadHook( addDismissButton );=0A= =0A= /** Main Page deletion image = *******************************************************=0A= *=0A= * Description: If the Main Page does not exist (i.e., it's been = deleted) then insert an image=0A= * instead of showing the "page does not exist" text.=0A= * Created by: [[User:Mark]], with invaluable help from = [[User:Pathoschild]]=0A= */=0A= =0A= function MainPageDeletedImage() {=0A= try {=0A= =0A= //If the article does not exist and it is the Main Page, proceed=0A= if ( document.getElementById( "noarticletext" ) && wgTitle =3D=3D = 'Main Page' ) {=0A= =0A= // Insert a protected commons image at the end of the document = explaining it.=0A= var contentbox =3D document.getElementById('content');=0A= var newimg =3D document.createElement('img');=0A= = newimg.setAttribute('src','http://upload.wikimedia.org/wikipedia/commons/= 9/99/WikipediaTechnical.png');=0A= contentbox.appendChild(newimg);=0A= =0A= // Hide the article-does-not-exist text=0A= var NoArticleMessage =3D document.getElementById('noarticletext');=0A= NoArticleMessage.style.display=3D"none";=0A= =0A= // Hide the edit button=0A= var EditThisPageButton =3D document.getElementById('ca-edit');=0A= EditThisPageButton.style.display=3D"none";=0A= }=0A= } catch(e) {=0A= // In case it does not work, do nothing=0A= return;=0A= }=0A= }=0A= =0A= addOnloadHook( MainPageDeletedImage );=0A= =0A= /** Change Special:Search to use a drop-down menu = *******************************************************=0A= *=0A= * Description: Change Special:Search to use a drop-down menu, with = the default being=0A= * the internal MediaWiki engine=0A= * Created and maintained by: [[User:Gracenotes]]=0A= */=0A= =0A= if (wgPageName =3D=3D "Special:Search") {=0A= var searchEngines =3D [];=0A= addOnloadHook(SpecialSearchEnhanced);=0A= }=0A= =0A= function SpecialSearchEnhanced() {=0A= var createOption =3D function(site, action, mainQ, addQ, addV) {=0A= var opt =3D document.createElement('option');=0A= opt.appendChild(document.createTextNode(site));=0A= searchEngines[searchEngines.length] =3D [action, mainQ, = addQ, addV];=0A= return opt;=0A= }=0A= var searchForm =3D document.forms['search'];=0A= var selectBox =3D document.createElement('select');=0A= selectBox.id =3D 'searchEngine';=0A= searchForm.onsubmit =3D function() {=0A= var optSelected =3D = searchEngines[document.getElementById('searchEngine').selectedIndex];=0A= searchForm.action =3D optSelected[0];=0A= searchForm.lsearchbox.name =3D optSelected[1];=0A= searchForm.title.value =3D optSelected[3];=0A= searchForm.title.name =3D optSelected[2];=0A= }=0A= selectBox.appendChild(createOption('MediaWiki search', = wgScriptPath + '/index.php', 'search', 'title', 'Special:Search'));=0A= selectBox.appendChild(createOption('Google', = 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikipedia.org'));=0A= selectBox.appendChild(createOption('Yahoo', = 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikipedia.org'));=0A= selectBox.appendChild(createOption('Windows Live', = 'http://search.live.com/results.aspx', 'q', 'q1', = 'site:http://en.wikipedia.org'));=0A= selectBox.appendChild(createOption('Wikiwix', = 'http://www.wikiwix.com/', 'action', 'lang', 'en'));=0A= selectBox.appendChild(createOption('Exalead', = 'http://www.exalead.com/wikipedia/results', 'q', 'language', 'en'));=0A= searchForm.lsearchbox.style.marginLeft =3D '0px';=0A= var lStat =3D document.getElementById('loadStatus');=0A= lStat.parentNode.insertBefore(selectBox, lStat);=0A= }=0A= =0A= /** Geo-targeted watchlist notice = *******************************************************=0A= *=0A= * Description: Allows for geographic targeting of watchlist notices. = See [[Wikipedia:Geonotice]] for more information.=0A= * Created by: [[User:Gmaxwell]]=0A= */=0A= =0A= if (wgPageName =3D=3D "Special:Watchlist")=0A= addOnloadHook((function (){document.write('