Nòta: Aprèp aver enregistrat vòstras modificacions, es possible que vos calga forçar lo recargament complet de l'escondedor de vòstre navigador per veire los cambiaments:

  • Firefox / Safari: mantenètz la tòca Maj (Shift) en clicant lo boton Actualizar o quichatz sus Ctrl-F5 o Ctrl-R (⌘-R sus un Mac)
  • Google Chrome: Quichatz sus Ctrl-Shift-R (⌘-Shift-R sus un Mac)
  • Internet Explorer / Edge: Mantenètz la tòca Ctrl en clicant sul boton Actualizar, o quichatz Ctrl-F5
  • Opera: anatz dins Menú → Settings (Opera → Preferéncias sus un Mac) e puèi a Confidencialitat & seguretat → Escafar las donadas d’exploracion → Imatges e fichièrs en cache.
/**************************************/
/* Fonctions de traitement de chaînes */
/**************************************/
 
// (Aa : A==a)
 
function equalsAa(str1, str2)
{return str1.toUpperCase()==str2.toUpperCase();}
 
function startsWithAa(string, prefix)
{return equalsAa(string.substring(0,prefix.length),prefix);}
 
function substractPrefixAa(string, prefix)
{return startsWithAa(string, prefix)?string.substring(prefix.length):string;}

// Teste si la page fait partie d'un livre donné
// Ne pas oublier d'ajouter le séparateur utilisé à la fin de title
// (en général / , : ou (espace))
function inBook(title)
{
if (mw.config.get('wgTitle')==title.substring(0,title.length-1)) return true;
return mw.config.get('wgTitle').substr(0,title.length)==title;
}


// Teste le groupe de l'utilisateur
function usergroup(groupname)
{
    if (!mw.config.get('wgUserGroups')) return false;
    for(var i in mw.config.get('wgUserGroups'))
        if (mw.config.get('wgUserGroups')[i]==groupname) return true;
    return false;
}

var _devdebug=null;
function devdebug(msg)
{
    if (_devdebug) _devdebug(msg);
}

/* Écriture cookie : expire après 1 année */
function SetVar(name,value)
{
    var expires=new Date();
    expires.setFullYear(expires.getFullYear()+1);
    document.cookie=name+"="+escape(value)+
        ";expires="+expires.toGMTString()+";path=/";
}

/* Lecture cookie, valeur par défaut : paramètre defvalue */ 
function GetVar(name,defvalue)
{
    var s=";"+document.cookie.replace(/ /g,"")+";";
    var i=s.indexOf(";"+name+"=");
    if (i<0) return defvalue;
    i+=name.length+2;
    return unescape(s.substring(i,s.indexOf(";",i)));
}

/*</source>

===Présentation des titres de livres===

<source lang="javascript">*/

var slash_exceptions = [ // de completar ... O puslèu testar l'existéncia de la sospagina intermediària ?
    [ /\s$/ , /^/ ] ,
    [ /$/ , /^\s/ ] ,
    [ /\bTCP$/i , /^IP\b/i ] ,
    [ /\bUDP$/i , /^IP\b/i ] ,
    [ /\bPL$/i , /^SQL\b/i ] ,
    [ /\bI$/i , /^O\b/i ] ,
    [ /\bE$/i , /^S\b/i ] ,
    [ /\be$/i , /^o\b/i ] ,
    [ /\bo$/i , /^e\b/i ] ,
    [ /\bentrada$/i , /^sortida\b/i ] ,
    [ /\bentradas$/i , /^sortidas\b/i ] ,
    [ /\bsortida$/i , /^entrada\b/i ] ,
    [ /\bsortidas$/i , /^entradas\b/i ] ,
    [ /\bGNU$/i , /^Linux\b/i ] ];

function findSlashException(word)
{
    for(var i=0;i<slash_exceptions.length;i++)
        if (word.match(slash_exceptions[i][0])) return i;
    return -1;
}

function slashExceptionCollapse(words, titlewords)
{
    var new_words=[];
    var new_titles=[];
    new_words.push(words[0]);
    new_titles.push(titlewords[0]);
    var k=0;
    for(var j=1;j<words.length;j++)
    {
        var index = findSlashException(new_words[k]);
        if ((index>=0)&&(words[j].match(slash_exceptions[index][1])))
        {
            new_words[k] += "/"+words[j];
            new_titles[k] += "/"+titlewords[j];
        }
        else { new_words.push(words[j]); new_titles.push(titlewords[j]); k++; }
    }
    return [new_words, new_titles];
}

function newlink(text, urlwiki)
{
    var l=document.createElement("a");
    l.setAttribute("href", "/wiki/"+urlwiki);
    l.setAttribute("title", urlwiki);
    l.appendChild( document.createTextNode( text ) );
    return l;
}

// Modifie la présentation du titre de la page
function setuptitle()
{
    hh = document.getElementsByTagName("h1");
    for(var el=0;el<hh.length;el++)
    {
        var n = hh.item(el);
        var a = n.attributes.getNamedItem("class");
        if ( a&& (a.nodeValue=="firstHeading"))
        {
            var tn=n.childNodes[0];
            if (tn.nodeType==3)
            {
                var dtitlew = n.removeChild(tn).nodeValue.split(/\//g), ttitlew;
                if (mw.config.get('wgPageName')) ttitlew=mw.config.get('wgPageName').split(/\//g);
                else ttitlew = dtitlew;
                var tt=slashExceptionCollapse( dtitlew, ttitlew );
                var p="";
                var tindex = tt[0].length-1;
                for ( var i=0 ; i<tindex ; i++)
                {
                    p+=tt[1][i];
                    n.appendChild( newlink( tt[0][i], p ) );
                    p+="/";
                    n.appendChild( document.createElement("br") );
                }
                n.appendChild( document.createTextNode( tt[0][tindex] ) );
                return;
            }
        }
    }
}

function useSetupTitle(){
 $(setuptitle);
}


/*</source>

===Boites déroulantes===

<source lang="javascript">*/


// BEGIN Dynamic Navigation Bars (experimantal)

// set up the words in your language
var NavigationBarHide = '[ Enrotlar ]';
var NavigationBarShow = '[ Desenrotlar ]';

// set up max count of Navigation Bars on page,
// if there are more, all will be hidden
// NavigationBarShowDefault = 0; // all bars will be hidden
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
var NavigationBarShowDefault = 0;

function getAttr(node,name,defvalue)
{
    if (!node.attributes) return defvalue;
    var v=node.attributes.getNamedItem(name);
    return (v&&v.nodeValue.length)?v.nodeValue:defvalue;
}

// 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;

    var ShowHideText = getAttr(NavFrame,"lang","@").split('@');
    var ShowText = ShowHideText[0];
    var HideText = ShowHideText[1];
    if (ShowText.length==0) ShowText=NavigationBarShow;
    if (HideText.length==0) HideText=NavigationBarHide;
    if (ShowText == HideText) return false;

    // if shown now
    if (NavToggle.firstChild.data == HideText)
    {
        for ( var NavChild = NavFrame.firstChild;
              NavChild != null;
              NavChild = NavChild.nextSibling )
            if ( whichClass(NavChild,['NavPic','NavContent'])>=0 )
                NavChild.style.display = 'none';
        NavToggle.firstChild.data = ShowText;
    }
    // if hidden now
    else if (NavToggle.firstChild.data == ShowText)
    {
        for ( var NavChild = NavFrame.firstChild;
              NavChild != null;
              NavChild = NavChild.nextSibling )
            if ( whichClass(NavChild,['NavPic','NavContent'])>=0 )
                NavChild.style.display = 'block';
        NavToggle.firstChild.data = HideText;
    }
}

// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
{
   var indexNavigationBar = 0;
   // iterate over all < div >-elements
   for(var i=0; NavFrame = document.getElementsByTagName("div")[i]; i++)
   {
       // if found a navigation bar
       if ($(NavFrame).hasClass("NavFrame"))
       {
           indexNavigationBar++;
           var NavToggle = document.createElement("a");
           NavToggle.className = 'NavToggle';
           NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
           NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

           var HideText = getAttr(NavFrame,"lang","@").split('@')[1];
           if (HideText.length==0) HideText=NavigationBarHide;
           var NavToggleText = document.createTextNode(HideText);
           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 ($(NavFrame.childNodes[j]).hasClass("NavHead"))
                  NavFrame.childNodes[j].appendChild(NavToggle);
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
    // if more Navigation Bars found than Default: hide all
    if (NavigationBarShowDefault < indexNavigationBar)
        for(var i=1; i<=indexNavigationBar; i++)
           toggleNavigationBar(i);
}
 
$(createNavigationBarToggleButton);
 
// END Dynamic Navigation Bars


/*</source>

=== Fonctions de remplissage automatique ===

<source lang="javascript">*/

function InitPaS(page_name)
{
    return
        "<!-- Salvagardatz la pagina per l'inicializar puèi seguissetz las instruccions -->\n" +
        '{{subst:' + 'Inicializar PdeS|' + page_name +
        '|~~~~|jorn={{subst:CURRENTDAY}}|mes={{subst:CURRENTMONTH}}}}'
        "\n<!-- N'oubliez pas d'ajouter le lien vers cette page dans la page principale des Pages à supprimer -->" ;
}

function InitLdO(page_name)
{
    return
       "Aquò es lo libre d'aur del libre " + "[[{{subst:SUBPAGENAME}}]].\n" +
       "Esitetz pas a [{{SERVER}}{{subst:localurl:Wikilibres:Libre_d%27aur/" +
       "{{subst:SUBPAGENAMEE}}|action=edit&section=new}} Daissar un comentari].\n\n\n" +
       "[[Categoria:Libres d'aur]]\n" +
       "[[Categoria:" + "{{subst:SUBPAGENAME}}" + " (libre)]]";
}

var init_if_empty = [
    [ 'Wikilibres:Paginas_de_suprimir/', InitPaS ],
    [ 'Wikilibres:Libre_d\'aur/', InitLdO ]
];

/**
 * Remplit la zone d'édition si elle est vide avec le texte retourné par
 * un pointeur de fonction sélectionné par le nom de la page.
 */
function InitPage()
{
    if ((!document.editform) || (!document.editform.wpTextbox1)) return;
    var text_area = document.editform.wpTextbox1;
    if (text_area.value.length > 0) return;
    for (var i in init_if_empty)
    {
        var initializer = init_if_empty[i];
        if (mw.config.get('wgPageName').indexOf(initializer[0]) == 0)
        {
            var k = mw.config.get('wgPageName').indexOf('/');
	    text_area.value = initializer[1](mw.config.get('wgPageName').slice(k+1));
            break;
        }
    }
}

$(InitPage);


/*</source>

=== Caractères spéciaux ===

<source lang="javascript">*/


/**
 * Ajoutez le menu pour choisir des sous-ensembles de caractères spéciaux
 * @note      L'ordre de cette liste doit correspondre a celui de MediaWiki:Edittools !
 */
function addCharSubsetMenu() {
  var specialchars = document.getElementById('specialchars');

  if (specialchars) {
    specialchars.innerHTML =
        "<select style=\"display:inline\" onChange=\"chooseCharSubset(selectedIndex)\">" +
        "<option>Wiki</option>" +
        "<option>Matematicas</option>" +
        "<option>API</option>" +
        "</select>" + specialchars.innerHTML;

    /* default subset - try to use a cookie some day */
    chooseCharSubset(0);
  }
}

/* select subsection of special characters */
function chooseCharSubset(s) {
  var l = document.getElementById('specialchars').getElementsByTagName('p');
  for (var i = 0; i < l.length ; i++) {
    l[i].style.display = i == s ? 'inline' : 'none';
    l[i].style.visibility = i == s ? 'visible' : 'hidden';
  }
}

$(addCharSubsetMenu);


/*</source>

=== Choix de l'affichage des références ===

<source lang="javascript">*/

/**
 * Choix du mode d'affichage des références.
 * @note	L'ordre de cette liste doit correspondre a celui de Modèle:Édition !
 */
function addBibSubsetMenu() 
{
  var specialBib = document.getElementById('specialBib');

  if (specialBib) 
  {
    specialBib.style.display = 'block';
    specialBib.innerHTML = specialBib.innerHTML +
        "<select style=\"display:inline;\" onChange=\"chooseBibSubset(selectedIndex)\">" +
        "<option>Lista</option>" +
        "<option>WikiNorme</option>" +
        "<option>BibTeX</option>" +
        "<option>ISBD</option>" +
        "<option>ISO690</option>" +
        "</select>";
  }
    /* default subset - try to use a cookie some day */
    chooseBibSubset(0);
}

/* select subsection of special characters */
function chooseBibSubset(s) 
{
  var l = document.getElementsByTagName('div');
  for (var i = 0; i < l.length ; i++) 
  {
         if(l[i].className == 'BibList')   l[i].style.display = s == 0 ? 'block' : 'none';
    else if(l[i].className == 'WikiNorme') l[i].style.display = s == 1 ? 'block' : 'none';
    else if(l[i].className == 'BibTeX')    l[i].style.display = s == 2 ? 'block' : 'none';
    else if(l[i].className == 'ISBD')      l[i].style.display = s == 3 ? 'block' : 'none';
    else if(l[i].className == 'ISO690')    l[i].style.display = s == 4 ? 'block' : 'none';
  }
}

$(addBibSubsetMenu);

/*</source>

=== Barre d'outil ===

<source lang="javascript">*/

//============================================================
// Générateur de tableaux
//============================================================

/**
 *
 * English: Generate an array using Mediawiki syntax
 *
 * @author: fr:user:dake, fr:user:DavidL
 * @version: 0.2
 */
 
function generateTableau(nbCol, nbRow, border, styleHeader, styleLine)
{
	var code = "\n{| " +
		((styleHeader==1) ? 'class="wikitable"' : '')+
		' border="' + border + '"\n|+ Títol del tablèu\n';

	var elements = "";
	for (var i=0;i<nbCol;i++)
	{
		code += '! entèsta ' + i + '\n';
		elements += '| element\n';
	}

	for (var j=0;j<nbRow;j++)
		code += ( (j%2==1 && styleLine==1)
			  ? '|-{'+'{linha grisa}'+'}\n'
			  : '|-----\n'
			) + elements ;

	code += '|}';
	insertTags('','', code); 
}

/**
 *
 * English: Open a popup with parameters to generate an array. 
 * The number of rows/columns can be modified. Some additional
 * parameters are related to templates available on :oc
 *
 * @author: fr:user:dake, fr:user:DavidL
 * @version: 0.2
 */
 
function popupTableau()
{
  var popup = window.open('','name','height=400,width=500');

  popup.document.write(
    '<html><head><title>Paramètres du tableau</title>' +
    '<script type="text\/javascript">function insertCode(){'+
    'window.opener.generateTableau('+
        'parseInt(document.paramForm.inputCol.value),'+
        'parseInt(document.paramForm.inputRow.value),'+
        'parseInt(document.paramForm.inputBorder.value),'+
        'document.paramForm.inputHeader.checked,'+
        'document.paramForm.inputLine.checked);'+
    '}<\/script>'+
    '</head><body>'+
    '<p>Veuillez entrer les paramètres du tableau : </p>'+
    '<form name="paramForm">'+
    'Nombre de linhas : <input type="text" name="inputRow" value="3" ><p>'+
    'Nombre de colomnas : <input type="text" name="inputCol" value="3" ><p>'+
    'Largeur de la bordadura : <input type="text" name="inputBorder" value="1" ><p>'+
    'Entèsta en gris (estil « carta grafica ») : <input type="checkbox" name="inputHeader" checked="1" ><p>'+
    'Linhas grisas alternadas (estil « carta grafica ») : <input type="checkbox" name="inputLine" checked="1" ><p>'+
    '</form">'+
    '<p><a href="javascript:insertCode()"> Inserir lo còde dins la fenèstra d\'edicion</a></p>'+
    '<p><a href="javascript:self.close()"> Tampar</a></p>'+
    '</body></html>');
  popup.document.close();
}

//============================================================
// Insertion de nouveaux boutons dans la barre d'outil
//============================================================

// Emplacements classiques des images :
url_wpcm='//upload.wikimedia.org/wikipedia/commons/';
url_wpfr='//upload.wikimedia.org/wikipedia/fr/';
url_wpen='//upload.wikimedia.org/wikipedia/en/';
url_wbfr='//upload.wikimedia.org/wikibooks/fr/';


function addCustomButton(){}
function addCustomButtonWpCm(){}
function addEmoticonsToolbar(){}
function addEmoticonsToolbarOnTalk(){}
function insertEmoticonsToolbar(){}
function insertEmoticonsToolbarOnTalk(){}

//Ressemble à la fonction de /w/skins/common/wikibits.js pour insérer un autre lien que insertTags
function marque_tab()
{
 var toolbar = document.getElementById('toolbar');
 if (!toolbar) return false;
 
 var textbox = document.getElementById('wpTextbox1');
 if (!textbox) return false;
 
 if (!document.selection && textbox.selectionStart == null)
 return false;
 
 var image = document.createElement("img");
 image.width = 23;
 image.height = 22;
 image.src = '//upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png';
 image.border = 0;
 image.alt = 'Tableau';
 image.title = 'Tableau';
 image.style.cursor = "pointer";
 image.onclick = function() {
   popupTableau();
   return false;
 }
 toolbar.appendChild(image);
}

$(marque_tab);


/*</source>

=== Noms de page non autorisés ===

<source lang="javascript">*/

var forbidden=[
    [ /(\/+)$/ , "" ] ,
    [ /(\/index.php)$/ ],
    [ /(Wikilivres\:Le_Bistro)$/, "Wikilivres:Le_Bistro" ]
    ];

function redirect(newTitle)
{
    if (!newTitle) newTitle="Accueil";
    document.location=mw.config.get('wgArticlePath').replace("$1",newTitle);
}

function nocreatepage(newTitle)
{
    if (mw.config.get('wgAction')=="edit") redirect(newTitle);
    var e = document.getElementById("_createpage");
    if (e) { e=e.parentNode; if (e) e.parentNode.removeChild(e); }
    e = document.getElementById("ca-edit");
    if (e) e.parentNode.removeChild(e);
    e = document.getElementById("ca-addsection");
    if (e) e.parentNode.removeChild(e);
    e = document.getElementById("ca-talk");
    if (e) e.parentNode.removeChild(e);
}

function forbid(re)
{
    var newTitle=(re.length>1)? mw.config.get('wgPageName').replace(re[0],re[1]):null;
    nocreatepage(newTitle);
}

function forbidpage()
{
    for(var i=0;i<forbidden.length;i++)
        if (mw.config.get('wgPageName').match(forbidden[i][0])) return forbid(forbidden[i]);
}

if (!usergroup("autoconfirmed"))
    $(forbidpage);



/*</source>

=== Divers ===

<source lang="javascript">*/


/**
 * Transformer les pages du Bistro en page de discussion
 */
function DiscussionBistro() 
{
  if( (mw.config.get('wgPageName').search("Wikilivres:Le Bistro")!=-1)
    )
    document.body.className = "ns-1";
}
     
$(DiscussionBistro);

/**
 * Transformer certaines pages en page de discussion avec le modèle {{page de discussion}}
 */
function TransformeEnDiscussion() 
{
   var transformeEnPDD = document.getElementById("transformeEnPageDeDiscussion");
   if(transformeEnPDD)
     document.body.className = "ns-1";
}

$(TransformeEnDiscussion);

/**
 * Ajout d'un style particulier aux liens interlangues vers des articles de qualités
 */
function LienAdQ() 
{
   var lang = document.getElementById("p-lang"); // find language link list
   if(lang)
   {
      var span = document.getElementsByTagName("span");
      for(i=0; i<span.length; i++) // iterate over all <span>-elements
      {
         // if found a AdQ span
         if(span[i].className == "AdQ") {
            var li = lang.getElementsByTagName("li");
            for(j=0; j<li.length; j++) {
               if(li[j].className == "interwiki-" + span[i].id) { // if found a AdQ link
                  li[j].style.padding = "0 0 0 16px";
                  li[j].style.backgroundImage = "url('//upload.wikimedia.org/wikipedia/fr/3/36/Icone_etoile.png')";
                  li[j].style.backgroundRepeat = "no-repeat";
                  li[j].title = "Lien vers un article de qualité";
               }
            }
         }
      }
   }
}

$(LienAdQ);

/*
 * VraiTitre : Ajout du titre réel d'un article pour lequel MediaWiki n'affiche pas correctement
 */

function VraiTitre() 
{
   var balise = document.getElementById("vrai_titre");
   if (!balise) return;
   vrai_titre = balise.childNodes[0].nodeValue;
   var titre = document.getElementsByTagName("H1")[0];
   rectificatif = titre.appendChild(document.createElement("span"));
   rectificatif.setAttribute ("style","color:#AAAAAA; font-size:0.7em; font-style:italic; display:inline;");
   rectificatif.appendChild(document.createTextNode(" ("+ vrai_titre +")"));
}
$(VraiTitre);

/****************************************/
function mwInsertEditButton(parent, item)
{
    var image = document.createElement("img");
    image.width = 23;
    image.height = 22;
    image.src = item.imageFile;
    image.border = 0;
    image.style.cursor = "pointer";
    var ref = document.createElement("a");
    var href;
    if (item.jscode != null) href="javascript:"+item.jscode+";";
    else href="javascript:insertTags(\"" + item.tagOpen + "\",\"" + item.tagClose + "\",\"" + item.sampleText + "\");";
    if (item.summary != null)
        href+="javascript:changeSummary(\"" + item.summary + "\");";
    ref.setAttribute("href", href);
    ref.setAttribute("title", item.speedTip);
    ref.appendChild(image);

    parent.appendChild(ref);
}

/************
 * IconesDeTitre : fait en sorte que le modèle {{Icône de titre}} puisse être utilisé plusieurs fois
 */

function IconesDeTitre()
{
    var h1 = document.getElementsByTagName("h1")[0];
    var icones = document.getElementsByTagName("div");
    var icones2=new Array();
    var i;var j=0;
    for(i=0;i<icones.length;i++)
        if (icones[i].className == "icone de titre")
            icones2[j++]=icones[i];
    while (j--> 0)
    {
        var icon=icones2[j];
        icon.style.display = "block"; /* annule display:none par défaut */
        icon.style.borderWidth = "1px";
        icon.style.borderStyle = "solid";
        icon.style.borderColor = "white";
        h1.insertBefore(icon, h1.firstChild); /* déplacement de l'élément */
    }
}
$(IconesDeTitre);


/****************************************

Options d'affichage
Voir [[:Modèle:Option]]. Auteur:ThomasV

****************************************

function OptionText() {
   var indexNavigationBar = 0;
   // iterate over all < span >-elements until class "OptionText" is found
   for(var i=0; 
           SpanElem = document.getElementsByTagName("span")[i]; 
           i++) {
       // if found an option span
       if (SpanElem.className == "OptionText") {
          //SpanElem.style.display = 'none';
          OptionTitle = SpanElem.title;
          OptionStyle = SpanElem.firstChild.getAttribute('style');

          //check if option was already encountered...
          if(!document.getElementById(OptionTitle)){

            //read cookie
            var DisplayOptionDefault = true;
            CookieDisplayOption = $.cookie("Display"+OptionTitle)
            if (CookieDisplayOption) {
            if (CookieDisplayOption == "false") DisplayOptionDefault = false; }

            var PageDisplay = document.createElement("li");
            PageDisplay.setAttribute('id', OptionTitle);
            var PageDisplayLink = document.createElement("a");

            OptionText = document.createTextNode("Désactiver "+OptionTitle);
            PageDisplayLink.appendChild(OptionText);
            PageDisplayLink.setAttribute('href','javascript:displayOptionText("'+OptionTitle+'","' + OptionStyle +'", '+DisplayOptionDefault+');');
            PageDisplay.appendChild(PageDisplayLink);

            var optlist = document.getElementById("optlist");
            if(!optlist) {
               var displayOptions = document.createElement("div");
               displayOptions.style.marginTop = "0.7em";
               displayOptions.innerHTML = '<h5>options d’affichage<\/h5><div class="pBody"><ul id="optlist"></ul><\/div>';
               document.getElementById("p-tb").appendChild(displayOptions);
               optlist = document.getElementById("optlist");
            }
            optlist.appendChild(PageDisplay);

            displayOptionText(OptionTitle,OptionStyle,DisplayOptionDefault);
          }
       }
   }
}

function displayOptionText(optiontitle, optionstyle, bool)
{
  $.cookie("Display"+optiontitle,bool);
  var PageDisplayLink =  document.getElementById(optiontitle).firstChild;;

   // iterate over all < span >-elements
   for(var i=0; 
           SpanElem = document.getElementsByTagName("span")[i]; 
           i++) {
        // if found an option text
        if ((SpanElem.className == "OptionText") && (SpanElem.title == optiontitle)) {
          if(bool==true) {
            SpanElem.setAttribute('style',optionstyle);
            PageDisplayLink.firstChild.data = (optiontitle);
            PageDisplayLink.setAttribute('href', 'javascript:displayOptionText("'+optiontitle+'","'+optionstyle+'", false);');
          }
          if(bool==false) {
            SpanElem.setAttribute('style','null');
            PageDisplayLink.firstChild.data = (optiontitle);
            PageDisplayLink.setAttribute('href', 'javascript:displayOptionText("'+optiontitle+'","'+optionstyle+'", true);');

         }        
      }
   }
}

$(OptionText);

function loadImage(ImageSrc,id)
{
  var d = document.getElementById(id);
  //if(d.firstChild){d.removeChild(d.firstChild);} 
  d.firstChild.setAttribute('href', 'javascript:hideImage("'+ImageSrc+'", "'+id+'");'); 
  d.firstChild.setAttribute('title', 'cacher'); 
  d.firstChild.innerHTML='[-]'; 
  var newimg = document.createElement("img");
  //newimg.setAttribute("src", "/wiki/Special:Filepath/"+ImageSrc.substring(6));
  newimg.setAttribute("src", "/w/thumb.php?f="+ImageSrc.substring(6)+"&w=650");
  newimg.setAttribute("alt", "image not found : "+ImageSrc.substring(6));
  newimg.setAttribute("id", "img2");
  d.appendChild(newimg);
} 

function hideImage(ImageSrc,id)
{
  var d = document.getElementById(id);
  d.firstChild.setAttribute('href', 'javascript:loadImage("'+ImageSrc+'", "'+id+'");'); 
  d.firstChild.setAttribute('title', 'montrer'); 
  d.firstChild.innerHTML='[+]'; 
  d.removeChild(d.lastChild);
}


function onclickImages()
{
   // iterate over all < span >-elements
   for(var i=0; 
           spanElem = document.getElementsByTagName("span")[i]; 
           i++) {
        if (spanElem.className == "onclickImage")  {
            spanElem.setAttribute('id', 'onclick'+i); 
            title = spanElem.firstChild.getAttribute('title'); 
            spanElem.firstChild.setAttribute('href', 'javascript:loadImage("'+title+'", "onclick'+i+'");'); 
            spanElem.firstChild.innerHTML='[+]'; 
            spanElem.firstChild.setAttribute('title', 'montrer'); 
      }
   }
}

$(onclickImages);

// Amélioration de la page de recherche v2
// Auteur : Marc Mongenet
// Sous licence GFDL & GPL

function SpecialSearchEnhanced2() 
{
  function SearchForm(action, engine, engine_name, logo, input_name, input_val, site_name, site_val)
  {
    var tr = document.createElement("tr");

    var td1 = document.createElement("td");
    td1.align = "left";
    tr.appendChild(td1);

    var a = document.createElement("a");
    a.href = engine;
    td1.appendChild(a);

    var img = document.createElement("img");
    img.src = logo;
    img.alt = engine_name;
    img.style.borderWidth = "0";
    a.appendChild(img);

    var td2 = document.createElement("td");
    tr.appendChild(td2);

    var form = document.createElement("form");
    form.method = "get";
    form.action = action;
    td2.appendChild(form);

    var input = document.createElement("input");
    input.type = "text";
    input.size = "32";
    input.name = input_name;
    input.value = input_val;
    form.appendChild(input);

    var site = document.createElement("input");
    site.type = "hidden";
    site.name = site_name;
    site.value = site_val;
    form.appendChild(site);

    var submit = document.createElement("input");
    submit.type = "submit";
    submit.value = "Rechercher avec " + engine_name;
    form.appendChild(submit);

    return tr;
  }

  if (typeof SpecialSearchEnhanced2Disabled != 'undefined') return;
  if (mw.config.get('wgCanonicalSpecialPageName') != "Search") return;

  var mainNode = document.getElementsByTagName("form");
  if (!mainNode) return;
  mainNode = mainNode[0];
  mainNode.appendChild(document.createElement("table"));
  mainNode = mainNode.lastChild;
  mainNode.style.backgroundColor = "transparent";
  mainNode.appendChild(document.createElement("tbody"));
  mainNode = mainNode.lastChild;

  var searchValue = document.getElementById("lsearchbox").value;

  var motor;
  motor = SearchForm("http://partner.exalead.fr/search", "http://www.exalead.fr/", "Exalead",
                     "http://www.wikipedia.fr/exalead.gif", "q", searchValue,
                     "site", "fr.wikibooks.org");
  mainNode.appendChild(motor);
  motor = SearchForm("http://www.google.fr/search", "http://www.google.fr/", "Google",
                     "http://www.google.com/logos/Logo_25wht.gif", "q", searchValue,
                     "as_sitesearch", "fr.wikibooks.org");
  mainNode.appendChild(motor);
  motor = SearchForm("http://fr.search.yahoo.com/search", "http://fr.search.yahoo.com/", "Yahoo!",
                     "http://us.yimg.com/i/yahootogo/y88red2.gif", "p", searchValue,
                     "vs", "fr.wikibooks.org");
  mainNode.appendChild(motor);
  motor = SearchForm("http://search.live.com/results.aspx", "http://search.live.com/", "Live",
                      "http://search.live.com/s/affillogoLive.gif", "q", searchValue,
                      "q1", "site:http://fr.wikibooks.org");
  mainNode.appendChild(motor);
}

$(SpecialSearchEnhanced2);

/**
 * Changer le lien d'import en lien vers la page [[Aide:Importer un fichier]] (depuis fr.wikipedia)
 */
function LienUpload() 
{
  var a = document.getElementById("p-tb");
  if (a) 
  {
    b = a.getElementsByTagName("ul");
    if(b.length > 0)
    {
      b[0].innerHTML = b[0].innerHTML
      + '<li><span id="t-upload2" title="//fr.wikibooks.org/wiki/Aide:Importer_un_fichier">'
      + '<a href="//fr.wikibooks.org/wiki/Aide:Importer_un_fichier">'
      + 'Importer image ou son</a></span> </li>'
    }
  }
}

$(LienUpload);

// ==================================================
// Book-wide search using Google
// from pl.wikibooks, maintainer [[b:pl:User:Piotr]]
// ==================================================

function getBookName() {
   var start = 0;
   var PSEUDONAMESPACE = "Programming:";
   if ( mw.config.get('wgPageName').slice(0, PSEUDONAMESPACE.length) == PSEUDONAMESPACE ) start = PSEUDONAMESPACE.length;
   var i = mw.config.get('wgPageName').indexOf(':', start);
   var k = mw.config.get('wgPageName').indexOf('/', start);
   if ( (k>=0) && ((i<0) || (k < i)) ) i = k;

   return (i<0) ? mw.config.get('wgPageName') : mw.config.get('wgPageName').slice(0, i);
}

function insertGoogleSearch() {
   if ( mw.config.get('wgNamespaceNumber') != 0 && mw.config.get('wgNamespaceNumber') != 102) { // 102 - Cookbook namespace
      return;
   }
   var google = "http://www.google.com/custom?sa=Google+Search&domains=fr.wikibooks.org/wiki/PAGE&sitesearch=fr.wikibooks.org/wiki/PAGE";
   var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0];
   var link = document.createElement('a');

   var book = getBookName();

   link.href = google.replace(/PAGE/g, book);
   link.appendChild(document.createTextNode("Recherche dans livre"));

   var li = document.createElement('li');
   li.id = "google-trick-search";

   li.appendChild(link);
   tb.insertBefore(li, tb.firstChild);
}

$(insertGoogleSearch);

/* </source>

== Moteurs de recherche externe ==

<source lang="javascript">*/

var cookieCacheRechercheExterneName = "cacheRechercheExterne";
var urls = new Array();

function ExternalSearch() { //génère le contenu
  //if (mw.config.get('wgPageName') != "Accueil/Brouillon") return;
  var mainNode = document.getElementById("searchbox");
  if (!mainNode) return;

  var c = 0;
  function CreateButton(name,value,parent,url) {
    var button = document.createElement("input");
    button.type = "button";
    button.value = value;
    button.setAttribute('onclick','SearchRedir(' + c + ');');
    parent.appendChild(button);
 
    urls[c] = url;
    c++;
  }

  var span = document.createElement("span");
  span.style.fontSize = "smaller";

  var a = document.createElement("a");
  a.href="javascript:affRechercheExterne(true);";
  a.id = "AfficheRechercheExterne";
  a.title = "En raison des limitations du moteur de recherche interne, des boutons vers des moteurs externes vous sont temporairement proposés afin de vous aider dans vos recherches";
  a.style.marginLeft = "1ex";
  a.appendChild(document.createTextNode(">>"));
  span.appendChild(a);

  var a = document.createElement("a");
  a.href="javascript:affRechercheExterne(false);";
  a.id = "CacheRechercheExterne";
  a.style.marginLeft = "1ex";
  a.appendChild(document.createTextNode("<<"));
  span.appendChild(a);

  document.getElementsByClassName("searchboxSearchButton")[0].parentNode.appendChild(span);

  var div = document.createElement("div");
  div.id = "BoutonsRechercheExterne";

  CreateButton('exalead','Exalead', div, "http://www.exalead.fr/search/results?q=site%3Awikibooks.org+")
  CreateButton('google','Google', div, "http://www.google.fr/search?as_sitesearch=fr.wikibooks.org&q=");
  CreateButton('live','Windows Live', div, "http://search.live.com/results.aspx?q1=site:fr.wikibooks.org&q=");
  CreateButton('yahoo','Yahoo!', div, "http://fr.search.yahoo.com/search?vs=fr.wikibooks.org&p=");

  mainNode.appendChild(div);

  affRechercheExterne(($.cookie(cookieCacheRechercheExterneName) == "1"));
}

function affRechercheExterne(visible) { //affiche / masque les boutons
    var date = new Date();
    var val = visible ? "=1" : "=0";
    date.setTime(date.getTime() + 30*86400*1000);
    document.cookie = cookieCacheRechercheExterneName + val + "; expires="+date.toGMTString() + "; path=/";
    document.getElementById('BoutonsRechercheExterne').style.display = visible ? 'block' : 'none';
    document.getElementById('CacheRechercheExterne').style.display = visible ? 'inline' : 'none';
    document.getElementById('AfficheRechercheExterne').style.display = visible ? 'none' : 'inline';
}

function SearchRedir(index) { //lance recherche externe suite pression sur bouton
  window.location.href = urls[index] + escape(document.getElementsByClassName("searchboxInput")[0].value);
}
$(ExternalSearch);
//</source>