Neoboard User Tagger

Local user tags for the neoboards

// ==UserScript==
// @name        Neoboard User Tagger
// @namespace   neotagger
// @description Local user tags for the neoboards
// @include     *://www.neopets.com/neoboards/*
// @version     1.1
// @grant       none
// @require https://greasyfork.org/scripts/34286-grant-none-shim/code/grant%20none%20shim.js?version=224672
// @require     https://ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js
// ==/UserScript==

var usersOnPage = [];
var savedTags = []; // [["username","tag"],["username","tag"]]

$(document).ready(function(){
  addStyle();
  loadSavedData();
  usersOnPage = $.merge($('a[href*="randomfriend.phtml?user="] > b').parent(), $('a[href*="userlookup.phtml?user="] > strong').parent());
  createTags();
});

function addStyle() {
  $("body").prepend("<style>.neotag{border: 1px solid; padding: 0px 3px 1px; border-radius: 3px; background: #FFFFFF; color: #4D4D4D; display: inline-block; cursor: pointer;} .neotag:hover{background: #C4DEFF;}</style>");
}

function loadSavedData() {
  if(GM_getValue("savedTags")){
    savedTags = JSON.parse(GM_getValue("savedTags"));
  }
}

function saveData() {
  GM_setValue("savedTags", JSON.stringify(savedTags));
}

function createTags() {
  // remove any existing tags so we can
  // add them with updated information
  $('.neotag').remove();
  for (var i = 0; i < usersOnPage.length; i++) {
    var tagText = "-";
    for (var j = 0; j < savedTags.length; j++) {
      if (savedTags[j][0] == getUsernameFromElement($(usersOnPage[i]))) {
        tagText = savedTags[j][1];
      }
    }
    $(usersOnPage[i]).after(" <div class='neotag' data-username='" + getUsernameFromElement($(usersOnPage[i])) + "'>" + tagText + "</div>");
  }
  $('.neotag').click(function(){setTag(this);});
}

function getUsernameFromElement(element) {
  return $(element).attr("href").split("?user=")[1];
}

function setTag(tag) {
  var setTagUsername = $(tag).attr("data-username");
  var currentTag = "";
  for (var i = 0; i < savedTags.length; i++) {
    if (savedTags[i][0] == setTagUsername) {
      currentTag = savedTags[i][1];
      break;
    }
  }
  var newTag = prompt("Enter a tag for " + setTagUsername, currentTag);
  if (newTag.trim() == "") {
    for (var i = savedTags.length - 1; i > 0; i--) {
      if (savedTags[i][0] == setTagUsername) {
        savedTags.splice(i, 1);
      }
    }
  } else {
    var foundName = false;
    for (var i = 0; i < savedTags.length; i++) {
      if (savedTags[i][0] == setTagUsername) {
        foundName = true;
        savedTags[i][1] = newTag;
        break;
      }
    }
    if (foundName != true) {
      savedTags.push([setTagUsername,newTag]);
    }
  }
  saveData();
  createTags();
}