Benutzer:PDD/monobook.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Gehe zu Menü → Einstellungen (Opera → Einstellungen auf dem Mac) und dann auf Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien.
/** FAQ:
//
// Frage:	Wie übernehme ich dieses Skript?
//
// Antwort:	Einfach "Quelltext betrachten", alles markieren und kopieren, dann in deine eigene
//  		monobook.js (also in [[Special:Mypage/monobook.js|Benutzer:<DeinName>/monobook.js]])
//  		oder ander Skinseite /common.js, /vector.js kopieren).
//  		Am sinnvollsten ist es dabei, wenn du die Originalversion von [[Benutzer:PDD/monobook.js]]
//  		übernimmst, da diese immer auf dem neuesten Stand ist.
//
// Frage:	Kann ich dieses Skript einfach so übernehmen, oder muss ich da tausend Sachen ändern?
//
// Antwort:	Du kannst natürlich alles ändern, aber du musst nicht. Einfach erstmal kopieren, ausprobieren,
//  		und dann so anpassen, dass es deinem Bedarf gerecht wird.

// Weitere Fragen und Antworten findest du hier: [[Benutzer:PDD/monobook FAQ]]
**/
// <nowiki> {{subst:Benutzer:PDD/monobook.js.DLWS}} </nowiki> <--- diese Zeile bitte nicht löschen
// Originalskript ursprünglich gefunden bei [[:en:User:Angela]]
// bearbeitet von [[Benutzer:Maximus Rex]]
//       ""       [[Benutzer:SirJective]]
//       ""       [[Benutzer:BLueFiSH.as]]
//       ""       [[Benutzer:Littl]] (2005-09-07 und 2006-02-21)
//       ""       [[Benutzer:Schwalbe]] (2006-02-03)
//       ""       [[Benutzer:PDD]] (ab 2006-04-22)
//       ""       [[User: Perhelion]] (2015-08-30)
/** @Dependencies: mediawiki.util **/
/* global $, mw */
/* jshint curly:false, eqeqeq:true, latedef:false, strict:false, undef:false, unused:false, scripturl:true */
// (PDD: note to self: version auch in alert-Funktion ändern!)
var version = '0.99p';
// Hier bitte eine Signaturvariante aussuchen! <nowiki>
// (Signaturvariante 1: sinnvoll bei unter "Einstellungen" typografisch angepassten Signaturen)
var usersignature = '~~~~';
// (Signaturvariante 2: Datum kleiner, kein Zeilenumbruch nach dem Leerzeichen)
// var usersignature = '<span style="white-space:nowrap;">-- ~~~ <small>~~~~~</small></span>';
// (Wiki-Standard-Signatur, bitte das Leerzeichen nach den zwei Strichen beachten)
// var usersignature = '-- ~~~~';
// </nowiki>

// *************** SETUP Teil 1a **********************************
// systemweite Default-Optionen aus [[MediaWiki:Common.js]]
window.NavigationBarShowDefault = 0;  // Navi-Leisten: alle einklappen = 0; alle ausklappen = 15 (z.B.)
var linkFA_enabled = true;		// „Featured Articles“ in fremdsprachigen Wikipedias markieren?

// systemweite Default-Optionen aus [[MediaWiki:Monobook.js]]
var oldEditsectionLinks = false;  // [Bearbeiten]-Links bei Abschnitten ganz nach rechts?

// *************** SETUP Teil 1b **********************************
// Parameter für Gadgets
// Gadgets müssen über [[Spezial:Einstellungen]] → Gadgets mit Ausnahme der Rechtschreibpruefung und markAdmins freigeschaltet werden

// Gadget: [[Wikipedia:Helferlein/markAdmins]] sollte  deaktiviert werden-
var markadmins = true;  // Admins u.ä. besonders hervorheben?
if (markadmins) {
	window.marksubpages = true;			// auch Links auf Admin-Unterseiten markieren?
	window.mawatchlist = true;			// auch auf der Beobachtungsliste?
	window.macontribs = true; 			// auch auf den Benutzerbeiträgen?

	window.markatxt = "A";			  // Markierung für Admins
	window.markrenatxt = "A-Ren";		// Markierung für umbenannte Admins
	window.markbureautxt = "B";		 // Markierung für Bürokraten
	window.markstewtxt = "S";			// Markierung für Stewards
	window.markombudsmantxt = "Omb";	// Markierung für Ombudspersonen

	window.markexadmins = true;		// zusätzlich: Ex-Admins besonders hervorheben?
	window.markexatxt = "Ex-A";		 // Markierung für Ex-Admins

	window.markexbureaucrats = true;  // zusätzlich: Ex-Bürokraten besonders hervorheben?
	window.markexbureautxt = "Ex-B";	// Markierung für Ex-Bürokraten

	window.markarbcom = true;		 // zusätzlich: Schiedsgericht besonders hervorheben?
	window.markarbcomtxt = "SG";		// Markierung für Schiedsgerichtler

	window.markcheckuser = true;	  // zusätzlich: CheckUser besonders hervorheben?
	window.markcheckusertxt = "CU";	 // Markierung für Checkuser-Berechtigte

	window.markoversight = true;	  // zusätzlich: Oversighter besonders hervorheben?
	window.markoversighttxt = "OS";	 // Markierung für Oversight-Berechtigte

	window.markcomadmins = true;	  // zusätzlich: Commons-Admins besonders hervorheben?
	window.markcomatxt = "Com-A";		// Markierung für Commons-Admins

	window.markwdadmins = true;	  // zusätzlich: Wikidata-Admins besonders hervorheben?
	window.markwdatxt = "WD-A";		 // Markierung für Wikidata-Admins
}

 // Gadget: popups.js (Lupin, Navpop) // mw.user.options.get('gadget-navigation-popups')
var lupinpopups = false;		// Popup-Modul einbinden?
if (lupinpopups) {
 // Optionen für Lupin-Popups
 // (ausführliche Liste siehe [[Wikipedia:Helferlein/Navigation-Popups#Optionen]] bzw.
 // aktueller und auf englisch [[:en:Wikipedia:Tools/Navigation popups#Options]])
	var addpopupLink = true;		 // Link auf Popups in Messages hinzufügen?
	    addpopupLink = addpopupLink ? " (mit [[Wikipedia:Helferlein/Navigation-Popups|Popups]])" : "";
	window.popupDelay = 1;				    // Popupverzögerung in s (DEFAULT: 0.5)
	window.simplePopups = false;				// auf true setzen, wenn Laden im Hintergrund unerwünscht (DEFAULT: false)
	window.popupStructure = 'menus';			// Aussehen der Popups (DEFAULT: 'shortmenus')
	window.popupActionsMenu = false;			// separates "actions"-Menu (DEFAULT: true)
	window.popupImages = true;				// Bilder im Popup erwünscht? (DEFAULT: true)
	window.popupSubpopups = true;				// Popups für Links innerhalb von Popups generieren? (DEFAULT: true)
	window.popupAdminLinks = false;			// Funktionen, die nur Admins nutzen können (DEFAULT: false)
	 // nächste Option sollte bei Verwendung von showRedundantLinks.js *nicht* auf true gesetzt werden
	window.removeTitles = false;				// Originaltitel der Links nach popups verschieben? (DEFAULT: true)
	window.popupFixRedirs = true;				// Links auf Redirects korrigieren? (DEFAULT: false)
	window.popupWatchRedirredPages = false;	// korrigierte Seite beobachten? (DEFAULT: null)
	window.popupRedirAutoClick = 'wpSave';	// ausgeführte Aktion beim Korrigieren von Redirects (DEFAULT: 'wpDiff')
	window.popupRedlinkRemoval = true;		// Rote Links entfernen? (DEFAULT: false)
	window.popupFixDabs = true;				// Links auf BKLs korrigieren? (DEFAULT: false)
	window.popupWatchDisambiggedPages = false;// korrigierte Seite beobachten? (DEFAULT: null)
	window.popupLastModified = true;			// Zeit seit letzter Änderung anzeigen? (DEFAULT: true)
	window.popupDiffDates = true;				// Änderungsdaten bei Diffs anzeigen? (DEFAULT: true)
	window.popupOnlyArticleLinks = true;		// Popups nur für Artikel-Links (DEFAULT: true)
	window.imagePopupsForImages = false;		// Bildvorschau laden, wenn Mausposition über Bild? (DEFAULT: true)
	window.popupMaxWidth = 400;				// Maximalbreite des Popup-Fensters (DEFAULT: 350)
	window.popupRevertSummaryPrompt = true;	// Prompt zum Ändern des Revert-Kommentars? (DEFAULT: false)
	window.popupMaxPreviewSentences = 2;		// Anzahl der angezeigten Sätze in der Vorschau (DEFAULT: 4)
	 // <nowiki>
	 // deutsche Texte für Lupin
	window.popupFixDabsSummary = "Ersetze BKL-Seite [[%s]] durch [[%s]]" + addpopupLink;
	window.popupExtendedRevertSummary = "Revert auf Version vom %s von Benutzer %s, oldid %s" + addpopupLink;
	window.popupRevertSummary = "Revert auf Version %s" + addpopupLink;
	window.popupRevertToPreviousSummary = "Revert auf Vorgängerversion der Version %s" + addpopupLink;
	window.popupQueriedRevertSummary = "Revert auf Version $1 vom $2 von $3" + addpopupLink;
	window.popupQueriedRevertToPreviousSummary = "Revert auf Vorgängerversion der Version $1 vom $2 von $3" + addpopupLink;
	window.popupFixRedirsSummary = "Ersetze Redirect [[%s]] durch [[%s]]" + addpopupLink;
	window.popupRedlinkSummary = "Entferne Link auf leere Seite [[%s]]" + addpopupLink;
	window.popupRmDabLinkSummary = "Entferne Link auf BKL-Seite [[%s]]" + addpopupLink;
}
// </nowiki>
// Gadget: APPERs RP [[Wikipedia:Helferlein/Rechtschreibprüfung]] // alt [[Benutzer:APPER/RP/js]]
//  Das Gadget sollte hiefür deaktiviert sein!
var rechtschreibpruefung = true;  //  Rechtschreibprüfung?
window.DontAutorunRP = true; // true = manuell = RP durch Anklicken; false = automatische RP
window.RPonAllPages = true;  // nicht nur auf Artikelseiten?

// Gadget: Extra-Editbuttons, siehe: [[Wikipedia:Helferlein/Extra-Editbuttons]]
// Anzahl und Reihenfolge wählbar (siehe: [[Wikipedia:Helferlein/Extra-Editbuttons#Die Buttons]])
var customEditButtons = "A,A3,B,C,E,F,G,H,I,I1,I2,J1,K,M,O,P,PO,Q,R,R3,S,T,T1,U,V,W,X,Y1,Y2,VP,VC,VN,SM";
var rmEditButtons = [6,7,10]; // zu entfernende Standard-Editbuttons (0…10)
var myButtons = {};			// eigene Buttons?

// *************** SETUP Teil 2 **********************************
// Parameter für diese monobook.js (Quickbar, Module etc.)

var zeigeversion = true;	// monobook-Version anzeigen?
var zeigehilfe = true;		// kurze Hilfetexte beim überfahren mit der Maus anzeigen?
var qbnewpage = true;		// sollen Seiten aus dem QuickBar im neuen Fenster aufgerufen werden?
var rclimit = 500;  		// angezeigte Anzahl auf "Letzte Änderungen"
var nplimit = 500;  		// angezeigte Anzahl auf "Neue Artikel"
var nulimit = 1000; 		// angezeigte Anzahl auf "Neuanmeldungs-Logbuch"
var nvlimit = 500;  		// angezeigte Anzahl auf "Alte, gesichtete Seiten"
var ndlimit = 250;  		// angezeigte Anzahl auf "Neue Dateien"
var usedropdown = false;	// keine Dropdowns gewünscht?
var timeout = 50000;		// 50 Sekunden auf das Neuladen der Seite warten
var timezoneshift = 0;		// Unterschied lokale Zeit zur Systemzeit (bleibt für Mitteleuropäer 0)
var debugme = mw.config.set("debug", false);  // Debug-Modus?
var qbfontsize = 100;		// Schriftgröße im QuickBar (relativ in %)

// <nowiki>
// Modul: changeBeschriftungen.js
var beschriftungen = true;	 // kosmetische Änderungen an der MediaWiki-Oberfläche?
if (beschriftungen)
  var markhandsoff = true,	 // fremde Benutzerseiten grafisch markieren?
	// Beschriftungen: personal toolbar
	cbmytalk = "Meine Diskussion",
	cbprefs = "Einstellungen",
	cbwatchlist = "Beobachtungsliste",
	cbmyconts = "Meine Beiträge",
	cblogout = "X",
	// Beschriftungen: current article
	cbedit = "Bearbeiten",
	cbhistory = "Versionen",
	cbmove = "Verschieben",
	cbwatch = "Beobachten",
	cbunwatch = "Ignorieren",
	// Beschriftungen: tools
	cbwhatlinkshere = "Links a. d. Seite",
	cblinked = "Verlinkte Änderungen",
	cbmail = "E-Mail senden",
	cbupload = "Datei hochladen",
	cbprint = "Druckversion",
	cbblock = "User sperren",
	// Beschriftungen: portlets
	cblang = "Interwiki";

// Modul: Sperrstatus.js
var sperrstatus = true;		 // Sperrstatus einer Seite farblich anzeigen?

// Modul: eintragen.js
var autosave = true;			// automatisches Speichern von QS/LA/SLA/Vandal-Einträgen?
var signogrundparam = false;			// auf true setzen, wenn Signatur das SLA-Eintragen behindert
var emptylinesafterhr = 1;			 // Leerzeilen zwischen LA-Baustein und Artikeltext
var defaultSLA = "Kein Artikel";		// Standard-SLA-Grund
var defaultVandal = "vandaliert in [[]]";  // Standardgrund für Vandalismusmeldung (Benutzer)
var defaultAVandal = "Edit-War";		   // Standardgrund für Vandalismusmeldung (Artikel)

// Modul: hinweise.js
var hinweis = true;			 // Portal- und Redaktionshinweis verwenden?

// Modul: godmode-light.js
var godmodelight = true;		// "Zurücksetzen" einblenden?
var godmodenewstyle = true;			// neuer Rollback-Kommentartext?

// Modul: addEditAndRevertLinks.js
var editlinkoldversion = true;  // Bearbeiten-Link für ältere Versionen anzeigen?
if (editlinkoldversion)
  var editlinktxt = "edit",	 // Text des Edit-Links
	revertwithreason = true,	// Revert-Link mit Grund-Eingabe anzeigen?
	revlinktxt = "rev",		 // Text des Revert-Links
	revlinkshowuser = true,	 // beim Revertieren über (Rev)-Link letzten Benutzer angeben?
	rvisminor = true,			// sind Reverts mit "(rev)"-Link Minor-Changes?
	aearldefault = "Grund: keine Verbesserung des Artikels",	  // Defaultgrund beim Revertieren
	aerhistory = true,						// Links auch in der Versionsgeschichte?
	aearlhere = true;						// Revertaktion im selben Browserfenster?

// Modul: addLogsLink.js
var addlogslink = true;		 // Zusatzlinks zu Spezial:Log einfügen?
if (addlogslink)
  var pagelogtext = "Page:Log",				// Text des Seitenlogbuch-Links
	userlogtext1 = "User:Log:1",			 // Texte der beiden Benutzerlog-Links
	userlogtext2 = "User:Log:2",

	addusercontriblink = true,  // auf Benutzerseiten auch noch Link auf Contributions?
	usercontribtext = "User:Contribs",		// Text des Contributions-Links ("Benutzerbeiträge")
	userdeledittext = "User:DelEdits",		// Text des Links auf Deleted Edits
	userstatstext = "User:Stats",			// Text des Links auf Benutzerstatistik
	userstatstype = "xt",					// Art der Benutzerstatistik (Auswahl: xt/x/super/quick)
	usergallerytext = "User:Gallery",		// Text des Links auf Bildergalerie des Benutzers
	userstimmrechttext = "User:Stimmrecht",  // Text des Links auf Stimmrechtcheck

	adduserarticlelink = true,  // auf Benutzerseiten Link auf erstellte Artikel?
	userarticletext = "User:Articles",		// Text des Links auf erstellte Artikel
	userarticletype = "x",					// verwendeter Artikelcounter (Auswahl: x)

	addbrowselink = true,		// auf allen Seiten Link zum alphabetischen Browsen?
	browseuserprefix = true,				 // bei Nutzerseiten stattdessen alle Unterseiten des Nutzers zeigen?
	browsetext = "Browse",					// Text des Links auf Browsing-Seite

	addbrowsedellink = true,		// auf allen Seiten Link zum Browsen in gelöschten Seiten?
	browsedeltext = "BrowseDel",			 // Text des Links auf BrowseDel-Seite

	addiusagelink = true,		// bei Bildern Link zur Bildnutzung (Commons)?
	imgusagetext = "IMG:C-Usage";			// Text des Links auf Bildnutzung

// Modul: modifyCA.js
var addeditintro = true;		// Tab zum Editieren des Nullabschnitts (Intros) einer Seite hinzufügen?
var editintrotext = "IntroBearbeiten";  // Beschriftung des Tabs
var addpageinfo = true;		 // Tab für Seiteninfo hinzufügen?
var pageinfotext = "Info";			  // Beschriftung des Tabs
var addpurge = true;			// Tab zum Purgen (Servercache-Updaten) einer Seite hinzufügen?
var purgetext = "Purge";				// Beschriftung des Tabs
var addwatchers = false;		// Tab mit Link zum Watchers-Tool hinzufügen?
var watcherstext = "ºº";				// Beschriftung des Tabs

// Modul: markUTF8.js
var markutf8 = true;			// Sonderzeichenbenutzernamen besonders hervorheben?
var muwatchlist = true;			  // auch auf der Beobachtungsliste?
var mucontribs = true;				// auch auf den Benutzerbeiträgen?
var markutf8txt = "UTF8!";	  // Markierung für UTF8-kodierte Nutzernamen etc.
var markltrtxt = "UTF8:LTR!";	// Markierung für Lemmata mit LTR-Mark

// Modul: markErledigt.js
var markerledigt = true;		// Erledigt-Button auf Seiten mit [[Vorlage:Autoarchiv-Erledigt]]

// Modul: reftoggle.js
var reftoggle = false;		  // "Quellen verstecken"/"Quellen anzeigen"-Schalter für Fußnoten?

// Modul: quickedit.js
var qeEnabled = false;		  // QuickEdit aktivieren?
var qeEnableSection0 = false;	// QuickEdit-Link für Abschnitt 0 (Einleitung)?
var qeEnableAccessKeys = true;  // Tastaturbefehle aktivieren?
var qeShowErrors = true;		// Fehlermeldungen anzeigen
var qeTextboxHeight = 20;		// Höhe des Textfelds

// Modul: APPERs IP-Patrol Vandalenmarkierer
var ippvandalmark = false;	  // IP-Patrol-Vandalenmarkierung aktivieren?

// Modul: coordinates.js
// (für dieses Modul im CSS #editpage-copywarn nicht ausblenden!)
var coordinates = false;		// Koordinate_Artikel in Editfenster generierbar?

// Modul: unsigned.js
var unsigning = true;			// Einfügen von Unsigned bei unsignierten Beiträgen auf Diskussionsseiten?
var ssubst = true;					// unsigniert-Baustein mit subst einfügen?
var max_history_entries = 36;		 // Anzahl der angezeigten Edits (max. 36)

// Modul: signing.js
var signing = true;			// automatische Unterschrift auf Diskussionsseiten?

// Modul: SearchBox.js
var searchbox = false;		 // erweitertes suchen/ersetzen

// </nowiki>
/** Fliegelflagel (von Schnark)
  @Meta-Script: weitere Skriptsammlung, einfach zu verwenden [[Benutzer:Schnark/js/fliegelflagel]]
  standardmäßig u.a. aktiv [[Benutzer:Schnark/js/letzteredit.js]] und [[Benutzer:Schnark/js/diff.js]]
**/ // <nowiki>
var fliegelflagel = (mw.libs.fliegelflagel)? 0 : true;  // sehr empfehlenswert

// Modul: wikEdDiff.js (Cacycle)
var cacyclediff = false,		// verbesserte Diff-Ansicht (Cacycle) einbinden? Redundant mit Schnark's Diff
  wikEdFullDiff = (!cacyclediff)? 0 : false;

// weitere Module
var showredundantlinks = false; // zeigt doppelte Links an
var ripe = false;				// Ripe-Tooltips?
var imgdupecheck = true;		// Bilder-Duplikate anzeigen
var diffhistory = true;		 // bei Nachsichtungen Übersicht der ungesichteten Versionen zeigen (von P.Copp)
var hideduplicatecontribs = true;	// bei Benutzerbeiträgen Checkboxen zum Filtern einblenden (von P.Copp)
var hidenslinksearch = true;	// bei Weblink-Suche unnötiges Zeugs ausblenden (nach P.Copp)

// special rights options
var adddelreason = true;		// Löschgrund einfügen (von P.Copp)
var dellinknowcommons = true;	// Löschlink bei NowCommons-Bildern (von Revvar/Codeispoetry)
var loescheimer = true;		 // erleichtertes LK-Abarbeiten (von mnh)
var filter_rfdtoc_by_default = true;	// Löscheimer: TOC der LK-Seite filtern?

// **************** SETUP Ende ***********************************

var user = mw.config.get('wgUserName'); // username wird automatisch übernommen

// aktuelle Zeit ermitteln
var jetzt = new Date();
// recalculate 4 furriners
var jetztfixed = jetzt.getTime();
jetztfixed += (timezoneshift * 3600 * 1000);
jetzt.setTime(jetztfixed);
// fill date variables
var Monate = mw.config.get('wgMonthNames');
var Monatekurz = mw.config.get('wgMonthNamesShort');
var Jahr = jetzt.getYear();
if (Jahr < 999)  Jahr += 1900;
var Monat = jetzt.getMonth() + 1;
var Tag = jetzt.getDate();
var Stunde = jetzt.getHours();
var Minute = jetzt.getMinutes();
// fill WP date variables
var WPDatum = Tag + '._' + Monate[Monat] + '_' + Jahr;
var WPDatum2 = Jahr + '/' + Monate[Monat] + '/' + Tag;
var WPDatum3 = Monate[Monat] + ' ' + Jahr;
var WPDatum4 = Jahr + '-' + LeadingZero(Monat);
var WPDatum5 = Jahr + LeadingZero(Monat) + '/';
var refDatum = Tag + '. ' + Monatekurz[Monat] + '. ' + Jahr;
var refDatumlang = Tag + '. ' + Monate[Monat] + ' ' + Jahr;
var ndDatum = Jahr + '-' + LeadingZero(Monat) + '-' + LeadingZero(Tag);

// Lemma-Varianten (work in progress) + redundant zu addLogsLink etc.
// get page title
var pagetitle = mw.config.get('wgPageName');
var spagetitle = mw.config.get('wgTitle');
var cpn = mw.config.get('wgCanonicalSpecialPageName');
//var cns = mw.config.get('wgCanonicalNamespace');
var ns = mw.config.get('wgNamespaceNumber');
var cLang = mw.config.get('wgContentLanguage');
var sPath = mw.config.get('wgScriptPath');
var action = mw.config.get('wgAction');
var server = mw.config.get('wgServer');

// do real spaces; fix for lemmas with '&'
var ptitle = pagetitle.replace(/_/g, " ").split('&').join('%26');
var sptitle = spagetitle.replace(/_/g, " ").split('&').join('%26');
// do + escaped (" " to "+")
var pesctitle = spaceEscape(ptitle);
var spesctitle = spaceEscape(sptitle);
// lemmatitle for external lookup
var spesctitlelookup = spesctitle.split('+(')[0];
// Komma-Lemma für Personen (Klammerzusätze weg etc.)
var personlemma = spagetitle.split(' (')[0];
var titlesplit = personlemma.split(' ');
var i;
if (titlesplit.length > 1) {
	personlemma = titlesplit[titlesplit.length-1] + ',';
	for (i=0;i<(titlesplit.length-1);i++)
		personlemma += " " + titlesplit[i];
}

var import_url;
// stub for internal links
// now all links are https (secure.wikimedia.org is also deprecated since 2012)
var intlinkstub = '//' + cLang + '.wikipedia.org/wiki/';
var intfuncstub = '//' + cLang + '.wikipedia.org' + sPath + '/index.php?';
var summary = $('#wpSummary')[0];
var textbox = $('#wpTextbox1')[0];

	/* Vector Modifications: font must be smaller */
var isVector = '';
if (mw.config.get('skin') === 'vector') {
	isVector = 'font-size:78%;'; // scaled proportional with width
	qbfontsize *= 0.84; // scale factor
}

// page type variables: namespaces
var isArticle, isUserpage, isArticleTalk, isProject, isFile, isTemplate, isHelp, isCategory, isSpecial, isUserMainpage;
switch (ns) {
  case  0: isArticle	= true;break;
  case  1: isArticleTalk= true;break;
  case  2: // user & user_talk lumped together
  case  3: isUserpage	= true;break;
  case  4: isProject	= true;break; // Wikipedia:
  case  6: isFile	= true;break;
  case 10: isTemplate	= true;break;
  case 12: isHelp	= true;break; // Hilfe:
  case 14: isCategory	= true;break;
  case -1: isSpecial	= true;break;
}
var isGeneric = (!isFile && !isCategory && !isTemplate);

// page type variables: namespace == -1
var isRestore, isContrib, isDelContrib, isWatchlist, isCompare;
if (isSpecial)
  switch (cpn) {
	case "Undelete" :     isRestore = true;break;
	case "Contributions": isContrib = true;break;
	case "ComparePages" : isCompare = true;break;
	case "Watchlist" :  isWatchlist = true;break;
	case "DeletedContributions":isDelContrib = true;break;
  }

// talk page namespace
var isTalk = (!isSpecial && isOdd(ns));

// individual page specials
var isLKpage = (isProject && (spagetitle.indexOf('Löschkandidaten') !== -1));

// userpage/name stuff, vor allem für IPs
var userPageOwner = "";
var isIPUser = false; // handelt es sich um eine IP?
 // get URL parameters (used for page type variables)
var UrlParameters = {};  //FIXme deprecated in helperFunctions.js, use mw.util.getParamValue( instead

(function() {  // returns UrlParameters
	var para, readUrlParameters = location.search.substring(1, location.search.length).split("&");
	for (i = 0; i < readUrlParameters.length; i++) {
	 para = readUrlParameters[i].split("=");
	 UrlParameters[decodeURIComponent(para[0])] = decodeURIComponent(para[1]);
	}
})();

// Helper-Function
function _getUser() {  // returns isIPUser, userPageOwner
	var target = mw.util.getParamValue('target');
	if (isContrib || isDelContrib) {
	  if (target)
		userPageOwner = target.split('+').join('_');
	  else {
		target = decodeURIComponent(location.href.substring(location.href.indexOf("/wiki/") + 6)).split('#')[0];
		userPageOwner = target.substring(target.indexOf("Beiträge/") + 9);
	  }
	} else if (isUserpage && spagetitle === user) {
		isUserMainpage = true;
		userPageOwner = spagetitle;
	}
	if (userPageOwner > "" && mw.util.isIPAddress(userPageOwner))
		isIPUser = true;
}

// page type variables: other stuff
var isPHP	  = document.URL.indexOf('index.php') > 0;
var isDiff	  = UrlParameters.diff;
var isEdit	  = /^(edit|submit)$/.test(action);
var isHistory = (action === 'history');

// Admin & editor functions
var adminflag  = hasRight("sysop");
var editorflag = hasRight("editor");

// Browserkram
var userbrowser = "Standard";
if (navigator.userAgent.indexOf("Opera") > -1)
	userbrowser = "Opera";
if (navigator.userAgent.indexOf("Safari") > -1)
	userbrowser = "Standard";
if (navigator.userAgent.indexOf("MSIE") > -1) {
	userbrowser = "IE";
	if (navigator.userAgent.indexOf("MSIE 7") > -1)
	  userbrowser = "IE7";
}

// force Browserswitches
if (userbrowser === "IE" || userbrowser === "IE7") {
	godmodelight = false;
	showredundantlinks = false;
}
if (userbrowser === "Opera")
	godmodelight = false;

/*
 * ab hier wird der Quickbar (der Kasten oben links) zusammengebaut
 *
 * zuerst die allgemeinen Variablen (hier bitte nix ändern!)
 */
var Quickbar = '<div class="pBody noprint" id="p-quickbar" style="position:absolute; top:0; left:0; width:14.1em; z-index:10;'+
	isVector + '">',
 // optional:  opacity:0.9,
	xxx	  = '',
	trenner  = '<hr />',
	br		= '<br />',
	qbtarget = qbnewpage ? '_blank' : '_self',
	dropdown = usedropdown,
	scrpt	= '',
	scrptn	= 0,
	indropdown,
	ind;

/*
 * Quickbar-Zusammenbau, Teil 1:
 *
 * die Belegung der einzelnen Abschnitte
 */

function qbWPIntern() {
	w (0,trenner,'Wikipedia','');

	// w (1,intlinkstub+'Hilfe:MediaWiki','MW',qbtarget,'MediaWiki-Hilfe');
	// w (1,intlinkstub+'Wikipedia:Hilfe','RTFM',qbtarget,'Wikipedia-Hilfe');
	// w (1,intlinkstub+'Hilfe:Textgestaltung','TG',qbtarget,'Hilfe zur Textgestaltung');
	// w (1,intlinkstub+'Hilfe:Farben','FT',qbtarget,'Hilfe zur Farbgestaltung');
	w (1,intlinkstub+'Wikipedia:Kurier','K',qbtarget,'Kurier – Das Wikipedia-Nachrichtenblatt');
	w (1,intlinkstub+'Wikipedia:Fragen zur Wikipedia','FZW',qbtarget,'Fragen zur Wikipedia');
	w (1,intlinkstub+'Wikipedia:Auskunft','AU',qbtarget,'Auskunft');
	// w (1,intlinkstub+'Wikipedia:Autorenportal','P',qbtarget,'Autorenportal');
	w (1,intlinkstub+'Wikipedia:Projektneuheiten','NEU',qbtarget,'Projektneuheiten');
	w (1,intlinkstub+'Wikipedia:Verbesserungsvorschläge','VV',qbtarget,'Verbesserungsvorschläge');
	// w (1,intlinkstub+'Wikipedia:Tellerrand','TE',qbtarget,'Tellerrand');
	w (1,intlinkstub+'Wikipedia:Administratoren/Anfragen','AAF',qbtarget,'Administratoren/Anfragen');
	w (1,intlinkstub+'Wikipedia:Administratoren/Notizen','AN',qbtarget,'Administratoren/Notizen');
	w (1,intlinkstub+'Wikipedia:Kandidaturen','AK',qbtarget,'Kandidaturen');
	w (1,intlinkstub+'Wikipedia:Adminwiederwahl','A/W',qbtarget,'Adminwiederwahl');
	w (1,intlinkstub+'Wikipedia:Dritte_Meinung','3M',qbtarget,'Dritte Meinung');
	w (1,intlinkstub+'Wikipedia:Vermittlungsausschuss','VA',qbtarget,'Vermittlungsausschuss');
	w (1,intlinkstub+'Wikipedia:Schiedsgericht/Anfragen','SG/A',qbtarget,'Schiedsgericht/Anfragen');
	// w (1,intlinkstub+'Wikipedia:Projektdiskussionen','PRD',qbtarget,'Projektdiskussionen');
	w (1,intlinkstub+'Wikipedia:Checkuser/Anfragen','CU/A',qbtarget,'Checkuser/Anfragen');
	// w (1,intlinkstub+'Wikipedia:Abkürzungen','ABK',qbtarget,'Abkürzungen');
}

function qbPatrol() {
	w (0,trenner,'Überwachung','');

	w (1,intfuncstub+'title=Special:Recentchanges&hideminor=0&hideliu=1&hidebots=1&hidepatrolled=0&days=7&limit='+rclimit,'RCs',qbtarget,'Letzte Änderungen');
	w (1,intlinkstub+'Special:Contributions/newbies','RCNs',qbtarget,'Beiträge neuer Benutzer');
	w (1,intfuncstub+'title=Special:Newpages&namespace=0&limit='+nplimit,'NeuA',qbtarget,'Neue Artikel');
	// w (1,intlinkstub+'Special:Newimages','NeuD',qbtarget,'Neue Dateien (Bilder)');
	w (1,intfuncstub+'title=Special:Log&limit='+nulimit+'&type=newusers','NeuB',qbtarget,'Neue Benutzer');
	w (1,intfuncstub+'title=Special:Listfiles&limit='+ndlimit,'NeuD',qbtarget,'Neue Dateien');
	w (1,intfuncstub+'title=Special:OldReviewedPages&limit='+nvlimit,'NeuE',qbtarget,'Neue Edits in gesichteten Artikeln');
	// w (1,intfuncstub+'title=Special:ArticleFeedbackv5','NeuF',qbtarget,'Neues Feedback');
	w (1,intlinkstub+'Wikipedia:Vandalismusmeldung','VM',qbtarget,'Vandalismusmeldung');
	w (1,intlinkstub+'Wikipedia:Oversight/Kontakt','OSA',qbtarget,'Oversight-Kontakt');
	w (1,intlinkstub+'Wikipedia:Sperrprüfung','SP',qbtarget,'Sperrprüfung');
	w (1,intlinkstub+'Wikipedia:Löschprüfung','LP',qbtarget,'Löschprüfung');
	w (1,intlinkstub+'Wikipedia:Entsperrwünsche','EW',qbtarget,'Entsperrwünsche');
	w (1,intlinkstub+'Wikipedia:Administratoren/Probleme','AP',qbtarget,'Admin-Probleme');
	w (1,intlinkstub+'Special:Log','Log',qbtarget,'Logbücher');

	if (adminflag) {
		w (1,intlinkstub+'Special:AbuseLog','ELog',qbtarget,'Bearbeitungsfilter-Logbuch');
		w (1,intlinkstub+'Wikipedia:Erkennung_offener_Proxys','EOP',qbtarget,'Erkennung offener Proxys');
	}
	// w (1,'irc://irc.freenode.net/wikipedia-de','IRC',qbtarget,'IRC-Chat #wikipedia-de');
}

function qbWartung() {
	w (0,trenner,'Wartung','');

	// w (1,intlinkstub+'Wikipedia:Löschregeln','WP:LR',qbtarget,'Löschregeln');
	w (1,intlinkstub+'Kategorie:Wikipedia:Schnelllöschen','SLK',qbtarget,'Schnelllöschkandidaten');
	w (1,intlinkstub+'Wikipedia:Löschkandidaten','LK',qbtarget,'Löschkandidaten');
	w (1,intlinkstub+'Wikipedia:Löschkandidaten/'+WPDatum,'LKH',qbtarget,'Löschkandidaten (heute)');
	// w (1,intlinkstub+'Wikipedia:Löschkandidaten/Bilder/'+WPDatum,'BildLK',qbtarget,'Löschkandidaten (Bilder)');
	// w (1,intlinkstub+'Wikipedia:WikiProjekt_Kategorien/Diskussionen/'+WPDatum2,'KatLK',qbtarget,'Löschkandidaten (Kategorien)');
	w (1,intlinkstub+'Wikipedia:Löschkandidaten/Urheberrechtsverletzungen','URV',qbtarget,'Löschkandidaten (URVs)');

	w (1,intlinkstub+'Wikipedia:Qualitätssicherung/'+WPDatum,'QS',qbtarget,'Qualitätssicherung');
	w (1,intlinkstub+'Wikipedia:Redundanz/'+WPDatum3,'RED',qbtarget,'Redundanz');
	w (1,intlinkstub+'Kategorie:Wikipedia:Unverständlich','Wirr',qbtarget,'Unverständlich');

	w (1,intlinkstub+'Wikipedia:Kandidaturen von Artikeln, Listen und Portalen','KALP',qbtarget,'Kandidaturen von Artikeln, Listen und Portalen');
	w (1,intlinkstub+'Wikipedia:Kandidaten für lesenswerte Artikel','KLA',qbtarget,'Kandidaten für lesenswerte Artikel');

	w (1,intlinkstub+'Wikipedia:Review','RV',qbtarget,'Review');
	w (1,intlinkstub+'Wikipedia:Kandidaten für exzellente Bilder','KEB',qbtarget,'Kandidaten für exzellente Bilder');
	// w (1,intlinkstub+'Wikipedia:Kandidaten für exzellente Aufnahmen','KEAU',qbtarget,'Kandidaten für exzellente Aufnahmen');
}

function qbUserTools() {
	if (userPageOwner === "") return;

	if (isIPUser) {
		// w (1,"http://www.ripe.net/whois?form_type=simple&full_query_string=&searchtext="+userPageOwner+"&do_search=Search",'IPripe',qbtarget,'IPripe');
		w (1,"http://www.mxtoolbox.com/SuperTool.aspx?action=scan%3a"+userPageOwner,'PScan',qbtarget,'Portscan');
		// w (1,"http://network-tools.com/default.asp?prog=lookup&host="+userPageOwner,'IPinfo',qbtarget,'IPInfo');
		// w (1,"http://toolserver.org/~chm/whois.php?ip="+userPageOwner,'IPinfo',qbtarget,'IPInfo');
		w (1,"//tools.wmflabs.org/whois/"+userPageOwner+"/lookup",'IPinfo',qbtarget,'IPInfo');
		// w (1,"http://www.dnsstuff.com/tools/tracert.ch?ip="+userPageOwner,'IPtrcrt',qbtarget,'Traceroute');
		// w (1,"https://www.dan.me.uk/torcheck?ip="+userPageOwner,'TOR',qbtarget,'TOR-Node-Check');
		// w (1,"http://toolserver.org/~krimpet/torcheck.php?ip="+userPageOwner,'K-TOR',qbtarget,'Krimpets TOR-Node-Check');
		w (1,"//tools.wmflabs.org/guc/?user="+userPageOwner+"&blocks=true&lang=de",'IP-GUC',qbtarget,'Global user contributions');
		// w (1,"http://toolserver.org/~vvv/rangecontribs.php?wiki=dewiki_p&user="+userPageOwner.substring(0, userPageOwner.lastIndexOf('.')),'IP-RaC',qbtarget,'IP range contributions');
		w (1,"//de.wikipedia.org" + sPath + "/api.php?action=query&list=usercontribs&format=xml&uclimit=500&ucstart=" + getFutureDate() + "&ucend=" + getPastDate() + "&ucuserprefix="+userPageOwner.substring(0, userPageOwner.lastIndexOf('.'))+".",'IP-RaC',qbtarget,'IP range contributions via API');
		w (1,"http://jodies.de/ipcalc?host="+userPageOwner+"&mask1=18&mask2=",'Rng',qbtarget,'Range/Subnet Rechner');
		// w (1,"http://toolserver.org/~krimpet/rbhelper.php?db=dewiki_p&ip="+userPageOwner,'RngB?',qbtarget,'Range Block Finder');
		// w (1,"//tools.wmflabs.org/erwin85/blockfinder.php?lang=de&family=wikipedia&ip="+userPageOwner,'RngB?',qbtarget,'Range Block Finder');
		w (1,"//tools.wmflabs.org/blockcalc/index.php?lang=de",'BCalc',qbtarget,'Rangeblock Calculator');
		w (1,"http://nativeforeigner.com/calc/",'BCalcNF',qbtarget,'Another Rangeblock Calculator');
		w (1,"http://www.mikero.com/misc/ipcalc/?start="+userPageOwner+"&end="+userPageOwner,'BCalcM',qbtarget,'Yet another Rangeblock Calculator');
	} else {
		// w (1,"http://www.ripe.net/whois",'ripe',qbtarget,'Ripe-Lookup');
		// w (1,"http://www.denic.de/de/",'denic',qbtarget,'Domain-Lookup');
		// w (1,"http://www.iks-jena.de/cgi-bin/whois",'iks-whois',qbtarget,'IKS-Whois-Lookup');

		w (1,"//tools.wmflabs.org/quentinv57-tools/tools/sulinfo.php?username="+userPageOwner+"&showblocks=1&showlocked=1",'GUA',qbtarget,'Global user accounts');
		// w (1,"http://toolserver.org/~purodha/sample/dbswithuser.php?usr="+userPageOwner+"&go=Go%21&uselang=de",'GUA+',qbtarget,'Global user accounts (ausführlich)');
		w (1,"//tools.wmflabs.org/guc/?user="+userPageOwner+"&blocks=true&lang=de",'GUC',qbtarget,'Global user contributions');

		if (user !== userPageOwner) {
		  // w (1,"http://toolserver.org/~cyroxx/familiar/familiar.php?user1="+spaceEscape(user)+"&user2="+spaceEscape(userPageOwner),'UFam',qbtarget,'Are U familiar? (cyroxx)');
		  // w (1,"http://toolserver.org/~merl/familiar.php?user1="+spaceEscape(user)+"&user2="+spaceEscape(userPageOwner),'UFam',qbtarget,'Are U familiar? (Merlissimo-Backup)');
		 w (1,"//tools.wmflabs.org/intersect-contribs/?project=dewiki&user1="+spaceEscape(user)+"&user2="+spaceEscape(userPageOwner),'IntC',qbtarget,'Intersect Contribs (pietrodn)');
		  // w (1,"//tools.wmflabs.org/erwin85/contribs.php?lang=de&family=wikipedia&users="+spaceEscape(user)+"|"+spaceEscape(userPageOwner)+"&limit=500&submit=Submit",'ErwC',qbtarget,'Multiple Contribs (erwin85)');
		}
	}
}

function qbToolserver() {
	w (0,trenner,'Toolserver','');

	qbUserTools();

	// w (1,"http://toolserver.org/~leon/stats/wikicharts/index.php?lang=de&wiki=dewiki&ns=Artikel&limit=200&month=" + LeadingZero(Monat) + "%2F" + Jahr + "&mode=view",'WCh',qbtarget,'WikiCharts');
	w (1,"//tools.wmflabs.org/xtools/adminstats/?project=de.wikipedia.org",'AdmA',qbtarget,'Adminaktivität (letzte 100 Tage)');
	// w (1,"http://toolserver.org/~aka/cgi-bin/revstat.cgi?period=168",'RStat',qbtarget,'Revert-Statistik (letzte Woche)');
	// w (1,"http://toolserver.org/~luxo/Geburtstag.php",'GK',qbtarget,'Wikipedia Geburtstagskalender');
	w (1,"//tools.wmflabs.org/wiki-todo/?language=de",'2Do',qbtarget,'Wikipedia ToDo');
	// w (1,"http://toolserver.org/~aka/cgi-bin/reviewcnt.cgi",'RCt',qbtarget,'Sichtungsstatistik');

	if (isArticle) {
		w (1,"http://stats.grok.se/de/"+WPDatum5+ptitle,'ASt',qbtarget,'Wikipedia article traffic statistics');
		// w (1,"http://toolserver.org/~mzmcbride/cgi-bin/watcher.py?db=dewiki_p&titles="+pesctitle,'AWa',qbtarget,'Watcher');
		// w (1,"http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=de&wikifam=.wikipedia.org&page="+pesctitle+"&since=&until=&grouped=on&order=-rev_timestamp&max=100&order=-rev_timestamp&format=html",'ACnt',qbtarget,'Beiträge zu diesem Artikel');
		w (1,"//tools.wmflabs.org/wikihistory/wh.php?page_title="+pesctitle+"&lang=de",'AHst',qbtarget,'WikiHistory (APPER)');
	}
	if (rechtschreibpruefung && !isSpecial && (isArticle || RPonAllPages))
		w (4,"javascript:window.spellcheck();","SpellChk",'','Rechtschreibprüfung');
}

function qbCategoryTools() {
	if (!isCategory) return;

	w (0,trenner,'Kategorie-Tools','');

	// w (1,"http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=de&wikifam=.wikipedia.org&basecat="+spesctitle+"&userlang=de",'K:Scan',qbtarget,'Kategorie: CatScan');

	w (1,"//tools.wmflabs.org/catscan2/quick_intersection.php?lang=de&project=wikipedia&cats="+spesctitle+"&ns=0&depth=12&max=30000&start=0&format=html&redirects=&callback=",'K:Scan',qbtarget,'Kategorie: CatScan');
	w (1,"//tools.wmflabs.org/catscan2/catscan2.php?depth=3&categories="+spesctitle+"&interface_language=de&doit=1",'K:Scan2',qbtarget,'Kategorie: CatScan 2.0');
	// w (1,"//tools.wmflabs.org/erwin85/categorycount.php?lang=de&family=wikipedia&namespaces=0&category="+spesctitle+"&subcats=1&d=100&submit=Submit",'K:Count',qbtarget,'Kategorie: Anzahl der Artikel');
	// w (1,"http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=de&wikifam=.wikipedia.org&basecat="+spesctitle+"&basedeep=5&mode=rc&hours=168&onlynew=on&userlang=de&go=Scannen",'K:NeuA',qbtarget,'Kategorie: Neue Artikel');
	// w (1,"http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=de&wikifam=.wikipedia.org&basecat="+spesctitle+"&basedeep=5&mode=cs&tagcat=Wikipedia%3AL%C3%B6schkandidat&tagdeep=1&userlang=de&go=Scannen",'K:LA',qbtarget,'Kategorie: Artikel mit Löschantrag');
	w (1,"//tools.wmflabs.org/missingtopics/?language=de&project=wikipedia&article=&category="+spesctitle+"&depth=5&wikimode=0&limitnum=1&doit=Run",'K:Miss',qbtarget,'Kategorie: Fehlende Artikel');
	w (1,"//tools.wmflabs.org/sighting/deep_out_of_sight.php?category="+spesctitle+"&depth=9",'K:NeuE',qbtarget,'Kategorie: Nachzusichtende Artikel');
	w (1,"//tools.wmflabs.org/sighting/deep_insight.php?category="+spesctitle+"&depth=9",'K:UsP',qbtarget,'Kategorie: Erstzusichtende Artikel');
}

function qbImageTools() {
	if (!isFile) return;

	w (0,trenner,'Bild-Tools','');

	w (1,"//tools.wmflabs.org/commonshelper/?interface=de&lang=de&project=wikipedia&image="+spesctitle+"&doit='Text generieren'",'D:M2C',qbtarget,'Datei: Move-to-commons-Assistent');
	// w (1,"http://toolserver.org/~luxo/reworkhelper/index.php?image="+pesctitle,'D:RWH',qbtarget,'Datei: Reworkhelper');

	w (1,"http://commons.wikimedia.org/wiki/Special:Upload",'C-Up',qbtarget,'Commons-Upload');
	// w (1,"http://toolserver.org/~daniel/WikiSense/CommonsClash.php?wikilang=de&wikifam=.wikipedia.org&order=img_name&max=200&format=html",'C-C',qbtarget,'CommonsClash');
	w (1,"//tools.wmflabs.org/commonshelper/?interface=de&lang=de&project=wikipedia",'M2C',qbtarget,'Move-to-commons-Assistent');
}

function qbExternTools() {
	w (0,trenner,'Externe Tools','');

	// w (1,"http://www.copyscape.com",'CopySc',qbtarget,'CopyScape');
	// w (1,"http://toolserver.org/~revvar/urv.php",'URV?',qbtarget,'URV-Suche');
	w (1,"http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?search="+pesctitle+"&timeout=300&minor=1",'GWS',qbtarget,'GlobalWikiSearch');
	w (1,"http://wikipedia.ramselehof.de/wikiblame.php?article="+pesctitle+"&user_lang=de&skipversions=2&ignorefirst=3&limit=250&searchmethod=lin",'WBlame',qbtarget,'Wikiblame');
	w (1,"http://vs.aka-online.de/cgi-bin/wppagehiststat.pl?lang=de&page="+pesctitle,'WPHS',qbtarget,'Seitenstatistik');
	// w (1,"http://www.itp.uni-hannover.de/~krohn/wscan.html.utf8",'Krohn',qbtarget,'Krohn');

	// w (1,"http://toolserver.org/~arnomane/cgi-bin/WP-autoreview.pl?l=de&do_typo_check=ON&Go%21=Go%21&lemma="+pesctitle,'AR',qbtarget,'AutoReview');
	// w (1,"http://toolserver.org/~timl/cgi-bin/wikilint?l=de&do_typo_check=ON&remove_century=ON&url=http://de.wikipedia.org/wiki/"+pesctitle,'WL',qbtarget,'WikiLint (Autoreviewer)');

	// w (1,"http://www.canoo.net",'Canoo',qbtarget,'Canoo');
	w (1,"http://www.cia.gov/cia/publications/factbook/index.html",'FactB',qbtarget,'CIA World Factbook');
	w (1,"http://www.retrobibliothek.de/retrobib/suche.html",'rbib',qbtarget,'retro-bib (u. a. Meyers Konversationslexikon 1888)');

	if (isArticle) {
		w (1,"http://www.zeno.org/Zeno/0/Suche?&q=" + spesctitlelookup + "&h=1",'Zeno',qbtarget,'Verschiedene Lexika bei zeno.org');
	} else {
		w (1,"http://www.zeno.org/Bibliothek",'Zeno',qbtarget,'Verschiedene Lexika bei zeno.org');
	}

	w (1,"http://www.ddb.de",'DNB',qbtarget,'Deutsche Nationalbibliothek');

	if (isArticle) {
		var personlemma = quickEscape(this.personlemma,1);
		w (1,"http://dispatch.opac.d-nb.de/DB=4.1/CMD?ACT=SRCHA&IKT=8514&SRT=YOP&TRM="+personlemma,'DNB-GND',qbtarget,'DNB (GND-Suche)');
		w (1,"http://swb2.bsz-bw.de/DB=2.104/SET=2/TTL=2/CMD?ACT=SRCHA&IKT=1&TRM="+personlemma,'OGND-GND',qbtarget,'OGND (GND-Suche)');
	} else {
		w (1,"http://dnb.ddb.de/",'DNB-GND',qbtarget,'DNB (GND-Suche)');
		w (1,"http://swb2.bsz-bw.de/DB=2.104/SET=2/TTL=2/LNG=DU/START_WELCOME",'OGND-GND',qbtarget,'OGND (GND-Suche)');
	}

	w (1,"http://www.ubka.uni-karlsruhe.de/kvk.html",'KVK',qbtarget,'Karlsruher Virtueller Katalog');
	w (1,"//tools.wmflabs.org/isbn/IsbnCheckAndFormat?Language=Deutsch&FormatOnlyRaw=no&Test=http%3A%2F%2Fswb.bsz-bw.de%2FDB%3D2.1%2FCMD%3FACT%3DSRCHA%26IKT%3D1007%26TRM%3DMAGIC",'ISBN',qbtarget,'ISBN Checker/Formatter');
	// w (1,"http://mdz10.bib-bvb.de/~ndb/ndbmaske.html",'A/NDB',qbtarget,'Allgemeine/Neue Deutsche Biographie');
	w (1,"http://www.deutsche-biographie.de/",'A/NDB',qbtarget,'Allgemeine/Neue Deutsche Biographie');
	// w (1,"http://bse.sci-lib.com/",'Бсэ',qbtarget,'Большая советская энциклопедия');
	w (1,"http://encycl.yandex.ru/dict/bse",'Бсэ',qbtarget,'Большая советская энциклопедия');
	w (1,"http://wikyrilliza.visuelya.de/index.php",'Вик',qbtarget,'Wikyrilliza');
	w (1,"http://www.mcaviglia.ch/gmap/get_coor_ext.asp?l=de",'Coord',qbtarget,'Get Coordinates');
}

function qbEditTags() {
	if (isFile || !isEdit) return;

	w (0,trenner,'Editierhilfen','');

	w (3,"br,'',''",'br','','Zeilenumbruch');
	w (3,"'&','nbsp;',''",'nbsp','','Geschütztes Leerzeichen');
	w (3,"'†','',''",'†','','Kreuz');
	// w (3,"'—','',''",'—','','Geviertstrich (Spiegelstrich)');
	w (3,"'–','',''",'–','','Halbgeviertstrich (Gedankenstrich)');
	// w (3,"'-','',''",'-','','Viertelgeviertstrich (Bindestrich)');
	// w (3,"'−','',''",'−','','Minuszeichen');
	w (3,"'→','',''",'→','','Pfeil nach rechts');
	w (3,"'←','',''",'←','','Pfeil nach links');
	w (3,"'<!-- ',' -->',''",'// comment','','<!--Kommentar-->');
	w (3,"'„','“',''",'„“','','Anführungszeichen');
// </nowiki>
	w (3,"'<nowiki>','</nowiki>',''",'Nowiki','','<nowiki>');
	w (3,"'<code><nowiki>','</nowiki></code>',''",'Code','','<code+nowiki>');
	w (3,"'<onlyinclude>','</onlyinclude>',''",'OIncl','','<onlyinclude>');
// <nowiki>
	w (3,"'<span class=\\u0022plainlinks\\u0022>','</span>',''",'Plain','','Plain Link');
	w (3,"'<small>','</small>',''",'<small>small</small>','','Klein');
	w (3,"'<s>','</s>',''",'<s>strike</s>','','Durchstreichen');
	w (3,"'<u>','</u>',''",'<u>under</u>','','Unterstreichen');

	w (3,"'<ref>','</ref>',''",'<small>[ref]</small>','','Referenz');
	w (3,"'<ref name=\\u0022name\\u0022>','</ref>',''",'<small>[refN]</small>','','Referenz-Name');
	w (3,"'<ref name=\\u0022name\\u0022 />','',''",'<small>[refR]</small>','','Referenz-Name-Wiederholung');
	// w (3,"'<ref group=\\u0022name\\u0022>','</ref>',''",'<small>[refG]</small>','','Referenz-Gruppe');
	// w (3,"'<ref group=\\u0022name\\u0022 name=\\u0022name\\u0022>','</ref>',''",'<small>[refGN]</small>','','Referenz-Gruppe-Name');

	w (3,"'{{lang|ru|','}}',''",'ru','','Russisch');
	w (3,"'{{HeS|','}}<!--x-->',''",'HeS','','Hebräisch (mit Bidi-Stopper)');

	w (3,"'<math>','</math>',''",'Math');
	w (3,"':<math>\\u005Cmathrm{','}</math>',''",'ChemForm');

	w (3,"'\\n{{Kasten|1=',' " + usersignature + "}}\\n',''","Kast",'','Kasten');

// temporary
	w (3,"'{{SortKeyName|','|nl=1}}',''",'SKN','','SortKeyName');

}

function qbArticleTemps() {
	if (isFile || !isEdit) return;
	var personlemma = tagEscape(this.personlemma);
	var spagetitle  = tagEscape(this.spagetitle);

	w (0,trenner,'Artikelbausteine','');

	w (3,"'== Einzelnachweise ==\\n<references />\\n','',''",'Refs','','== Einzelnachweise ==');
	w (3,"'== Literatur ==\\n','',''",'Lit','','== Literatur ==');
	w (3,"'== Weblinks ==\\n','',''",'Web','','== Weblinks ==');

	w (3,"'{{Commonscat}}\\n','',''",'ComC','','Commonscat');

	w (3,"'[[Kategorie:',']]\\n',''","Kat:",'','[[Kategorie:]]');
	w (3,"'{{DEFAULTSORT:" + quickEscape(personlemma,2) + "}}\\n','',''","DefSrt",'','{{DEFAULTSORT:');
	w (3,"'[[Benutzer:',']]',''","User:",'','[[Benutzer:]]');
	w (3,"'[[Wikipedia:',']]',''","WP:",'','[[Wikipedia:]]');

	w (0,br,'','');

	w (3,"'* {{DNB-Portal|','}}\\n',''","DNB-P",'','PND (individualisiert mit Treffern)');
	w (3,"'{{Normdaten|TYP=p|GND=','|LCCN=|NDL=|VIAF=}}\\n',''","ND",'','Normdaten (GND individualisiert)');
	// w (3,"'* {{PNDfehlt|" + refDatumlang + "|','}}\\n',''","PNDF",'','PNDfehlt (nicht individualisiert, aber mit Treffern)');
	w (3,"'{{Normdaten|TYP=p|GND=|LCCN=|NDL=|VIAF=|GNDName=','|GNDfehlt=ja|GNDCheck=" + ndDatum + "|REMARK=}}\\n',''","PNDF",'','PNDfehlt (nicht individualisiert, aber mit Treffern)');

	w (3,"'{{Personendaten\\n|NAME=" + personlemma + "\\n|ALTERNATIVNAMEN=\\n|KURZBESCHREIBUNG=\\n|GEBURTSDATUM=\\n|GEBURTSORT=\\n|STERBEDATUM=\\n|STERBEORT=\\n}}\\n','',''",'PD','','{{Personendaten...');

	w (3,"'* {{ADB|Band|SeiteStart|SeiteEnde|" + personlemma + "|Artikelautor}}\\n','',''","ADB",'','{{ADB...');
	w (3,"'* {{NDB|Band|SeiteStart|SeiteEnde|" + personlemma + "|Artikelautor}}\\n','',''","NDB",'','{{NDB...');
	w (3,"'* {{ÖBL|Band|SeiteStart|SeiteEnde|" + personlemma + "|Artikelautor}}\\n','',''","ÖBL",'','{{ÖBL...');
	w (3,"'* {{HLS|Artikelnummer|" + personlemma + "|Autor=Artikelautor}}\\n','',''","HLS",'','{{HLS...');
	w (3,"'* {{WWW-DDR|Artikelnummer|" + personlemma + "|Artikelautor}}\\n','',''","DDR",'','{{WWW-DDR...');
	w (3,"'* {{BBKL|x/name_x_y|autor=|artikel=" + personlemma + "|band=|spalten=–}}\\n<!-- bitte vollständig ausfüllen -->\\n','',''","BBKL",'','{{BBKL...');
	// w (3,"'* {{RE|Band|SpalteStart|SpalteEnde|" + personlemma + "|Artikelautor|Wikisource-Lemma}}\\n','',''","RE",'','{{RE...');
	// w (3,"'* {{DNP|Band|SpalteStart|SpalteEnde|" + personlemma + "|Artikelautor}}\\n','',''","DNP",'','{{DNP...');

	w (3,"'* {{IMDb|nm','|" + spagetitle + "}}\\n',''","IMDb-n",'','{{IMDb Name...');
	w (3,"'* {{IMDb|tt','|" + spagetitle + "}}\\n',''","IMDb-t",'','{{IMDb Titel...');
	w (3,"'* {{IMDb|co','|" + spagetitle + "}}\\n',''","IMDb-u",'','{{IMDb Unternehmen...');
	w (3,"'* {{OFDb|','|"	+ spagetitle + "}}\\n',''","OFDb",'','{{OFDb...');

	w (0,br,'','');

	w (2,"'','#REDIRECT [[]]',1","Redir",'','#REDIRECT [[]]');
	w (2,"'+Überarbeiten','{{Überarbeiten}}\\n',3","Überarb",'','{{Überarbeiten}}');
	w (2,"'+Quelle','{{Quelle}}\\n',3","Quelle?",'','{{Quelle}}');
	w (2,"'+Lückenhaft','{{Lückenhaft|Es fehlen...}}\\n',3","Lücke","","Lückenhaft");
	// w (2,"'+Rechtshinweis','{{Rechtshinweis}}',2","Recht");
	// w (2,"'+Gesundheitshinweis','{{Gesundheitshinweis}}',2","Gesundh.");
}

function qbMarkupTools() {
	if (isFile || !isEdit) return;

	w (0,trenner,'Markup-Tools','');

	w (4,"addPersData();","AutoPD",'','Automatische Kategorien und Personendaten'); // extern
	w (4,"wpTextReplace();","Replace",'','Suchen und Ersetzen');

	w (4,"ReplaceQuoteSigns();","FixQuote",'','Anführungszeichen korrigieren');  // extern
	w (4,"convertEntities();","FixEnt",'','HTML-Entities entfernen');  // extern
	w (4,"fixDash();","FixDash",'','Striche auf Halbgeviert vereinheitlichen');  // extern
	w (4,"ReplaceMarkup();","FixMark",'','Verschiedene Markup-Korrekturen');  // extern
	w (4,"undate();","UnDate",'','Daten entlinken');
}

function qbImageTemps() {
	if (!isFile || !isEdit) return;

	w (0,trenner,'Bildbausteine','');
	w (4,"nowcomm();","NowCommons",'','NowCommons-Baustein setzen');

	w (2,"'+DÜP','{{Dateiüberprüfung|Quelle|Urheber|Lizenz|Freigabe|Gezeigtes Werk|1923|Besonderer Fall}}\\n\\n',3","DÜP",'','Dateiüberprüfung (bitte überflüssige Parameter entfernen)');
}

function qbUsertalkTemps() {
	if (!isUserpage || !isTalk || !isEdit) return;
	var usersignature = tagEscape(this.usersignature);

	w (0,trenner,'Benutzerbausteine','');

	// w (3,"'{{subst:Benutzer:PDD/Greetings/Hallo|1=" + tagEscape(user) + "}} " + usersignature + "\\n','','','Willkommen!'","Hallo",'','Baustein PDD:Hallo');
	w (3,"'{{subst:Benutzer:PDD/Greetings/HalloG|1=" + tagEscape(user) + "|2=" + usersignature + "}}\\n','','','Willkommen!'","Hallo",'','Baustein PDD:HalloG');
	// w (3,"'{{subst:Begrüßungsbox|1=" + tagEscape(user) + "|2=a}}\\n','','','Willkommen!'","HalloC",'','Baustein Begrüßungsbox');
	w (3,"'{{subst:Benutzer:PDD/Greetings/Danke}} " + usersignature + "\\n','','','Probier doch mal die Spielwiese!'",'Danke','','Baustein PDD:Danke');
	w (3,"'{{subst:Benutzer:LKD/V/VHinweis}}\\n','','','Bitte damit aufhören.'",'Stop','','Baustein LKD/V/VHinweis');
	// w (3,"'{{subst:Benutzer:Blah/Vorlage:Vandale}}\\n','',''",'Vand','','Baustein Blah:Vandale');
	// w (3,"'{{subst:Benutzer:Tobi B./Vorlage:Löschvandale}} " + usersignature + "\\n','',''",'LöschV','','Baustein Tobi B.:Löschvandale');
	w (3,"'{{subst:Benutzer:PDD/Greetings/KinderKinder!}}\\n','',''",'Kind','','Baustein PDD:Kind');
	w (3,"'{{subst:Benutzer:Chaddy/Vorlage:Signaturhinweis}} " + usersignature + "\\n','','','Bitte Diskussionsbeiträge unterschreiben!'",'Sign!','','Signieren nicht vergessen');
	w (3,"'{{subst:Vorschau}}\\n','',''",'Vorschau','','{{subst:Vorschau}}');
	// w (3,"'{{subst:Benutzer:PDD/Greetings/Linkspam}} " + usersignature + "\\n','',''",'Linkspam','','Baustein PDD:Linkspam');
	w (3,"'{{subst:Benutzer:LKD/V/LHinweis}} " + usersignature + "\\n','',''",'Linkspam','','Baustein LKD:Linkspam');
	// w (3,"'{{subst:Benutzer:Complex/Greetings/WP-WEB}} " + usersignature + "\\n','',''",'LinkspamC','','Baustein Complex:WP-WEB'); // Abwandlung von [[Benutzer:LKD/V/LHinweis]]
	if (adminflag)
	  w (3,"'{{subst:Gelöscht|wwni|ka|wer|rel|pov|que|urv|g=ja|art=}} " + usersignature + "\\n','','','Dein Artikel wurde gelöscht. Was nun?'",'SLA-ex','','Autorenbenachrichtigung nach Schnelllöschung');
}

function qbAdminTools() {
	if (!adminflag) return;

	if (isUserMainpage && isEdit) {
		w (0,trenner,'','');
		w (2,"'+Gesperrter Benutzer','{{Gesperrter Benutzer}}',1","BSp",'','Benutzer gesperrt');
		w (2,"'+Offener Proxy','{{Offener Proxy}}',2","OP",'','Offener Proxy');
		w (2,"'+Gesperrte IP','{{IP-Sperrung}}',2","IP-S",'','IP gesperrt');
	}

	if (isRestore) {
		w (0,trenner,'','');
		w (4,"revAllDeletedVersions();","Auswahl umkehren?","","Versionsauswahl umkehren?");
	}
}

function qbAutoTemps() {
	if (isSpecial && !isContrib) return;

	w (0,trenner,'Auto-Bausteine','');

	if (isGeneric && !isSpecial) {
		w (4,"eintragen(1);","QS+","","+Qualitätssicherung");
		w (4,"eintragen(5);","URV+","","+URV");
		w (4,"eintragen(2);","LA+","","+Löschantrag");
	}
	if (( isCategory) && !isSpecial) {
		w (4,"eintragen(7);","KatLA+","","+Löschantrag (Kategorie)");
		w (4,"eintragen(14);","KatMove+","","+Verschiebeantrag (Kategorie)");
	}
	if (isTemplate)  w (4,"eintragen(8);","VorLA+","","+Löschantrag (Vorlage)");
	if (!isSpecial) {
		w (4,"eintragen(3);","SLA+","","+Schnelllöschantrag");
	}

	//if (hinweis) {
	  // if (isGeneric && !isSpecial)  w (4,"hinweis(1);","PH+","","+Portalhinweis");
	  // if (isGeneric && !isSpecial)  w (4,"hinweis(2);","RH+","","+Redaktionshinweis");
	//}
	if (pagetitle === "Wikipedia:Spielwiese") w (4,"eintragen(10);","SPW-Reset","","Spielwiese zurücksetzen");

	if (isContrib || isUserpage) w (4,"eintragen(6);","VANDAL+","","+Vandalismusmeldung (Benutzer)");
	if (isArticle || isCategory) w (4,"eintragen(9);","VANDAL+","","+Vandalismusmeldung (Artikel)");
}

 /*
 * Quickbar-Zusammenbau, Teil 2:
 * zuerst die Reihenfolge der einzelnen Abschnitte:
 */
 
mw.loader.using(['mediawiki.util'], // load modules first
  function () {
	_getUser();
	qbWPIntern();
	qbPatrol();
	qbWartung();
	qbToolserver();
	qbCategoryTools();
	qbImageTools();
	qbExternTools();
	// ab hier keine Dropdowns mehr
	closedropdown();
	dropdown = false;
	// die folgenden werden nur im Edit-Modus eingeblendet
	qbEditTags();
	qbArticleTemps();
	qbMarkupTools();
	qbImageTemps();
	qbUsertalkTemps();
	// der folgende Abschnitt wird nur bei Admins eingeblendet
	qbAdminTools();
	// Automatisches Bausteinsetzen
	qbAutoTemps();

/*
 * hier wird der Quickbar in die Seite geschrieben
 * (ab hier bitte nichts ändern)
 */
	var version = window.version || "?";
	if (!isEdit || zeigeversion || isPHP) {
	  Quickbar += '<div style="text-align:right;font-size:' + qbfontsize + '%;">' +
		(zeigeversion ?
		 ('<a href="#" onclick="amIuptodate()" title="Versionscheck">' + (adminflag ? 'A/' : '') + version + '</a>&nbsp;&nbsp;')
			: '') +
		(!isEdit ?
		 ('<input type="checkbox" id="reloadme" name="reloadme" onchange="setReload()" title="Seite alle ' + (timeout/1000) + ' s neu laden?" style="vertical-align:middle;"/>&nbsp;&nbsp;')
			: '&nbsp;') +
		 '<a href="' + mw.config.get('wgScript') + '?title=Special%3APrefixindex&prefix=' + user +
			 '&namespace=2" target="' + qbtarget + '" title="Meine Seiten im Benutzernamensraum">' +
			 ((user.split(' ')[0].length < 10) ? user.split(' ')[0] + '/.' : 'MyPages') +
		 '</a>' +
		(userbrowser !== "Standard" ?
		 ('&nbsp;&nbsp;<a href="#" onclick="badBrowser()" title="Browser nicht unterstützt">' +
				 userbrowser.charAt(0) + userbrowser.charAt(1) + '!</a>')
			: '') + '</div>';
	}
	Quickbar += '<div style="font-size:' + qbfontsize + '%;margin:0;padding:0 0 2px 2px;"' + ((isVector > '')?' class="mw-body"':'') + '>' + xxx + '</div></div>';
	Quickbar = $( $.parseHTML( Quickbar ) ); // FIXme: in initQuickbar() save as jQuery for later manipulation
	if (scrpt > '') {
		Quickbar.append('<script>function _doopt(was){switch(was){'+scrpt+'};}</script>');
		scrpt = '';
	}

	$('body').append(Quickbar);
	if (isVector > '') // FIXme: Hack for Vector! Need fix in initQuickbar(), .paddingTop is not same!?
		Quickbar.height(Quickbar.outerHeight()-170);
});

//
// ab hier functions
//

function w (was,lurl,linktext,targt,title) {
 title = title || linktext;
 if (!zeigehilfe) title = '';
 if (!dropdown)
  switch (was) {
	case 0 : xxx += lurl;break;
	case 1 : xxx += '<a href="'+lurl+'" target="'+targt+'" title="'+title+'">'+linktext+'</a>&nbsp; ';break;
	case 2 : xxx += '<a href="#" onclick="newtext('+lurl+')" title="'+title+'">'+linktext+'</a>&nbsp; ';break;
	case 3 : xxx += '<a href="#" onclick="insertTagsWrapper('+lurl+')" title="'+title+'">'+linktext+'</a>&nbsp; ';break;
	case 4 : xxx += '<a href="#" onclick="'+lurl+'" title="'+title+'">'+linktext+'</a>&nbsp; ';break;
  }
 //if
 else {//todo: Hilfe bei Dropdowns. Benutzt die überhaupt jemand???
  var ltext = '__________'.substr(1,ind) + linktext;
  switch (was) {
	case 0 : if (lurl===br) {xxx += '<option>'+linktext+'</option>';ind=2;}
			else if (lurl===trenner) newdropdown(linktext);break;
	case 1 : xxx += '<option value="1|'+lurl+'">'+ltext+'</option>';break;
	case 2 : xxx += '<option value="2|'+scrptn+'">'+ltext+'</option>';
			scrpt += 'case '+scrptn+':newtext('+lurl+');break;';scrptn++;break;
	case 3 : xxx += '<option value="3|'+scrptn+'">'+ltext+'</option>';
			scrpt += 'case '+scrptn+':insertTagsWrapper('+lurl+');break;';scrptn++;break;
	case 4 : xxx += '<option value="4|'+scrptn+'">'+ltext+'</option>';
			scrpt += 'case '+scrptn+':'+lurl+';break;';scrptn++;break;
  } //switch
 } //else
} //w

function dodropdown(aktion) {
 var zutun = aktion.split('|');
 var was = Number(zutun[0]);
 var wie = zutun[1];
 switch (was) {
  case 1 : window.open(wie);break;
  default : _doopt(Number(wie));
 } //switch
} //dodropdown

function newdropdown(oname) {
  closedropdown();
  xxx += '<select size=1 onchange="dodropdown(this.value);" style="width:135px;font-size:9px;">';
  if (oname > '') xxx += '<option>'+oname+'</option>';
  indropdown = true;
  ind = 2;
}

function closedropdown() {
 if (indropdown) xxx += '</select>';
 indropdown = false;
}

function newtext(subj,text,wo) {
	//wo=1 : Text austauschen
	//wo=2 : Text am Ende anhängen
	//wo=3 : Text vorne Einfügen
  if (subj > "") {
	 if (summary.value > "")
		summary.value += ", ";
	 summary.value += subj;
  }

  switch (wo) {
	  case 1 : textbox.value = text + '\n';break;
	  case 2 : textbox.value += '\n' + text;break;
	  case 3 : textbox.value = text + '\n' + textbox.value;break;
  }
  textbox.focus();
 }

function insertTagsWrapper(tagOpen, tagClose, sampleText, subj) {
  if (subj > "") {
	 if (summary.value > "") summary.value += ", ";
	 summary.value += subj;
  }
  mw.toolbar.insertTags(untagEscape(tagOpen), untagEscape(tagClose), untagEscape(sampleText));
}

// Krimskrams
function isEven(myNumber) {
	return (myNumber % 2 === 0);
}
function isOdd(myNumber) {
	return (!isEven(myNumber));
}
function LeadingZero(x) {
	return (x >= 10 || x < 0 ? "" : "0") + x;
}
function hasRight(right) {
	var specialrights = false;
	var userrights = mw.config.get('wgUserGroups');
	if (typeof userrights !== 'object') return specialrights;
	if (typeof userrights[0] !== 'string') return specialrights;
	for (i=0;i<userrights.length;i++) {
	  if (userrights[i] === right) specialrights = true;
	}
	return specialrights;
}
function quickEscape(text, esctype) {
  // esctype = 1 -> normal umlaut escapes
  // esctype = 2 -> wikisort umlaut escapes
  text = text.replace(/[ÀÁÂÃÅĀĂĄǍǞǠǺȀȂȦȺḀẠẢẤẦẨẪẬẮẰẲẴẶ]/g, 'A').replace(/[àáâãåāăąǎǟǡǻȁȃȧⱥḁạảấầẩẫậắằẳẵặẚ]/g, 'a')
			 .replace(/[ÆǢǼ]/g, 'Ae').replace(/[æǣǽ]/g, 'ae')
			 .replace(/[ƁƂɃḂḄḆ]/g, 'B').replace(/[ƀƃḃḅḇ]/g, 'b')
			 .replace(/[ÇĆĈĊČƇȻḈ]/g, 'C').replace(/[çćĉċčƈȼḉ]/g, 'c')
			 .replace(/[ÐĎĐƉƊƋḊḌḎḐḒ]/g, 'D').replace(/[ðďđƌȡḋḍḏḑḓ]/g, 'd')
			 .replace(/ȸ/g, 'db')
			 .replace(/[DŽDžDZDz]/g, 'Dz').replace(/[dždz]/g, 'dz')
			 .replace(/[ÈÉÊËĒĔĖĘĚƎƐȄȆȨɆḔḖḘḚḜẸẺẼẾỀỂỄỆ]/g, 'E').replace(/[èéêëēĕėęěǝȅȇȩɇḕḗḙḛḝẹẻẽếềểễệ]/g, 'e')
			 .replace(/[ƑḞ]/g, 'F').replace(/[ƒḟ]/g, 'f')
			 .replace(/[ĜĞĠĢƓƔǤǦǴḠ]/g, 'G').replace(/[ĝğġģǥǧǵḡ]/g, 'g')
			 .replace(/[ĤĦȞⱧⱵḢḤḦḨḪ]/g, 'H').replace(/[ĥħȟⱨⱶḣḥḧḩḫẖ]/g, 'h')
			 .replace(/Ƕ/g, 'Hv').replace(/ƕ/g, 'hv')
			 .replace(/[ÌÍÎÏĨĪĬĮİƖƗǏȈȊḬḮỈỊ]/g, 'I').replace(/[ìíîïĩīĭįıǐȉȋḭḯỉị]/g, 'i')
			 .replace(/IJ/g, 'Ij').replace(/ij/g, 'ij')
			 .replace(/[ĴǰɈ]/g, 'J').replace(/[ĵȷɉ]/g, 'j')
			 .replace(/[ĶƘǨⱩḰḲḴ]/g, 'K').replace(/[ķĸƙǩⱪḱḳḵ]/g, 'k')
			 .replace(/[ĹĻĽĿŁȽⱠⱢḶḸḺḼ]/g, 'L').replace(/[ĺļľŀłƚƛȴⱡḷḹḻḽ]/g, 'l')
			 .replace(/[LJLj]/g, 'Lj').replace(/lj/g, 'lg')
			 .replace(/[ḾṀṂ]/g, 'M').replace(/[ḿṁṃ]/g, 'm')
			 .replace(/[ÑŃŅŇŊƝǸȠṄṆṈṊ]/g, 'N').replace(/[ñńņňʼnŋƞǹȵṅṇṉṋ]/g, 'n')
			 .replace(/[NJNj]/g, 'Nj').replace(/nj/g, 'nj')
			 .replace(/[ÒÓÔÕØŌŎŐƆƟƠǑǪǬǾȌȎȪȬȮȰṌṎṐṒỌỎỐỒỔỖỘỚỜỞỠỢ]/g, 'O').replace(/[òóôõøōŏőơǒǫǭǿȍȏȫȭȯȱṍṏṑṓọỏốồổỗộớờởỡợ]/g, 'o')
			 .replace(/Œ/g, 'Oe').replace(/œ/g, 'oe')
			 .replace(/Ƣ/g, 'Oi').replace(/ƣ/g, 'oi')
			 .replace(/[ƤⱣṔṖ]/g, 'P').replace(/[ƥṕṗ]/g, 'p')
			 .replace(/Ɋ/g, 'Q').replace(/ɋ/g, 'q')
			 .replace(/ȹ/g, 'qp')
			 .replace(/[ŔŖŘȐȒɌⱤṘṚṜṞ]/g, 'R').replace(/[ŕŗřȑȓɍṙṛṝṟ]/g, 'r')
			 .replace(/[ŚŜŞŠƩȘṠṢṤṦṨ]/g, 'S').replace(/[śŝşšſșȿṡṣṥṧṩẛ]/g, 's')
			 .replace(/ß/g, 'ss')
			 .replace(/[ŢŤŦƬƮȚȾṪṬṮṰ]/g, 'T').replace(/[ţťŧƫƭțȶⱦṫṭṯṱẗ]/g, 't')
			 .replace(/Þ/g, 'Th').replace(/þ/g, 'th')
			 .replace(/[ÙÚÛŨŪŬŮŰŲƯǓǕǗǙǛȔȖɄṲṴṶṸṺỤỦỨỪỬỮỰ]/g, 'U').replace(/[ùúûũūŭůűųưǔǖǘǚǜȕȗṳṵṷṹṻụủứừửữự]/g, 'u')
			 .replace(/[ƲṼṾ]/g, 'V').replace(/[ⱴṽṿ]/g, 'v')
			 .replace(/[ŴǷẀẂẄẆẈ]/g, 'W').replace(/[ŵƿẁẃẅẇẉẘ]/g, 'w')
			 .replace(/[ẊẌ]/g, 'X').replace(/[ẋẍ]/g, 'x')
			 .replace(/[ÝŸŶƳȲɎẎỲỴỶỸ]/g, 'Y').replace(/[ýÿŷƴȳɏẏỳỵỷỹẙ]/g, 'y')
			 .replace(/[ŹŻŽƵȤⱫẐẒẔ]/g, 'Z').replace(/[źżžƶȥɀⱬẑẓẕ]/g, 'z');

  if (esctype === 1)
	 text = text.replace(/Ä/g,"Ae").replace(/ä/g,"ae")
				.replace(/Ö/g,"Oe").replace(/ö/g,"oe")
				.replace(/Ü/g,"Ue").replace(/ü/g,"ue")
				.replace(/Ə/g,"Ae").replace(/ə/g,"ae");
  else
	 text = text.replace(/Ä/g,"A").replace(/ä/g,"a")
				.replace(/Ö/g,"O").replace(/ö/g,"o")
				.replace(/Ü/g,"U").replace(/ü/g,"u")
				.replace(/Ə/g,"A").replace(/ə/g,"a");
  return text;
}
function tagEscape(text) {
  return text.replace(/'/g, "%27")
			 .replace(/"/g, "%22");
}
function untagEscape(text) {
  return text.replace(/%27/g, "'")
			 .replace(/%22/g, "\"");
}
function spaceEscape(text) {
  return text.replace(/ /g, "+")
			 .replace(/_/g, "+");
}
// helper functions for getting API timestamp
function getAPItimestamp(dateobject) {
  return (dateobject.getFullYear() * 10000000000) + ((dateobject.getMonth() + 1) * 100000000) + (dateobject.getDate() * 1000000) + (dateobject.getHours() * 10000) + (dateobject.getMinutes() * 100);
}
function getFutureDate() {
  var dateobject = new Date();
  // adding 3 hours to dateobject
  dateobject.setTime(dateobject.getTime() + (3 * 3600 * 1000));
  return (getAPItimestamp(dateobject));
}
function getPastDate() {
  var dateobject = new Date();
  // subtracting 3 days from dateobject
  dateobject.setTime(dateobject.getTime() - (3 * 24 * 3600 * 1000));
  return (getAPItimestamp(dateobject));
}
// </nowiki>
/*
 * 3xImport von [[Benutzer:Revvar]]
 * aus [[Benutzer:Revvar/wikibits.js]] und [[Benutzer:Revvar/monobook.js]]
 */
/**
@description Imports a user javascript page from any Wikipedia project into the actual document.
@version 0.1.3
@date 2007/03/22
@author: based on function importPage from [[:de:User:PDD]]s monobook.js, extended by [[:de:User:Revvar]]
@revision 2. Sep. 2015
@param page Name of the user page without the "user:" prefix and function importJSL without the ".js" appendix
@param lang (optional) Language code of the corresponding wikipedia project. Default is the German project.
@return true on success, false otherwise
**/
// Helper-Function: zum Einbinden der Module <nowiki>
function importPage(page, lang) { // all languages support
	try {
		/* check the parameters and set defaults */
		if(!page) throw("importPage: Missing parameter page.");
		lang = lang || 'de'; // cLang
		/* create import url */
		import_url = '//' + lang + '.wikipedia.org' + sPath + '/index.php?title=User:' + page +
		 '&action=raw&ctype=text/javascript&maxage=86400&smaxage=60&bcache=1&debug=' + debugme;
		mw.loader.load(import_url, 'text/javascript');
		return true;
	} catch(e) {
		alert(e.message);
		return false;
	}
}
// Helper-Function
window.importJavascriptL = // FIXme: replace deprecated name
  window.importJSL = function(page,lang) {
	return importPage(page+'.js',lang);
};

/**
@description Imports a user css page from any Wikipedia project into the actual document.
@version 0.1.1
@date 2007/03/26
@author: based on function importPage from [[:de:User:PDD]]s monobook.js, rewritten by [[:de:User:Revvar]]
@param page Name of the user page without the "user:" prefix and the ".css" appendix
@param lang (optional) Language code of the corresponding wikipedia project. Default is the callers project.
@return true on success, false otherwise
**/
// Helper-Function
function importCSSL(page, lang) {
	try {
		/* check the parameters and set defaults */
		if(!page) throw("importCSSL: Missing parameter page.");
		lang = lang || cLang;
		/* create import url */
		import_url = '//' + lang + '.wikipedia.org' + sPath + '/index.php?title=User:' + page +
		  '.css&action=raw&ctype=text/css&smaxage=0&debug=' + debugme;
		/* import page */
		mw.loader.load( import_url, 'text/css' );
		return true;
	} catch(e) {
		alert(e.message);
		return false;
	}
}

// ***** FOOT-Block *****
// </nowiki> <- nicht löschen!!!

// ausgelagerte obligatorische Funktionen
importJSL('PDD/supportFuncs'); // [[Benutzer:PDD/supportFuncs.js]]
importJSL('PDD/helperFunctions'); // [[Benutzer:PDD/helperFunctions.js]]
importJSL('PDD/eintragen'); // [[Benutzer:PDD/eintragen.js]]
importJSL('PDD/alertOnChanges'); // [[Benutzer:PDD/alertOnChanges.js]]

// obligatorisch nur für editpages
if (isEdit) {
	importJSL('PDD/wpTextReplace'); // [[Benutzer:PDD/wpTextReplace.js]]
	importJSL('BLueFiSH.as/JS/replaceQuoteSigns'); // [[Benutzer:BLueFiSH.as/JS/replaceQuoteSigns.js]]
	importJSL('BLueFiSH.as/JS/markup'); // [[Benutzer:BLueFiSH.as/JS/markup.js]]
	importJSL('PDD/convertEntities'); // [[Benutzer:PDD/convertEntities.js]]
	importJSL('Euku/persDaten'); // [[Benutzer:Euku/persDaten.js]]

	// Signierfunktionen
	if (!isArticle) {
	if (signing) importJSL('Perhelion/signing'); // [[Benutzer:Perhelion/signing.js]]
		if (unsigning) importJSL('Lustiger_seth/unsigned'); // [[Benutzer:Lustiger seth/unsigned.js]]
	}
	// extended search & replace feature
	if (searchbox) importJSL('Zocky/SearchBox','en'); // [[:en:User:Zocky/SearchBox.js]]

	// coordinates: Generierung der Koordinaten-Vorlage
	if (coordinates) importJSL('Dschwen/coordinates'); // [[Benutzer:Dschwen/coordinates.js]]
}

// ausgelagerte optionale Funktionen (Autoload)

// Fliegelflagel-Scriptsammlung
if (fliegelflagel) importJSL('Schnark/js/fliegelflagel'); // [[Benutzer:Schnark/js/fliegelflagel.js]]

// Revert/Loglink-Funktionen: möglichst früh einbinden
// Revert godmode-light
if (godmodelight && !adminflag && !editorflag && !isEdit && !(isSpecial && !isContrib)) {
	importJSL('PDD/godmode-light'); // [[Benutzer:PDD/godmode-light.js]]
}
// Revert addEditAndRevertLinks
if (!(!aerhistory && isHistory) && !isEdit && (editlinkoldversion || revertwithreason)) {
	importJSL('PDD/addEditAndRevertLinks'); // [[Benutzer:PDD/addEditAndRevertLinks.js]]
}
// LogLinks addLogsLink
if (addlogslink && !isSpecial) importJSL('PDD/addLogsLink'); // [[Benutzer:PDD/addLogsLink.js]]

// jetzt alles andere, was optional ist
if (!isSpecial && (addeditintro || addpurge)) importJSL('PDD/modifyCA'); // [[Benutzer:PDD/modifyCA.js]]
// changeBeschriftungen *nach* modifyCA.js (!)
if (beschriftungen) importJSL('PDD/changeBeschriftungen'); // [[Benutzer:PDD/changeBeschriftungen.js]]
if (sperrstatus) importJSL('Stefan/Sperrstatus'); // [[Benutzer:Stefan/Sperrstatus.js]]
if (rechtschreibpruefung && !isSpecial)
	importScript('MediaWiki:Gadget-Rechtschreibpruefung.js'); // can't load with RescoureLoader
if (ippvandalmark && !isEdit) importPage('APPER/IP-Patrol/js'); // [[Benutzer:APPER/IP-Patrol/js]]
if (showredundantlinks && !isSpecial) importJSL('PDD/showRedundantLinks'); // [[Benutzer:PDD/showRedundantLinks.js]]

// Portal- und Redaktionshinweis
if (hinweis) importJSL('DerHexer/hinweise'); // [[Benutzer:DerHexer/hinweise.js]]

// showreftoggle
if (reftoggle && !isSpecial) importJSL('Malte_Schierholz/reftoggle'); // [[Benutzer:Malte Schierholz/reftoggle.js]]

// quickedit
if (qeEnabled) importJSL('ASM/quickedit'); // [[Benutzer:ASM/quickedit.js]]

// RIPE tooltips
if (ripe && !isEdit) importJSL('PDD/tooltips'); // [[Benutzer:PDD/tooltips.js]]

// adddelreason
if (adddelreason && adminflag) importJSL('P.Copp/scripts/adddeletereason'); // [[Benutzer:P.Copp/scripts/adddeletereason.js]]

// dellinknowcommons
if (dellinknowcommons && adminflag && isFile) importJSL('PDD/dellink-nc'); // [[Benutzer:PDD/dellink-nc.js]]

// loescheimer
if (loescheimer && adminflag) importJSL('PDD/modifyLKs'); // [[Benutzer:PDD/modifyLKs.js]]

// Cacycle’s diff
if (cacyclediff && (isDiff || isEdit) ) importJSL('Cacycle/wikEdDiff','en'); // [[:en:User:Cacycle/wikEdDiff.js]]

// Codeispoetrys DupeCheck
if (imgdupecheck && isFile) importJSL('PDD/checkDupes'); // [[Benutzer:PDD/checkDupes.js]]

// P.Copp’s Diffhistory
if (diffhistory) importJSL('P.Copp/scripts/diffhistory'); // [[Benutzer:P.Copp/scripts/diffhistory.js]]

// P.Copp’s Hideduplicatecontribs
if (isContrib && hideduplicatecontribs) importJSL('PDD/hideduplicatecontribs'); // [[Benutzer:PDD/hideduplicatecontribs.js]]

// hideNsLinkSearch.js
if (hidenslinksearch) importJSL('PDD/hideNsLinkSearch'); // [[Benutzer:PDD/hideNsLinkSearch.js]]

// Markierskripte ganz zum Schluss einbinden, da sie innerHTML verändern
if (markerledigt) importJSL('Euku/markErledigt'); // [[Benutzer:Euku/markErledigt.js]]

if (markadmins && action !== "submit" && !isDiff)
	if (!(!mawatchlist && isWatchlist) && !(!macontribs && isContrib))
	  importJSL('PDD/markAdmins'); // [[Benutzer:PDD/markAdmins.js]]

if (markutf8 && !(!muwatchlist && isWatchlist) && !(!mucontribs && isContrib))
	importJSL('PDD/markUTF8'); // [[Benutzer:PDD/markUTF8.js]]

// EOF