Користувач:Ilya/Specialadmin/monobook.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
//[[Category:Wikipedia administrators who use VoA script|{{PAGENAME}}]]<pre><nowiki>
//NOTE: for security override HTTP request info for IP range and commons image duplicates script:
//For FF/NS, go enable, see "http://esw.w3.org/topic/SparqlCalendarDemoUsage#FAQ"
//Basically, enable "signed.applets.codebase_principal_support" in about:config 
//Reduce IE security settings for future versions (this does not support IE yet)

//Helper tools

//more revert tools
document.write('<script type="text/javascript" src="' 
             + 'http://en.wikipedia.org/w/index.php?title=User:Voice_of_All/ARevert/monobook.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//END

function checkall()
{
  if (document.getElementById('bodyContent'))
    {form = document.getElementById('bodyContent');}
  else if (document.getElementById('quickbar'))
    {form = document.getElementById('content');}
  l = form.getElementsByTagName('input');
  for (i = 0 ; i < l.length; i++)
    {
    if (l[i].type == 'checkbox')
      {l[i].value = '1'; l[i].checked=true;}
    }
}
//END

//
Mvaluejs_class = 'DMalak1';
Rvaluejs_class = 'ERollen2';
Uvaluejs_class = 'DRaven2';
//

//MASTER rollback
function addmasterroll()
{
  if (location.href.indexOf(':Contributions') != -1 || location.href.indexOf('&title=Special%3AContribution') != -1 && location.href.search(/\d{1,3}(@|%40)\d{1,2}/) == -1) 
      { 
    masterlogview(100,'creation',"pages","ca-npages","Views user's new pages");
    masterlogview(100,'move',"moves","ca-viewpm","Views user's page moves");
    masterlogview(50,'upload',"uploads", "ca-viewup", "Views user's image uploads");
    addTab("javascript:masterroll()", "{{Revert all edits}}", "ca-massroll", "Rollback user's top edits", "");
    document.getElementById('ca-massroll').firstChild.innerHTML = '<strong><span style="color:darkred;">{{Revert all edits}}</span></strong>';
    addTab("javascript:number_count()", "#", "ca-numb", "Number edits", "");
      }
  else if (location.href.indexOf(':Contributions') != -1 || location.href.indexOf('&title=Special%3AContribution') != -1 && location.href.search(/\d{1,3}(@|%40)\d{1,2}/) != -1) 
      { 
    addTab("javascript:masterroll()", "{{Revert all edits}}", "ca-massroll", "Rollback top edits", "");
    document.getElementById('ca-massroll').firstChild.innerHTML = '<strong><span style="color:darkred;">{{Revert all edits}}</span></strong>';
      }
  else if (document.title.indexOf('Протокол перейменувань') != -1 && location.href.search('&user=[^&]') !=-1) 
      { 
    addTab("javascript:movemasterroll()", "{{Revert all moves}}", "ca-rvmoves", "Reverts user's page moves", "");
    document.getElementById('ca-rvmoves').firstChild.innerHTML = '<strong><span style="color:darkred;">{{Revert all moves}}</span></strong>';
      }
  else if (document.title.indexOf('Журнал завантажень') != -1 && location.href.search('&user=[^&]') !=-1) 
      { 
    addTab("javascript:masterdelete()", "{{Revert all uploads}}", "ca-rvuploads", "Reverts uploads", "");
    document.getElementById('ca-rvuploads').firstChild.innerHTML = '<strong><span style="color:darkred;">{{Revert all uploads}}</span></strong>';
      }
  else if (document.title.indexOf('Нові статті') != -1 && location.href.search('&user=[^&]') !=-1) 
      {
    addTab("javascript:masternuke()", "{{Delete all pages}}", "ca-delpages", "Delete all pages", "");
    document.getElementById('ca-delpages').firstChild.innerHTML = '<strong><span style="color:darkred;">{{Delete all pages}}</span></strong>';
      }
  else if (document.title.indexOf('View and restore deleted pages') != -1 && location.href.search(/&timestamp=|&action=submit/) == -1)
      {
    addTab("javascript:checkall()", "Check all revisions", "ca-checkall", "Check all deleted revisions", "");
      }
  if (location.href.search(/&action=history|title=Special:Log|title=Special%3ALog/) != -1)
    {addTab("javascript:number_count()", "#", "ca-numb", "Number edits", "");}
}
//END

function number_count()
{
//check for monobook then cologneblue
if (document.getElementById('bodyContent'))
  {
  if (!document.getElementById('bodyContent')){return;}
  var body = document.getElementById('bodyContent');
  }
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
  if (!body.getElementsByTagName('ul')[0]){return;}
var l = body.getElementsByTagName('ul')[0].getElementsByTagName('li');
if (l[0].innerHTML.indexOf('<strong>#1</strong> ') != -1)
{return;}
if (location.href.search(/&action=history/) ==-1)
  {addTab("javascript:time_frame()", "frame", "ca-frame", "Time frame", "");}
for (var i=0; i < l.length; i++)
   {
   var c = i+1;
   l[i].innerHTML = '<strong>#' + c + '</strong> ' + l[i].innerHTML;
   }
}

function time_frame()
{
//check for monobook then cologneblue
if (document.getElementById('bodyContent'))
  {
  if (!document.getElementById('bodyContent')){return;}
  var body = document.getElementById('bodyContent');
  }
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
var range = prompt('Select two edit numbers for the range.' + '\n' + 'Use the format: X-Y.' + '\n' + '(dates must show like "09:12, April 8, 2001"  in user preferences)')
if (!range || range == '' || range.split('-').length != 2){return;}
var r1 = 1*range.split('-')[0];
var r2 = 1*range.split('-')[1];
var limit = r2 - r1 + 1;
var offset = r1 - 1;
//logs can use offsets (and only offsets)
if (location.href.search(/Спеціальні:Log|%D0%A1%D0%BF%D0%B5%D1%86%D1%96%D0%B0%D0%BB%D1%8C%D0%BD%D1%96%3ALog/) !=-1)
  {
  var URL = location.href.replace(/&offset=\d+/g,'').replace(/&limit=\d+/g,'') + '&offset=' + offset + '&limit=' + limit;
  location.href = URL;
  return;
  }
//others use timestamps
var yearloc = body.getElementsByTagName('li')[r1 - 1].innerHTML.split(' (<a href="')[0].split('(<a href="')[0].split(' <a href="')[0].split('<a href="')[0].split('</strong> ')[1];
if (yearloc.indexOf('January ') !=-1)
{var LMonth = 'January'; var LMval = '01'; var LDay = yearloc.split('January ')[1].split(',')[0]; var LYear = yearloc.split('January ')[1].split(', ')[1]; var LTime = yearloc.split(', January ')[0];}
else if (yearloc.indexOf('February ') !=-1)
{var LMonth = 'February'; var LMval = '02'; var LDay = yearloc.split('February ')[1].split(',')[0]; var LYear = yearloc.split('February ')[1].split(', ')[1]; var LTime = yearloc.split(', February ')[0];}
else if (yearloc.indexOf('March ') !=-1)
{var LMonth = 'March'; var LMval = '03'; var LDay = yearloc.split('March ')[1].split(',')[0]; var LYear = yearloc.split('March ')[1].split(', ')[1]; var LTime = yearloc.split(', March ')[0];}
else if (yearloc.indexOf('April ') !=-1)
{var LMonth = 'April'; var LMval = '04'; var LDay = yearloc.split('April ')[1].split(',')[0]; var LYear = yearloc.split('April ')[1].split(', ')[1]; var LTime = yearloc.split(', April ')[0];}
else if (yearloc.indexOf('May ') !=-1)
{var LMonth = 'May'; var LMval = '05'; var LDay = yearloc.split('May ')[1].split(',')[0]; var LYear = yearloc.split('May ')[1].split(', ')[1]; var LTime = yearloc.split(', May ')[0];}
else if (yearloc.indexOf('June ') !=-1)
{var LMonth = 'June'; var LMval = '06'; var LDay = yearloc.split('June ')[1].split(',')[0]; var LYear = yearloc.split('June ')[1].split(', ')[1]; var LTime = yearloc.split(', June ')[0];}
else if (yearloc.indexOf('July ') !=-1)
{var LMonth = 'July'; var LMval = '07'; var LDay = yearloc.split('July ')[1].split(',')[0]; var LYear = yearloc.split('July ')[1].split(', ')[1]; var LTime = yearloc.split(', July ')[0];}
else if (yearloc.indexOf('August ') !=-1)
{var LMonth = 'August'; var LMval = '08'; var LDay = yearloc.split('August ')[1].split(',')[0]; var LYear = yearloc.split('August ')[1].split(', ')[1]; var LTime = yearloc.split(', August ')[0];}
else if (yearloc.indexOf('September ') !=-1)
{var LMonth = 'September'; var LMval = '09'; var LDay = yearloc.split('September ')[1].split(',')[0]; var LYear = yearloc.split('September ')[1].split(', ')[1]; var LTime = yearloc.split(', September ')[0];}
else if (yearloc.indexOf('October ') !=-1)
{var LMonth = 'October'; var LMval = '10'; var LDay = yearloc.split('October ')[1].split(',')[0]; var LYear = yearloc.split('October ')[1].split(', ')[1]; var LTime = yearloc.split(', October ')[0];}
else if (yearloc.indexOf('November ') !=-1)
{var LMonth = 'November'; var LMval = '11'; var LDay = yearloc.split('November ')[1].split(',')[0]; var LYear = yearloc.split('November ')[1].split(', ')[1]; var LTime = yearloc.split(', November ')[0];}
else if (yearloc.indexOf('December ') !=-1)
{var LMonth = 'December'; var LMval = '12'; var LDay = yearloc.split('December ')[1].split(',')[0]; var LYear = yearloc.split('December ')[1].split(', ')[1]; var LTime = yearloc.split(', December ')[0];}
if (LDay.search(/\d\d/) ==-1){LDay = '0' + LDay;}
var LTime = LTime.replace(/:/g,'');
var timestamp = LYear + '' + LMval + '' + LDay + '' + LTime + '59';
if (location.href.indexOf('Special:Contributions/') ==-1)
  {var URL = location.href.replace(/&offset=\d+/g,'').replace(/&limit=\d+/g,'') + '&offset=' + timestamp + '&limit=' + limit;}
else
  {
  var user = location.href.split('Special:Contributions/')[1];
  var URL = wgServer + '/w/index.php?title=Special:Contributions&target=' + user + '&offset=' + timestamp + '&limit=' + limit;
  }
location.href = URL;
}

function masterlogview(number,type,name,ID,title)
{
    if (document.getElementById('contentSub'))
      {
    var c = document.getElementById('contentSub');
    var a = c.getElementsByTagName('a');
      }
    else
      {
    var c = document.getElementsByTagName('p')[0];
    var a = c.getElementsByTagName('a');
      }
    vandal = a[0].href;
    if (vandal.indexOf("User:") !=-1)
       {vandal = vandal.split("User:")[1];}
    else if (vandal.indexOf("User talk:") !=-1)
       {vandal = vandal.split("User talk:")[1];}
    else if (vandal.indexOf("User_talk:") !=-1)
       {vandal = vandal.split("User_talk:")[1];}
    if (vandal.indexOf("&action=") !=-1)
       {vandal = vandal.split("&action=")[0];}
    if (vandal.search(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) !==-1){return;}
//create URL
          if (type != 'creation')
             {
          URL = '/w/index.php?title=Special:Log&type=' + type + '&user=' + vandal + '&page=&limit=' + number;
             }
          else if (type == 'creation')
             {
          URL = '/wiki/Special:Newpages?username=' + vandal + '&limit=' + number;
             }
   addTab(URL, name, ID, title, "");
}
//END

//////////////Auto-actions//////////////
function winclosed()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
//for master rollback for moves
 if (location.href.indexOf('&fakaction=masterfill') != -1 && document.title.indexOf('Move page') != -1)
    {
    document.getElementById('wpReason').value = 'Automated revert of mass page moving.';
    document.getElementById('movepage').submit();
    }
//for master rollback for image uploads
 else if (document.title.indexOf('Image:')==0 && location.href.indexOf('&jsaction=ImagevandalRV&target=') !=-1)
  {
  var bad_user = unescape(location.href.split('&target=')[1].split('&')[0]);
  var reason = location.href.split('&reason=')[1].split('&')[0];
  var history_num = 1;
  var uls = body.getElementsByTagName('ul');
  for (h=0; h<uls.length; h++)
  {
     if (uls[h].className == "special" && uls[h].innerHTML.indexOf('action=delete') !=-1)
     {history_num = h; break;}
  }
  var history = body.getElementsByTagName('ul')[history_num].getElementsByTagName('li');
//check if user is the last contributor
  if (history[0].innerHTML.indexOf('">' + bad_user + '</') == -1)
      {window.close(); return;}
//check if he is the only contributor
  var Delete = 1;
  for (var i=0; i<history.length; i++)
      {
     if (history[i].innerHTML.indexOf('">' + bad_user + '</a> (') == -1)
         {
        var RV_linkURL = history[i].getElementsByTagName('a')[1].href;
        Delete = 0;
        if (RV_linkURL.indexOf('&wpEditToken=') ==-1){alert('Parsing error!'); return;}
        document.getElementById('contentSub').innerHTML = '<strong><span style="color:blue;">Reverting:</span> ' + RV_linkURL + '</strong>.';
        location.href = RV_linkURL;
        break;
         }
      }
//if user is the only contibutor
   if (Delete == 1)
    {
    var Delete_AllURL = history[0].getElementsByTagName('a')[0].href;
    if (Delete_AllURL.indexOf('&action=delete') ==-1){alert('Parsing error!'); return;}
    Delete_AllURL += '&jsaction=imagenuke&reason=' + reason;
    document.getElementById('contentSub').innerHTML = '<strong><span style="color:red;">Deleting:</span> ' + Delete_AllURL + '</strong>.';
    location.href = Delete_AllURL;
    }
  }
//for master rollback for images, last step
 else if (document.title.indexOf('Confirm delete')==0 && location.href.indexOf('&action=delete&jsaction=imagenuke&reason=') !=-1)
  {
  var reason = unescape(location.href.split('&reason=')[1].split('&')[0]);
  document.getElementById('wpReason').value = reason;
  var form = document.getElementsByTagName('input')[1];
  form.click();
  }
//for master delete for page creations
 else if (document.title.indexOf('Confirm page')==0 && location.href.indexOf('&action=delete&jsaction=nuke') !=-1)
    {
  if (document.getElementById('wpReason').value.length < 1)
  {document.getElementById('wpReason').value = 'Deleted vandalism page with only one contributor.';}
  var form = document.getElementsByTagName('input')[1];
  form.click();
    }
 else if (document.title.indexOf('Confirm delete')==0 && location.href.indexOf('&jsaction=RollbackDelete') !=-1)
  {
  if (document.getElementById('wpReason').value.length < 1)
  {document.getElementById('wpReason').value = 'Deleted test or vandalism page with only one contributor.';}
  var form = document.getElementsByTagName('input')[1];
  var message = 'Do you want to delete this page since it has only one author?';
  var return_value = confirm(message);
  if (return_value == true)
  {form.click();}
  }
  else if (document.title.indexOf('Rollback failed') == 0 && body.innerHTML.indexOf(' last contributor is the only author of this page') != -1)
  {
  var article = location.href.split('?title=')[1].split('&action')[0];
  location.href = wgServer + '/w/index.php?title=' + article + '&action=delete&jsaction=RollbackDelete';
  }
}
//////////////

function jswin_close()
{
//close JS action inputs
 if (document.title.indexOf('Action complete')==0)
  {
  setTimeout('window.close()',1000);
  }
//close JS action inputs
 else if (document.title.indexOf('Move page')==0)
  {
  if (document.getElementById('contentSub').innerHTML == 'Move succeeded')
    {setTimeout('window.close()',1000);}
  }
//close JS launched rollbacks
 else if (location.href.search(/&action=rollback.+&jsaction=close/) !=-1)
  {
  window.close();
  }
}

//reverts edits
function masterroll()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  if (!document.getElementById('bodyContent')){return;}
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
if (!body.getElementsByTagName('ul')[0])
{alert('No edits found.'); return;}
  z=0;
  var oldloc = location.href;
  var message = "Are you sure you want to revert all top edits shown on this page by this user? Use this only to revert a large wave of vandalism by a single user or IP address." + "\n" + "To control how many edits this will revert, please set the number of articles on the list before performing this operation. You may also want to change the offset as well." + "\n" + "Close all other programs if there is a large number of edits to be reverted, otherwise, this may cause memory problems. Press OK to continue.";
  var return_value = confirm(message);
  if (return_value == true)
   {
    var js_con_class = prompt("Secondary confirmation:" + "\n" + "All top edits by this user will be reverted!" + "\n" + "Confirm type:");
     if (js_con_class == Rvaluejs_class)
      {
    l = body.getElementsByTagName('li');
    document.getElementById('contentSub').innerHTML = "<strong>All of the user's top edits are being reverted. This page will be refreshed automatically in 20 seconds</strong>.";
    for (var i = 0; i < l.length; i++) 
      {
      if (i == l.length-1){setTimeout("window.location.reload()",20000);}
      var t = l[i].innerHTML;
      if (t.indexOf('<strong> (') != -1)
         {
        var article = l[i].getElementsByTagName('a')[0].href.split('&')[0].split('title=')[1].replace(/[^\/]*\/\/[^\/]*/, '');
        var li_a = l[i].getElementsByTagName('a');
        for (k = 3; k < li_a.length; k++)  
        {
        if (l[i].getElementsByTagName('a')[k].href.indexOf('&action=rollback') !=-1)
           {
z += 1;
var URL = l[i].getElementsByTagName('a')[k].href + '&jsaction=close';
l[i].innerHTML += ' (' + cvrollbacklink + ')';
window.open(URL,'MasterrollJS' + z,'height=300,width=800,directories=yes,resizeable=yes,scrollbars=yes');
        break;
           }    
         }
        }
      }
  }
        else
          {
         alert("Operation aborted.");
         return;
          }
 }
        else
          {
         alert("Operation aborted.");
         return;
          }
}
//

//rollback moves
function movemasterroll()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  if (!document.getElementById('bodyContent')){return;}
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
if (!body.getElementsByTagName('ul')[0])
{alert('No page moves found.'); return;}
  var oldloc = location.href;
  var message = "Are you sure you want to revert all page moves by this user? Use this only to revert a large wave of vandalism by a single user or IP address." + "\n" + "To control how many moves this will revert, please set the number of articles on the list before performing this operation. You may also want to change the offset as well." + "\n" + "Close all other programs if there is a large number of moves to be reverted, otherwise, this may cause memory problems. Press OK to continue.";
  var return_value = confirm(message);
  if (return_value == true)
   {
    var Val_type = prompt("Secondary confirmation:" + "\n" + "All top moves by this user will be reverted!" + "\n" + "Confirm type:");
     if (Val_type == Mvaluejs_class)
      {
    var c = document.getElementById('contentSub');
    var a = c.getElementsByTagName('a');
    l = body.getElementsByTagName('li');
    document.getElementById('contentSub').innerHTML = "<strong>All of the user's top page moves are being reverted. This page will be refreshed automatically in 20 seconds</strong>.";
    for (var i = l.length -1; i >= 0; i--) 
      {
      if (i == 0){setTimeout("window.location.reload()",20000);}
      var t = l[i].innerHTML;
      if (t.indexOf('moved') != -1)
        {
        var li_a = l[i].getElementsByTagName('a');
        for (k = 1; k <li_a.length; k++) 
           {
            if (li_a[k].href.indexOf('&redirect=no') != -1)
              {var article = li_a[k].href;}
            if (li_a[k].href.indexOf('title=Special:Movepage&wpOldTitle=') != -1)
              {
              var URL = li_a[k].href + '&fakaction=masterfill';
              l[i].innerHTML += ' (' + cvrollbacklink + ')';
              window.open(URL,'MasterMoveRV:' + article,'height=300,width=800,resizeable=yes,scrollbars=yes');
              break;
              }    
           }
        }
   }
}
        else
          {
         alert("Operation aborted.");
         return;
          }
 }
        else
          {
         alert("Operation aborted.");
         return;
          }
}
//END

//deletes recent page creations
function masternuke()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  if (!document.getElementById('bodyContent')){return;}
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
if (body.getElementsByTagName('ol')[0] == undefined)
{alert('No page creations found.'); return;}
  var oldloc = location.href;
  var message = "Are you sure you want to delete all pages created by this user? Use this only to revert a large wave of vandalism by a single user." + "\n" + "To control how many pages this will delete, please set the number of articles on the list before performing this operation. You may also want to change the offset as well." + "\n" + "Close all other programs if there is a large number of moves to be reverted, otherwise, this may cause memory problems. Press OK to continue.";
  var return_value = confirm(message);
  if (return_value == true)
   {
    var Val_type = prompt("Secondary confirmation:" + "\n" + "All recent pages created by this user will be deleted!" + "\n" + "Confirm type:");
     if (Val_type == Rvaluejs_class)
      {
    var c = document.getElementById('contentSub');
    var a = c.getElementsByTagName('a');
    l = body.getElementsByTagName('li');
    document.getElementById('contentSub').innerHTML = "<strong>All of the user's recent page creations are being deleted. This page will be refreshed automatically in 20 seconds</strong>.";
    for (var i = 0; i < l.length; i++)
      {
      if (i == 0){setTimeout("window.location.reload()",20000);}
      var article = l[i].getElementsByTagName('a')[0].innerHTML;
      var URL = wgServer + '/w/index.php?title=' + article + '&action=delete&jsaction=nuke';
      l[i].innerHTML += ' (' + dvrollbacklink + ' )';
      window.open(URL,'MasterNUKE:' + article,'height=700,width=700,resizeable=yes,scrollbars=yes');
      }
   }
        else
          {
         alert("Operation aborted.");
         return;
          }
 }
        else
          {
         alert("Operation aborted.");
         return;
          }
}
//END

//reverts/deletes uploads
function masterdelete()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  if (!document.getElementById('bodyContent')){return;}
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
  if (!body.getElementsByTagName('ul')[0]){return;}
  var z = 0;
  var unique_img_list = '|';
//are there any?
if (body.getElementsByTagName('ul')[0] == undefined)
{alert('No file uploads found.'); return;}
  var oldloc = location.href;
  var message = "Are you sure you want to revert all uploads shown on this page by this user? Use this only to revert a large wave of vandalism by a single user or IP address. Uploads of which this user is the only author will be deleted." + "\n" + "To control how many uploads this will revert, please set the number of images on the list before performing this operation. You may also want to change the offset as well." + "\n" + "Close all other programs if there is a large number of edits to be reverted. Unfortunetely, this script has to load the image pages to get the file histories, so it is STRONGLY recommended that you disable images in this browser first if there is a large number of images to be reverted. Press OK to continue.";
  var return_value = confirm(message);
  if (return_value == true)
   {
   var Val_type = prompt("Secondary confirmation:" + "\n" + "All uploads by this user will be reverted!" + "\n" + "Confirm type:");
     if (Val_type == Uvaluejs_class)
      {
    var reason = prompt('Enter an explanation:');
    if (!reason || reason.length < 6){alert('Too short!'); return;}
    l = body.getElementsByTagName('ul')[0].getElementsByTagName('li');
    var vandal = l[0].getElementsByTagName('a')[0].innerHTML;
    document.getElementById('contentSub').innerHTML = "<strong>All of the user's uploads are being reverted. This page will be refreshed automatically in 30 seconds</strong>.";
    for (var i = 0; i < l.length; i++) 
     {
        if (i == l.length-1){setTimeout("window.location.reload()",30000);}
//check for non-deleted images
        var li_a = l[i].getElementsByTagName('a');
        for (k = 2; k <li_a.length; k++)  
        {
        if (l[i].getElementsByTagName('a')[k].innerHTML.indexOf('Image:') != -1 && l[i].getElementsByTagName('a')[k].href.indexOf('&action=edit') == -1)
           {
           z += 1;
           var name = l[i].getElementsByTagName('a')[k].innerHTML;
             if (unique_img_list.indexOf('|' + name + '|') ==-1)
               {
               unique_img_list += name + '|';
               var URL = wgServer + '/w/index.php?title=' + name;
               URL += '&jsaction=ImagevandalRV&target=' + escape(vandal) + '&reason=' + escape(reason);
               l[i].innerHTML += ' (' + cvrollbacklink + ')';
               window.open(URL,'MasterrollImages' + z,'height=700,width=700,directories,resizeable,scrollbars');
               break;
               }
             else {l[i].innerHTML += ' (<strong>old</strong>)';}
           }    
        }
     }
  }
        else
          {
         alert("Operation aborted.");
         return;
          }
 }
        else
          {
         alert("Operation aborted.");
         return;
          }
}
//

//<pre><nowiki>

///////////////////////////////PAGE ROLLBACK///////////////////////////////
// -----------------------------------------------------------------------------
// POV rollback
// -----------------------------------------------------------------------------
var prollbacklink = ' <strong><span style="color:black;">[</span><span style="color:darkblue;">rollback (AGF)</span><span style="color:black;">]</span> </strong></strong>';
var cantrollback = 'Cannot revert edit; last contributor is only author of this page.';
var alreadyrolled = 'Cannot rollback last edit of [[$1]] by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the page already. Last edit was by [[User:$3|$3]] ([[User talk:$3|Talk]]). ';
var preverted_GML_sum = "Reverted [[WP:AGF|good faith]] edits by [[Special:Contributions/$2|$2]] per policy concerns. Please read up on [[WP:POL#Key_policies|policies and guidelines]]. Thanks!";
//

// -----------------------------------------------------------------------------
// Vandal rollback
// -----------------------------------------------------------------------------
var cvrollbacklink = '<span style="color:red;">reverting...</span>';
var dvrollbacklink = '<span style="color:red;">deleting...</span>';
var vrollbacklink = ' <span style="color:black;">[</span><span style="color:red;">rollback (warn)</span><span style="color:black;">]</span><br></strong> ';
var cantrollback = 'Cannot revert edit; last contributor is only author of this page.';
var alreadyrolled = 'Cannot rollback last edit of [[$1]] by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the page already. Last edit was by [[User:$3|$3]] ([[User talk:$3|Talk]]). ';
var vreverted_GML_sum = 'Reverted [[Wikipedia:Vandalism|vandalism]] by [[Special:Contributions/$2|$2]] to last version by $1. You may be [[WP:BLOCK|blocked]] from editing if you continue.';
//

//failsafe rollback
function IEhistory_revert()
{
//
var cant_rollback = '<br><strong><span style="color:red;">Page rollback error:</span> Could not find a version of this page that is not by the user you attempted to rollback from.' + '<br>' + 'Most likely, the user is the only author of the page, so you may want to have the page deleted.' + '<br>' + '<span style="color:red;">Note:</span> This revert function only looks at the last 12 page edits, so you may be able look back further and use "restore".';
var not_topuser = '<strong><span style="color:red;">Page rollback error:</span> Last editor is <span style="color:blue;">' + '<<top_user>>' + '</span>, not <span style="color:blue;">' + '<<vandal>>' + '</span>. The user may have already been reverted.</strong>';
//
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
if (location.href.indexOf('&action=history&limit=12&jsaction=IEnormalrevert&user=') != -1)
  { 
  var found = 0;
  var token = location.href.split('&token=')[1];
  //monobook
  if (document.getElementById('pt-userpage'))
     {var user_name = document.getElementById('pt-userpage').getElementsByTagName('a')[0].innerHTML;}
  //cologneblue
  else if (document.getElementById('quickbar') && document.getElementById('quickbar').getElementsByTagName('h6')[0])
      {
      var toplinks = document.getElementById('quickbar');
      var user_name = toplinks.innerHTML.split('<h6>My pages</h6>')[1].split('title="User:')[1].split('"')[0];
      }
  var pagename = location.href.split('title=')[1].split('&action=history')[0];
  var vandal = unescape(location.href.split('&jsaction=IEnormalrevert&user=')[1].split('&token=')[0]);
//confirm token
  if (token != hex_md5(pagename + vandal + user_name))
  {body.innerHTML = '<strong><span style="color:red;">Page rollback error:</span> Invalid token!</strong>'; return;}
//get top user
  var l = document.getElementById('pagehistory').getElementsByTagName('li');
  if (l[0].innerHTML.indexOf('(cur) (last) ') ==0)
    {var top_user = l[0].getElementsByTagName('a')[1].innerHTML;}
  else
    {var top_user = l[0].getElementsByTagName('a')[2].innerHTML;}
  if (top_user != vandal)
  {body.innerHTML = '<strong><span style="color:red;">Page rollback error:</span> Last editor is <span style="color:blue;">' + l[0].getElementsByTagName('a')[2].innerHTML + '</span>, not <span style="color:blue;">' + vandal + '</span>. The user may have already been reverted.</strong>'; return;}
  for (i = 1; i < l.length; i++)
      {
     if (!l[i].getElementsByTagName('a')[3])
         {body.innerHTML = '<strong><span style="color:red;">Page rollback error:</span> Format cannot be parsed!</strong>'; return;}
//get user and ID names
     if (l[i].innerHTML.indexOf('(cur) (last) <') !=-1)
         {test_user = l[i].getElementsByTagName('a')[1].innerHTML; var pagehref = l[i].getElementsByTagName('a')[0].href;}
     else if (l[i].innerHTML.indexOf(') (last) <') !=-1)
         {test_user = l[i].getElementsByTagName('a')[2].innerHTML; var pagehref = l[i].getElementsByTagName('a')[1].href;}
     else
         {test_user = l[i].getElementsByTagName('a')[3].innerHTML; var pagehref = l[i].getElementsByTagName('a')[2].href;}
//
     if (test_user != vandal)
         {
     var good_user = test_user;
     var URL = l[i].getElementsByTagName('a')[2].href + "&action=edit&jsaction=autorevertnice&byuser=" + escape(user_name) + "&oldrvtouser=" + escape(good_user) + "&revertfromuser=" + escape(vandal);
     body.innerHTML = '<strong>Page rollback status:<span style="color:blue;"> Getting article history ... </span>done</strong>';
     location.href = URL;
     found = 1;
     break;
         }
      }
   if (found == 0)
  {body.innerHTML = cant_rollback.replace('<<top_user>>',top_user).replace('<<vandal>>',vandal); return;}
   }
else if (location.href.indexOf('&action=history&limit=12&jsaction=IErollback&vandal=') != -1)
  { 
  var found = 0;
  var token = location.href.split('&token=')[1];
  //monobook
  if (document.getElementById('pt-userpage'))
     {var user_name = document.getElementById('pt-userpage').getElementsByTagName('a')[0].innerHTML;}
  //cologneblue
  else if (document.getElementById('quickbar') && document.getElementById('quickbar').getElementsByTagName('h6')[0])
      {
      var user_name = toplinks.innerHTML.split('<h6>My pages</h6>')[1].split('title="User:')[1].split('"')[0];
      }
  var pagename = location.href.split('title=')[1].split('&action=history')[0];
  var vandal = unescape(location.href.split('&jsaction=IErollback&vandal=')[1].split('&token=')[0]);
//confirm token
  if (token != hex_md5(pagename + vandal + user_name))
  {body.innerHTML = '<strong><span style="color:red;">Page rollback error:</span> Invalid token!</strong>'; return;}
//get top user
  var l = document.getElementById('pagehistory').getElementsByTagName('li');
  if (l[0].innerHTML.indexOf('(cur) (last) ') ==0)
    {var top_user = l[0].getElementsByTagName('a')[1].innerHTML;}
  else
    {var top_user = l[0].getElementsByTagName('a')[2].innerHTML;}
  if (top_user != vandal)
  {body.innerHTML = '<strong><span style="color:red;">Page rollback error:</span> Last editor is <span style="color:blue;">' + l[0].getElementsByTagName('a')[2].innerHTML + '</span>, not <span style="color:blue;">' + vandal + '</span>. The user may have already been reverted.</strong>'; return;}
  for (i = 1; i < l.length; i++)
      {
     if (!l[i].getElementsByTagName('a')[3])
         {body.innerHTML = '<strong><span style="color:red;">Page rollback error:</span> Format cannot be parsed!</strong>'; return;}
//get user and ID names
     if (l[i].innerHTML.indexOf('(cur) (last) <') !=-1)
         {test_user = l[i].getElementsByTagName('a')[1].innerHTML; var pagehref = l[i].getElementsByTagName('a')[0].href;}
     else if (l[i].innerHTML.indexOf(') (last) <') !=-1)
         {test_user = l[i].getElementsByTagName('a')[2].innerHTML; var pagehref = l[i].getElementsByTagName('a')[1].href;}
     else
         {test_user = l[i].getElementsByTagName('a')[3].innerHTML; var pagehref = l[i].getElementsByTagName('a')[2].href;}
//
     if (test_user != vandal)
         {
     var good_user = test_user;
     var URL = l[i].getElementsByTagName('a')[2].href + "&action=edit&jsaction=autorevertvandal&byuser=" + escape(user_name) + "&oldrvtouser=" + escape(good_user) + "&revertfromuser=" + escape(vandal);
     body.innerHTML = '<strong>Page rollback status:<span style="color:blue;"> Getting article history ... </span>done</strong>';
     location.href = URL;
     found = 1;
     break;
         }
      }
   if (found == 0)
  {body.innerHTML = cant_rollback.replace('<<top_user>>',top_user).replace('<<vandal>>',vandal); return;}
   }
}
///////////////////////////////

// -----------------------------------------------------------------------------
// XMLHttpRequest support
// -----------------------------------------------------------------------------
var IE=(window.ActiveXObject)?true:false;

// fixed: Hack for a MediaWiki bugs
function parseXMLhack(xml)
{
       if (IE)
          {
	  rer = xml.match(/<h1 .*<\/h1>/)[0].replace(/&/g, '&amp;');
	  if (rer) xml = xml.replace(/<h1 .*<\/h1>/, rer);
          }
       else
	  {xml = xml.replace(/<body .*\"ns-(.*)\">/, '<body class="ns-$1">');}
       return xml
}

function gml_XMLParse_doc(string)
{
	if (document.implementation.createDocument)
	       {
               string = string.replace(/<body.*"ns-4">/, '<body class="ns-4">');
               return gml_xmlparser.parseFromString(string, "text/xml");
               }
	else if (IE)
               {
		var gml_xmldoc = new ActiveXObject("Microsoft.XMLDOM");
		gml_xmldoc.async = false;
		ret = gml_xmldoc.loadXML(string);
                var ERROR_XML = 'ERROR_XML';
		myErr = gml_xmldoc.parseError;
		if (myErr.errorCode || !ret){
			showError("Error: " + ERROR_XML + myErr.reason);
			return null;
		}
		return gml_xmldoc.documentElement;
	}
	return null
}

// -----------------------------------------------------------------------------
// MD5 hash calculator
// -----------------------------------------------------------------------------
// Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
// Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
// Distributed under the BSD License
// See http://pajhome.org.uk/crypt/md5 for more info.
// -----------------------------------------------------------------------------
var hexcase = 0;
var b64pad  = "";
var chrsz   = 8;

function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}

function core_md5(x, len)
{
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14,  643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16,  530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);

}

function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); }
function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); }
function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); }
function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); }
function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); }

function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

// -----------------------------------------------------------------------------
// Add revert buttons to the page (vandal rollback)
// -----------------------------------------------------------------------------
function AddRevertButtonsnorm() 
{
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
  var l, article = '', vandal;
 // Add 'revert' links to a diff page [[Category:Wikipedia administrators who use VoA script]]
  //monobook
  if (document.getElementById('pt-userpage'))
     {var user_name = document.getElementById('pt-userpage').getElementsByTagName('a')[0].innerHTML;}
  //cologneblue
  else if (document.getElementById('quickbar') && document.getElementById('quickbar').getElementsByTagName('h6')[0])
      {
      var toplinks = document.getElementById('quickbar');
      var user_name = toplinks.innerHTML.split('<h6>My pages</h6>')[1].split('title="User:')[1].split('"')[0];
      }
  l = body.getElementsByTagName('td');
  for (i = 0; i < l.length; i++)
  {
    if (l[i].className == 'diff-otitle') 
    {
      if (!l[i].getElementsByTagName('a')[0]){return;}
      article = l[i].getElementsByTagName('a')[0].href.split('&')[0];
      pagename = article.split('title=')[1];
    } 
      else if (l[i].className == 'diff-ntitle') 
    {
      var toplink = l[i].getElementsByTagName('a')[0].href;
      var vandal = l[i].getElementsByTagName('a')[2].innerHTML;
      if (l[i].getElementsByTagName('a')[5].href.search(/&action=rollback/) !=-1)
        var rollbacklink = l[i].getElementsByTagName('a')[5].href;
      else if (l[i].getElementsByTagName('a')[6])
        var rollbacklink = l[i].getElementsByTagName('a')[6].href;
      var t = l[i].innerHTML;
      if (article != '' && toplink.indexOf('oldid=') == -1)
      {
        l[i].innerHTML = ' <strong><a href="' + article + '&action=history&limit=12&jsaction=IEnormalrevert&user=' + escape(vandal) + '&token=' + hex_md5(pagename + vandal + user_name) + '">' + prollbacklink + '</strong></a> || <strong><a href="javascript:RollbackAndWarn(\'' + vandal + '\',\'' + rollbacklink + '\')">' + vrollbacklink + '</a></strong> ' + t;
      }
    }
  }
}
////////////

function RollbackAndWarn(vandal,rollbacklnk)
{
   if (vandal.search(AOL_RANGES) == -1)
           {
     window.open(wgServer + '/w/index.php?title=User talk:' + vandal + '&action=edit' + '&action=edit&vanarticle=' + escape(wgTitle),'vandalwarn','location=no,toolbar=no,status=no,directories=no,scrollbars=yes');
           }
   location.href = rollbacklnk;
}

////////////Backlog bar////////////
function adminbacklog()
{
  if (wgServer != "http://en.wikipedia.org"){return;}
  if (window.ActiveXObject){return;}
  if (document.title.search(/(User:|User talk:|Talk:|Editing )/) == 0){return;}
  gml_xmlhttp = HTTPClient();
  if (!gml_xmlhttp)
    return;
  var pageurl = '/w/index.php?title=Special:Whatlinkshere&target=Template%3AAdminbacklog';
  gml_xmlhttp.open("GET", pageurl, true);
  gml_xmlhttp.onreadystatechange = adminbacklogbar;
  gml_xmlhttp.send(null);
}
//

//
function adminbacklogbar()
{
  if (gml_xmlhttp.readyState != 4)
    return;
  xml = gml_xmlhttp.responseText.split('Retrieved from "<a href=')[0].split('Retrieved from "<A href=')[0].split('<p>The following pages link to <b>')[1];
  var links = xml.split('" title="');
  var backlog = '';
for (i=0; i<links.length; i++)
  {
  var name = links[i].split('">')[0];
  if (name.search('(/|:Images on|:Images with|:Suspected)') == -1 && links[i].split('</li>')[0].indexOf('(transclusion)') != -1 && (name.indexOf('Wikipedia:') != -1 || name.indexOf('Category:') != -1))
  {backlog += ', <a href="/wiki/' + name + '" title="' + name + '">' + name.replace('Wikipedia:','').replace('Category:','') + '</a>';}
  }
backlog = backlog.replace(', ','');
if (backlog != '')
  {
  var message = '<div style="align: center; padding: .4em; font-size:9pt;">' + '<span style="color: darkred"><strong>Administrator backlogs:</span></strong> ' + backlog + '</div>';
  var csub=document.getElementById("top");
  var msg=document.createElement("alog");
  msg.innerHTML = message;
  msg.className="backlog";
  csub.insertBefore(msg, csub.firstChild)
  }
}
////////////

////////////Wikipedia:WikiProject User scripts/Scripts/RBL check////////////
// This script adds an "[[DNSBL|RBL]] check" link to the toolbox on IP user/talk/contribs pages.  <pre><nowiki>

$(function () {
    var href = document.getElementById('t-contributions');
    if (href) href = href.getElementsByTagName('a');
    if (href) href = href[0];
    if (href) href = href.href;
    else href = window.location.href;

    var addr = /(\/wiki\/|[?&]title=)Special:Contributions(\/([^\/?&#]*)|[?&#]|$)/.exec(href);
    if (!addr) return;
    addr = addr[3];
    if (!addr) {
        addr = /^[^?#]*\?([^&#]*&)*target=([^&#]*)/.exec(href);
        if (!addr) return;
        addr = addr[2];
    }
    if (!/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/.test(addr)) return;

    addLink('p-tb', 'http://www.robtex.com/rbls/'+addr+'.html', 'RBL check', 't-rblcheck', 'Multi-RBL check', null, 't-contributions');
});
////////////

/////////////////////////////////IP range contribs check/////////////////////////////////
//globals
var starting_IP_trunk = '';
var starting_IP_end = 0;
var IP_num_JS_count = 0;
var IP_num_JS_static = 0;
//

function IPRange_contribs_tab()
{
if (location.href.search(/Special(:|%3A)Contributions/) != -1 && location.href.search(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) != -1 && location.href.search(/\d{1,3}(@|%40)\d{1,2}/) == -1)
  {
  addTab("javascript:IPRange_contribs_query()", "/24 Range", "ca-range", "Check a medium or small IP range", "");
  addTab("javascript:IPRange_contribs_query2()", "/16 Range", "ca-range2", "Monitor a large IP range", "");
  }
}

//for /24 ranges
function IPRange_contribs_query()
{
if (location.href.indexOf('/Special:Contributions/') != -1)
{var IP = location.href.split('/Special:Contributions/')[1];}
else
{var IP = location.href.split('&target=')[1].split('&')[0];}
var number = prompt('Consecutive IP range indexes?' + '\n' + 'Use format: X-Y' + '\n' + '(For fourth IP block)');
if (!number || number=='' || number.split('-').length !=2){return;}
var start = 1*number.split('-')[0];
var end = 1*number.split('-')[1];
var count = end - start;
if (end > 255){end = 255;}
var IP = IP.split('.')[0] + '.' + IP.split('.')[1] + '.' + IP.split('.')[2] + '.' + start;
location.href = wgServer + '/w/index.php?&limit=1&target=' + IP + '@' + count + '&title=Special%3AContributions&namespace=';
}

//for /16 ranges
function IPRange_contribs_query2()
{
if (location.href.indexOf('/Special:Contributions/') != -1)
{var IP = location.href.split('/Special:Contributions/')[1];}
else
{var IP = location.href.split('&target=')[1].split('&')[0];}
var number = prompt('Consecutive IP range indexes?' + '\n' + 'Use format: X-Y' + '\n' + '(For third IP block)');
if (!number || number=='' || number.split('-').length !=2){return;}
var start = 1*number.split('-')[0];
var end = 1*number.split('-')[1];
var count = end - start;
if (end > 255){end = 255;}
var IP = IP.split('.')[0] + '.' + IP.split('.')[1] + '.' + start;
location.href = wgServer + '/w/index.php?&limit=1&target=' + IP + '@' + count + '&title=Special%3AContributions&namespace=';
}

function IPRange_contribs()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
//for /24 queries
if (location.href.search(/&target=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}%40\d{1,2}/) != -1 && location.href.indexOf('&title=Special%3AContributions') != -1)
  {
  var target = location.href.split('&target=')[1].split('&')[0];
  starting_IP_trunk = target.split('.')[0] + '.' + target.split('.')[1] + '.' + target.split('.')[2] + '.';
  var ending_num = target.split('%40')[1];
  starting_IP_end = target.split('.')[3].split('%40')[0];
//
  var IP_end_last_show = 1*starting_IP_end + 1*ending_num;
  var IP_start_show = starting_IP_trunk + starting_IP_end;
  var IP_last_show = starting_IP_trunk + IP_end_last_show;
  body.innerHTML = body.innerHTML.replace('No changes were found matching these criteria.','');
  document.getElementById('siteSub').innerHTML += "<br><strong>Checking IP range contributions from <span style='color: darkblue'>" + IP_start_show + "</span> to <span style='color: darkblue'>" + IP_last_show + "</span></strong>:";
  makeRangeRequestXML_DNS('GET', starting_IP_trunk + '0/24', null)
  }
//for /16 queries
else if (location.href.search(/&target=\d{1,3}\.\d{1,3}\.\d{1,3}%40\d{1,2}/) != -1 && location.href.indexOf('&title=Special%3AContributions') != -1)
  {
  var target = location.href.split('&target=')[1].split('&')[0];
  starting_IP_trunk = target.split('.')[0] + '.' + target.split('.')[1] + '.';
  var ending_num = target.split('%40')[1];
  starting_IP_end = target.split('.')[2].split('%40')[0];
//
  var IP_end_last_show = 1*starting_IP_end + 1*ending_num;
  var IP_start_show = starting_IP_trunk + starting_IP_end;
  var IP_last_show = starting_IP_trunk + IP_end_last_show;
  var starting_IP_end_last = 1*starting_IP_end + 1*ending_num;
  var ip_reg = '';
  for (var i=starting_IP_end; i <= starting_IP_end_last; i++)
     {
     if (i != starting_IP_end_last)
     {ip_reg += i + '|';}
     else
     {ip_reg += i;}
     }
  ip_reg = '" title="Special:Contributions">' + starting_IP_trunk + '(' + ip_reg + ')\\.\\d{1,3}<\\/a> ';
  ip_reg_RC_range = new RegExp(ip_reg,'i');
  body.innerHTML = body.innerHTML.replace('No changes were found matching these criteria.','');
  document.getElementById('siteSub').innerHTML += "<br><strong>Checking IP range contributions from <span style='color: darkblue'>" + IP_start_show + "</span> to <span style='color: darkblue'>" + IP_last_show + "</span></strong>:";
  var iterations = prompt('How many additional 10 minute checks?');
  if (!iterations){history.go(-1);}
  RC_XML_contribs_range(iterations);
  }
//for /24 UI
else if (location.href.search(/&target=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}@\d{1,2}/) != -1 && location.href.indexOf('&title=Special%3AContributions') != -1)
  {
  document.getElementById('siteSub').innerHTML += '<br><strong>Select a namespace and press "Go" to check contribtutions from this IP range. This will only check back 20 edits however.</strong>';
  }
//for /16 UI
else if (location.href.search(/&target=\d{1,3}\.\d{1,3}\.\d{1,3}@\d{1,2}/) != -1 && location.href.indexOf('&title=Special%3AContributions') != -1)
  {
  document.getElementById('siteSub').innerHTML += '<br><strong>Select a namespace and press "Go" to check contribtutions from this IP range. This will only check about 2-4 hours back of <i>recent changes</i>. Subsequent edits will be monitored each minute for X iterations.</strong>';
  }
}

//
var offset_RC_index = 0;
var timestamp_RC_index = 0;
function RC_XML_contribs_range(upper_limit)
{
upper_limit_RC_range = upper_limit;
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
body.innerHTML += '<ul></ul>';
RC_page_XML_range(0);
}

function RC_page_XML_range(offset_RC_index)
{
  document.getElementById('contentSub').innerHTML = "<strong>Checking last 5000 IP <i>recent changes</i> from timestamp '" + timestamp_RC_index + "' (" + offset_RC_index + "/" + upper_limit_RC_range + ")</strong>:";
  var namespace = '&namespace=';
  if (location.href.search(/&namespace=\d/) != -1)
    {namespace = '&namespace=' + location.href.split('&namespace=')[1].split('&')[0];}
//
  var URL = '/w/index.php?title=Special:Recentchanges&hideliu=1&limit=5000' + namespace + '&from=' + timestamp_RC_index + '&useskin=none';
  xml_http = HTTPClient();
  xml_http.open("GET", URL, true);
  xml_http.onreadystatechange = RC_page_XML_range_parse;
  xml_http.send(null);
}

function RC_page_XML_range_parse()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
   if (xml_http.readyState != 4)
  {return;}
  xml_rc_contribs_xml = xml_http.responseText;
  document.getElementById('contentSub').innerHTML = "<strong>Parsing <i>recent changes</i> XML...(" + offset_RC_index + "/" + upper_limit_RC_range + ")</strong>";
//timestamp
  if (xml_rc_contribs_xml.indexOf('/>Show new changes starting from <') !=-1)
    {timestamp_RC_index = xml_rc_contribs_xml.split('/>Show new changes starting from <')[1].split('from=')[1].split('"')[0].split('&')[0];}
  else
    {timestamp_RC_index = xml_rc_contribs_xml.split('name="from" value="')[1].split('"')[0];}
  timestamp_RC_index = timestamp_RC_index.substr(0,12) + '59';
//
  if (xml_rc_contribs_xml.indexOf('<ul class="special">') != -1)
    {xml_rc_contribs_xml = xml_rc_contribs_xml.split('<ul class="special">')[1].split('</ul>')[0];}
  var li_sections = xml_rc_contribs_xml.split('<li>');
  var last_index = li_sections.length-1;
  var rewrite = false;
  for (var i=1; i<li_sections.length; i++)
    {
    var html_li = li_sections[i].split('</li>')[0];
    if (html_li.search(ip_reg_RC_range) != -1)
    body.getElementsByTagName('ul')[0].innerHTML = '<li>' + html_li + '</li>' + body.getElementsByTagName('ul')[0].innerHTML;
    rewrite = true;
    }
  offset_RC_index = offset_RC_index + 1;
  if (offset_RC_index > upper_limit_RC_range)
    {
    document.getElementById('contentSub').innerHTML = "<strong>Done:<span style='color: blue'> edits retrieved.</span></strong>";
  body.ranSetupTooltipsAlready=false;
  setupTooltips(body);
    return;
    }
  setTimeout("RC_page_XML_range()",600000);
  document.getElementById('contentSub').innerHTML = "<strong>Waiting 10 minutes for next XML request...(" + offset_RC_index + "/" + upper_limit_RC_range + ")</strong>";
//rewrite popups
  if (rewrite==true)
    {
    body.ranSetupTooltipsAlready=false;
    setupTooltips(body);
    }
  //RC_page_XML_range(offset_RC_index);
}

//////////////////////////////

//security override HTTP request
//ALSO, reduce IE security settings
//For FF/NS, go enable, see "http://esw.w3.org/topic/SparqlCalendarDemoUsage#FAQ"
//Basically, enable "signed.applets.codebase_principal_support" in about:config 

//
function makeRangeRequestXML_DNS(type, url, parameters)
{ 
  document.getElementById('contentSub').innerHTML = "<strong>Checking DNS info for " + url + ". Please wait...</strong>";
  if(window.XMLHttpRequest)
  {
try {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } 
catch (e) {alert("Permission UniversalBrowserRead denied. Please enable 'signed.applets.codebase_principle_support' through 'about:config' in your browser."); } 
http_request = false;
http_request = new XMLHttpRequest(); 
if (http_request.overrideMimeType) 
{http_request.overrideMimeType('text/xml'); }
if (!http_request) 
{alert('Cannot create XMLHTTP instance'); return false;} 
http_request.onreadystatechange = IPRange_contribs_XML_ready;
http_request.open(type, 'http://www.dnsstuff.com/tools/ptr.ch?ip=' + url, true); 
http_request.send(parameters); 
  }
  else if (window.ActiveXObject)
  {
    try
    {http_request = new ActiveXObject("Msxml2.XMLHTTP");} 
    catch (e)
     {
      try
      {http_request = new ActiveXObject("Microsoft.XMLHTTP");} 
       catch (e){}
     }
  if (!http_request) {showError(ERROR_XML);}
  http_request.onreadystatechange = IPRange_contribs_XML_ready;
  http_request.open(type, 'http://www.dnsstuff.com/tools/ptr.ch?ip=' + url, true); 
  http_request.send(parameters); 
  }
}
//

//
function makeRangeRequestXML_WHOIS(type, url, parameters)
{ 
  document.getElementById('contentSub').innerHTML = "<strong>Looking up WHOIS info for " + current_IP_name + " </strong>:";
  if(window.XMLHttpRequest)
  {
try {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } 
catch (e) {alert("Permission UniversalBrowserRead denied. Please enable 'signed.applets.codebase_principle_support' through 'about:config' in your browser."); } 
http_request = false;
http_request = new XMLHttpRequest(); 
if (http_request.overrideMimeType) 
{http_request.overrideMimeType('text/xml'); }
if (!http_request) 
{alert('Cannot create XMLHTTP instance'); return false;} 
http_request.onreadystatechange = parse_contribs_ready;
http_request.open(type, 'http://www.dnsstuff.com/tools/whois.ch?ip=' + url, true); 
http_request.send(parameters); 
  }
  else if (window.ActiveXObject)
  {
    try
    {http_request = new ActiveXObject("Msxml2.XMLHTTP");} 
    catch (e)
     {
      try
      {http_request = new ActiveXObject("Microsoft.XMLHTTP");} 
       catch (e){}
     }
  if (!http_request) {showError(ERROR_XML);}
  http_request.onreadystatechange = parse_contribs_ready;
  http_request.open(type, 'http://www.dnsstuff.com/tools/whois.ch?ip=' + url, true); 
  http_request.send(parameters); 
  }
}
//////////////////////////////

function IPRange_contribs_XML_ready()
{
  if (http_request.readyState != 4)
  {return;}
  xml_DNS_user_CU = http_request.responseText;
  if (xml_DNS_user_CU.indexOf('<PRE>') != -1)
    {xml_DNS_user_CU = xml_DNS_user_CU.split('<PRE>')[1].split('</PRE>')[0];}
  IPRange_contribs_XML();
}

function IPRange_contribs_XML()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
  var namespace = '&namespace=';
  if (location.href.search(/&namespace=\d/) != -1)
  {namespace = '&namespace=' + location.href.split('&namespace=')[1].split('&')[0];}
  var target = location.href.split('&target=')[1].split('&')[0];
  if (target.indexOf('@') != -1)
  {var ending_num = target.split('@')[1];}
  else if (target.indexOf('%40') != -1)
  {var ending_num = target.split('%40')[1];}
  var current_num = 1*starting_IP_end + 1*IP_num_JS_count;
  if (IP_num_JS_count > ending_num)
  {
  document.getElementById('contentSub').innerHTML = "<strong>Done:<span style='color: blue'> edits retrieved.</span></strong>";
  edits_page_compared_js = 1;
  addTab("javascript:compare_contribs_range()", "Compare", "ca-comp", "Compare", "");
  addTab("javascript:contribs_reset()", "reset", "ca-reset", "Reset to range contribs", "");
  body.ranSetupTooltipsAlready=false;
  setupTooltips(body);
  return;
  }
  if (current_num > 255)
  {
  document.getElementById('contentSub').innerHTML = "<strong><span style='color: darkred'>IP bloc number exceeds 255, query stopped!</span></strong>";
  edits_page_compared_js = 1;
  addTab("javascript:compare_contribs_range()", "Compare", "ca-comp", "Compare", "");
  addTab("javascript:contribs_reset()", "reset", "ca-reset", "Reset to range contribs", "");
  body.ranSetupTooltipsAlready=false;
  setupTooltips(body);
  return;
  }
  if (location.href.indexOf('Special:Contributions&target=') != -1)
  {
  var URL = location.href.split('Special:Contributions&target=')[0] + 'Special:Contributions&target=' + starting_IP_trunk + current_num + namespace + '&limit=20';
  }
  else
  {
  var URL = '/w/index.php?title=Special:Contributions&target=' + starting_IP_trunk + current_num + namespace + '&limit=20';
  }
  document.getElementById('contentSub').innerHTML = "<strong>Checking: " + starting_IP_trunk + current_num + "</strong>";
  current_IP_name = starting_IP_trunk + current_num;
  IPRange_contribs_edits();
}

function IPRange_contribs_edits()
{
  var namespace = '&namespace=';
  if (location.href.search(/&namespace=\d/) != -1)
  {namespace = '&namespace=' + location.href.split('&namespace=')[1].split('&')[0];}
//
  document.getElementById('contentSub').innerHTML = "<strong>Searching contributions info for " + current_IP_name + " </strong>:";
  var URL = '/w/index.php?title=Special:Contributions&target=' + current_IP_name + namespace + '&limit=20&useksin=none';
  xml_http = HTTPClient();
  xml_http.open("GET", URL, true);
  xml_http.onreadystatechange = IPRange_contribs_WHOIS;
  xml_http.send(null);
}

function IPRange_contribs_WHOIS()
{
  if (xml_http.readyState != 4)
  {return;}
  xml_edits_user = xml_http.responseText;
  if (xml_edits_user.indexOf('No changes were found matching these criteria.') == -1)
    {makeRangeRequestXML_WHOIS('GET', current_IP_name, null);}
  else {xml_WHOIS_user_CU = ''; parse_contribs_xml();}
}

function parse_contribs_ready()
{
  if (http_request.readyState != 4)
  {return;}
  xml_WHOIS_user_CU = http_request.responseText;
  parse_contribs_xml();
}

function parse_contribs_xml()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
//WHOIS
  if (xml_WHOIS_user_CU.indexOf('<h3>Whois Record</h3>') !=-1)
    {xml_WHOIS_user_CU = xml_WHOIS_user_CU.split('<h3>Whois Record</h3>')[1];}
  else if (xml_WHOIS_user_CU.indexOf('<H3>Whois Record</H3>') !=-1)
    {xml_WHOIS_user_CU = xml_WHOIS_user_CU.split('<H3>Whois Record</H3>')[1];}
  if (xml_WHOIS_user_CU.indexOf('<p class="whois_record">') != -1)
    {xml_WHOIS_user_CU = xml_WHOIS_user_CU.split('<p class="whois_record">')[1].split('</p>')[0];}
  if (xml_WHOIS_user_CU.indexOf('<TABLE ') != -1)
    {xml_WHOIS_user_CU = xml_WHOIS_user_CU.split('<TABLE ')[1];}
//parse WHOIS results
  var OrgName = '';
  var Address = '';
  var City = '';
  var StateProv = '';
  var Country = '';
  if (xml_WHOIS_user_CU.indexOf('OrgName:') !=-1)
    {OrgName = xml_WHOIS_user_CU.split('OrgName:')[1].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.split('Address:')[1] !=undefined)
    {Address = xml_WHOIS_user_CU.split('Address:')[1].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.split('Address:')[2] !=undefined)
    {Address += xml_WHOIS_user_CU.split('Address:')[2].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.split('Address:')[3] !=undefined)
    {Address += xml_WHOIS_user_CU.split('Address:')[3].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.split('address:')[1] !=undefined)
    {Address = xml_WHOIS_user_CU.split('address:')[1].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.split('address:')[2] !=undefined)
    {Address += xml_WHOIS_user_CU.split('address:')[2].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.split('address:')[3] !=undefined)
    {Address += xml_WHOIS_user_CU.split('address:')[3].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.indexOf('City:') !=-1)
    {City = '<u>' + xml_WHOIS_user_CU.split('City:')[1].split('\n')[0].split('\r')[0].split(']')[0] + '</u>' + ', ';}
//DNS again...
  if (xml_DNS_user_CU.indexOf('City: ') !=-1)
    {City = '<u>' + xml_DNS_user_CU.split('City: ')[1].split('\n')[0].split('\r')[0].split(']')[0] + '</u>' + ', ';}
//
  if (xml_WHOIS_user_CU.indexOf('StateProv:') !=-1)
    {StateProv = xml_WHOIS_user_CU.split('StateProv:')[1].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.indexOf('OrgName:') !=-1)
    {Country = xml_WHOIS_user_CU.split('Country:')[1].split('\n')[0].split('\r')[0].split(']')[0] + ', ';}
  if (xml_WHOIS_user_CU.search(/(OrgName|Address|City|StateProv|Country):/) ==-1 && xml_WHOIS_user_CU.indexOf('<br>') != -1)
    {OrgName = xml_WHOIS_user_CU.split('<br>')[1].split('</br>')[0] + ', ';}
  var output_IP_info = '<strong>' + OrgName + '</strong>' + Address + City + '<strong>' + StateProv + '</strong>' + '<i>' + Country + '</i>';
//parse DNS items
  document.getElementById('contentSub').innerHTML = '<strong>Parsing DNS XML page data for ' + current_IP_name + '...</strong>';
  var rev_DNS_info = '?';
  if (xml_DNS_user_CU.indexOf(current_IP_name + ' - ') !=-1)
     {rev_DNS_info = '<strong>' + xml_DNS_user_CU.split(current_IP_name + ' - ')[1].split('\n')[0].split('\r')[0] + '</strong>';}
  output_IP_info += '<span style="color:darkred;">DNS</span>: ' + rev_DNS_info;
  output_IP_info = output_IP_info.replace(/Internet Assigned Numbers Authority/,'IANA');
//parse edits
  if (xml_edits_user.indexOf('No changes were found matching these criteria.') == -1)
  {
  var contribs = xml_edits_user.split('<ul>')[1].split('</ul>')[0];
  var current_num = 1*starting_IP_end + 1*IP_num_JS_count;
  body.innerHTML += '<p><strong><a href="/wiki/Special:Contributions/' + current_IP_name + '">' + current_IP_name + '</a></strong> <span style="color: darkred">||</span> ' + output_IP_info + '</p>' + '<ul>' + contribs + '</ul>';
  }
  else
  {
  body.innerHTML += '<p><strong>' + current_IP_name + '</strong> <i>(no contribs exist)</i> <span style="color: darkred">||</span> ' + output_IP_info + '</p>';
  }
  IP_num_JS_count += 1;
  IPRange_contribs_XML();
}
/////////////////////////////////

////////////////////Compare contribs////////////////////
function Compare_tab_add()
{
if (document.title.indexOf('User contributions') == 0 && location.href.search(/\d{1,3}(@|%40)\d{1,2}/) == -1)
{addTab("javascript:compare_contribs()", "Compare", "ca-comp", "Compare", "");}
}

//globals
username_contribs_comp = '';
username_contribs_comp2 = '';
//
function compare_contribs()
{
username_contribs_comp2 = prompt('Compare with who?' + '\n' + '*for last 2000 edits' + '\n' + '*selected namespace' + '\n' + '*for last 15 (un)blocks');
if (!username_contribs_comp2){return;}
username_contribs_comp = document.getElementById('contentSub').getElementsByTagName('a')[0].innerHTML;
if (username_contribs_comp == 'Talk' && location.href.indexOf('&target=') != -1)
{username_contribs_comp = location.href.split('&target=')[1].split('&')[0];}
else if (username_contribs_comp == 'Talk' && location.href.indexOf('/Special:Contributions/') != -1)
{username_contribs_comp = location.href.split('/Special:Contributions/')[1];}
if (username_contribs_comp == username_contribs_comp2){alert('Cannot compare a user with his/herself!'); return;}
  document.getElementById('contentSub').innerHTML += "<br><strong>Requesting block log and contribs XML for users...</strong>";
  var namespace = '';
//get namespace
  if (document.getElementById('namespace'))
    {
    var inputs = document.getElementById('namespace').getElementsByTagName('option');
    for (i=0; i<inputs.length; i++)
       {
       if (inputs[i].selected==true)
          {var namespace = '&namespace=' + inputs[i].value; break;}
       }
    } 
//
  var URL = '/w/index.php?title=Special:Contributions&target=' + username_contribs_comp + namespace + '&limit=2000&useksin=none';
  xml_http = HTTPClient();
  xml_http.open("GET", URL, true);
  xml_http.onreadystatechange = parse_xml_contribs2;
  xml_http.send(null);
}

function parse_xml_contribs2()
{
  if (xml_http.readyState != 4)
  {return;}
  doc1_xml_contribs_xml = xml_http.responseText;
  var namespace = '';
//get namespace
  if (document.getElementById('namespace'))
    {
    var inputs = document.getElementById('namespace').getElementsByTagName('option');
    for (i=0; i<inputs.length; i++)
       {
       if (inputs[i].selected==true)
          {var namespace = '&namespace=' + inputs[i].value; break;}
       }
    } 
//
  var URL = '/w/index.php?title=Special:Contributions&target=' + username_contribs_comp2 + namespace + '&limit=2000&useksin=none';
  xml_http = HTTPClient();
  xml_http.open("GET", URL, true);
  xml_http.onreadystatechange = parse_xml_comparecontribs_log;
  xml_http.send(null);
}

function compare_contribs_range()
{
username_contribs_comp2 = prompt('Compare with who?' + '\n' + '*for last 2000 edits' + '\n' + '*current namespace');
if (!username_contribs_comp2){return;}
username_contribs_comp = 'Selected IP range';
  document.getElementById('contentSub').innerHTML += "<br><strong>Requesting contribs XML for other user...</strong>";
  var namespace = '';
  if (location.href.search(/&namespace=\d/) != -1)
     {var namespace = location.href.match(/&namespace=\d/)[0];}
  var URL = '/w/index.php?title=Special:Contributions&target=' + username_contribs_comp2 + namespace + '&limit=2000&useksin=none';
  xml_http = HTTPClient();
  xml_http.open("GET", URL, true);
  xml_http.onreadystatechange = parse_xml_contribs_range;
  xml_http.send(null);
}

//cache
doc_js_ipcontribs_range_cache = '';
//
function parse_xml_contribs_range()
{
  if (xml_http.readyState != 4)
  {return;}
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
  document.getElementById('contentSub').innerHTML += "<br><strong>Parsing contribs XML for other user...</strong>";
  xml = xml_http.responseText;
  var doc2 = standard_XMLParse(xml);
  if (doc_js_ipcontribs_range_cache == '')
  {
  doc_js_ipcontribs_range_cache = body.innerHTML;
  }
  else
  {body.innerHTML = doc_js_ipcontribs_range_cache;}
  var doc1 = body;
//check for any contribs
  if (doc1.getElementsByTagName('li')[0] == undefined)
     {document.getElementById('contentSub').innerHTML += "<br><strong><span style='color: red'>Note: One of these users has no contributions in this namespace!</span></strong>"; return;}
  else if (doc2.getElementById('bodyContent').getElementsByTagName('li')[0] == undefined)
     {document.getElementById('contentSub').innerHTML += "<br><strong><span style='color: red'>Note: One of these users has no contributions in this namespace!</span></strong>"; return;}
//
  var l = doc1.getElementsByTagName('li');
  var name_list = '||';
  var list_common = '||';
  for (i=0; i<l.length; i++)
  {
    if (l[i].getElementsByTagName('a')[2] != undefined)
    {
    var name = l[i].getElementsByTagName('a')[2].innerHTML;
    name_list += name + '||';
    }
  }
  if (doc2.getElementsByTagName('ul')[0] != undefined)
  {
  var h = doc2.getElementById('bodyContent').getElementsByTagName('ul')[0].getElementsByTagName('li');
     for (i=0; i<h.length; i++)
     {
     var name = h[i].getElementsByTagName('a')[2].innerHTML;
     if (name_list.indexOf('||' + name + '||') != -1 && list_common.indexOf('||' + name + '||') == -1)
     {list_common += name + '||';}
     }
  }
//
  if (list_common == '||' || doc2.getElementsByTagName('ul')[0] == undefined)
  {
  document.getElementById('contentSub').innerHTML += "<br><strong>Done:<span style='color: blue'> comparison between edits by </span>" + username_contribs_comp + " <span style='color: blue'>and</span> " + username_contribs_comp2 + " <span style='color: blue'>finished.</span> (no matches)</strong>";
  var uls = body.getElementsByTagName('ul');
  for (i=0; i<uls.length; i++)
     {
     uls[i].innerHTML = '';
     }
  var ps = body.getElementsByTagName('p');
  for (i=1; i<ps.length; i++)
     {
     ps[i].innerHTML = '';
     }
  return;
  }
//
  var txt_add = '';
  var common_names = list_common.split('||');
  for (i=1; i< common_names.length-1; i++)
  {
  var pgname = common_names[i];
  var pglink = '<a href="/wiki/' + pgname + '" title="' + pgname + '">' + pgname + '</a>'; 
  txt_add += "<p><strong>Page: " + pglink + "</strong></p><span style='color: purple'><p><strong>" + username_contribs_comp2 + "</strong></p></span><ul>";
     for (k=0; k<h.length; k++)
      {
      var name = h[k].getElementsByTagName('a')[2].innerHTML;
       if (name == pgname)
       {txt_add += '<li>' + h[k].innerHTML + '</li>';}
      }
   txt_add += "</ul><p><span style='color: darkred'><strong>" + username_contribs_comp + "</strong></span></p><ul>";
     for (k=0; k<l.length; k++)
      {
      if (l[k].getElementsByTagName('a')[2] != undefined)
        {
         var name = l[k].getElementsByTagName('a')[2].innerHTML;
         if (name == pgname)
         {txt_add += '<li>' + l[k].innerHTML + '</li>';}
        }
      }
      txt_add += '</ul>'
   }
//
  document.getElementById('contentSub').innerHTML += "<br><strong>Done:<span style='color: blue'> comparison between edits by </span>" + username_contribs_comp + " <span style='color: blue'>and</span> " + username_contribs_comp2 + " <span style='color: blue'>finished.</span></strong>";
  body.getElementsByTagName('ul')[0].innerHTML = '';
  var uls = body.getElementsByTagName('ul');
  for (i=0; i<uls.length; i++)
     {uls[i].innerHTML = '';}
  var ps = body.getElementsByTagName('p');
  for (i=1; i<ps.length; i++)
     {ps[i].innerHTML = '';}
  body.innerHTML += txt_add;
  edits_page_compared_js = 1;
  addTab("javascript:date_highlight()", "date", "ca-datem", "Highlight a date", "");
  body.ranSetupTooltipsAlready=false;
  setupTooltips(body);
}

function contribs_reset()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
  if (doc_js_ipcontribs_range_cache == '')
  {
  doc_js_ipcontribs_range_cache = body.innerHTML;
  }
  else
  {body.innerHTML = doc_js_ipcontribs_range_cache;}
  body.ranSetupTooltipsAlready=false;
  setupTooltips(body);
}

function parse_xml_comparecontribs_log()
{
  if (xml_http.readyState != 4)
  {return;}
  doc2_xml_contribs_xml = xml_http.responseText;
  var namespace = '';
  if (location.href.indexOf('&namespace=') !=-1)
    {namespace = location.href.split('&namespace=')[1].split('&')[0];}
  URL = '/w/index.php?title=Special:Log&type=block&limit=15&page=User%3A' + username_contribs_comp + '&useskin=none';
  xml_http = HTTPClient();
  xml_http.open("GET", URL, true);
  xml_http.onreadystatechange = parse_xml_comparecontribs_log2;
  xml_http.send(null);
}

function parse_xml_comparecontribs_log2()
{
  if (xml_http.readyState != 4)
  {return;}
  doc1_xml_log_xml = xml_http.responseText;
  URL = '/w/index.php?title=Special:Log&type=block&limit=15&page=User%3A' + username_contribs_comp2 + '&useskin=none';
  xml_http = HTTPClient();
  xml_http.open("GET", URL, true);
  xml_http.onreadystatechange = parse_xml_comparecontribs;
  xml_http.send(null);
}

function parse_xml_comparecontribs()
{
  if (xml_http.readyState != 4)
  {return;}
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
  document.getElementById('contentSub').innerHTML += "<br><strong>Parsing block log and contribs XML for users...</strong>";
  doc2_xml_log_xml = xml_http.responseText;
  var user1block_count = 0;
  var user2block_count = 0;
  var user1edit_count = 0;
  var user2edit_count = 0;
//
  var txt_add = '';
  if (doc1_xml_log_xml.indexOf('<ul>') != -1 || doc2_xml_log_xml.indexOf('<ul>') != -1)
  {
  txt_add += '<div style="background-color: #f9f9f9; border: 2px solid red; padding: 10px;">';
  txt_add += "<p><span style='color: red'><strong>Block log (last 20):</span></strong></p>";
  }
//
  if (doc2_xml_log_xml.indexOf('<ul>') != -1)
  {
  user2block_ul = '<ul>' + doc2_xml_log_xml.split('<ul>')[1].split('</ul>')[0] + '</ul>';
  user2block_count = user2block_ul.split('</a>) blocked "<a').length - 1;
  txt_add += "<p><span style='color: purple'><strong>" + username_contribs_comp2 + "</strong></span></p>";
  txt_add += user2block_ul;
  }
  if (doc1_xml_log_xml.indexOf('<ul>') != -1)
  {
  user1block_ul = '<ul>' + doc1_xml_log_xml.split('<ul>')[1].split('</ul>')[0] + '</ul>';
  user1block_count = user1block_ul.split('</a>) blocked "<a').length - 1;
  txt_add += "<p><span style='color: darkred'><strong>" + username_contribs_comp + "</strong></span></p><ul>";
  txt_add += user1block_ul;
  }
  if (doc1_xml_log_xml.indexOf('<ul>') != -1 || doc2_xml_log_xml.indexOf('<ul>') != -1)
  {
  txt_add += '</div><br style="clear:both;">';
  }
//
  txt_add += '<div style="background-color: #f9f9f9; border: 2px solid #8888aa; padding: 10px;">';
  txt_add += "<p><span style='color: darkblue'><strong>Pages edited in common by</span> " + username_contribs_comp + " <span style='color: darkblue'>and</span> " + username_contribs_comp2 + "<span style='color: darkblue'>:</span></strong></p>";
//
  if (doc1_xml_contribs_xml.indexOf('<ul>') != -1)
  {user1edit_count = doc1_xml_contribs_xml.split('<ul>')[1].split('</ul>')[0].split('<li>').length - 1;}
  if (doc2_xml_contribs_xml.indexOf('<ul>') != -1)
  {user2edit_count = doc2_xml_contribs_xml.split('<ul>')[1].split('</ul>')[0].split('<li>').length - 1;}
//
  var blocklink = '<a href = "/w/index.php?title=Special:Log&type=block&limit=20&page=User%3A' + username_contribs_comp + '">block(s)</a>';
  var blocklink2 = '<a href = "/w/index.php?title=Special:Log&type=block&limit=20&page=User%3A' + username_contribs_comp2 + '">block(s)</a>';
//parse
  var doc1 = standard_XMLParse(doc1_xml_contribs_xml);
  var doc2 = standard_XMLParse(doc2_xml_contribs_xml);
//check for any contribs
  if (doc1.getElementById('bodyContent').getElementsByTagName('li')[0] == undefined)
     {document.getElementById('contentSub').innerHTML += "<br><strong><span style='color: red'>Note: One of these users has no contributions in this namespace!</span></strong>"; return;}
  else if (doc2.getElementById('bodyContent').getElementsByTagName('li')[0] == undefined)
     {document.getElementById('contentSub').innerHTML += "<br><strong><span style='color: red'>Note: One of these users has no contributions in this namespace!</span></strong>"; return;}
//compile a list of pages edited
  var User_talk1 = 'User talk:' + username_contribs_comp;
  var User_talk2 = 'User talk:' + username_contribs_comp2;
  var l = doc1.getElementById('bodyContent').getElementsByTagName('ul')[0].getElementsByTagName('li');
  var name_list = '||';
  var list_common = '||';
  var list_talkbyuser1 = '';
  var list_talkbyuser2 = '';
  var list_afdbyuser1 = '';
  var list_afdbyuser2 = '';
  for (i=0; i<l.length; i++)
  {
  var name = l[i].getElementsByTagName('a')[2].innerHTML;
  name_list += name + '||';
  if (name == User_talk2)
    {list_talkbyuser1 += '<li>' + l[i].innerHTML + '</li>';}
  else if (name.search(/.+ for Deletion|(Redirects|Categories) for [Dd]iscussion|Deletion review/) ==0)
    {list_afdbyuser1 += '<li>' + l[i].innerHTML + '</li>';}
  }
//compile a list of pages edited in common (along with second talk page run)
  if (doc2.getElementsByTagName('ul')[0] != undefined)
  {
  var h = doc2.getElementById('bodyContent').getElementsByTagName('ul')[0].getElementsByTagName('li');
     for (i=0; i<h.length; i++)
     {
     var name = h[i].getElementsByTagName('a')[2].innerHTML;
     if (name_list.indexOf('||' + name + '||') != -1 && list_common.indexOf('||' + name + '||') == -1)
       {list_common += name + '||';}
     if (name == User_talk1)
       {list_talkbyuser2 += '<li>' + h[i].innerHTML + '</li>';}
     else if (name.search(/.+ for Deletion|(Redirects|Categories) for [Dd]iscussion|Deletion review/) ==0)
       {list_afdbyuser2 += '<li>' + h[i].innerHTML + '</li>';}
     }
  }
//
  if (list_common == '||' || doc2.getElementsByTagName('ul')[0] == undefined)
  {
  document.getElementById('contentSub').innerHTML += "<br><strong>Done:<span style='color: blue'> edit comparison between</span> " + username_contribs_comp + " (<span style='color: blue'>" + user1edit_count + "</span> scanned) (<span style='color: red'>" + user1block_count + "</span> " + blocklink + ") <span style='color: blue'>and</span> " + username_contribs_comp2 + " (<span style='color: blue'>" + user2edit_count + "</span> scanned) (<span style='color: red'>" + user2block_count + "</span> " + blocklink2 + ") <span style='color: blue'>finished.</span> (no matches)</strong>";
  body.getElementsByTagName('ul')[0].innerHTML = '';
  document.getElementsByTagName('p')[1].innerHTML = '';
  document.getElementsByTagName('p')[2].innerHTML = '';
  return;
  }
//return list of edits to pages in common
  var common_names = list_common.split('||');
  for (i=1; i< common_names.length-1; i++)
  {
  var pgname = common_names[i];
  var pglink = '<a href="/wiki/' + pgname + '" title="' + pgname + '">' + pgname + '</a>'; 
  txt_add += "<p><strong>Page: " + pglink + "</p></strong><span style='color: purple'><strong><p>" + username_contribs_comp2 + "</strong></span></p><ul>";
     for (k=0; k<h.length; k++)
      {
      var name = h[k].getElementsByTagName('a')[2].innerHTML;
       if (name == pgname)
       {txt_add += '<li>' + h[k].innerHTML + '</li>';}
      }
   txt_add += "</ul><p><span style='color: darkred'><strong>" + username_contribs_comp + "</strong></span></p><ul>";
     for (k=0; k<l.length; k++)
      {
      var name = l[k].getElementsByTagName('a')[2].innerHTML;
       if (name == pgname)
       {txt_add += '<li>' + l[k].innerHTML + '</li>';}
      }
      txt_add += '</ul>'
   }
  txt_add += '</div><br style="clear:both;">';
//talk edit parsing
  if (list_talkbyuser1 != '' || list_talkbyuser2 != '')
     {
     txt_add += '<div style="background-color: #f9f9f9; border: 2px solid darkgreen; padding: 10px;">';
     txt_add += "<p><strong><span style='color: darkgreen'>User talk interaction</span></strong></p>";
     }
  if (list_talkbyuser2 != '')
     {
     txt_add += "<p><strong><span style='color: purple'>Edits by</span> " + username_contribs_comp2 + "<span style='color: purple'> to talk page of</span> " + username_contribs_comp + "</strong></span></p><ul>" + list_talkbyuser2 + "</ul>";
     }
  if (list_talkbyuser1 != '')
     {
     txt_add += "<p><strong><span style='color: darkred'>Edits by</span> " + username_contribs_comp + "<span style='color: darkred'> to talk page of</span> " + username_contribs_comp2 + "</strong></span></p><ul>" + list_talkbyuser1 + "</ul>";
     }
  txt_add += '</div><br style="clear:both;">';
//AFD parsing
  if (list_afdbyuser1 != '' && list_afdbyuser2 != '')
     {
     txt_add += '<div style="background-color: #f9f9f9; border: 2px solid #FF6600; padding: 10px;">';
     txt_add += "<p><strong><span style='color: #FF6600'>Edits to deletion pages</span></strong></p>";
     txt_add += "<p><strong><span style='color: purple'>" + username_contribs_comp2 + "</span></strong></p><ul>" + list_afdbyuser2 + "</ul>";
     txt_add += "<p><strong><span style='color: darkred'>" + username_contribs_comp + "</span></strong></p><ul>" + list_afdbyuser1 + "</ul>";
     }
  txt_add += '</div><br style="clear:both;">';
//Finish
  document.getElementById('contentSub').innerHTML += "<br><strong>Done:<span style='color: blue'> edit comparison between</span> " + username_contribs_comp + " (<span style='color: blue'>" + user1edit_count + "</span> scanned) (<span style='color: red'>" + user1block_count + "</span> " + blocklink + ") <span style='color: blue'>and</span> " + username_contribs_comp2 + " (<span style='color: blue'>" + user2edit_count + "</span> scanned) (<span style='color: red'>" + user2block_count + "</span> " + blocklink2 + ") <span style='color: blue'>finished.</span></strong>";
  body.getElementsByTagName('ul')[0].innerHTML = '';
  document.getElementsByTagName('p')[1].innerHTML = '';
  document.getElementsByTagName('p')[2].innerHTML = '';
  body.innerHTML += txt_add;
  edits_page_compared_js = 1;
  addTab("javascript:date_highlight()", "date", "ca-datem", "Highlight a date", "f");
  body.ranSetupTooltipsAlready=false;
  setupTooltips(body);
}
////////////////////
function date_highlight()
{
//monobook
if (document.getElementById('bodyContent'))
  {
  var body = document.getElementById('bodyContent');
  }
//cologneblue
else if (document.getElementById('quickbar'))
  {
  if (!document.getElementById('content')){return;}
  var body = document.getElementById('content');
  }
if (!body.getElementsByTagName('li')[0]){return;}
var date = prompt('This will highlight a certain date.' + '\n' + 'Enter a date fragment:' + '\n' + '(example: "August 7, 2006")');
if (!date){return;}
var l = body.getElementsByTagName('li');
  for (var i=0; i<l.length; i++)
  {
  l[i].innerHTML = l[i].innerHTML.replace(/<span style="background-color:.+"><i>(.+)<\/i><\/span>/i,'$1');
  if (l[i].innerHTML.split('(<a href="')[0].indexOf(date) !=-1)
    {l[i].innerHTML = '<span style="background-color: #FFFFCC"><i>' + l[i].innerHTML + '</i></span>';}
  }
  body.ranSetupTooltipsAlready=false;
  setupTooltips(body);
}

function BlockAOL_tab()
{
if (document.title.indexOf('Recent changes') == 0)
   {addTab("javascript:BLOCK_AOL()", "{{Block all AOL ranges}}", "ca-baol", "Block all AOL IPs", "");}
}

function BLOCK_AOL()
{
var time = prompt('WARNING: this will temporarily block *all* AOL IP ranges!' + '\n' + 'Enter a valid block duration:')
if (!time){alert('Operation aborted.'); return;}
if (time.length < 5){alert('Operation aborted.'); return;}
ranges = new Array();
ranges[0] = '64.12.0.0/16';
ranges[1] = '149.174.0.0/16';
ranges[2] = '152.163.0.0/16';
ranges[3] = '195.93.0.0/17';
ranges[4] = '198.81.0.0/19';
ranges[5] = '202.67.64.0/18';
ranges[6] = '205.188.0.0/16';
ranges[7] = '207.200.64.0/18';
  for (var i=0; i<ranges.length; i++)
  {
  var URL = wgServer + '/w/index.php?title=Special:Blockip&wpBlockAddress=' + ranges[i] + '&wpBlockExpiry=other&wpBlockOther=' + time + '&wpBlockReason=Temporary block of AOL users due to severe disruption. [ip only] [no new accounts]';
  window.open(URL,'WPB:' + ranges[i],'height=800,width=800,directories=yes,resizeable=yes,scrollbars=yes');
  }
}

function AOL_confirm_block()
{
if (location.href.indexOf('&wpBlockReason=Temporary%20block%20of%20AOL') !=-1)
   {
   document.getElementById('wpAnonOnly').checked=true;
   document.getElementById('wpCreateAccount').checked=true;
   document.blockip.submit();
   }
}

function deletehist()
{
  if (location.href.search(/Special:Log\/delete|&type=delete/) !=-1)
  {
  var ul = document.getElementById('bodyContent').getElementsByTagName('ul')[0];
  if (!ul || !ul.getElementsByTagName('li')[0]){return;}
  var l = ul.getElementsByTagName('li');
//admin or sysop viewing this?
  if (l[0].innerHTML.indexOf('">block</a>)') ==-1){return;}
  for (var i=0; i<l.length; i++)
     {
     var name = l[i].getElementsByTagName('a')[4].innerHTML;
     l[i].innerHTML = '<a href="/wiki/Special:Undelete/' + name + '">(review)</a> ' + l[i].innerHTML;
     }
  }
}

function blockhist()
{
  if (location.href.search(/Special:(Log\/block|Blockip)|&type=block/) !=-1)
  {
  var ul = document.getElementById('bodyContent').getElementsByTagName('ul')[0];
  if (!ul || !ul.getElementsByTagName('li')[0]){return;}
  var l = ul.getElementsByTagName('li');
//admin or sysop viewing this?
  if (l[0].innerHTML.indexOf('">block</a>)') ==-1){return;}
//unblock links
  if (location.href.search(/&page=[^&]/) ==-1)
     {
     for (var i=0; i<l.length; i++)
       {
         if (l[i].getElementsByTagName('a')[4])
         {
     var name = l[i].getElementsByTagName('a')[4].innerHTML;
     l[i].innerHTML = '(<a href="/w/index.php?title=Special%3ALog&type=block&page=User:' + name + '">hist</a>) (<a href="/w/index.php?title=Special%3AIpblocklist&action=search&limit=&ip=' + name + '">status</a>) ' + l[i].innerHTML;
         }
       }
     }
  else
     {
     var name = l[0].getElementsByTagName('a')[4].innerHTML;
     l[0].innerHTML = '(<a href="/w/index.php?title=Special%3AIpblocklist&action=search&limit=&ip=' + name + '">status</a>) ' + l[0].innerHTML;
     }
  }
}

//options
$(SA_main_functions)
function SA_main_functions()
{
jswin_close();
deletehist();
blockhist();
winclosed();
IEhistory_revert();
AddRevertButtonsnorm();
addmasterroll();
Compare_tab_add();
IPRange_contribs();
IPRange_contribs_tab();
BlockAOL_tab();
AOL_confirm_block();
if (location.href.search(/action=/) == -1 && location.href.search(/Special:(Watchlist|Recentchanges)/) != -1)
{adminbacklog();}
}
//

//END</nowiki></pre>