// ==UserScript==
// @name           MultiWindowPrint
// @namespace      de.wikipedia.org
// @description    Fügt auf der aktuellen Seite Schaltflächen für wiederholtes Drucken ein, wahlweise je eine am Beginn und am Ende der Seite oder/und eine an fester Position.
// @date           2011-09-29
// @author         Geri Broser (http://de.wikipedia.org/wiki/Benutzer:Gerold_Broser)
// ==/UserScript==

// Anmerkung: Verwendet eine Seite Framesets (Ein Pfui! Eigentlich. ;-) werden die Schaltflächen in jedes Frame eingefügt. 
//            (Da jedes dieser eine mehr oder weniger unabhängige Seite mit eigenem Body ist.) 

var anzahlDrucke = 2; // Eine Anzahl < 1 resultiert in einer Fehlermeldung, s.u.
var addTopAndBottomButtons = true; // Schaltflächen am Beginn und Ende der Seite einfügen.
var addFixedButton = true; // Schaltfläche an fester Position einfügen. Die Position kann im Code am Ende der Funktion addPrintButtons(...) angepasst werden. 
var wartezeit = 500; // ...zwischen Druckvorgängen in Millisekunden; muss evtl. angepasst (erhöht) werden --> Versuch macht klug ;-)
                     // Notwendig, da sonst der Drucker u.U. ab dem 2. Mal Drucken von Windows als nicht bereit gemeldet wird --> geht ihm zu schnell
var fehlerdialogAnzeigen = false; // Wenn 'true' wird im Fehlerfall ein interaktiver Fehlerdialog angezeigt; wenn 'false' nicht.
                                  // In die Javascript-Fehlerkonsole werden Meldungen immer geschrieben.  

addPrintButtons( anzahlDrucke, addTopAndBottomButtons, addFixedButton, wartezeit, fehlerdialogAnzeigen );

function addPrintButtons( anzahlDrucke, addTopAndBottomButtons, addFixedButton, wartezeit, fehlerdialogAnzeigen )
  {
  if ( anzahlDrucke < 1 )
    {
    msg = "WindowPrint: Eine Druckanzahl kleiner als eins ist nicht sinnvoll."
    console.log(msg);
    alert(msg);
    return;
    }
  
  var buttons = new Array(3);
  for ( var b = 0; b < buttons.length; b++ )
    {
    buttons[b] = document.createElement('input');
    buttons[b].value = "Diese Seite " + anzahlDrucke + "-mal drucken...";
    buttons[b].type = "button";
    buttons[b].setAttribute('onClick', "javascript: anzahl = " + anzahlDrucke + "; window.print(); for ( var p = 1; p < anzahl; p++ ) { window.setTimeout('window.print()', " + wartezeit + "); }");
    }

  var body = document.getElementsByTagName('body')[0];
  if ( !body )
    {
    var msg = 'Die Schaltflächen "Diese Seite ' + anzahlDrucke + 'x drucken..." können auf dieser bzw. einer Seite nicht eingefügt werden.\n\n(Kein Body-Element verfügar. Mehr dazu kannst Du, unter Nennung der Seitenadresse, auf http://de.wikipedia.org/wiki/Benutzer_Diskussion:Gerold_Broser erfahren.)';
    console.log(msg);
    if ( fehlerdialogAnzeigen )
      alert(msg);
    }
  else
    {
    if ( addTopAndBottomButtons ) 
      {
      body.insertBefore( buttons[0], document.evaluate('./*', body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue );
      body.appendChild( buttons[1] );
      }
    if ( addFixedButton ) 
      {
      buttons[2].setAttribute('style', 'position:fixed; right:0px; top:0px;'); // Anpassen mit: right:0px; left:0px; top:0px; bottom:0px; 
      body.appendChild( buttons[2] );
      }
    }
  } // addPrintButtons( ... )