Firefox 3
Valid HTML 4.01 Strict
Valid CSS!
QR code temporary removed
Source Code of the Neopets Toolbar Add-on
The source code for 3.0.0beta3 will not be uploaded to the site, since the Add-on development is still on-going and halfway through.

This is the exact codes for the Neopets Toolbar Add-on 2.0.2. I decided to be transparent with the codes due to the sensitive nature in Neopets. The same code can be found in the add-on installation anyway so I wouldn't mind displaying the actual code here.

Preferences setting created by add-on
extensions.ntaddon.NTalert (New blinking alert trigger for deciding whether to trigger another
alert - I know, this description doesn't seem to make any sense...)
extensions.ntaddon.alerton (Prevents multiple alerts for a single offical alert)
extensions.ntaddon.dbuttonck (Allow checking whether if the Tarla alert is on the Toolbar)
extensions.ntaddon.emalert (Allows alert for new email)
extensions.ntaddon.emnum (Number of unread emails for deciding whether to trigger another alert)
extensions.ntaddon.neoalert (Allows alert for new blinking alert)
extensions.ntaddon.nmalert (Allows alert for new neomail)
extensions.ntaddon.nmnum (Number of unread neomails for deciding whether to trigger another
alert)
extensions.ntaddon.nt1transfer (Transfer of preferences from Neopets Toolbar Add-on v1)
extensions.ntaddon.ntaot (Add-on internal timer)
extensions.ntaddon.palert (Allows pop-up alert)
extensions.ntaddon.salert (Allows audio alert)

Existing preferences settings used by add-on
neopets.toolbar.AlertPeek.NewAlert (New messages)
neopets.toolbar.EmailPeek.MessageCount (Number of new email messages)
neopets.toolbar.EmailPeek.NewMessage (New email trigger)
neopets.toolbar.NeoMailPeek.MessageCount (Number of new neomail messages)
neopets.toolbar.NeoMailPeek.NewMessage (New neomail trigger)
neopets.toolbar.InstallationGUID (Randomly generated ID, used by alert button.)

Files used by add-on
plcFavorites.dat (Favourites for Neopets sites)
userFavorites.dat (Favourites for external sites)
version (Hidden in the user's application data folder. Used for alert button.)

ntaddon.xpi
→chrome/
 →content/
  →alert.jslinkalert.xullinkedit.xullinkfav.jslinkntaddon.xullinkoptions.xullink
  →alert.wav
 →skin/
  →abutton.csslinkpabutton.csslink
  →alert.gif
  →ealert.gif
  →nalert.gif
  →oalert.gif
  →oealert.gif
  →onalert.gif
→defaults/
 →preferences/
  →ntaddon.jslinkchrome.manifestlinkinstall.rdflink
						
alert.js
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
 →.getService(Components.interfaces.nsIPrefBranch);
var sound = Components.classes["@mozilla.org/sound;1"]
 →.createInstance(Components.interfaces.nsISound);
var sfile = Components.classes["@mozilla.org/network/standard-url;1"]
 →.createInstance(Components.interfaces.nsIURI);
var wwatch = Components.classes["@mozilla.org/appshell/window-mediator;1"]
 →.getService(Components.interfaces.nsIWindowMediator);
var delay = 0;
var checkquery = 0;
var NTinst = 0;
var NTAerr = 0;
var OS, maintimer, pendRestart;

function NTAsetdis() {
 try {
  if(!prefs.getBoolPref("extensions.ntaddon.neoalert")) {
   document.getElementById("alertbutton").setAttribute("err","on");
  }
  else {
   document.getElementById("alertbutton").removeAttribute("err");
  }
 }
 catch(e) {
 }
 try {
  if(!prefs.getBoolPref("extensions.ntaddon.nmalert")) {
   document.getElementById("neobutton").setAttribute("err","on");
  }
  else {
   document.getElementById("neobutton").removeAttribute("err");
  }
 }
 catch(e) {
 }
 try {
  if(!prefs.getBoolPref("extensions.ntaddon.emalert")) {
   document.getElementById("ebutton").setAttribute("err","on");
  }
  else {
   document.getElementById("ebutton").removeAttribute("err");
  }
 }
 catch(e) {
 }
}

function NTAseterr(NTAerrck, alertr, emailr, neomailr) {
 if(NTAerrck > 0) {
  try {
   if(NTAerrck % 2 && NTAerr % 2) {
    document.getElementById("alertbutton").setAttribute("err","on");
   }
   else {
    document.getElementById("alertbutton").removeAttribute("err");
   }
  }
  catch(e) {
  }
  try {
   if((NTAerrck == 2 || NTAerrck == 3 || NTAerrck >= 6) &&
    →(NTAerr == 2 || NTAerr == 3 || NTAerr >= 6)) {
    document.getElementById("neobutton").setAttribute("err","on");
   }
   else {
    document.getElementById("neobutton").removeAttribute("err");
   }
  }
  catch(e) {
  }
  try {
   if(NTAerrck >= 4 && NTAerr >= 4) {
    document.getElementById("ebutton").setAttribute("err","on");
   }
   else {
    document.getElementById("ebutton").removeAttribute("err");
   }
  }
  catch(e) {
  }
 }
 else {
  try {
   document.getElementById("alertbutton").removeAttribute("err");
  }
  catch(e) {
  }
  try {
   document.getElementById("neobutton").removeAttribute("err");
  }
  catch(e) {
  }
  try {
   document.getElementById("ebutton").removeAttribute("err");
  }
  catch(e) {
  }
 }
 NTAerr = NTAerrck;
 if(((emailr > 0) && prefs.getBoolPref("extensions.ntaddon.emalert")) ||
  →((neomailr > 0) && prefs.getBoolPref("extensions.ntaddon.nmalert")) ||
  →(alertr && prefs.getBoolPref("extensions.ntaddon.neoalert"))) {
  try {
   if(alertr && prefs.getBoolPref("extensions.ntaddon.neoalert")) {
    document.getElementById("alertbutton").setAttribute("aon","on");
   }
   else {
    document.getElementById("alertbutton").removeAttribute("aon");
   }
  }
  catch(e) {
  }
  try {
   if((neomailr > 0) && prefs.getBoolPref("extensions.ntaddon.nmalert")) {
    document.getElementById("neobutton").setAttribute("aon","on");
   }
   else {
    document.getElementById("neobutton").removeAttribute("aon");
   }
  }
  catch(e) {
  }
  try {
   if((emailr > 0) && prefs.getBoolPref("extensions.ntaddon.emalert")) {
    document.getElementById("ebutton").setAttribute("aon","on");
   }
   else {
    document.getElementById("ebutton").removeAttribute("aon");
   }
  }
  catch(e) {
  }
 }
 else {
  try {
   document.getElementById("alertbutton").removeAttribute("aon");
  }
  catch(e) {
  }
  try {
   document.getElementById("neobutton").removeAttribute("aon");
  }
  catch(e) {
  }
  try {
   document.getElementById("ebutton").removeAttribute("aon");
  }
  catch(e) {
  }
 }
}

function NTAenableck() {
 checkquery = 1;
 if(NTinst == 1) {
  try {
   if(prefs.getIntPref("extensions.ntaddon.ntaot") >= 1000 &&
    →prefs.getIntPref("extensions.ntaddon.ntaot") <= 30000) {
    maintimer = window.setInterval(NTAtimerch,
     →prefs.getIntPref("extensions.ntaddon.ntaot"));
   }
   else {
    prefs.setIntPref("extensions.ntaddon.ntaot", 10000);
    maintimer = window.setInterval(NTAtimerch, 10000);
   }
  }
  catch(e) {
   prefs.setIntPref("extensions.ntaddon.ntaot", 10000);
   maintimer = window.setInterval(NTAtimerch, 10000);
  }
 }
 else if(NTinst == 2) {
  if(!(OS != "win" && pendRestart)) {
   maintimer = window.setInterval(NTAtimerch, 60000);
  }
 }
}

function NTAbroadcastclose() {
 if(checkquery) {
  var numwindow = wwatch.getEnumerator("navigator:browser");
  if(numwindow.hasMoreElements() == true) {
   var wind = numwindow.getNext();
   wind.NTAenableck();
  }
 }
}

function NTA1cleanup() {
 var exm = Components.classes["@mozilla.org/extensions/manager;1"]
  →.getService(Components.interfaces.nsIExtensionManager);
 var RDFs = Components.classes["@mozilla.org/rdf/rdf-service;1"]
  →.getService(Components.interfaces.nsIRDFService);
 var RDFc = Components.classes["@mozilla.org/rdf/container;1"]
  →.getService(Components.interfaces.nsIRDFContainer);
 var dat;
 RDFc.Init(exm.datasource,RDFs.GetResource("urn:mozilla:item:root"));
 var NTex = RDFc.GetElements();
 while(NTex.hasMoreElements()) {
  dat = NTex.getNext();
  if(exm.datasource.GetTarget(dat,RDFs
   →.GetResource("http://www.mozilla.org/2004/em-rdf#name"),true)
   →.QueryInterface(Components.interfaces.nsIRDFLiteral).Value ==
   →"Neopets Toolbar Add-on for Mac and Linux") {
   var target = exm.datasource.GetTarget(dat,RDFs
    →.GetResource("http://www.mozilla.org/2004/em-rdf#appDisabled"),true);
   if(target == null) {
    target = exm.datasource.GetTarget(dat,RDFs
     →.GetResource("http://www.mozilla.org/2004/em-rdf#userDisabled"),true);
   }
   if(target == null) {
    alert("Neopets Toolbar Add-on v2 Advisory:\nPlease uninstall 'Neopets
     →Toolbar Add-on for Mac and Linux'.\n\nExplaination:\nThe 'Neopets
     →Toolbar Add-on for Mac and Linux' will cause a possible conflict with
     →the current version of the add-on.\n\n'Neopets Toolbar Add-on for Mac
     →and Linux' will now disable itself. Please restart Firefox.\n\nFor
     →more info, please refer to add-on's homepage.");
    var NTAex = Components.classes["@mozilla.org/extensions/manager;1"]
     →.getService(Components.interfaces.nsIExtensionManager);
    NTAex.disableItem("ntaddonnw@swordfire.net");
    return 1;
   }
   break;
  }
 }
 return 0;
}

function NTA1transfer() {
 try {
  prefs.setBoolPref("extensions.ntaddon.emalert", prefs.getBoolPref("ntaddon
   →.emalert"));
  prefs.clearUserPref("ntaddon.emalert");
 }
 catch(e) {
 }
 try {
  prefs.setBoolPref("extensions.ntaddon.nmalert", prefs.getBoolPref("ntaddon
   →.nmalert"));
  prefs.clearUserPref("ntaddon.nmalert");
 }
 catch(e) {
 }
 try {
  prefs.setBoolPref("extensions.ntaddon.neoalert", prefs
   →.getBoolPref("ntaddon.neoalert"));
  prefs.clearUserPref("ntaddon.neoalert");
 }
 catch(e) {
 }
 try {
  prefs.setBoolPref("extensions.ntaddon.salert", prefs.getBoolPref("ntaddon
   →.salert"));
  prefs.clearUserPref("ntaddon.salert");
 }
 catch(e) {
 }
 try {
  prefs.setBoolPref("extensions.ntaddon.palert", prefs.getBoolPref("ntaddon
   →.palert"));
  prefs.clearUserPref("ntaddon.palert");
 }
 catch(e) {
 }
 try {
  prefs.setBoolPref("extensions.ntaddon.ntaot", prefs.getBoolPref("ntaddon
   →.ntaot"));
  prefs.clearUserPref("ntaddon.ntaot");
 }
 catch(e) {
 }
 try {
  prefs.clearUserPref("ntaddon.alerton");
 }
 catch(e) {
 }
 try {
  prefs.clearUserPref("ntaddon.emnum");
 }
 catch(e) {
 }
 try {
  prefs.clearUserPref("ntaddon.nmnum");
 }
 catch(e) {
 }
 try {
  prefs.clearUserPref("ntaddon.NTalert");
 }
 catch(e) {
 }
 prefs.setBoolPref("extensions.ntaddon.nt1transfer", false);
}

function NTAbuttonck() {
 if(document.getElementById("alertbutton") == null) {
  alert("Neopets Toolbar Add-on Advisory:\nPlease make sure that you have a
   →way to access the Tarla alert.\n\nExplaination:\nThe add-on is not able
   →to find its alert button on any of the Firefox's toolbars.\n\nIf this is
   →your first time installing the add-on, you can avoid this message by
   →adding the button to any of the Firefox existing toolbars.\n\nIf you
   →have an alternative method of access the Tarla alert (ie. bookmark,
   →etc.), disable button checking from the add-on's option.\n\nFor more
   →info on how to add a button, please refer to the add-on's homepage.");
 }
}

function NTAinit() {
 var numwindow = wwatch.getEnumerator("navigator:browser");
 numwindow.hasMoreElements();
 numwindow.getNext();
 if(numwindow.hasMoreElements() == false) {
  checkquery = 1;
  prefs.setBoolPref("extensions.ntaddon.alerton", false);
 }
 sfile.spec = "chrome://ntaddon2/content/alert.wav";
 if(navigator.oscpu.indexOf("Win") != -1) {
  OS = "win";
  try {
   var fxver = Components.classes["@mozilla.org/xre/app-info;1"]
    →.getService(Components.interfaces.nsIXULAppInfo);
   var exm = Components.classes["@mozilla.org/extensions/manager;1"]
    →.getService(Components.interfaces.nsIExtensionManager);
   var RDFs = Components.classes["@mozilla.org/rdf/rdf-service;1"]
    →.getService(Components.interfaces.nsIRDFService);
   var RDFc = Components.classes["@mozilla.org/rdf/container;1"]
    →.getService(Components.interfaces.nsIRDFContainer);
   var dat, target;
   RDFc.Init(exm.datasource,RDFs.GetResource("urn:mozilla:item:root"));
   var NTex = RDFc.GetElements();
   while(NTex.hasMoreElements()) {
    dat = NTex.getNext();
    if(exm.datasource.GetTarget(dat,RDFs
     →.GetResource("http://www.mozilla.org/2004/em-rdf#name"),true)
     →.QueryInterface(Components.interfaces.nsIRDFLiteral).Value ==
     →"Neopets Toolbar") {
     target = exm.datasource.GetTarget(dat,RDFs
      →.GetResource("http://www.mozilla.org/2004/em-rdf#appDisabled"),true);
     if(target == null) {
      target = exm.datasource.GetTarget(dat,RDFs
       →.GetResource("http://www.mozilla.org/2004/em-rdf#userDisabled"),
       →true);
     }
     if(target && (fxver.version.indexOf("2.0.0") != -1)) {
      NTinst = 2;
     }
     else if(target && (fxver.version.indexOf("1.5.0") != -1)) {
      NTinst = 0;
     }
     else {
      NTinst = 1;
     }
     break;
    }
   }
   if((NTinst == 0) && (fxver.version.indexOf("2.0.0") != -1)) {
    NTinst = 2;
   }
  }
  catch(e) {
   alert("Neopets Toolbar Add-on Error:\nUnable to initiate Neopets Toolbar
    →detection.\n\nRecommendation:\nPlease send in a bug report.\n\nError
    →Content:\n" + e);
  }
 }
 else {
  NTinst = 2;
 }
 if(checkquery) {
  try {
   if((prefs.getCharPref("neopets.toolbar.InstallationGUID")
    →.search(/[0-9a-f]{32}/) == -1) || (prefs.getCharPref("neopets.toolbar
    →.InstallationGUID").length != 32)) {
    var uid = "";
    for(var i=0; i<32; i++) {
     uid += Math.floor(Math.random() * 0xF).toString(0xF);
    }
    prefs.setCharPref("neopets.toolbar.InstallationGUID", uid);
   }
  }
  catch(e) {
   var uid = "";
   for(var i=0; i<32; i++) {
    uid += Math.floor(Math.random() * 0xF).toString(0xF);
   }
   prefs.setCharPref("neopets.toolbar.InstallationGUID", uid);
  }
  if(NTinst == 1) {
   try {
    prefs.getBoolPref("neopets.toolbar.AlertPeek.NewAlert");
   }
   catch(e) {
    prefs.setBoolPref("neopets.toolbar.AlertPeek.NewAlert", false);
   }
  }
 }
}

function NTAtimerch() {
 var alertr, emailr, neomailr;
 if(NTinst == 2) {
  try {
   var NTGuid = prefs.getCharPref("neopets.toolbar.InstallationGUID");
   if((NTGuid.search(/[0-9a-f]{32}/) == -1) || (NTGuid.length != 32)) {
    NTGuid = "";
   }
   if(NTGuid != "") {
    var talertc = "http://vsiupdate.neopets.com/toolbar/query.aspx?type=
     →alert&clientversion=1.5.2496.19840&clientguid=" + NTGuid;
    var ealertc = "http://vsiupdate.neopets.com/toolbar/query.aspx?type=
     →email&clientversion=1.5.2496.19840&clientguid=" + NTGuid;
    var nalertc = "http://vsiupdate.neopets.com/toolbar/query.aspx?type=
     →neomail&clientversion=1.5.2496.19840&clientguid=" + NTGuid;
   }
   else {
    alert("Neopets Toolbar Add-on Error:\nNot a valid preference (neopets
     →.toolbar.InstallationGUID).\n\nCause:\nPossible preference corruption?
     →\n\nRecommendation:\nPlease restart Firefox.\n\nIf this problem
     →persist, send in a bug report.");
    window.clearInterval(maintimer);
    return;
   }
  }
  catch(e) {
   alert("Neopets Toolbar Add-on Error:\nMissing preference (neopets.toolbar
    →.InstallationGUID).\n\nCause:\nPossible preference corruption?\n\n
    →Recommendation:\nPlease restart Firefox.\n\nIf this problem persist,
    →send in a bug report.");
   window.clearInterval(maintimer);
   return;
  }
 }

 function finaldo() {
  if(NTinst == 1 && checkquery) {
   try {
    alertr = prefs.getBoolPref("neopets.toolbar.AlertPeek.NewAlert");
    emailr = prefs.getIntPref("neopets.toolbar.EmailPeek.MessageCount");
    neomailr = prefs.getIntPref("neopets.toolbar.NeoMailPeek.MessageCount");
   }
   catch(e) {
    alert("Neopets Toolbar Add-on Error:\nMissing data from Neopets Toolbar.
     →\n\nCause:\nPossible preference corruption?\n\nRecommendation:\n
     →Please reinstall Neopets Toolbar.\n\nIf this problem persist, send in
     →a bug report.");
    window.clearInterval(maintimer);
    return;
   }
   try {
    if(!(prefs.getBoolPref("extensions.ntaddon.neoalert")) ||
     →(alertr != true && alertr != false)) {
     if(NTAerr % 2) {
      document.getElementById("alertbutton").setAttribute("err","on");
     }
     else {
      NTAerr = NTAerr + 1;
     }
    }
    else {
     if(NTAerr % 2) {
      NTAerr = NTAerr - 1;
     }
     document.getElementById("alertbutton").removeAttribute("err");
    }
   }
   catch(e) {
   }
   try {
    if(!(prefs.getBoolPref("extensions.ntaddon.nmalert")) ||
     →!(neomailr >= 0)) {
     if(NTAerr == 2 || NTAerr == 3 || NTAerr >= 6) {
      document.getElementById("neobutton").setAttribute("err","on");
     }
     else {
      NTAerr = NTAerr + 2;
     }
    }
    else {
     if(NTAerr == 2 || NTAerr == 3 || NTAerr >= 6) {
      NTAerr = NTAerr - 2;
     }
     document.getElementById("neobutton").removeAttribute("err");
    }
   }
   catch(e) {
   }
   try {
    if(!(prefs.getBoolPref("extensions.ntaddon.emalert")) ||
     →!(emailr >= 0)) {
     if(NTAerr >= 4) {
      document.getElementById("ebutton").setAttribute("err","on");
     }
     else {
      NTAerr = NTAerr + 4;
     }
    }
    else {
     if(NTAerr >= 4) {
      NTAerr = NTAerr - 4;
     }
     document.getElementById("ebutton").removeAttribute("err");
    }
   }
   catch(e) {
   }
  }
  else {
   emailr = parseInt(emailr);
   neomailr = parseInt(neomailr);
   if(checkquery) {
    try {
     if(!(prefs.getBoolPref("extensions.ntaddon.neoalert")) ||
      →(alertr != "YES" && alertr != "NO")) {
      if(NTAerr % 2) {
       document.getElementById("alertbutton").setAttribute("err","on");
      }
      else {
       NTAerr = NTAerr + 1;
       if(!(prefs.getBoolPref("extensions.ntaddon.neoalert"))) {
        document.getElementById("alertbutton").setAttribute("err","on");
       }
      }
     }
     else {
      if(NTAerr % 2) {
       NTAerr = NTAerr - 1;
      }
      document.getElementById("alertbutton").removeAttribute("err");
     }
    }
    catch(e) {
    }
    if(delay) {
     try {
      if(!(prefs.getBoolPref("extensions.ntaddon.nmalert")) ||
       →!(neomailr >= 0)) {
       if(NTAerr == 2 || NTAerr == 3 || NTAerr >= 6) {
        document.getElementById("neobutton").setAttribute("err","on");
       }
       else {
        NTAerr = NTAerr + 2;
        if(!(prefs.getBoolPref("extensions.ntaddon.nmalert"))) {
         document.getElementById("neobutton").setAttribute("err","on");
        }
       }
      }
      else {
       if(NTAerr == 2 || NTAerr == 3 || NTAerr >= 6) {
        NTAerr = NTAerr - 2;
       }
       document.getElementById("neobutton").removeAttribute("err");
      }
     }
     catch(e) {
     }
    }
    try {
     if(!(prefs.getBoolPref("extensions.ntaddon.emalert")) ||
      →!(emailr >= 0)) {
      if(NTAerr >= 4) {
       document.getElementById("ebutton").setAttribute("err","on");
      }
      else {
       NTAerr = NTAerr + 4;
       if(!(prefs.getBoolPref("extensions.ntaddon.emalert"))) {
        document.getElementById("ebutton").setAttribute("err","on");
       }
      }
     }
     else {
      if(NTAerr >= 4) {
       NTAerr = NTAerr - 4;
      }
      document.getElementById("ebutton").removeAttribute("err");
     }
    }
    catch(e) {
    }
   }
   try {
    if(alertr == "YES") {
     alertr = true;
    }
    else if(alertr == "NO") {
     alertr = false;
    }
    else {
     alertr = prefs.getBoolPref("extensions.ntaddon.NTalert");
    }
    if(!(emailr >= 0)) {
     emailr = prefs.getIntPref("extensions.ntaddon.emnum");
    }
    if(!(neomailr >= 0)) {
     neomailr = prefs.getIntPref("extensions.ntaddon.nmnum");
    }
   }
   catch(e) {
    alert("Neopets Toolbar Add-on Error:\nMissing add-on data.\n\nCause:\n
     →Possible preference corruption?\n\nRecommendation:\nPlease reinstall
     →Neopets Toolbar Add-on.\n\nIf this problem persist, send in a bug
     →report.");
    window.clearInterval(maintimer);
    return;
   }
  }
  var numwindow = wwatch.getEnumerator("navigator:browser");
  numwindow.hasMoreElements();
  numwindow.getNext();
  while(numwindow.hasMoreElements() == true) {
   var wind = numwindow.getNext();
   wind.NTAseterr(NTAerr, alertr, emailr, neomailr);
  }
  try {
   if(((emailr > prefs.getIntPref("extensions.ntaddon.emnum")) &&
    →prefs.getBoolPref("extensions.ntaddon.emalert")) ||
    →((neomailr > prefs.getIntPref("extensions.ntaddon.nmnum")) &&
    →prefs.getBoolPref("extensions.ntaddon.nmalert")) ||
    →(alertr != prefs.getBoolPref("extensions.ntaddon.NTalert")) &&
    →!prefs.getBoolPref("extensions.ntaddon.NTalert") &&
    →prefs.getBoolPref("extensions.ntaddon.neoalert")) {
    prefs.setBoolPref("extensions.ntaddon.alerton", false);
   }
   aoupdate();
   if(((emailr > 0) && prefs.getBoolPref("extensions.ntaddon.emalert")) ||
    →((neomailr > 0) && prefs.getBoolPref("extensions.ntaddon.nmalert")) ||
    →(alertr && prefs.getBoolPref("extensions.ntaddon.neoalert"))) {
    try {
     if(alertr && prefs.getBoolPref("extensions.ntaddon.neoalert")) {
      document.getElementById("alertbutton").setAttribute("aon","on");
     }
     else {
      document.getElementById("alertbutton").removeAttribute("aon");
     }
    }
    catch(e) {
    }
    try {
     if((neomailr > 0) && prefs.getBoolPref("extensions.ntaddon.nmalert")) {
      document.getElementById("neobutton").setAttribute("aon","on");
     }
     else {
      document.getElementById("neobutton").removeAttribute("aon");
     }
    }
    catch(e) {
    }
    try {
     if((emailr > 0) && prefs.getBoolPref("extensions.ntaddon.emalert")) {
      document.getElementById("ebutton").setAttribute("aon","on");
     }
     else {
      document.getElementById("ebutton").removeAttribute("aon");
     }
    }
    catch(e) {
    }
    if(!prefs.getBoolPref("extensions.ntaddon.alerton")) {
     prefs.setBoolPref("extensions.ntaddon.alerton", true);
     if(checkquery) {
      if(prefs.getBoolPref("extensions.ntaddon.salert")) {
       try {
        sound.play(sfile);
       }
       catch(e) {
       }
      }
      if(prefs.getBoolPref("extensions.ntaddon.palert")) {
       if(OS == "win") {
        window.openDialog("chrome://ntaddon2/content/alert.xul", "alert",
         →"titlebar=no,modal=yes");
       }
       else {
        window.setTimeout('window.openDialog("chrome://ntaddon2/content/
         →alert.xul", "alert", "titlebar=no,modal=yes")', 1000);
       }
      }
     }
    }
   }
   else {
    try {
     document.getElementById("alertbutton").removeAttribute("aon");
    }
    catch(e) {
    }
    try {
     document.getElementById("neobutton").removeAttribute("aon");
    }
    catch(e) {
    }
    try {
     document.getElementById("ebutton").removeAttribute("aon");
    }
    catch(e) {
    }
   }
  }
  catch(e) {
   alert("Neopets Toolbar Add-on Error: Alert failure.\nPlease send in a bug
    →report.\n\nError Content:\n" + e);
  }
 }

 function aoupdate() {
  prefs.setIntPref("extensions.ntaddon.emnum", emailr);
  prefs.setIntPref("extensions.ntaddon.nmnum", neomailr);
  prefs.setBoolPref("extensions.ntaddon.NTalert", alertr);
 }

 function reqhan1() {
  try {
   if(hrequest1.readyState == 4 && hrequest1.status == 200) {
    alertr = hrequest1.responseText;
   }
  }
  catch(e) {
  }
 }
 function reqhan2() {
  try {
   if(hrequest2.readyState == 4 && hrequest2.status == 200) {
    emailr = hrequest2.responseText;
   }
  }
  catch(e) {
  }
 }
 function reqhan3() {
  try {
   if(hrequest3.readyState == 4 && hrequest3.status == 200) {
    neomailr = hrequest3.responseText;
   }
  }
  catch(e) {
  }
 }

 if(NTinst == 1) {
  window.setTimeout(finaldo, 1000);
 }
 else {
  if(checkquery) {
   try {
    if(prefs.getBoolPref("extensions.ntaddon.neoalert")) {
     var hrequest1 = new XMLHttpRequest();
     hrequest1.onreadystatechange = reqhan1;
     hrequest1.open("GET", talertc);
     hrequest1.send(null);
    }
    if(prefs.getBoolPref("extensions.ntaddon.emalert")) {
     var hrequest2 = new XMLHttpRequest();
     hrequest2.onreadystatechange = reqhan2;
     hrequest2.open("GET", ealertc);
     hrequest2.send(null);
    }
    if(!delay && prefs.getBoolPref("extensions.ntaddon.nmalert")) {
     var hrequest3 = new XMLHttpRequest();
     hrequest3.onreadystatechange = reqhan3;
     delay = 1;
     hrequest3.open("GET", nalertc);
     hrequest3.send(null);
    }
    else {
     delay = 0;
    }
   }
   catch(e) {
    alert("Neopets Toolbar Add-on Warning:\nUnable to retreve data from
     →Neopets server.\n\nIf this problem persist, send in a bug report.\n\n
     →If required, disable the Neopets Toolbar Add-on.\n\nError Content:\n"
     →+ e);
   }
   try {
    if(prefs.getIntPref("extensions.ntaddon.ntaot") >= 1000 &&
     →prefs.getIntPref("extensions.ntaddon.ntaot") <= 30000) {
     window.setTimeout(finaldo, prefs.getIntPref("extensions.ntaddon
      →.ntaot"));
    }
    else {
     prefs.setIntPref("extensions.ntaddon.ntaot", 10000);
     window.setTimeout(finaldo, 10000);
    }
   }
   catch(e) {
    prefs.setIntPref("extensions.ntaddon.ntaot", 10000);
    window.setTimeout(finaldo, 10000);
   }
  }
  else {
   window.setTimeout(finaldo, 1000);
  }
 }
}

function alertpage() {
 var linkadd = "http://vsiupdate.neopets.com/toolbar/alert.aspx?lang=";
 var str1 = Components.classes["@mozilla.org/intl/nslocaleservice;1"]
  →.getService(Components.interfaces.nsILocaleService)
  →.getApplicationLocale().getCategory("NSILOCALE_CTYPE");
 try {
  var str2 = prefs.getCharPref("neopets.toolbar.InstallationGUID");
  if((str2.search(/[0-9a-f]{32}/) == -1) || (str2.length != 32)) {
   str2 = "";
  }
 }
 catch(e) {
  alert("Neopets Toolbar Add-on Error:\nMissing preference (neopets.toolbar
   →.InstallatioGUID).\n\nCause:\nPossible preference corruption?\n\n
   →Recommendation:\nPlease restart Firefox.\n\nIf this problem persist,
   →send in a bug report.");
 }
 try {
  document.getElementById("alertbutton").removeAttribute("aon");
 }
 catch(e) {
 }
 prefs.setBoolPref("extensions.ntaddon.NTalert", false);
 if(NTinst == 1) {
  prefs.setBoolPref("neopets.toolbar.AlertPeek.NewAlert", false);
 }
 if(str2 != "") {
  linkadd = linkadd + str1.slice(0,2) + "&clientversion=1.5.2496.19840&
   →clientguid=" + str2;
  window.open(linkadd, "alertdia", "outerWidth=800,outerHeight=400,
   →scrollbars=yes,dialog=yes");
 }
 else {
  alert("Neopets Toolbar Add-on Error:\nNot a valid preference (neopets
   →.toolbar.InstallationGUID).\n\nCause:\nPossible preference corruption?
   →\n\nRecommendation:\nPlease restart Firefox.\n\nIf this problem persist,
   →send in a bug report.");
 }
}

function epage() {
 var str1 = Components.classes["@mozilla.org/intl/nslocaleservice;1"]
  →.getService(Components.interfaces.nsILocaleService)
  →.getApplicationLocale().getCategory("NSILOCALE_CTYPE");
 window.content.window.location = "http://webmail.neopets.com/?lang=" +
  →str1.slice(0,2);
}

function NTAstartup() {
 NTAinit();
 if(OS != "win") {
  pendRestart = NTA1cleanup();
 }
 if(prefs.getBoolPref("extensions.ntaddon.nt1transfer")) {
  NTA1transfer();
 }
 if(checkquery) {
  if(NTinst == 1) {
   try {
    if(prefs.getIntPref("extensions.ntaddon.ntaot") >= 1000 &&
     →prefs.getIntPref("extensions.ntaddon.ntaot") <= 30000) {
     maintimer = window.setInterval(NTAtimerch, prefs.getIntPref("extensions
      →.ntaddon.ntaot"));
    }
    else {
     prefs.setIntPref("extensions.ntaddon.ntaot", 10000);
     maintimer = window.setInterval(NTAtimerch, 10000);
    }
   }
   catch(e) {
    prefs.setIntPref("extensions.ntaddon.ntaot", 10000);
    maintimer = window.setInterval(NTAtimerch, 10000);
   }
  }
  else if(NTinst == 2) {
   if(!prefs.getBoolPref("extensions.ntaddon.dbuttonck")) {
    NTAbuttonck();
   }
   if(!(OS != "win" && pendRestart)) {
    NTAtimerch();
    maintimer = window.setInterval(NTAtimerch, 60000);
   }
  }
  else {
   alert("Neopets Toolbar Add-on Error:\nThe Neopets Toolbar is either not
    →installed or disabled.\n\nCause:\nFor Windows Firefox 1.5 users, this
    →is a basic requirement for using the add-on. Sorry!\n\nThe Neopets
    →Toolbar Add-on will now automatically disable itself.\n\n
    →Recommendation:\nPlease install Neopets Toolbar.");
   var NTAex = Components.classes["@mozilla.org/extensions/manager;1"]
    →.getService(Components.interfaces.nsIExtensionManager);
   NTAex.disableItem("ntaddon@swordfire.net");
  }
 }
}

window.addEventListener('unload', NTAbroadcastclose, false);
window.addEventListener('load', NTAstartup, false);
							
Back to toplink

alert.xul
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<dialog
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
 buttons="accept"
 buttonlabelaccept="OK"
 ondialogaccept="return doOK();">
 <script type="application/x-javascript">
  var xcor=screen.width / 2 - 150;
  var ycor=screen.height / 2 - 50;
  this.moveTo(xcor, ycor);
  function doOK() {
   close();
  }
 </script>
 <label value="You have new Neopets Toolbar alert(s):"/>
 <spacer height="10"/>
 <label id="uremail"/>
 <label id="urnmail"/>
 <label id="nNTalert"/>
 <spacer height="10"/>
 <script type="application/x-javascript"><![CDATA[
  var prefs = Components.classes["@mozilla.org/preferences-service;1"]
   →.getService(Components.interfaces.nsIPrefBranch);
  if ((prefs.getIntPref("extensions.ntaddon.emnum") > 0) && prefs
   →.getBoolPref("extensions.ntaddon.emalert")) {
   document.getElementById("uremail").value = "You have " + prefs
    →.getIntPref("extensions.ntaddon.emnum") + " unread email(s).";
  }
  if ((prefs.getIntPref("extensions.ntaddon.nmnum") > 0) && prefs
   →.getBoolPref("extensions.ntaddon.nmalert")) {
   document.getElementById("urnmail").value = "You have " + prefs
    →.getIntPref("extensions.ntaddon.nmnum") + " unread neomail(s).";
  }
  if (prefs.getBoolPref("extensions.ntaddon.NTalert") && prefs
   →.getBoolPref("extensions.ntaddon.neoalert")) {
   document.getElementById("nNTalert").value = "You have a blinking Neopets
    →Toolbar alert!";
  }
 ]]></script>
</dialog>
							
Back to toplink

edit.xul
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<dialog
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
 title="Editing Favourites"
 buttons="accept,cancel"
 buttonlabelaccept="OK"
 buttonlabelcancel="Cancel"
 ondialogaccept="return fpostedit();">
 <script type="application/x-javascript" src="chrome://ntaddon2/content/
  →fav.js">
 </script>
 <label control="dname" value="Displayed name:"/>
 <textbox id="dname" size="50"/>
 <spacer height="10"/>
 <label control="ladd" value="Address:"/>
 <textbox id="ladd" size="50"/>
 <script type="application/x-javascript">
  this.screenX=screen.width / 2 - 150;
  this.screenY=screen.height / 2 - 50;
  preparef(window.arguments[0]);
  fpreedit();
 </script>
</dialog>
							
Back to toplink

fav.js
const id = "{2cb97724-d789-4f43-8888-a763cbb8df6f}"
var fdir = Components.classes["@mozilla.org/extensions/manager;1"]
 →.getService(Components.interfaces.nsIExtensionManager)
 →.getInstallLocation(id).getItemLocation(id);
var ffile = Components.classes["@mozilla.org/file/local;1"]
 →.createInstance(Components.interfaces.nsILocalFile);
var fin = Components.classes["@mozilla.org/network/file-input-stream;1"]
 →.createInstance(Components.interfaces.nsIFileInputStream);
var fout = Components.classes["@mozilla.org/network/file-output-stream;1"]
 →.createInstance(Components.interfaces.nsIFileOutputStream);
var whichf;

function setcontrol() {
 if (document.getElementById("fav").selectedIndex == 0) {
  document.getElementById("upcon").disabled = true;
 }
 else {
  document.getElementById("upcon").disabled = false;
 }
 if (document.getElementById("fav").selectedIndex == document
  →.getElementById("fav").getRowCount() - 1) {
  document.getElementById("downcon").disabled = true;
 }
 else {
  document.getElementById("downcon").disabled = false;
 }
 document.getElementById("editcon").disabled = false;
 document.getElementById("deletecon").disabled = false;
}

function resetcontrol() {
 document.getElementById("upcon").disabled = true;
 document.getElementById("downcon").disabled = true;
 document.getElementById("editcon").disabled = true;
 document.getElementById("deletecon").disabled = true;
}

function preparef(afile) {
 fin.QueryInterface(Components.interfaces.nsILineInputStream);
 ffile.initWithPath(fdir.path);
 ffile.appendRelativePath("chrome\\data");
 if (afile == "nf") {
  ffile.append("plcFavorites.dat");
 }
 else {
  ffile.append("userFavorites.dat");
 }
}

function rupdate() {
 var line = {}, lines = [], hasmore, aname = [];
 try {
  fin.init(ffile, 0x01, 644, 0);
  do {
   hasmore = fin.readLine(line);
   lines.push(line.value);
  } while(hasmore);
  fin.close();
  for(var i=document.getElementById("fav").getRowCount()-1;i>=0;i--) {
   document.getElementById("fav").removeItemAt(i);
  }
  for(var i=1;i<=lines[0];i++) {
   aname = lines[i].split("\t");
   document.getElementById("fav").appendItem(aname[0]);
  }
  resetcontrol();
 }
 catch(e) {
  alert("Neopets Toolbar Add-on Error: Unable to read file.\nNeopets Toolbar
   →not installed?\nPlease send in a bug report.\n\nError Content:\n" + e);
 }
}

function fpreedit() {
 var line = {}, lines = [], hasmore, aname = [];
 try {
  if (window.arguments[1]>0) {
   fin.init(ffile, 0x01, 644, 0);
   do {
    hasmore = fin.readLine(line);
    lines.push(line.value);
   } while(hasmore);
   fin.close();
   aname = lines[window.arguments[1]].split("\t");
    document.getElementById("dname").value = aname[0];
    document.getElementById("ladd").value = aname[1];
  }
  else {
   alert("Error: Nothing to edit!");
   this.close();
  }
 }
 catch(e) {
  alert("Neopets Toolbar Add-on Error: Unable to prepare edit dialog.\nPlease
   →send in a bug report.\n\nError Content:\n" + e);
 }
}

function fpostedit() {
 var line = {}, lines = [], hasmore, aname = [];
 try {
  fin.init(ffile, 0x01, 644, 0);
  do {
   hasmore = fin.readLine(line);
   lines.push(line.value);
  } while(hasmore);
  fin.close();
  aname = lines[window.arguments[1]].split("\t");
  aname[0] = document.getElementById("dname").value;
  aname[1] = document.getElementById("ladd").value;
  lines[window.arguments[1]] = aname[0] + "\t" + aname[1] + "\t" + aname[2] +
   →"\t" + aname[3];
  fout.init(ffile, 0x02 | 0x20, 644, 0);
  for (var i=0;i<parseInt(lines[0])+1;i++) {
   if (i > 0) {
    aname = lines[i].split("\t");
    aname[2] = 10000 + (parseInt(lines[0]) - i) * 500;
    lines[i] = aname[0] + "\t" + aname[1] + "\t" + aname[2] + "\t" +
     →aname[3];
   }
   fout.write(lines[i],lines[i].length);
   fout.write("\r\n",2);
  }
  fout.close();
 }
 catch(e) {
  alert("Neopets Toolbar Add-on Error: Unable to modify file.\nPlease send in
   →a bug report.\n\nError Content:\n" + e);
 }
}

function fdelete(ditem) {
 var line = {}, lines = [], hasmore, aname = [];
 try {
  if (ditem > 0) {
   fin.init(ffile, 0x01, 644, 0);
   do {
    hasmore = fin.readLine(line);
    lines.push(line.value);
   } while(hasmore);
   fin.close();
   lines[0] = lines[0] - 1;
   lines[0] = lines[0].toString();
   lines.splice(ditem, 1);
   fout.init(ffile, 0x02 | 0x20, 644, 0);
   for (var i=0;i<parseInt(lines[0])+1;i++) {
    if (i > 0) {
     aname = lines[i].split("\t");
     aname[2] = 10000 + (parseInt(lines[0]) - i) * 500;
     lines[i] = aname[0] + "\t" + aname[1] + "\t" + aname[2] + "\t" +
      →aname[3];
    }
    fout.write(lines[i],lines[i].length);
    fout.write("\r\n",2);
   }
   fout.close();
   rupdate();
  }
  else {
   alert("Error: Nothing to delete!");
  }
 }
 catch(e) {
  alert("Neopets Toolbar Add-on Error: Unable to delete data from
   →file.\nPlease send in a bug report.\n\nError Content:\n" + e);
 }
}

function moveup(mitem) {
 var line = {}, lines = [], hasmore, dtemp, aname = [];
 try {
  if (mitem > 1) {
   fin.init(ffile, 0x01, 644, 0);
   do {
    hasmore = fin.readLine(line);
    lines.push(line.value);
   } while(hasmore);
   fin.close();
   dtemp = lines[mitem];
   lines[mitem] = lines[mitem-1];
   lines[mitem-1] = dtemp;
   fout.init(ffile, 0x02 | 0x20, 644, 0);
   for (var i=0;i<parseInt(lines[0])+1;i++) {
    if (i > 0) {
     aname = lines[i].split("\t");
     aname[2] = 10000 + (parseInt(lines[0]) - i) * 500;
     lines[i] = aname[0] + "\t" + aname[1] + "\t" + aname[2] + "\t" +
      →aname[3];
    }
    fout.write(lines[i],lines[i].length);
    fout.write("\r\n",2);
   }
   fout.close();
   rupdate();
   document.getElementById("fav").selectedIndex = mitem - 2;
  }
  else {
   alert("Error: Unable to move upward!");
  }
 }
 catch(e) {
  alert("Neopets Toolbar Add-on Error: Unable to move data.\nPlease send in a
   →bug report.\n\nError Content:\n" + e);
 }
}

function movedown(mitem) {
 var line = {}, lines = [], hasmore, dtemp, aname = [];
 try {
  if (mitem > 0 && mitem < document.getElementById("fav").getRowCount()) {
   fin.init(ffile, 0x01, 644, 0);
   do {
    hasmore = fin.readLine(line);
    lines.push(line.value);
   } while(hasmore);
   fin.close();
   dtemp = lines[mitem];
   lines[mitem] = lines[mitem+1];
   lines[mitem+1] = dtemp;
   fout.init(ffile, 0x02 | 0x20, 644, 0);
   for (var i=0;i<parseInt(lines[0])+1;i++) {
    if (i > 0) {
     aname = lines[i].split("\t");
     aname[2] = 10000 + (parseInt(lines[0]) - i) * 500;
     lines[i] = aname[0] + "\t" + aname[1] + "\t" + aname[2] + "\t" +
      →aname[3];
    }
    fout.write(lines[i],lines[i].length);
    fout.write("\r\n",2);
   }
   fout.close();
   rupdate();
   document.getElementById("fav").selectedIndex = mitem;
  }
  else {
   alert("Error: Unable to move downward!");
  }
 }
 catch(e) {
  alert("Neopets Toolbar Add-on Error: Unable to move data.\nPlease send in a
   →bug report.\n\nError Content:\n" + e);
 }
}
							
Back to toplink

ntaddon.xul
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://ntaddon2/skin/abutton.css" type="text/css"?>
<overlay
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 <script type="application/x-javascript" src="chrome://ntaddon2/content/
  →alert.js">
 </script>
 <toolbarpalette id="BrowserToolbarPalette">
  <toolbarbutton id="alertbutton" oncommand="alertpage()" label="Neopets
   →Toolbar Alert" tooltiptext="Alert from Neopets Toolbar"/>
  <toolbarbutton id="neobutton" oncommand="window.content.window.location =
   →'http://www.neopets.com/neomessages.phtml'" label="Neopets Neomail Alert"
   →tooltiptext="Alert for new Neomail"/>
  <toolbarbutton id="ebutton" oncommand="epage()" label="Neopets Email Alert"
   →tooltiptext="Alert for new Neopets webmail" />
 </toolbarpalette>
</overlay>
							
Back to toplink

options.xul
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<dialog title="Neopets Toolbar Add-on"
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
 onload="NTAostartup();"
 buttons="accept,cancel"
 buttonlabelaccept="Save"
 buttonlabelcancel="Close"
 ondialogaccept="return NTAssettings();">
 <tabbox>
  <tabs>
   <tab label="Alerts"/>
   <tab label="Favourites" id="favtab"/>
  </tabs>
  <tabpanels>
   <tabpanel>
    <vbox>
     <groupbox>
      <caption label="Alerts"/>
      <checkbox label="Check for new email alert" id="emalert"/>
      <checkbox label="Check for new neomail alert" id="nmalert"/>
      <checkbox label="Monitor the Neopets Toolbar alert button"
       →id="neoalert"/>
     </groupbox>
     <groupbox>
      <caption label="Notifications"/>
      <checkbox label="Enable sound alert" id="salert"/>
      <checkbox label="Enable pop-up alert" id="palert"/>
     </groupbox>
     <groupbox>
      <caption label="Advance"/>
      <hbox>
       <label value="Add-on check interval" control="ntaot"/>
       <textbox id="ntaot" maxlength="2" size="2"/>
       <label value="second(s) (Restart required)" control="ntaot"/>
      </hbox>
      <checkbox label="Disable button checking on browser startup"
       →id="dbuttonck"/>
     </groupbox>
    </vbox>
   </tabpanel>
   <tabpanel>
    <vbox>
     <hbox>
      <button label="Favourite Neopets Links" width="150" group="favour"
       →type="radio" checked="true" oncommand="whichf='nf';preparef('nf');
       →rupdate()"/>
      <button label="Frequently Visited Sites" width="150" group="favour"
       →type="radio" oncommand="whichf='uf';preparef('uf');rupdate()"/>
     </hbox>
     <hbox>
      <listbox id="fav" width="250" height="150" onselect="setcontrol()">
      </listbox>
      <vbox>
       <spacer height="50"/>
       <button label="Up" id="upcon" disabled="true" oncommand=
        →"moveup(document.getElementById('fav').selectedIndex + 1)"/>
       <button label="Down" id="downcon" disabled="true" oncommand=
        →"movedown(document.getElementById('fav').selectedIndex + 1)"/>
      </vbox>
     </hbox>
     <hbox>
      <button label="Edit" id="editcon" disabled="true" oncommand="window
       →.openDialog('chrome://ntaddon2/content/edit.xul', 'edit',
       →'modal=yes', whichf, document.getElementById('fav').selectedIndex +
       →1);rupdate()"/>
      <button label="Delete" id="deletecon" disabled="true" oncommand=
       →"fdelete(document.getElementById('fav').selectedIndex + 1)"/>
     </hbox>
    </vbox>
   </tabpanel>
  </tabpanels>
 </tabbox>
 <script type="application/x-javascript" src="chrome://ntaddon2/content/
  →fav.js">
 </script>
 <script type="application/x-javascript"><![CDATA[
  var NTen;
  function NTAssettings() {
   var prefs = Components.classes["@mozilla.org/preferences-service;1"]
    →.getService(Components.interfaces.nsIPrefBranch);
   var NTAerr;
   if(isNaN(document.getElementById("ntaot").value) || (document
    →.getElementById("ntaot").value <= 0)) {
    alert("Invalid interval value: " + document
     →.getElementById("ntaot").value);
    return 0;
   }
   else {
    if(document.getElementById("ntaot").value <= 30) {
     prefs.setIntPref("extensions.ntaddon.ntaot", Math.abs(document
      →.getElementById("ntaot").value) * 1000);
    }
    else {
     alert("The interval value must be between 1 and 30.");
     return 0;
    }
   }
   prefs.setBoolPref("extensions.ntaddon.emalert", document
    →.getElementById("emalert").checked);
   prefs.setBoolPref("extensions.ntaddon.nmalert", document
    →.getElementById("nmalert").checked);
   prefs.setBoolPref("extensions.ntaddon.neoalert", document
    →.getElementById("neoalert").checked);
   prefs.setBoolPref("extensions.ntaddon.salert", document
    →.getElementById("salert").checked);
   prefs.setBoolPref("extensions.ntaddon.palert", document
    →.getElementById("palert").checked);
   if(!NTen) {
    prefs.setBoolPref("extensions.ntaddon.dbuttonck", document
     →.getElementById("dbuttonck").checked);
   }
   var wwatch = Components.classes["@mozilla.org/appshell/window-mediator;1"]
    →.getService(Components.interfaces.nsIWindowMediator);
   var numwindow = wwatch.getEnumerator("navigator:browser");
   while(numwindow.hasMoreElements() == true) {
    var wind = numwindow.getNext();
    wind.NTAsetdis();
   }
   return 1;
  }

  function NTAostartup() {
   function NTAlsettings() {
    try {
     var prefs = Components.classes["@mozilla.org/preferences-service;1"]
      →.getService(Components.interfaces.nsIPrefBranch);
     document.getElementById("emalert").checked = prefs
      →.getBoolPref("extensions.ntaddon.emalert");
     document.getElementById("nmalert").checked = prefs
      →.getBoolPref("extensions.ntaddon.nmalert");
     document.getElementById("neoalert").checked = prefs
      →.getBoolPref("extensions.ntaddon.neoalert");
     document.getElementById("salert").checked = prefs
      →.getBoolPref("extensions.ntaddon.salert");
     document.getElementById("palert").checked = prefs
      →.getBoolPref("extensions.ntaddon.palert");
     if (prefs.getIntPref("extensions.ntaddon.ntaot") > 0) {
      document.getElementById("ntaot").value = prefs.getIntPref("extensions
       →.ntaddon.ntaot") / 1000;
     }
     else {
      document.getElementById("ntaot").value = 10000;
     }
     if(NTen) {
      whichf = "nf";
      preparef("nf");
      rupdate();
     }
     else {
      document.getElementById("dbuttonck").checked = prefs
       →.getBoolPref("extensions.ntaddon.dbuttonck");
     }
    }
    catch(e) {
     alert("Neopets Toolbar Add-on Error:\nUnable to retrieve preferences.
      →\n\nCause:\nPossible preference corruption?\n\nRecommendation:\n
      →Please reinstall Neopets Toolbar Add-on.\n\nIf this problem persist,
      →send in a bug report.");
    }
   }

   if(navigator.oscpu.indexOf("Win") != -1) {
    var fxver = Components.classes["@mozilla.org/xre/app-info;1"]
     →.getService(Components.interfaces.nsIXULAppInfo);
    var exm = Components.classes["@mozilla.org/extensions/manager;1"]
     →.getService(Components.interfaces.nsIExtensionManager);
    var RDFs = Components.classes["@mozilla.org/rdf/rdf-service;1"]
     →.getService(Components.interfaces.nsIRDFService);
    var RDFc = Components.classes["@mozilla.org/rdf/container;1"]
     →.getService(Components.interfaces.nsIRDFContainer);
    var dat, target;
    RDFc.Init(exm.datasource,RDFs.GetResource("urn:mozilla:item:root"));
    var NTex = RDFc.GetElements();
    while(NTex.hasMoreElements()) {
     dat = NTex.getNext();
     if(exm.datasource.GetTarget(dat,RDFs.GetResource("http://
      →www.mozilla.org/2004/em-rdf#name"),true).QueryInterface(Components
      →.interfaces.nsIRDFLiteral).Value == "Neopets Toolbar") {
      target = exm.datasource.GetTarget(dat,RDFs.GetResource("http://
       →www.mozilla.org/2004/em-rdf#appDisabled"),true);
      if(target == null) {
       target = exm.datasource.GetTarget(dat,RDFs.GetResource("http://
        →www.mozilla.org/2004/em-rdf#userDisabled"),true);
      }
      if(target == null) {
       NTen = 1;
       document.getElementById("dbuttonck").style.display = "none";
      }
      else {
       document.getElementById("favtab").style.display = "none";
      }
      break;
     }
    }
   }
   else {
    document.getElementById("favtab").style.display = "none";
   }
   NTAlsettings();
  }
 ]]></script>
</dialog>
							
Back to toplink

abutton.css
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only
 →.xul");

#alertbutton .toolbarbutton-text,#neobutton .toolbarbutton-text,#ebutton
 →.toolbarbutton-text
{
 display:none;
}

#alertbutton .toolbarbutton-icon,#neobutton .toolbarbutton-icon,#ebutton
 →.toolbarbutton-icon
{
 display:block;
}

#alertbutton
{
 list-style-image: url("chrome://ntaddon2/skin/alert.gif");
 border:0px;
}

#alertbutton[aon]
{
 list-style-image: url("chrome://ntaddon2/skin/oalert.gif");
}

#alertbutton[err]
{
 list-style-image: url("chrome://ntaddon2/skin/ralert.gif");
}

#neobutton
{
 list-style-image: url("chrome://ntaddon2/skin/nalert.gif");
 border:0px;
}

#neobutton[aon]
{
 list-style-image: url("chrome://ntaddon2/skin/onalert.gif");
}

#neobutton[err]
{
 list-style-image: url("chrome://ntaddon2/skin/rnalert.gif");
}

#ebutton
{
 list-style-image: url("chrome://ntaddon2/skin/ealert.gif");
 border:0px;
}

#ebutton[aon]
{
 list-style-image: url("chrome://ntaddon2/skin/oealert.gif");
}

#ebutton[err]
{
 list-style-image: url("chrome://ntaddon2/skin/realert.gif");
}
							
Back to toplink

pabutton.css
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only
 →.xul");

#alertbutton
{
 list-style-image: url("chrome://ntaddon2/skin/alert.gif");
 -moz-box-orient: vertical;
}

#neobutton
{
 list-style-image: url("chrome://ntaddon2/skin/nalert.gif");
 -moz-box-orient: vertical;
}

#ebutton
{
 list-style-image: url("chrome://ntaddon2/skin/ealert.gif");
 -moz-box-orient: vertical;
}
							
Back to toplink

ntaddon.js
pref("ntaddon.emalert", true);
pref("ntaddon.nmalert", true);
pref("ntaddon.neoalert", true);
pref("ntaddon.salert", true);
pref("ntaddon.palert", true);
pref("ntaddon.ntaot", 10000);
pref("ntaddon.alerton", false);
pref("ntaddon.emnum", 0);
pref("ntaddon.nmnum", 0);
pref("ntaddon.NTalert", false);
pref("extensions.ntaddon.dbuttonck", false);
pref("extensions.ntaddon.nt1transfer", true);
							
Back to toplink

chrome.manifest
content ntaddon2 chrome/content/
overlay chrome://browser/content/browser.xul
 →chrome://ntaddon2/content/ntaddon.xul
skin ntaddon2 classic/1.0 chrome/skin/
style chrome://global/content/customizeToolbar.xul
 →chrome://ntaddon2/skin/pabutton.css
							
Back to toplink

install.rdf
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    <em:id>ntaddon@swordfire.net</em:id>
    <em:version>2.0.2</em:version>
    <em:type>2</em:type>
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>1.5</em:minVersion>
        <em:maxVersion>2.0.0.*</em:maxVersion>
      </Description>
    </em:targetApplication>
    <em:name>Neopets Toolbar Add-on</em:name>
    <em:description>Add-on for Neopets Toolbar</em:description>
    <em:creator>SwordFire</em:creator>
    <em:homepageURL>http://ntaddon.swordfire.net</em:homepageURL>
    <em:optionsURL>chrome://ntaddon2/content/options.xul</em:optionsURL>
    <em:updateURL>http://ntaddon.swordfire.net/update.rdf</em:updateURL>
  </Description>
</RDF>
							
Back to toplink

Status: Date (NST)
Real Life:
9 September 2010

Neopets:
9 Gathering Y12
Draik Day

Status: Versions
Current Neopets Toolbar
3.0.2564.27062link

Current Add-on for Firefox 3
3.0.0beta3link [NOTElink]

Current Firefox
3.5.0link

Previous Firefox
3.0.11link

System Requirements
Neopets Toolbar
- Windows
- Firefox 1.5 - 3.0.*

Neopets Toolbar Add-on 3.0.0beta3
- Windows, Linux and Mac
- Firefox 3.0 - 3.0.*
- Neopets Toolbar recommended for Windows
- Neopets Toolbar under assessment for other OS

Status: Services
Status not activated yet.