Difference between revisions of "MediaWiki:Common.js"

From SWGANH Wiki
Jump to: navigation, search
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<pre><nowiki>
 
/* Any JavaScript here will be loaded for all users on every page load. */
 
 
/** Tooltips and access keys ***************************************************
 
*
 
*  Description: Adds tooltips and access keys to links part of the MediaWiki
 
*              interface.
 
*  Maintainers: Gwicke?, Simetrical?, Ruud Koot
 
*/
 
 
ta = new Object();
 
ta["n-mainpage"]            = new Array("z","Visit the main page");
 
ta["n-Main-page"]          = new Array("z","Visit the main page");
 
ta["n-Featured-content"]    = new Array("","Featured content — the best of Wikipedia");
 
ta["n-help"]                = new Array("","The place to find out about Wikipedia");
 
ta["n-contact"]            = new Array("","How to contact Wikipedia");
 
ta["n-sitesupport"]        = new Array("","Help keep Wikipedia running");
 
ta["t-print"]              = new Array("","Printable version of this page");
 
ta["t-permalink"]          = new Array("","Permanent link to this version of the page");
 
ta["t-cite"]                = new Array("","Cite this Wikipedia article");
 
ta["ca-nstab-project"]      = new Array("c","View the project page");
 
ta["n-Contents"]            = new Array("","Guides to browsing Wikipedia");
 
 
/** 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")
 
{
 
  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 *********************************************************
 
/** Collapsible tables *********************************************************
 
  *
 
  *
 
  *  Description: Allows tables to be collapsed, showing only the header. See
 
  *  Description: Allows tables to be collapsed, showing only the header. See
  *              Wikipedia:NavFrame.
+
  *              [[Wikipedia:NavFrame]].
  *  Maintainers: User:R. Koot
+
  *  Maintainers: [[User:R. Koot]]
 
  */
 
  */
 
+
 
var autoCollapse = 2;
 
var autoCollapse = 2;
 
var collapseCaption = "hide";
 
var collapseCaption = "hide";
 
var expandCaption = "show";
 
var expandCaption = "show";
 
+
function collapseTable( tableIndex )
+
function collapseTable( tableIndex ) {
{
+
        var Button = document.getElementById( "collapseButton" + tableIndex );
    var Button = document.getElementById( "collapseButton" + tableIndex );
+
        var Table = document.getElementById( "collapsibleTable" + tableIndex );
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
+
 
+
        if ( !Table || !Button ) {
    if ( !Table || !Button ) {
+
                return false;
        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 {
+
         var Rows = Table.rows;
        for ( var i = 1; i < Rows.length; i++ ) {
+
            Rows[i].style.display = Rows[0].style.display;
+
        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;
 
         }
 
         }
        Button.firstChild.data = collapseCaption;
 
    }
 
 
}
 
}
 
+
function createCollapseButtons()
+
function createCollapseButtons() {
{
+
        var tableIndex = 0;
    var tableIndex = 0;
+
        var NavigationBoxes = new Object();
    var NavigationBoxes = new Object();
+
        var Tables = document.getElementsByTagName( "table" );
    var Tables = document.getElementsByTagName( "table" );
+
 
+
        for ( var i = 0; i < Tables.length; i++ ) {
    for ( var i = 0; i < Tables.length; i++ ) {
+
                if ( hasClass( Tables[i], "collapsible" ) ) {
        if ( hasClass( Tables[i], "collapsible" ) ) {
+
            NavigationBoxes[ tableIndex ] = Tables[i];
+
                        /* only add button and increment count if there is a header row to work with */
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
+
                        var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
 
+
                        if (!HeaderRow) continue;
            var Button    = document.createElement( "span" );
+
                        var Header = HeaderRow.getElementsByTagName( "th" )[0];
            var ButtonLink = document.createElement( "a" );
+
                        if (!Header) continue;
            var ButtonText = document.createTextNode( collapseCaption );
+
 
+
                        NavigationBoxes[ tableIndex ] = Tables[i];
            Button.style.styleFloat = "right";
+
                        Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
            Button.style.cssFloat = "right";
+
            Button.style.fontWeight = "normal";
+
                        var Button    = document.createElement( "span" );
            Button.style.textAlign = "right";
+
                        var ButtonLink = document.createElement( "a" );
            Button.style.width = "6em";
+
                        var ButtonText = document.createTextNode( collapseCaption );
 
+
            ButtonLink.style.color = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0].style.color;
+
                        Button.style.styleFloat = "right";
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
+
                        Button.style.cssFloat = "right";
            ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
+
                        Button.style.fontWeight = "normal";
            ButtonLink.appendChild( ButtonText );
+
                        Button.style.textAlign = "right";
 
+
                        Button.style.width = "6em";
            Button.appendChild( document.createTextNode( "[" ) );
+
            Button.appendChild( ButtonLink );
+
                        ButtonLink.style.color = Header.style.color;
            Button.appendChild( document.createTextNode( "]" ) );
+
                        ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
 
+
                        ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
            var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
+
                        ButtonLink.appendChild( ButtonText );
            /* only add button and increment count if there is a header row to work with */
+
            if (Header) {
+
                        Button.appendChild( document.createTextNode( "[" ) );
                Header.insertBefore( Button, Header.childNodes[0] );
+
                        Button.appendChild( ButtonLink );
                tableIndex++;
+
                        Button.appendChild( document.createTextNode( "]" ) );
            }
+
 +
                        Header.insertBefore( Button, Header.childNodes[0] );
 +
                        tableIndex++;
 +
                }
 
         }
 
         }
    }
+
 
+
        for ( var i = 0;  i < tableIndex; i++ ) {
    for ( var i = 0;  i < tableIndex; i++ ) {
+
                if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
+
                        collapseTable( i );
            collapseTable( i );
+
                }
 
         }
 
         }
    }
 
 
}
 
}
 
+
 
addOnloadHook( createCollapseButtons );
 
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 );
 +
 +
 +
/** 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);
 +
        };
 +
})();
  
 +
 +
/** Tooltips and access keys ***************************************************
 +
  *
 +
  *  Description: Adds tooltips and access keys to links part of the MediaWiki
 +
  *              interface.
 +
  *  Maintainers: [[User:Gwicke|Gwicke]]?, [[User:Simetrical|Simetrical]]?, [[User:Ruud Koot|Ruud Koot]]
 +
  */
 +
 +
ta = new Object();
 +
ta["n-mainpage"]            = new Array("z","Visit the main page");
 +
ta["n-Main-page"]          = new Array("z","Visit the main page");
 +
ta["n-Featured-content"]    = new Array("","Featured content — the best of Wikipedia");
 +
ta["n-help"]                = new Array("","The place to find out about Wikipedia");
 +
ta["n-contact"]            = new Array("","How to contact Wikipedia");
 +
ta["n-sitesupport"]        = new Array("","Help keep Wikipedia running");
 +
ta["t-print"]              = new Array("","Printable version of this page");
 +
ta["t-permalink"]          = new Array("","Permanent link to this version of the page");
 +
ta["t-cite"]                = new Array("","Cite this Wikipedia article");
 +
ta["ca-nstab-project"]      = new Array("c","View the project page");
 +
ta["n-Contents"]            = new Array("","Guides to browsing Wikipedia");
 +
ta["ca-hiderevision"]      = new Array("h","Hide this revision");
 +
 +
/** 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")
 +
{
 +
  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 );
 +
 
/** Dynamic Navigation Bars (experimental) *************************************
 
/** Dynamic Navigation Bars (experimental) *************************************
 
  *
 
  *
  *  Description: See Wikipedia:NavFrame.
+
  *  Description: See [[Wikipedia:NavFrame]].
 
  *  Maintainers: UNMAINTAINED
 
  *  Maintainers: UNMAINTAINED
 
  */
 
  */
 
+
   
  // set up the words in your language
+
// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
+
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
+
var NavigationBarShow = '[' + expandCaption + ']';
 
+
// shows and hides content and picture (if available) of navigation bars
+
// shows and hides content and picture (if available) of navigation bars
// Parameters:
+
// Parameters:
//    indexNavigationBar: the index of navigation bar to be toggled
+
//    indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavigationBar)
+
function toggleNavigationBar(indexNavigationBar)
{
+
{
 
     var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
 
     var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
 
     var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 
     var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 
+
 
     if (!NavFrame || !NavToggle) {
 
     if (!NavFrame || !NavToggle) {
 
         return false;
 
         return false;
 
     }
 
     }
 
+
 
     // if shown now
 
     // if shown now
 
     if (NavToggle.firstChild.data == NavigationBarHide) {
 
     if (NavToggle.firstChild.data == NavigationBarHide) {
         for (
+
         for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
                var NavChild = NavFrame.firstChild;
+
                NavChild != null;
+
                NavChild = NavChild.nextSibling
+
            ) {
+
 
             if ( hasClass( NavChild, 'NavPic' ) ) {
 
             if ( hasClass( NavChild, 'NavPic' ) ) {
 
                 NavChild.style.display = 'none';
 
                 NavChild.style.display = 'none';
Line 243: Line 358:
 
         }
 
         }
 
     NavToggle.firstChild.data = NavigationBarShow;
 
     NavToggle.firstChild.data = NavigationBarShow;
 
+
 
     // if hidden now
 
     // if hidden now
 
     } else if (NavToggle.firstChild.data == NavigationBarShow) {
 
     } else if (NavToggle.firstChild.data == NavigationBarShow) {
         for (
+
         for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
                var NavChild = NavFrame.firstChild;
+
                NavChild != null;
+
                NavChild = NavChild.nextSibling
+
            ) {
+
 
             if (hasClass(NavChild, 'NavPic')) {
 
             if (hasClass(NavChild, 'NavPic')) {
 
                 NavChild.style.display = 'block';
 
                 NavChild.style.display = 'block';
Line 258: Line 369:
 
             }
 
             }
 
         }
 
         }
    NavToggle.firstChild.data = NavigationBarHide;
+
        NavToggle.firstChild.data = NavigationBarHide;
 
     }
 
     }
}
+
}
 
+
// adds show/hide-button to navigation bars
+
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
+
function createNavigationBarToggleButton()
{
+
{
 
     var indexNavigationBar = 0;
 
     var indexNavigationBar = 0;
 
     // iterate over all < div >-elements  
 
     // iterate over all < div >-elements  
 
     var divs = document.getElementsByTagName("div");
 
     var divs = document.getElementsByTagName("div");
     for(
+
     for (var i = 0; NavFrame = divs[i]; i++) {
            var i=0;  
+
            NavFrame = divs[i];  
+
            i++
+
        ) {
+
 
         // if found a navigation bar
 
         // if found a navigation bar
 
         if (hasClass(NavFrame, "NavFrame")) {
 
         if (hasClass(NavFrame, "NavFrame")) {
 
+
 
             indexNavigationBar++;
 
             indexNavigationBar++;
 
             var NavToggle = document.createElement("a");
 
             var NavToggle = document.createElement("a");
Line 281: Line 388:
 
             NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
 
             NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
 
             NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 
             NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 
+
 
             var NavToggleText = document.createTextNode(NavigationBarHide);
 
             var NavToggleText = document.createTextNode(NavigationBarHide);
             for (
+
             for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
                var NavChild = NavFrame.firstChild;
+
                NavChild != null;
+
                NavChild = NavChild.nextSibling
+
                ) {
+
 
                 if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 
                 if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 
                     if (NavChild.style.display == 'none') {
 
                     if (NavChild.style.display == 'none') {
Line 295: Line 398:
 
                 }
 
                 }
 
             }
 
             }
 
+
 
             NavToggle.appendChild(NavToggleText);
 
             NavToggle.appendChild(NavToggleText);
 
             // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
 
             // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
             for(
+
             for(var j=0; j < NavFrame.childNodes.length; j++) {
              var j=0;  
+
                if (hasClass(NavFrame.childNodes[j], "NavHead")) {
              j < NavFrame.childNodes.length;  
+
                    NavFrame.childNodes[j].appendChild(NavToggle);
              j++
+
                }
            ) {
+
              if (hasClass(NavFrame.childNodes[j], "NavHead")) {
+
                NavFrame.childNodes[j].appendChild(NavToggle);
+
              }
+
 
             }
 
             }
 
             NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
 
             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() {
+
addOnloadHook( createNavigationBarToggleButton );
    try {
+
        var node = document.getElementById( "p-lang" )
+
/** Main Page layout fixes *********************************************************
                          .getElementsByTagName('div')[0]
+
  *
                          .getElementsByTagName('ul')[0];
+
  *  Description:        Various layout fixes for the main page, including an
 
+
  *                      additional link to the complete list of languages available
        var aNode = document.createElement( 'a' );
+
  *                      and the renaming of the 'Article' to to 'Main Page'.
        var liNode = document.createElement( 'li' );
+
  *  Maintainers:        [[User:AzaToth]], [[User:R. Koot]]
 
+
  */
        aNode.appendChild( document.createTextNode( 'Complete list' ) );
+
        aNode.setAttribute( 'href' , 'http://meta.wikimedia.org/wiki/List_of_Wikipedias' );
+
function mainPageRenameNamespaceTab() {
        liNode.appendChild( aNode );
+
    try {
        liNode.className = 'interwiki-completelist';
+
        var Node = document.getElementById( 'ca-nstab-main' ).firstChild;
        node.appendChild( liNode );
+
        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) {
 
     } catch(e) {
      // lets just ignore what's happened
+
        // bailing out!
      return;
+
    }
    }
+
}
}
+
 
+
function mainPageAppendCompleteListLink() {
if ( wgTitle == 'Main Page' && ( wgNamespaceNumber == 0 || wgNamespaceNumber == 1 ) ) {
+
    try {
      addOnloadHook( mainPageRenameNamespaceTab );
+
        var node = document.getElementById( "p-lang" )
}
+
                            .getElementsByTagName('div')[0]
 
+
                            .getElementsByTagName('ul')[0];
if ( wgTitle == 'Main Page' && wgNamespaceNumber == 0 ) {
+
      addOnloadHook( mainPageAppendCompleteListLink );
+
        var aNode = document.createElement( 'a' );
}
+
        var liNode = document.createElement( 'li' );
 
+
/** Extra toolbar options ******************************************************  
+
        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
 
   *  Description: UNDOCUMENTED
Line 447: Line 546:
 
  }
 
  }
 
   
 
   
  /**/
+
  /*</nowiki>*/
 
+
/** pageview counter ***********************************************************
+
/** 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: Please talk to de:User:LeonWeber before changing anything or
+
  * Description:
  *               if there are any issues with that.
+
  * Maintainers: User:Interiot, User:Mets501, User:Freakofnurture
Maintainers: de:User:LeonWeber?
+
 
  */
 
  */
 
+
  //
  // this should be adjusted to a good value.
+
  // For pages that have something like Template:Lowercase, replace the title, but only if it is cut-and-pasteable as a valid wikilink.
  // BE CAREFUL, you will break zedler if it's too low!
+
// (for instance iPod's title is updated. But [[C#]] is not an equivalent
  // And then DaB. will kill Leon :-(
+
  // wikilink, so [[C Sharp]] doesn't have its main title changed)
  var disable_counter = 0;
+
// Likewise for users who have selected the U.K. date format ("1 March") the 
  var counter_factor = 6000;
+
// titles of day-of-the-year articles will appear in that style. Users with any
 
+
// other date setting are not affected.
  function pgcounter_setup()
+
//
{
+
// The function looks for a banner like this:  
if(disable_counter == 0)
+
  // &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 url = window.location.href;
+
//
if(Math.floor(Math.random()*counter_factor)==42)  // the probability thing
+
  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)
  if(wgIsArticle==true || wgArticleId==0) // do not count history pages etc.
+
  addOnloadHook(function() {
{
+
    try {
var pgcountNs = wgCanonicalNamespace;
+
        var realTitleBanner = document.getElementById("RealTitleBanner");
if(wgCanonicalNamespace=="")
+
        if (realTitleBanner && !document.getElementById("DisableRealTitle") && !disableRealTitle ) {
{
+
            var realTitle = document.getElementById("RealTitle");
pgcountNs = "0";
+
            if (realTitle) {
}
+
                var realTitleHTML = realTitle.innerHTML;
  var cnt_url = "http://pgcount.wikimedia.de/index.png?ns=" + pgcountNs + "&title=" + encodeURI(wgTitle) + "&factor=" + counter_factor +"&wiki=enwiki";
+
                realTitleText = pickUpText(realTitle);
var img = new Image();  
+
img.src = cnt_url;
+
                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. */
 +
    }
 +
  });
 
  }
 
  }
  // Do not use aOnloadFunctions[aOnloadFunctions.length] = pgcounter_setup;, some browsers don't like that.
+
   
  pgcounter_setup();
+
  // similar to innerHTML, but only returns the text portions of the insides, excludes HTML
 
+
function pickUpText(aParentElement) {
/** "Technical restrictions" title fix *****************************************
+
var str = "";
*
+
* Description:
+
function pickUpTextInternal(aElement) {
* Maintainers: User:Interiot, User:Mets501, User:Freakofnurture
+
  var child = aElement.firstChild;
*/
+
  while (child) {
//
+
  if (child.nodeType == 1)    // ELEMENT_NODE  
// For pages that have something like Template:Lowercase, replace the title, but only if it is cut-and-pasteable as a valid wikilink.
+
    pickUpTextInternal(child);
// (for instance iPod's title is updated. But C# is not an equivalent
+
  else if (child.nodeType == 3)  // TEXT_NODE
// wikilink, so C Sharp doesn't have its main title changed)
+
    str += child.nodeValue;
// 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
+
  child = child.nextSibling;
// other date setting are not affected.
+
  }
//
+
}
// The function looks for a banner like this:
+
// <div id="RealTitleBanner">  ... <span id="RealTitle">title</span> ... </div>
+
  pickUpTextInternal(aParentElement);
// An element with id=DisableRealTitle disables the function.
+
  return str;
//
+
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;
+
 
  }
 
  }
}
+
   
 
+
  //fix edit summary prompt for undo
  pickUpTextInternal(aParentElement);
+
//this code fixes the fact that the undo function combined with the "no edit summary prompter" causes problems if leaving the
  return str;
+
//edit summary unchanged
}
+
//this was added by [[User:Deskana]], code by [[User:Tra]]
 
+
addOnloadHook(function () {
//fix edit summary prompt for undo
+
  if (document.location.search.indexOf("undo=") != -1
//this code fixes the fact that the undo function combined with the "no edit summary prompter" causes problems if leaving the
+
  && document.getElementsByName('wpAutoSummary')[0]) {
//edit summary unchanged
+
    document.getElementsByName('wpAutoSummary')[0].value='';
//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: 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" );
+
/** Add dismiss button to watchlist-message *************************************
  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 table sorting:
+
*  it allows sorting of numbers with more than one comma (thousands separator).
+
*  Maintainer: 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
+
   *  Description: Hide the watchlist message for one week.
  *              instead of showing the "page does not exist" text.
+
   *  Maintainers: [[User:Ruud Koot|Ruud Koot]]
   *  Created by: User:Mark, with invaluable help from User:Pathoschild
+
 
   */
 
   */
 
+
function MainPageDeletedImage() {
+
function addDismissButton() {
  try {
+
     var watchlistMessage = document.getElementById("watchlist-message");
 
+
    if ( watchlistMessage == null ) return;
     //If the article does not exist and it is the Main Page, proceed
+
    if ( document.getElementById( "noarticletext" ) && wgTitle == 'Main Page' ) {
+
    if ( document.cookie.indexOf( "hidewatchlistmessage=yes" ) != -1 ) {
 
+
        watchlistMessage.style.display = "none";
      // 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
+
    var Button    = document.createElement( "span" );
      return;
+
    var ButtonLink = document.createElement( "a" );
  }
+
    var ButtonText = document.createTextNode( "dismiss" );
}
+
 
+
    ButtonLink.setAttribute( "id", "dismissButton" );
addOnloadHook( MainPageDeletedImage );
+
    ButtonLink.setAttribute( "href", "javascript:dismissWatchlistMessage();" );
 
+
    ButtonLink.setAttribute( "title", "Hide this message for one week" );
/** Change Special:Search to use a drop-down menu *******************************************************
+
    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: Change Special:Search to use a drop-down menu, with the default being
+
   *  Description: Fixes a bug (part of [[bugzilla:8115]])
   *               the internal MediaWiki engine
+
   * in http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js
   *  Created and maintained by: User:Gracenotes
+
  *  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 (wgPageName == "Special:Search") {
+
if (!num) return 0;
        var searchEngines = [];
+
num = parseFloat(num.replace(/,/g, ""));
        addOnloadHook(SpecialSearchEnhanced);
+
return (isNaN(num) ? 0 : num);
}
+
}
 
+
function SpecialSearchEnhanced() {
+
/** Main Page deletion image *******************************************************
        var createOption = function(site, action, mainQ, addQ, addV) {
+
  *
                var opt = document.createElement('option');
+
  *  Description: If the Main Page does not exist (i.e., it's been deleted) then insert an image
                opt.appendChild(document.createTextNode(site));
+
  *              instead of showing the "page does not exist" text.
                searchEngines[searchEngines.length] = [action, mainQ, addQ, addV];
+
  *  Created by: [[User:Mark]], with invaluable help from [[User:Pathoschild]]
                return opt;
+
  */
        }
+
        var searchForm = document.forms['search'];
+
function MainPageDeletedImage() {
        var selectBox = document.createElement('select');
+
  try {
        selectBox.id = 'searchEngine';
+
        searchForm.onsubmit = function() {
+
    //If the article does not exist and it is the Main Page, proceed
                var optSelected = searchEngines[document.getElementById('searchEngine').selectedIndex];
+
    if ( document.getElementById( "noarticletext" ) && wgTitle == 'Main Page' ) {
                searchForm.action = optSelected[0];
+
                searchForm.lsearchbox.name = optSelected[1];
+
      // Insert a protected commons image at the end of the document explaining it.
                searchForm.title.value = optSelected[3];
+
      var contentbox = document.getElementById('content');
                searchForm.title.name = optSelected[2];
+
      var newimg = document.createElement('img');
        }
+
      newimg.setAttribute('src','http://upload.wikimedia.org/wikipedia/commons/9/99/WikipediaTechnical.png');
        selectBox.appendChild(createOption('MediaWiki search', wgScriptPath + '/index.php', 'search', 'title', 'Special:Search'));
+
      contentbox.appendChild(newimg);
        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'));
+
      // Hide the article-does-not-exist text
        selectBox.appendChild(createOption('Windows Live', 'http://search.live.com/results.aspx', 'q', 'q1', 'site:http://en.wikipedia.org'));
+
      var NoArticleMessage = document.getElementById('noarticletext');
        selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'lang', 'en'));
+
      NoArticleMessage.style.display="none";
        selectBox.appendChild(createOption('Exalead', 'http://www.exalead.com/wikipedia/results', 'q', 'language', 'en'));
+
        searchForm.lsearchbox.style.marginLeft = '0px';
+
      // Hide the edit button
        var lStat = document.getElementById('loadStatus');
+
      var EditThisPageButton = document.getElementById('ca-edit');
        lStat.parentNode.insertBefore(selectBox, lStat);
+
      EditThisPageButton.style.display="none";
}
+
    }
 
+
  } catch(e) {
/** Geo-targeted watchlist notice *******************************************************
+
      // In case it does not work, do nothing
  *
+
      return;
  *  Description: Allows for geographic targeting of watchlist notices. See Wikipedia:Geonotice for more information.
+
  }
  *  Created by: User:Gmaxwell
+
}
  */
+
 
+
addOnloadHook( MainPageDeletedImage );
if (wgPageName == "Special:Watchlist")
+
    addOnloadHook((function (){document.write('<script type="text/javascript" src="http://tools.wikimedia.de/~gmaxwell/cgi-bin/geonotice.py"><\/script>')}));
+
/** Change Special:Search to use a drop-down menu *******************************************************
 
+
  *
/** Sysop Javascript *******************************************************
+
  *  Description: Change Special:Search to use a drop-down menu, with the default being
  *
+
  *              the internal MediaWiki engine
  *  Description: Allows for sysop-specific Javascript at MediaWiki:Sysop.js.
+
  *  Created and maintained by: [[User:Gracenotes]]
  *  Created by: User:^demon
+
  */
  */
+
if ( wgUserGroups && !window.disableSysopJS ) {
+
if (wgPageName == "Special:Search") {
  for ( var g in wgUserGroups ) {
+
        var searchEngines = [];
    if ( wgUserGroups[g] == "sysop" )
+
        addOnloadHook(SpecialSearchEnhanced);
      importScript( "MediaWiki:Sysop.js" );
+
}
  }
+
}
+
function SpecialSearchEnhanced() {
 
+
        var createOption = function(site, action, mainQ, addQ, addV) {
/** WikiMiniAtlas *******************************************************
+
                var opt = document.createElement('option');
  *
+
                opt.appendChild(document.createTextNode(site));
  *  Description: WikiMiniAtlas is a popup click and drag world map.
+
                searchEngines[searchEngines.length] = [action, mainQ, addQ, addV];
  *              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
+
                return opt;
  *              The script itself is located on meta because it is used by many projects.
+
        }
  *              See Meta:WikiMiniAtlas for more information.  
+
        var searchForm = document.forms['search'];
  *  Created by: User:Dschwen
+
        var selectBox = document.createElement('select');
  */
+
        selectBox.id = 'searchEngine';
 
+
        searchForm.onsubmit = function() {
document.write('<script type="text/javascript" src="'  
+
                var optSelected = searchEngines[document.getElementById('searchEngine').selectedIndex];
    + 'http://meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js'  
+
                searchForm.action = optSelected[0];
    + '&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400"></script>');
+
                searchForm.lsearchbox.name = optSelected[1];
 
+
                searchForm.title.value = optSelected[3];
/** IE 6 Z-index bug workaround for anonnotice **************************
+
                searchForm.title.name = optSelected[2];
  *
+
        }
  * Description: This implements a work around for the Z-index bug found in Internet Explorer.
+
        selectBox.appendChild(createOption('MediaWiki search', wgScriptPath + '/index.php', 'search', 'title', 'Special:Search'));
  *              It correctly places the anon notice on the page, even under IE6.
+
        selectBox.appendChild(createOption('Google', 'http://www.google.com/search', 'q', 'sitesearch', 'en.wikipedia.org'));
  *              See this Google search for more information about the bug:
+
        selectBox.appendChild(createOption('Yahoo', 'http://search.yahoo.com/search', 'p', 'vs', 'en.wikipedia.org'));
  *              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
+
        selectBox.appendChild(createOption('Windows Live', 'http://search.live.com/results.aspx', 'q', 'q1', 'site:http://en.wikipedia.org'));
  *  Created by: User:Gmaxwell
+
        selectBox.appendChild(createOption('Wikiwix', 'http://www.wikiwix.com/', 'action', 'lang', 'en'));
  */
+
        selectBox.appendChild(createOption('Exalead', 'http://www.exalead.com/wikipedia/results', 'q', 'language', 'en'));
addOnloadHook((function (){
+
        searchForm.lsearchbox.style.marginLeft = '0px';
    if (wgUserName == null) {
+
        var lStat = document.getElementById('loadStatus');
        var message=new Array();
+
        lStat.parentNode.insertBefore(selectBox, lStat);
          message[0]='Your <a href="http://wikimediafoundation.org/wiki/Fundraising?source=enwiki_00" class="extiw" title="wikimedia:Fundraising">continued donations</a> keep Wikipedia running!';
+
}
          message[1]='<a href="http://wikimediafoundation.org/wiki/Fundraising?source=enwiki_01" class="extiw" title="foundation:Fundraising">Make a donation</a> to Wikipedia and give the gift of knowledge!';
+
          message[2]='Wikipedia is sustained by people like you. Please <a href="http://wikimediafoundation.org/wiki/Fundraising?source=enwiki_02" class="extiw" title="foundation:fundraising">donate</a> today.';
+
/** Geo-targeted watchlist notice *******************************************************
          message[3]='Help us improve Wikipedia by <a href="http://wikimediafoundation.org/wiki/Fundraising?source=enwiki_03" class="extiw" title="foundation:Fundraising">supporting it financially</a>.';
+
  *
          message[4]='You can <a href="http://wikimediafoundation.org/wiki/Fundraising?source=enwiki_04" class="extiw" title="wikimedia:Fundraising">support Wikipedia</a> by making a <a href="http://wikimediafoundation.org/wiki/Deductibility_of_donations" class="extiw" title="wikimedia:Deductibility_of_donations">tax-deductible</a> donation.'
+
  *  Description: Allows for geographic targeting of watchlist notices. See [[Wikipedia:Geonotice]] for more information.
          message[5]='Help us provide free content to the world by <a href="http://wikimediafoundation.org/wiki/Fundraising?source=enwiki_05" class="extiw" title="foundation:Fundraising">donating today</a>!';
+
  *  Created by: [[User:Gmaxwell]]
        var whichMessage = Math.floor(Math.random()*(message.length));
+
  */
 
+
 
+
if (wgPageName == "Special:Watchlist")
document.writeln('
+
    addOnloadHook((function (){document.write('<script type="text/javascript" src="http://tools.wikimedia.de/~gmaxwell/cgi-bin/geonotice.py"><\/script>')}));
' + message[whichMessage] + '
+
');
+
/** Sysop Javascript *******************************************************
 
+
  *
        var messageEdu=new Array();
+
  *  Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]].
          messageEdu[0]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Researching_with_Wikipedia" title="Wikipedia:Researching with Wikipedia">Learn more about using Wikipedia for research</a>';
+
  *  Created by: [[User:^demon]]
          messageEdu[1]='<a href="http://en.wikipedia.org/wiki/Wikipedia:10_things_you_did_not_know_about_Wikipedia" title="Wikipedia:10 things you did not know about Wikipedia">Ten things you didn\'t know about Wikipedia</a>';
+
  */
          messageEdu[2]='<a href="http://en.wikipedia.org/wiki/Wikipedia:10_things_you_did_not_know_about_images_on_Wikipedia" title="Wikipedia:10 things you did not know about images on Wikipedia">Ten things you didn\'t know about images on Wikipedia</a>';
+
if ( wgUserGroups && !window.disableSysopJS ) {
          messageEdu[3]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Citing_Wikipedia" title="Wikipedia:Citing Wikipedia">Learn more about citing Wikipedia</a>';
+
  for ( var g in wgUserGroups ) {
          messageEdu[4]='Have questions? <a href="http://en.wikipedia.org/wiki/Wikipedia:Questions" title="Wikipedia:Questions">Find out how to ask questions and get answers.</a>';
+
    if ( wgUserGroups[g] == "sysop" )
          messageEdu[5]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Basic_navigation" title="Wikipedia:Basic navigation">Find out more about navigating Wikipedia and finding information</a>';
+
      importScript( "MediaWiki:Sysop.js" );
          messageEdu[6]='<a href="http://en.wikipedia.org/wiki/Wikipedia:Contributing_to_Wikipedia" title="Wikipedia:Contributing to Wikipedia">Interested in contributing to Wikipedia?</a>';
+
  }
        var whichMessageEdu = Math.floor(Math.random()*(messageEdu.length));
+
}
 
+
 
+
/** WikiMiniAtlas *******************************************************
document.getElementById("contentSub").innerHTML +='
+
  *
• ' + messageEdu[whichMessageEdu] + ' •
+
  *  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>');
 +
   
 
/*
 
/*
 
+
Correctly handle PNG transparency in Win IE 5.5 & 6. http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.
+
Correctly handle PNG transparency in Win IE 5.5 & 6.
 
+
http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.
Tweaked 11 Sep 2007 (UTC) by Remember_the_dot so that it works properly inside Common.js
+
 
+
Adapted for Wikipedia by Remember_the_dot
 +
 
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.
 
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() {
+
function PngFix()
 
+
{
  if (document.body.filters)
+
  if (document.body.filters)
  {
+
      for(var i = 0; i < document.images.length; i++)
+
      {
+
        var img = document.images[i]
+
        var imgName = img.src.toUpperCase()
+
        if (imgName.substring(imgName.length - 3, imgName.length) == "PNG")
+
        {
+
            var imgID = (img.id) ? "id=\"" + img.id + "\" " : ""
+
            var imgClass = (img.className) ? "class=\"" + img.className + "\" " : ""
+
            var imgTitle = (img.title) ? "title=\"" + img.title + "\" " : ""
+
            var imgStyle = "display:inline-block; font-size:0; vertical-align:middle;" + img.style.cssText
+
            if (img.align == "left") imgStyle = "float:left;" + imgStyle
+
            if (img.align == "right") imgStyle = "float:right;" + imgStyle
+
            if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
+
            var strNewHTML = ""
+
            img.outerHTML = strNewHTML
+
            i--
+
        }
+
      }
+
  }
+
 
+
}
+
 
+
if (navigator.appName == "Microsoft Internet Explorer") {
+
 
+
  var version = parseFloat(navigator.appVersion.split("MSIE")[1])
+
  if (version <= 6 && version >= 5.5)
+
 
   {
 
   {
       window.addOnloadHook(PngFix)
+
       var documentImages = document.images
 +
      for (var i = 0; i < documentImages.length;)
 +
      {
 +
          var img = documentImages[i]
 +
          var imgSrc = img.src
 +
          if (imgSrc.substr(imgSrc.length - 3).toLowerCase() == "png" && !img.useMap)
 +
          {
 +
            var imgID = (img.id) ? "id=\"" + img.id + "\" " : ""
 +
            var imgClass = (img.className) ? "class=\"" + img.className + "\" " : ""
 +
            var imgTitle = (img.title) ? "title=\"" + img.title + "\" " : ""
 +
            var imgStyle = "display:inline-block; font-size:0; vertical-align:middle;" + img.style.cssText
 +
            if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
 +
            img.outerHTML = "<span " + imgID + imgClass + imgTitle + " style=\"" + imgStyle + "\"><span style=\"width:" + img.width + "px; height:" + img.height + "px; display:inline-block; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + encodeURI(imgSrc) + "');\"></span></span>"
 +
          }
 +
          else
 +
          {
 +
            i++
 +
          }
 +
      }
 
   }
 
   }
 
 
}
 
}
</nowiki></pre>
+
 +
if (navigator.appName == "Microsoft Internet Explorer")
 +
{
 +
    var version = navigator.appVersion.substr(22, 3)
 +
    if (version == "6.0" || version == "5.5")
 +
    {
 +
        window.attachEvent("onload", PngFix)
 +
    }
 +
}

Latest revision as of 00:15, 23 March 2015

/** 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 );
 
 
/** 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);
        };
})();


 /** Tooltips and access keys ***************************************************
  *
  *  Description: Adds tooltips and access keys to links part of the MediaWiki
  *               interface.
  *  Maintainers: [[User:Gwicke|Gwicke]]?, [[User:Simetrical|Simetrical]]?, [[User:Ruud Koot|Ruud Koot]]
  */
 
 ta = new Object();
 ta["n-mainpage"]            = new Array("z","Visit the main page"); 
 ta["n-Main-page"]           = new Array("z","Visit the main page"); 
 ta["n-Featured-content"]    = new Array("","Featured content — the best of Wikipedia"); 
 ta["n-help"]                = new Array("","The place to find out about Wikipedia"); 
 ta["n-contact"]             = new Array("","How to contact Wikipedia");
 ta["n-sitesupport"]         = new Array("","Help keep Wikipedia running"); 
 ta["t-print"]               = new Array("","Printable version of this page");
 ta["t-permalink"]           = new Array("","Permanent link to this version of the page");
 ta["t-cite"]                = new Array("","Cite this Wikipedia article");
 ta["ca-nstab-project"]      = new Array("c","View the project page");
 ta["n-Contents"]            = new Array("","Guides to browsing Wikipedia"); 
 ta["ca-hiderevision"]       = new Array("h","Hide this revision");
 
 /** 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")
 {
   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 );
 
/** 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]]
   */
 if ( wgUserGroups && !window.disableSysopJS ) {
   for ( var g in wgUserGroups ) {
     if ( wgUserGroups[g] == "sysop" )
       importScript( "MediaWiki:Sysop.js" );
   }
 }
 
 /** 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>');
 
/*
 
Correctly handle PNG transparency in Win IE 5.5 & 6.
http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.
 
Adapted for Wikipedia by Remember_the_dot
 
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)
   {
       var documentImages = document.images
       for (var i = 0; i < documentImages.length;)
       {
          var img = documentImages[i]
          var imgSrc = img.src
          if (imgSrc.substr(imgSrc.length - 3).toLowerCase() == "png" && !img.useMap)
          {
             var imgID = (img.id) ? "id=\"" + img.id + "\" " : ""
             var imgClass = (img.className) ? "class=\"" + img.className + "\" " : ""
             var imgTitle = (img.title) ? "title=\"" + img.title + "\" " : ""
             var imgStyle = "display:inline-block; font-size:0; vertical-align:middle;" + img.style.cssText
             if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
             img.outerHTML = "<span " + imgID + imgClass + imgTitle + " style=\"" + imgStyle + "\"><span style=\"width:" + img.width + "px; height:" + img.height + "px; display:inline-block; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + encodeURI(imgSrc) + "');\"></span></span>"
          }
          else
          {
             i++
          }
       }
   }
}
 
if (navigator.appName == "Microsoft Internet Explorer")
{
    var version = navigator.appVersion.substr(22, 3)
    if (version == "6.0" || version == "5.5")
    {
        window.attachEvent("onload", PngFix)
    }
}