v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Difference between revisions of "MediaWiki:Common.js"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
m (Reverted edits by Briess (Talk) to last revision by Senso)
Line 1: Line 1:
//<source lang="javascript">
+
/* Any JavaScript here will be loaded for all users on every page load. */
  
/* Import more specific scripts if necessary */
+
/** Import module *************************************************************
 
+
  *
if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages
+
  *  Description: Includes a raw wiki page as javascript or CSS,
{
+
  *              used for including user made modules.
    importScript("MediaWiki:Common.js/edit.js")
+
  *  Maintainers: [[User:AzaToth]]
}
+
  */
else if (wgPageName == "Special:Watchlist") //watchlist scripts
+
importedScripts = {}; // object keeping track of included scripts, so a script ain't included twice
{
+
function importScript( page ) {
    importScript("MediaWiki:Common.js/watchlist.js")
+
    if( importedScripts[page] ) {
}
+
        return;
 
+
    }
 
+
    importedScripts[page] = true;
/** Sysop Javascript *******************************************************
+
    var url = wgScriptPath
 +
            + '/index.php?title='
 +
            + encodeURIComponent( page.replace( / /g, '_' ) )
 +
            + '&action=raw&ctype=text/javascript';
 +
    var scriptElem = document.createElement( 'script' );
 +
    scriptElem.setAttribute( 'src' , url );
 +
    scriptElem.setAttribute( 'type' , 'text/javascript' );
 +
    document.getElementsByTagName( 'head' )[0].appendChild( scriptElem );
 +
}
 +
 +
function importStylesheet( page ) {
 +
    var sheet = '@import "'
 +
              + wgScriptPath
 +
              + '/index.php?title='
 +
              + encodeURIComponent( page.replace( / /g, '_' ) )
 +
              + '&action=raw&ctype=text/css";'
 +
    var styleElem = document.createElement( 'style' );
 +
    styleElem.setAttribute( 'type' , 'text/css' );
 +
    styleElem.appendChild( document.createTextNode( sheet ) );
 +
    document.getElementsByTagName( 'head' )[0].appendChild( styleElem );
 +
}
 +
 +
/* 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);
 +
    };
 +
})();
 +
 +
/** Internet Explorer bug fix **************************************************
 +
  *
 +
  *  Description: UNDOCUMENTED
 +
  *  Maintainers: [[User:Tom-]]?
 +
  */
 +
 +
if (window.showModalDialog && document.compatMode && document.compatMode == "CSS1Compat" && navigator.appName == "Microsoft Internet Explorer")
 +
{
 +
  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);
 +
  attachEvent("onresize", fixIEScroll);
 +
}
 +
 +
/** 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 for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
+
   *  Description: Allows tables to be collapsed, showing only the header. See
 +
  *              [[Wikipedia:NavFrame]].
 +
  *  Maintainers: [[User:R. Koot]]
 
   */
 
   */
function sysopFunctions() {
+
    if ( wgUserGroups && !window.disableSysopJS ) {
+
var autoCollapse = 2;
        for ( var g = 0; g < wgUserGroups.length; ++g ) {
+
var collapseCaption = "hide";
            if ( wgUserGroups[g] == "sysop" ) {
+
var expandCaption = "show";
                importScript( "MediaWiki:Sysop.js" );
+
                break;
+
function collapseTable( tableIndex )
            }
+
{
        }
+
    var Button = document.getElementById( "collapseButton" + tableIndex );
    }
+
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
}
+
 
+
    if ( !Table || !Button ) {
addOnloadHook( sysopFunctions );
+
        return false;
 
+
    }
 
+
/** WikiMiniAtlas *******************************************************
+
    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 );
 +
        }
 +
    }
 +
}
 +
 +
addOnloadHook( createCollapseButtons );
 +
 +
/** Dynamic Navigation Bars (experimental) *************************************
 
   *
 
   *
   *  Description: WikiMiniAtlas is a popup click and drag world map.
+
   *  Description: See [[Wikipedia:NavFrame]].
  *              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
+
   *  Maintainers: UNMAINTAINED
  *              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")
 
 
 
/** Mobile Redirect Helper ************************************************
 
*
 
*  Redirects to the mobile-optimized gateway at en.m.wikimedia.org
 
*  for viewers on iPhone, iPod Touch, Palm Pre, and Android devices.
 
*
 
*  You can turn off the redirect by setting the cookie "stopMobileRedirect=true"
 
*
 
*  This code cannot be imported, because the JS only loads after all other files
 
*  and this was causing major issues for users with mobile devices. Must be loaded
 
*  *before* the images and etc of the page on all mobile devices.
 
*
 
*  Maintainer: [[User:Brion VIBBER]], [[User:hcatlin]]
 
*/
 
if (/(Android|iPhone|iPod|webOS)/.test(navigator.userAgent)) {
 
 
  var wgMainPageName = 'Main_Page';
 
 
   
 
   
   var stopMobileRedirectCookieExists = function() {
+
  // set up the words in your language
    return (document.cookie.indexOf("stopMobileRedirect=true") >= 0);
+
  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;
 +
    }
 
   }
 
   }
 
   
 
   
   var mobileSiteLink = function() {
+
   // adds show/hide-button to navigation bars
    if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Search') {
+
  function createNavigationBarToggleButton()
        var pageLink = '?search=' + encodeURIComponent(document.getElementById('searchText').value);
+
  {
    } else if (wgPageName == wgMainPageName) {
+
    var indexNavigationBar = 0;
        var pageLink = '::Home'; // Special case
+
    // iterate over all < div >-elements
    } else {
+
    var divs = document.getElementsByTagName("div");
        var pageLink = encodeURIComponent(wgPageName).replace('%2F','/').replace('%3A',':');
+
    for(
    }
+
            var i=0;
    return 'http://' + wgContentLanguage + '.m.wikipedia.org/wiki/' + pageLink + "?wasRedirected=true"
+
            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 NavToggleText = document.createTextNode(NavigationBarHide);
 +
            for (
 +
                  var NavChild = NavFrame.firstChild;
 +
                  NavChild != null;
 +
                  NavChild = NavChild.nextSibling
 +
                ) {
 +
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 +
                    if (NavChild.style.display == 'none') {
 +
                        NavToggleText = document.createTextNode(NavigationBarShow);
 +
                        break;
 +
                    }
 +
                }
 +
            }
 +
 +
            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);
 +
        }
 +
    }
 
   }
 
   }
 
   
 
   
   if (!stopMobileRedirectCookieExists()) {
+
   addOnloadHook( createNavigationBarToggleButton );
    document.location = mobileSiteLink();
+
 +
/** Main Page layout fixes *********************************************************
 +
  *
 +
  *  Description:        Various layout fixes for the main page, including an
 +
  *                      additional link to the complete list of languages available
 +
  *                      and the renaming of the 'Article' to to 'Main Page'.
 +
  *  Maintainers:        [[User:AzaToth]], [[User:R. Koot]]
 +
  */
 +
 +
function mainPageRenameNamespaceTab() {
 +
    try {
 +
        var Node = document.getElementById( 'ca-nstab-main' ).firstChild;
 +
        if ( Node.textContent ) {      // Per DOM Level 3
 +
            Node.textContent = 'Main Page';
 +
        } else if ( Node.innerText ) { // IE doesn't handle .textContent
 +
            Node.innerText = 'Main Page';
 +
        } else {                      // Fallback
 +
            Node.replaceChild( Node.firstChild, document.createTextNode( 'Main Page' ) );
 +
        }
 +
    } catch(e) {
 +
        // bailing out!
 +
    }
 +
}
 +
 +
function mainPageAppendCompleteListLink() {
 +
    try {
 +
        var node = document.getElementById( "p-lang" )
 +
                            .getElementsByTagName('div')[0]
 +
                            .getElementsByTagName('ul')[0];
 +
 +
        var aNode = document.createElement( 'a' );
 +
        var liNode = document.createElement( 'li' );
 +
 +
        aNode.appendChild( document.createTextNode( 'Complete list' ) );
 +
        aNode.setAttribute( 'href' , 'http://meta.wikimedia.org/wiki/List_of_Wikipedias' );
 +
        liNode.appendChild( aNode );
 +
        liNode.className = 'interwiki-completelist';
 +
        node.appendChild( liNode );
 +
      } catch(e) {
 +
        // lets just ignore what's happened
 +
        return;
 +
    }
 +
}
 +
 +
if ( wgTitle == 'Main Page' && ( wgNamespaceNumber == 0 || wgNamespaceNumber == 1 ) ) {
 +
        addOnloadHook( mainPageRenameNamespaceTab );
 +
}
 +
 +
if ( wgTitle == 'Main Page' && wgNamespaceNumber == 0 ) {
 +
        addOnloadHook( mainPageAppendCompleteListLink );
 +
}
 +
 +
/** Extra toolbar options ****************************************************** <nowiki>
 +
  *
 +
  *  Description: UNDOCUMENTED
 +
  *  Maintainers: [[User:MarkS]]?, [[User:Voice of All]], [[User:R. Koot]]
 +
  */
 +
 +
//This is a modified copy of a script by User:MarkS for extra features added by User:Voice of All.
 +
// This is based on the original code on Wikipedia:Tools/Editing tools
 +
// To disable this script, add <code>mwCustomEditButtons = [];<code> to [[Special:Mypage/monobook.js]]
 +
 +
if (mwCustomEditButtons) {
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png",
 +
    "speedTip": "Redirect",
 +
    "tagOpen": "#REDIRECT [[",
 +
    "tagClose": "]]",
 +
    "sampleText": "Insert text"};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png",
 +
    "speedTip": "Strike",
 +
    "tagOpen": "<s>",
 +
    "tagClose": "</s>",
 +
    "sampleText": "Strike-through text"};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/13/Button_enter.png",
 +
    "speedTip": "Line break",
 +
    "tagOpen": "<br />",
 +
    "tagClose": "",
 +
    "sampleText": ""};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png",
 +
    "speedTip": "Superscript",
 +
    "tagOpen": "<sup>",
 +
    "tagClose": "</sup>",
 +
    "sampleText": "Superscript text"};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/7/70/Button_lower_letter.png",
 +
    "speedTip": "Subscript",
 +
    "tagOpen": "<sub>",
 +
    "tagClose": "</sub>",
 +
    "sampleText": "Subscript text"};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/5/58/Button_small.png",
 +
    "speedTip": "Small",
 +
    "tagOpen": "<small>",
 +
    "tagClose": "</small>",
 +
    "sampleText": "Small Text"};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png",
 +
    "speedTip": "Insert hidden Comment",
 +
    "tagOpen": "<!-- ",
 +
    "tagClose": " -->",
 +
    "sampleText": "Comment"};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/12/Button_gallery.png",
 +
    "speedTip": "Insert a picture gallery",
 +
    "tagOpen": "\n<gallery>\n",
 +
    "tagClose": "\n</gallery>",
 +
    "sampleText": "Image:Example.jpg|Caption1\nImage:Example.jpg|Caption2"};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png",
 +
    "speedTip": "Insert block of quoted text",
 +
    "tagOpen": "<blockquote>\n",
 +
    "tagClose": "\n</blockquote>",
 +
    "sampleText": "Block quote"};
 +
 +
  mwCustomEditButtons[mwCustomEditButtons.length] = {
 +
    "imageFile": "http://upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png",
 +
    "speedTip": "Insert a table",
 +
    "tagOpen": '{| class="wikitable"\n|-\n',
 +
    "tagClose": "\n|}",
 +
    "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"};
 +
}
 +
 +
/*</nowiki>*/
 +
 +
/** pageview counter ***********************************************************
 +
  *
 +
  *  Description: Please talk to de:User:LeonWeber before changing anything or
 +
  *              if there are any issues with that.
 +
  *  Maintainers: [[:de:User:LeonWeber]]?
 +
  */
 +
 +
  // this should be adjusted to a good value.
 +
  // BE CAREFUL, you will break zedler if it's too low!
 +
  // And then DaB. will kill Leon :-(
 +
  var disable_counter = 0;
 +
  var counter_factor = 6000;
 +
 +
  function pgcounter_setup()
 +
  {
 +
  if(disable_counter == 0)
 +
  {
 +
  var url = window.location.href;
 +
  if(Math.floor(Math.random()*counter_factor)==42)  // the probability thing
 +
  {
 +
  if(wgIsArticle==true || wgArticleId==0) // do not count history pages etc.
 +
  {
 +
  var pgcountNs = wgCanonicalNamespace;
 +
  if(wgCanonicalNamespace=="")
 +
  {
 +
  pgcountNs = "0";
 +
  }
 +
  var cnt_url = "http://pgcount.wikimedia.de/index.png?ns=" + pgcountNs + "&title=" + encodeURI(wgTitle) + "&factor=" + counter_factor +"&wiki=enwiki";
 +
  var img = new Image();
 +
  img.src = cnt_url;
 +
  }
 +
  }
 +
  }
 
   }
 
   }
}
+
  // Do not use aOnloadFunctions[aOnloadFunctions.length] = pgcounter_setup;, some browsers don't like that.
 
+
  pgcounter_setup();
 
+
/* Scripts specific to Internet Explorer */
+
/** "Technical restrictions" title fix *****************************************
 
 
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";');
 
    }
 
 
 
    // In print IE (7?) does not like line-height
 
    appendCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
 
 
 
    // IE overflow bug
 
    appendCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
 
   
 
    //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.
+
  * Description:
  * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
+
  * Maintainers: User:Interiot, User:Mets501, User:Freakofnurture
 
  */
 
  */
 
+
//
var hasClass = (function () {
+
// For pages that have something like Template:Lowercase, replace the title, but only if it is cut-and-pasteable as a valid wikilink.
     var reCache = {};
+
// (for instance iPod's title is updated. But [[C#]] is not an equivalent
    return function (element, className) {
+
// wikilink, so [[C Sharp]] doesn't have its main title changed)
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
+
// Likewise for users who have selected the U.K. date format ("1 March") the 
    };
+
// titles of day-of-the-year articles will appear in that style. Users with any
})();
+
// other date setting are not affected.
 
+
//
 
+
// The function looks for a banner like this:
/** Interwiki links to featured articles ***************************************
+
// &lt;div id="RealTitleBanner"&gt;  ... &lt;span id="RealTitle"&gt;title&lt;/span&gt; ... &lt;/div&gt;
*
+
// An element with id=DisableRealTitle disables the function.
*  Description: Highlights interwiki links to featured articles (or
+
//
*              equivalents) by changing the bullet before the interwiki link
+
var disableRealTitle = 0; // users can set disableRealTitle = 1 locally to disable.
*              into a star.
+
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)
*  Maintainers: [[User:R. Koot]]
+
  addOnloadHook(function() {
*/
+
     try {
 
+
        var realTitleBanner = document.getElementById("RealTitleBanner");
function LinkFA()  
+
        if (realTitleBanner && !document.getElementById("DisableRealTitle") && !disableRealTitle ) {
{
+
            var realTitle = document.getElementById("RealTitle");
    if ( document.getElementById( "p-lang" ) ) {
+
            if (realTitle) {
        var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
+
                var realTitleHTML = realTitle.innerHTML;
 
+
                realTitleText = pickUpText(realTitle);
        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
+
            if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) {
+
                var isPasteable = 0;
                 InterwikiLinks[i].className += " FA"
+
                //var containsHTML = /</.test(realTitleHTML);    // contains ANY HTML
                 InterwikiLinks[i].title = "This is a featured article in another language.";
+
                var containsTooMuchHTML = /</.test( realTitleHTML.replace(/<\/?(sub|sup|small|big)>/gi, "") ); // contains HTML that will be ignored when cut-n-pasted as a wikilink
 +
                // calculate whether the title is pasteable
 +
                var verifyTitle = realTitleText.replace(/^ +/, "");       // trim left spaces
 +
                verifyTitle = verifyTitle.charAt(0).toUpperCase() + verifyTitle.substring(1, verifyTitle.length);   // uppercase first character
 +
 +
                // if the namespace prefix is there, remove it on our verification copy. If it isn't there, add it to the original realValue copy.
 +
                if (wgNamespaceNumber != 0) {
 +
                    if (wgCanonicalNamespace == verifyTitle.substr(0, wgCanonicalNamespace.length).replace(/ /g, "_") && verifyTitle.charAt(wgCanonicalNamespace.length) == ":") {
 +
                        verifyTitle = verifyTitle.substr(wgCanonicalNamespace.length + 1);
 +
                    } else {
 +
                        realTitleText = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleText;
 +
                        realTitleHTML = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleHTML;
 +
                    }
 +
                }
 +
 +
                // verify whether wgTitle matches
 +
                verifyTitle = verifyTitle.replace(/[\s_]+/g, " ");      // underscores and multiple spaces to single spaces
 +
                verifyTitle = verifyTitle.replace(/^\s+/, "").replace(/\s+$/, "");       // trim left and right spaces
 +
                verifyTitle = verifyTitle.charAt(0).toUpperCase() + verifyTitle.substring(1, verifyTitle.length);   // uppercase first character
 +
                if ( (verifyTitle == wgTitle) || (verifyTitle == 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 = 1;
 +
                 var h1 = document.getElementsByTagName("h1")[0];
 +
                if (h1 && isPasteable) {
 +
                    h1.innerHTML = containsTooMuchHTML ? realTitleText : realTitleHTML;
 +
                    if (!containsTooMuchHTML)
 +
                        realTitleBanner.style.display = "none";
 +
                 }
 +
                document.title = realTitleText + " - Wikipedia, the free encyclopedia";
 
             }
 
             }
 
         }
 
         }
 +
    } catch (e) {
 +
        /* Something went wrong. */
 
     }
 
     }
}
+
  });
 
+
}
addOnloadHook( LinkFA );
+
 
+
// similar to innerHTML, but only returns the text portions of the insides, excludes HTML
 
+
function pickUpText(aParentElement) {
/** Collapsible tables *********************************************************
+
var str = "";
*
+
*  Description: Allows tables to be collapsed, showing only the header. See
+
function pickUpTextInternal(aElement) {
*              [[Wikipedia:NavFrame]].
+
  var child = aElement.firstChild;
*  Maintainers: [[User:R. Koot]]
+
  while (child) {
*/
+
  if (child.nodeType == 1)    // ELEMENT_NODE
 
+
    pickUpTextInternal(child);
var autoCollapse = 2;
+
  else if (child.nodeType == 3)  // TEXT_NODE
var collapseCaption = "hide";
+
    str += child.nodeValue;
var expandCaption = "show";
+
 
+
  child = child.nextSibling;
function collapseTable( tableIndex )
+
  }
{
+
}
     var Button = document.getElementById( "collapseButton" + tableIndex );
+
     var Table = document.getElementById( "collapsibleTable" + tableIndex );
+
  pickUpTextInternal(aParentElement);
 
+
  return str;
     if ( !Table || !Button ) {
+
}
         return false;
+
 +
//fix edit summary prompt for undo
 +
//this code fixes the fact that the undo function combined with the "no edit summary prompter" causes problems if leaving the
 +
//edit summary unchanged
 +
//this was added by [[User:Deskana]], code by [[User:Tra]]
 +
addOnloadHook(function () {
 +
  if (document.location.search.indexOf("undo=") != -1
 +
  && document.getElementsByName('wpAutoSummary')[0]) {
 +
    document.getElementsByName('wpAutoSummary')[0].value='';
 +
  }
 +
})
 +
 +
/** Add dismiss button to watchlist-message *************************************
 +
  *
 +
  *  Description: Hide the watchlist message for one week.
 +
  *  Maintainers: [[User:Ruud Koot|Ruud Koot]]
 +
  */
 +
 +
function addDismissButton() {
 +
     var watchlistMessage = document.getElementById("watchlist-message");
 +
     if ( watchlistMessage == null ) return;
 +
 +
     if ( document.cookie.indexOf( "hidewatchlistmessage=yes" ) != -1 ) {
 +
         watchlistMessage.style.display = "none";
 
     }
 
     }
 
+
     var Rows = Table.rows;
+
     var Button    = document.createElement( "span" );
 
+
     var ButtonLink = document.createElement( "a" );
     if ( Button.firstChild.data == collapseCaption ) {
+
    var ButtonText = document.createTextNode( "dismiss" );
        for ( var i = 1; i < Rows.length; i++ ) {
+
            Rows[i].style.display = "none";
+
    ButtonLink.setAttribute( "id", "dismissButton" );
        }
+
    ButtonLink.setAttribute( "href", "javascript:dismissWatchlistMessage();" );
        Button.firstChild.data = expandCaption;
+
     ButtonLink.setAttribute( "title", "Hide this message for one week" );
     } else {
+
    ButtonLink.appendChild( ButtonText );
        for ( var i = 1; i < Rows.length; i++ ) {
+
            Rows[i].style.display = Rows[0].style.display;
+
    Button.appendChild( document.createTextNode( "[" ) );
        }
+
    Button.appendChild( ButtonLink );
        Button.firstChild.data = collapseCaption;
+
    Button.appendChild( document.createTextNode( "]" ) );
     }
+
}
+
     watchlistMessage.appendChild( Button );
 
+
}
function createCollapseButtons()
+
{
+
function dismissWatchlistMessage() {
    var tableIndex = 0;
+
    var e = new Date();
    var NavigationBoxes = new Object();
+
    e.setTime( e.getTime() + (7*24*60*60*1000) );
    var Tables = document.getElementsByTagName( "table" );
+
    document.cookie = "hidewatchlistmessage=yes; expires=" + e.toGMTString() + "; path=/";
 
+
    var watchlistMessage = document.getElementById("watchlist-message");
    for ( var i = 0; i < Tables.length; i++ ) {
+
    watchlistMessage.style.display = "none";
        if ( hasClass( Tables[i], "collapsible" ) ) {
+
}
 
+
            /* only add button and increment count if there is a header row to work with */
+
addOnloadHook( addDismissButton );
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
+
            if (!HeaderRow) continue;
+
/** Numeric sorting ***************************************************
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
+
  *
            if (!Header) continue;
+
  *  Description: Fixes a bug (part of [[bugzilla:8115]])
 
+
  * in http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js
            NavigationBoxes[ tableIndex ] = Tables[i];
+
  *  regarding [[Help:Sorting|table sorting]]:
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
+
  *  it allows sorting of numbers with more than one comma (thousands separator).
 
+
  *  Maintainer: [[User:Patrick|Patrick]]
            var Button    = document.createElement( "span" );
+
  */
            var ButtonLink = document.createElement( "a" );
+
function ts_parseFloat(num) {
            var ButtonText = document.createTextNode( collapseCaption );
+
if (!num) return 0;
 
+
num = parseFloat(num.replace(/,/g, ""));
            Button.className = "collapseButton";  //Styles are declared in Common.css
+
return (isNaN(num) ? 0 : num);
 
+
}
            ButtonLink.style.color = Header.style.color;
+
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
+
/** Main Page deletion image *******************************************************
            ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
+
  *
            ButtonLink.appendChild( ButtonText );
+
  *  Description: If the Main Page does not exist (i.e., it's been deleted) then insert an image
 
+
  *              instead of showing the "page does not exist" text.
            Button.appendChild( document.createTextNode( "[" ) );
+
  *  Created by: [[User:Mark]], with invaluable help from [[User:Pathoschild]]
            Button.appendChild( ButtonLink );
+
  */
            Button.appendChild( document.createTextNode( "]" ) );
+
 
+
function MainPageDeletedImage() {
            Header.insertBefore( Button, Header.childNodes[0] );
+
  try {
            tableIndex++;
+
        }
+
    //If the article does not exist and it is the Main Page, proceed
    }
+
    if ( document.getElementById( "noarticletext" ) && wgTitle == 'Main Page' ) {
 
+
    for ( var i = 0;  i < tableIndex; i++ ) {
+
      // Insert a protected commons image at the end of the document explaining it.
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
+
      var contentbox = document.getElementById('content');
            collapseTable( i );
+
      var newimg = document.createElement('img');
        }
+
      newimg.setAttribute('src','http://upload.wikimedia.org/wikipedia/commons/9/99/WikipediaTechnical.png');
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
+
      contentbox.appendChild(newimg);
            var element = NavigationBoxes[i];
+
            while (element = element.parentNode) {
+
      // Hide the article-does-not-exist text
                if ( hasClass( element, "outercollapse" ) ) {
+
      var NoArticleMessage = document.getElementById('noarticletext');
                    collapseTable ( i );
+
      NoArticleMessage.style.display="none";
                    break;
+
   
                }
+
      // Hide the edit button
            }
+
      var EditThisPageButton = document.getElementById('ca-edit');
        }
+
      EditThisPageButton.style.display="none";
    }
+
    }
}
+
  } catch(e) {
 
+
      // In case it does not work, do nothing
addOnloadHook( createCollapseButtons );
+
      return;
 
+
  }
 
+
}
/** Dynamic Navigation Bars (experimental) *************************************
+
 +
addOnloadHook( MainPageDeletedImage );
 +
 +
/** Change Special:Search to use a drop-down menu *******************************************************
 +
  *
 +
  *  Description: Change Special:Search to use a drop-down menu, with the default being
 +
  *              the internal MediaWiki engine
 +
  *  Created and maintained by: [[User:Gracenotes]]
 +
  */
 +
 +
if (wgPageName == "Special:Search") {
 +
        var searchEngines = [];
 +
        addOnloadHook(SpecialSearchEnhanced);
 +
}
 +
 +
function SpecialSearchEnhanced() {
 +
        var createOption = function(site, action, mainQ, addQ, addV) {
 +
                var opt = document.createElement('option');
 +
                opt.appendChild(document.createTextNode(site));
 +
                searchEngines[searchEngines.length] = [action, mainQ, addQ, addV];
 +
                return opt;
 +
        }
 +
        var searchForm = document.forms['search'];
 +
        var selectBox = document.createElement('select');
 +
        selectBox.id = 'searchEngine';
 +
        searchForm.onsubmit = function() {
 +
                var optSelected = searchEngines[document.getElementById('searchEngine').selectedIndex];
 +
                searchForm.action = optSelected[0];
 +
                searchForm.lsearchbox.name = optSelected[1];
 +
                searchForm.title.value = optSelected[3];
 +
                searchForm.title.name = optSelected[2];
 +
        }
 +
        selectBox.appendChild(createOption('MediaWiki search', wgScriptPath + '/index.php', 'search', 'title', 'Special:Search'));
 +
        selectBox.appendChild(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikipedia.org'));
 +
        selectBox.appendChild(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikipedia.org'));
 +
        selectBox.appendChild(createOption('Windows Live', 'http://search.live.com/results.aspx', 'q', 'q1', 'site:http://en.wikipedia.org'));
 +
        selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'lang', 'en'));
 +
        selectBox.appendChild(createOption('Exalead', 'http://www.exalead.com/wikipedia/results', 'q', 'language', 'en'));
 +
        searchForm.lsearchbox.style.marginLeft = '0px';
 +
        var lStat = document.getElementById('loadStatus');
 +
        lStat.parentNode.insertBefore(selectBox, lStat);
 +
}
 +
 +
/** Geo-targeted watchlist notice *******************************************************
 +
  *
 +
  *  Description: Allows for geographic targeting of watchlist notices. See [[Wikipedia:Geonotice]] for more information.
 +
  *  Created by: [[User:Gmaxwell]]
 +
  */
 +
 +
if (wgPageName == "Special:Watchlist")
 +
    addOnloadHook((function (){document.write('<script type="text/javascript" src="http://tools.wikimedia.de/~gmaxwell/cgi-bin/geonotice.py"><\/script>')}));
 +
 +
/** Sysop Javascript *******************************************************
 
  *
 
  *
  *  Description: See [[Wikipedia:NavFrame]].
+
  *  Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
  *  Maintainers: UNMAINTAINED
+
  *  Created by: [[User:^demon]]
 
  */
 
  */
 
+
function sysopFunctions() {
// set up the words in your language
+
if ( wgUserGroups && !window.disableSysopJS ) {
var NavigationBarHide = '[' + collapseCaption + ']';
+
for ( var g = 0; g < wgUserGroups.length; ++g ) {
var NavigationBarShow = '[' + expandCaption + ']';
+
if ( wgUserGroups[g] == "sysop" ) {
 
+
importScript( "MediaWiki:Sysop.js" );
// shows and hides content and picture (if available) of navigation bars
+
break;
// 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;
 
    }
 
 
}
 
}
 +
 +
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.
 +
  *  Created by: [[User:Dschwen]]
 +
  */
 +
 +
document.write('<script type="text/javascript" src="'
 +
    + 'http://meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js'
 +
    + '&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400"></script>');
 +
 +
/** IE 6 Z-index bug workaround for anonnotice **************************
 +
  *
 +
  *  Description: This implements a work around 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?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=q74&q=z-index+ie6+bug&btnG=Search
 +
  *  Created by: [[User:Gmaxwell]]
 +
  */
 +
addOnloadHook((function (){
 +
    if (wgUserName == null) {
 +
 +
        var messageEdu=new Array();
 +
            messageEdu[0]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Researching_with_Wikipedia" title="Wikipedia:Researching with Wikipedia">Learn&nbsp;more&nbsp;about&nbsp;using&nbsp;Wikipedia&nbsp;for&nbsp;research</a>';
 +
            messageEdu[1]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Ten_things_you_may_not_know_about_Wikipedia" title="Wikipedia:Ten things you may not know about Wikipedia">Ten&nbsp;things&nbsp;you&nbsp;may&nbsp;not&nbsp;know&nbsp;about&nbsp;Wikipedia</a>';
 +
            messageEdu[2]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Ten_things_you_may_not_know_about_images_on_Wikipedia" title="Wikipedia:Ten things you may not know about images on Wikipedia">Ten&nbsp;things&nbsp;you&nbsp;may&nbsp;not&nbsp;know&nbsp;about&nbsp;images&nbsp;on&nbsp;Wikipedia</a>';
 +
            messageEdu[3]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Citing_Wikipedia" title="Wikipedia:Citing Wikipedia">Learn&nbsp;more&nbsp;about&nbsp;citing&nbsp;Wikipedia</a>';
 +
            messageEdu[4]='Have&nbsp;questions?&nbsp;<a href="http://en.wikipedia.org/wiki/Wikipedia:Questions" title="Wikipedia:Questions">Find&nbsp;out&nbsp;how&nbsp;to&nbsp;ask&nbsp;questions&nbsp;and&nbsp;get&nbsp;answers.</a>';
 +
            messageEdu[5]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Basic_navigation" title="Wikipedia:Basic navigation">Find&nbsp;out&nbsp;more&nbsp;about&nbsp;navigating&nbsp;Wikipedia&nbsp;and&nbsp;finding&nbsp;information</a>';
 +
            messageEdu[6]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Contributing_to_Wikipedia" title="Wikipedia:Contributing to Wikipedia">Interested&nbsp;in&nbsp;contributing&nbsp;to&nbsp;Wikipedia?</a>';
 +
        var whichMessageEdu = Math.floor(Math.random()*(messageEdu.length));
 +
  
// adds show/hide-button to navigation bars
+
    }
function createNavigationBarToggleButton()
+
}));
 +
 +
/**
 +
  * Correctly handle PNG transparency in Internet Explorer 6.
 +
  * http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.
 +
  * 
 +
  * Adapted for Wikipedia by Remember_the_dot and Edokter.
 +
  * 
 +
  * http://homepage.ntlworld.com/bobosola/pnginfo.htm states "This page contains more information for
 +
  * the curious or those who wish to amend the script for special needs", which I take as permission to
 +
  * modify or adapt this script freely. I release my changes into the public domain.
 +
  */ 
 +
 +
function PngFix()
 
{
 
{
     var indexNavigationBar = 0;
+
     if (document.body.filters && !window.PngFixDisabled)
    // iterate over all < div >-elements
+
    {
    var divs = document.getElementsByTagName("div");
+
        var documentImages = document.images
    for (var i = 0; NavFrame = divs[i]; i++) {
+
        var documentCreateElement = document.createElement
        // if found a navigation bar
+
        var funcEncodeURI = encodeURI
         if (hasClass(NavFrame, "NavFrame")) {
+
 
+
        for (var i = 0; i < documentImages.length;)
             indexNavigationBar++;
+
         {
             var NavToggle = document.createElement("a");
+
             var img = documentImages[i]
            NavToggle.className = 'NavToggle';
+
             var imgSrc = img.src
             NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
+
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
+
             if (imgSrc.substr(imgSrc.length - 3).toLowerCase() == "png" && !img.onclick)
 
+
            {
            var isCollapsed = hasClass( NavFrame, "collapsed" );
+
                 if (img.useMap)
            /*
+
                {
            * Check if any children are already hidden.  This loop is here for backwards compatibility:
+
                     img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + encodeURI(imgSrc) + "')"
            * the old way of making NavFrames start out collapsed was to manually add style="display:none"
+
                    img.src = "http://upload.wikimedia.org/wikipedia/commons/c/ce/Transparent.gif"
            * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
+
                     i++
            * 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;
 
                     }
 
 
                 }
 
                 }
            }
+
                else
            if (isCollapsed) {
+
                {
                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+
                    var outerSpan = documentCreateElement("span")
                     if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
+
                    var innerSpan = documentCreateElement("span")
                        NavChild.style.display = 'none';
+
                    var outerSpanStyle = outerSpan.style
                     }
+
                    var innerSpanStyle = innerSpan.style
 +
                    var imgCurrentStyle = img.currentStyle
 +
 +
                    outerSpan.id = img.id
 +
                    outerSpan.title = img.title
 +
                    outerSpan.className = img.className
 +
                    outerSpanStyle.backgroundImage = imgCurrentStyle.backgroundImage
 +
                    outerSpanStyle.borderWidth = imgCurrentStyle.borderWidth
 +
                    outerSpanStyle.borderStyle = imgCurrentStyle.borderStyle
 +
                    outerSpanStyle.borderColor = imgCurrentStyle.borderColor
 +
                    outerSpanStyle.display = "inline-block"
 +
                    outerSpanStyle.fontSize = "0"
 +
                    outerSpanStyle.verticalAlign = "middle"
 +
                     if (img.parentElement.href) outerSpanStyle.cursor = "hand"
 +
 +
                    innerSpanStyle.width = "1px"
 +
                    innerSpanStyle.height = "1px"
 +
                    innerSpanStyle.display = "inline-block"
 +
                    innerSpanStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + funcEncodeURI(imgSrc) + "')"
 +
 +
                     outerSpan.appendChild(innerSpan)
 +
                    img.parentNode.replaceChild(outerSpan, img)
 
                 }
 
                 }
 
             }
 
             }
             var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
+
             else
             NavToggle.appendChild(NavToggleText);
+
             {
 
+
                i++
            // 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 );
+
if (navigator.appName == "Microsoft Internet Explorer" && navigator.appVersion.substr(22, 1) == "6")
 
 
 
 
/** 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]]
 
*/
 
 
 
if (wgPageName == 'Main_Page' || wgPageName == 'Talk:Main_Page')
 
    addOnloadHook(function () {
 
        addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/List_of_Wikipedias',
 
                'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias')
 
        var nstab = document.getElementById('ca-nstab-main')
 
        if (nstab && wgUserLanguage=='en') {
 
            while (nstab.firstChild) nstab = nstab.firstChild
 
            nstab.nodeValue = 'Main Page'
 
        }
 
    }
 
)
 
 
 
 
 
/** 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;
 
 
 
 
 
/***** 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 **/
 
 
 
var __ipv6wwwtest_factor = 100;
 
var __ipv6wwwtest_done = 0;
 
if ((wgServer != "https://secure.wikimedia.org") && (Math.floor(Math.random()*__ipv6wwwtest_factor)==42)) {
 
    importScript("MediaWiki:Common.js/IPv6.js");
 
}
 
 
 
/** Magic editintros ****************************************************
 
*
 
*  Description: Adds editintros on disambiguation pages and BLP pages.
 
*  Maintainers: [[User:RockMFR]]
 
*/
 
 
 
function addEditIntro(name)
 
 
{
 
{
  var el = document.getElementById('ca-edit');
+
     window.attachEvent("onload", PngFix)
  if (!el)
 
     return;
 
  el = el.getElementsByTagName('a')[0];
 
  if (el)
 
    el.href += '&editintro=' + name;
 
 
}
 
}
 
+
 
+
/**
if (wgNamespaceNumber == 0) {
+
   * Remove need for CSS hacks regarding MSIE and IPA.
   addOnloadHook(function(){
+
   */
    if (document.getElementById('disambigbox'))
+
      addEditIntro('Template:Disambig_editintro');
+
if(navigator.userAgent.indexOf("MSIE") != -1 && 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";');
 
 
  addOnloadHook(function(){
 
    var cats = document.getElementById('mw-normal-catlinks');
 
    if (!cats)
 
      return;
 
    cats = cats.getElementsByTagName('a');
 
    for (var i = 0; i < cats.length; i++) {
 
      if (cats[i].title == 'Category:Living people' || cats[i].title == 'Category:Possibly living people') {
 
        addEditIntro('Template:BLP_editintro');
 
        break;
 
      }
 
    }
 
  });
 
 
}
 
}
 
//</source>
 

Revision as of 23:43, 17 September 2009

/* Any JavaScript here will be loaded for all users on every page load. */

/** Import module *************************************************************
  *
  *  Description: Includes a raw wiki page as javascript or CSS, 
  *               used for including user made modules.
  *  Maintainers: [[User:AzaToth]]
  */
 importedScripts = {}; // object keeping track of included scripts, so a script ain't included twice
 function importScript( page ) {
     if( importedScripts[page] ) {
         return;
     }
     importedScripts[page] = true;
     var url = wgScriptPath
             + '/index.php?title='
             + encodeURIComponent( page.replace( / /g, '_' ) )
             + '&action=raw&ctype=text/javascript';
     var scriptElem = document.createElement( 'script' );
     scriptElem.setAttribute( 'src' , url );
     scriptElem.setAttribute( 'type' , 'text/javascript' );
     document.getElementsByTagName( 'head' )[0].appendChild( scriptElem );
 }
 
 function importStylesheet( page ) {
     var sheet = '@import "'
               + wgScriptPath
               + '/index.php?title='
               + encodeURIComponent( page.replace( / /g, '_' ) )
               + '&action=raw&ctype=text/css";'
     var styleElem = document.createElement( 'style' );
     styleElem.setAttribute( 'type' , 'text/css' );
     styleElem.appendChild( document.createTextNode( sheet ) );
     document.getElementsByTagName( 'head' )[0].appendChild( styleElem );
 }
 
 /* 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);
     };
 })();
 
 /** Internet Explorer bug fix **************************************************
  *
  *  Description: UNDOCUMENTED
  *  Maintainers: [[User:Tom-]]?
  */
 
 if (window.showModalDialog && document.compatMode && document.compatMode == "CSS1Compat" && navigator.appName == "Microsoft Internet Explorer")
 {
   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);
   attachEvent("onresize", fixIEScroll);
 }
 
 /** 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 );
         }
     }
 }
 
 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 NavToggleText = document.createTextNode(NavigationBarHide);
             for (
                  var NavChild = NavFrame.firstChild;
                  NavChild != null;
                  NavChild = NavChild.nextSibling
                 ) {
                 if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                     if (NavChild.style.display == 'none') {
                         NavToggleText = document.createTextNode(NavigationBarShow);
                         break;
                     }
                 }
             }
 
             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:        Various layout fixes for the main page, including an
  *                      additional link to the complete list of languages available
  *                      and the renaming of the 'Article' to to 'Main Page'.
  *  Maintainers:        [[User:AzaToth]], [[User:R. Koot]]
  */
 
 function mainPageRenameNamespaceTab() {
     try {
         var Node = document.getElementById( 'ca-nstab-main' ).firstChild;
         if ( Node.textContent ) {      // Per DOM Level 3
             Node.textContent = 'Main Page';
         } else if ( Node.innerText ) { // IE doesn't handle .textContent
             Node.innerText = 'Main Page';
         } else {                       // Fallback
             Node.replaceChild( Node.firstChild, document.createTextNode( 'Main Page' ) ); 
         }
     } catch(e) {
         // bailing out!
     }
 }
 
 function mainPageAppendCompleteListLink() {
     try {
         var node = document.getElementById( "p-lang" )
                            .getElementsByTagName('div')[0]
                            .getElementsByTagName('ul')[0];
 
         var aNode = document.createElement( 'a' );
         var liNode = document.createElement( 'li' );
 
         aNode.appendChild( document.createTextNode( 'Complete list' ) );
         aNode.setAttribute( 'href' , 'http://meta.wikimedia.org/wiki/List_of_Wikipedias' );
         liNode.appendChild( aNode );
         liNode.className = 'interwiki-completelist';
         node.appendChild( liNode );
      } catch(e) {
        // lets just ignore what's happened
        return;
     }
 }
 
 if ( wgTitle == 'Main Page' && ( wgNamespaceNumber == 0 || wgNamespaceNumber == 1 ) ) {
        addOnloadHook( mainPageRenameNamespaceTab );
 }
 
 if ( wgTitle == 'Main Page' && wgNamespaceNumber == 0 ) {
        addOnloadHook( mainPageAppendCompleteListLink );
 }
 
 /** Extra toolbar options ****************************************************** <nowiki>
  *
  *  Description: UNDOCUMENTED
  *  Maintainers: [[User:MarkS]]?, [[User:Voice of All]], [[User:R. Koot]]
  */
 
 //This is a modified copy of a script by User:MarkS for extra features added by User:Voice of All.
 // This is based on the original code on Wikipedia:Tools/Editing tools
 // To disable this script, add <code>mwCustomEditButtons = [];<code> to [[Special:Mypage/monobook.js]]
 
 if (mwCustomEditButtons) {
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png",
     "speedTip": "Redirect",
     "tagOpen": "#REDIRECT [[",
     "tagClose": "]]",
     "sampleText": "Insert text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png",
     "speedTip": "Strike",
     "tagOpen": "<s>",
     "tagClose": "</s>",
     "sampleText": "Strike-through text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/13/Button_enter.png",
     "speedTip": "Line break",
     "tagOpen": "<br />",
     "tagClose": "",
     "sampleText": ""};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png",
     "speedTip": "Superscript",
     "tagOpen": "<sup>",
     "tagClose": "</sup>",
     "sampleText": "Superscript text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/7/70/Button_lower_letter.png",
     "speedTip": "Subscript",
     "tagOpen": "<sub>",
     "tagClose": "</sub>",
     "sampleText": "Subscript text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/5/58/Button_small.png",
     "speedTip": "Small",
     "tagOpen": "<small>",
     "tagClose": "</small>",
     "sampleText": "Small Text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png",
     "speedTip": "Insert hidden Comment",
     "tagOpen": "<!-- ",
     "tagClose": " -->",
     "sampleText": "Comment"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/12/Button_gallery.png",
     "speedTip": "Insert a picture gallery",
     "tagOpen": "\n<gallery>\n",
     "tagClose": "\n</gallery>",
     "sampleText": "Image:Example.jpg|Caption1\nImage:Example.jpg|Caption2"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png",
     "speedTip": "Insert block of quoted text",
     "tagOpen": "<blockquote>\n",
     "tagClose": "\n</blockquote>",
     "sampleText": "Block quote"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png",
     "speedTip": "Insert a table",
     "tagOpen": '{| class="wikitable"\n|-\n',
     "tagClose": "\n|}",
     "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"};
 }
 
 /*</nowiki>*/
 
 /** pageview counter ***********************************************************
  *
  *  Description: Please talk to de:User:LeonWeber before changing anything or 
  *               if there are any issues with that.
  *  Maintainers: [[:de:User:LeonWeber]]?
  */
 
  // this should be adjusted to a good value.
  // BE CAREFUL, you will break zedler if it's too low!
  // And then DaB. will kill Leon :-(
  var disable_counter = 0;
  var counter_factor = 6000;
 
  function pgcounter_setup()
  {
  	if(disable_counter == 0)
  	{
  		var url = window.location.href;
  		if(Math.floor(Math.random()*counter_factor)==42)  // the probability thing
   		{
   			if(wgIsArticle==true || wgArticleId==0) // do not count history pages etc.
  			{
  				var pgcountNs = wgCanonicalNamespace;
  				if(wgCanonicalNamespace=="")
  				{
  					pgcountNs = "0";
  				}
   				var cnt_url = "http://pgcount.wikimedia.de/index.png?ns=" + pgcountNs + "&title=" + encodeURI(wgTitle) + "&factor=" + counter_factor +"&wiki=enwiki";
  				var img = new Image(); 
  				img.src = cnt_url;
  			}
  		}
  	}
  }
  // Do not use aOnloadFunctions[aOnloadFunctions.length] = pgcounter_setup;, some browsers don't like that.
  pgcounter_setup();
 
 /** "Technical restrictions" title fix *****************************************
 *
 * Description:
 * Maintainers: User:Interiot, User:Mets501, User:Freakofnurture
 */
 //
 // For pages that have something like Template:Lowercase, replace the title, but only if it is cut-and-pasteable as a valid wikilink.
 // (for instance iPod's title is updated. But [[C#]] is not an equivalent
 // wikilink, so [[C Sharp]] doesn't have its main title changed)
 // Likewise for users who have selected the U.K. date format ("1 March") the  
 // titles of day-of-the-year articles will appear in that style. Users with any
 // other date setting are not affected.
 //
 // The function looks for a banner like this: 
 // &lt;div id="RealTitleBanner"&gt;  ... &lt;span id="RealTitle"&gt;title&lt;/span&gt; ... &lt;/div&gt;
 // An element with id=DisableRealTitle disables the function.
 //
 var disableRealTitle = 0; // users can set disableRealTitle = 1 locally to disable.
 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)
  addOnloadHook(function() {
    try {
        var realTitleBanner = document.getElementById("RealTitleBanner");
        if (realTitleBanner && !document.getElementById("DisableRealTitle") && !disableRealTitle ) {
            var realTitle = document.getElementById("RealTitle");
            if (realTitle) {
                var realTitleHTML = realTitle.innerHTML;
                realTitleText = pickUpText(realTitle);
 
                var isPasteable = 0;
                //var containsHTML = /</.test(realTitleHTML);    // contains ANY HTML
                var containsTooMuchHTML = /</.test( realTitleHTML.replace(/<\/?(sub|sup|small|big)>/gi, "") ); // contains HTML that will be ignored when cut-n-pasted as a wikilink
                // calculate whether the title is pasteable
                var verifyTitle = realTitleText.replace(/^ +/, "");       // trim left spaces
                verifyTitle = verifyTitle.charAt(0).toUpperCase() + verifyTitle.substring(1, verifyTitle.length);    // uppercase first character
 
                // if the namespace prefix is there, remove it on our verification copy. If it isn't there, add it to the original realValue copy.
                if (wgNamespaceNumber != 0) {
                    if (wgCanonicalNamespace == verifyTitle.substr(0, wgCanonicalNamespace.length).replace(/ /g, "_") && verifyTitle.charAt(wgCanonicalNamespace.length) == ":") {
                        verifyTitle = verifyTitle.substr(wgCanonicalNamespace.length + 1);
                    } else {
                        realTitleText = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleText;
                        realTitleHTML = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleHTML;
                    }
                }
 
                // verify whether wgTitle matches
                verifyTitle = verifyTitle.replace(/[\s_]+/g, " ");      // underscores and multiple spaces to single spaces
                verifyTitle = verifyTitle.replace(/^\s+/, "").replace(/\s+$/, "");        // trim left and right spaces
                verifyTitle = verifyTitle.charAt(0).toUpperCase() + verifyTitle.substring(1, verifyTitle.length);    // uppercase first character
                if ( (verifyTitle == wgTitle) || (verifyTitle == 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 = 1;
                var h1 = document.getElementsByTagName("h1")[0];
                if (h1 && isPasteable) {
                    h1.innerHTML = containsTooMuchHTML ? realTitleText : realTitleHTML;
                    if (!containsTooMuchHTML)
                        realTitleBanner.style.display = "none";
                }
                document.title = realTitleText + " - Wikipedia, the free encyclopedia";
            }
        }
    } catch (e) {
        /* Something went wrong. */
    }
  });
 }
 
 // similar to innerHTML, but only returns the text portions of the insides, excludes HTML
 function pickUpText(aParentElement) {
 var str = "";
 
 function pickUpTextInternal(aElement) {
  var child = aElement.firstChild;
  while (child) {
   if (child.nodeType == 1)     // ELEMENT_NODE 
    pickUpTextInternal(child);
   else if (child.nodeType == 3)   // TEXT_NODE
    str += child.nodeValue;
 
   child = child.nextSibling;
  }
 }
 
  pickUpTextInternal(aParentElement);
  return str;
 }
 
 //fix edit summary prompt for undo
 //this code fixes the fact that the undo function combined with the "no edit summary prompter" causes problems if leaving the
 //edit summary unchanged
 //this was added by [[User:Deskana]], code by [[User:Tra]]
 addOnloadHook(function () {
   if (document.location.search.indexOf("undo=") != -1
   && document.getElementsByName('wpAutoSummary')[0]) {
     document.getElementsByName('wpAutoSummary')[0].value='';
   }
 })
 
 /** Add dismiss button to watchlist-message *************************************
  *
  *  Description: Hide the watchlist message for one week.
  *  Maintainers: [[User:Ruud Koot|Ruud Koot]]
  */
 
 function addDismissButton() {
    var watchlistMessage = document.getElementById("watchlist-message");
    if ( watchlistMessage == null ) return;
 
    if ( document.cookie.indexOf( "hidewatchlistmessage=yes" ) != -1 ) {
        watchlistMessage.style.display = "none";
    }
 
    var Button     = document.createElement( "span" );
    var ButtonLink = document.createElement( "a" );
    var ButtonText = document.createTextNode( "dismiss" );
 
    ButtonLink.setAttribute( "id", "dismissButton" );
    ButtonLink.setAttribute( "href", "javascript:dismissWatchlistMessage();" );
    ButtonLink.setAttribute( "title", "Hide this message for one week" );
    ButtonLink.appendChild( ButtonText );
 
    Button.appendChild( document.createTextNode( "[" ) );
    Button.appendChild( ButtonLink );
    Button.appendChild( document.createTextNode( "]" ) );
 
    watchlistMessage.appendChild( Button );
 }
 
 function dismissWatchlistMessage() {
     var e = new Date();
     e.setTime( e.getTime() + (7*24*60*60*1000) );
     document.cookie = "hidewatchlistmessage=yes; expires=" + e.toGMTString() + "; path=/";
     var watchlistMessage = document.getElementById("watchlist-message");
     watchlistMessage.style.display = "none";
 }
 
 addOnloadHook( addDismissButton );
 
 /** Numeric sorting ***************************************************
  *
  *  Description: Fixes a bug (part of [[bugzilla:8115]])
  *  in http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js
  *  regarding [[Help:Sorting|table sorting]]:
  *  it allows sorting of numbers with more than one comma (thousands separator).
  *  Maintainer: [[User:Patrick|Patrick]]
  */
 function ts_parseFloat(num) {
 	if (!num) return 0;
 	num = parseFloat(num.replace(/,/g, ""));
 	return (isNaN(num) ? 0 : num);
 }
 
 /** Main Page deletion image *******************************************************
   *
   *  Description: If the Main Page does not exist (i.e., it's been deleted) then insert an image
   *               instead of showing the "page does not exist" text.
   *  Created by: [[User:Mark]], with invaluable help from [[User:Pathoschild]]
   */
 
 function MainPageDeletedImage() {
   try {
 
     //If the article does not exist and it is the Main Page, proceed
     if ( document.getElementById( "noarticletext" ) && wgTitle == 'Main Page' ) {
 
       // Insert a protected commons image at the end of the document explaining it.
       var contentbox = document.getElementById('content');
       var newimg = document.createElement('img');
       newimg.setAttribute('src','http://upload.wikimedia.org/wikipedia/commons/9/99/WikipediaTechnical.png');
       contentbox.appendChild(newimg);
 
       // Hide the article-does-not-exist text
       var NoArticleMessage = document.getElementById('noarticletext');
       NoArticleMessage.style.display="none";
 
       // Hide the edit button
       var EditThisPageButton = document.getElementById('ca-edit');
       EditThisPageButton.style.display="none";
     }
   } catch(e) {
       // In case it does not work, do nothing
       return;
   }
 }
 
 addOnloadHook( MainPageDeletedImage );
 
 /** Change Special:Search to use a drop-down menu *******************************************************
   *
   *  Description: Change Special:Search to use a drop-down menu, with the default being
   *               the internal MediaWiki engine
   *  Created and maintained by: [[User:Gracenotes]]
   */
 
 if (wgPageName == "Special:Search") {
         var searchEngines = [];
         addOnloadHook(SpecialSearchEnhanced);
 }
 
 function SpecialSearchEnhanced() {
         var createOption = function(site, action, mainQ, addQ, addV) {
                 var opt = document.createElement('option');
                 opt.appendChild(document.createTextNode(site));
                 searchEngines[searchEngines.length] = [action, mainQ, addQ, addV];
                 return opt;
         }
         var searchForm = document.forms['search'];
         var selectBox = document.createElement('select');
         selectBox.id = 'searchEngine';
         searchForm.onsubmit = function() {
                 var optSelected = searchEngines[document.getElementById('searchEngine').selectedIndex];
                 searchForm.action = optSelected[0];
                 searchForm.lsearchbox.name = optSelected[1];
                 searchForm.title.value = optSelected[3];
                 searchForm.title.name = optSelected[2];
         }
         selectBox.appendChild(createOption('MediaWiki search', wgScriptPath + '/index.php', 'search', 'title', 'Special:Search'));
         selectBox.appendChild(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikipedia.org'));
         selectBox.appendChild(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikipedia.org'));
         selectBox.appendChild(createOption('Windows Live', 'http://search.live.com/results.aspx', 'q', 'q1', 'site:http://en.wikipedia.org'));
         selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'lang', 'en'));
         selectBox.appendChild(createOption('Exalead', 'http://www.exalead.com/wikipedia/results', 'q', 'language', 'en'));
         searchForm.lsearchbox.style.marginLeft = '0px';
         var lStat = document.getElementById('loadStatus');
         lStat.parentNode.insertBefore(selectBox, lStat);
 }
 
 /** Geo-targeted watchlist notice *******************************************************
   *
   *  Description: Allows for geographic targeting of watchlist notices. See [[Wikipedia:Geonotice]] for more information.
   *  Created by: [[User:Gmaxwell]]
   */
 
 if (wgPageName == "Special:Watchlist")
     addOnloadHook((function (){document.write('<script type="text/javascript" src="http://tools.wikimedia.de/~gmaxwell/cgi-bin/geonotice.py"><\/script>')}));
 
/** Sysop Javascript *******************************************************
 *
 *  Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
 *  Created by: [[User:^demon]]
 */
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. 
   *  Created by: [[User:Dschwen]]
   */
 
 document.write('<script type="text/javascript" src="' 
     + 'http://meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js' 
     + '&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400"></script>');
 
 /** IE 6 Z-index bug workaround for anonnotice **************************
   *
   *  Description: This implements a work around 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?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=q74&q=z-index+ie6+bug&btnG=Search
   *  Created by: [[User:Gmaxwell]]
   */
 addOnloadHook((function (){
     if (wgUserName == null) {
 
         var messageEdu=new Array();
            messageEdu[0]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Researching_with_Wikipedia" title="Wikipedia:Researching with Wikipedia">Learn&nbsp;more&nbsp;about&nbsp;using&nbsp;Wikipedia&nbsp;for&nbsp;research</a>';
            messageEdu[1]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Ten_things_you_may_not_know_about_Wikipedia" title="Wikipedia:Ten things you may not know about Wikipedia">Ten&nbsp;things&nbsp;you&nbsp;may&nbsp;not&nbsp;know&nbsp;about&nbsp;Wikipedia</a>';
            messageEdu[2]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Ten_things_you_may_not_know_about_images_on_Wikipedia" title="Wikipedia:Ten things you may not know about images on Wikipedia">Ten&nbsp;things&nbsp;you&nbsp;may&nbsp;not&nbsp;know&nbsp;about&nbsp;images&nbsp;on&nbsp;Wikipedia</a>';
            messageEdu[3]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Citing_Wikipedia" title="Wikipedia:Citing Wikipedia">Learn&nbsp;more&nbsp;about&nbsp;citing&nbsp;Wikipedia</a>';
            messageEdu[4]='Have&nbsp;questions?&nbsp;<a href="http://en.wikipedia.org/wiki/Wikipedia:Questions" title="Wikipedia:Questions">Find&nbsp;out&nbsp;how&nbsp;to&nbsp;ask&nbsp;questions&nbsp;and&nbsp;get&nbsp;answers.</a>';
            messageEdu[5]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Basic_navigation" title="Wikipedia:Basic navigation">Find&nbsp;out&nbsp;more&nbsp;about&nbsp;navigating&nbsp;Wikipedia&nbsp;and&nbsp;finding&nbsp;information</a>';
            messageEdu[6]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Contributing_to_Wikipedia" title="Wikipedia:Contributing to Wikipedia">Interested&nbsp;in&nbsp;contributing&nbsp;to&nbsp;Wikipedia?</a>';
         var whichMessageEdu = Math.floor(Math.random()*(messageEdu.length));
 

     }
 }));
 
/** 
  * Correctly handle PNG transparency in Internet Explorer 6.
  * http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.
  *  
  * Adapted for Wikipedia by Remember_the_dot and Edokter.
  *  
  * http://homepage.ntlworld.com/bobosola/pnginfo.htm states "This page contains more information for
  * the curious or those who wish to amend the script for special needs", which I take as permission to
  * modify or adapt this script freely. I release my changes into the public domain.
  */  
 
function PngFix()
{
    if (document.body.filters && !window.PngFixDisabled)
    {
        var documentImages = document.images
        var documentCreateElement = document.createElement
        var funcEncodeURI = encodeURI
 
        for (var i = 0; i < documentImages.length;)
        {
            var img = documentImages[i]
            var imgSrc = img.src
 
            if (imgSrc.substr(imgSrc.length - 3).toLowerCase() == "png" && !img.onclick)
            {
                if (img.useMap)
                {
                    img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + encodeURI(imgSrc) + "')"
                    img.src = "http://upload.wikimedia.org/wikipedia/commons/c/ce/Transparent.gif"
                    i++
                }
                else
                {
                    var outerSpan = documentCreateElement("span")
                    var innerSpan = documentCreateElement("span")
                    var outerSpanStyle = outerSpan.style
                    var innerSpanStyle = innerSpan.style
                    var imgCurrentStyle = img.currentStyle
 
                    outerSpan.id = img.id
                    outerSpan.title = img.title
                    outerSpan.className = img.className
                    outerSpanStyle.backgroundImage = imgCurrentStyle.backgroundImage
                    outerSpanStyle.borderWidth = imgCurrentStyle.borderWidth
                    outerSpanStyle.borderStyle = imgCurrentStyle.borderStyle
                    outerSpanStyle.borderColor = imgCurrentStyle.borderColor
                    outerSpanStyle.display = "inline-block"
                    outerSpanStyle.fontSize = "0"
                    outerSpanStyle.verticalAlign = "middle"
                    if (img.parentElement.href) outerSpanStyle.cursor = "hand"
 
                    innerSpanStyle.width = "1px"
                    innerSpanStyle.height = "1px"
                    innerSpanStyle.display = "inline-block"
                    innerSpanStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + funcEncodeURI(imgSrc) + "')"
 
                    outerSpan.appendChild(innerSpan)
                    img.parentNode.replaceChild(outerSpan, img)
                }
            }
            else
            {
                i++
            }
        }
    }
}
 
if (navigator.appName == "Microsoft Internet Explorer" && navigator.appVersion.substr(22, 1) == "6")
{
    window.attachEvent("onload", PngFix)
}
 
/**
  * Remove need for CSS hacks regarding MSIE and IPA.
  */
 
if(navigator.userAgent.indexOf("MSIE") != -1 && 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";');
}