//Dokumentation unter ] <nowiki>
mw.libs.deprecated = $.extend(mw.libs.deprecated, {autoantraege: 'Das Skript ] funktioniert zu großen Teilen bereits nicht mehr. Falls du es weiterhin verwenden willst, musst du jemand finden, der die Pflege übernimmt und es an die neue Version von jQuery-UI anpasst.'});
importScript('Benutzer:Schnark/js/deprecated.js');

/*global mw: true */
/*global autosave: true, defaultSLA: true, defaultVandal: true, defaultAVandal: true, usersignature: true *///Abwärtskompatibilität
(function($, libs){

var autoantraege = {
version: 3.6,

zeige_menu: true,   //zeigt Menü mit Anträgen
zeige_revert: true, //zeigt dialogbasierte Revert-Links
zeige_erl: true,    //zeigt Links für {{erledigt}}
zeige_inuse: false, //zeigt Links für {{InuseBot}}

autosave: true,    //automatisch speichern
autosave_override: {},
inform_autor: true, //Autor infomieren?
multiline: true, //Eingabefelder mehrzeilig?
grund_kursiv: true, //(einzeiligen) Grund bei Antrag kursiv
hide_duep: false, //DÜP verstecken
no_alert: false,   //bei Fehlern nicht warnen
sig: '--~~~~',    //Signatur
sauberesig: false, //kann für Signaturen ohne = auf true gesetzt werden
revert_vorsatz: 'Revert: ', //Start der Revertbegründung
//Standard-Gründe
standard_grund: {'qs': ']', 'sla': 'kein Artikel', 'urv': '', 'vm_benutzer': 'vandaliert in ]', 'vm_artikel': 'Edit-War'},

//Benutzer ist Admin (wird automatisch ermittelt)
admin: false,

//Antrags-Seiten (Datum wird ergänzt)
qs_seite: 'Wikipedia:Qualitätssicherung/',
la_seite: 'Wikipedia:Löschkandidaten/',
kat_seite: 'Wikipedia:WikiProjekt_Kategorien/Diskussionen/',
urv_seite: 'Wikipedia:Löschkandidaten/Urheberrechtsverletzungen',
vm_seite: 'Wikipedia:Vandalismusmeldung',

//Hilfsfunktionen
//erstellt einen Wikilink
link: function (titel) {
  return ']';
},
//escapet Text für Vorlagen
escape: function (param) {
  //evt. auch mit geschweiften Klammern aufpassen
  if (param.replace(/\|]+(?:\||]*)?\]\]/g, '').indexOf('|') > -1) param = param.replace(/\|/g, '{{!}}'); //Pipe außerhalb Link, sicherheitshalber alle escapen
  if (param.indexOf('=') > -1 || (param.replace(/~~~~~/g, '').indexOf('~~~') > -1 && !autoantraege.sauberesig)) param = '1=' + param; //= verstecken
  return param;
},
//formatiert Grund
format_grund: function (grund, inVorlage) {
   grund = grund.replace(/\s*$/, '');
   if (inVorlage && autoantraege.grund_kursiv && grund.indexOf('\n') === -1) {
      if (grund.match(/^'/)) grund = '<nowiki' + ' />' + grund;
      if (grund.match(/'$/)) grund += '<nowiki' + ' />';
      grund = "''" + grund + "''";
   }
   grund += ' ' + autoantraege.sig;
   return inVorlage ? autoantraege.escape(grund) : grund;
},

warn_abort: function (typ) {
  if (typ) return;
  if (autoantraege.no_alert) return;
  window.alert('Bitte alle Felder ausfüllen!');
},
warn_edit: function (err, count) {
   if (autoantraege.no_alert) return;
   if (err == 'success') return; //sollte nicht passieren
   if (count > 0 && err == 'nochange') return window.alert('Der Benutzer hat den gewählten Hinweis\n' +
                                                           'bereits auf seiner Diskussionsseite, es wurde nur der Antrag gestellt.\n' +
                                                           'Um den Benutzer musst du dich selber kümmern!');
   if (count > 0) return window.alert('Ein Problem ist aufgetreten, der Antrag wurde nur zur Hälfte gespeichert!');
   if (err == 'nochange') return window.alert('Artikel enthält den gewählten Baustein bereits!');
   window.alert('Artikel wurde bereits gelöscht! (Oder ein Fehler trat auf, Code ' + err + '.)');
},

//ruft callback('Autor', anonym?) auf, Autor ist Urheber der aktuellen Seite
erstautor: function (callback) {
           if (!autoantraege.inform_autor) return callback('', true);
           $.getJSON(mw.util.wikiScript('api'), {action: 'query', prop: 'revisions', titles: mw.config.get('wgPageName'),
                                                 rvlimit: 1, rvdir: 'newer', rvprop: 'user', format: 'json'},
                     function (json) {
                        if (!json || !json.query || !json.query.pages) return callback('', true);
                        var pages = json.query.pages, page;
                        for (var p in pages) page = pages;
                        if (!page || !page.revisions || !page.revisions || !page.revisions.user) return callback('', true);
                        callback(page.revisions.user, page.revisions.anon === '');
                     }
           );
},

//Zeigt ein Dialogfenster (Titel title, Elemente dialog) an,
//überibt die gewählten Parameter an die Funktion list, welche die Liste der notwendigen Bearbeitung liefert,
//die anschließend (automatisch?: as) durchgeführt werden.
exec: function (title, dialog, list, as) {
      if (as === undefined) as = autoantraege.autosave;
      mw.loader.using('jquery.ui', function() { //falls der Server rumtrödelt, muss man warten
         libs.schnark_dialog.show(title, dialog, function (p) {
                libs.autoedit.edit_series(list(p), as, autoantraege.warn_edit, true);
         }, autoantraege.warn_abort);
      }, function() { window.alert('Leider will der Server jquery.ui nicht liefern!'); });
},
standard_dialog: function (label, grund, autor, anon) {
  var dialog = [{type: 'input', name: 'grund', text: label, standard: grund || '',
                 focus: true, multiline: autoantraege.multiline, enter: !autoantraege.multiline}];
  if (autoantraege.inform_autor) {
     dialog.push({type: 'toggle', name: 'inform', text: 'Autor informieren', standard: !anon, list: });
     dialog.push({type: 'input', name: 'autor', text: 'Autor: ', standard: autor, enter: true});
  }
  return dialog;
},
standard_bearb: function (vorlage, noinclude, vorlageExpand, summary, seite, section, hinweisVorlage, p) {
  var bearb = ,
      t1 = '{{ers:' + vorlage + '|' + autoantraege.format_grund(p.grund, true) + '}}\n\n',
      t2 = autoantraege.format_grund(p.grund, false),
      t3 = '{{ers:' + hinweisVorlage + '|' + autoantraege.escape(mw.config.get('wgPageName')) + '}}';
  if (noinclude && mw.config.get('wgPageName').indexOf('Vorlage') > -1) {
     t1 = '<noinclude>' + t1 + '</noinclude>\n';
  }
  bearb.push({change: function (alt) {
                        if (alt.indexOf('{{' + vorlageExpand + '|') > -1) {
                           return false;
                        }
                        return t1 + alt;
                      },
              summary: summary});
  if (section === 'new') {
     bearb.push({title: seite, section: section, summary: autoantraege.link(mw.config.get('wgPageName')), change: t2});
  } else {
     bearb.push({title: seite, section: section,
                 summary: 'Neuer Abschnitt /* ' + autoantraege.link(mw.config.get('wgPageName')) + ' */',
                 change: function (alt) {
                           return alt + '\n\n== ' + autoantraege.link(mw.config.get('wgPageName')) + ' ==\n' + t2;
                 }
                });
  }
  if (p.inform) {
     bearb.push({title: 'Benutzer Diskussion:' + p.autor,
                 summary: 'Neuer Abschnitt /* ' + autoantraege.link(mw.config.get('wgPageName')) + ' */',
                 change: function (alt) {
                            if (alt === '') return t3;
                            return alt + '\n\n' + t3;
                 }, create: true});
  }
  return bearb;
},

//einzelne Funktionen zum Stellen der Anträge
execute: {
'qs':  function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Qualitätssicherung', autoantraege.standard_dialog('QS-Grund: ', grund, autor, anon), function (p) {
             return autoantraege.standard_bearb('QS', true, 'QS-Antrag', 'QS+', autoantraege.qs_seite, 'new', 'QS-Hinweis', p);
          }, as);
      });
},
'fach-qs':
       function (grund, as) {
       var list = [
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   
                  ];
       var dialog = [{type: 'select', name: 'fach', list: list, text: 'Portal etc.: '},
                     {type: 'input', name: 'grund', text: 'QS-Grund: ', standard: grund || '', multiline: autoantraege.multiline, enter: !autoantraege.multiline}];
       autoantraege.exec('Fach-QS', dialog, function (p) {
          var bearb = ,
              t1 = '{{' + p.fach.replace(/\|.*$/, '') + '}}\n\n';
          if (mw.config.get('wgPageName').indexOf('Vorlage') > -1) t1 = '<noinclude>' + t1 + '</noinclude>\n';
          bearb.push({change: function (alt) {return t1 + alt;}, summary: p.fach.replace(/\|.*$/, '') + '+'});

          var t2 = autoantraege.format_grund(p.grund, false);
          bearb.push({title: p.fach.replace(/^.*\|/, ''), section: 'new', summary: autoantraege.link(mw.config.get('wgPageName')), change: t2});

          return bearb;
       }, as);
},
'la':  function (grund, as) {
       var f;
       switch (mw.config.get('wgNamespaceNumber')) {
       case 0: if (mw.config.get('wgPageName').indexOf('Liste_') === 0) f = 'la_liste'; else f = 'la_artikel'; break;
       case 2: f = 'la_benutzer'; break;
       case 10: f = 'la_vorlage'; break;
       case 14: f = 'la_kat'; break;
       default: f = 'la_meta';
       }
       autoantraege.execute(grund, as);
},
'la_artikel':
       function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Löschantrag', autoantraege.standard_dialog('LA-Grund: ', grund, autor, anon), function (p) {
             return autoantraege.standard_bearb('LA', false, 'Löschantragstext', 'LA+', autoantraege.la_seite, 'new', 'LD-Hinweis', p);
          }, as);
      });
},
'la_xxx': function (grund, as, typ) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Löschantrag (' + typ + ')', autoantraege.standard_dialog('LA-Grund: ', grund, autor, anon), function (p) {
             return autoantraege.standard_bearb('LA', false, 'Löschantragstext', 'LA+', autoantraege.la_seite, {title: typ + 'n'}, 'LD-Hinweis', p);
          }, as);
      });
},
'la_liste':
       function (grund, as) { autoantraege.execute.la_xxx(grund, as, 'Liste'); },
'la_vorlage':
       function (grund, as) {autoantraege.execute.la_xxx(grund, as, 'Vorlage'); },
'la_kat':
       function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Löschantrag (Kategorie)', autoantraege.standard_dialog('LA-Grund: ', grund, autor, anon), function (p) {
             var bearb = ,
                 t1 = '{{ers:LA|' + autoantraege.format_grund(p.grund, true) + '}}\n\n';
             bearb.push({change: function (alt) {
                                    if (alt.indexOf('{{Löschantragstext|') > -1) return false;
                                    return t1 + alt;
                                 },
                         summary: 'LA+'});

             var t2 = autoantraege.format_grund(p.grund);
             bearb.push({title: autoantraege.kat_seite, section: 'new', summary: autoantraege.link(mw.config.get('wgPageName')), change: t2});

             if (p.inform) {
                var t3 = '{{ers:LD-Hinweis|' + autoantraege.escape(mw.config.get('wgPageName')) + '}}';
                bearb.push({title: 'Benutzer Diskussion:' + p.autor, summary: 'Neuer Abschnitt /* ' + autoantraege.link(mw.config.get('wgPageName')) + ' */',
                            change: function (alt) {
                                       if (alt === '') return t3;
                                       return alt + '\n\n' + t3;
                            }, create: true});
             }
             return bearb;
             }, as);
      });
},
'la_benutzer':
       function (grund, as) { autoantraege.execute.la_xxx(grund, as, 'Benutzerseite'); },
'la_meta':
       function (grund, as) { autoantraege.execute.la_xxx(grund, as, 'Metaseite'); },
'sla': function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          grund = grund || '';
          if (grund.match(/^+$/)) grund = Number(grund);
          if (grund == 'kein Artikel') grund = 0;

          var list = ] und/oder ]',
                       'kein ausreichender Artikel und/oder<br />kein enzyklopädischer Inhalt'],
                      ] vorhanden',
                       'Offensichtlich keine enzyklopädische Relevanz vorhanden'],
                      ]', 'Reiner Werbeeintrag'],
                      ] bei gleichzeitig fehlender Qualität',
                       'mögliche URV bei gleichzeitig fehlender Qualität'],
                      ,
                      ]', 'Seiteninhalt war Unsinn (mit Link auf WP:VAND)'],
                      ]',
                       'Unerwünschte Wiederanlage einer gelöschten Seite'],
                      ]', 'Unnötige bzw. unerwünschte Weiterleitung']];
          if (mw.config.get('wgNamespaceNumber') % 2 == 1) {
             list.unshift(
                      ,
                      ]', 'keine regelkonformen Diskussionsbeiträge']);
             if (typeof grund == 'number') grund += 2;
          } else if (mw.config.get('wgNamespaceNumber') == 2) {
             list.unshift(]', 'Missachtung der Benutzernamensraum-Konventionen']);
             if (typeof grund == 'number') grund += 1;
          }

          var dialog = [{type: 'select_other', name: 'grund', other: 'Sonstiger Grund', text: 'SLA-Grund: ', list: list,
                         standard: grund, html: true, focus : true, multiline: autoantraege.multiline, enter: !autoantraege.multiline}];
          if (autoantraege.inform_autor) {
             //TODO : ausbauen
             var vorl_list = ,
                              ,
                              ,
                              ];
             dialog.push({type: 'toggle', name: 'inform', text: 'Autor informieren', standard: !anon, list: });
             dialog.push({type: 'input', name: 'autor', text: 'Autor: ', standard: autor, enter: true});
             dialog.push({type: 'select', name: 'vorlage', text: 'Vorlage: ', list: vorl_list, html: true});
          }
          if (autoantraege.admin) dialog.push({type: 'toggle', name: 'del', text: 'direkt löschen', standard: true, list: });

          autoantraege.exec('Schnelllöschantrag', dialog, function (p) {
             var bearb = ;
             if (p.del) {
                bearb.push({summary: p.grund.replace(/\s+/g, ' '), edit: 'del'});
             } else {
                var t1 = '{{löschen|' + autoantraege.format_grund(p.grund, true) + '}}\n\n';
                if (mw.config.get('wgPageName').indexOf('Vorlage') > -1) t1 = '<noinclude>' + t1 + '</noinclude>\n';
                bearb.push({change: function (alt) {
                                       if (alt.indexOf('{{löschen') > -1) return false;
                                       if (alt.indexOf('{{Löschen') > -1) return false;
                                       if (alt.indexOf('{{SLA') > -1) return false;
                                       return t1 + alt;
                                    },
                            summary: 'SLA+'});
             }
             if (p.inform) {
                if (p.vorlage == 'Gelöscht') {
                   if (p.grund == ']') p.vorlage = 'Unsinn gelöscht';
                   if (/tastaturtest/i.test(p.grund)) p.vorlage = 'Tastaturtest';
                }
                var t2 = '{{ers:' + p.vorlage;
                if (p.vorlage == 'Gelöscht') {
                   var param = '';
                   if (/redundan|(?:schon|bereits).+vorhanden/i.test(p.grund)) param += '|red';
                   if (/wiederg(?:ä|ae)nger/i.test(p.grund)) param += '|wh';
                   if (/wwni/i.test(p.grund)) param += '|wwni';
                   if (/werb(?:ung|e)/i.test(p.grund)) param += '|wer';
                   if (/kein.+artikel/i.test(p.grund)) param += '|ka';
                   if (/falsche\s+sprache/i.test(p.grund)) param += '|lang';
                   if (mw.config.get('wgNamespaceNumber') % 2 == 1) param += '|disk';
                   if (mw.config.get('wgNamespaceNumber') == 2) param += '|bnr';
                   if (/relevan/i.test(p.grund)) param += '|rel';
                   if (/theoriefindung|\btf\b|theorieetablierung|begriffsbildung|begriffsfindung|quellenlos/i.test(p.grund)) param += '|tf';
                   if (/\bpov\b|neutral/i.test(p.grund)) param += '|pov';
                   if (/(?:selbst|eigen)darstell|interessens?konflikt/i.test(p.grund)) param += '|sd';
                   t2 += param + '|art=' + mw.config.get('wgPageName');
                }
                t2 += '}}';
                if (p.vorlage == 'Gelöscht' || p.vorlage == 'Unsinn gelöscht') t2 += ' ' + autoantraege.sig;
                var t3 = 'Hinweis';
                switch (p.vorlage) {
                case 'Gelöscht': t3 = 'Neuer Abschnitt /* Schnelllöschung deines Eintrags „' + autoantraege.link(mw.config.get('wgPageName')) + '“ */'; break;
                case 'Tastaturtest': t3 = 'Neuer Abschnitt /* Deine Bearbeitung */'; break;
                }
                bearb.push({title: 'Benutzer Diskussion:' + p.autor, summary: t3, create: true,
                            change: function (alt) {
                                       if (p.vorlage == 'Tastaturtest' && /„Artikel“/.test(alt)) return false;
                                       if (p.vorlage == 'Test' && /Test/.test(alt)) return false;
                                       if (/tophand\.svg/.test(alt)) return false;
                                       if (/letzte.+warnung/i.test(alt)) return false;
                                       if (alt === '') return t2;
                                       return alt + '\n\n' + t2;
                            }
                           });
             }
             return bearb;
             }, as);
       });
},
'kat_versch':
       function (grund, as) {
       autoantraege.exec('Kategorieverschiebung', [{type: 'input', name: 'neu', text: 'Neue Kategorie: ',
                                                                   standard: mw.config.get('wgPageName').replace(/^Kategorie:/, ''), focus: true},
                                                   {type: 'input', name: 'grund', text: 'Grund: ', standard: grund || '',
                                                    multiline: autoantraege.multiline, enter: !autoantraege.multiline}], function (p) {
              return [{change: function (alt) {
                                  if (alt.indexOf('{{Umbenennungstext|') > -1) return false;
                                  return '{{ers:Umbenennen|' + autoantraege.escape(p.neu) + '}}\n\n' + alt;
                               },
                       summary: 'Umbenennungsantrag'},
                      {title: autoantraege.kat_seite, section: 'new',
                       summary: autoantraege.link(mw.config.get('wgPageName')) + ' nach ' + autoantraege.link('Kategorie:' + p.neu),
                       change: autoantraege.format_grund(p.grund, false)}];
       }, as);
},
'urv': function (grund, as) {
       autoantraege.erstautor(function (autor, anon) {
          autoantraege.exec('Urheberrechtsverletzung', autoantraege.standard_dialog('Quelle: ', grund, autor, anon), function (p) {
             var bearb = ,
                 t1 = '{{URV}}\n\n' + autoantraege.format_grund(p.grund, false);
             bearb.push({change: function (alt) {
                                    if (alt.indexOf('{{URV}}') > -1) return false;
                                    return t1;
                                 },
                         summary: 'URV'});

             var t2 = '\n# ' + autoantraege.link(mw.config.get('wgPageName')) + ' von ' + autoantraege.format_grund(p.grund, false);
             bearb.push({title: autoantraege.urv_seite, section: 'last', summary: '+' + autoantraege.link(mw.config.get('wgPageName')),
                         change: function (alt) { return alt + t2; }});

             if (p.inform) {
                var url = p.grund;
                url = url.replace(/^.*?\]+).*$/, '$1'); //quick and dirty
                var t3 = '{{ers:URV-Hinweis|' + autoantraege.escape(mw.config.get('wgPageName')) + '|' + autoantraege.escape(url).replace(/^1=/, '2=') + '}}';
                bearb.push({title: 'Benutzer Diskussion:' + p.autor,
                            summary: 'Neuer Abschnitt /* Mögliche Urheberrechtsverletzung in ' + autoantraege.link(mw.config.get('wgPageName')) + ' */',
                            change: function (alt) {
                              if (alt === '') return t3;
                              return alt + '\n\n' + t3;
                            }, create: true});
             }
             return bearb;
             }, as);
      });
},
'vm_artikel':
       function (grund, as) {
       var dialog = [{type: 'input', name: 'grund', text: 'Grund: ', standard: grund || '',
                      focus: true, multiline: autoantraege.multiline, enter: !autoantraege.multiline}];
       if (autoantraege.admin) {
          dialog.push({type: 'toggle', name: 'sperren', text: 'direkt sperren', standard: true, list: });
          dialog.push({type: 'input', name: 'dauer', text: 'Sperrdauer: ', standard: '1 month', enter: true});
          dialog.push({type: 'toggle', name: 'sysop', text: 'Vollsperre', standard: false, list: });
       }
       autoantraege.exec('Bitte um Seitensperrung', dialog, function (p) {
              if (p.sperren) {
                 return ;
              } else {
                 return [{title: autoantraege.vm_seite, section: 'new',
                          change: '{{Artikel|' + autoantraege.escape(mw.config.get('wgPageName')) + '}} ' + autoantraege.format_grund(p.grund, false),
                          summary: 'Artikel: ' + autoantraege.link(mw.config.get('wgPageName'))}];
              }
       }, as);
},
'vm_benutzer':
       function (grund, as) { //TODO admin
       autoantraege.exec('Bitte um Benutzersperrung', [{type: 'input', name: 'grund', text: 'Grund: ', standard: grund || '',
                                                        focus: true, multiline: autoantraege.multiline, enter: !autoantraege.multiline}], function (p) {
             var name = mw.config.get('wgTitle');
             if (mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') name = $('').val();
             return [{title: autoantraege.vm_seite, section: 'new',
                     change: '{{Benutzer|' + autoantraege.escape(name) + '}} ' + autoantraege.format_grund(p.grund, false),
                     summary: ']'}];
       }, as);
},
'duep':
       function (grund, as) {
       var s = , i;
       var list = ,
                   ,
                   ,
                   ,
                   ,
                   ];
       for (i = 0; i < list.length; i++) list += ' (' + list + ')';
       if (grund) {
          s = grund.replace(//g, '').replace(/q/i, '0').replace(/u/i, '1').replace(/l/i, '2').replace(/f/i, '3').replace(/g/i, '4').replace(/b/i, '5')
                   .replace(//g, '').split('');
          for (i = 0; i < s.length; i++) s = Number(s);
       }
       autoantraege.exec('Dateiüberprüfung', , function (p) {
              return [{change: function (alt) {
                                  if (alt.indexOf('{{Dateiüberprüfung|') > -1) return false;
                                  if (alt.indexOf('{{DÜP|') > -1) return false;
                                  return alt + '\n{{Dateiüberprüfung|'+ p.duep.join('|') + '}}'; },
                       summary: 'Dateiüberprüfung'}];
       }, as);
},
'b_warn':
       function (grund, as) {
       var list = ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ];
       for (var i = 0; i < list.length; i++) {
           var e = list;
           list = , e, e];
       }
       autoantraege.exec('Warnung an den Benutzer', , function (p) {
              return [{change: function (alt) {
                                  var v = '{{ers:' + p.v + '}}';
                                  if (alt === '') return v;
                                  return alt + '\n\n' + v;
                               },
                       summary: 'Hinweis', create: true}];
       }, as);
},
'b_hinweis':
       function (grund, as) {
       var list = ,
                   ,
                   //Begrüßung, HalloIP
                   ,
                   ,
                   ,
                   ];
       for (var i = 0; i < list.length; i++) {
           var e = list;
           list = , e, e];
       }
       autoantraege.exec('Hinweis für den Benutzer', , function (p) {
              return [{change: function (alt) {
                                  var v = '{{ers:' + p.v + '}}';
                                  if (alt === '') return v;
                                  return alt + '\n\n' + v;
                               },
                       summary: 'Hinweis', create: true}];
       }, as);
},
'b_hinweis_a':
       function (grund, as) {
       var list = ,
                   ,
                   ,
                   ,
                   ];
       for (var i = 0; i < list.length; i++) {
           var e = list;
           list = , e, e];
       }
       autoantraege.exec('Hinweis für den Benutzer', [{type: 'select', name: 'v', text: 'Hinweisvorlage: ', list: list},
                                                      {type: 'input', name: 'a', text: 'Betroffener Artikel: ', enter: true}], function (p) {
              var param = p.a, url = '';
              if (p.v == 'URV-Hinweis') {
                 param = param.replace(/\|.*$/, '');
                 url = p.a.replace(/^.*?\|/, '');
                 url = '|' + autoantraege.escape(url).replace(/^1=/, '2=');
              }
              return [{change: function (alt) {
                                  var v = '{{ers:' + p.v + '|' + autoantraege.escape(param) + url + '}}';
                                  if (alt === '') return v;
                                  return alt + '\n\n' + v;
                               },
                       summary: 'Hinweis', create: true}];
       }, as);
}
},

//grund optional, kompatibel mit PDD
eintragen: function (typ, grund, as) {
  typ = typ.toString();
  var pdd = //Kompatibilität mit PDD
  {'1': 'qs', '2': 'la', '3': 'sla', '5': 'urv', '6': 'vm_benutzer', '7': 'la_kat', '8': 'la_vorlage', '9': 'vm_artikel', '11': 'kat_versch'};

  if (typ in pdd) typ = pdd;
  if (!(typ in autoantraege.execute)) return window.alert('Falscher Parameter!');

  if (typeof grund != 'string') grund = '';
  if (grund === '') grund = autoantraege.standard_grund;
  if (typeof grund != 'string') grund = '';

  if (as === undefined) as = autoantraege.autosave_override;
  if (as === undefined) as = autoantraege.autosave;

  autoantraege.execute(grund, as);
},

//revertiert
revert: function (param, as) {
  if (as === undefined) as = autoantraege.autosave_override.revert;
  if (as === undefined) as = autoantraege.autosave;

  //TODO
  var list = ]', 'Vandalismus (mit Link)'],
              ]) und künftig den Hinweis „]“ nutzen.', 'Bitte inhaltliche Änderungen mit Fundstellen/Belegen/Quellen begründen (siehe auch WP:BLG) und künftig den Hinweis „Zusammenfassung und Quellen“ nutzen.'],
              ].', 'Weblink bietet keine weiterführenden lexikographischen Informationen.'],
              ]“ beachten.', 'Beitrag nicht von enzyklopädischer Textqualität. Bitte „Wie schreibe ich einen guten Artikel“ beachten.']];
  var list2 = ,
               ,
               ];
  var dialog = ;
  if (autoantraege.inform_autor) {
     dialog.push({type: 'toggle', name: 'warn', text: 'Benutzer verwarnen', standard: param.user ? true : false, list: });
     dialog.push({type: 'input', name: 'user', text: 'Benutzer: ', standard: param.user || '', enter: true});
     dialog.push({type: 'select', name: 'vorlage', text: 'Verwarnung: ', list: list2});
  }
  autoantraege.exec('Rückgängig machen', dialog, function (p) {
      var bearb = ;
      if (p.warn) {
         if (p.vorlage == 'VM') {
            bearb.push({title: autoantraege.vm_seite, section: 'new',
                        change: '{{Benutzer|' + autoantraege.escape(p.user) + '}} Siehe {{Artikel|' + mw.config.get('wgPageName') + '}} und meinen Revert „' +
                                p.grund + '“ ' + autoantraege.sig, summary: ']'});
         } else {
            bearb.push({change: function (alt) {
                                  if (/Test/.test(alt)) return false;
                                  if (/tophand\.svg/.test(alt)) return false;
                                  if (/letzte.+warnung/i.test(alt)) return false;
                                  var v = '{{ers:' + p.vorlage + '}}';
                                  if (alt === '') return v;
                                  return alt + '\n\n' + v;
                                },
                        title: 'Benutzer Diskussion:' + p.user, summary: 'Hinweis', create: true});
         }
      }
      return bearb;
  }, as);
},

init: function() {
//TODO andere Zeitzonen
  var heute = new Date();
  var jahr = heute.getFullYear();
  var monat = ;
  var tag = heute.getDate();
  var datum = tag + '._' + monat + '_' + jahr;
  autoantraege.qs_seite += datum;
  autoantraege.la_seite += datum;
  datum = jahr + '/' + monat + '/' + tag;
  autoantraege.kat_seite += datum;

  if (typeof autosave == 'boolean') autoantraege.autosave = autosave;
  if (typeof defaultSLA == 'string') autoantraege.standard_grund.sla = defaultSLA;
  if (typeof defaultVandal == 'string') autoantraege.standard_grund.vm_benutzer = defaultVandal;
  if (typeof defaultAVandal == 'string') autoantraege.standard_grund.vm_artikel = defaultAVandal;
  if (typeof usersignature == 'string') autoantraege.sig = usersignature;

  if ($.inArray('sysop', mw.config.get('wgUserGroups')) > -1) autoantraege.admin = true;

  if (autoantraege.zeige_menu || autoantraege.zeige_revert) {
     mw.loader.load('jquery.ui');
     if (autoantraege.zeige_menu) $(autoantraege.init_menu);
     if (autoantraege.zeige_revert) $(autoantraege.init_revert);
  }
  if (autoantraege.zeige_erl && mw.config.get('wgNamespaceNumber') !== 0) {
     $(function(){ if ( document.getElementById('autoarchiv-erledigt-baustein') || $('#Vorlage-Autoarchiv:has(a)').length > 0)
                      autoantraege.autoerledigt('Erledigt', 'erl.', 'erl.', 'Diesen Abschnitt als erledigt markieren'); });
  }
  if (autoantraege.zeige_inuse && mw.config.get('wgPageName') == 'Wikipedia:Bots/Anfragen') {
     $(function(){ autoantraege.autoerledigt('InuseBot', 'Anfrage wird bearbeitet', 'inuse', 'Diese Anfrage als in Bearbeitung markieren'); });
  }
},

init_menu: function() {
  var ziel = 'p-tb';
  var ns = mw.config.get('wgNamespaceNumber');
  //QS: Artikel, Vorlagen, Kategorien
  if (ns === 0 || ns == 10 || ns == 14)
     mw.util.addPortletLink(ziel, '#', 'QS+', 't-qs', 'QS-Antrag stellen').onclick = function(){autoantraege.eintragen('qs'); return false;};
  //Fach-QS: Artikel, Vorlagen, Kategorien
  if (ns === 0 || ns == 10 || ns == 14)
     mw.util.addPortletLink(ziel, '#', 'Fach-QS+', 't-fachqs', 'Fach-QS-Antrag stellen').onclick = function(){autoantraege.eintragen('fach-qs'); return false;};
  //URV
  if (ns != -1)
     mw.util.addPortletLink(ziel, '#', 'URV+', 't-urv', 'Als Urheberrechtsverletzung markieren').onclick = function(){autoantraege.eintragen('urv'); return false;};
  //LA: keine Diskussionsseiten
  if (ns % 2 === 0)
     mw.util.addPortletLink(ziel, '#', 'LA+', 't-la', 'Löschantrag stellen').onclick = function(){autoantraege.eintragen('la'); return false;};
  //DÜP: Dateien
  if (ns == 6 && !autoantraege.hide_duep)
     mw.util.addPortletLink(ziel, '#', 'DÜP+', 't-duep', 'Dateiüberprüfung').onclick = function(){autoantraege.eintragen('duep'); return false;};
  //KAT_VERSCH: nur Kategorien
  if (ns == 14)
     mw.util.addPortletLink(ziel, '#', 'Kat. verschieben', 't-katversch', 'Antrag zur Kategorie-Verschiebung stellen').onclick =
        function(){autoantraege.eintragen('kat_versch'); return false;};
  //SLA
  if (ns != -1) {
     if (autoantraege.admin) {
        mw.util.addPortletLink(ziel, '#', 'Löschen', 't-sla', 'Schnelllöschen').onclick = function(){autoantraege.eintragen('sla'); return false;};
     } else {
        mw.util.addPortletLink(ziel, '#', 'SLA+', 't-sla', 'Schnelllöschantrag stellen').onclick = function(){autoantraege.eintragen('sla'); return false;};
     }
  }
  //VM
  if (ns == 2 || ns == 3 || mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') {
     mw.util.addPortletLink(ziel, '#', 'VM+', 't-vm', 'Benutzer als Vandale/Edit-Krieger melden').onclick =
        function(){autoantraege.eintragen('vm_benutzer'); return false;};
  } else if (ns != -1) {
     mw.util.addPortletLink(ziel, '#', 'VM+', 't-vm', 'Sperrung der Seite wegen Vandalismus/Edit-War beantragen').onclick =
        function(){autoantraege.eintragen('vm_artikel'); return false;};
  }
  //Benutzerdisk.
  if (ns == 3) {
  //TODO einschränken
     mw.util.addPortletLink(ziel, '#', 'Warnung+', 't-warn', 'Den Benutzer verwarnen').onclick = function(){autoantraege.eintragen('b_warn'); return false;};
     mw.util.addPortletLink(ziel, '#', 'Hinweis+', 't-hinweis', 'Den Benutzer freundlich auf etwas hinweisen').onclick =
        function(){autoantraege.eintragen('b_hinweis'); return false;};
     mw.util.addPortletLink(ziel, '#', 'Hinweis (Art.)+', 't-hinweis-a', 'Dem Benutzer einen auf einen konkreten Artikel bezogenen Hinweis geben').onclick =
        function(){autoantraege.eintragen('b_hinweis_a'); return false;};
  }
},

autoerledigt: function(vorlage, kommentar, link, titel) {
  $('.mw-editsection').each(function() {
     var $this = $(this);
     var section = null;
     $this.find('a').each(function() {
         if (section !== null) return;
         section = mw.util.getParamValue('section', $(this).attr('href') || 'x');
         if (section !== null && section.search(/^\d+$/) == -1) section = null; //keine transkludierten Abschnitte
     });
     if (section === null) return;
     section = Number(section);
     var summ = $this.parent().find('.mw-headline').attr('id') || '';
     summ = summ.replace(/_/g, ' ').replace(/(\.{2})+/g, function (utf8) {return decodeURIComponent(utf8.replace(/\./g, '%'));});
     if (summ) summ = '/* ' + summ + ' */ ';
     summ += kommentar;
     var $link = $('<a/>', {title: titel, href: '#'}).text(link).click(function() {
           libs.autoedit.edit_series([{section: section,
                                  change: function (alt) {
                                             if (alt.indexOf('{{' + vorlage) > -1) return false;
                                             if (alt.indexOf('{{' + vorlage.replace(/^./, function (c) { return c.toLowerCase(); })) > -1) return false;
                                             return alt + '\n\n{{' + vorlage + '|' + autoantraege.escape('~~~~') + '}}'; },
                                  summary: summ}], autoantraege.autosave, autoantraege.warn_edit, true);
           return false;
     });
     $this.append(' / ');
  });
},

init_revert: function () {
  var link = function (param) {
      if (param.undoafter === null) delete param.undoafter;
      if (param.user === null) delete param.user;
      var text = '', tip = '';
      if (param.reset) {
         text = 'wiederherstellen'; tip = 'auf diese Version revertieren'; delete param.user;
      } else if (param.user) {
         text = 'verbessertes Rückgängig'; tip = 'Diese Änderung von Benutzer:' + param.user + ' mit Dialog rückgängig machen.';
      } else {
         text = 'verbessertes Rückgängig'; tip = 'Diese Änderungen mit Dialog rückgängig machen.';
      }
      return $(mw.html.element('a', {href: '#', title: tip}, text)).click(function(e) {
              e.preventDefault();
              autoantraege.revert(param);
             });
  };
  var situation = '';
  if (mw.util.getParamValue('diff')) {
     situation = ($('.diff-multi').length > 0) ? 'diffmulti' : 'diff';
  } else if (mw.util.getParamValue('oldid')) {
     situation = 'old';
  } else if (mw.config.get('wgAction') == 'history') {
     situation = 'history';
  } else if (mw.config.get('wgCanonicalSpecialPageName') == 'Contributions') {
     situation = 'contrib';
  } else if ($.inArray(mw.config.get('wgCanonicalSpecialPageName'), )) {
     situation = 'changes';
  }
  if (situation === '') return;

  switch (situation) {
  case 'diff': case 'diffmulti':
   $('#mw-diff-otitle1, #mw-diff-ntitle1').find('a').each(function() {
    var $a = $(this), href = $a.attr('href'), $link;
    if (!href) return;
    if (mw.util.getParamValue('action', href) != 'edit') return;
    var oldid = mw.util.getParamValue('oldid', href), undo = mw.util.getParamValue('undo', href);
    if (oldid !== null) $link = link({reset: oldid});
    if (undo !== null) $link = link({undo: undo, undoafter: mw.util.getParamValue('undoafter', href),
                                     user: (situation == 'diffmulti') ? null : $('#mw-diff-ntitle2').find('.mw-userlink').text()});
    if ($link) $a.after($link).after(' | ');
   });
  break;
  case 'old':
   $('#mw-revision-info').after(link({reset: mw.util.getParamValue('oldid')}));
  break;
  case 'history':
   $('#pagehistory').find('li').each(function() {
    var $li = $(this), $rev = $li.find('.mw-history-undo'), href = $rev.find('a').attr('href');
    if (!href) return;
    var $link1 = link({reset: mw.util.getParamValue('undo', href)}),
        $link2 = link({undo: mw.util.getParamValue('undo', href), undoafter: mw.util.getParamValue('undoafter', href), user: $li.find('.mw-userlink').text()});
    $rev.after($link2).after(' | ').after($link1).after(' | ');
   });
  break;
  case 'contrib':
   mw.util.$content.find('ul:last').find('li').each(function() {
    $(this).find('a').each(function() {
     var $a = $(this), href = $a.attr('href');
     if (!href) return;
     if (mw.util.getParamValue('diff', href) != 'prev') return;
     var $link = link({undo: mw.util.getParamValue('oldid', href), user: $('').val(), title: mw.util.getParamValue('title', href)});
     $a.after($link).after(' | ');
    });
   });
  break;
  case 'changes':
//TODO
  break;
  }
}
};

if (mw.config.get('debug')) window.autoantraege = autoantraege;
$(document).trigger('loadWikiScript', );

autoantraege.init();

})(jQuery, mw.libs);
//</nowiki>