Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/* <nowiki> */
document.write('<link rel="stylesheet" type="text/css" href="'  
             + 'http://en.wikipedia.org/w/index.php?title=User:Zocky/PicturePopups.css'
             + '&action=raw&ctype=text/css&dontcountme=s">');

document.addEventListener('click',firstClick,true);

//Handle clicks on document until content is loaded
function firstClick(e)
{
  var c=document.getElementById('content')||document.getElementById('article');
  if (c) {
    c.addEventListener('click',imageClick,false);
    document.removeEventListener('click',firstClick,true); }
}

//Handle clicks on images
function imageClick(e)
{
  if (!e.ctrlKey && !e.shiftKey &&e.target.tagName=='IMG')
  {
    try
    {
      var t=e.target;
      while (t.tagName!='A') { t=t.parentNode; }

      var realurl = t.href;
      var pictitle = unescape(realurl.match(/\/wiki\/Image:(.*)$/)[1].replace(/_/g," "));
      x=Math.round(Math.random()*200);
      y=Math.round(Math.random()*200);


      var note_content_div=new_note(x, y, '[<a href="'+realurl+'"> &gt; </a>] '+pictitle, '<blink><small><i>loading...</i></small></blink>');
      note_content_div.addEventListener('click',noteContentClick,true);
  
      var cbSuccess=function(x,c)
      {
        note_content_div.innerHTML='';
        note_content_div.appendChild(findDescendantById(c,'file')) || (note_content_div.innerHTML="Failed. <a>retry</a>");
        try { note_content_div.appendChild(findDescendantById(c,'imageLicense')); } catch(er) {};
        return true;
      }

      var cbFailure=function(x,c)
      {
        note_content_div.innerHTML==x.statusText;
        return true;
      }

      loadText(realurl,cbSuccess,cbFailure);

      e.preventDefault();
    }
    catch (er){}
  }
}

//Stop popup images from linking to hi-res pages
function noteContentClick(e)
{
  e.target.tagName=='IMG' && e.preventDefault() ;
}


//NOTES

var note_top=100;
var active_note;
var note_back='globalWrapper';

function note_icons(n)
{
  return   '<nobr>[<a onclick="toggle_note(\''+n+'\')"> - </a>] '
        +  '[<a onclick="close_note(\''+n+'\')"> x </a>]</nobr>';
}

function new_note(x,y,title,content)
{
  var note_container=document.getElementById(note_back)
  note_top++;

  var note = document.createElement("div");
  note.id = "note_" + note_top;
  note.setAttribute('class', "imagenote");
  note.setAttribute('minimized', "0");
  x>0 && (note.style.left = x + "px") || (note.style.right = -x + "px");
  y>0 && (note.style.top = y + "px") || (note.style.bottom = -y + "px");
  note.style.zIndex=note_top;


  note.innerHTML = '<table><tr class="imagenotetitlebar">'
                 + '<td class="imagenotetitle" id="'+note.id+'_title"><span>' + title + '</span></td>'
                 + '<td class="imagenoteicons" id="'+note.id+'_icons" align="right">' + note_icons(note.id) + '</td></tr>'
                 + '<tr><td class="imagenotecontent" id="'+note.id+'_content" colspan="2">'+content+'</td></tr></table>';
  note_container.appendChild(note);

  note.addEventListener("mousedown", pick_note, true);
  note.addEventListener("click", click_note, true);
  active_note=note;
  return document.getElementById(note.id+'_content');
}

function close_note(n)
{
  var note_container=document.getElementById(note_back);
  note_container.removeChild(document.getElementById(n));
}

function toggle_note(n)
{
  var note=document.getElementById(n);
  note.setAttribute('minimized', 1-note.getAttribute('minimized'));
}

var note_dragging;

function pick_note(e)
{
  active_note=e.currentTarget;
  note_top++;
  active_note.style.zIndex = note_top;
  mouse_x = e.clientX;	mouse_y = e.clientY;

  active_note_top = parseInt(active_note.style.top); active_note_left = parseInt(active_note.style.left);
  document.addEventListener("mousemove", drag_note, false);
  document.addEventListener("mouseup", drop_note, false);
  e.preventDefault();
  note_dragging=false;
}

function drag_note(e)
{
  var x = e.clientX;
  var y = e.clientY;

  active_note.style.top = (y - mouse_y + active_note_top) + "px"; active_note.style.left = (x - mouse_x + active_note_left) + "px";
  note_dragging=true;
}

function drop_note(e)
{
  document.removeEventListener("mousemove", drag_note, false);
  document.removeEventListener("mouseup", drop_note, false);
}

function click_note(e)
{
  note_dragging && e.preventDefault();
}


//DOWNLOADER
function loadText(url,cb1,cb2) {
  var x = window.XMLHttpRequest ? new XMLHttpRequest()
        : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP")
        : false;
  var c=document.createElement("div");

  if (x) {
    x.onreadystatechange=function() {
      x.readyState==4 && textLoaded(x,c,cb1,cb2)};
    x.open("GET",url,true);
    x.setRequestHeader('Accept','text/*');
    x.send(null); }
}

function textLoaded(x,c,cb1,cb2) {
  x.status==200
  && ((c.innerHTML=x.responseText) && cb1 && cb1(x,c))
  || ( cb2 && cb2(x,c) || alert(x.statusText));
}

//XML helper functions
function findDescendantById(node, id) {
  if (node.id == id) { return node; }
  var i, c;
  for (i = node.firstChild; i != null; i=i.nextSibling) {
    c = findDescendantById(i,id);
    if (c != null)
      return c; }
  return null;
}

/////////////////////////////////////////////////////////////////////////////////////////////
// -----------------------------------------------------------------------------
// God-like Monobook skin
// (c) 2005 Sam Hocevar <sam@zoy.org>
// $Id: godmode-light.js 907 2005-06-28 12:57:06Z sam $
// -----------------------------------------------------------------------------
// Blatently stolen from [[User:Bmicomp/monobook.js]]. Don't ask me how anything works.
// Modified to use test-n, test2-n and test3-n. Remember to put the article title in the tag.
// See [[User:Drini]] for information on the -n templates.
// 2005-09-02 Modified VfD functions to reference new AfD pages.

//Sam's godmode-light.
//document.write('<SCRIPT SRC="http://sam.zoy.org/wikipedia/godmode-light.js"><\/SCRIPT>');
document.write('<SCRIPT SRC="http://share.zopatista.com/WikiPedia/godmode-light.js"><\/SCRIPT>');
// [[User:Lupin/popups.js]] - please include this line 
mw.loader.load(
             'https://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js'
             + '&action=raw&ctype=text/javascript&dontcountme=s');

simplePopups=true;

//////////////////////////////////////////
// Tabs by Korath
// returns <li><a href="url">name</a></li>
/////////////////////////////////////////
function addlilink(url, name)
{
  var na = document.createElement('a');
  na.setAttribute('href', url);

  var txt = document.createTextNode(name);
  na.appendChild(txt);

  var li = document.createElement('li');
  li.appendChild(na);
  return li;
}

// appends msg to the currently-editted page, sets the summary to summ,
// and marks or unmarks the Watch this page checkbox according to watch.
function edit_summary_watch(msg, summ, watch)
{
  var f = document.editform, t = f.wpTextbox1;
  if (t.value.length > 0)
    t.value += '\n';
  t.value += msg;
  f.wpSummary.value = summ;
  f.wpWatchthis.checked = watch;
}


// appends msg to the currently-editted page, sets the summary to summ,
// and marks or unmarks the Watch this page checkbox according to watch.
function add_del_tag(msg, summ, watch)
{
  var f = document.editform, t = f.wpTextbox1;
    msg += '\n';
    msg += t.value;
    t.value = msg;
  f.wpSummary.value = summ;
  f.wpWatchthis.checked = watch;
}
  
// adds various tabs to call the above
function add_tabs()
{
  var c1 = document.getElementById('column-one');
  var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];

  // Only add for pages with "Editing User talk:" somewhere in the title
  if (document.title.indexOf("Editing User talk:") != -1)
    {
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:Test-n|}} -- ~" + "~" + "~" + "~", "{{" + "Test1}}", true, 1)',"T1"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:Test2-n|}} -- ~" + "~" + "~" + "~", "{{" + "Test2}}", true, 1)',"T2"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:Test2a-n|}} -- ~" + "~" + "~" + "~", "{{" + "Test2a}}", true, 1)',"T2a"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:Test3-n|}} -- ~" + "~" + "~" + "~", "{{" + "Test3}}", true, 1)',"T3"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:Test4}} -- ~" + "~" + "~" + "~", "{{" + "Test4}}", true, 1)',"T4"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:Vanity|}} -- ~" + "~" + "~" + "~", "{{" + "Vanity}}", true, 1)',"Vnty"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:spam1}} -- ~" + "~" + "~" + "~", "{{" + "spam1}}", true, 1)',"S1"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:spam2}} -- ~" + "~" + "~" + "~", "{{" + "spam2}}", true, 1)',"S2"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:rvfd|}} -- ~" + "~" + "~" + "~", "{{" + "rvfd}}", true, 1)',"rvfd"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:blanking}} -- ~" + "~" + "~" + "~", "{{" + "blanking}}", true, 1)',"blnk"));
      tabs.appendChild(addlilink('javascript:edit_summary_watch("{{" + "subst:nothanks|}} -- ~" + "~" + "~" + "~", "{{" + "nothanks}}", true, 1)',"nthks"));


    }
   if (document.title.indexOf("Editing User talk:") == -1 && document.title.indexOf("Editing User:") == -1 && document.title.indexOf("Editing Wikipedia:Articles for deletion") == -1 && document.title.indexOf("Editing ") == 0)
   {
      tabs.appendChild(addlilink('javascript:add_del_tag("{{" + "d}}", "{{" + "d}}", true, 1)',"d"));
      tabs.appendChild(addlilink('javascript:add_del_tag("{{" + "db|}}", "{{" + "db}}", true, 1)',"db"));
      tabs.appendChild(addlilink('javascript:add_del_tag("{{" + "nn-bio}}", "{{" + "nn-bio}}", true, 1)',"nn-bio"));
      tabs.appendChild(addlilink('javascript:add_del_tag("{{" + "db|Very short article providing little or no context}}", "{{" + "db|Very short article providing little or no context}}", true, 1)',"nc"));
      tabs.appendChild(addlilink('javascript:add_del_tag("{{" + "db|Short article that serve no purpose but to disparage their subject}}", "{{" + "db|Short article that serve no purpose but to disparage their subject}}", true, 1)',"attack"));
      tabs.appendChild(addlilink('javascript:add_del_tag("{{" + "nonsense}}", "{{" + "nonsense}}", true, 1)',"nonsense"));
   }

   if(document.title.indexOf("Editing Wikipedia:Articles for deletion") != -1){                  // In-progress VfD tabs
//        addlilink(tabs, 'javascript:closevfd("Delete", "")', 'D', '');
        tabs.appendChild(addlilink('javascript:closevfd("Speedy Delete", "")', 'SD', ''));
        tabs.appendChild(addlilink('javascript:closevfd("Keep", "")', 'K', ''));
//        addlilink(tabs, 'javascript:closevfd("Keep (No consensus)", "")', 'K,NC', '');
        tabs.appendChild(addlilink('javascript:closevfd("Merge and Redirect", " to [[" + prompt("Merge and redirect to?") + "]]")', 'M&R', ''));
        tabs.appendChild(addlilink('javascript:closevfd("Redirect", " to [[" + prompt("Redirect to?") + "]]")', 'R', ''));
//        addlilink(tabs, 'javascript:closevfd("Ttranswiki", " to " + prompt("Transwiki to?"))', 'T', '');
//        addlilink(tabs, 'javascript:closevfd("Transwiki", " to Wiktionary")', 'WIKT', '');
//        addlilink(tabs, 'javascript:closevfd(prompt("Result?"), "")', 'Oth', '');

    }

   if (document.title.indexOf("Editing") != 0)
   {
   }
}

if (window.addEventListener)
  window.addEventListener("load", add_tabs, false);
else if (window.attachEvent)
  window.attachEvent("onload", add_tabs);

function closevfd(bold, notbold){
    var form = document.editform;
    var txt = form.wpTextbox1;
    txt.value = "{{subst:vt}} '''" + bold + "'''" + notbold + ". --~~~~\n" + txt.value + "\n{{subst:vb}}\n";
    form.wpSummary.value = "Close discussion: " + bold + notbold;
    form.wpWatchthis.checked = false;
}

///////////////////////////////////////////////////////////////////
// AutoVFD by Korath
// This needs to change depending on skin used.
//////////////////////////////////////////////////////////////////
function add_link2(url, name)
{
  var na = document.createElement('a');
  na.setAttribute('href', url);
  na.appendChild(document.createTextNode(name));

  var li = document.createElement('li');
  li.appendChild(na);

  var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
  tabs.appendChild(li);
}

function strip_namespace(target)
{
  var colon = target.indexOf(':');
  if (colon != -1)
    {
      var spaces = new Array('User', 'Wikipedia', 'Image', 'MediaWiki', 'Template', 'Help', 'Category');
      var ns = target.substring(0, colon);
      if (ns == '' || ns == 'Talk')
        return target.substring(colon + 1);
      else
        for (var i = 0; i < spaces.length; ++i)
          {
            if (ns == spaces[i]
                || ns == spaces[i] + '_talk')
              return target.substring(colon + 1);
          }
    }

  return target;
}

function vfd()
{
  document.editform.wpTextbox1.value = '{' + '{' + 'subst:afd}}\n' + document.editform.wpTextbox1.value;
  document.editform.wpSummary.value = 'afd';

  var target = document.editform.action;
  target = target.substring(target.indexOf('title=') + 6,
                            target.lastIndexOf('&action=submit'));

  var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
  var date = new Date();
  date = date.getUTCFullYear() + '_' + months[date.getUTCMonth()] + '_' + date.getUTCDate();

  var pagename = strip_namespace(target);

  window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/' + pagename + '&action=edit&fakeaction=vfdsub&faketarget=' + target,
              'Afd ' + unescape(target),
              'status,toolbar,location,menubar,directories,resizeable,scrollbars');
  window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/Log/' + date + '&action=edit&fakeaction=vfdlist&faketarget=' + pagename,
              'VfdLog ' + unescape(target),
              'status,toolbar,location,menubar,directories,resizeable,scrollbars');
}

function autovfd()
{
  if (document.title.indexOf('Editing ') == 0)
    {
      var action = '';
      var target = '';
      if (location.search)
        {
          var l = location.search.substring(1).split('&');
          for (var i = 0; i < l.length; ++i)
            {
              var eq = l[i].indexOf('=');
              var name = l[i].substring(0, eq);
              if (name == 'fakeaction')
                action = l[i].substring(eq + 1);
              else if (name == 'faketarget')
                target = unescape(l[i].substring(eq + 1)).replace(/_/g, ' ');
            }
        }

      if (action == 'vfdlist')
        {
          document.editform.wpTextbox1.value += '{{' + 'subst:afd3|pg=' + target + '}}\n';
          document.editform.wpSummary.value = '[[Wikipedia:Articles for deletion/' + target + ']]';
        }
      else if (action == 'vfdsub')
        {
          if (document.editform.wpTextbox1.value.length > 0)
            {
              target = document.editform.action;
              target = unescape(target.substring(target.indexOf('title=') + 6, target.lastIndexOf('&action=submit'))).replace(/_/g, ' ');
              window.alert("There's an old vfd at the default location already.\n\n" +
                           'Please either move it out of the way (and update existing links to it), or file the Vfd by hand in another location (such as [[' + target + ' (2)]]).');
            }
          else
            document.editform.wpTextbox1.value += '{' + '{' + 'subst:afd2|pg=' + target + '|text=' + '}' + '}' +
  '-- ~' + '~' + '~' + '~\n' +
              '\n*\'\'\' \'\'\'\n*\'\'\' \'\'\'\n*\'\'\' \'\'\'\n';
        }
      else
        add_link2('javascript:vfd()', 'Afd');
    }
}

if (window.addEventListener)
  window.addEventListener('load', autovfd, false);
else if (window.attachEvent)
  window.attachEvent('onload', autovfd);

///////////////////////////////////////////////////////////////////
// AutoCopyvio - Created by bmicomp from modified autovfd
//////////////////////////////////////////////////////////////////
function add_link2(url, name)
{
  var na = document.createElement('a');
  na.setAttribute('href', url);
  na.appendChild(document.createTextNode(name));

  var li = document.createElement('li');
  li.appendChild(na);

  var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
  tabs.appendChild(li);
}

function strip_namespace(target)
{
  var colon = target.indexOf(':');
  if (colon != -1)
    {
      var spaces = new Array('User', 'Wikipedia', 'Image', 'MediaWiki', 'Template', 'Help', 'Category');
      var ns = target.substring(0, colon);
      if (ns == '' || ns == 'Talk')
        return target.substring(colon + 1);
      else
        for (var i = 0; i < spaces.length; ++i)
          {
            if (ns == spaces[i]
                || ns == spaces[i] + '_talk')
              return target.substring(colon + 1);
          }
    }

  return target;
}

function copyvio()
{
  document.editform.wpTextbox1.value = '{' + '{' + 'copyvio|url=}}';
  document.editform.wpSummary.value = 'copyvio';

  var target = document.editform.action;
  target = target.substring(target.indexOf('title=') + 6,
                            target.lastIndexOf('&action=submit'));

  var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
  var date = new Date();
//  date = months[date.getUTCMonth()] + '_' + date.getUTCDate();
  var datestring = date.getUTCFullYear() + '_' + months[date.getUTCMonth()] + '_' + date.getUTCDate();

  var pagename = strip_namespace(target);

  window.open('/w/index.php?title=Wikipedia:Copyright_problems/' + datestring + '&action=edit&fakeaction=copyviolist&faketarget=' + pagename,
              'status,toolbar,location,menubar,directories,resizeable,scrollbars');
}

function autocopyvio()
{
  if (document.title.indexOf('Editing ') == 0)
    {
      var action = '';
      var target = '';
      if (location.search)
        {
          var l = location.search.substring(1).split('&');
          for (var i = 0; i < l.length; ++i)
            {
              var eq = l[i].indexOf('=');
              var name = l[i].substring(0, eq);
              if (name == 'fakeaction')
                action = l[i].substring(eq + 1);
              else if (name == 'faketarget')
                target = unescape(l[i].substring(eq + 1)).replace(/_/g, ' ');
                
            }
        }

      if (action == 'copyviolist')
        {
//          var index = document.editform.wpTextbox1.value.lastIndexOf("\n==Footer==");
/*            if (index == -1) 
          {
            window.alert("Couldn't find footer\n\n");
          } 
          else
          { */
//            var firsthalf = document.editform.wpTextbox1.value.substr(0,index);
//            var secondhalf = document.editform.wpTextbox1.value.substr(index);
            document.editform.wpTextbox1.value += '*[[' + target + ']] <span class="plainlinks">([http://en.wikipedia.org/{{localurl:' + target + '|action=history}} history] &middot; [http://en.wikipedia.org/{{localurl:' + target + '|diff=0}} last edit])</span>' + ' from [' + '] ~' + '~~' + '~';
            document.editform.wpSummary.value = 'Copyvio ' + '[[' + target + ']]';
          }
//        }
      else
        add_link2('javascript:copyvio()', 'copyvio');
    }
}

if (window.addEventListener)
  window.addEventListener('load', autocopyvio, false);
else if (window.attachEvent)
  window.attachEvent('onload', autocopyvio);

function externISBN() {
  for (var i = 0; i < document.links.length; i++) 
    {       
         var ln = document.links[i].href.match(/isbn=(.*)/);
         if (ln) {
           document.links[i].href='http://www.amazon.com/exec/obidos/ASIN/'+RegExp.$1;
         }
    }

}

addOnloadHook(externISBN);

/* </nowiki> */