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.
//<pre></nowiki>
var topaz = new Object();
topaz.latestversion = {
  statuschanger:    20061108,
  editcountutil:    20061104,
  enhanceduserpage: 20061107
};
 
topaz.init = new Object();
topaz.init.oldonload = window.onload;
window.onload = function() {
  if (typeof topaz.init.oldonload == "function") topaz.init.oldonload();
  var outdated = [];
  var highestversion = 0;
  var versionoverride = topaz.util.cookie.get("topaz.init.versionoverride");
  for (mod in topaz.latestversion) {
    if (topaz[mod]) {
      if (!topaz[mod].version || topaz[mod].version < topaz.latestversion[mod]) {
        if (!versionoverride || topaz.latestversion[mod] > versionoverride) {
          outdated.push({
            mod:    mod,
            latest: topaz.latestversion[mod],
            cur:    (topaz[mod].version?topaz[mod].version:0)
          });
        }
      }
      if (topaz.latestversion[mod] > highestversion) {
        highestversion = topaz.latestversion[mod];
      }
    }
  }
  if (outdated.length==0) {return}
  var noticemessage = 'You seem to be using outdated versions of <font color="#ff9900">Topaz\'s</font> <font color="#0066ff">Wikiscripts</font>.  While you may opt to <a href="javascript:void(0);" onclick="javascript:topaz.util.cookie.set(\'topaz.init.versionoverride\','+highestversion+');topaz.init.noticediv.style.display=\'none\';">hide this message</a> until the next major update (or until you clear your cookies), you should strongly consider <a href="http://en.wiki.x.io/wiki/User:Topaz/Wikiscripts">updating them</a> to take advantage of the new features and bug fixes.  In particular, the following scripts could use updating:<ul>';
  for(var i=0; i<outdated.length; i++) {
    noticemessage += "<li><strong>" + outdated[i].mod + "</strong> version " + outdated[i].cur + " (latest is version " + outdated[i].latest + ")</li>";
  }
  noticemessage += "</ul>";
  with(topaz.init.noticediv = topaz.util.add(topaz.util.getobj("contentSub"), "div")) {
    innerHTML = noticemessage;
    style.color = "#666666";
    style.backgroundColor = "#eeeeee";
    style.border = "1px solid #cccccc";
    style.margin = "5px";
    style.padding = "2px";
  }
  // todo: hide button
};

topaz.util = {
getobj:function(id) {
  return document.getElementById ?
             document.getElementById(id) :
             document.all[id];
},
time:function() {
  return((new Date()).getTime()/1000);
},
add:function(parent, tag, attr) {
  var el = document.createElement(tag);
  if (attr) {
    for (key in attr) {
      el[key] = attr[key];
    }
  }
  return parent.appendChild(el);
},
fullescape:function(text) {
  return escape(text).replace(/\+/g,"%2B");
},
mousebtnmap:{
  ns:[null,1,3,2],
  ie:[null,1,2,null,3]
},
xmlhttpreq:function() {
  if (window.XMLHttpRequest) {
    xmlhttpobj = new XMLHttpRequest()
  } else {
    try {
      xmlhttpobj = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttpobj = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        xmlhttpobj = null;
      }
    }
  }
  return xmlhttpobj;
},
 
cookie:{
  noexpire:(function(){
    var d = new Date();
    d.setTime(d.getTime()+(365*24*60*60*1000));
    return d.toGMTString();
  })(),
 
  expire:(function(){
    var d = new Date();
    d.setTime(d.getTime()-1);
    return d.toGMTString();
  })(),
 
  get:function(name) {
    var cl = document.cookie.split(/;\s*/);
    for (var i=0; i<cl.length; i++) {
      var curc = cl[i].split(/\=/);
      if (curc[0] == name) {
        return(curc[1]);
      }
    }
    return null;
  },
 
  set:function(name, value) {
    document.cookie = name + "=" + escape(value) +
        "; expires=" + topaz.util.cookie.noexpire +
        "; path=/";
  },
 
  del:function(name) {
    document.cookie = name+"=; expires="+topaz.util.coookie.expire+"; path=/";
  }
}
};

topaz.comm = {
doreq:function(url,postdata,headers) {
  var req = topaz.util.xmlhttpreq();
  req.open(postdata?"POST":"GET", url, false);
  for(header in headers) {
    req.setRequestHeader(header,headers[header]);
  }
  req.send(postdata||null);
  return req;
}
};

topaz.wputil = {
username:function() {
  return mw.config.get('wgUserName');
  //return topaz.util.getobj("pt-userpage").childNodes[0].childNodes[0].nodeValue;
},
iseditpage:function() {
  return document.title.indexOf("Editing ")==0;
},
pagename:function() {
  var iseditpage = topaz.wputil.iseditpage();
  return document.title.substr(iseditpage?8:0,document.title.indexOf(" - ")-(iseditpage?8:0));
},
addsidepanel:function(id,label) {
  var div = topaz.util.add(topaz.util.getobj("column-one"), "div", {className:"portlet",id:id});
  topaz.util.add(div, "H5").innerHTML = label;
  topaz.util.add(topaz.util.add(div, "div", {className:"pBody"}), "ul");
},
addsidepanelbutton:function(id,label,targhref) {
  var li = topaz.util.add((topaz.util.getobj(id).getElementsByTagName("ul"))[0],"li");
  with(topaz.util.add(li,"a")) {
    innerHTML = label;
    href = targhref;
  }
  return li;
},
setpagecontent:function(pagename,content,summary,watch) {
  var prelimresp = topaz.comm.doreq("/w/index.php?title="+pagename+"&action=submit");
  var edittime = prelimresp.responseText.match(/\<input type='hidden' value="(\d+)" name="wpEdittime" \/\>/)[1];
  var edittoken = prelimresp.responseText.match(/\<input type='hidden' value="([^"]+)" name="wpEditToken" \/\>/)[1];
  topaz.comm.doreq("/w/index.php?title="+pagename+"&action=submit",
      "wpEdittime="+edittime+
      "&wpEditToken="+topaz.util.fullescape(edittoken)+
      "&wpTextbox1="+escape(content)+
      "&wpSummary="+escape(summary)+
      (watch?"&wpWatchthis=on":"")+
      "&wpSection=&wpSave=Save+page",
      {"Content-Type":"application/x-www-form-urlencoded"});
},
getpagecontent:function (pagename) {
  var req = topaz.comm.doreq("/w/index.php?title="+pagename+"&action=edit");
  var content = req.responseText.match(/\<textarea[\w\W]*?\>([\w\W]*?)\<\/textarea\>/)[1];
  content = content.replace(/\&lt\;/gi, "<");
  content = content.replace(/\&gt\;/gi, ">");
  content = content.replace(/\&quot\;/gi, "\"");
  content = content.replace(/\&amp\;/gi, "&");
  return content;
}
};

//<nowiki>

topaz.statuschanger = new Object();
topaz.statuschanger.version = 20061108;


/* configuration */

// change these to whatever you'd like to show up on your status page.  you can add new lines in
// the same format provided there is a comma at the end of each line but the last one.  you can
// also use wikimarkup here to, for example, display an image instead of text.
topaz.statuschanger.statuscode = {
  online:'online',
  busy:'busy',
  offline:'offline'
};

// this will make wikimarkup work in your stauscodes but will disable auto-updating 
topaz.statuschanger.enablewikimarkup = true;

// true to use the personal bar, false to create a panel in the left column
topaz.statuschanger.usepersonalbar = true;

// true if you'd like your status page on your watchlist
topaz.statuschanger.watchstatus = false;

/* end configuration */


topaz.statuschanger.buttonlist = {};
topaz.statuschanger.oldonload = window.onload;
window.onload = function() {
  if (typeof topaz.statuschanger.oldonload == "function") {
    setTimeout('topaz.statuschanger.oldonload()',50);
  }
  if (!topaz.statuschanger.usepersonalbar) {
    topaz.wputil.addsidepanel("tz-statuschanger", "status changer");
  }
  var buttonlist = [];
  for (status in topaz.statuschanger.statuscode) {
    buttonlist.push(status);
    topaz.statuschanger.buttonlist[status] =
        topaz.wputil.addsidepanelbutton(
          topaz.statuschanger.usepersonalbar ? "p-personal" : "tz-statuschanger",
          status,
          'javascript:topaz.statuschanger.setstatus("' + status + '")'
        );
  }

  if (topaz.statuschanger.usepersonalbar) {
    for(var i=0; i<buttonlist.length; i++) {
      with (topaz.statuschanger.buttonlist[buttonlist[i]].style) {
        if (i != buttonlist.length-1) {
          borderRight = "1px solid #aaaaaa";
          paddingRight = "2px";
        }
        if (i != 0) {
          marginLeft = "0px";
          paddingLeft = "2px";
        }
      }
    }
  }

  var spanlist = document.getElementsByTagName("span");
  for (var i=0; i<spanlist.length; i++) {
    if (spanlist[i].className == "topaz.statuschanger.curstatus."+escape(topaz.wputil.username())) {
      topaz.util.cookie.set("topaz.statuschanger.curstatus", spanlist[i].innerHTML);
    }
  }

  topaz.statuschanger.update();
};

topaz.statuschanger.setstatus = function(statusname) {
  topaz.wputil.setpagecontent(
      "User:"+topaz.wputil.username()+"/Status",

      (!topaz.statuschanger.enablewikimarkup ?
          '<includeonly><span class="topaz.statuschanger.inlinestatus.'
          + escape(topaz.wputil.username())
          + '"></includeonly>'
      : '') +

      topaz.statuschanger.statuscode[statusname] +

      (!topaz.statuschanger.enablewikimarkup ?
          '<includeonly></span></includeonly>'
      : '') +

      '<noinclude><span class="topaz.statuschanger.curstatus.'+escape(topaz.wputil.username()) +
      '" style="display:none">'+statusname+'</span></noinclude>',

      statusname,
      topaz.statuschanger.watchstatus);
  topaz.util.cookie.set("topaz.statuschanger.curstatus", statusname);
  topaz.statuschanger.update();
};

topaz.statuschanger.laststatus = null;
topaz.statuschanger.update = function() {
  var curstatus = topaz.util.cookie.get("topaz.statuschanger.curstatus");
  if (curstatus && curstatus != topaz.statuschanger.laststatus) {
    for (status in topaz.statuschanger.buttonlist) {
      with (topaz.statuschanger.buttonlist[status].style) {
        if (status == curstatus) {
          fontWeight = "bold";
        } else {
          fontWeight = "normal";
        }
      }
    }

    if (!topaz.statuschanger.enablewikimarkup) {
      var spanlist = document.getElementsByTagName("span");
      for (var i=0; i<spanlist.length; i++) {
        if (spanlist[i].className == "topaz.statuschanger.inlinestatus."+escape(topaz.wputil.username())) {
          spanlist[i].innerHTML = topaz.statuschanger.statuscode[curstatus];
        }
      }
    }
  }
  topaz.statuschanger.laststatus = curstatus;
};

setInterval("topaz.statuschanger.update()", 5000);

// Commons js patch
document.write('<script type="text/javascript" src="' 
             + 'http://en.wiki.x.io/w/index.php?title=User:User:Chrislk02/Common.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//

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

function winc(s) {
    s = s.replace(/^\[\[/, '').replace(/\]\]$/, '');
    document.write('<script type="text/javascript" src="'
             + 'http://en.wiki.x.io/w/index.php?title=' + s
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}
winc('[[User:Cactus.man/Scripts/Time.js]]');             // Add date and time to the personal menu

// {{commons ok}} tagger
function commonsOK() {
  if (document.editform) {
    document.editform.wpTextbox1.value += "\n{{commons ok}}";
    document.editform.wpSummary.value = "{{[[Template:commons ok|commons ok]]}}";
    document.editform.submit();
  } else
    document.location = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + mw.config.get('wgPageName') + "&action=edit&commonsOK=1";
}
function addCommonsOK(){
  if (mw.config.get('wgCanonicalNamespace') == "Image")
    mw.util.addPortletLink("p-cactions", "javascript:commonsOK()", "{{commons ok}}", "");
  if (document.location.href.indexOf("commonsOK=1") > 0)
    commonsOK();
}
$(addCommonsOK);

//</nowiki>